Merge pull request #3819 from arnova/subtitles_for_stacks
authorjmarshallnz <jcmarsha@gmail.com>
Wed, 5 Feb 2014 05:22:42 +0000 (21:22 -0800)
committerjmarshallnz <jcmarsha@gmail.com>
Wed, 5 Feb 2014 05:22:42 +0000 (21:22 -0800)
changed: Add logic to handle subtitles for stacked files

936 files changed:
.gitignore
CONTRIBUTING.md
Makefile.in
Makefile.include.in
XBMC.xcodeproj/project.pbxproj
addons/metadata.local/icon.png [new file with mode: 0644]
addons/repository.pvr-android.xbmc.org/addon.xml
addons/repository.pvr-ios.xbmc.org/addon.xml
addons/repository.pvr-osx32.xbmc.org/addon.xml
addons/repository.pvr-osx64.xbmc.org/addon.xml
addons/repository.pvr-win32.xbmc.org/addon.xml
addons/repository.xbmc.org/addon.xml
addons/screensaver.rsxs.euphoria/addon.xml
addons/screensaver.rsxs.plasma/addon.xml
addons/screensaver.rsxs.solarwinds/addon.xml
addons/screensaver.xbmc.builtin.black/addon.xml
addons/screensaver.xbmc.builtin.dim/addon.xml
addons/screensaver.xbmc.builtin.dim/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/screensaver.xbmc.builtin.dim/resources/language/Spanish (Venezuela)/strings.po [new file with mode: 0644]
addons/script.module.pil/addon.xml
addons/skin.confluence/720p/DialogAddonSettings.xml
addons/skin.confluence/720p/DialogPVRChannelManager.xml
addons/skin.confluence/720p/DialogPVRGroupManager.xml
addons/skin.confluence/720p/DialogPeripheralManager.xml
addons/skin.confluence/720p/DialogProgress.xml
addons/skin.confluence/720p/DialogSeekBar.xml
addons/skin.confluence/720p/DialogSelect.xml
addons/skin.confluence/720p/DialogSubtitles.xml
addons/skin.confluence/720p/DialogYesNo.xml
addons/skin.confluence/720p/FileBrowser.xml
addons/skin.confluence/720p/Home.xml
addons/skin.confluence/720p/LoginScreen.xml
addons/skin.confluence/720p/MyMusicNav.xml
addons/skin.confluence/720p/MyVideoNav.xml
addons/skin.confluence/720p/MyWeather.xml
addons/skin.confluence/720p/Settings.xml
addons/skin.confluence/720p/SettingsCategory.xml
addons/skin.confluence/720p/SettingsProfile.xml
addons/skin.confluence/720p/SettingsSystemInfo.xml
addons/skin.confluence/720p/SkinSettings.xml
addons/skin.confluence/720p/VideoOSD.xml
addons/skin.confluence/720p/ViewsPVR.xml
addons/skin.confluence/720p/defaults.xml
addons/skin.confluence/720p/includes.xml
addons/skin.confluence/720p/script-globalsearch-main.xml
addons/skin.confluence/720p/weather/10DayForecast.xml
addons/skin.confluence/720p/weather/36HourForecast.xml
addons/skin.confluence/720p/weather/HourlyForecast.xml
addons/skin.confluence/720p/weather/MapAlerts.xml
addons/skin.confluence/720p/weather/WeekendForecast.xml
addons/skin.confluence/addon.xml
addons/skin.confluence/changelog.txt
addons/skin.confluence/colors/defaults.xml
addons/skin.confluence/icon.png
addons/skin.confluence/language/Arabic/strings.po
addons/skin.confluence/language/Bulgarian/strings.po
addons/skin.confluence/language/Catalan/strings.po
addons/skin.confluence/language/Chinese (Simple)/strings.po
addons/skin.confluence/language/Chinese (Traditional)/strings.po
addons/skin.confluence/language/Croatian/strings.po
addons/skin.confluence/language/Czech/strings.po
addons/skin.confluence/language/Danish/strings.po
addons/skin.confluence/language/Dutch/strings.po
addons/skin.confluence/language/English (US)/strings.po
addons/skin.confluence/language/English/strings.po
addons/skin.confluence/language/Estonian/strings.po
addons/skin.confluence/language/Finnish/strings.po
addons/skin.confluence/language/French (Canada)/strings.po [new file with mode: 0644]
addons/skin.confluence/language/French/strings.po
addons/skin.confluence/language/Galician/strings.po
addons/skin.confluence/language/German/strings.po
addons/skin.confluence/language/Greek/strings.po
addons/skin.confluence/language/Hebrew/strings.po
addons/skin.confluence/language/Hungarian/strings.po
addons/skin.confluence/language/Italian/strings.po
addons/skin.confluence/language/Japanese/strings.po
addons/skin.confluence/language/Korean/strings.po
addons/skin.confluence/language/Latvian/strings.po
addons/skin.confluence/language/Lithuanian/strings.po
addons/skin.confluence/language/Polish/strings.po
addons/skin.confluence/language/Portuguese (Brazil)/strings.po
addons/skin.confluence/language/Portuguese/strings.po
addons/skin.confluence/language/Russian/strings.po
addons/skin.confluence/language/Slovak/strings.po
addons/skin.confluence/language/Slovenian/strings.po
addons/skin.confluence/language/Spanish (Argentina)/strings.po
addons/skin.confluence/language/Spanish (Venezuela)/strings.po [new file with mode: 0644]
addons/skin.confluence/language/Spanish/strings.po
addons/skin.confluence/language/Swedish/strings.po
addons/skin.confluence/language/Tajik/strings.po
addons/skin.confluence/language/Thai/strings.po
addons/skin.confluence/language/Turkish/strings.po
addons/skin.confluence/language/Ukrainian/strings.po
addons/skin.confluence/media/GlassTitleBar.png [deleted file]
addons/skin.confluence/media/dialogheader.png
addons/skin.touched
addons/visualization.dxspectrum/addon.xml
addons/visualization.dxspectrum/resources/language/Bosnian/strings.po
addons/visualization.dxspectrum/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.dxspectrum/resources/language/Hebrew/strings.po
addons/visualization.dxspectrum/resources/language/Slovenian/strings.po
addons/visualization.fishbmc/addon.xml
addons/visualization.fishbmc/changelog.txt
addons/visualization.fishbmc/resources/language/Afrikaans/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Albanian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Amharic/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Arabic/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Azerbaijani/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Basque/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Belarusian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Bosnian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Bulgarian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Burmese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Catalan/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Chinese (Simple)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Chinese (Traditional)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Croatian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Czech/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Danish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Dutch/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/English (US)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/English/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/English/strings.xml [deleted file]
addons/visualization.fishbmc/resources/language/Esperanto/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Estonian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Faroese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Finnish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/French/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Galician/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/German/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Greek/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Hebrew/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Hindi (Devanagiri)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Hungarian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Icelandic/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Indonesian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Italian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Japanese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Korean/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Latvian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Lithuanian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Macedonian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Maltese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Norwegian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Persian (Iran)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Persian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Polish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Portuguese (Brazil)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Portuguese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Romanian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Russian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Serbian (Cyrillic)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Serbian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Slovak/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Slovenian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Spanish (Argentina)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Spanish (Mexico)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Spanish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Swedish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Tajik/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Tamil (India)/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Thai/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Turkish/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Ukrainian/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Uzbek/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Vietnamese/strings.po [new file with mode: 0644]
addons/visualization.fishbmc/resources/language/Welsh/strings.po [new file with mode: 0644]
addons/visualization.glspectrum/addon.xml
addons/visualization.glspectrum/resources/language/Bosnian/strings.po
addons/visualization.glspectrum/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.glspectrum/resources/language/Hebrew/strings.po
addons/visualization.glspectrum/resources/language/Slovenian/strings.po
addons/visualization.milkdrop/addon.xml
addons/visualization.milkdrop/resources/language/Catalan/strings.po
addons/visualization.milkdrop/resources/language/Estonian/strings.po
addons/visualization.milkdrop/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.milkdrop/resources/language/Latvian/strings.po [new file with mode: 0644]
addons/visualization.milkdrop/resources/language/Slovenian/strings.po
addons/visualization.projectm/addon.xml
addons/visualization.projectm/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.projectm/resources/language/Latvian/strings.po
addons/visualization.projectm/resources/language/Slovenian/strings.po
addons/visualization.vortex/addon.xml [new file with mode: 0644]
addons/visualization.vortex/icon.png [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/AlbumArtCube.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/AlbumArtCubeRain.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/AlbumArtStretch.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/AlbumArtWaveSpectrum.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/AlbumArtZoomer.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Awakenings.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Block.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/ChessMania.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeBlowOut.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeGrid.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeGridStrobe.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeGridWire.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeRain.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeSlide.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/CubeTunnel.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Cubes.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/DynamicCubeTunnel.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/FlipBoth.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/HamsterMatic.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/MentalHangover.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/MeteorShower.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/MiddleGrid.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/SingingSkull.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Slide.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/SpaceHarrier.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Speakers.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/SpectrumCylinder.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/SpectrumField.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/SpectrumSphere.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Sphere.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Square.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/StereoSpectrum.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/VoicePrintDonut.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WalkingCube.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WarpDrive.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WarpDriveTwist.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Wave.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WaveRing.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WaveScope.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/WaveZoomer.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/Woofer.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/XBMCRain.vtx [new file with mode: 0644]
addons/visualization.vortex/resources/Presets/tunnel.tra [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Plasma_edge.jpg [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD1.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD2.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD3.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD4.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD5.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD6.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD7.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Skull_JawUD8.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Smiley.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Speaker.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Tex_Edge.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/Vortex_Credits.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/alien.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/aqua_ravines.jpg [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/bluestrip.dds [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/checker.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/checker_transp.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/env2.jpg [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/env3.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/env3_darker.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/huemap.jpg [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/skull.png [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/sky.dds [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/skybox.dds [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/splash_original.dds [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/trail2.dds [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/vortex-v.jpg [new file with mode: 0644]
addons/visualization.vortex/resources/Textures/xbmc_icon.png [new file with mode: 0644]
addons/visualization.vortex/resources/language/Afrikaans/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Albanian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Amharic/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Arabic/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Belarusian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Bulgarian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Burmese/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Catalan/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Chinese (Simple)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Chinese (Traditional)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Croatian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Czech/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Danish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Dutch/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/English (US)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/English/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Estonian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Finnish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/French/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Galician/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/German/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Greek/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Hebrew/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Hungarian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Icelandic/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Indonesian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Italian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Japanese/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Korean/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Latvian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Lithuanian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Macedonian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Norwegian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Polish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Portuguese (Brazil)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Portuguese/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Romanian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Russian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Slovak/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Slovenian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Spanish (Argentina)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Spanish (Mexico)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Spanish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Swedish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Tajik/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Tamil (India)/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Thai/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Turkish/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Ukrainian/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Vietnamese/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/language/Welsh/strings.po [new file with mode: 0644]
addons/visualization.vortex/resources/settings.xml [new file with mode: 0644]
addons/visualization.waveform/addon.xml
addons/webinterface.default/addon.xml
addons/xbmc.addon/addon.xml
addons/xbmc.debug/addon.xml
addons/xbmc.debug/resources/language/French (Canada)/strings.po [new file with mode: 0644]
addons/xbmc.debug/resources/language/Slovenian/strings.po [new file with mode: 0644]
addons/xbmc.debug/resources/language/Spanish (Argentina)/strings.po [new file with mode: 0644]
addons/xbmc.json/addon.xml
addons/xbmc.pvr/addon.xml
addons/xbmc.python/addon.xml
codegenerator.mk
configure.in
docs/README.android
docs/README.linux
docs/README.ubuntu
language/Afrikaans/strings.po
language/Albanian/strings.po
language/Amharic/strings.po
language/Arabic/strings.po
language/Azerbaijani/strings.po
language/Basque/strings.po
language/Belarusian/strings.po
language/Bosnian/strings.po
language/Bulgarian/strings.po
language/Burmese/strings.po
language/Catalan/strings.po
language/Chinese (Simple)/strings.po
language/Chinese (Traditional)/strings.po
language/Croatian/strings.po
language/Czech/strings.po
language/Danish/strings.po
language/Dutch/strings.po
language/English (US)/strings.po
language/English/strings.po
language/Esperanto/strings.po
language/Estonian/strings.po
language/Faroese/strings.po
language/Finnish/strings.po
language/French (Canada)/strings.po [new file with mode: 0644]
language/French/strings.po
language/Galician/strings.po
language/German/strings.po
language/Greek/strings.po
language/Hebrew/strings.po
language/Hindi (Devanagiri)/strings.po
language/Hungarian/strings.po
language/Icelandic/strings.po
language/Indonesian/strings.po
language/Italian/strings.po
language/Japanese/strings.po
language/Korean/strings.po
language/Latvian/strings.po
language/Lithuanian/strings.po
language/Macedonian/strings.po
language/Malay/strings.po
language/Maltese/strings.po
language/Norwegian/strings.po
language/Persian (Iran)/strings.po
language/Polish/strings.po
language/Portuguese (Brazil)/strings.po
language/Portuguese/strings.po
language/Romanian/strings.po
language/Russian/strings.po
language/Serbian (Cyrillic)/strings.po
language/Serbian/strings.po
language/Slovak/strings.po
language/Slovenian/langinfo.xml
language/Slovenian/strings.po
language/Spanish (Argentina)/strings.po
language/Spanish (Mexico)/strings.po
language/Spanish/strings.po
language/Swedish/strings.po
language/Tajik/strings.po
language/Tamil (India)/strings.po
language/Thai/strings.po
language/Turkish/strings.po
language/Ukrainian/strings.po
language/Uzbek/strings.po
language/Vietnamese (Viet Nam)/strings.po
language/Vietnamese/strings.po
language/Welsh/strings.po
lib/DllAvCodec.h
lib/DllAvFilter.h
lib/DllAvFormat.h
lib/DllAvUtil.h
lib/DllPostProc.h
lib/DllSwResample.h
lib/DllSwScale.h
lib/Makefile.in
lib/cximage-6.0/CxImage/DllInterface.cpp
lib/ffmpeg/libavcodec/aacdec.c
lib/ffmpeg/libavcodec/dxva2.h
lib/ffmpeg/libavcodec/dxva2_mpeg2.c
lib/ffmpeg/libavformat/hls.c
lib/ffmpeg/libavformat/http.c
lib/ffmpeg/libavformat/mpegts.c
lib/ffmpeg/patches/0016-Speed-up-mpegts-av_find_stream_info.patch
lib/ffmpeg/patches/0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch [deleted file]
lib/ffmpeg/patches/0019-dxva-mpeg2-speed-up-slice-allocation.patch [deleted file]
lib/ffmpeg/patches/0058-backport-fixed-not-keeping-custom-http-headers.patch [new file with mode: 0644]
lib/ffmpeg/patches/0060-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch [new file with mode: 0644]
lib/ffmpeg/patches/0060-mpegts-stop-analyzing-when-pmt-for-all-programs-have.patch [new file with mode: 0644]
lib/ffmpeg/patches/0061-ffmpeg-backport-Correctly-handle-cookies-that-specify-a-sub-domain.patch [new file with mode: 0644]
lib/ffmpeg/patches/0062-backport-dxva2-bump-max-number-of-slices.patch [new file with mode: 0644]
lib/libUPnP/Platinum/Source/Devices/MediaServer/PltMediaItem.cpp
lib/libcec/Makefile
lib/libdvd/build-xbmc-win32.sh
lib/libdvd/dvdread-config [new file with mode: 0755]
lib/libexif/IptcParse.cpp
lib/libnfs/Makefile [deleted file]
lib/xbmc-dll-symbols/DllAvFormat.c
m4/xbmc_arch.m4
project/BuildDependencies/scripts/0_package.list
project/BuildDependencies/scripts/libcec_d.txt
project/BuildDependencies/scripts/mysqlclient_d.bat [deleted file]
project/BuildDependencies/scripts/mysqlclient_d.txt [deleted file]
project/BuildDependencies/scripts/tinyxml_d.bat [deleted file]
project/BuildDependencies/scripts/tinyxml_d.txt [deleted file]
project/VS2010Express/XBMC for Windows.sln
project/VS2010Express/XBMC.vcxproj
project/VS2010Express/XBMC.vcxproj.filters
project/Win32BuildSetup/BuildSetup.bat
project/Win32BuildSetup/XBMC for Windows.nsi
project/Win32BuildSetup/buildpvraddons.bat
system/Lircmap.xml
system/keymaps/keyboard.xml
system/keymaps/remote.xml
system/keymaps/touchscreen.xml
system/library/video/musicvideos/albums.xml
system/library/video/musicvideos/artists.xml
system/settings/android.xml
system/settings/darwin.xml
system/settings/darwin_ios.xml
system/settings/rbp.xml
system/settings/settings.xml
system/settings/win32.xml
tools/EventClients/Clients/WiiRemote/CWIID_WiiRemote.cpp
tools/EventClients/Clients/Xbox360 Controller/Xbox360EventClient.cpp
tools/TexturePacker/SDL_anigif.cpp
tools/android/packaging/Makefile
tools/android/packaging/xbmc/AndroidManifest.xml
tools/android/packaging/xbmc/src/org/xbmc/xbmc/Main.java
tools/buildsteps/win32/prepare-env.bat
tools/codegenerator/Helper.groovy
tools/codegenerator/SwigTypeParser.groovy
tools/darwin/Configurations/App-iOS.xcconfig
tools/darwin/Configurations/App.xcconfig
tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
tools/darwin/packaging/xbmc-osx/mkdmg-xbmc-osx.sh
tools/depends/README
tools/depends/configure.in
tools/depends/target/Makefile
tools/depends/target/boost/Makefile
tools/depends/target/boost/fix_shared_ptr_multithread.patch [new file with mode: 0644]
tools/depends/target/libcec/Makefile
tools/depends/target/libmpeg2/Makefile
tools/depends/target/libplist/Makefile
tools/depends/target/libsdl/05-x11-xdata32.patch [new file with mode: 0644]
tools/depends/target/libsdl/Makefile
tools/depends/target/libxslt/Makefile [new file with mode: 0644]
tools/depends/target/pythonmodule-pil/Makefile
tools/depends/target/xbmc-pvr-addons/Makefile
tools/depends/target/xbmc/Makefile
xbmc/Application.cpp
xbmc/ApplicationMessenger.cpp
xbmc/ApplicationMessenger.h
xbmc/ApplicationPlayer.cpp
xbmc/ApplicationPlayer.h
xbmc/FileItem.cpp
xbmc/GUIInfoManager.cpp
xbmc/GUIInfoManager.h
xbmc/GUIPassword.cpp
xbmc/PasswordManager.cpp
xbmc/TextureCache.cpp
xbmc/TextureCache.h
xbmc/TextureCacheJob.cpp
xbmc/TextureCacheJob.h
xbmc/URL.cpp
xbmc/URL.h
xbmc/Util.cpp
xbmc/XBDateTime.cpp
xbmc/XBDateTime.h
xbmc/addons/Addon.cpp
xbmc/addons/AddonDatabase.cpp
xbmc/addons/AddonDatabase.h
xbmc/addons/AddonInstaller.cpp
xbmc/addons/AddonInstaller.h
xbmc/addons/AddonVersion.cpp
xbmc/addons/AddonVersion.h
xbmc/addons/GUIDialogAddonInfo.cpp
xbmc/addons/GUIDialogAddonSettings.cpp
xbmc/addons/GUIDialogAddonSettings.h
xbmc/addons/Repository.cpp
xbmc/addons/Repository.h
xbmc/addons/Scraper.cpp
xbmc/addons/Visualisation.cpp
xbmc/addons/Visualisation.h
xbmc/addons/include/xbmc_stream_utils.hpp
xbmc/android/activity/AndroidKey.cpp
xbmc/android/activity/AndroidKey.h
xbmc/android/jni/AudioFormat.cpp [new file with mode: 0644]
xbmc/android/jni/AudioFormat.h [new file with mode: 0644]
xbmc/android/jni/AudioManager.h
xbmc/android/jni/AudioTrack.cpp [new file with mode: 0644]
xbmc/android/jni/AudioTrack.h [new file with mode: 0644]
xbmc/android/jni/Context.cpp
xbmc/android/jni/KeyCharacterMap.cpp [new file with mode: 0644]
xbmc/android/jni/KeyCharacterMap.h [new file with mode: 0644]
xbmc/android/jni/Makefile.in
xbmc/cores/AudioEngine/AEFactory.cpp
xbmc/cores/AudioEngine/AEFactory.h
xbmc/cores/AudioEngine/AESinkFactory.cpp
xbmc/cores/AudioEngine/AESinkFactory.h
xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESound.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESound.h
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAEHALOSX.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAEHALOSX.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAEStream.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioGraph.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioGraph.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioHardware.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioHardware.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioStream.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioStream.h
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioUnit.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioUnit.h
xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp [deleted file]
xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.cpp [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.h [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.cpp [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.h [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.cpp [deleted file]
xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.h [deleted file]
xbmc/cores/AudioEngine/Interfaces/AE.h
xbmc/cores/AudioEngine/Interfaces/AESink.h
xbmc/cores/AudioEngine/Interfaces/AESound.h
xbmc/cores/AudioEngine/Makefile.in
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
xbmc/cores/AudioEngine/Sinks/AESinkALSA.h
xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h
xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp
xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.h
xbmc/cores/AudioEngine/Sinks/AESinkNULL.cpp
xbmc/cores/AudioEngine/Sinks/AESinkNULL.h
xbmc/cores/AudioEngine/Sinks/AESinkOSS.cpp
xbmc/cores/AudioEngine/Sinks/AESinkOSS.h
xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp [new file with mode: 0644]
xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h [new file with mode: 0644]
xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp [new file with mode: 0644]
xbmc/cores/AudioEngine/Sinks/AESinkPi.h [new file with mode: 0644]
xbmc/cores/AudioEngine/Sinks/AESinkProfiler.cpp
xbmc/cores/AudioEngine/Sinks/AESinkProfiler.h
xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.h
xbmc/cores/AudioEngine/Utils/AEAudioFormat.h
xbmc/cores/AudioEngine/Utils/AEChannelInfo.cpp
xbmc/cores/AudioEngine/Utils/AEChannelInfo.h
xbmc/cores/DllLoader/Win32DllLoader.cpp
xbmc/cores/DllLoader/exports/emu_msvcrt.h
xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
xbmc/cores/ExternalPlayer/ExternalPlayer.cpp
xbmc/cores/ExternalPlayer/ExternalPlayer.h
xbmc/cores/IPlayer.h
xbmc/cores/VideoRenderers/BaseRenderer.cpp
xbmc/cores/VideoRenderers/BaseRenderer.h
xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
xbmc/cores/VideoRenderers/LinuxRendererGL.h
xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
xbmc/cores/VideoRenderers/LinuxRendererGLES.h
xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp
xbmc/cores/VideoRenderers/OverlayRendererUtil.cpp
xbmc/cores/VideoRenderers/OverlayRendererUtil.h
xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.cpp
xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.h
xbmc/cores/VideoRenderers/WinRenderer.cpp
xbmc/cores/VideoRenderers/WinRenderer.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.h
xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DllLibMpeg2.h
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxHTSP.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.h
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFile.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.h
xbmc/cores/dvdplayer/DVDOverlayRenderer.cpp
xbmc/cores/dvdplayer/DVDPlayer.cpp
xbmc/cores/dvdplayer/DVDPlayer.h
xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
xbmc/cores/dvdplayer/DVDSubtitles/DVDSubtitleStream.cpp
xbmc/cores/omxplayer/OMXAudio.cpp
xbmc/cores/omxplayer/OMXAudio.h
xbmc/cores/omxplayer/OMXImage.cpp
xbmc/cores/omxplayer/OMXImage.h
xbmc/cores/omxplayer/OMXPlayer.cpp
xbmc/cores/omxplayer/OMXPlayer.h
xbmc/cores/omxplayer/OMXPlayerAudio.cpp
xbmc/cores/omxplayer/OMXPlayerVideo.cpp
xbmc/cores/omxplayer/OMXPlayerVideo.h
xbmc/cores/omxplayer/OMXVideo.cpp
xbmc/cores/omxplayer/omxplayer_advancedsettings.xml
xbmc/cores/paplayer/CachingCodec.h
xbmc/cores/paplayer/CodecFactory.cpp
xbmc/cores/paplayer/FLACcodec.cpp
xbmc/cores/paplayer/PAPlayer.cpp
xbmc/cores/paplayer/PAPlayer.h
xbmc/cores/playercorefactory/PlayerCoreConfig.h
xbmc/cores/playercorefactory/PlayerSelectionRule.cpp
xbmc/dbwrappers/Database.cpp
xbmc/dbwrappers/Database.h
xbmc/dbwrappers/DatabaseQuery.cpp
xbmc/dbwrappers/DatabaseQuery.h
xbmc/dbwrappers/mysqldataset.cpp
xbmc/dialogs/GUIDialogBoxBase.cpp
xbmc/dialogs/GUIDialogContextMenu.h
xbmc/dialogs/GUIDialogGamepad.cpp
xbmc/dialogs/GUIDialogNumeric.cpp
xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp
xbmc/epg/Epg.cpp
xbmc/epg/EpgDatabase.cpp
xbmc/epg/EpgInfoTag.cpp
xbmc/epg/GUIEPGGridContainer.cpp
xbmc/epg/GUIEPGGridContainer.h
xbmc/filesystem/AFPFile.cpp
xbmc/filesystem/AFPFile.h
xbmc/filesystem/BlurayDirectory.cpp
xbmc/filesystem/CurlFile.cpp
xbmc/filesystem/CurlFile.h
xbmc/filesystem/DAVDirectory.cpp
xbmc/filesystem/DirectoryFactory.cpp
xbmc/filesystem/DllLibNfs.h
xbmc/filesystem/FavouritesDirectory.cpp
xbmc/filesystem/File.cpp
xbmc/filesystem/File.h
xbmc/filesystem/FileDirectoryFactory.cpp
xbmc/filesystem/FileFactory.cpp
xbmc/filesystem/HTTPDirectory.cpp
xbmc/filesystem/MultiPathDirectory.cpp
xbmc/filesystem/MusicDatabaseFile.cpp
xbmc/filesystem/NFSDirectory.cpp
xbmc/filesystem/NFSFile.cpp
xbmc/filesystem/NFSFile.h
xbmc/filesystem/RTVDirectory.cpp
xbmc/filesystem/SAPDirectory.cpp
xbmc/filesystem/SMBDirectory.cpp
xbmc/filesystem/SmbFile.cpp
xbmc/filesystem/StackDirectory.cpp
xbmc/filesystem/UDFFile.cpp
xbmc/filesystem/UPnPDirectory.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeGrouped.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideosOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp
xbmc/filesystem/ZeroconfDirectory.cpp
xbmc/filesystem/test/Makefile
xbmc/filesystem/test/TestNfsFile.cpp [new file with mode: 0644]
xbmc/filesystem/udf25.cpp
xbmc/filesystem/udf25.h
xbmc/guilib/GUIBaseContainer.cpp
xbmc/guilib/GUIBaseContainer.h
xbmc/guilib/GUIButtonControl.cpp
xbmc/guilib/GUIControlFactory.cpp
xbmc/guilib/GUIFontTTFGL.cpp
xbmc/guilib/GUIInfoTypes.cpp
xbmc/guilib/GUIKeyboardFactory.cpp
xbmc/guilib/GUIListGroup.cpp
xbmc/guilib/GUIListItem.cpp
xbmc/guilib/GUITextBox.cpp
xbmc/guilib/GUITextBox.h
xbmc/guilib/GUITextLayout.cpp
xbmc/guilib/GUITextLayout.h
xbmc/guilib/GUITexture.cpp
xbmc/guilib/GUITextureGL.cpp
xbmc/guilib/GUIWindow.cpp
xbmc/guilib/GUIWindow.h
xbmc/guilib/GUIWindowManager.cpp
xbmc/guilib/GUIWindowManager.h
xbmc/guilib/Geometry.h
xbmc/guilib/Texture.cpp
xbmc/guilib/Texture.h
xbmc/guilib/TextureManager.cpp
xbmc/guilib/TextureManager.h
xbmc/guilib/TexturePi.cpp
xbmc/guilib/TexturePi.h
xbmc/guilib/imagefactory.cpp
xbmc/guilib/imagefactory.h
xbmc/input/linux/LIRC.cpp
xbmc/interfaces/Builtins.cpp
xbmc/interfaces/info/InfoBool.cpp [new file with mode: 0644]
xbmc/interfaces/info/InfoBool.h
xbmc/interfaces/info/Makefile
xbmc/interfaces/json-rpc/AudioLibrary.cpp
xbmc/interfaces/json-rpc/FileItemHandler.cpp
xbmc/interfaces/json-rpc/JSONServiceDescription.h
xbmc/interfaces/json-rpc/ServiceDescription.h
xbmc/interfaces/json-rpc/VideoLibrary.cpp
xbmc/interfaces/json-rpc/methods.json
xbmc/interfaces/json-rpc/types.json
xbmc/interfaces/legacy/Control.cpp
xbmc/interfaces/legacy/Control.h
xbmc/interfaces/legacy/Dialog.cpp
xbmc/interfaces/legacy/Dialog.h
xbmc/interfaces/legacy/Dictionary.h
xbmc/interfaces/legacy/ListItem.cpp
xbmc/interfaces/legacy/ListItem.h
xbmc/interfaces/legacy/Window.cpp
xbmc/interfaces/legacy/Window.h
xbmc/interfaces/legacy/WindowDialog.cpp
xbmc/interfaces/legacy/WindowXML.cpp
xbmc/interfaces/python/PythonSwig.cpp.template
xbmc/interfaces/python/swig.cpp
xbmc/interfaces/python/swig.h
xbmc/interfaces/python/typemaps/python.Alternative.intm
xbmc/interfaces/python/typemaps/python.Alternative.outtm
xbmc/interfaces/python/typemaps/python.Tuple.intm
xbmc/interfaces/python/typemaps/python.Tuple.outtm
xbmc/interfaces/python/typemaps/python.boost_shared_ptr.outtm
xbmc/interfaces/python/typemaps/python.dict.intm
xbmc/interfaces/python/typemaps/python.map.intm
xbmc/interfaces/python/typemaps/python.vector.intm
xbmc/interfaces/python/typemaps/python.vector.outtm
xbmc/interfaces/swig/AddonModuleXbmc.i
xbmc/interfaces/swig/AddonModuleXbmcaddon.i
xbmc/interfaces/swig/AddonModuleXbmcgui.i
xbmc/interfaces/swig/AddonModuleXbmcplugin.i
xbmc/interfaces/swig/AddonModuleXbmcvfs.i
xbmc/linux/HALManager.cpp
xbmc/linux/RBP.cpp
xbmc/linux/RBP.h
xbmc/listproviders/StaticProvider.cpp
xbmc/music/Album.cpp
xbmc/music/Album.h
xbmc/music/Artist.cpp
xbmc/music/Artist.h
xbmc/music/MusicDatabase.cpp
xbmc/music/MusicDatabase.h
xbmc/music/MusicInfoLoader.cpp
xbmc/music/Song.cpp
xbmc/music/Song.h
xbmc/music/dialogs/GUIDialogMusicInfo.cpp
xbmc/music/infoscanner/MusicAlbumInfo.h
xbmc/music/infoscanner/MusicInfoScanner.cpp
xbmc/music/infoscanner/MusicInfoScanner.h
xbmc/music/karaoke/karaokelyricstext.cpp
xbmc/music/tags/Makefile
xbmc/music/tags/MusicInfoTag.cpp
xbmc/music/tags/MusicInfoTagLoaderFactory.cpp
xbmc/music/tags/MusicInfoTagLoaderWav.cpp [deleted file]
xbmc/music/tags/MusicInfoTagLoaderWav.h [deleted file]
xbmc/music/tags/TagLoaderTagLib.cpp
xbmc/music/tags/TagLoaderTagLib.h
xbmc/music/windows/GUIWindowMusicBase.cpp
xbmc/music/windows/GUIWindowMusicNav.cpp
xbmc/network/AirPlayServer.cpp
xbmc/network/AirTunesServer.cpp
xbmc/network/AirTunesServer.h
xbmc/network/WakeOnAccess.cpp
xbmc/network/WakeOnAccess.h
xbmc/network/WebServer.cpp
xbmc/network/upnp/UPnP.cpp
xbmc/network/upnp/UPnPInternal.cpp
xbmc/network/upnp/UPnPInternal.h
xbmc/network/upnp/UPnPPlayer.cpp
xbmc/network/upnp/UPnPPlayer.h
xbmc/network/upnp/UPnPRenderer.cpp
xbmc/network/upnp/UPnPServer.cpp
xbmc/osx/DarwinUtils.mm
xbmc/osx/IOSExternalTouchController.mm
xbmc/osx/IOSScreenManager.h
xbmc/osx/IOSScreenManager.mm
xbmc/osx/Info.plist
xbmc/osx/atv2/XBMCController.h
xbmc/osx/atv2/XBMCController.mm
xbmc/osx/ios/IOSKeyboardView.h
xbmc/osx/ios/IOSKeyboardView.mm
xbmc/osx/ios/XBMCApplication.m
xbmc/osx/ios/XBMCController.h
xbmc/osx/ios/XBMCController.mm
xbmc/peripherals/PeripheralTypes.h
xbmc/peripherals/Peripherals.cpp
xbmc/peripherals/Peripherals.h
xbmc/peripherals/bus/PeripheralBus.h
xbmc/peripherals/bus/osx/PeripheralBusUSB.cpp
xbmc/peripherals/devices/Peripheral.cpp
xbmc/peripherals/devices/Peripheral.h
xbmc/peripherals/devices/PeripheralCecAdapter.cpp
xbmc/peripherals/devices/PeripheralCecAdapter.h
xbmc/peripherals/devices/PeripheralHID.cpp
xbmc/peripherals/devices/PeripheralHID.h
xbmc/peripherals/devices/PeripheralImon.cpp
xbmc/peripherals/devices/PeripheralImon.h
xbmc/playlists/PlayListM3U.cpp
xbmc/playlists/SmartPlayList.cpp
xbmc/profiles/ProfilesManager.cpp
xbmc/profiles/dialogs/GUIDialogLockSettings.cpp
xbmc/profiles/dialogs/GUIDialogProfileSettings.cpp
xbmc/profiles/windows/GUIWindowSettingsProfile.cpp
xbmc/pvr/PVRDatabase.cpp
xbmc/pvr/PVRManager.cpp
xbmc/pvr/PVRManager.h
xbmc/pvr/addons/PVRClients.cpp
xbmc/pvr/channels/PVRChannelGroup.cpp
xbmc/pvr/channels/PVRChannelGroup.h
xbmc/pvr/channels/PVRChannelGroupInternal.cpp
xbmc/pvr/channels/PVRChannelGroupInternal.h
xbmc/pvr/channels/PVRChannelGroupsContainer.cpp
xbmc/pvr/channels/PVRChannelGroupsContainer.h
xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
xbmc/pvr/recordings/PVRRecordings.cpp
xbmc/pvr/recordings/PVRRecordings.h
xbmc/pvr/windows/GUIWindowPVR.cpp
xbmc/pvr/windows/GUIWindowPVR.h
xbmc/pvr/windows/GUIWindowPVRChannels.cpp
xbmc/pvr/windows/GUIWindowPVRCommon.cpp
xbmc/pvr/windows/GUIWindowPVRCommon.h
xbmc/pvr/windows/GUIWindowPVRGuide.cpp
xbmc/pvr/windows/GUIWindowPVRGuide.h
xbmc/pvr/windows/GUIWindowPVRRecordings.cpp
xbmc/rendering/dx/GUIWindowTestPatternDX.cpp
xbmc/rendering/gl/GUIWindowTestPatternGL.cpp
xbmc/settings/AdvancedSettings.cpp
xbmc/settings/AdvancedSettings.h
xbmc/settings/Settings.cpp
xbmc/settings/windows/GUIWindowTestPattern.cpp
xbmc/settings/windows/GUIWindowTestPattern.h
xbmc/storage/android/AndroidStorageProvider.cpp
xbmc/storage/android/AndroidStorageProvider.h
xbmc/storage/linux/DeviceKitDisksProvider.cpp
xbmc/storage/linux/UDisksProvider.cpp
xbmc/storage/linux/UDisksProvider.h
xbmc/threads/platform/pthreads/ThreadImpl.cpp
xbmc/utils/AMLUtils.cpp
xbmc/utils/Archive.cpp
xbmc/utils/Archive.h
xbmc/utils/CPUInfo.cpp
xbmc/utils/CharsetConverter.cpp
xbmc/utils/CharsetConverter.h
xbmc/utils/CharsetDetection.cpp
xbmc/utils/CharsetDetection.h
xbmc/utils/FileOperationJob.cpp
xbmc/utils/FileUtils.cpp
xbmc/utils/FileUtils.h
xbmc/utils/HttpHeader.cpp
xbmc/utils/HttpHeader.h
xbmc/utils/HttpResponse.cpp
xbmc/utils/LangCodeExpander.cpp
xbmc/utils/Makefile.in
xbmc/utils/Mime.cpp
xbmc/utils/Mime.h
xbmc/utils/Observer.h
xbmc/utils/RegExp.cpp
xbmc/utils/RegExp.h
xbmc/utils/ScraperParser.cpp
xbmc/utils/ScraperParser.h
xbmc/utils/ScraperUrl.cpp
xbmc/utils/SortUtils.cpp
xbmc/utils/StreamDetails.cpp
xbmc/utils/StreamDetails.h
xbmc/utils/StringUtils.cpp
xbmc/utils/StringUtils.h
xbmc/utils/SystemInfo.cpp
xbmc/utils/SystemInfo.h
xbmc/utils/URIUtils.cpp
xbmc/utils/URIUtils.h
xbmc/utils/Variant.h
xbmc/utils/XBMCTinyXML.cpp
xbmc/utils/XMLUtils.cpp
xbmc/utils/XSLTUtils.cpp [new file with mode: 0644]
xbmc/utils/XSLTUtils.h [new file with mode: 0644]
xbmc/utils/test/TestArchive.cpp
xbmc/utils/test/TestURIUtils.cpp
xbmc/video/VideoDatabase.cpp
xbmc/video/VideoDbUrl.cpp
xbmc/video/VideoInfoScanner.cpp
xbmc/video/VideoInfoTag.cpp
xbmc/video/VideoThumbLoader.cpp
xbmc/video/dialogs/GUIDialogSubtitles.cpp
xbmc/video/dialogs/GUIDialogSubtitles.h
xbmc/video/dialogs/GUIDialogVideoInfo.cpp
xbmc/video/windows/GUIWindowFullScreen.cpp
xbmc/video/windows/GUIWindowVideoBase.cpp
xbmc/video/windows/GUIWindowVideoNav.cpp
xbmc/view/GUIViewState.cpp
xbmc/visualizations/Milkdrop/MilkdropXBMC.cpp
xbmc/visualizations/OpenGLSpectrum/opengl_spectrum.cpp
xbmc/visualizations/Vortex/Vortex/Vortex.sln [new file with mode: 0644]
xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj [new file with mode: 0644]
xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj.filters [new file with mode: 0644]
xbmc/visualizations/Vortex/VortexVis/Core/Shader.h
xbmc/visualizations/Vortex/VortexVis/Core/Vortex.cpp
xbmc/visualizations/Vortex/VortexVis/Core/Vortex.h
xbmc/visualizations/Vortex/VortexXBMC/VortexXBMC.cpp
xbmc/visualizations/Vortex/angelscript/angelscript/source/as_atomic.cpp
xbmc/visualizations/XBMCProjectM/Main.cpp
xbmc/win32/Win32DelayedDllLoad.cpp
xbmc/win32/XBMC_PC.rc
xbmc/windowing/WinEventsSDL.cpp
xbmc/windowing/egl/EGLNativeTypeRaspberryPI.cpp
xbmc/windowing/egl/EGLNativeTypeRaspberryPI.h
xbmc/windowing/windows/WinEventsWin32.cpp
xbmc/windows/GUIMediaWindow.h
xbmc/windows/GUIWindowHome.cpp

index eceeef5..65ca4a6 100644 (file)
@@ -73,6 +73,7 @@ config.log
 /Makefile.include
 /aclocal.m4
 /autom4te.cache/
+/build-aux/compile
 /build-aux/config.guess
 /build-aux/config.sub
 /build-aux/install-sh
@@ -324,6 +325,9 @@ lib/cmyth/Makefile
 /project/obj
 /project/output
 
+# /project/cmake
+/project/cmake/xbmc-config.cmake
+
 # /project/Win32BuildSetup/
 /project/Win32BuildSetup/XBMC.log
 /project/Win32BuildSetup/XBMCSetup*.exe
@@ -393,6 +397,8 @@ lib/cmyth/Makefile
 /system/libnfs.dll
 /system/dnssd.dll
 /system/libcec.dll
+/system/pthreadVC2.dll
+/system/libxslt.dll
 
 # /system/cdrip
 /system/cdrip/lame_enc.dll
index 87381f2..e6c7849 100644 (file)
@@ -1,6 +1,6 @@
 ## Questions about XBMC?
 
-To get your questions answered, please ask in the XBMC [Forum] or on IRC: #xbmc on freenode.net or [webchat] 
+To get your questions answered, please ask in the XBMC [Forum] or on IRC: #xbmc on freenode.net
 
 Do not open an issue.
 
@@ -72,3 +72,5 @@ Please follow this process; it's the best way to get your work included in the p
 
 - [Open a Pull Request](https://help.github.com/articles/using-pull-requests) with a
     clear title and description.
+
+[Forum]: http://forum.xbmc.org/
index a14b3c5..428b67c 100644 (file)
@@ -488,6 +488,17 @@ ifeq ($(findstring freebsd,@ARCH@),freebsd)
 DYNOBJSXBMC+= xbmc/freebsd/freebsd.a
 endif
 
+ifeq (@USE_STATIC_FFMPEG@,1)
+DYNOBJSXBMC += lib/ffmpeg/libavcodec/libavcodec.a \
+               lib/ffmpeg/libavfilter/libavfilter.a \
+               lib/ffmpeg/libswresample/libswresample.a \
+               lib/ffmpeg/libavformat/libavformat.a \
+               lib/ffmpeg/libavutil/libavutil.a \
+               lib/ffmpeg/libpostproc/libpostproc.a \
+               lib/ffmpeg/libswscale/libswscale.a
+LIBS+= @GNUTLS_ALL_LIBS@ @VORBISENC_ALL_LIBS@
+endif
+
 OBJSXBMC:=$(filter-out $(DYNOBJSXBMC), $(OBJSXBMC))
 
 MAINOBJS=xbmc/xbmc.o
@@ -556,10 +567,10 @@ ifeq ($(findstring osx,@ARCH@), osx)
 else
 install: install-binaries install-arch install-datas
 
-apk: install
+apk: apk-clean install
        make -C tools/android/packaging
 
-apk-clean: 
+apk-clean:
        make -C tools/android/packaging clean
 
 install-binaries: install-scripts
index 2afe6ba..3452dd9 100644 (file)
@@ -49,10 +49,6 @@ ifneq (@USE_EXTERNAL_FFMPEG@,1)
 endif
 INCLUDES+=-I@abs_top_srcdir@/xbmc/linux
 INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/dvdplayer
-ifeq (@USE_OMXPLAYER@,1)
-INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/AudioEngine
-INCLUDES+=-I@abs_top_srcdir@/xbmc/cores/AudioEngine/Utils
-endif
 DEFINES+= \
        @ARCH_DEFINES@ \
        -D_FILE_DEFINED \
index 1c56587..ae59e25 100644 (file)
                18B7C89D129423A7009E7A26 /* MusicInfoTagLoaderNSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C878129423A7009E7A26 /* MusicInfoTagLoaderNSF.cpp */; };
                18B7C89F129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87C129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp */; };
                18B7C8A0129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87E129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp */; };
-               18B7C8A1129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C880129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp */; };
                18B7C8A4129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C886129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp */; };
                18B7C8D712942546009E7A26 /* ButtonTranslator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C8CB12942546009E7A26 /* ButtonTranslator.cpp */; };
                18B7C8D812942546009E7A26 /* KeyboardLayoutConfiguration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C8CD12942546009E7A26 /* KeyboardLayoutConfiguration.cpp */; };
                7C1409A9184015C9009F9411 /* InfoExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1409A7184015C6009F9411 /* InfoExpression.cpp */; };
                7C1409AA184015C9009F9411 /* InfoExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1409A7184015C6009F9411 /* InfoExpression.cpp */; };
                7C1409AB184015C9009F9411 /* InfoExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1409A7184015C6009F9411 /* InfoExpression.cpp */; };
+               7C15DCBC1892481400FCE564 /* InfoBool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C15DCBB1892481300FCE564 /* InfoBool.cpp */; };
+               7C15DCBD1892481400FCE564 /* InfoBool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C15DCBB1892481300FCE564 /* InfoBool.cpp */; };
+               7C15DCBE1892481400FCE564 /* InfoBool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C15DCBB1892481300FCE564 /* InfoBool.cpp */; };
                7C1A492315A962EE004AF4A4 /* SeekHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A492115A962EE004AF4A4 /* SeekHandler.cpp */; };
                7C1A85661520522500C63311 /* TextureCacheJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A85631520522500C63311 /* TextureCacheJob.cpp */; };
                7C1D682915A7D2FD00658B65 /* DatabaseManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1D682715A7D2FD00658B65 /* DatabaseManager.cpp */; };
                889B4D8E0E0EF86C00FAD25E /* RSSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 889B4D8C0E0EF86C00FAD25E /* RSSDirectory.cpp */; };
                88ACB01B0DCF40800083CFDF /* ASAPFileDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88ACB0190DCF40800083CFDF /* ASAPFileDirectory.cpp */; };
                88ACB01F0DCF409E0083CFDF /* ASAPCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88ACB01C0DCF409E0083CFDF /* ASAPCodec.cpp */; };
+               AE32174218313ADF0003FAFC /* XSLTUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */; };
+               AE32174318313AE10003FAFC /* XSLTUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */; };
+               AE4E87A717354C4A00D15206 /* XSLTUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */; };
                AE84CB5A15A5B8A600A3810E /* TagLibVFSStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */; };
                AE89ACA61621DAB800E17DBC /* DVDDemuxBXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE89ACA41621DAB800E17DBC /* DVDDemuxBXA.cpp */; };
                AEC0083115ACAC6E0099888C /* TagLoaderTagLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEC0083015ACAC6E0099888C /* TagLoaderTagLib.cpp */; };
                DFF0F30D17528350002DA3A4 /* MusicInfoTagLoaderNSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C878129423A7009E7A26 /* MusicInfoTagLoaderNSF.cpp */; };
                DFF0F30E17528350002DA3A4 /* MusicInfoTagLoaderShn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87C129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp */; };
                DFF0F30F17528350002DA3A4 /* MusicInfoTagLoaderSPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87E129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp */; };
-               DFF0F31017528350002DA3A4 /* MusicInfoTagLoaderWav.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C880129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp */; };
                DFF0F31117528350002DA3A4 /* MusicInfoTagLoaderYM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C886129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp */; };
                DFF0F31217528350002DA3A4 /* TagLibVFSStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */; };
                DFF0F31317528350002DA3A4 /* TagLoaderTagLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEC0083015ACAC6E0099888C /* TagLoaderTagLib.cpp */; };
                E499138E174E5F0E00741B6D /* MusicInfoTagLoaderNSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C878129423A7009E7A26 /* MusicInfoTagLoaderNSF.cpp */; };
                E499138F174E5F0E00741B6D /* MusicInfoTagLoaderShn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87C129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp */; };
                E4991390174E5F0E00741B6D /* MusicInfoTagLoaderSPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C87E129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp */; };
-               E4991391174E5F0E00741B6D /* MusicInfoTagLoaderWav.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C880129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp */; };
                E4991392174E5F0E00741B6D /* MusicInfoTagLoaderYM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C886129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp */; };
                E4991393174E5F0E00741B6D /* TagLibVFSStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */; };
                E4991394174E5F0E00741B6D /* TagLoaderTagLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEC0083015ACAC6E0099888C /* TagLoaderTagLib.cpp */; };
                18B7C87D129423A7009E7A26 /* MusicInfoTagLoaderShn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MusicInfoTagLoaderShn.h; sourceTree = "<group>"; };
                18B7C87E129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MusicInfoTagLoaderSPC.cpp; sourceTree = "<group>"; };
                18B7C87F129423A7009E7A26 /* MusicInfoTagLoaderSPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MusicInfoTagLoaderSPC.h; sourceTree = "<group>"; };
-               18B7C880129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MusicInfoTagLoaderWav.cpp; sourceTree = "<group>"; };
-               18B7C881129423A7009E7A26 /* MusicInfoTagLoaderWav.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MusicInfoTagLoaderWav.h; sourceTree = "<group>"; };
                18B7C886129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MusicInfoTagLoaderYM.cpp; sourceTree = "<group>"; };
                18B7C887129423A7009E7A26 /* MusicInfoTagLoaderYM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MusicInfoTagLoaderYM.h; sourceTree = "<group>"; };
                18B7C8CB12942546009E7A26 /* ButtonTranslator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ButtonTranslator.cpp; sourceTree = "<group>"; };
                7C140988183224B8009F9411 /* SettingUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingUpdate.h; path = lib/SettingUpdate.h; sourceTree = "<group>"; };
                7C1409A7184015C6009F9411 /* InfoExpression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InfoExpression.cpp; sourceTree = "<group>"; };
                7C1409A8184015C8009F9411 /* InfoExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InfoExpression.h; sourceTree = "<group>"; };
+               7C15DCBB1892481300FCE564 /* InfoBool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InfoBool.cpp; sourceTree = "<group>"; };
                7C1A492115A962EE004AF4A4 /* SeekHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SeekHandler.cpp; sourceTree = "<group>"; };
                7C1A492215A962EE004AF4A4 /* SeekHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SeekHandler.h; sourceTree = "<group>"; };
                7C1A495B15A96918004AF4A4 /* SaveFileStateJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveFileStateJob.h; sourceTree = "<group>"; };
                88ACB01E0DCF409E0083CFDF /* DllASAP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DllASAP.h; sourceTree = "<group>"; };
                88ECB6580DE013C4003396A7 /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = /System/Library/Frameworks/DiskArbitration.framework; sourceTree = "<absolute>"; };
                8DD76F7E0486A8DE00D96B5E /* XBMC */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = XBMC; sourceTree = BUILT_PRODUCTS_DIR; };
+               AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XSLTUtils.cpp; sourceTree = "<group>"; };
+               AE4E87A617354C4A00D15206 /* XSLTUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XSLTUtils.h; sourceTree = "<group>"; };
                AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TagLibVFSStream.cpp; sourceTree = "<group>"; };
                AE84CB5C15A5B8BA00A3810E /* TagLibVFSStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagLibVFSStream.h; sourceTree = "<group>"; };
                AE89ACA41621DAB800E17DBC /* DVDDemuxBXA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDDemuxBXA.cpp; sourceTree = "<group>"; };
                                18B7C87D129423A7009E7A26 /* MusicInfoTagLoaderShn.h */,
                                18B7C87E129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp */,
                                18B7C87F129423A7009E7A26 /* MusicInfoTagLoaderSPC.h */,
-                               18B7C880129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp */,
-                               18B7C881129423A7009E7A26 /* MusicInfoTagLoaderWav.h */,
                                18B7C886129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp */,
                                18B7C887129423A7009E7A26 /* MusicInfoTagLoaderYM.h */,
                                AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */,
                7C89674213C03B21003631FE /* info */ = {
                        isa = PBXGroup;
                        children = (
+                               7C15DCBB1892481300FCE564 /* InfoBool.cpp */,
                                7C89674413C03B22003631FE /* InfoBool.h */,
                                7C1409A7184015C6009F9411 /* InfoExpression.cpp */,
                                7C1409A8184015C8009F9411 /* InfoExpression.h */,
                                E38E1E920D25F9FD00618676 /* WindowsShortcut.h */,
                                F5ED908615538DCE00842059 /* XBMCTinyXML.cpp */,
                                F5ED908715538DCE00842059 /* XBMCTinyXML.h */,
+                               AE4E87A517354C4A00D15206 /* XSLTUtils.cpp */,
+                               AE4E87A617354C4A00D15206 /* XSLTUtils.h */,
                                18B7C9811294385F009E7A26 /* XMLUtils.cpp */,
                                18B7C9821294385F009E7A26 /* XMLUtils.h */,
                        );
                                18B7C89D129423A7009E7A26 /* MusicInfoTagLoaderNSF.cpp in Sources */,
                                18B7C89F129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp in Sources */,
                                18B7C8A0129423A7009E7A26 /* MusicInfoTagLoaderSPC.cpp in Sources */,
-                               18B7C8A1129423A7009E7A26 /* MusicInfoTagLoaderWav.cpp in Sources */,
                                18B7C8A4129423A7009E7A26 /* MusicInfoTagLoaderYM.cpp in Sources */,
                                18B7C8D712942546009E7A26 /* ButtonTranslator.cpp in Sources */,
                                18B7C8D812942546009E7A26 /* KeyboardLayoutConfiguration.cpp in Sources */,
                                7C1409A4183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                                DF0ABB73183A94A30018445D /* Utf8Utils.cpp in Sources */,
                                7C1409A9184015C9009F9411 /* InfoExpression.cpp in Sources */,
+                               AE32174218313ADF0003FAFC /* XSLTUtils.cpp in Sources */,
+                               7C15DCBC1892481400FCE564 /* InfoBool.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                DFF0F30D17528350002DA3A4 /* MusicInfoTagLoaderNSF.cpp in Sources */,
                                DFF0F30E17528350002DA3A4 /* MusicInfoTagLoaderShn.cpp in Sources */,
                                DFF0F30F17528350002DA3A4 /* MusicInfoTagLoaderSPC.cpp in Sources */,
-                               DFF0F31017528350002DA3A4 /* MusicInfoTagLoaderWav.cpp in Sources */,
                                DFF0F31117528350002DA3A4 /* MusicInfoTagLoaderYM.cpp in Sources */,
                                DFF0F31217528350002DA3A4 /* TagLibVFSStream.cpp in Sources */,
                                DFF0F31317528350002DA3A4 /* TagLoaderTagLib.cpp in Sources */,
                                7C1409A6183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                                DF0ABB75183A94A30018445D /* Utf8Utils.cpp in Sources */,
                                7C1409AB184015C9009F9411 /* InfoExpression.cpp in Sources */,
+                               AE32174318313AE10003FAFC /* XSLTUtils.cpp in Sources */,
+                               7C15DCBE1892481400FCE564 /* InfoBool.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                E499138E174E5F0E00741B6D /* MusicInfoTagLoaderNSF.cpp in Sources */,
                                E499138F174E5F0E00741B6D /* MusicInfoTagLoaderShn.cpp in Sources */,
                                E4991390174E5F0E00741B6D /* MusicInfoTagLoaderSPC.cpp in Sources */,
-                               E4991391174E5F0E00741B6D /* MusicInfoTagLoaderWav.cpp in Sources */,
                                E4991392174E5F0E00741B6D /* MusicInfoTagLoaderYM.cpp in Sources */,
                                E4991393174E5F0E00741B6D /* TagLibVFSStream.cpp in Sources */,
                                E4991394174E5F0E00741B6D /* TagLoaderTagLib.cpp in Sources */,
                                7C1409A5183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                                DF0ABB74183A94A30018445D /* Utf8Utils.cpp in Sources */,
                                7C1409AA184015C9009F9411 /* InfoExpression.cpp in Sources */,
+                               AE4E87A717354C4A00D15206 /* XSLTUtils.cpp in Sources */,
+                               7C15DCBD1892481400FCE564 /* InfoBool.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = $SRCROOT/xbmc/osx/Info.plist;
                                INSTALL_PATH = /usr/local/bin;
                                        "-ltag",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
+                                       "-lxml2",
+                                       "-lxslt",
                                );
                                PRODUCT_NAME = XBMC;
                                USE_HEADERMAP = NO;
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = $SRCROOT/xbmc/osx/Info.plist;
                                INSTALL_PATH = /usr/local/bin;
                                        "-ltag",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
+                                       "-lxml2",
+                                       "-lxslt",
                                );
                                PRODUCT_NAME = XBMC;
                                USE_HEADERMAP = NO;
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = "$SRCROOT/xbmc/osx/atv2/XBMCATV2-Info.plist";
                                INSTALL_PATH = "$(HOME)/Library/Bundles";
                                        "-ltag",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
+                                       "-lxslt",
+                                       "-lmpeg2",
                                );
                                PLIST_FILE_OUTPUT_FORMAT = xml;
                                PREBINDING = NO;
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = "$SRCROOT/xbmc/osx/atv2/XBMCATV2-Info.plist";
                                INSTALL_PATH = "$(HOME)/Library/Bundles";
                                        "-ltag",
                                        "-L$XBMC_DEPENDS/lib/mysql",
                                        "-lmysqlclient",
+                                       "-lxslt",
+                                       "-lmpeg2",
                                );
                                PLIST_FILE_OUTPUT_FORMAT = xml;
                                PREBINDING = NO;
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = "$SRCROOT/xbmc/osx/ios/XBMCIOS-Info.plist";
                                INSTALL_PATH = "$(HOME)/Library/Bundles";
                                        $XBMC_DEPENDS/include/mysql,
                                        $XBMC_DEPENDS/include/freetype2,
                                        $XBMC_DEPENDS/include/python2.6,
+                                       $XBMC_DEPENDS/include/libxml2,
                                );
                                INFOPLIST_FILE = "xbmc/osx/ios/XBMCIOS-Info.plist";
                                SDKROOT = iphoneos;
diff --git a/addons/metadata.local/icon.png b/addons/metadata.local/icon.png
new file mode 100644 (file)
index 0000000..6ab89fa
Binary files /dev/null and b/addons/metadata.local/icon.png differ
index ce3d867..a2d5a99 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.pvr-android.xbmc.org"
                name="XBMC.org PVR Add-ons"
-               version="1.0.0"
+               version="1.1.2"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
+    <import addon="xbmc.pvr" version="1.9.0"/>
   </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org PVR Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/frodo/pvr/android/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/frodo/pvr/android/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/frodo/pvr/android</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/gotham/pvr/android/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/gotham/pvr/android/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/gotham/pvr/android</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира PVR добавки от XBMC.org</summary>
+               <summary lang="ca">Instal·la complements PVR des de XBMC.org</summary>
+               <summary lang="cs">Nainstalovat rozšíření PVR z XBMC.org</summary>
+               <summary lang="de">Installiere PVR Add-ons von XBMC.org</summary>
+               <summary lang="el">Εγκατάσταση Πρόσθετων PVR από το XBMC.org</summary>
                <summary lang="en">Install PVR Add-ons from XBMC.org</summary>
+               <summary lang="es">Instala Complementos de XBMC.org</summary>
+               <summary lang="es_AR">Instalar complemento PVR desde XBMC.org</summary>
+               <summary lang="es_MX">Instalar Complementos PVR de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons para PVR de XMBC.org</summary>
+               <summary lang="et">Paigalda videosalvesti lisasid lehelt XBMC.org</summary>
+               <summary lang="fr_CA">Installer l'extension du magnétoscope numérique depuis XBMC.org</summary>
+               <summary lang="gl">Instalar Engadidos de PVR dende XBMC.org</summary>
+               <summary lang="hu">PVR kiegészítők telepítése az XBMC.org-ról</summary>
+               <summary lang="ko">XBMC.org에서 PVR 추가기능 설치</summary>
+               <summary lang="lt">Įdiekite PVR priedą iš XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
+               <summary lang="nl">Installeer PVR Add-ons van XBMC.org</summary>
+               <summary lang="pl">Instaluj wtyczki PVR z XBMC.org</summary>
+               <summary lang="pt">Instalar Add-ons PVR de XBMC.org</summary>
+               <summary lang="pt_BR">Instalar Add-ons de PVR do repositório XBMC.org</summary>
+               <summary lang="sk">Inštalovať PVR doplnky z XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke PVR z XBMC.org</summary>
+               <summary lang="sv">Installera PVR-tillägg från XBMC.org</summary>
+               <summary lang="tg">Насб кардани барномаи иловагии PVR аз XBMC.org</summary>
+               <summary lang="zh">从 XBMC.org 安装 PVR 插件</summary>
+               <description lang="bg">Сваля и инсталира PVR добавки от официалното хранилище за добавки на XBMC.org.[CR] Ползвайки добавката ще се възползвате от системата ни от огледални сървъри - за да сваляте с висока скорост, от сървър в район близък до Вас.[CR] Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, моля уведомете екипа на XBMC, за да бъдат предприети необходимите действия.</description>
+               <description lang="de">Lade und installiere PVR Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
+               <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install PVR add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
+               <description lang="es">Descarga e instala complementos de PVR desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a ti.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="es_AR">Descarga e instalar el complemento desde el repositorio oficial de XBMC.org.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de espejos para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tu región.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para que podamos tomar las acciones necesarias.</description>
+               <description lang="es_MX">Descarga e instala complementos del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de nuestro servicio extenso de espejos para ayudarle a tener descargas mas rapidas desde una region mas cerca de usted.[CR] Todos los complementos en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons de PVR del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
+               <description lang="et">Lae alla ja installi videosalvesti lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
+               <description lang="fr_CA">Télécharger et installer l'extension du magnétoscope numérique depuis le dépôt officiel de XBMC.org.[CR] En utilisant le dépôt officiel vous pourrez bénéficier de notre service étendu de miroir de fichiers favorisant des téléchargements plus rapides depuis une région proche de vous.[CR] Toutes les extensions de ce dépôt ont subit des tests de base. Si vous trouvez une extension non fonctionnelle ou brisée, veuillez la rapporter à l'équipe XBMC afin que nous puissions agir.</description>
+               <description lang="gl">Descargar e instalar Engadidos de PVR dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="hu">PVR Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
+               <description lang="ko">공식 XBMC.org 추가기능 저장소에서 PVR 추가기능을 다운로드하여 설치합니다.[CR] 공식 저장소를 사용하면 파일 미러링 서비스를 통해 사용자와 가까운 곳에서 빠르게 다운로드할 수 있습니다.[CR] 저장소의 모든 추가기능은 기본 테스트를 거치지만 작동이 되지 않거나 손상된 추가기능을 발견하면 필요한 조치를 취할 수 있게 Team XBMC로 알려주시기 바랍니다.</description>
+               <description lang="lt">Atsisiųskite ir įdiekite PVR priedą iš oficialios XBMC.org priedų saugyklos. [Cr] Naudojant oficialią saugyklą galėsite pasinaudoti mūsų  failų Veidrodine saugyklos paslauga katra padės jums greičiau parsisiųsti iš artimiausios vietos šalia jūsų. [CR] Visi priedai šioje saugykloje yra perėję pagrindinį testavimą, jei atsisiuntėte neveikiantį ar/arba sugadintą priedą praneškite 'Team XBMC', kad galėtume imtis visų būtinų priemonių klaidai ištaisyti.</description>
+               <description lang="lv">Lejupielādējiet un uzstādiet PVR pielikumus no oficiālā XBMC.org pielikumu repozitorija.[CR]  Izmantojot oficiālo repozitoriju, varēsiet izmantot mūsu plašo spoguļu servisu, lai iegūtu ātrākas lejupielādes no reģiona, kas vistuvāk.[CR]  Visi pielikumi šajā repozitorijā ir izgājuši pamata testēšanu, bet, ja atrodat saplīsušu vai nestrādājošu pielikumu, lūdzu, ziņojiet par to Team XBMC, lai varam izpildīt nepieciešamās labošanas darbības.</description>
+               <description lang="nl">Download en installeer PVR add-ons van het officiële XBMC.org addon-repository.[CR] Wanneer u het officiële repository gebruikt beschikt u over onze uitgebreide mirrorservice, waardoor u snel kan downloaden van locaties in uw buurt.[CR] Alle add-ons in dit repository ondergingen standaardtests; indien u een defecte of niet-werkende add-on vindt, meld dit dan aan Team XBMC zodat zij actie kunnen ondernemen.</description>
+               <description lang="pl">Pobieraj i instaluj wtyczki PVR z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
+               <description lang="pt">Transferir e instalar add-ons PVR do repositório oficial XBMC.org.[CR] Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR] Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
+               <description lang="pt_BR">Transfira e instale add-ons de Tv ao Vivo, a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="sk">Stiahnuť a nainštalovať PVR rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
+               <description lang="sl">Prenos in namestitev dodatkov PVR iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sv">Ladda ner och installera PVR-tillägg från det officiella XBMC.org tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som hjälper dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
+               <description lang="tg">Барномаҳои иловагии PVR-ро аз анбори нармафзори расмии XBMC.org боргирӣ кунед ва насб кунед.[CR]  Агар анбори нармафзори расмиро истифода баред, метавонед нармафзори иловагиро аз серверҳои наздиктарин ба шумо боргирӣ намоед.[CR]  Ҳамаи нармафзори анбори зикршуда аз санҷиши асосӣ мегузаранд, ва агар шумо ягон барномаи иловагии вайроншуда ё ғайрифаъолро пайдо кунед, метавонед дар бораи он гузоришро ба Гурӯҳи кории XBMC фиристонед, то ки барномасозон тавонанд камбудиҳои пайдошударо ҳал кунанд.</description>
+               <description lang="zh">从官方 XBMC.org 插件库下载和安装 PVR 插件。[CR] 通过官方程序库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有失效或不能正常工作的插件,请向 XBMC 开发团队报告,以便及时处理。</description>
+               <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
+               <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
+               <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
+               <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
+               <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
+               <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Depot erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
+               <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los complementos en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
+               <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
+               <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="fr_CA">L'équipe XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
+               <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
+               <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
+               <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
+               <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
+               <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
+               <disclaimer lang="ko">Team XBMC는 이 저장소의 모든 추가기능을 제작하지 만들지 않았으며, 추가기능 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
+               <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
+               <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
+               <disclaimer lang="mk">XBMC тимот ги нема направено сите овие додатоци и не е одговорен за нивната содржина</disclaimer>
+               <disclaimer lang="nl">Team XBMC heeft niet alle add-ons in dit repository geschreven en is niet verantwoordelijk voor hun inhoud.</disclaimer>
+               <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
+               <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
+               <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
+               <disclaimer lang="pt_BR">O Time do XBMC não produziu todos os add-ons deste repositório, e portanto não é responsável ​​por seu conteúdo</disclaimer>
+               <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
+               <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
+               <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
+               <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
+               <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
+               <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
+               <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
+               <disclaimer lang="th">ทีม XBMC ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer>
+               <disclaimer lang="tr">XBMC takımı bu depodaki tüm eklentileri geliştirmemiştir ve bunların içeriklerinden sorumlu değildir.</disclaimer>
+               <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
+               <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
+               <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>android</platform>
        </extension>
 </addon>
index 1a95618..de5e46a 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.pvr-ios.xbmc.org"
                name="XBMC.org PVR Add-ons"
-               version="1.0.0"
+               version="1.1.2"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
+    <import addon="xbmc.pvr" version="1.9.0"/>
   </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org PVR Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/frodo/pvr/ios/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/frodo/pvr/ios/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/frodo/pvr/ios</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/gotham/pvr/ios/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/gotham/pvr/ios/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/gotham/pvr/ios</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира PVR добавки от XBMC.org</summary>
+               <summary lang="ca">Instal·la complements PVR des de XBMC.org</summary>
+               <summary lang="cs">Nainstalovat rozšíření PVR z XBMC.org</summary>
+               <summary lang="de">Installiere PVR Add-ons von XBMC.org</summary>
+               <summary lang="el">Εγκατάσταση Πρόσθετων PVR από το XBMC.org</summary>
                <summary lang="en">Install PVR Add-ons from XBMC.org</summary>
+               <summary lang="es">Instalar Complementos de PVR de XBMC.org</summary>
+               <summary lang="es_AR">Instalar complemento PVR desde XBMC.org</summary>
+               <summary lang="es_MX">Instalar Complementos PVR de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons para PVR de XMBC.org</summary>
+               <summary lang="et">Paigalda videosalvesti lisasid lehelt XBMC.org</summary>
+               <summary lang="fr_CA">Installer l'extension du magnétoscope numérique depuis XBMC.org</summary>
+               <summary lang="gl">Instalar Engadidos de PVR dende XBMC.org</summary>
+               <summary lang="hu">PVR kiegészítők telepítése az XBMC.org-ról</summary>
+               <summary lang="ko">XBMC.org에서 PVR 추가기능 설치</summary>
+               <summary lang="lt">Įdiekite PVR priedą iš XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
+               <summary lang="nl">Installeer PVR Add-ons van XBMC.org</summary>
+               <summary lang="pl">Instaluj wtyczki PVR z XBMC.org</summary>
+               <summary lang="pt">Instalar Add-ons PVR de XBMC.org</summary>
+               <summary lang="pt_BR">Instalar Add-ons de PVR do repositório XBMC.org</summary>
+               <summary lang="sk">Inštalovať PVR doplnky z XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke PVR z XBMC.org</summary>
+               <summary lang="sv">Installera PVR-tillägg från XBMC.org</summary>
+               <summary lang="tg">Насб кардани барномаи иловагии PVR аз XBMC.org</summary>
+               <summary lang="zh">从 XBMC.org 安装 PVR 插件</summary>
+               <description lang="bg">Сваля и инсталира PVR добавки от официалното хранилище за добавки на XBMC.org.[CR] Ползвайки добавката ще се възползвате от системата ни от огледални сървъри - за да сваляте с висока скорост, от сървър в район близък до Вас.[CR] Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, моля уведомете екипа на XBMC, за да бъдат предприети необходимите действия.</description>
+               <description lang="de">Lade und installiere PVR Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
+               <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install PVR add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
+               <description lang="es">Descarga e instala complementos de PVR desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a ti.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="es_AR">Descarga e instalar el complemento desde el repositorio oficial de XBMC.org.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de espejos para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tu región.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para que podamos tomar las acciones necesarias.</description>
+               <description lang="es_MX">Descarga e instala complementos del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de nuestro servicio extenso de espejos para ayudarle a tener descargas mas rapidas desde una region mas cerca de usted.[CR] Todos los complementos en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons de PVR del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
+               <description lang="et">Lae alla ja installi videosalvesti lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
+               <description lang="fr_CA">Télécharger et installer l'extension du magnétoscope numérique depuis le dépôt officiel de XBMC.org.[CR] En utilisant le dépôt officiel vous pourrez bénéficier de notre service étendu de miroir de fichiers favorisant des téléchargements plus rapides depuis une région proche de vous.[CR] Toutes les extensions de ce dépôt ont subit des tests de base. Si vous trouvez une extension non fonctionnelle ou brisée, veuillez la rapporter à l'équipe XBMC afin que nous puissions agir.</description>
+               <description lang="gl">Descargar e instalar Engadidos de PVR dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="hu">PVR Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
+               <description lang="ko">공식 XBMC.org 추가기능 저장소에서 PVR 추가기능을 다운로드하여 설치합니다.[CR] 공식 저장소를 사용하면 파일 미러링 서비스를 통해 사용자와 가까운 곳에서 빠르게 다운로드할 수 있습니다.[CR] 저장소의 모든 추가기능은 기본 테스트를 거치지만 작동이 되지 않거나 손상된 추가기능을 발견하면 필요한 조치를 취할 수 있게 Team XBMC로 알려주시기 바랍니다.</description>
+               <description lang="lt">Atsisiųskite ir įdiekite PVR priedą iš oficialios XBMC.org priedų saugyklos. [Cr] Naudojant oficialią saugyklą galėsite pasinaudoti mūsų  failų Veidrodine saugyklos paslauga katra padės jums greičiau parsisiųsti iš artimiausios vietos šalia jūsų. [CR] Visi priedai šioje saugykloje yra perėję pagrindinį testavimą, jei atsisiuntėte neveikiantį ar/arba sugadintą priedą praneškite 'Team XBMC', kad galėtume imtis visų būtinų priemonių klaidai ištaisyti.</description>
+               <description lang="lv">Lejupielādējiet un uzstādiet PVR pielikumus no oficiālā XBMC.org pielikumu repozitorija.[CR]  Izmantojot oficiālo repozitoriju, varēsiet izmantot mūsu plašo spoguļu servisu, lai iegūtu ātrākas lejupielādes no reģiona, kas vistuvāk.[CR]  Visi pielikumi šajā repozitorijā ir izgājuši pamata testēšanu, bet, ja atrodat saplīsušu vai nestrādājošu pielikumu, lūdzu, ziņojiet par to Team XBMC, lai varam izpildīt nepieciešamās labošanas darbības.</description>
+               <description lang="nl">Download en installeer PVR add-ons van het officiële XBMC.org addon-repository.[CR] Wanneer u het officiële repository gebruikt beschikt u over onze uitgebreide mirrorservice, waardoor u snel kan downloaden van locaties in uw buurt.[CR] Alle add-ons in dit repository ondergingen standaardtests; indien u een defecte of niet-werkende add-on vindt, meld dit dan aan Team XBMC zodat zij actie kunnen ondernemen.</description>
+               <description lang="pl">Pobieraj i instaluj wtyczki PVR z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
+               <description lang="pt">Transferir e instalar add-ons PVR do repositório oficial XBMC.org.[CR] Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR] Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
+               <description lang="pt_BR">Transfira e instale add-ons de Tv ao Vivo, a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="sk">Stiahnuť a nainštalovať PVR rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
+               <description lang="sl">Prenos in namestitev dodatkov PVR iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sv">Ladda ner och installera PVR-tillägg från det officiella XBMC.org tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som hjälper dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
+               <description lang="tg">Барномаҳои иловагии PVR-ро аз анбори нармафзори расмии XBMC.org боргирӣ кунед ва насб кунед.[CR]  Агар анбори нармафзори расмиро истифода баред, метавонед нармафзори иловагиро аз серверҳои наздиктарин ба шумо боргирӣ намоед.[CR]  Ҳамаи нармафзори анбори зикршуда аз санҷиши асосӣ мегузаранд, ва агар шумо ягон барномаи иловагии вайроншуда ё ғайрифаъолро пайдо кунед, метавонед дар бораи он гузоришро ба Гурӯҳи кории XBMC фиристонед, то ки барномасозон тавонанд камбудиҳои пайдошударо ҳал кунанд.</description>
+               <description lang="zh">从官方 XBMC.org 插件库下载和安装 PVR 插件。[CR] 通过官方程序库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有失效或不能正常工作的插件,请向 XBMC 开发团队报告,以便及时处理。</description>
+               <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
+               <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
+               <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
+               <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
+               <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
+               <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Repository erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
+               <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
+               <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
+               <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="fr_CA">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
+               <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
+               <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
+               <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
+               <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
+               <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
+               <disclaimer lang="ko">Team XBMC는 이 저장소의 모든 추가기능을 제작하지 않았으며, 추가기능 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
+               <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
+               <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
+               <disclaimer lang="mk">XBMC тимот ги нема направено сите овие додатоци и не е одговорен за нивната содржина</disclaimer>
+               <disclaimer lang="nl">Team XBMC heeft niet alle add-ons in dit repository geschreven en is niet verantwoordelijk voor hun inhoud.</disclaimer>
+               <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
+               <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
+               <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
+               <disclaimer lang="pt_BR">O Time do XBMC não produziu todos os add-ons deste repositório, e portanto não é responsável ​​por seu conteúdo</disclaimer>
+               <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
+               <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
+               <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
+               <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
+               <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
+               <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
+               <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
+               <disclaimer lang="th">ทีม XBMC ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer>
+               <disclaimer lang="tr">XBMC takımı bu depodaki tüm eklentileri geliştirmemiştir ve bunların içeriklerinden sorumlu değildir.</disclaimer>
+               <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
+               <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
+               <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>ios</platform>
        </extension>
 </addon>
index 4cd450e..b03961c 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.pvr-osx32.xbmc.org"
                name="XBMC.org PVR Add-ons"
-               version="1.0.0"
+               version="1.1.2"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
+    <import addon="xbmc.pvr" version="1.9.0"/>
   </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org PVR Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/frodo/pvr/osx32/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/frodo/pvr/osx32/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/frodo/pvr/osx32</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/gotham/pvr/osx32/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/gotham/pvr/osx32/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/gotham/pvr/osx32</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира PVR добавки от XBMC.org</summary>
+               <summary lang="ca">Instal·la complements PVR des de XBMC.org</summary>
+               <summary lang="cs">Nainstalovat rozšíření PVR z XBMC.org</summary>
+               <summary lang="de">Installiere PVR Add-ons von XBMC.org</summary>
+               <summary lang="el">Εγκατάσταση Πρόσθετων PVR από το XBMC.org</summary>
                <summary lang="en">Install PVR Add-ons from XBMC.org</summary>
+               <summary lang="es">Instala Complementos de XBMC.org</summary>
+               <summary lang="es_AR">Instalar complemento PVR desde XBMC.org</summary>
+               <summary lang="es_MX">Instalar Complementos PVR de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons para PVR de XMBC.org</summary>
+               <summary lang="et">Paigalda videosalvesti lisasid lehelt XBMC.org</summary>
+               <summary lang="fr_CA">Installer l'extension du magnétoscope numérique depuis XBMC.org</summary>
+               <summary lang="gl">Instalar Engadidos de PVR dende XBMC.org</summary>
+               <summary lang="hu">PVR kiegészítők telepítése az XBMC.org-ról</summary>
+               <summary lang="ko">XBMC.org에서 PVR 추가기능 설치</summary>
+               <summary lang="lt">Įdiekite PVR priedą iš XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
+               <summary lang="nl">Installeer PVR Add-ons van XBMC.org</summary>
+               <summary lang="pl">Instaluj wtyczki PVR z XBMC.org</summary>
+               <summary lang="pt">Instalar Add-ons PVR de XBMC.org</summary>
+               <summary lang="pt_BR">Instalar Add-ons de PVR do repositório XBMC.org</summary>
+               <summary lang="sk">Inštalovať PVR doplnky z XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke PVR z XBMC.org</summary>
+               <summary lang="sv">Installera PVR-tillägg från XBMC.org</summary>
+               <summary lang="tg">Насб кардани барномаи иловагии PVR аз XBMC.org</summary>
+               <summary lang="zh">从 XBMC.org 安装 PVR 插件</summary>
+               <description lang="bg">Сваля и инсталира PVR добавки от официалното хранилище за добавки на XBMC.org.[CR] Ползвайки добавката ще се възползвате от системата ни от огледални сървъри - за да сваляте с висока скорост, от сървър в район близък до Вас.[CR] Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, моля уведомете екипа на XBMC, за да бъдат предприети необходимите действия.</description>
+               <description lang="de">Lade und installiere PVR Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
+               <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install PVR add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
+               <description lang="es">Descarga e instala complementos de PVR desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a ti.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="es_AR">Descarga e instalar el complemento desde el repositorio oficial de XBMC.org.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de espejos para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tu región.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para que podamos tomar las acciones necesarias.</description>
+               <description lang="es_MX">Descarga e instala complementos del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de nuestro servicio extenso de espejos para ayudarle a tener descargas mas rapidas desde una region mas cerca de usted.[CR] Todos los complementos en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons de PVR del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
+               <description lang="et">Lae alla ja installi videosalvesti lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
+               <description lang="fr_CA">Télécharger et installer l'extension du magnétoscope numérique depuis le dépôt officiel de XBMC.org.[CR] En utilisant le dépôt officiel vous pourrez bénéficier de notre service étendu de miroir de fichiers favorisant des téléchargements plus rapides depuis une région proche de vous.[CR] Toutes les extensions de ce dépôt ont subit des tests de base. Si vous trouvez une extension non fonctionnelle ou brisée, veuillez la rapporter à l'équipe XBMC afin que nous puissions agir.</description>
+               <description lang="gl">Descargar e instalar Engadidos de PVR dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="hu">PVR Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
+               <description lang="ko">공식 XBMC.org 추가기능 저장소에서 PVR 추가기능을 다운로드하여 설치합니다.[CR] 공식 저장소를 사용하면 파일 미러링 서비스를 통해 사용자와 가까운 곳에서 빠르게 다운로드할 수 있습니다.[CR] 저장소의 모든 추가기능은 기본 테스트를 거치지만 작동이 되지 않거나 손상된 추가기능을 발견하면 필요한 조치를 취할 수 있게 Team XBMC로 알려주시기 바랍니다.</description>
+               <description lang="lt">Atsisiųskite ir įdiekite PVR priedą iš oficialios XBMC.org priedų saugyklos. [Cr] Naudojant oficialią saugyklą galėsite pasinaudoti mūsų  failų Veidrodine saugyklos paslauga katra padės jums greičiau parsisiųsti iš artimiausios vietos šalia jūsų. [CR] Visi priedai šioje saugykloje yra perėję pagrindinį testavimą, jei atsisiuntėte neveikiantį ar/arba sugadintą priedą praneškite 'Team XBMC', kad galėtume imtis visų būtinų priemonių klaidai ištaisyti.</description>
+               <description lang="lv">Lejupielādējiet un uzstādiet PVR pielikumus no oficiālā XBMC.org pielikumu repozitorija.[CR]  Izmantojot oficiālo repozitoriju, varēsiet izmantot mūsu plašo spoguļu servisu, lai iegūtu ātrākas lejupielādes no reģiona, kas vistuvāk.[CR]  Visi pielikumi šajā repozitorijā ir izgājuši pamata testēšanu, bet, ja atrodat saplīsušu vai nestrādājošu pielikumu, lūdzu, ziņojiet par to Team XBMC, lai varam izpildīt nepieciešamās labošanas darbības.</description>
+               <description lang="nl">Download en installeer PVR add-ons van het officiële XBMC.org addon-repository.[CR] Wanneer u het officiële repository gebruikt beschikt u over onze uitgebreide mirrorservice, waardoor u snel kan downloaden van locaties in uw buurt.[CR] Alle add-ons in dit repository ondergingen standaardtests; indien u een defecte of niet-werkende add-on vindt, meld dit dan aan Team XBMC zodat zij actie kunnen ondernemen.</description>
+               <description lang="pl">Pobieraj i instaluj wtyczki PVR z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
+               <description lang="pt">Transferir e instalar add-ons PVR do repositório oficial XBMC.org.[CR] Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR] Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
+               <description lang="pt_BR">Transfira e instale add-ons de Tv ao Vivo, a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="sk">Stiahnuť a nainštalovať PVR rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
+               <description lang="sl">Prenos in namestitev dodatkov PVR iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sv">Ladda ner och installera PVR-tillägg från det officiella XBMC.org tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som hjälper dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
+               <description lang="tg">Барномаҳои иловагии PVR-ро аз анбори нармафзори расмии XBMC.org боргирӣ кунед ва насб кунед.[CR]  Агар анбори нармафзори расмиро истифода баред, метавонед нармафзори иловагиро аз серверҳои наздиктарин ба шумо боргирӣ намоед.[CR]  Ҳамаи нармафзори анбори зикршуда аз санҷиши асосӣ мегузаранд, ва агар шумо ягон барномаи иловагии вайроншуда ё ғайрифаъолро пайдо кунед, метавонед дар бораи он гузоришро ба Гурӯҳи кории XBMC фиристонед, то ки барномасозон тавонанд камбудиҳои пайдошударо ҳал кунанд.</description>
+               <description lang="zh">从官方 XBMC.org 插件库下载和安装 PVR 插件。[CR] 通过官方程序库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有失效或不能正常工作的插件,请向 XBMC 开发团队报告,以便及时处理。</description>
+               <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
+               <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
+               <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
+               <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
+               <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
+               <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Repository erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
+               <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
+               <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
+               <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="fr_CA">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
+               <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
+               <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
+               <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
+               <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
+               <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
+               <disclaimer lang="ko">Team XBMC는 이 저장소의 모든 추가기능을 제작하지 않았으며, 추가기능 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
+               <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
+               <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
+               <disclaimer lang="mk">XBMC тимот ги нема направено сите овие додатоци и не е одговорен за нивната содржина</disclaimer>
+               <disclaimer lang="nl">Team XBMC heeft niet alle add-ons in dit repository geschreven en is niet verantwoordelijk voor hun inhoud.</disclaimer>
+               <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
+               <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
+               <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
+               <disclaimer lang="pt_BR">O Time do XBMC não produziu todos os add-ons deste repositório, portanto não é responsável ​por seu conteúdo</disclaimer>
+               <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
+               <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
+               <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
+               <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
+               <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
+               <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
+               <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
+               <disclaimer lang="th">ทีม XBMC ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer>
+               <disclaimer lang="tr">XBMC takımı bu depodaki tüm eklentileri geliştirmemiştir ve bunların içeriklerinden sorumlu değildir.</disclaimer>
+               <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
+               <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
+               <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>osx32</platform>
        </extension>
 </addon>
index 519e9ae..b1287f0 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.pvr-osx64.xbmc.org"
                name="XBMC.org PVR Add-ons"
-               version="1.0.0"
+               version="1.0.2"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
+    <import addon="xbmc.pvr" version="1.9.0"/>
   </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org PVR Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/frodo/pvr/osx64/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/frodo/pvr/osx64/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/frodo/pvr/osx64</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/gotham/pvr/osx64/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/gotham/pvr/osx64/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/gotham/pvr/osx64</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира PVR добавки от XBMC.org</summary>
+               <summary lang="ca">Instal·la complements PVR des de XBMC.org</summary>
+               <summary lang="cs">Nainstalovat rozšíření PVR z XBMC.org</summary>
+               <summary lang="de">Installiere PVR Add-ons von XBMC.org</summary>
+               <summary lang="el">Εγκατάσταση Πρόσθετων PVR από το XBMC.org</summary>
                <summary lang="en">Install PVR Add-ons from XBMC.org</summary>
+               <summary lang="es">Instala Complementos de XBMC.org</summary>
+               <summary lang="es_AR">Instalar complemento PVR desde XBMC.org</summary>
+               <summary lang="es_MX">Instalar Complementos PVR de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons para PVR de XMBC.org</summary>
+               <summary lang="et">Paigalda videosalvesti lisasid lehelt XBMC.org</summary>
+               <summary lang="fr_CA">Installer l'extension du magnétoscope numérique depuis XBMC.org</summary>
+               <summary lang="gl">Instalar Engadidos de PVR dende XBMC.org</summary>
+               <summary lang="hu">PVR kiegészítők telepítése az XBMC.org-ról</summary>
+               <summary lang="ko">XBMC.org에서 PVR 추가기능 설치</summary>
+               <summary lang="lt">Įdiekite PVR priedą iš XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
+               <summary lang="nl">Installeer PVR Add-ons van XBMC.org</summary>
+               <summary lang="pl">Instaluj wtyczki PVR z XBMC.org</summary>
+               <summary lang="pt">Instalar Add-ons PVR de XBMC.org</summary>
+               <summary lang="pt_BR">Instalar Add-ons de PVR do repositório XBMC.org</summary>
+               <summary lang="sk">Inštalovať PVR doplnky z XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke PVR z XBMC.org</summary>
+               <summary lang="sv">Installera PVR-tillägg från XBMC.org</summary>
+               <summary lang="tg">Насб кардани барномаи иловагии PVR аз XBMC.org</summary>
+               <summary lang="zh">从 XBMC.org 安装 PVR 插件</summary>
+               <description lang="bg">Сваля и инсталира PVR добавки от официалното хранилище за добавки на XBMC.org.[CR] Ползвайки добавката ще се възползвате от системата ни от огледални сървъри - за да сваляте с висока скорост, от сървър в район близък до Вас.[CR] Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, моля уведомете екипа на XBMC, за да бъдат предприети необходимите действия.</description>
+               <description lang="de">Lade und installiere PVR Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
+               <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install PVR add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
+               <description lang="es">Descarga e instala complementos de PVR desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a ti.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="es_AR">Descarga e instalar el complemento desde el repositorio oficial de XBMC.org.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de espejos para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tu región.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para que podamos tomar las acciones necesarias.</description>
+               <description lang="es_MX">Descarga e instala complementos del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de nuestro servicio extenso de espejos para ayudarle a tener descargas mas rapidas desde una region mas cerca de usted.[CR] Todos los complementos en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons de PVR del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
+               <description lang="et">Lae alla ja installi videosalvesti lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
+               <description lang="fr_CA">Télécharger et installer l'extension du magnétoscope numérique depuis le dépôt officiel de XBMC.org.[CR] En utilisant le dépôt officiel vous pourrez bénéficier de notre service étendu de miroir de fichiers favorisant des téléchargements plus rapides depuis une région proche de vous.[CR] Toutes les extensions de ce dépôt ont subit des tests de base. Si vous trouvez une extension non fonctionnelle ou brisée, veuillez la rapporter à l'équipe XBMC afin que nous puissions agir.</description>
+               <description lang="gl">Descargar e instalar Engadidos de PVR dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="hu">PVR Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
+               <description lang="ko">공식 XBMC.org 추가기능 저장소에서 PVR 추가기능을 다운로드하여 설치합니다.[CR] 공식 저장소를 사용하면 파일 미러링 서비스를 통해 사용자와 가까운 곳에서 빠르게 다운로드할 수 있습니다.[CR] 저장소의 모든 추가기능은 기본 테스트를 거치지만 작동이 되지 않거나 손상된 추가기능을 발견하면 필요한 조치를 취할 수 있게 Team XBMC로 알려주시기 바랍니다.</description>
+               <description lang="lt">Atsisiųskite ir įdiekite PVR priedą iš oficialios XBMC.org priedų saugyklos. [Cr] Naudojant oficialią saugyklą galėsite pasinaudoti mūsų  failų Veidrodine saugyklos paslauga katra padės jums greičiau parsisiųsti iš artimiausios vietos šalia jūsų. [CR] Visi priedai šioje saugykloje yra perėję pagrindinį testavimą, jei atsisiuntėte neveikiantį ar/arba sugadintą priedą praneškite 'Team XBMC', kad galėtume imtis visų būtinų priemonių klaidai ištaisyti.</description>
+               <description lang="lv">Lejupielādējiet un uzstādiet PVR pielikumus no oficiālā XBMC.org pielikumu repozitorija.[CR]  Izmantojot oficiālo repozitoriju, varēsiet izmantot mūsu plašo spoguļu servisu, lai iegūtu ātrākas lejupielādes no reģiona, kas vistuvāk.[CR]  Visi pielikumi šajā repozitorijā ir izgājuši pamata testēšanu, bet, ja atrodat saplīsušu vai nestrādājošu pielikumu, lūdzu, ziņojiet par to Team XBMC, lai varam izpildīt nepieciešamās labošanas darbības.</description>
+               <description lang="nl">Download en installeer PVR add-ons van het officiële XBMC.org addon-repository.[CR] Wanneer u het officiële repository gebruikt beschikt u over onze uitgebreide mirrorservice, waardoor u snel kan downloaden van locaties in uw buurt.[CR] Alle add-ons in dit repository ondergingen standaardtests; indien u een defecte of niet-werkende add-on vindt, meld dit dan aan Team XBMC zodat zij actie kunnen ondernemen.</description>
+               <description lang="pl">Pobieraj i instaluj wtyczki PVR z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
+               <description lang="pt">Transferir e instalar add-ons PVR do repositório oficial XBMC.org.[CR] Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR] Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
+               <description lang="pt_BR">Transfira e instale add-ons de Tv ao Vivo, a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="sk">Stiahnuť a nainštalovať PVR rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
+               <description lang="sl">Prenos in namestitev dodatkov PVR iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sv">Ladda ner och installera PVR-tillägg från det officiella XBMC.org tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som hjälper dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
+               <description lang="tg">Барномаҳои иловагии PVR-ро аз анбори нармафзори расмии XBMC.org боргирӣ кунед ва насб кунед.[CR]  Агар анбори нармафзори расмиро истифода баред, метавонед нармафзори иловагиро аз серверҳои наздиктарин ба шумо боргирӣ намоед.[CR]  Ҳамаи нармафзори анбори зикршуда аз санҷиши асосӣ мегузаранд, ва агар шумо ягон барномаи иловагии вайроншуда ё ғайрифаъолро пайдо кунед, метавонед дар бораи он гузоришро ба Гурӯҳи кории XBMC фиристонед, то ки барномасозон тавонанд камбудиҳои пайдошударо ҳал кунанд.</description>
+               <description lang="zh">从官方 XBMC.org 插件库下载和安装 PVR 插件。[CR] 通过官方程序库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有失效或不能正常工作的插件,请向 XBMC 开发团队报告,以便及时处理。</description>
+               <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
+               <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
+               <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
+               <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
+               <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
+               <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Repository erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
+               <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
+               <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
+               <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="fr_CA">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
+               <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
+               <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
+               <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
+               <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
+               <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
+               <disclaimer lang="ko">Team XBMC는 이 저장소의 모든 추가기능을 제작하지 않았으며, 추가기능 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
+               <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
+               <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
+               <disclaimer lang="mk">XBMC тимот ги нема направено сите овие додатоци и не е одговорен за нивната содржина</disclaimer>
+               <disclaimer lang="nl">Team XBMC heeft niet alle add-ons in dit repository geschreven en is niet verantwoordelijk voor hun inhoud.</disclaimer>
+               <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
+               <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
+               <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
+               <disclaimer lang="pt_BR">O Time do XBMC não produziu todos os add-ons deste repositório, e portanto não é responsável ​​por seu conteúdo</disclaimer>
+               <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
+               <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
+               <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
+               <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
+               <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
+               <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
+               <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
+               <disclaimer lang="th">ทีม XBMC ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer>
+               <disclaimer lang="tr">XBMC takımı bu depodaki tüm eklentileri geliştirmemiştir ve bunların içeriklerinden sorumlu değildir.</disclaimer>
+               <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
+               <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
+               <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>osx64</platform>
        </extension>
 </addon>
index c8be2f8..e432137 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="repository.pvr-win32.xbmc.org"
                name="XBMC.org PVR Add-ons"
-               version="1.0.0"
+               version="1.1.2"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
+    <import addon="xbmc.pvr" version="1.9.0"/>
   </requires>
        <extension point="xbmc.addon.repository"
                name="Official XBMC.org PVR Add-on Repository">
-               <info compressed="true">http://mirrors.xbmc.org/addons/frodo/pvr/win32/addons.xml</info>
-               <checksum>http://mirrors.xbmc.org/addons/frodo/pvr/win32/addons.xml.md5</checksum>
-               <datadir zip="true">http://mirrors.xbmc.org/addons/frodo/pvr/win32</datadir>
+               <info compressed="true">http://mirrors.xbmc.org/addons/gotham/pvr/win32/addons.xml</info>
+               <checksum>http://mirrors.xbmc.org/addons/gotham/pvr/win32/addons.xml.md5</checksum>
+               <datadir zip="true">http://mirrors.xbmc.org/addons/gotham/pvr/win32</datadir>
                <hashes>true</hashes>
        </extension>
        <extension point="xbmc.addon.metadata">
+               <summary lang="bg">Инсталира PVR добавки от XBMC.org</summary>
+               <summary lang="ca">Instal·la complements PVR des de XBMC.org</summary>
+               <summary lang="cs">Nainstalovat rozšíření PVR z XBMC.org</summary>
+               <summary lang="de">Installiere PVR Add-ons von XBMC.org</summary>
+               <summary lang="el">Εγκατάσταση Πρόσθετων PVR από το XBMC.org</summary>
                <summary lang="en">Install PVR Add-ons from XBMC.org</summary>
+               <summary lang="es">Instala Complementos de XBMC.org</summary>
+               <summary lang="es_AR">Instalar complemento PVR desde XBMC.org</summary>
+               <summary lang="es_MX">Instalar Complementos PVR de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons para PVR de XMBC.org</summary>
+               <summary lang="et">Paigalda videosalvesti lisasid lehelt XBMC.org</summary>
+               <summary lang="fr_CA">Installer l'extension du magnétoscope numérique depuis XBMC.org</summary>
+               <summary lang="gl">Instalar Engadidos de PVR dende XBMC.org</summary>
+               <summary lang="hu">PVR kiegészítők telepítése az XBMC.org-ról</summary>
+               <summary lang="ko">XBMC.org에서 PVR 추가기능 설치</summary>
+               <summary lang="lt">Įdiekite PVR priedą iš XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
+               <summary lang="nl">Installeer PVR Add-ons van XBMC.org</summary>
+               <summary lang="pl">Instaluj wtyczki PVR z XBMC.org</summary>
+               <summary lang="pt">Instalar Add-ons PVR de XBMC.org</summary>
+               <summary lang="pt_BR">Instalar Add-ons de PVR do repositório XBMC.org</summary>
+               <summary lang="sk">Inštalovať PVR doplnky z XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke PVR z XBMC.org</summary>
+               <summary lang="sv">Installera PVR-tillägg från XBMC.org</summary>
+               <summary lang="tg">Насб кардани барномаи иловагии PVR аз XBMC.org</summary>
+               <summary lang="zh">从 XBMC.org 安装 PVR 插件</summary>
+               <description lang="bg">Сваля и инсталира PVR добавки от официалното хранилище за добавки на XBMC.org.[CR] Ползвайки добавката ще се възползвате от системата ни от огледални сървъри - за да сваляте с висока скорост, от сървър в район близък до Вас.[CR] Добавките от хранилището са преминали през няколко основни теста, но въпреки това ако се натъкнете на неработеща или проблемна добавка, моля уведомете екипа на XBMC, за да бъдат предприети необходимите действия.</description>
+               <description lang="de">Lade und installiere PVR Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
+               <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install PVR add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
+               <description lang="es">Descarga e instala complementos de PVR desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a ti.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
+               <description lang="es_AR">Descarga e instalar el complemento desde el repositorio oficial de XBMC.org.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de espejos para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tu región.[CR] Todos los complementos en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún complemento que no funciona, por favor informa de ello al equipo de XBMC para que podamos tomar las acciones necesarias.</description>
+               <description lang="es_MX">Descarga e instala complementos del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de nuestro servicio extenso de espejos para ayudarle a tener descargas mas rapidas desde una region mas cerca de usted.[CR] Todos los complementos en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons de PVR del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
+               <description lang="et">Lae alla ja installi videosalvesti lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
+               <description lang="fr_CA">Télécharger et installer l'extension du magnétoscope numérique depuis le dépôt officiel de XBMC.org.[CR] En utilisant le dépôt officiel vous pourrez bénéficier de notre service étendu de miroir de fichiers favorisant des téléchargements plus rapides depuis une région proche de vous.[CR] Toutes les extensions de ce dépôt ont subit des tests de base. Si vous trouvez une extension non fonctionnelle ou brisée, veuillez la rapporter à l'équipe XBMC afin que nous puissions agir.</description>
+               <description lang="gl">Descargar e instalar Engadidos de PVR dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="hu">PVR Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
+               <description lang="ko">공식 XBMC.org 추가기능 저장소에서 PVR 추가기능을 다운로드하여 설치합니다.[CR] 공식 저장소를 사용하면 파일 미러링 서비스를 통해 사용자와 가까운 곳에서 빠르게 다운로드할 수 있습니다.[CR] 저장소의 모든 추가기능은 기본 테스트를 거치지만 작동이 되지 않거나 손상된 추가기능을 발견하면 필요한 조치를 취할 수 있게 Team XBMC로 알려주시기 바랍니다.</description>
+               <description lang="lt">Atsisiųskite ir įdiekite PVR priedą iš oficialios XBMC.org priedų saugyklos. [Cr] Naudojant oficialią saugyklą galėsite pasinaudoti mūsų  failų Veidrodine saugyklos paslauga katra padės jums greičiau parsisiųsti iš artimiausios vietos šalia jūsų. [CR] Visi priedai šioje saugykloje yra perėję pagrindinį testavimą, jei atsisiuntėte neveikiantį ar/arba sugadintą priedą praneškite 'Team XBMC', kad galėtume imtis visų būtinų priemonių klaidai ištaisyti.</description>
+               <description lang="lv">Lejupielādējiet un uzstādiet PVR pielikumus no oficiālā XBMC.org pielikumu repozitorija.[CR]  Izmantojot oficiālo repozitoriju, varēsiet izmantot mūsu plašo spoguļu servisu, lai iegūtu ātrākas lejupielādes no reģiona, kas vistuvāk.[CR]  Visi pielikumi šajā repozitorijā ir izgājuši pamata testēšanu, bet, ja atrodat saplīsušu vai nestrādājošu pielikumu, lūdzu, ziņojiet par to Team XBMC, lai varam izpildīt nepieciešamās labošanas darbības.</description>
+               <description lang="nl">Download en installeer PVR add-ons van het officiële XBMC.org addon-repository.[CR] Wanneer u het officiële repository gebruikt beschikt u over onze uitgebreide mirrorservice, waardoor u snel kan downloaden van locaties in uw buurt.[CR] Alle add-ons in dit repository ondergingen standaardtests; indien u een defecte of niet-werkende add-on vindt, meld dit dan aan Team XBMC zodat zij actie kunnen ondernemen.</description>
+               <description lang="pl">Pobieraj i instaluj wtyczki PVR z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
+               <description lang="pt">Transferir e instalar add-ons PVR do repositório oficial XBMC.org.[CR] Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR] Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
+               <description lang="pt_BR">Transfira e instale add-ons de Tv ao Vivo, a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="sk">Stiahnuť a nainštalovať PVR rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
+               <description lang="sl">Prenos in namestitev dodatkov PVR iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sv">Ladda ner och installera PVR-tillägg från det officiella XBMC.org tilläggsförrådet.[CR] Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som hjälper dig till snabbare nedladdningar från en plats nära dig.[CR] Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
+               <description lang="tg">Барномаҳои иловагии PVR-ро аз анбори нармафзори расмии XBMC.org боргирӣ кунед ва насб кунед.[CR]  Агар анбори нармафзори расмиро истифода баред, метавонед нармафзори иловагиро аз серверҳои наздиктарин ба шумо боргирӣ намоед.[CR]  Ҳамаи нармафзори анбори зикршуда аз санҷиши асосӣ мегузаранд, ва агар шумо ягон барномаи иловагии вайроншуда ё ғайрифаъолро пайдо кунед, метавонед дар бораи он гузоришро ба Гурӯҳи кории XBMC фиристонед, то ки барномасозон тавонанд камбудиҳои пайдошударо ҳал кунанд.</description>
+               <description lang="zh">从官方 XBMC.org 插件库下载和安装 PVR 插件。[CR] 通过官方程序库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有失效或不能正常工作的插件,请向 XBMC 开发团队报告,以便及时处理。</description>
+               <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
+               <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
+               <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
+               <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
+               <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
+               <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Repository erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
+               <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
+               <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
+               <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
+               <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="fr_CA">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
+               <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
+               <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
+               <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
+               <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
+               <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
+               <disclaimer lang="ko">Team XBMC는 이 저장소의 모든 추가기능을 제작하지 않았으며, 추가기능 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
+               <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
+               <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
+               <disclaimer lang="mk">XBMC тимот ги нема направено сите овие додатоци и не е одговорен за нивната содржина</disclaimer>
+               <disclaimer lang="nl">Team XBMC heeft niet alle add-ons in dit repository geschreven en is niet verantwoordelijk voor hun inhoud.</disclaimer>
+               <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
+               <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
+               <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
+               <disclaimer lang="pt_BR">O Time do  XBMC não produziu todos os add-ons deste repositório, e portanto não é responsável ​​por seu conteúdo</disclaimer>
+               <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
+               <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
+               <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
+               <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
+               <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
+               <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
+               <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
+               <disclaimer lang="th">ทีม XBMC ไม่ได้จัดทำ ส่วนเสริม ทั้งหมดในแหล่งข้อมูลโปรแกรมนี้ และจะไม่รับผิดชอบต่อเนื้อหาเหล่านั้น</disclaimer>
+               <disclaimer lang="tr">XBMC takımı bu depodaki tüm eklentileri geliştirmemiştir ve bunların içeriklerinden sorumlu değildir.</disclaimer>
+               <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
+               <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
+               <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>windx wingl</platform>
        </extension>
 </addon>
index f866dee..e6b7209 100644 (file)
@@ -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.14"
+               version="2.1.18"
                provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.addon" version="12.0.0"/>
@@ -22,7 +22,7 @@
        <extension point="xbmc.addon.metadata">
                <summary lang="af">Installeer Byvoegsels vanaf XBMC.org</summary>
                <summary lang="am">ከ XBMC.org ተጨማ-ሪዎች መግጠሚያ </summary>
-               <summary lang="ar">تثبÙ\8aت Ø§Ù\84إضاÙ\81ات Ù\85Ù\86 XBMC.org</summary>
+               <summary lang="ar">ثبت Ø¥Ø¶Ø§Ù\81ات Ù\85Ù\86 Ù\85Ù\88Ù\82ع Ø¥Ù\83س Ø¨Ù\89 Ø¥Ù\85 Ø³Ù\89 Ø§Ù\84رسÙ\85Ù\89</summary>
                <summary lang="be">Усталяваць дадатак з XBMC.org</summary>
                <summary lang="bg">Инсталира добавки от XBMC.org</summary>
                <summary lang="ca">Instal·la complements des de XBMC.org</summary>
                <summary lang="es">Instalar Add-ons de XBMC.org</summary>
                <summary lang="es_AR">Instalar Add-ons de XBMC.org</summary>
                <summary lang="es_MX">Installar Add-ons de XBMC.org</summary>
+               <summary lang="es_VE">Instalar Add-ons de XBMC.org</summary>
                <summary lang="et">Paigalda lisasid lehelt XBMC.org</summary>
                <summary lang="eu">Instalatu XBMC.org-eko gehigarriak</summary>
                <summary lang="fi">Asenna lisäosia XBMC.org -sivustolta</summary>
                <summary lang="fr">Installer des extensions depuis XBMC.org</summary>
+               <summary lang="fr_CA">Installer des extensions depuis XBMC.org</summary>
                <summary lang="gl">Instalar Engadidos dende XBMC.org</summary>
-               <summary lang="he">×\94תקנת ×ª×\95ספ×\99×\9d ×\9eÖ¾XBMC.org</summary>
+               <summary lang="he">×\94תק×\9f ×\94ר×\97×\91×\95ת ×\9e-XBMC.org</summary>
                <summary lang="hr">Instaliraj dodatke s XBMC.org</summary>
                <summary lang="hu">Kiegészítők letöltése az XBMC.org-ról</summary>
-               <summary lang="id">pasang pengaya dari XMBC.org</summary>
+               <summary lang="id">pasang pengaya dari XBMC.org</summary>
                <summary lang="is">Setja inn viðbætur frá XBMC.org</summary>
                <summary lang="it">Installa add-on da XBMC.org</summary>
                <summary lang="ja">XBMC.org からアドオンをインストール</summary>
-               <summary lang="ko">XBMC.orgì\97\90ì\84\9c ì\95 ë\93\9cì\98¨ 설치</summary>
+               <summary lang="ko">XBMC.orgì\97\90ì\84\9c ì\94ê°\80기ë\8a¥ 설치</summary>
                <summary lang="ku">دابەزاندنی پێوەکراو لە ڕێی XBMC.org</summary>
                <summary lang="lt">Idiegti papildinius i XBMC.org</summary>
-               <summary lang="lv">Instalē paplašinājumus no XBMC.org</summary>
+               <summary lang="lv">Uzstādīt PVR pielikumus no XBMC.org</summary>
                <summary lang="mk">Инсталирај Додатоци од XBMC.org</summary>
                <summary lang="my">XBMC.org မှ Add-on များကိုသွင်းမည်</summary>
                <summary lang="nl">Add-ons van XBMC.org installeren</summary>
@@ -63,7 +65,7 @@
                <summary lang="ru">Установить дополнения с сайта XBMC.org</summary>
                <summary lang="se">Installera tillägg från XBMC.org</summary>
                <summary lang="sk">Inštalovať rozšírenia z XBMC.org</summary>
-               <summary lang="sl">Namestite dodatke iz XBMC.org</summary>
+               <summary lang="sl">Namestite dodatke z XBMC.org</summary>
                <summary lang="sv">Installera tillägg från XBMC.org</summary>
                <summary lang="ta_IN">XBMC.org இருந்து துணை பயன்களை நிறுவு</summary>
                <summary lang="tg">Насб кардани барномаҳои иловагӣ аз XBMC.org</summary>
                <description lang="cs">Stáhnout a nainstalovat rozšíření z oficiálního repozitáře XBMC.org. [CR]  Použitím oficiálního repozitáře získáte rozsáhlý systém zrcadel, který vám umožní rychlé stažení z blízkého regionu.[CR]  Všechna rozšíření v repozitáři prošla základním testováním. Pokud najdete rozbité, nebo nefunkční, rozšíření nahlaste jej týmu XBMC, abychom mohli dle potřeby zakročit.</description>
                <description lang="cy">Llwytho i lawr a gosod ychwanegion o storfa ychwanegion Swyddogol XBMC.org.{CR}Drwy ddefnyddio'r Storfa swyddogol bydd modd i chi gymryd mantais o'n gwasanaeth drychau ffeiliau i'ch cynorthwyoi lwytho i lawr yn gyflym o ardal yn agos i chi.[CR] Mae pob ychwnaegyn yn y storfa hwn wedi eu profi'n fras, os ydych yn canfod ychwanegyn sydd wedi torri  neu ddim yn gweithio yna hysbyswch Team XBMC fel bod modd i ni weithredu.</description>
                <description lang="da">Hent og installer add-ons fra det officielle XBMC.org add-on fjernlager.[CR] Ved at bruge det officielle fjernlager drager du fordel af vores omfattende spejltjeneste, som gør at du kan hente hurtigere fra et sted nær dig.[CR]  Alle add-ons i dette fjernlager har gennemgået grundlæggende tests. Hvis du finder en defekt add-on, så rapporter venligst dette til Team XBMC, så vi kan tage hånd i hanke med eventuelle problemer.</description>
-               <description lang="de">Downloade und installiere Add-Ons aus dem offiziellen XBMC.org Add-On Repository.[CR]  Durch die Nutzung des offiziellen Repository hat man Zugriff auf das große Datei Mirror System welches schnelle Downloads aus der Nähe bereit stellt.[CR]  Alle Add-Ons im Repository wurden getestet, sollte dennoch ein Add-On Fehler haben oder gar nicht funktionieren, sollte dieser Fehler an das Team XBMC gemeldet werden, damit die nötigen Schritte getroffen werden können</description>
+               <description lang="de">Lade und installiere Add-Ons aus dem offiziellen XBMC.org Add-On Depot.[CR]  Durch die Nutzung des offiziellen Depots profitieren Sie vom umfangreichen Datei-Verteilsystem, welches hilft schneller Downloads in Ihrer Nähe bereitzustellen.[CR] Alle Add-Ons dieses Depots wurden grundlegender Prüfungen unterzogen, sollte ein Add-On dennoch Fehler haben oder nicht funktionieren melden Sie dies bitte an das Team XBMC, damit die nötigen Schritte eingeleitet werden können.</description>
                <description lang="el">Λήψη και εγκατάσταση πρόσθετων από το επίσημο αποθετήριο του XBMC.org.[CR]  Χρησιμοποιώντας το Επίσημο Αποθετήριο μπορείτε να εκμεταλλευτείτε τους εκτεταμένους διακομιστές αρχείων μας για ταχύτερες λήψεις από μία κοντινή σας περιοχή.[CR]  Όλα τα πρόσθετα σε αυτό το αποθετήριο έχουν περάσει τις στοιχειώδεις δοκιμές, αν βρείτε ένα κατεστραμμένο ή ανενεργό πρόσθετο παρακαλούμε να το αναφέρετε στην Ομάδα XBMC ούτως ώστε να ληφθούν οι απαραίτητες ενέργειες.</description>
                <description lang="en">Download and install add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
                <description lang="en_US">Download and install add-ons from the Official XBMC.org add-on repository.[CR]  By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR]  All add-ons on this repository have under gone basic testing, if you find a broken or not working add-on please report it to Team XBMC so we can take any action needed.</description>
                <description lang="es">Descarga e instala add-ons desde el repositorio oficial de XBMC.[CR]  Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a tí.[CR]  Todos los add-ons en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún add-on que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
                <description lang="es_AR">Descarga e instala add-ons desde el repositorio oficial de XBMC.[CR] Usando el repositorio oficial tendrás las ventajas de nuestro servicio de mirrors para ayudarte a conseguir unas descargas más rápidas de un sitio cercano a vos.[CR] Todos los add-ons en este repositorio han pasado por un periodo de pruebas básico, pero si encuentras algún add-on que no funciona, por favor informa de ello al equipo de XBMC para solucionar el problema.</description>
                <description lang="es_MX">Descarga e instala add-ons del repositorio oficial XBMC.org.[CR] Al usar el repositorio oficial, tendrá la ventaja de los servicios de espejos, y así tener descargas más rápidas.[CR] Todos los add-ons en este repositorio se han probado de manera básica, si encuentra alguno que no funciona o roto, favor de reportarlo al Equipo de XBMC para poder tomar las medidas necesarias.</description>
+               <description lang="es_VE">Descarga e instala add-ons del repositorio oficial de XBMC.org.[CR] Al hacer uso del repositorio oficial podrás tomar ventaja de nuestro extenso servicio para descarga de archivos a gran velocidad desde una región cercana a la tuya. [CR] Todos los add-ons en este repositorio han sido probados de forma básica, si algún add-on no puede ser descargado o no funciona por favor repórtalo al Equipo de XBMC para de esta manera tomar cualquier acción que sea necesaria.</description>
                <description lang="et">Lae alla ja installi lisasid ametlikust XBMC.org hoidlast.[CR]  Ametliku hoidla kasutamise eeliseks on võimalus kasutada meie ulatuslikku failide peegelteenust laadides faile sulle kõige lähemast serverist.[CR]  Kõik lisad selles hoidlas on läbinud elementaarse testimise. Siiski, kui sa leiad vigase või mittetöötava lisa, siis palun teavita sellest XBMC meeskonda, et me saaksime vajaliku abi osutada.</description>
-               <description lang="eu">Gehigarriak XMBC.org biltegi ofizialetik deskargatu eta instalatu.[CR]  &#10;Biltegi ofiziala erabiliaz zutaz gertu dagoen gune batetik deskargatu&#10;ditzakezu gure fitxategi-ispilu multzoaren abantailaz aprobetxatuaz.[CR]  &#10;Biltegi honetako gehigarri guztiek proba basikoak gainditu dituzte baina hondaturiko edo funtzionatzen ez duen gehigarri baten bat aurki ezkero honen berri XBMC taldeari eman beharrezko ekintzak burutu ditzagun.</description>
+               <description lang="eu">Gehigarriak XBMC.org biltegi ofizialetik deskargatu eta instalatu.[CR]  &#10;Biltegi ofiziala erabiliaz zutaz gertu dagoen gune batetik deskargatu&#10;ditzakezu gure fitxategi-ispilu multzoaren abantailaz aprobetxatuaz.[CR]  &#10;Biltegi honetako gehigarri guztiek proba basikoak gainditu dituzte baina hondaturiko edo funtzionatzen ez duen gehigarri baten bat aurki ezkero honen berri XBMC taldeari eman beharrezko ekintzak burutu ditzagun.</description>
                <description lang="fi">Lataa ja asenna lisäosia virallisesta XBMC.org -lisäosasäilöstä.[CR]  Käyttämällä virallista säilöä sinun on mahdollista käyttää hyväksesi meidän kattavaa tiedostojen peilauspalveluamme saavuttaaksesi korkeat latausnopeudet sinun lähialueeltasi.[CR]  Kaikki tämän säilön lisäosat on testattu toimiviksi, jos löydät rikkinäisen tai "ei toimivan" lisäosan, ilmoita siitä Team XBMC:lle, jotta voimme korjata asian.</description>
                <description lang="fr">Télécharger et installer des extensions à partir du dépôt officiel XBMC.org.[CR]  En utilisant le dépôt officiel, vous bénéficierez de notre service de serveurs miroirs vous permettant de télécharger rapidement depuis une région proche de vous.[CR]  Toutes les extensions de ce dépôt ont été testées de manière basique, si vous trouvez une extension corrompue ou inutilisable, merci d'en informer la Team XBMC afin que nous puissions prendre les mesures nécessaires.</description>
-               <description lang="gl">Descargar e instalar Engadidos dende o repositorio de engadidos oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vanatexes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
-               <description lang="he">ניתן להוריד ולהתקין תוספים מהמאגר הרשמי של Official XBMC.org.[CR]‎ השימוש במאגר הרשמי מקנה לך את היתרון שבשימוש בשירות שיקוף הקבצים שלנו ובכך לסייע לך להוריד מהר יותר מהאזור המועדף עליך.[CR] כל התוספים במאגר זה עברו בדיקה בסיסית, אם מצאת שאחד מהם פגום או בלתי פעיל נא לדווח עליו לצוות של XBMC כדי שנוכל לפעול בהתאם.</description>
+               <description lang="fr_CA">Télécharger et installer des extensions à partir du dépôt officiel XBMC.org.[CR]  En utilisant le dépôt officiel, vous bénéficierez de notre service de serveurs miroirs vous permettant de télécharger rapidement depuis une région proche de vous.[CR]  Toutes les extensions de ce dépôt ont été testées de manière basique, si vous trouvez une extension corrompue ou inutilisable, merci d'en informer la Team XBMC afin que nous puissions prendre les mesures nécessaires.</description>
+               <description lang="gl">Descargar e instalar Engadidos dende o repositorio oficial de XBMC.org.[CR] Empregando o repositorio oficial, vostede poderá disfrutar das vantaxes do seu extenso servizo de replicación de ficheiros para axudar a descargas rápidas dende unha rexión preto a vostede.[CR] Tódolos Engadidos deste repositorio pasaron por comprobacións básicas. Se atopa algún Engadido roto ou non funcional, por favor reporteo ó equipo de XBMC para que poidan actuar en consecuencia.</description>
+               <description lang="he">הורד והתקן הרחבות מהמאגר הרשמי של XBMC.org.[CR]‎ היתרון שבשימוש במאגר הרשמי הוא הורדה דרך שירות שיקוף קבצים המאפשר הורדה מהירה מהשרת הקרוב אליך.[CR] כל ההרחבות במאגר זה עברו בדיקה בסיסית, אם נתקלת בהרחבה שלא ניתנת להורדה או שאינה תקינה אנא דווח עליה לצוות הפיתוח של XBMC.</description>
                <description lang="hr">Preuzmite i instalirajte dodatke sa službenog XBMC.org repozitorija dodataka.[CR] Korištenjem službenog repozitorija bit ćete u mogućnosti iskoristiti prednosti usluge našeg brzog zrcalnog poslužitelja datoteka, da bi mogli brže preuzimati iz regije koje je bliže vašoj lokaciji.[CR] Svi dodaci na ovom repozitoriju prošli su osnovno testiranje, u slučaju da primijetite neispravan dodatak, molimo vas da to prijavite XBMC timu koji će zatim poduzeti potrebne korake.</description>
                <description lang="hu">Kiegészítők letöltése és telepítése a hivatalos XBMC.org tárolóhelyről.[CR] A hivatalos tárolóhely használatával kihasználhatod szerteágazó tükör-kiszolgáló hálózatunkat, ami segít a gyorsabb letöltésben egy hozzád közelebb eső körzet használatával.[CR]  Minden kiegészítő ezen a tárolóhelyen átment egy alaptesztelésen. Ha mégis hibás vagy nem működő kiegészítőt találsz, kérünk jelezd az XBMC csapatnak, hogy megtegyük a szükséges lépéseket.</description>
                <description lang="id">Unduh dan pasang pengaya dari repositori pengaya resmi XBMC.org. [CR] Dengan menggunakan repositori resmi anda akan mendapat keuntungan dari miror berkas kami yang luas dimana dapat membantu anda untuk lebih cepat mengunduh dari daerah yang dekat dengan anda. [CR] Semua pengaya pada repository telah melalui uji coba standar, jika anda menemukan pengaya yang rusak atau tidak bekerja tolong laporkan kepada tim XBMC agar kami bisa menindak lanjutinya.</description>
                <description lang="is">Sækja og setja inn viðbætur frá hinu viðurkennda XBMC.org viðbóta safni.[CR] Með því að nota þetta safn getur þú nýtt þér möguleikann á fullkmonni speglunar þjónustu sem hjálpar við að sækja viðbætur hraðar frá landsvæði nálægt þér.[CR] Allar viðbætur í þessu safni hafa gengið undir grunn prófanir, ef þú finnur viðbætur sem eru bilaðar eða virka ekki vinsamlegast látið XBMC teymið vita svo við getum gert eitthvað í málinu.</description>
                <description lang="it">Scarica ed installa gli add-on dalla libreria ufficiale di XBMC.org[CR]  Usando la libreria ufficiale avrai il vantaggio di ottenere download più veloci con mirror più vicini alla tua località.[CR]  Tutti gli add-on in questa libreria sono stati sottoposti a test di base, se ne trovi uno non funzionante o corrotto, per favore riporta il problema al team di XBMC così potremmo prendere provvedimenti.</description>
                <description lang="ja">オフィシャルの XBMC.org リポジトリからアドオンをダウンロードします。[CR]  オフィシャルリポジトリを使うことで、お住まいのエリアに近いミラーサーバーから高速にアドオンをダウンロードすることが可能です。[CR]  このリポジトリ上のアドオンは全て、簡単な動作テストを受けてはいますが、もしアドオンがおかしかったりうまく動作しなかったりした場合は、XBMC チームに連絡をお願いします。</description>
-               <description lang="ko">ê³µì\8b\9d XBMC.org ì\95 ë\93\9cì\98¨ ì \80ì\9e¥ì\86\8cì\97\90ì\84\9c ì\95 ë\93\9cì\98¨ì\9d\84 ë\8b¤ì\9a´ë¡\9cë\93\9cí\95\98ê³  ì\84¤ì¹\98í\95©ë\8b\88ë\8b¤.[CR] ê³µì\8b\9d ì \80ì\9e¥ì\86\8c를 ì\82¬ì\9a©í\95\98ë©´ í\8c\8cì\9d¼ ë¯¸ë\9f¬ë§\81 ì\84\9cë¹\84ì\8a¤ë¥¼ í\86µí\95´ ì\82¬ì\9a©ì\9e\90ì\99\80 ê°\80ê¹\8cì\9a´ ê³³ì\97\90ì\84\9c ë¹ ë¥´ê²\8c ë\8b¤ì\9a´ë¡\9cë\93\9cí\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.[CR] ì \80ì\9e¥ì\86\8cì\9d\98 ëª¨ë\93  ì\95 ë\93\9cì\98¨ì\9d\80 ê¸°ë³¸ì \81ì\9d¸ í\99\95ì\9d¸ì\9d\84 í\96\88ì\8aµë\8b\88ë\8b¤. ë§\8cì\95½ ì\9e\91ë\8f\99ì\9d´ ì\95\88ë\90\98ë\8a\94 ì\95 ë\93\9cì\98¨ì\9d\84 ë°\9c견í\95\98ë©´, Team XBMCë¡\9c ì\95\8c려주ì\8b\9cë©´, í\95\84ì\9a\94í\95\9c ì¡°ì¹\98를 ì·¨í\95 ê²\83ì\9e\85니다.</description>
+               <description lang="ko">ê³µì\8b\9d XBMC.org ì\94ê°\80기ë\8a¥ ì \80ì\9e¥ì\86\8cì\97\90ì\84\9c ì¶\94ê°\80기ë\8a¥ì\9d\84 ë\8b¤ì\9a´ë¡\9cë\93\9cí\95\98ì\97¬ ì\84¤ì¹\98í\95©ë\8b\88ë\8b¤.[CR] ê³µì\8b\9d ì \80ì\9e¥ì\86\8c를 ì\82¬ì\9a©í\95\98ë©´ í\8c\8cì\9d¼ ë¯¸ë\9f¬ë§\81 ì\84\9cë¹\84ì\8a¤ë¥¼ í\86µí\95´ ì\82¬ì\9a©ì\9e\90ì\99\80 ê°\80ê¹\8cì\9a´ ê³³ì\97\90ì\84\9c ë¹ ë¥´ê²\8c ë\8b¤ì\9a´ë¡\9cë\93\9cí\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.[CR] ì \80ì\9e¥ì\86\8cì\9d\98 ëª¨ë\93  ì¶\94ê°\80기ë\8a¥ì\9d\80 ê¸°ë³¸ í\85\8cì\8a¤í\8a¸ë¥¼ ê±°ì¹\98ì§\80ë§\8c ì\9e\91ë\8f\99ì\9d´ ë\90\98ì§\80 ì\95\8aê±°ë\82\98 ì\86\90ì\83\81ë\90\9c ì¶\94ê°\80기ë\8a¥ì\9d\84 ë°\9c견í\95\98ë©´ í\95\84ì\9a\94í\95\9c ì¡°ì¹\98를 ì·¨í\95  ì\88\98 ì\9e\88ê²\8c Team XBMCë¡\9c ì\95\8c려주ì\8b\9c기 ë°\94ë\9e\8d니다.</description>
                <description lang="lt">Atsisiųskite ir įdiegite priedus iš oficialios XBMC.org saugyklos.[CR]Naudojantis oficialia saugykla, galėsite pasinaudoti pranašumu mūsų didele failų veidrodinę paslauga.[CR]Taip pat siekiame padėti jums greičiau parsisiųsti priedą iš Jūsų regiono.[CR]Visiems šioje saugykloje saugomiems priedams buvo atliktas testavimas, jei Jūs radote netaisyklingą ir nedarbinį priedą.[CR]Prašome pranešti apie tai XBMC komandai, kad mes galėtume imtis būtinų veiksmų </description>
                <description lang="lv">Lejupielādējiet un instalējiet pievienojumprogrammas (add-ons) no Oficiālā XBMC.org repozitorija.[CR] Izmantojot oficiālo repozitoriju Jums būs iespēja gūt labumu no mūsu plašā failu spoguļa pakalpojuma, kas palīdzēs iegūt ātrāku lejupielādes atrumus.[CR] visas pievienojumprogrammas šajā krātuvē tika testēti, ja Jūs atradīsiet bojātas pievienojumprogrammas, lūdzu, paziņojiet XBMC komandai, lai mēs varētu veikt visus vajadzīgos pasākumus problemas risināšanai.</description>
                <description lang="mk">Превземи и инсталирај Додатоци од официјалниот XBMC.org склад.[CR] Со користење на официјалниот склад ќе бидете во можност да ги користите предностите на нашата богата датотека со услуги која ви помага да добиете побрзи превземања од регионот блиску до вас.[CR]  Сите Додатоци во овој склад се основно тестирани, ако најдете неисправни или додатоци кои не работат пријавете го тоа на тимот на XBMC така што ќе можеме да превземеме било каква акција што е потребна.</description>
                <description lang="no">Last ned og installer tillegg fra den offisielle XBMC.org pakkebrønnen.[CR] Når du benytter den offisielle brønnen drar du fordel av vår utvidede filspeilingstjeneste slik at du får raskere nedlastinger fra en server nær deg.[CR] Alle tillegg i denne brønnen har gått gjennom en grunnleggende testing, men hvis du finner et tillegg som ikke fungerer, vennligst rapporter det til Team XBMC så vi får sett på det.</description>
                <description lang="pl">Pobieraj i instaluj wtyczki z oficjalnego repozytorium XBMC.org.[CR] Używając oficjalnego repozytorium korzystasz z serwerów lustrzanych, rozsianych po całym świecie. Wybierany jest ten, który znajduje się najbliżej ciebie, zapewniając dużą prędkość połączenia.[CR]Wszystkie wtyczki znajdujące się w tym repozytorium są testowane, ale mogą okazać się niesprawne. Zgłoś wówczas błąd, aby załoga XBMC mogła podjąć odpowiednie działanie.</description>
                <description lang="pt">Transferir e instalar add-ons do repositório oficial XBMC.org.[CR]  Ao usar o repositório oficial, os nossos servidores garantem-lhe sempre transferências rápidas a partir da localização mais próxima.[CR]  Todos os Add-ons neste repositório foram alvo de testes preliminares. Na improvável hipótese de encontrar um Add-on que não funcione, por favor contacte a equipa do XBMC, para que a situação se resolva.</description>
-               <description lang="pt_BR">Faça downloads e instale add-ons a partir do repositório oficial do XBMC.org.[CR]  Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]  Todos os add-ons neste repositório passam por testes básicos, se você encontrar um quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
+               <description lang="pt_BR">Transfira e instale add-ons a partir do repositório oficial do XBMC.org.[CR]|Ao utilizar o repositório oficial, você será capaz de tirar proveito do nosso serviço de espelhamento de arquivos, auxiliando em downloads mais rápidos a partir de uma região perto de você.[CR]|Todos os add-ons neste repositório passam por testes básicos, se você encontrar algum quebrado ou que não esteja funcionando, por favor reporte para a equipe do XBMC, para que possamos tomar as ações necessárias.</description>
                <description lang="ro">Descărcați și instalați suplimente din depozitul de suplimente XBMC.org oficial.[CR]  Folosind depozitul (repository) oficial puteți beneficia de serviciul nostru de găzduire distribuită pentru a vă ajuta să descărcați mai repede dintr-o regiune mai apropiată de dumneavoastră.[CR]  Toate suplimentele din acest depozit au trecut testele de bază, în caz că găsiți un supliment defect vă rugăm să îl raportați echipei XBMC pentru a lua măsurile necesare.</description>
                <description lang="ru">Загружайте и устанавливайте обновления из официального репозитория XBMC.org[CR]Используя официальный репозиторий, вы сможете воспользоваться преимуществами распределенного хранилища для быстрой загрузки файлов с ближайшего к вам сервера.[CR]Все дополнения в данном репозитории прошли тестирование. Если вы обнаружили нерабочее дополнение, сообщите об этом разработчикам XBMC.</description>
                <description lang="se">Ladda ner och installera tillägg från det officiella XBMC.org tilläggsförrådet.[CR]  Genom att använda det officiella förrådet kan du utnyttja fördelarna med vår utökade filspeglinstjänst för att få snabbare nedladdningar från en region nära dig.[CR]  Alla tillägg på detta förråd har genomgått en enkel testprocedur, om du hittar ett trasigt eller icke fungerande tillägg uppskattar vi om du är vänlig och rapporterar det till Team XBMC så vi kan vidta nödvändiga åtgärder.</description>
                <description lang="sk">Stiahnuť a nainštalovať rozšírenia z oficiálneho zdroja rozšírení XBMC.org.[CR] Použitím oficiálneho zdroja získavate možnosť využiť rozsiahly systém zrkadiel, ktorý Vám umožní rýchlejšie sťahovanie z Vám blízkeho regiónu.[CR] Všetky rozšírenia v tomto zdroji boli podrobené základnému testovaniu. Ak nájdete poškodené alebo nefunkčné rozšírenie, oznámte to prosím týmu XBMC aby mohol podľa potreby zakročiť.</description>
-               <description lang="sl">Prenos in namestitev dodatkov iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega odlagališča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite skupini XBMC, da bomo lahko odpravili napake.</description>
+               <description lang="sl">Prenos in namestitev dodatkov iz uradnega skladišča XBMC.org.[CR] Z uporabo uradnega skladišča, boste lahko izkoristili hitrejšo povezavo, ki bo izbrana glede na vašo lokacijo.[CR] Vsi dodatki tega skladišča so bili osnovno stestirani, če pa boste našli pokvarjen ali nedelujoč dodatek, to sporočite ekipi XBMC, da bomo lahko odpravili napake.</description>
                <description lang="sv">Ladda ner och installera tillägg från det officiella XBMC.org tilläggsförrådet.[CR]Genom att använda det officiella förrådet kommer du att få fördelen att kunna använda vår omfattande spegeltjänst som kommer att hjälpa dig till snabbare nedladdningar från en plats nära dig.[CR]Alla tillägg i detta förråd har genomgått grundläggande tester. Hittar du ett trasigt eller icke fungerande tillägg, vänligen meddela detta till Team XBMC så att vi kan vidta nödvändiga åtgärder.</description>
                <description lang="ta_IN">அதிகாரப்பூர்வ XBMC.org துணை பயன் களஞ்சியத்திலிருந்து துணை பயன்களை பதிவிறக்கம் மற்றும் நிறுவல் செய்யலாம். [CR] அதிகாரப்பூர்வ களஞ்சியத்தை பயன்படுத்துவதால் நீங்கள் உங்கள் இருப்பிடத்திருக்கு அருகாமையில் உள்ள களஞ்சியத்தில் இருந்து சீக்கிரமாக சேவைகளை பெறமுடியும்.[CR] இங்குள்ள அணைத்து துணை பயன்களும் நன்கு பரிசொதிக்கபட்டவை, சரியாக இயங்கவில்லை என்றால் XBMC குழுவிடம் சொல்லவும்.</description>
                <description lang="tg">Барномаҳои иловагиро аз анбори нармафзори XBMC.org боргирӣ кунед ва насб намоед.[CR]  Аз истифодаи анбори нармафзори расмии мо ба шумо имконият пайдо мешавад, ки тавонед шароити мусофидро аз хидмати оинаи файлии васеъ ба даст оред ва нармафзори лозимиро аз сервери минтакаи ба шумо наздиктар бо суръати баланд боргирӣ кунед.[CR]  Ҳамаи барномаҳо аз анбори нармафзори мо дар ҳолати санҷишӣ мебошанд, бинобар ин агар ягон барномаи иловагии нуқсондор ё вайроншударо ёбед, лутфан дар бораи он барнома ва нуқсон пайдошуда ба гурӯҳи кории XBMC гузориш диҳед, то ин ки мо тавонем ҳамаи камбудиҳои барномаҳои моро ҳал кунем.</description>
                <description lang="th">ดาวน์โหลดและติดตั้งส่วนเสริม จากแหล่งข้อมูลโปรแกรมของ XBMC.org อย่างเป็นทางการ.[CR]  โดยการใช้งานแหล่งข้อมูลโปรแกรมอย่างเป็นทางการ คุณสามารถใช้ประโยชน์จากบริการแฟ้มมิเรอร์ที่กว้างขวางของเรา ที่จะช่วยให้การดาวน์โหลดของคุณเร็วขึ้นจากภูมิภาคที่ใกล้ที่สุด.[CR]  ส่วนเสริม ทั้งหมดในแหล่งเก็บข้อมูลนี้ อยู่ภายใต้การทดสอบขั้นพื้นฐานแล้ว ถ้าคุณพบส่วนเสริมที่เสียหายหรือไม่ทำงาน กรุณาแจ้งทีมงาน XBMC เพื่อให้เราสามารถดำเนินการใด ๆ ที่จำเป็น.</description>
-               <description lang="tr">Eklentileri Resmi XMBC.org eklenti deposundan indir ve yükle.[CR]Resmi yazılım depomuzu kullanarak size en yakın bölgeden en hızlı biçimde indirme yapmanızı sağlayacak gelişkin dosya aynalama servisini kullanma avantajını elde edeceksiniz.[CR]Buyazılım deposundaki tüm eklentiler temel testlerden geçerler, şayet hatalı ya da çalışmayan bir eklenti bulur iseniz lütfen düzeltilmesi için bu durumu XMBC Takımına bildiriniz.</description>
+               <description lang="tr">Eklentileri Resmi XBMC.org eklenti deposundan indir ve yükle.[CR]Resmi yazılım depomuzu kullanarak size en yakın bölgeden en hızlı biçimde indirme yapmanızı sağlayacak gelişkin dosya aynalama servisini kullanma avantajını elde edeceksiniz.[CR]Buyazılım deposundaki tüm eklentiler temel testlerden geçerler, şayet hatalı ya da çalışmayan bir eklenti bulur iseniz lütfen düzeltilmesi için bu durumu XBMC Takımına bildiriniz.</description>
                <description lang="uk">Завантажити і встановити додатки з Офіційного репозиторію додатків XBMC.org.[CR]  Використовуючи Офіційний Репозиторій ви отримаєте перевагу надану нашими дзеркальними серверами, які забезпечать вам швидке завантаження із найближчого до вас регіону.[CR]  Всі додатки в цьому Репозиторії пройшли лише базове тестування. Якщо ви знайшли зламаний або непрацюючий додаток, будь-ласка повідомте про це Команду XBMC щоб ми могли вжити потрібних заходів.</description>
                <description lang="vi">Tải về và cài đặt add-on từ kho addon chính thức của XBMC.[CR]  Khi sử dụng kho chứa này bạn sẽ hưởng lợi từ dịch vụ tạo nguồn của chúng tôi, giúp bạn có thể tải về nhanh hơn từ vùng địa lý gần bạn.[CR]  Tất cả addon trên kho chứa này đã được thông qua bài kiểm tra cơ bản, nếu bạn phát hiện ra một addon không hoạt động xin vui lòng báo cáo lại nó cho đội ngũ XBMC để chúng tôi có thể kịp thời xử lý.</description>
                <description lang="zh">从官方 XBMC.org 插件库下载和安装插件。[CR] 通过官方插件库你将能利用我们广泛的镜像服务优势,使你能够就近下载资源。[CR] 官方库中的所有插件都经过了基本的测试,如果你发现有损坏或不能正常工作的插件请向 XBMC 开发团队报告,以便及时处理。</description>
                <description lang="zh_TW">從 XBMC.org 官方的附加元件庫下載並安裝附加元件。[CR] 使用官方的附加元件庫你可以從離你較近的檔案鏡像伺器以較快的速度下載附加元件。[CR] 在這個附加元件庫中的附加元件都經過簡單的測試,如果你發現損壞或無法正常工作的附加元件,請回報給 XBMC 團隊,以讓 XBMC 團隊能做一些必須的處置。</description>
                <disclaimer lang="af">Die XBMC span het nie al die byvoegsels in die kodebank gemaak nie en is nie verantwoordelik vir hulle inhoud nie</disclaimer>
-               <disclaimer lang="ar">فريق XBMC لم يصنع كل الإضافات في هذا المستودع و غير مسؤول عن محتوياتها</disclaimer>
+               <disclaimer lang="ar">فريق برنامج إكس بى إم سى لم يُصنِع جميع اﻹضافات فى هذا المستودع وغير مسؤول عن ما قد تسببه لك</disclaimer>
                <disclaimer lang="be">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
                <disclaimer lang="bg">Team XBMC (Екипът зад XBMC) не е автор на всички добавки в хранилището и не носи отговорност за съдържанието им</disclaimer>
                <disclaimer lang="ca">L'equip de l'XBMC no ha fet tots els complements d'aquest repositori i per tant no són responsables del seu contingut.</disclaimer>
                <disclaimer lang="cs">Tým XBMC nevytvořil všechna rozšíření v tomto repozitáři a není zodpovědný za jejich obsah</disclaimer>
                <disclaimer lang="cy">Nid Team XBMC wnaeth yr holl ychwanegion yn y storfa hon ac nid ydynt yn gyfrifol am eu cynnwys.</disclaimer>
                <disclaimer lang="da">Team XBMC har ikke lavet alle add-ons i dette fjernlager og er ikke ansvarlig for deres indhold</disclaimer>
-               <disclaimer lang="de">Team XBMC hat nicht alle Add-Ons aus dem Repository erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
+               <disclaimer lang="de">Das Team XBMC hat nicht alle Add-Ons aus dem Depot erstellt und ist für deren Inhalt nicht verantwortlich</disclaimer>
                <disclaimer lang="el">Η Ομάδα XBMC δεν δημιούργησε όλα τα πρόσθετα σε αυτό το αποθετήριο συνεπώς δεν είναι υπεύθυνοι για το περιεχόμενό τους</disclaimer>
                <disclaimer lang="en">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
                <disclaimer lang="en_US">Team XBMC did not make all the add-ons on this repository and are not responsible for their content</disclaimer>
                <disclaimer lang="es">El equipo de XBMC no ha hecho todos los Addons en este repositorio y no son responsables de su contenido</disclaimer>
                <disclaimer lang="es_AR">El equipo de XBMC no ha hecho todos los Add-ons en este repositorio y no es responsable de su contenido</disclaimer>
                <disclaimer lang="es_MX">El equipo de XBMC no hizo todos los add-ons en este repositorio y no es responsable de su contenido</disclaimer>
+               <disclaimer lang="es_VE">El equipo de XBMC no creó todos los add-ons en este repositorio y no son responsables por su contenido</disclaimer>
                <disclaimer lang="et">XBMC meeskond ei teinud kõiki lisasid selles hoidlas ja ei vastuta ka nende sisu eest.</disclaimer>
-               <disclaimer lang="eu">XMBC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
+               <disclaimer lang="eu">XBMC taldeak ez ditu biltegi honetako gehigarri guztiak sortu eta ez da beren edukien erantzule.</disclaimer>
                <disclaimer lang="fi">Team XBMC ei ole tehnyt kaikkia tässä säilössä olevia lisäosia, eikä siten ole vastuullinen kyseisten lisäosien sisällöstä</disclaimer>
                <disclaimer lang="fr">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
-               <disclaimer lang="gl">O equipo de XBMC non fai tódolos Engadidos deste repositorio e non é responsable do seu contido</disclaimer>
-               <disclaimer lang="he">צוות XBMC לא יצר את כל התוספים שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
+               <disclaimer lang="fr_CA">La Team XBMC n'est pas l'auteur de toutes les extensions de ce dépôt et n'est pas responsable de leur contenu</disclaimer>
+               <disclaimer lang="gl">O equipo de XBMC non creou todos os Engadidos deste repositorio e non é responsábel do seu contido</disclaimer>
+               <disclaimer lang="he">צוות XBMC לא יצר את כל ההרחבות שבמאגר זה ואינו אחראי על תוכנם</disclaimer>
                <disclaimer lang="hr">XBMC tim nije autor svih dodataka u ovom repozitoriju te kao takvi ne odgovaraju za njihov sadržaj</disclaimer>
                <disclaimer lang="hu">Nem minden itt található kiegészítőt az XBMC csapat készített és nem vállal felelősséget azok tartalmáért</disclaimer>
                <disclaimer lang="id">Tim XBMC tidak membuat semua pengaya pada repository ini dan tidak bertanggung jawab atas isinya.</disclaimer>
                <disclaimer lang="is">XBMC teymið gerir ekki allar þessar viðbætur og er ekki ábyrgt fyrir innihaldi þeirra.</disclaimer>
                <disclaimer lang="it">Il team di XBMC non ha creato tutti gli add-on di questa libreria e non è responsabile per il loro contenuto</disclaimer>
                <disclaimer lang="ja">XBMC チームが、このリポジトリ上の全アドオンを作ったわけではありません。また、その内容についても責任は負いかねます。</disclaimer>
-               <disclaimer lang="ko">Team XBMCë\8a\94 ì \80ì\9e¥ì\86\8cì\9d\98 ëª¨ë\93  ì\95 ë\93\9cì\98¨ì\9d\84 ë§\8cë\93¤ì§\80 ì\95\8aì\95\98ì\9c¼ë©°, ì\95 ë\93\9cì\98¨ 컨텐츠에 대한 책임이 없습니다.</disclaimer>
+               <disclaimer lang="ko">Team XBMCë\8a\94 ì \80ì\9e¥ì\86\8cì\9d\98 ëª¨ë\93  ì\94ê°\80기ë\8a¥ì\9d\84 ì \9cì\9e\91í\95\98ì§\80 ì\95\8aì\95\98ì\9c¼ë©°, ì¶\94ê°\80기ë\8a¥ 컨텐츠에 대한 책임이 없습니다.</disclaimer>
                <disclaimer lang="ku">تیمی XBMC هەموو پێوەکراوەکانی دروست نەکردووە بۆیە بەرپرسیار نیە لە پێکهاتە و ناوەڕۆکەکانی</disclaimer>
                <disclaimer lang="lt">XBMC komanda netestavo priedų šioje saugykloje ir neatsako arba nėra atsakinga už jų turinį</disclaimer>
                <disclaimer lang="lv">XBMC komanda nav izveidojusi visus šīs krātuves paplašinājumus un nav atbildīga par to saturu</disclaimer>
                <disclaimer lang="no">Team XBMC har ikke produsert alle tilleggene i denne pakkebrønnen og er ikke ansvarlig for deres innhold</disclaimer>
                <disclaimer lang="pl">Załoga XBMC nie tworzy wszystkich dodatków i nie bierze odpowiedzialności za ich zawartość</disclaimer>
                <disclaimer lang="pt">A equipa XBMC não desenvolveu todos os Add-ons neste repositório e não é responsável pelo seu conteúdo.</disclaimer>
-               <disclaimer lang="pt_BR">A Equipe XBMC não produziu todos os add-ons deste repositório e não são responsáveis ​​por seu conteúdo</disclaimer>
+               <disclaimer lang="pt_BR">O Time do XBMC não produziu todos os add-ons deste repositório, e portanto não é responsável ​​por seu conteúdo</disclaimer>
                <disclaimer lang="ro">Echipa XBMC nu a creat toate aceste suplimente din acest depozit și nu este responsabilă pentru conținutul lor.</disclaimer>
                <disclaimer lang="ru">Разработчики XBMC не являются авторами всех дополнений в данном репозитории и не несут ответственность за их содержимое.</disclaimer>
                <disclaimer lang="se">Team XBMC har inte skapat alla tillägg på detta förråd och är inte ansvariga för deras innehåll</disclaimer>
                <disclaimer lang="sk">Team XBMC nevytvoril všetky rozšírenia v tomto zdroji nie je zodpovedný za ich obsah</disclaimer>
-               <disclaimer lang="sl">Skupina XBMC ni naredila vse dodatkov v tem skladišču in to ni skladišče za njihovo vsebino</disclaimer>
+               <disclaimer lang="sl">Ekipa XBMC ni naredila vseh dodatkov v tem skladišču in ne odgovarja za njihovo vsebino</disclaimer>
                <disclaimer lang="sv">Team XBMC har inte gjort alla tillägg och är inte ansvariga för innehållet i dessa.</disclaimer>
                <disclaimer lang="ta_IN">இந்த களஞ்சியத்தில் உள்ள துனை பயன்களை XBMC அணியால் உருவாக்கப்படவில்லை மற்றும் அவற்றின் உள்ளடக்கம் தங்கள் பொறுப்பு அல்ல.</disclaimer>
                <disclaimer lang="tg">Гурӯҳи кории XBMC дар ин анбори нармафзор соҳиби ҳамаи барномаҳои иловагӣ намебошад ва барои мӯҳтавояшон ҷавобгар намебшад</disclaimer>
                <disclaimer lang="uk">Зауважте, що не всі додатки в цьому Репозиторії створені Командою XBMC, і тому Команда не несе відповідальності за їх вміст.</disclaimer>
                <disclaimer lang="vi">Đội ngũ XBMC không làm ra tất cả các add-on có trên kho chứa này và sẽ không chịu trách nhiệm về nội dung của các add-on đấy</disclaimer>
                <disclaimer lang="zh">本库中插件不完全由 XBMC 团队开发,XBMC 团队对他人提交的内容不承担责任</disclaimer>
-               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XMBC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
+               <disclaimer lang="zh_TW">這個附加元件庫的附加元件並非全部由 XBMC 團隊製作的,所以我們不對這些內容負責。</disclaimer>
                <platform>all</platform>
        </extension>
 </addon>
index e28141c..879504b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="screensaver.rsxs.euphoria"
-  version="1.0.10"
+  version="1.0.14"
   name="Euphoria"
   provider-name="mogumbo, Team XBMC">
   <requires>
     <summary lang="es">El más psicodélico de los salvapantallas</summary>
     <summary lang="es_AR">Tan psicodélico como un protector de pantalla pueda serlo</summary>
     <summary lang="es_MX">Tan psicodélico como cualquier protector de pantalla debería</summary>
+    <summary lang="es_VE">Tan psicodélico como un protector de pantalla debe ser</summary>
     <summary lang="et">Nii psühhedeelne kui üks ekraanisäästja olla saab</summary>
     <summary lang="eu">Pantaila-babesleetatik psikodelikoena</summary>
     <summary lang="fi">Mahdollisesti kaikkein psykedeelisin näytönsäästäjä</summary>
     <summary lang="fr">Difficilement plus psychédélique comme économiseur d'écran</summary>
+    <summary lang="fr_CA">Difficilement plus psychédélique comme économiseur d'écran</summary>
     <summary lang="gl">Máis ou menos tan psicodélico como o pode ser un gardapantallas</summary>
     <summary lang="he">זהו פחות או יותר שומר המסך הכי פסיכדלי שיש</summary>
     <summary lang="hr">Psihodeličan koliko čuvar zaslona može biti </summary>
     <description lang="es">Este es probablemente el más psicodélico de los salvapantallas. mogumbo (el autor) pensó que su protector 'Plasma' estaba en lo mas alto, pero éste es más repugnante. Será mejor que cojas una bolsa para los mareos si vas a estar mucho tiempo viéndolo.</description>
     <description lang="es_AR">Este es probablemente el más psicodélico de los protectores de pantalla. mogumbo pensó que su protector de Plasma estaba en lo mas alto, pero éste es más repugnante. Será mejor que busques una bolsa para los mareos si vas a estar mucho tiempo viéndolo.</description>
     <description lang="es_MX">Esto es tan psicodélico como un protector de pantalla debe ser, mogumbo pensó que su protector Plasma estaba en la cima del mundo, pero éste es aún más nauseabundo. Deberías conseguir una bolsa para mareos antes de quedarte observando por mucho tiempo.</description>
+    <description lang="es_VE">Esto es tan psicodélico como un protector de pantalla debe ser, mogumbo pensó que su protector Plasma estaba en la cima del mundo, pero éste es aún más nauseabundo. Mejor y buscas una bolsa para mareos antes de quedarte observando por mucho tiempo.</description>
     <description lang="et">See on nii psühhedeelne kui üks ekraanisäästja olla saab. mogumbo arvas, et tema Plasma säästja oli tippude tipp, aga see on isegi rohkem iiveldama ajav. Parem otsi endale üks neist lennuki oksekottidest enne kui liiga kauaks seda siin vaatama jääd.</description>
     <description lang="eu">Hau ziurrenik inoiz sortu den pantaila-babesle psikodelikoena da. Mogunbo sortzaileak bere Plasma babeslea garaiena zuela uste zuen baina hau oraindik nazkagarriago da. Ikusten denbora asko egon behar bazara hobe zorabiorako poltsa bat edukitzea.</description>
     <description lang="fi">Tämä on mahdollisesti niin psykedeelinen kuin vain näytönsäästäjä voi olla. mogumbo luuli, että hänen Plasma-näytönäästäjänsä oli asteikon huipulla, mutta tämä ohittaa senkin. Oksennuspussin hakeminen on suositeltavaa ennen pitkäaikaista tuijottamista.</description>
     <description lang="fr">En terme d'économiseur, on fait difficilement plus psychédélique. Mogumbo pensait son économiseur Plasma tout en haut de l'échelle mais, celui-ci donne encore plus la nausée. Mieux vaut se munir d'un de ces sachets pour le mal de l'air avant de le regarder trop longtemps.</description>
+    <description lang="fr_CA">En terme d'économiseur, on fait difficilement plus psychédélique. Mogumbo pensait son économiseur Plasma tout en haut de l'échelle mais, celui-ci donne encore plus la nausée. Mieux vaut se munir d'un de ces sachets pour le mal de l'air avant de le regarder trop longtemps.</description>
     <description lang="gl">Este é máis ou menos tan psicodélico como pode selo un gardapantalla. mogumbo pensou que o seu gardapantallas Plasma estaba arriba de todo na escala, pero este é incluso máis mareante. Será millor que colla unha bolsa de ventilzación ante de quedarse mirando a este demasiado tempo.</description>
     <description lang="he">זוהי הרמה הגבוהה ביותר של פסיכדליות אליה יכולים להגיע שומרי מסך. mogumbo חשב ששומר מסך הפלזמה שלו הגיע לראש הטבלה אבל זה אפילו יותר מסחרר. מוטב להצטייד במספר שקיות הקאה בטרם בהייה ממושכת בשומר מסך זה.</description>
     <description lang="hr">Psihodeličan koliko čuvar zaslona može biti. Mogumbo kroz svoj plazma čuvar zaslona je bio vrh, ali od ovog vam je još više loše. Bilo bi vam bolje da pronađete jednu od onih vrećica za mučninu što dijele u avionima prije nego počnete zuriti u ovaj.</description>
     <description lang="ru">Самая психоделическая в мире заставка. mogumbo считал, что никто не сможет достичь эффекта его заставки Plasma, но от этой заставки укачивает ещё сильнее. Если будете смотреть на эту заставку слишком долго, вам очень скоро понадобится гигиенический пакет.</description>
     <description lang="se">Det här är ungefär så psykedelisk skärmsläckare kan bli. mogumbo trodde hans plasma-skärmsläckare var toppen på skalan, men denna är till och med ännu mer kväljande. Du gör bäst i att leta upp en åksjukepåse innan du stirrar på denna för länge.</description>
     <description lang="sk">Tento šetrič je tak psychodelický ako to len ide. Mogumbo myslel, že Plasma šetrič je na vrchole rebríčka, ale tento je ešte viac zvrátený. Radšej si nájdite hygienické vrecko skôr než naň budete civieť pridlho.</description>
-    <description lang="sl">Težko bi si zamislili bolj psihadeličen ohranjevalnik zaslona. Stranski učinki daljše uporabe vključujejo slabost, glavobol in bruhanje.</description>
+    <description lang="sl">Težko bi si zamislili bolj psihadeličen ohranjevalnik zaslona. mogumbo je menil, da je njegov ohranjevalnik Plasma na vrhu, to da ta še bolj vzbuja slabost. Bolje, da najdete eno izmed tistih vrečk za bruhanje, preden predolgo strmite vanj.</description>
     <description lang="sv">Detta är ungefär så psykedelisk som en skärmsläckare kan bli. mogumbo trodde att hans Plasma Saver var toppen på skalan, men denna gör dig ännu mer illamående. Det är nog bäst att du letar upp en påse för flygsjuka innan du sätter dig ned och stirrar på denna för länge.</description>
     <description lang="ta_IN">மாயத்தோற்றம் தரக்கூடிய திரைகாப்பான் இதுபோல் இல்லை. mogumbo நினைத்தார் பிளாஸ்மா திரைகாப்பன்தான் இப்படி தோற்றம் தரக்கூடியது என்று, ஆனால் இந்த திரைகாப்பன் அதைவிட உகட்டுதலை உண்டாக்கும். எச்சரிக்கை வெகு நேரம் இதை பார்க்கதிர்கள் - தலை சுற்றகூடும்.</description>
     <description lang="tg">Дар тамоми ҷаҳон ин пардаи экран аз ҳама беҳтарин буда дар рейтинги пардаҳои экран ҷои якумро бо пардаи плазмаи худ гирифт. Вақте ки истифодаи ин пардаи экранро сар мекунед, аз истифодаи он ҳеҷ гоҳ рад намекунед.</description>
index 2c8fd47..e969bec 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="screensaver.rsxs.plasma"
-  version="1.0.10"
+  version="1.0.14"
   name="Plasma"
   provider-name="mogumbo, Team XBMC">
   <requires>
@@ -31,6 +31,7 @@
     <summary lang="eu">Ziurrenik inoizko bigarren pantaila-babesle psikodelikoena</summary>
     <summary lang="fi">Todennäköisesti toiseksi psykedeelisin näytönsäästäjä koskaan</summary>
     <summary lang="fr">Probablement le deuxième économiseur d'écran le plus psychédélique jamais créé</summary>
+    <summary lang="fr_CA">Probablement le deuxième économiseur d'écran le plus psychédélique jamais créé</summary>
     <summary lang="gl">Probablemente o segundo gardapantallas máis psicodélico endexamáis.</summary>
     <summary lang="he">כפי הנראה שומר המסך השני בדירוג הפסיכדליות</summary>
     <summary lang="hr">Vjerojatno drugi najveći psihodelični čuvar zaslona ikad</summary>
@@ -50,7 +51,7 @@
     <summary lang="ru">Наверное, вторая из самых психоделических заставок в мире</summary>
     <summary lang="se">Förmodligen den näst psykedeliska skärmsläckaren</summary>
     <summary lang="sk">Pravdepodobne druhý najviac hypnotizujúci šetrič obrazovky vôbec</summary>
-    <summary lang="sl">Drugi najbolj psihadelični ohranjevalnik zaslona na svetu.</summary>
+    <summary lang="sl">Gotovo drugi najbolj psihadelični ohranjevalnik zaslona na svetu</summary>
     <summary lang="sv">Troligen den näst mest psykedeliska skärmsläckaren någonsin.</summary>
     <summary lang="ta_IN">இரண்டாவது மாயத்தோற்றம் தரக்கூடிய திரைகாப்பான்</summary>
     <summary lang="tg">Эҳтимол аст, ки имрӯз дар тамоми ҷаҳон ин пардаи экран ҷои дуюмро мегирад</summary>
@@ -78,6 +79,7 @@
     <description lang="eu">Ziurrenik existitzen den bigarren pantaila-babesle psikodelikoena. Saiatu kolore guzti horiek mugitzen irudikatzen.</description>
     <description lang="fi">Todennäköisesti toiseksi psykedeelisin olemassa oleva näytönsäästäjä. Kuvittelepa vain kaikki nuo värit lentelemässä ympäriinsä.</description>
     <description lang="fr">Probablement le deuxième économiseur d'écran le plus psychédélique de l'histoire. Essayez seulement d'imaginer toutes ces couleurs en mouvement.</description>
+    <description lang="fr_CA">Probablement le deuxième économiseur d'écran le plus psychédélique de l'histoire. Essayez seulement d'imaginer toutes ces couleurs en mouvement.</description>
     <description lang="gl">Probalemente o segundo gardapantallas máis psicodélico na existencia. Tan só probe a imaxinarse todas esas cores movéndose ó redor.</description>
     <description lang="he">כפי הנראה שומר המסך השני בדירוג הפסיכדליות שקיים כיום. פשוט נסו לדמיין את כל הצבעים האלו נעים ממקום למקום.</description>
     <description lang="hr">Vjerojatno drugi najveći psihodelični čuvar zaslona koji postoji. Samo pokušajte zamisliti sve te boje koje se gibaju okolo.</description>
@@ -97,7 +99,7 @@
     <description lang="ru">Просто попробуйте представить себе все цвета в движении.</description>
     <description lang="se">Förmodligen den näst psykedeliska skärmsläckaren som finns. Försök bara att uppfatta alla färger som rör sig runt och runt.</description>
     <description lang="sk">Pravdepodobne druhý najviac hypnotizujúci šetrič obrazovky aký vôbec existuje. Iba si skúste predstaviť všetky tie farby pohybujúc sa okolo.</description>
-    <description lang="sl">Drugi najbolj psihadelični ohranjevalnik zaslona na svetu. Samo predstavljajte si vse te barve, ki letijo naokrog.</description>
+    <description lang="sl">Gotovo drugi najbolj psihadelični ohranjevalnik zaslona na svetu. Samo predstavljajte si vse te barve, ki letijo naokrog.</description>
     <description lang="sv">Troligen den näst mest psykedeliska skärmsläckaren som existerar. Bara tänk dig alla färgerna som rör på sig.</description>
     <description lang="ta_IN">ஒருவேளை இரண்டாவது மாயத்தோற்றம் தரக்கூடிய திரைகாப்பான் இதுதான். இப்போது சுற்றி திரியும் வண்ணங்களை பார்க்க முயற்சி செய்துபாரும்.</description>
     <description lang="tg">Эҳтимол аст, ки имрӯз дар тамоми ҷаҳон ин пардаи экран ҷои дуюмро мегирад. Танҳо тасаввур кунед, ки чӣ қадар зебо ҳамаи рангҳояш бозӣ мекунанд.</description>
index 44e79dc..711c825 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="screensaver.rsxs.solarwinds"
-  version="1.0.10"
+  version="1.0.14"
   name="Solarwinds"
   provider-name="mogumbo, Team XBMC">
   <requires>
     <summary lang="es">Un salvapatallas con unos efectos de partículas hipnotizantes</summary>
     <summary lang="es_AR">Un protector de pantalla con unos efectos de partículas hipnotizantes</summary>
     <summary lang="es_MX">Un sorprendente protector de pantalla de partículas</summary>
+    <summary lang="es_VE">Un protector de pantalla con efectos de partículas bastante hipnotizante</summary>
     <summary lang="et">Hüpnotiseeriv osakeste efektiga ekraanisäästja</summary>
     <summary lang="fi">Lumoava partikkelitehostenäytönsäästäjä</summary>
     <summary lang="fr">Un économiseur envoûtant à effets de particules</summary>
+    <summary lang="fr_CA">Un économiseur envoûtant à effets de particules</summary>
     <summary lang="gl">Un hipnotizante gardapantallas con efectos de partículas</summary>
-    <summary lang="he">שומר מסך מהפנט</summary>
+    <summary lang="he">ש×\95×\9eר ×\9eס×\9a ×¢×\9d ×\90פק×\98 ×\97×\9cק×\99ק×\99×\9d ×\9e×\94פנ×\98</summary>
     <summary lang="hr">Čuvar zaslona - Očaravajuće kretanje čestica.</summary>
     <summary lang="hu">Egy igéző részecske-effektus képernyővédő</summary>
     <summary lang="id">Penyelamat layar dengan efek partikel yang mencuri perhatian</summary>
@@ -50,7 +52,7 @@
     <summary lang="ru">Завораживающая заставка с эффектами частиц</summary>
     <summary lang="se">En fascinerande skärmsläckare av partikeleffekter</summary>
     <summary lang="sk">Fascinujúci šetrič s efektom častíc</summary>
-    <summary lang="sl">Ohranjevalnik zaslona z učinkom hipnotičnih delčkov</summary>
+    <summary lang="sl">Ohranjevalnik zaslona z dih jemajočimi delčki</summary>
     <summary lang="sv">En hypnotiserande partikeleffektskärmsläckare</summary>
     <summary lang="ta_IN">மயக்கவைக்கும் துகள் விளைவுகள் திரைகாப்பான்</summary>
     <summary lang="tg">Пардаи экрани аҷоиб бо таъсири зарраҳо</summary>
     <description lang="es">Este es un salvapatallas con unos efectos de partículas hipnotizantes. Descubrirás que puedes obtener un número increíble de patrones diferentes.</description>
     <description lang="es_AR">Este es un protector de pantalla con unos efectos de partículas hipnotizantes. Descubrirás que puedes obtener un número increíble de patrones diferentes.</description>
     <description lang="es_MX">Éste es un sorprendente protector de pantalla de partículas.  Encontrará que puede obtener un gran número de patrones diferentes.</description>
+    <description lang="es_VE">Este es un protector de pantalla con efectos de partículas bastante hipnotizante. Te darás cuenta que podrás lograr un gran número de patrones diferentes.</description>
     <description lang="et">See on väga hüpnotiseeriv osakeste efektiga ekraanisäästja. Võimalik on koostada tohutul hulgal erinevaid mustreid.</description>
     <description lang="fi">Erittäin lumoava partikkelitehostenäytönsäästäjä. Tulet huomaamaan uskomattoman määrän erilaisia kuvioita.</description>
     <description lang="fr">Voici un économiseur d'écran à effets de particules particulièrement envoûtant. Vous trouverez qu'il permet d'obtenir un nombre incroyable de modèles et d'effets différents.</description>
+    <description lang="fr_CA">Voici un économiseur d'écran à effets de particules particulièrement envoûtant. Vous trouverez qu'il permet d'obtenir un nombre incroyable de modèles et d'effets différents.</description>
     <description lang="gl">Este é un gardapantallas con efectos de partículas moi hipnotizante. Atopará que pode acadar un incrible número de patróns diferentes.</description>
-    <description lang="he">×\96×\94×\95 ×©×\95×\9eר ×\9eס×\9a ×\9e×\94פנ×\98 ×\9e×\90×\95×\93. ×\90ת×\94 ×ª×\9eצ×\90 ×\90ת ×¢×¦×\9e×\9a ×\9eש×\99×\92 ×\9b×\9e×\95×\99×\95ת ×©×\95× ×\95ת ×\95×\9eר×\94×\99×\91×\95ת ×©×\9c ×¦×\95רות.</description>
+    <description lang="he">×\96×\94×\95 ×©×\95×\9eר ×\9eס×\9a ×¢×\9d ×\90פק×\98 ×\97×\9cק×\99ק×\99×\9d ×\9e×\94פנ×\98 ×\91×\99×\95תר. ×\90ת×\94 ×ª×\9eצ×\90 ×¢×¦×\9e×\9a ×\9eק×\91×\9c ×\9eס' ×\9eפת×\99×¢ ×©×\9c ×¦×\95ר×\95ת ×©×\95× ×\95ת ×\95×\9eר×\94×\99×\91ות.</description>
     <description lang="hr">Ovo je zaista očaravajuči čuvar zaslona. Moguće je ostvariti zapanjujući broj različitih uzoraka.</description>
     <description lang="hu">Ez egy lebilincselő hatású részecske-effektus képernyővédő. Hihetetlen mennyiségű különböző minta képes benne kialakulni.</description>
     <description lang="id">Ini adalah penyelamat layar dengan efek partikel yang sangat mencuri perhatian. Anda akan lihat bahwa Anda bisa mendapat sejumlah yang mengagumkan dari pola yang berbeda.</description>
@@ -86,7 +90,7 @@
     <description lang="ja">This is a very mesmerizing particle effects screensaver. You'll find that you can achieve an amazing number of different patterns.</description>
     <description lang="ko">매혹적인 파티클 이펙트 화면보호기입니다. 아주 다양한 패턴의 보여줍니다.</description>
     <description lang="lt">Tai labai itaigus dalelių poveikio ekrano užsklanda. Jūs galite pasiekti nuostabių ivairių modelių nustatymuose. </description>
-    <description lang="lv">Hipnotizējoši daļiņu ekrānsaudzētājs. jūs spēsiet gūt apbrīnojumu daudzumu dažādus veidu.</description>
+    <description lang="lv">Šis ir ļoti valdzinošs daļiņu efekta ekrānsaudzētājs. Jūs redzēsit, ka tas spēj izveidot neticamu skaitu dažādu musturu.</description>
     <description lang="mk">Ова е заштита на екран со смирувачки честички. Ќе откриете дека можете да постигнете зачудувачки шеми.</description>
     <description lang="nl">Dit is een erg hypnotiserende screensaver. Je kunt ongelooflijk veel verschillende patronen bekomen.</description>
     <description lang="no">Dette er en veldig hypnotiserende skjermsparer med partikkeleffekter. Du får se at der fins en utrolig mengde forskjellige mønster.</description>
     <description lang="ru">Завораживающая заставка с эффектами частиц. Для этой заставки на выбор доступно огромное количество вариаций эффектов.</description>
     <description lang="se">Detta är en mycket fascinerande partikeleffektsskärmsläckare. Du kommer att upptäcka att du kan uppnå ett otroligt antal olika mönster.</description>
     <description lang="sk">Toto je veľmi fascinujúci šetrič s efektom častíc. Zistíte, že môžete dosiahnuť neskutočné číslo rôznych vzorov.</description>
-    <description lang="sl">To je ohranjevalnik zaslona s presenetiljivim hipnotičnim učinkom delcev. Odkrili boste, da lahko dosežejo neverjetno število različnih vzorcev.</description>
+    <description lang="sl">To je ohranjevalnik zaslona z dih jemajočimi delčki. Odkrili boste, da lahko dosežejo neverjetno število različnih vzorcev.</description>
     <description lang="sv">Detta är en väldigt hypnotiserande partikeleffektskärmsläckare. Du kommer att upptäcka att du kan åstadkomma ett häpnadsväckande antal olika mönster.</description>
     <description lang="ta_IN">இது ஒருவிதமான மயக்கவைக்கும் துகள் விளைவுகள் திரைகாப்பான். நீங்கள் எண்ணற்ற அற்புதமான வெவ்வேறு வகைகளின் வடிவங்களை பார்க்கலாம்.</description>
     <description lang="tg">Ин пардаи экран бо таъсири зарраҳо аҷоиб мебошад. Барои ин парда шумо бисёр таъсирҳои аҷиби нотакрорро пайдо мекунед.</description>
index d8e3543..1aee042 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="screensaver.xbmc.builtin.black"
        name="Black"
-       version="1.0.10"
+       version="1.0.14"
        provider-name="Team XBMC">
   <extension point="xbmc.ui.screensaver" library=""/>
   <extension point="xbmc.addon.metadata">
     <summary lang="es">Un salvapantallas que pone la pantalla en negro</summary>
     <summary lang="es_AR">Un protector de pantalla que pone la pantalla en negro</summary>
     <summary lang="es_MX">Protector de pantalla que obscurece la pantalla</summary>
+    <summary lang="es_VE">Protector de pantalla de fondo negro</summary>
     <summary lang="et">Ekraanisäästja, mis muudab ekraani mustaks</summary>
     <summary lang="eu">Zure pantaila belzten duen pantaila-babeslea</summary>
     <summary lang="fi">Tyhjä ruutu</summary>
     <summary lang="fr">Un économiseur d'écran qui rend votre écran noir</summary>
+    <summary lang="fr_CA">Un économiseur d'écran qui rend votre écran noir</summary>
     <summary lang="gl">Gardapantallas que volta a súa pantalla negra</summary>
-    <summary lang="he">ש×\95×\9eר ×\9eס×\9a ×\90שר ×\94×\95פ×\9a ×\90ת ×\94×\9eס×\9a ×©×\9c×\9a ×\9cש×\97×\95ר</summary>
+    <summary lang="he">ש×\95×\9eר ×\9eס×\9a ×\94×\9eש×\97×\99ר ×\90ת ×\94×\9eס×\9a</summary>
     <summary lang="hr">Čuvar zaslona koji pretvara zaslon u crno</summary>
     <summary lang="hu">Képernyővédő ami elfeketíti a képernyőt</summary>
     <summary lang="id">Screensaver yang mengubah layar menjadi hitam</summary>
@@ -47,7 +49,7 @@
     <summary lang="ru">Заставка «чёрный экран»</summary>
     <summary lang="se">Skärmsläckare som gör din skärm svart</summary>
     <summary lang="sk">Šetrič obrazovky, ktorú ju zmení na čiernu</summary>
-    <summary lang="sl">Ohranjevalnik zaslona, ki počrni zaslon.</summary>
+    <summary lang="sl">Ohranjevalnik zaslona, ki počrni zaslon</summary>
     <summary lang="sv">En skärmsläckare som gör din skärm svart</summary>
     <summary lang="ta_IN">திரையை கறுப்பாக்கும் திரைகாப்பான்</summary>
     <summary lang="tg">Пардаи экран бо таъсири «Пардаи экрани сиёҳ»</summary>
     <description lang="es">Black es un sencillo salvapantallas que pone la pantalla en negro.</description>
     <description lang="es_AR">Black es un sencillo protector de pantalla que pone la pantalla en negro.</description>
     <description lang="es_MX">Black es un simple protector de pantalla que la obscurece.</description>
+    <description lang="es_VE">"Black" es un simple protector de pantalla de fondo negro </description>
     <description lang="et">Must on lihtne ekraanisäästja, mis muudab sinu ekraani mustaks.</description>
     <description lang="eu">Black zure pantaila belzten duen pantaila-babesle soil bat da.</description>
     <description lang="fi">Black on yksinkertainen näytönsäästäjä, joka muuttaa ruudun mustaksi.</description>
     <description lang="fr">Black est un simple économiseur qui passe votre écran au noir.</description>
+    <description lang="fr_CA">Black est un simple économiseur qui passe votre écran au noir.</description>
     <description lang="gl">Black é un gardapantallas que tornará a súa pantalla a negro.</description>
-    <description lang="he">Black ×\96×\94×\95 ×©×\95×\9eר ×\9eס×\9a ×¤×©×\95×\98 ×\90שר ×\94×\95פ×\9a ×\90ת ×\94×\9eס×\9a ×©×\9c×\9a ×\9cשחור.</description>
+    <description lang="he">Black ×\94× ×\95 ×©×\95×\9eר ×\9eס×\9a ×¤×©×\95×\98 ×\90שר ×¦×\95×\91×¢ ×\90ת ×\94×\9eס×\9a ×\91שחור.</description>
     <description lang="hr">Black je jednostavni čuvar zaslona koji pretvara zaslon u crno.</description>
     <description lang="hu">A Black egy egyszerű képernyővédő ami feketévé változtatja a képernyőt.</description>
     <description lang="id">Hitam adalah sebuah screensaver sederhana yang mengubah layar menjadi hitam.</description>
index 126a5b0..d43041c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="screensaver.xbmc.builtin.dim"
        name="Dim"
-       version="1.0.10"
+       version="1.0.14"
        provider-name="Team XBMC">
   <extension point="xbmc.ui.screensaver" library=""/>
   <extension point="xbmc.addon.metadata">
     <summary lang="es">Un salvapantallas que oscurece tu pantalla</summary>
     <summary lang="es_AR">Un protector de pantalla que oscurece tu pantalla</summary>
     <summary lang="es_MX">Protector de pantalla que obscurece su pantalla</summary>
+    <summary lang="es_VE">Protector de pantalla que disminuirá el brillo de tu pantalla</summary>
     <summary lang="et">Ekraanisäästja, mis hämardab ekraani</summary>
     <summary lang="eu">Pantaila iluntzen duen pantaila-babeslea</summary>
     <summary lang="fi">Ruudun himmennys</summary>
     <summary lang="fr">Un économiseur qui assombrit votre écran</summary>
+    <summary lang="fr_CA">Un économiseur qui assombrit votre écran</summary>
     <summary lang="gl">O Gardapantallas atenúa a súa pantalla</summary>
     <summary lang="he">שומר מסך אשר מעמעם את המסך</summary>
     <summary lang="hr">Čuvar zaslona koji zatamnjuje vaš zaslon</summary>
     <description lang="es">Dim es un sencillo salvapantallas que oscurece tu pantalla. El valor es configurable entre el 20% y el 100%.</description>
     <description lang="es_AR">Dim es un sencillo protector de pantalla que oscurece tu pantalla. El valor es configurable entre el 20% y el 100%.</description>
     <description lang="es_MX">El protector de pantalla de obscurecimiento, es un protector simple que obscurece (fade out) su pantalla en un valor entre 20 y 100%</description>
+    <description lang="es_VE">El protector de pantalla "Dim" es un simple protector de pantalla que disminuirá la intensidad (atenuará) tu pantalla en un valor que puedes colocar entre 20 y 100%</description>
     <description lang="et">Lihtne ekraanisäästja, mis hämardab (tumestab) ekraani vastavalt valitud väärtusele vahemikus 20 kuni 100%.</description>
     <description lang="eu">Dim  %20 eta %100 artean zure pantaila iluntzeko (belztu) konfiguratu daitekeen pantaila babesle soil bat da.</description>
     <description lang="fi">Dim on yksinkertainen näytönsäästäjä joka himmentää ruudun valitulle tasolle välillä 20-100%.</description>
     <description lang="fr">L'économiseur Dim est un simple économiseur qui assombrira votre écran. L'assombrissement est paramétrable de 20 à 100 %.</description>
+    <description lang="fr_CA">L'économiseur Dim est un simple économiseur qui assombrira votre écran. L'assombrissement est paramétrable de 20 à 100 %.</description>
     <description lang="gl">O gardapantallas de Atenuación é un gardapantallas simple que atenuará o súa pantall a un valor configurable entre o 20% e o 100%</description>
     <description lang="he">שומר המסך Dim הוא שומר מסך פשוט אשר יעמעם (fade out) את המסך לערך מוגדר בין 20% ל-100%</description>
     <description lang="hr">Dim čuvar zaslona je jednostavan čuvar zaslona koji će zatamniti (postepeno isčeznuti) vaš zaslon na odabranu vrijednost između 20 i 100% .</description>
     <description lang="ro">Dim este un screensaver simplu care va întuneca (reduce intensitatea luminii) ecranului dumneavoastră la o valoare configurabilă cuprinsă între 20 și 100% .</description>
     <description lang="ru">Эта заставка постепенно затемняет изображение на экране до заданного значения (от 20% до 100%).</description>
     <description lang="sk">"Dim" šetrič obrazovky je jednoduchý šetrič, ktorý zatemní Vašu obrazovku podľa nastavenia v rozsahu 20 až 100%.</description>
-    <description lang="sl">Dim je enostaven ohranjevalnik zaslona, ki postopoma zatemni zaslon do izbrane svetlosti med 20 in 100%.</description>
+    <description lang="sl">Dim je enostaven ohranjevalnik zaslona, ki zatemni zaslon do izbrane svetlosti med 20 in 100%.</description>
     <description lang="sq">Errësuesi i ekranit është një mbrojtës i thjeshtë ekrani, i cili errëson (zbeh) ekranin tuaj në varësi të një vlere të axhustueshme nga 20 deri në 100%. </description>
     <description lang="sv">Detta är en enkel skärmsläckare som tonar ned ljusstyrkan på din skärm till ett angivet värde mellan 20 och 100%</description>
     <description lang="ta_IN">இது எளிமையான திரைகாப்பான் - திரையை மங்க (மங்கு விளைவு) செய்துவிடும் - மங்கு அளவு 20% முதல் 100% வரை.</description>
diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/French (Canada)/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..f888846
--- /dev/null
@@ -0,0 +1,21 @@
+# XBMC Media Center language file
+# Addon Name: Dim
+# Addon id: screensaver.xbmc.builtin.dim
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Dim level"
+msgstr "Niveau d'assombrissement"
diff --git a/addons/screensaver.xbmc.builtin.dim/resources/language/Spanish (Venezuela)/strings.po b/addons/screensaver.xbmc.builtin.dim/resources/language/Spanish (Venezuela)/strings.po
new file mode 100644 (file)
index 0000000..2c1e542
--- /dev/null
@@ -0,0 +1,21 @@
+# XBMC Media Center language file
+# Addon Name: Dim
+# Addon id: screensaver.xbmc.builtin.dim
+# 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: Spanish (Venezuela) (http://www.transifex.com/projects/p/xbmc-main/language/es_VE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_VE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Dim level"
+msgstr "Nivel de atenuación"
index e49cf89..b34c506 100644 (file)
@@ -4,7 +4,7 @@
        version="1.1.7"
        provider-name="PythonWare">
   <requires>
-    <import addon="xbmc.python" version="2.0.0"/>
+    <import addon="xbmc.python" version="2.1.0"/>
   </requires>
   <extension point="xbmc.python.module"
              library="lib" />
index fb1c1c9..276dcb3 100644 (file)
                        <textureslidernib>ScrollBarNib.png</textureslidernib>
                        <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
                        <onleft>2</onleft>
-                       <onright>9</onright>
+                       <onright>2</onright>
                        <showonepage>false</showonepage>
                        <orientation>vertical</orientation>
                </control>
                                <onleft>12</onleft>
                                <onright>11</onright>
                                <onup>2</onup>
-                               <ondown>9</ondown>
+                               <ondown>2</ondown>
                        </control>
                        <control type="button" id="11">
                                <description>Cancel Button</description>
                                <onleft>10</onleft>
                                <onright>12</onright>
                                <onup>2</onup>
-                               <ondown>9</ondown>
+                               <ondown>2</ondown>
                        </control>
                        <control type="button" id="12">
                                <description>Defaults Button</description>
                                <onleft>11</onleft>
                                <onright>10</onright>
                                <onup>2</onup>
-                               <ondown>9</ondown>
+                               <ondown>2</ondown>
                        </control>
                </control>
 
index 446b552..c9b27c7 100644 (file)
@@ -4,8 +4,8 @@
        <allowoverlay>no</allowoverlay>
        <coordinates>
                <system>1</system>
-               <left>190</left>
-               <top>30</top>
+               <left>80</left>
+               <top>65</top>
        </coordinates>
        <include>dialogeffect</include>
 
                <control type="image">
                        <left>0</left>
                        <top>0</top>
-                       <width>900</width>
-                       <height>660</height>
+                       <width>1120</width>
+                       <height>570</height>
                        <texture border="40">DialogBack.png</texture>
                </control>
                <control type="image">
                        <description>Dialog Header image</description>
                        <left>40</left>
                        <top>16</top>
-                       <width>820</width>
+                       <width>1020</width>
                        <height>40</height>
                        <texture>dialogheader.png</texture>
                </control>
@@ -29,7 +29,7 @@
                        <description>header label</description>
                        <left>40</left>
                        <top>20</top>
-                       <width>820</width>
+                       <width>1020</width>
                        <height>30</height>
                        <font>font13_title</font>
                        <label>$LOCALIZE[19199] - $LOCALIZE[19023]</label>
@@ -43,7 +43,7 @@
                        <description>header label</description>
                        <left>40</left>
                        <top>20</top>
-                       <width>820</width>
+                       <width>1020</width>
                        <height>30</height>
                        <font>font13_title</font>
                        <label>$LOCALIZE[19199] - $LOCALIZE[19024]</label>
@@ -55,7 +55,7 @@
                </control>
                <control type="button">
                        <description>Close Window button</description>
-                       <left>810</left>
+                       <left>1030</left>
                        <top>15</top>
                        <width>64</width>
                        <height>32</height>
@@ -74,7 +74,7 @@
                        <left>20</left>
                        <top>70</top>
                        <control type="scrollbar" id="60">
-                               <left>0</left>
+                               <left>440</left>
                                <top>5</top>
                                <width>25</width>
                                <height>470</height>
                                <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
                                <textureslidernib>ScrollBarNib.png</textureslidernib>
                                <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>9002</onleft>
-                               <onright>20</onright>
+                               <onleft>20</onleft>
+                               <onright>9002</onright>
                                <showonepage>false</showonepage>
                                <orientation>vertical</orientation>
                        </control>
                        <control type="image">
-                               <left>25</left>
+                               <left>10</left>
                                <top>0</top>
                                <width>430</width>
                                <height>475</height>
                                <texture border="5">button-nofocus.png</texture>
                        </control>
                        <control type="list" id="20">
-                               <left>30</left>
+                               <left>15</left>
                                <top>5</top>
                                <width>420</width>
                                <height>470</height>
                                <onup>20</onup>
                                <ondown>20</ondown>
-                               <onleft>60</onleft>
-                               <onright>9002</onright>
+                               <onleft>9002</onleft>
+                               <onright>60</onright>
                                <pagecontrol>60</pagecontrol>
                                <scrolltime>200</scrolltime>
                                <itemlayout height="45" width="420">
                                        </control>
                                </focusedlayout>
                        </control>
-                       <control type="label">
-                               <description>Page Count Label</description>
-                               <left>30</left>
-                               <top>485</top>
-                               <width>420</width>
-                               <height>20</height>
-                               <font>font12</font>
-                               <textcolor>grey</textcolor>
-                               <scroll>false</scroll>
-                               <align>center</align>
-                               <aligny>center</aligny>
-                               <label>([COLOR=blue]$INFO[Container(20).NumItems][/COLOR]) $LOCALIZE[19019] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(20).CurrentPage]/$INFO[Container(20).NumPages][/COLOR])</label>
-                       </control>
                </control>
                <control type="group" id="9002">
                        <control type="group">
                                        <pulseonselect>no</pulseonselect>
                                        <label>19074</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
-                                       <onup>9000</onup>
+                                       <onright>9000</onright>
+                                       <onup>33</onup>
                                        <ondown>8</ondown>
                                </control>
                                <control type="edit" id="8">
                                        <texturenofocus border="5">button-nofocus.png</texturenofocus>
                                        <label>19202</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>8</onup>
                                        <ondown>12</ondown>
                                </control>
                                        <pulseonselect>no</pulseonselect>
                                        <label>19206</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>9</onup>
                                        <ondown>13</ondown>
                                </control>
                                        <texturefocus border="5">button-focus2.png</texturefocus>
                                        <texturenofocus border="5">button-nofocus.png</texturenofocus>
                                        <label>19200</label>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onleft>20</onleft>
                                        <onup>12</onup>
                                        <ondown>14</ondown>
                                        <pulseonselect>no</pulseonselect>
                                        <label>19267</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>13</onup>
                                        <ondown>30</ondown>
                                </control>
                                        <align>center</align>
                                        <label>19024</label>
                                        <onleft>30</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>14</onup>
                                        <ondown>31</ondown>
                                </control>
                                        <align>center</align>
                                        <label>19023</label>
                                        <onleft>30</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>14</onup>
                                        <ondown>31</ondown>
                                </control>
                                        <align>center</align>
                                        <label>19203</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>30</onup>
                                        <ondown>32</ondown>
                                </control>
                                        <align>center</align>
                                        <label>19211</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>31</onup>
                                        <ondown>33</ondown>
                                </control>
                                        <align>center</align>
                                        <label>19204</label>
                                        <onleft>20</onleft>
-                                       <onright>60</onright>
+                                       <onright>9000</onright>
                                        <onup>32</onup>
-                                       <ondown>9000</ondown>
+                                       <ondown>7</ondown>
                                </control>
                        </control>
                </control>
                <control type="group" id="9000">
-                       <left>70</left>
-                       <top>590</top>
+                       <left>890</left>
+                       <top>95</top>
                        <control type="button" id="4">
                                <description>OK Button</description>
                                <left>0</left>
                                <top>0</top>
-                               <width>250</width>
+                               <width>200</width>
                                <height>40</height>
                                <label>186</label>
                                <font>font12_title</font>
                                <align>center</align>
                                <aligny>center</aligny>
-                               <onleft>6</onleft>
-                               <onright>5</onright>
-                               <onup>33</onup>
-                               <ondown>7</ondown>
+                               <onleft>9002</onleft>
+                               <onright>20</onright>
+                               <onup>6</onup>
+                               <ondown>5</ondown>
                        </control>
                        <control type="button" id="5">
                                <description>Apply changes Button</description>
-                               <left>260</left>
-                               <top>0</top>
-                               <width>250</width>
+                               <left>0</left>
+                               <top>45</top>
+                               <width>200</width>
                                <height>40</height>
                                <label>14070</label>
                                <font>font12_title</font>
                                <align>center</align>
                                <aligny>center</aligny>
-                               <onleft>4</onleft>
-                               <onright>6</onright>
-                               <onup>33</onup>
-                               <ondown>7</ondown>
+                               <onleft>9002</onleft>
+                               <onright>20</onright>
+                               <onup>4</onup>
+                               <ondown>6</ondown>
                        </control>
                        <control type="button" id="6">
                                <description>Cancel Button</description>
-                               <left>520</left>
-                               <top>0</top>
-                               <width>250</width>
+                               <left>0</left>
+                               <top>90</top>
+                               <width>200</width>
                                <height>40</height>
                                <label>222</label>
                                <font>font12_title</font>
                                <align>center</align>
                                <aligny>center</aligny>
-                               <onleft>5</onleft>
-                               <onright>4</onright>
-                               <onup>33</onup>
-                               <ondown>7</ondown>
+                               <onleft>9002</onleft>
+                               <onright>20</onright>
+                               <onup>5</onup>
+                               <ondown>4</ondown>
+                       </control>
+                       <control type="group">
+                               <left>-5</left>
+                               <top>200</top>
+                               <control type="image">
+                                       <left>0</left>
+                                       <top>0</top>
+                                       <width>210</width>
+                                       <height>210</height>
+                                       <texture border="5">button-nofocus.png</texture>
+                               </control>
+                               <control type="image">
+                                       <left>5</left>
+                                       <top>5</top>
+                                       <width>200</width>
+                                       <height>200</height>
+                                       <aspectratio>keep</aspectratio>
+                                       <texture background="true">$INFO[Container(20).ListItem.Icon]</texture>
+                               </control> 
+                       </control>
+                       <control type="label">
+                               <description>Page Count Label</description>
+                               <left>-15</left>
+                               <top>418</top>
+                               <width>230</width>
+                               <height>35</height>
+                               <font>font12</font>
+                               <textcolor>grey</textcolor>
+                               <scroll>false</scroll>
+                               <align>center</align>
+                               <aligny>center</aligny>
+                               <label>([COLOR=blue]$INFO[Container(20).NumItems][/COLOR]) $LOCALIZE[19019] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(20).CurrentPage]/$INFO[Container(20).NumPages][/COLOR])</label>
+                               <wrapmultiline>true</wrapmultiline>
                        </control>
                </control>
        </controls>
index 519edb9..fa7749f 100644 (file)
@@ -7,15 +7,32 @@
                        <animation effect="slide" start="1150,0" end="0,0" time="400" tween="quadratic" easing="out">WindowOpen</animation>
                        <animation effect="slide" start="0,0" end="1150,0" time="400" tween="quadratic" easing="out">WindowClose</animation>
                        <control type="image">
-                               <left>130</left>
+                               <left>50</left>
                                <top>0</top>
-                               <width>1150</width>
+                               <width>1230</width>
                                <height>720</height>
                                <texture border="15,0,0,0" flipx="true">MediaBladeSub.png</texture>
                        </control>
+                       <control type="image">
+                               <description>background image</description>
+                               <left>1060</left>
+                               <top>-10</top>
+                               <width>675</width>
+                               <height>740</height>
+                               <texture border="10">KeyboardEditArea.png</texture>
+                               <animation effect="fade" end="30" time="0" condition="true">conditional</animation>
+                       </control>
+                       <control type="image">
+                               <description>Dialog Header image</description>
+                               <left>90</left>
+                               <top>16</top>
+                               <width>930</width>
+                               <height>40</height>
+                               <texture>dialogheader.png</texture>
+                       </control>
                        <control type="button">
                                <description>Close Window button</description>
-                               <left>180</left>
+                               <left>70</left>
                                <top>0</top>
                                <width>64</width>
                                <height>32</height>
                                <animation effect="fade" start="100" end="0" time="200">WindowClose</animation>
                                <control type="label">
                                        <description>header label</description>
-                                       <left>160</left>
-                                       <top>40</top>
-                                       <width>1080</width>
-                                       <height>30</height>
+                                       <left>90</left>
+                                       <top>16</top>
+                                       <width>930</width>
+                                       <height>40</height>
                                        <font>font24_title</font>
                                        <label>19143</label>
                                        <align>center</align>
                                </control>
                                <control type="group">
                                        <description>Group list</description>
-                                       <left>160</left>
+                                       <left>70</left>
                                        <top>80</top>
                                        <control type="label">
                                                <description>name label</description>
                                                <left>0</left>
                                                <top>0</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>70</height>
                                                <font>font13</font>
                                                <label>31506</label>
                                        <control type="image">
                                                <left>0</left>
                                                <top>75</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>460</height>
                                                <texture border="5">button-nofocus.png</texture>
                                        </control>
                                        <control type="list" id="13">
                                                <left>5</left>
                                                <top>80</top>
-                                               <width>330</width>
+                                               <width>300</width>
                                                <height>450</height>
                                                <onup>13</onup>
                                                <ondown>13</ondown>
-                                               <onleft>29</onleft>
+                                               <onleft>9000</onleft>
                                                <onright>73</onright>
                                                <pagecontrol>73</pagecontrol>
                                                <scrolltime>200</scrolltime>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                        </control>
                                                        <control type="label">
                                                                <left>10</left>
                                                                <top>0</top>
-                                                               <width>310</width>
+                                                               <width>280</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                                <visible>!Control.HasFocus(13)</visible>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-focus2.png</texture>
                                                                <visible>Control.HasFocus(13)</visible>
                                                        <control type="label">
                                                                <left>10</left>
                                                                <top>0</top>
-                                                               <width>310</width>
+                                                               <width>280</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                </focusedlayout>
                                        </control>
                                        <control type="scrollbar" id="73">
-                                               <left>340</left>
+                                               <left>305</left>
                                                <top>75</top>
                                                <width>25</width>
                                                <height>460</height>
                                </control>
                                <control type="group">
                                        <description>Channels list</description>
-                                       <left>525</left>
+                                       <left>400</left>
                                        <top>80</top>
                                        <control type="label" id="21">
                                                <description>name label</description>
                                                <left>0</left>
                                                <top>0</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>70</height>
                                                <font>font13</font>
                                                <align>center</align>
                                        <control type="image">
                                                <left>0</left>
                                                <top>75</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>460</height>
                                                <texture border="5">button-nofocus.png</texture>
                                        </control>
                                        <control type="list" id="11">
                                                <left>5</left>
                                                <top>85</top>
-                                               <width>330</width>
+                                               <width>300</width>
                                                <height>450</height>
                                                <onup>11</onup>
                                                <ondown>11</ondown>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                        </control>
                                                        <control type="label">
                                                                <left>40</left>
                                                                <top>0</top>
-                                                               <width>280</width>
+                                                               <width>250</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                                <visible>!Control.HasFocus(11)</visible>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-focus2.png</texture>
                                                                <visible>Control.HasFocus(11)</visible>
                                                        <control type="label">
                                                                <left>40</left>
                                                                <top>0</top>
-                                                               <width>280</width>
+                                                               <width>250</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                </focusedlayout>
                                        </control>
                                        <control type="scrollbar" id="71">
-                                               <left>340</left>
+                                               <left>305</left>
                                                <top>75</top>
                                                <width>25</width>
                                                <height>460</height>
                                </control>
                                <control type="group">
                                        <description>Grouped Channels list</description>
-                                       <left>890</left>
+                                       <left>730</left>
                                        <top>80</top>
                                        <control type="label" id="22">
                                                <description>name label</description>
                                                <left>0</left>
                                                <top>0</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>70</height>
                                                <font>font13</font>
                                                <align>center</align>
                                        <control type="image">
                                                <left>0</left>
                                                <top>75</top>
-                                               <width>340</width>
+                                               <width>310</width>
                                                <height>460</height>
                                                <texture border="5">button-nofocus.png</texture>
                                        </control>
                                        <control type="list" id="12">
                                                <left>5</left>
                                                <top>85</top>
-                                               <width>330</width>
+                                               <width>300</width>
                                                <height>450</height>
                                                <onup>12</onup>
                                                <ondown>12</ondown>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                        </control>
                                                        <control type="label">
                                                                <left>40</left>
                                                                <top>0</top>
-                                                               <width>280</width>
+                                                               <width>250</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-nofocus.png</texture>
                                                                <visible>!Control.HasFocus(12)</visible>
                                                        <control type="image">
                                                                <left>0</left>
                                                                <top>0</top>
-                                                               <width>330</width>
+                                                               <width>300</width>
                                                                <height>40</height>
                                                                <texture border="5">button-focus2.png</texture>
                                                                <visible>Control.HasFocus(12)</visible>
                                                        <control type="label">
                                                                <left>40</left>
                                                                <top>0</top>
-                                                               <width>280</width>
+                                                               <width>250</width>
                                                                <height>40</height>
                                                                <font>font12</font>
                                                                <align>left</align>
                                                </focusedlayout>
                                        </control>
                                        <control type="scrollbar" id="72">
-                                               <left>340</left>
+                                               <left>305</left>
                                                <top>75</top>
                                                <width>25</width>
                                                <height>460</height>
                                                <textureslidernib>ScrollBarNib.png</textureslidernib>
                                                <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
                                                <onleft>12</onleft>
-                                               <onright>26</onright>
+                                               <onright>9000</onright>
                                                <ondown>72</ondown>
                                                <onup>72</onup>
                                                <showonepage>false</showonepage>
                                        </control>
                                </control>
                                <control type="grouplist" id="9000">
-                                       <left>160</left>
-                                       <top>660</top>
-                                       <width>1080</width>
-                                       <height>40</height>
-                                       <itemgap>2</itemgap>
+                                       <left>1070</left>
+                                       <top>165</top>
+                                       <width>200</width>
+                                       <height>175</height>
+                                       <itemgap>5</itemgap>
                                        <align>center</align>
-                                       <orientation>horizontal</orientation>
-                                       <onleft>72</onleft>
+                                       <orientation>vertical</orientation>
+                                       <onleft>12</onleft>
                                        <onright>13</onright>
                                        <onup>9000</onup>
                                        <ondown>9000</ondown>
                                        <control type="button" id="26">
                                                <description>Add Group</description>
-                                               <width>230</width>
+                                               <width>200</width>
                                                <include>ButtonInfoDialogsCommonValues</include>
                                                <label>31503</label>
                                        </control>
                                        <control type="button" id="27">
                                                <description>Rename Group</description>
-                                               <width>230</width>
+                                               <width>200</width>
                                                <include>ButtonInfoDialogsCommonValues</include>
                                                <label>31504</label>
                                        </control>
                                        <control type="button" id="28">
                                                <description>Delete Group</description>
-                                               <width>230</width>
+                                               <width>200</width>
                                                <include>ButtonInfoDialogsCommonValues</include>
                                                <label>31505</label>
                                        </control>
                                        <control type="button" id="29">
                                                <description>OK</description>
-                                               <width>230</width>
+                                               <width>200</width>
                                                <include>ButtonInfoDialogsCommonValues</include>
                                                <label>186</label>
                                        </control>
                                </control>
+                               <control type="group">
+                                       <left>1065</left>
+                                       <top>405</top>
+                                       <control type="image">
+                                               <left>0</left>
+                                               <top>0</top>
+                                               <width>210</width>
+                                               <height>210</height>
+                                               <texture border="5">button-nofocus.png</texture>
+                                       </control>
+                                       <control type="image">
+                                               <left>5</left>
+                                               <top>5</top>
+                                               <width>200</width>
+                                               <height>200</height>
+                                               <aspectratio>keep</aspectratio>
+                                               <texture background="true">$INFO[Container(11).ListItem.Icon]</texture>
+                                               <visible>Control.HasFocus(11) | Control.HasFocus(71)</visible>
+                                       </control>
+                                       <control type="image">
+                                               <left>5</left>
+                                               <top>5</top>
+                                               <width>200</width>
+                                               <height>200</height>
+                                               <aspectratio>keep</aspectratio>
+                                               <texture background="true">$INFO[Container(12).ListItem.Icon]</texture>
+                                               <visible>Control.HasFocus(12) | Control.HasFocus(72)</visible>
+                                       </control>
+                               </control>
                        </control>
                </control>
                <include>Clock</include>
index 4ddf983..295c57d 100644 (file)
@@ -73,9 +73,9 @@
                                <top>65</top>
                                <width>550</width>
                                <height>510</height>
-                               <onup>20</onup>
-                               <ondown>20</ondown>
-                               <onleft>10</onleft>
+                               <onup>10</onup>
+                               <ondown>10</ondown>
+                               <onleft>61</onleft>
                                <onright>61</onright>
                                <pagecontrol>61</pagecontrol>
                                <scrolltime>200</scrolltime>
                                <textcolor>white</textcolor>
                                <focusedcolor>white</focusedcolor>
                                <align>center</align>
-                               <onleft>61</onleft>
-                               <onright>20</onright>
                                <onup>20</onup>
                                <ondown>20</ondown>
                        </control>
index 433eb65..196b9bf 100644 (file)
                        <ondown>10</ondown>
                        <visible>system.getbool(input.enablemouse)</visible>
                </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
+               <control type="textbox" id="9">
+                       <description>text</description>
                        <left>30</left>
                        <top>60</top>
                        <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <haspath>true</haspath>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <left>30</left>
-                       <top>85</top>
-                       <width>550</width>
-                       <height>30</height>
+                       <height>80</height>
                        <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <haspath>true</haspath>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <left>30</left>
-                       <top>110</top>
-                       <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
                        <label>-</label>
-                       <haspath>true</haspath>
                        <font>font13</font>
+                       <autoscroll time="3000" delay="4000" repeat="5000">Skin.HasSetting(AutoScroll)</autoscroll>
                </control>
                <control type="progress">
                        <description>Progressbar</description>
index dccaebc..b3485f0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <window>
        <defaultcontrol>1</defaultcontrol>
-       <visible>[Player.Seeking | Player.DisplayAfterSeek | Player.Paused | Player.Forwarding | Player.Rewinding] + ![Window.IsVisible(VideoOSD) | Window.IsVisible(MusicOSD)]</visible>
+       <visible>Player.Seeking | Player.DisplayAfterSeek | Player.Paused | Player.Forwarding | Player.Rewinding</visible>
        <animation effect="fade" start="0" end="100" time="200">WindowOpen</animation>
        <animation effect="fade" start="100" end="0" time="200">WindowClose</animation>
        <controls>
index 9d9247f..3038aa0 100644 (file)
@@ -4,53 +4,79 @@
        <defaultcontrol always="true">3</defaultcontrol>
        <coordinates>
                <system>1</system>
-               <left>335</left>
+               <left>215</left>
                <top>35</top>
        </coordinates>
        <include>dialogeffect</include>
        <controls>
-               <control type="image">
-                       <description>background image</description>
-                       <left>0</left>
-                       <top>0</top>
-                       <width>610</width>
-                       <height>650</height>
-                       <texture border="40">DialogBack.png</texture>
-                       <visible>![Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)]</visible>
+               <control type="group">
+                       <visible>Control.IsVisible(5)</visible>
+                       <control type="image">
+                               <description>background image</description>
+                               <left>0</left>
+                               <top>0</top>
+                               <width>850</width>
+                               <height>630</height>
+                               <texture border="40">$VAR[SelectBack]</texture>
+                       </control>
+                       <control type="image">
+                               <description>Dialog Header image</description>
+                               <left>40</left>
+                               <top>16</top>
+                               <width>770</width>
+                               <height>40</height>
+                               <texture>dialogheader.png</texture>
+                       </control>
+                       <control type="label" id="1">
+                               <description>header label</description>
+                               <left>40</left>
+                               <top>20</top>
+                               <width>770</width>
+                               <height>30</height>
+                               <font>font13_title</font>
+                               <label>$LOCALIZE[13406]</label>
+                               <align>center</align>
+                               <aligny>center</aligny>
+                               <textcolor>selected</textcolor>
+                               <shadowcolor>black</shadowcolor>
+                       </control>
                </control>
-               <control type="image">
-                       <description>background image</description>
-                       <left>0</left>
-                       <top>0</top>
-                       <width>610</width>
-                       <height>650</height>
-                       <texture border="40">DialogBack2.png</texture>
-                       <visible>Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)</visible>
-               </control>
-               <control type="image">
-                       <description>Dialog Header image</description>
-                       <left>40</left>
-                       <top>16</top>
-                       <width>530</width>
-                       <height>40</height>
-                       <texture>dialogheader.png</texture>
-               </control>
-               <control type="label" id="1">
-                       <description>header label</description>
-                       <left>40</left>
-                       <top>20</top>
-                       <width>530</width>
-                       <height>30</height>
-                       <font>font13_title</font>
-                       <label>$LOCALIZE[13406]</label>
-                       <align>center</align>
-                       <aligny>center</aligny>
-                       <textcolor>selected</textcolor>
-                       <shadowcolor>black</shadowcolor>
+               <control type="group">
+                       <left>120</left>
+                       <visible>!Control.IsVisible(5)</visible>
+                       <control type="image">
+                               <description>background image</description>
+                               <left>0</left>
+                               <top>0</top>
+                               <width>610</width>
+                               <height>630</height>
+                               <texture border="40">$VAR[SelectBack]</texture>
+                       </control>
+                       <control type="image">
+                               <description>Dialog Header image</description>
+                               <left>40</left>
+                               <top>16</top>
+                               <width>530</width>
+                               <height>40</height>
+                               <texture>dialogheader.png</texture>
+                       </control>
+                       <control type="label" id="1">
+                               <description>header label</description>
+                               <left>40</left>
+                               <top>20</top>
+                               <width>530</width>
+                               <height>30</height>
+                               <font>font13_title</font>
+                               <label>$LOCALIZE[13406]</label>
+                               <align>center</align>
+                               <aligny>center</aligny>
+                               <textcolor>selected</textcolor>
+                               <shadowcolor>black</shadowcolor>
+                       </control>
                </control>
                <control type="button">
                        <description>Close Window button</description>
-                       <left>520</left>
+                       <left>760</left>
                        <top>15</top>
                        <width>64</width>
                        <height>32</height>
@@ -63,6 +89,7 @@
                        <onright>10</onright>
                        <onup>10</onup>
                        <ondown>10</ondown>
+                       <animation effect="slide" end="-120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                        <visible>system.getbool(input.enablemouse)</visible>
                </control>
                <control type="list" id="3">
                        <pagecontrol>61</pagecontrol>
                        <scrolltime>200</scrolltime>
                        <animation effect="slide" start="0,0" end="10,0" time="0" condition="!Control.IsVisible(61)">Conditional</animation>
+                       <animation effect="slide" end="120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                        <itemlayout height="46" width="550">
                                <control type="image">
                                        <left>0</left>
                        <pagecontrol>61</pagecontrol>
                        <scrolltime>200</scrolltime>
                        <animation effect="slide" start="0,0" end="10,0" time="0" condition="!Control.IsVisible(61)">Conditional</animation>
+                       <animation effect="slide" end="120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                        <itemlayout height="85" width="550">
                                <control type="image">
                                        <left>0</left>
                        <textureslidernib>ScrollBarNib.png</textureslidernib>
                        <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
                        <onleft>3</onleft>
-                       <onright>3</onright>
+                       <onright>5</onright>
                        <ondown>61</ondown>
                        <onup>61</onup>
                        <showonepage>false</showonepage>
                        <orientation>vertical</orientation>
+                       <animation effect="slide" end="120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                </control>
                <control type="label">
                        <description>number of files/pages in list text label</description>
-                       <left>280</left>
-                       <top>585</top>
-                       <width>300</width>
+                       <left>275</left>
+                       <top>572</top>
+                       <width>550</width>
                        <height>35</height>
                        <font>font12</font>
                        <align>right</align>
                        <scroll>true</scroll>
                        <textcolor>grey</textcolor>
                        <label>([COLOR=blue]$INFO[Container(3).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(3).CurrentPage]/$INFO[Container(3).NumPages][/COLOR])</label>
+                       <animation effect="slide" end="-120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                        <visible>Control.IsVisible(3)</visible>
                </control>
                <control type="label">
                        <description>number of files/pages in list text label</description>
-                       <left>280</left>
-                       <top>587</top>
-                       <width>300</width>
+                       <left>275</left>
+                       <top>572</top>
+                       <width>550</width>
                        <height>35</height>
                        <font>font12</font>
                        <align>right</align>
                        <scroll>true</scroll>
                        <textcolor>grey</textcolor>
                        <label>([COLOR=blue]$INFO[Container(6).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(6).CurrentPage]/$INFO[Container(6).NumPages][/COLOR])</label>
+                       <wrapmultiline>true</wrapmultiline>
+                       <animation effect="slide" end="-120,0" time="0" condition="!Control.IsVisible(5)">Conditional</animation>
                        <visible>Control.IsVisible(6)</visible>
                </control>
                <control type="button" id="5">
                        <description>Manual button</description>
-                       <left>20</left>
-                       <top>585</top>
+                       <left>615</left>
+                       <top>107</top>
                        <width>200</width>
                        <height>40</height>
                        <label>186</label>
                        <textcolor>white</textcolor>
                        <focusedcolor>white</focusedcolor>
                        <align>center</align>
-                       <onleft>61</onleft>
+                       <onleft>3</onleft>
                        <onright>3</onright>
-                       <onup>3</onup>
-                       <ondown>3</ondown>
+               </control>
+               <control type="group">
+                       <left>610</left>
+                       <top>320</top>
+                       <visible>Control.IsVisible(6) + Control.IsVisible(5)</visible>
+                       <control type="image">
+                               <left>0</left>
+                               <top>0</top>
+                               <width>210</width>
+                               <height>210</height>
+                               <texture border="5">button-nofocus.png</texture>
+                       </control>
+                       <control type="image">
+                               <left>5</left>
+                               <top>5</top>
+                               <width>200</width>
+                               <height>200</height>
+                               <aspectratio>keep</aspectratio>
+                               <texture background="true">$INFO[Container(6).ListItem.Icon]</texture>
+                       </control> 
                </control>
        </controls>
 </window>
index fdafbac..55270a5 100644 (file)
@@ -8,7 +8,7 @@
        <controls>
                <control type="group" id="250">
                        <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">
+                       <animation type="Conditional" condition="Control.HasFocus(150) | Control.HasFocus(160)" reversible="true">
                                <effect type="slide" end="-250,0" time="400"/>
                        </animation>
                        <control type="button" id="8999">
                                        <left>900</left>
                                        <top>206</top>
                                        <width>250</width>
-                                       <height>434</height>
+                                       <height>399</height>
                                        <onleft>120</onleft>
                                        <onright>120</onright>
-                                       <onup>150</onup>
-                                       <ondown>150</ondown>
+                                       <onup>160</onup>
+                                       <ondown>160</ondown>
                                        <viewtype label="535">list</viewtype>
                                        <scrolltime>200</scrolltime>
                                        <itemlayout width="400" height="36">
                                                </control>
                                        </focusedlayout>
                                </control>
+                               <control type="button" id="160">
+                                       <description>Manual search button</description>
+                                       <left>925</left>
+                                       <top>640</top>
+                                       <width>200</width>
+                                       <height>40</height>
+                                       <onleft>120</onleft>
+                                       <onright>120</onright>
+                                       <onup>150</onup>
+                                       <ondown>150</ondown>
+                                       <label>$LOCALIZE[24120]</label>
+                                       <font>font12_title</font>
+                                       <textcolor>white</textcolor>
+                                       <focusedcolor>white</focusedcolor>
+                                       <align>center</align>
+                               </control>
                        </control>
                </control>
        </controls>
index 7c79199..c583977 100644 (file)
                        <ondown>10</ondown>
                        <visible>system.getbool(input.enablemouse)</visible>
                </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
+               <control type="textbox" id="9">
+                       <description>text</description>
                        <left>30</left>
                        <top>60</top>
                        <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <left>30</left>
-                       <top>85</top>
-                       <width>550</width>
-                       <height>30</height>
+                       <height>80</height>
                        <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <left>30</left>
-                       <top>110</top>
-                       <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
                        <label>-</label>
                        <font>font13</font>
+                       <autoscroll time="3000" delay="4000" repeat="5000">Skin.HasSetting(AutoScroll)</autoscroll>
                </control>
                <control type="button" id="11">
                        <description>Yes button</description>
index 255c461..7d6445a 100644 (file)
@@ -9,18 +9,35 @@
        </coordinates>
        <controls>
                <control type="group">
-                       <left>580</left>
+                       <left>360</left>
                        <animation effect="slide" start="700,0" end="0,0" time="400" tween="quadratic" easing="out" condition="![Window.IsVisible(MovieInformation) | Window.IsVisible(MusicInformation)]">WindowOpen</animation>
-                       <animation effect="slide" start="-400,0" end="0,0" time="400" tween="quadratic" easing="out" condition="[Window.IsVisible(MovieInformation) | Window.IsVisible(MusicInformation)]">WindowOpen</animation>
+                       <animation effect="slide" start="-180,0" end="0,0" time="400" tween="quadratic" easing="out" condition="[Window.IsVisible(MovieInformation) | Window.IsVisible(MusicInformation)]">WindowOpen</animation>
                        <animation effect="slide" start="0,0" end="700,0" time="400" tween="quadratic" easing="out" condition="![Window.IsVisible(MovieInformation) | Window.IsVisible(MusicInformation)]">WindowClose</animation>
                        <animation effect="slide" start="0,0" end="-400,0" time="400" tween="quadratic" easing="out" condition="[Window.IsVisible(MovieInformation) | Window.IsVisible(MusicInformation)]">WindowClose</animation>
                        <control type="image">
                                <left>0</left>
                                <top>0</top>
-                               <width>1100</width>
+                               <width>1320</width>
                                <height>720</height>
                                <texture border="15,0,0,0" flipx="true">MediaBladeSub.png</texture>
                        </control>
+                       <control type="image">
+                               <description>background image</description>
+                               <left>667</left>
+                               <top>-10</top>
+                               <width>675</width>
+                               <height>740</height>
+                               <texture border="10">KeyboardEditArea.png</texture>
+                               <animation effect="fade" end="30" time="0" condition="true">conditional</animation>
+                       </control>
+                       <control type="image">
+                               <description>Dialog Header image</description>
+                               <left>40</left>
+                               <top>16</top>
+                               <width>595</width>
+                               <height>40</height>
+                               <texture>dialogheader.png</texture>
+                       </control>
                        <control type="button">
                                <description>Close Window button</description>
                                <left>20</left>
                                <animation effect="fade" start="100" end="0" time="200">WindowClose</animation>
                                <control type="label" id="411">
                                        <description>header label</description>
-                                       <left>30</left>
-                                       <top>40</top>
-                                       <width>630</width>
+                                       <left>40</left>
+                                       <top>20</top>
+                                       <width>595</width>
                                        <height>30</height>
                                        <font>font13_title</font>
                                        <label>1023</label>
-                                       <align>right</align>
+                                       <align>center</align>
                                        <aligny>center</aligny>
                                        <textcolor>selected</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                </control>
                                <control type="label" id="412">
                                        <description>Path label</description>
-                                       <left>30</left>
-                                       <top>70</top>
-                                       <width>630</width>
+                                       <left>40</left>
+                                       <top>680</top>
+                                       <width>595</width>
                                        <height>30</height>
                                        <font>font13</font>
                                        <haspath>true</haspath>
@@ -68,8 +85,8 @@
                                        <shadowcolor>black</shadowcolor>
                                </control>
                                <control type="grouplist" id="9000">
-                                       <left>20</left>
-                                       <top>460</top>
+                                       <left>685</left>
+                                       <top>130</top>
                                        <width>221</width>
                                        <height>225</height>
                                        <itemgap>5</itemgap>
                                        </control>
                                </control>
                                <control type="image">
-                                       <left>245</left>
-                                       <top>460</top>
-                                       <width>420</width>
-                                       <height>210</height>
+                                       <left>685</left>
+                                       <top>400</top>
+                                       <width>221</width>
+                                       <height>221</height>
                                        <texture border="5">button-nofocus.png</texture>
                                </control>
                                <control type="image"> 
-                                       <left>250</left> 
-                                       <top>465</top> 
-                                       <width>410</width> 
-                                       <height>200</height> 
+                                       <left>690</left> 
+                                       <top>405</top> 
+                                       <width>211</width> 
+                                       <height>211</height> 
                                        <aspectratio>keep</aspectratio> 
                                        <texture background="true">$INFO[ListItem.Icon]</texture> 
                                        <visible>!SubString(Control.GetLabel(416),*)</visible> 
                                </control>
                                <control type="panel" id="450">
                                        <left>20</left>
-                                       <top>120</top>
-                                       <width>640</width>
-                                       <height>321</height>
+                                       <top>90</top>
+                                       <width>620</width>
+                                       <height>562</height>
                                        <onleft>9000</onleft>
                                        <onright>60</onright>
                                        <onup>450</onup>
                                        <ondown>450</ondown>
                                        <pagecontrol>60</pagecontrol>
                                        <scrolltime>200</scrolltime>
-                                       <itemlayout height="40" width="640">
+                                       <itemlayout height="40" width="620">
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <texture border="5">MenuItemNF.png</texture>
                                                </control>
                                                <control type="label">
                                                        <left>55</left>
                                                        <top>0</top>
-                                                       <width>580</width>
+                                                       <width>560</width>
                                                        <height>40</height>
                                                        <font>font13</font>
                                                        <align>left</align>
                                                        <info>ListItem.Label</info>
                                                </control>
                                        </itemlayout>
-                                       <focusedlayout height="40" width="640">
+                                       <focusedlayout height="40" width="620">
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <visible>!Control.HasFocus(450)</visible>
                                                        <texture border="5">MenuItemNF.png</texture>
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <visible>Control.HasFocus(450)</visible>
                                                        <texture border="5">MenuItemFO.png</texture>
                                                <control type="label">
                                                        <left>55</left>
                                                        <top>0</top>
-                                                       <width>580</width>
+                                                       <width>560</width>
                                                        <height>40</height>
                                                        <font>font13</font>
                                                        <align>left</align>
                                </control>
                                <control type="panel" id="451">
                                        <left>20</left>
-                                       <top>120</top>
-                                       <width>640</width>
-                                       <height>321</height>
+                                       <top>90</top>
+                                       <width>620</width>
+                                       <height>562</height>
                                        <onleft>9000</onleft>
                                        <onright>60</onright>
                                        <onup>451</onup>
                                        <ondown>451</ondown>
                                        <pagecontrol>60</pagecontrol>
                                        <scrolltime>200</scrolltime>
-                                       <itemlayout height="40" width="640">
+                                       <itemlayout height="40" width="620">
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <texture border="5">MenuItemNF.png</texture>
                                                </control>
                                                <control type="label">
                                                        <left>55</left>
                                                        <top>0</top>
-                                                       <width>580</width>
+                                                       <width>560</width>
                                                        <height>40</height>
                                                        <font>font13</font>
                                                        <align>left</align>
                                                        <info>ListItem.Label</info>
                                                </control>
                                        </itemlayout>
-                                       <focusedlayout height="40" width="640">
+                                       <focusedlayout height="40" width="620">
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <visible>!Control.HasFocus(451)</visible>
                                                        <texture border="5">MenuItemNF.png</texture>
                                                <control type="image">
                                                        <left>0</left>
                                                        <top>0</top>
-                                                       <width>640</width>
+                                                       <width>620</width>
                                                        <height>41</height>
                                                        <visible>Control.HasFocus(451)</visible>
                                                        <texture border="5">MenuItemFO.png</texture>
                                                <control type="label">
                                                        <left>55</left>
                                                        <top>0</top>
-                                                       <width>580</width>
+                                                       <width>560</width>
                                                        <height>40</height>
                                                        <font>font13</font>
                                                        <align>left</align>
                                </control>
 
                                <control type="scrollbar" id="60">
-                                       <left>650</left>
-                                       <top>120</top>
+                                       <left>640</left>
+                                       <top>90</top>
                                        <width>25</width>
-                                       <height>320</height>
+                                       <height>561</height>
                                        <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
                                        <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
                                        <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
                                        <textureslidernib>ScrollBarNib.png</textureslidernib>
                                        <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
                                        <onleft>450</onleft>
-                                       <onright>450</onright>
+                                       <onright>9000</onright>
                                        <showonepage>false</showonepage>
                                        <orientation>vertical</orientation>
                                </control>
                                <control type="label">
                                        <description>Page label</description>
-                                       <left>100</left>
+                                       <left>685</left>
                                        <top>680</top>
-                                       <width>560</width>
+                                       <width>221</width>
                                        <height>30</height>
                                        <align>right</align>
                                        <aligny>center</aligny>
                                        <textcolor>grey</textcolor>
                                        <font>font12</font>
                                        <label>([COLOR=blue]$INFO[Container(450).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(450).CurrentPage]/$INFO[Container(450).NumPages][/COLOR])</label>
+                                       <wrapmultiline>true</wrapmultiline>
                                        <visible>!Control.IsVisible(451)</visible>
                                </control>
                                <control type="label">
                                        <description>Page label</description>
-                                       <left>100</left>
+                                       <left>685</left>
                                        <top>680</top>
-                                       <width>560</width>
+                                       <width>221</width>
                                        <height>30</height>
                                        <align>right</align>
                                        <aligny>center</aligny>
                                        <textcolor>grey</textcolor>
                                        <font>font12</font>
                                        <label>([COLOR=blue]$INFO[Container(451).NumItems][/COLOR]) $LOCALIZE[31025] - $LOCALIZE[31024] ([COLOR=blue]$INFO[Container(451).CurrentPage]/$INFO[Container(451).NumPages][/COLOR])</label>
+                                       <wrapmultiline>true</wrapmultiline>
                                        <visible>Control.IsVisible(451)</visible>
                                </control>
                        </control>
index 8572e35..f4aaf56 100644 (file)
                                <left>0</left>
                                <top>6</top>
                                <width>128</width>
-                               <height>50</height>
+                               <height>63</height>
                                <texture>SideFade.png</texture>
                        </control>
                        <control type="image">
                                <left>128r</left>
                                <top>6</top>
                                <width>128</width>
-                               <height>60</height>
+                               <height>63</height>
                                <texture flipx="true">SideFade.png</texture>
                        </control>
                </control>
index 2b89f2a..9ced61e 100644 (file)
                                        <aspectratio>keep</aspectratio>
                                        <texture>icon_power.png</texture>
                                </control>
-                               <control type="image">
-                                       <left>13</left>
-                                       <top>3</top>
-                                       <width>30</width>
-                                       <height>29</height>
-                                       <texture>home-power-focus.gif</texture>
-                                       <visible>Control.HasFocus(20)</visible>
-                               </control>
                        </control>
                </control>
                <include>Clock</include>
index 4e9c34c..227dfde 100644 (file)
                                </control>
                                <control type="togglebutton" id="20">
                                        <description>Update library</description>
+                                       <textwidth>235</textwidth>
                                        <include>ButtonCommonValues</include>
                                        <label>653</label>
                                        <altlabel>13353</altlabel>
index e0b04f5..bf4a83b 100644 (file)
                                </control>
                                <control type="togglebutton" id="20">
                                        <description>Update library</description>
+                                       <textwidth>235</textwidth>
                                        <include>ButtonCommonValues</include>
                                        <label>653</label>
                                        <altlabel>13353</altlabel>
index 4b240c2..6016217 100644 (file)
                                        <texture border="10">ContentPanelMirror.png</texture>
                                </control>
                                <control type="image">
-                                       <left>20</left>
+                                       <left>8</left>
                                        <top>5</top>
-                                       <width>460</width>
-                                       <height>90</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
+                                       <width>484</width>
+                                       <height>45</height>
+                                       <texture>dialogheader.png</texture>
                                </control>
                                <control type="label">
                                        <description>header label</description>
                                        <left>20</left>
-                                       <top>13</top>
+                                       <top>15</top>
                                        <width>460</width>
                                        <height>30</height>
                                        <font>font13_title</font>
                                        <shadowcolor>black</shadowcolor>
                                </control>
                                <control type="image">
-                                       <left>70</left>
-                                       <top>30</top>
-                                       <width>360</width>
-                                       <height>90</height>
+                                       <left>30</left>
+                                       <top>55</top>
+                                       <width>440</width>
+                                       <height>46</height>
                                        <aspectratio align="center" aligny="center">keep</aspectratio>
                                        <texture>$INFO[Window.Property(WeatherProviderLogo)]</texture>
                                </control>
                                        <texture border="10">ContentPanelMirror.png</texture>
                                </control>
                                <control type="image">
-                                       <left>20</left>
+                                       <left>8</left>
                                        <top>5</top>
-                                       <width>610</width>
-                                       <height>90</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
+                                       <width>634</width>
+                                       <height>45</height>
+                                       <texture>dialogheader.png</texture>
                                </control>
                                <control type="label">
                                        <description>header label</description>
                                        <left>20</left>
-                                       <top>13</top>
+                                       <top>15</top>
                                        <width>610</width>
                                        <height>30</height>
                                        <font>font13_title</font>
                                        <texture border="10">ContentPanelMirror.png</texture>
                                </control>
                                <control type="image">
-                                       <left>20</left>
+                                       <left>8</left>
                                        <top>5</top>
-                                       <width>610</width>
-                                       <height>90</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
+                                       <width>634</width>
+                                       <height>45</height>
+                                       <texture>dialogheader.png</texture>
                                </control>
                                <control type="group" id="50">
                                        <include condition="StringCompare(Weather.Plugin,weather.wunderground)">Weather10DayForcast</include>
index 4e121f7..5811960 100644 (file)
                                <left>268</left>
                                <top>10</top>
                                <width>804</width>
-                               <height>70</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
+                               <height>54</height>
+                               <texture>dialogheader.png</texture>
                        </control>
                        <control type="label">
                                <description>header label</description>
                                <height>30</height>
                                <font>font16</font>
                                <label>$LOCALIZE[31000] $LOCALIZE[5]</label>
-                               <align>left</align>
+                               <align>center</align>
                                <aligny>center</aligny>
                                <textcolor>white</textcolor>
                                <shadowcolor>black</shadowcolor>
index 4dc77e1..c811612 100644 (file)
                        <control type="image">
                                <left>268</left>
                                <top>10</top>
-                               <width>804</width>
-                               <height>70</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
+                               <width>790</width>
+                               <height>52</height>
+                               <texture>dialogheader.png</texture>
                        </control>
                        <control type="label">
                                <description>header label</description>
                                <left>300</left>
                                <top>20</top>
-                               <width>740</width>
+                               <width>726</width>
                                <height>30</height>
                                <font>font16</font>
                                <label>$INFO[Control.GetLabel(2)] - $LOCALIZE[5]</label>
-                               <align>left</align>
+                               <align>center</align>
                                <aligny>center</aligny>
                                <textcolor>white</textcolor>
                                <shadowcolor>black</shadowcolor>
index 3924bfa..cfad432 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <window>
-       <defaultcontrol always="true">2</defaultcontrol>
+       <defaultcontrol always="true">9000</defaultcontrol>
        <allowoverlay>no</allowoverlay>
        <controls>
                <include>CommonBackground</include>
                                <aspectratio>keep</aspectratio>
                                <texture>Confluence_Logo.png</texture>
                        </control>
-                       <control type="button" id="4">
-                               <description>Enable Login screen</description>
+                       <control type="list" id="9000">
                                <left>10</left>
-                               <top>90</top>
-                               <width>250</width>
-                               <height>72</height>
-                               <textoffsety>8</textoffsety>
-                               <label>20096</label>
-                               <font>font24_title</font>
-                               <align>right</align>
-                               <aligny>top</aligny>
-                               <texturenofocus border="5">MenuItemNF.png</texturenofocus>
-                               <texturefocus border="5">MenuItemFO.png</texturefocus>
-                               <onleft>2</onleft>
-                               <onright>2</onright>
-                               <onup>5</onup>
-                               <ondown>5</ondown>
-                               <enable>!Window.IsVisible(ProfileSettings)</enable>
-                       </control>
-                       <control type="label">
-                               <left>10</left>
-                               <top>130</top>
-                               <width>240</width>
-                               <height>25</height>
-                               <font>font13</font>
-                               <textcolor>grey2</textcolor>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>305</label>
-                               <visible>System.HasLoginScreen</visible>
-                       </control>
-                       <control type="label">
-                               <left>10</left>
-                               <top>130</top>
-                               <width>240</width>
-                               <height>25</height>
-                               <font>font13</font>
-                               <textcolor>grey2</textcolor>
-                               <align>right</align>
-                               <aligny>center</aligny>
-                               <label>1223</label>
-                               <visible>!System.HasLoginScreen</visible>
+                               <top>82</top>
+                               <width>260</width>
+                               <height>541</height>
+                               <onleft>9010</onleft>
+                               <onright>9010</onright>
+                               <onup>9000</onup>
+                               <ondown>9000</ondown>
+                               <pagecontrol>-</pagecontrol>
+                               <scrolltime>300</scrolltime>
+                               <itemlayout height="54" width="260">
+                                       <control type="image">
+                                               <left>0</left>
+                                               <top>0</top>
+                                               <width>260</width>
+                                               <height>55</height>
+                                               <texture border="5">MenuItemNF.png</texture>
+                                       </control>
+                                       <control type="label">
+                                               <left>250</left>
+                                               <top>0</top>
+                                               <width>380</width>
+                                               <height>55</height>
+                                               <font>font24_title</font>
+                                               <textcolor>grey3</textcolor>
+                                               <align>right</align>
+                                               <aligny>center</aligny>
+                                               <label>$INFO[ListItem.Label]</label>
+                                       </control>
+                               </itemlayout>
+                               <focusedlayout height="54" width="260">
+                                       <control type="image">
+                                               <left>0</left>
+                                               <top>0</top>
+                                               <width>260</width>
+                                               <height>55</height>
+                                               <texture border="5">MenuItemFO.png</texture>
+                                               <animation effect="fade" start="100" end="30" time="100" condition="!Control.HasFocus(9000)">Conditional</animation>
+                                       </control>
+                                       <control type="label">
+                                               <left>250</left>
+                                               <top>0</top>
+                                               <width>380</width>
+                                               <height>55</height>
+                                               <font>font24_title</font>
+                                               <textcolor>white</textcolor>
+                                               <align>right</align>
+                                               <aligny>center</aligny>
+                                               <label>$INFO[ListItem.Label]</label>
+                                       </control>
+                               </focusedlayout>
+                               <content>
+                                       <item id="1">
+                                               <label>31420</label>
+                                               <onclick>noop</onclick>
+                                               <icon>-</icon>
+                                       </item>
+                                       <item id="2">
+                                               <label>13200</label>
+                                               <onclick>noop</onclick>
+                                               <icon>-</icon>
+                                       </item>
+                               </content>
                        </control>
-                       <control type="button" id="5"> 
-                               <description>Choose auto login user</description> 
-                               <left>10</left> 
-                               <top>161</top> 
-                               <width>250</width> 
-                               <height>72</height> 
-                               <textoffsety>8</textoffsety> 
-                               <label>33084</label> 
-                               <font>font24_title</font> 
-                               <align>right</align> 
-                               <aligny>top</aligny> 
-                               <texturenofocus border="5">MenuItemNF.png</texturenofocus> 
-                               <texturefocus border="5">MenuItemFO.png</texturefocus> 
-                               <onleft>2</onleft> 
-                               <onright>2</onright> 
-                               <onup>4</onup> 
-                               <ondown>4</ondown> 
-                               <visible>!System.HasLoginScreen</visible> 
-                               <enable>!Window.IsVisible(ProfileSettings) + !System.HasLoginScreen</enable> 
-                       </control> 
-                       <control type="button"> 
-                               <description>Choose auto login user (grayed out)</description> 
-                               <left>10</left> 
-                               <top>161</top> 
-                               <width>250</width> 
-                               <height>72</height> 
-                               <textoffsety>8</textoffsety> 
-                               <label>33084</label> 
-                               <font>font24_title</font> 
-                               <textcolor>grey2</textcolor> 
-                               <align>right</align> 
-                               <aligny>top</aligny> 
-                               <texturenofocus border="5">MenuItemNF.png</texturenofocus> 
-                               <texturefocus border="5">MenuItemFO.png</texturefocus> 
-                               <onleft>2</onleft> 
-                               <onright>2</onright> 
-                               <onup>4</onup> 
-                               <ondown>4</ondown> 
-                               <visible>System.HasLoginScreen</visible> 
-                               <enable>false</enable> 
-                       </control> 
-                       <control type="label"> 
-                               <left>47</left>
-                               <top>201</top> 
-                               <width>200</width> 
-                               <height>25</height> 
-                               <font>font13caps</font> 
-                               <textcolor>grey2</textcolor> 
-                               <align>right</align> 
-                               <aligny>center</aligny> 
-                               <label>$INFO[System.ProfileAutoLogin]</label> 
-                               <visible>!Control.HasFocus(5) + !System.HasLoginScreen</visible>
-                       </control> 
-                       <control type="label"> 
-                               <left>247</left> 
-                               <top>201</top> 
-                               <width>200</width> 
-                               <height>25</height> 
-                               <font>font13caps</font> 
-                               <textcolor>grey2</textcolor> 
-                               <align>right</align> 
-                               <aligny>center</aligny> 
-                               <label>$INFO[System.ProfileAutoLogin]</label> 
-                               <scroll>true</scroll> 
-                               <scrollspeed>30</scrollspeed> 
-                               <visible>Control.HasFocus(5) + !System.HasLoginScreen</visible>
-                       </control> 
                        <control type="group">
+                               <visible>Container(9000).Hasfocus(2)</visible>
                                <left>20</left>
                                <top>260</top>
                                <control type="image">
                        <control type="image">
                                <left>268</left>
                                <top>10</top>
-                               <width>804</width>
-                               <height>70</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
+                               <width>790</width>
+                               <height>52</height>
+                               <texture>dialogheader.png</texture>
                        </control>
                        <control type="label">
                                <description>header label</description>
                                <left>300</left>
                                <top>20</top>
-                               <width>740</width>
+                               <width>726</width>
                                <height>30</height>
-                               <font>font30_title</font>
-                               <label>$LOCALIZE[10034]</label>
-                               <align>left</align>
+                               <font>font16</font>
+                               <label>$LOCALIZE[13200] - $LOCALIZE[5]</label>
+                               <align>center</align>
                                <aligny>center</aligny>
                                <textcolor>white</textcolor>
                                <shadowcolor>black</shadowcolor>
                        </control>
-                       <control type="panel" id="2">
-                               <left>283</left>
-                               <top>70</top>
-                               <width>760</width>
-                               <height>540</height>
-                               <onleft>4</onleft>
-                               <onright>60</onright>
-                               <onup>53</onup>
-                               <ondown>53</ondown>
-                               <viewtype label="21371">list</viewtype>
-                               <pagecontrol>60</pagecontrol>
-                               <scrolltime>200</scrolltime>
-                               <itemlayout height="180" width="190">
-                                       <control type="image">
-                                               <left>1</left>
-                                               <top>0</top>
-                                               <width>188</width>
-                                               <height>145</height>
-                                               <bordertexture border="5">button-nofocus.png</bordertexture>
-                                               <bordersize>5</bordersize>
-                                               <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
+                       <control type="group" id="9010">
+                               <control type="grouplist" id="9001">
+                                       <visible>Container(9000).Hasfocus(1)</visible>
+                                       <left>290</left>
+                                       <top>60</top>
+                                       <width>750</width>
+                                       <height>440</height>
+                                       <itemgap>-1</itemgap>
+                                       <pagecontrol>60</pagecontrol>
+                                       <onleft>9000</onleft>
+                                       <onright>9000</onright>
+                                       <onup>9001</onup>
+                                       <ondown>9001</ondown>
+                                       <control type="radiobutton" id="4">
+                                               <description>enable login screen</description>
+                                               <width>750</width>
+                                               <height>40</height>
+                                               <font>font13</font>
+                                               <label>20096</label>
+                                               <textcolor>grey2</textcolor>
+                                               <focusedcolor>white</focusedcolor>
+                                               <texturefocus>MenuItemFO.png</texturefocus>
+                                               <texturenofocus>MenuItemNF.png</texturenofocus>
                                        </control>
-                                       <control type="label">
-                                               <left>94</left>
-                                               <top>145</top>
-                                               <width>178</width>
-                                               <height>25</height>
-                                               <font>font11</font>
+                                       <control type="button" id="5">
+                                               <description>auto login</description>
+                                               <width>750</width>
+                                               <height>40</height>
+                                               <font>font13</font>
+                                               <label>33084</label>
+                                               <label2>$INFO[System.ProfileAutoLogin]</label2>
                                                <textcolor>grey2</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <info>ListItem.Label</info>
+                                               <focusedcolor>white</focusedcolor>
+                                               <texturefocus>MenuItemFO.png</texturefocus>
+                                               <texturenofocus>MenuItemNF.png</texturenofocus>
+                                               <enable>!System.HasLoginScreen</enable>
                                        </control>
-                               </itemlayout>
-                               <focusedlayout height="180" width="190">
+                               </control>
+                               <control type="group">
+                                       <visible>Container(9000).Hasfocus(1)</visible>
+                                       <left>290</left>
+                                       <top>500</top>
+                                       <width>750</width>
+                                       <height>40</height>
                                        <control type="image">
-                                               <left>1</left>
-                                               <top>0</top>
-                                               <width>188</width>
-                                               <height>145</height>
-                                               <bordertexture border="5">folder-focus.png</bordertexture>
-                                               <bordersize>5</bordersize>
-                                               <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
+                                               <description>separator image</description>
+                                               <left>0</left>
+                                               <top>25</top>
+                                               <width>750</width>
+                                               <height>2</height>
+                                               <texture>separator2.png</texture>
+                                               <colordiffuse>40FFFFFF</colordiffuse>
                                        </control>
-                                       <control type="label">
-                                               <left>94</left>
-                                               <top>145</top>
-                                               <width>178</width>
-                                               <height>25</height>
-                                               <font>font11</font>
+                                       <control type="textbox">
+                                               <description>description area</description>
+                                               <left>7</left>
+                                               <top>30</top>
+                                               <width>736</width>
+                                               <height>85</height>
+                                               <font>font12</font>
+                                               <label>$LOCALIZE[31422]</label>
+                                               <align>justify</align>
                                                <textcolor>white</textcolor>
-                                               <selectedcolor>selected</selectedcolor>
-                                               <align>center</align>
-                                               <aligny>center</aligny>
-                                               <info>ListItem.Label</info>
+                                               <autoscroll time="3000" delay="4000" repeat="5000">true</autoscroll>
+                                               <visible>Control.Hasfocus(4)</visible>
                                        </control>
-                               </focusedlayout>
-                       </control>
-                       <control type="scrollbar" id="60">
-                               <left>1060</left>
-                               <top>60</top>
-                               <width>25</width>
-                               <height>530</height>
-                               <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
-                               <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
-                               <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
-                               <textureslidernib>ScrollBarNib.png</textureslidernib>
-                               <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
-                               <onleft>2</onleft>
-                               <onright>4</onright>
-                               <showonepage>false</showonepage>
-                               <orientation>vertical</orientation>
+                                       <control type="textbox">
+                                               <description>description area</description>
+                                               <left>7</left>
+                                               <top>30</top>
+                                               <width>736</width>
+                                               <height>85</height>
+                                               <font>font12</font>
+                                               <label>$LOCALIZE[31423]</label>
+                                               <align>justify</align>
+                                               <textcolor>white</textcolor>
+                                               <autoscroll time="3000" delay="4000" repeat="5000">true</autoscroll>
+                                               <visible>Control.Hasfocus(5)</visible>
+                                       </control>
+                               </control>
+                               <control type="panel" id="2">
+                                       <visible>Container(9000).Hasfocus(2)</visible>
+                                       <left>290</left>
+                                       <top>72</top>
+                                       <width>760</width>
+                                       <height>540</height>
+                                       <onleft>9000</onleft>
+                                       <onright>60</onright>
+                                       <onup>9010</onup>
+                                       <ondown>9010</ondown>
+                                       <viewtype label="21371">list</viewtype>
+                                       <pagecontrol>60</pagecontrol>
+                                       <scrolltime>200</scrolltime>
+                                       <itemlayout height="180" width="190">
+                                               <control type="image">
+                                                       <left>1</left>
+                                                       <top>0</top>
+                                                       <width>188</width>
+                                                       <height>145</height>
+                                                       <bordertexture border="5">button-nofocus.png</bordertexture>
+                                                       <bordersize>5</bordersize>
+                                                       <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <left>94</left>
+                                                       <top>145</top>
+                                                       <width>178</width>
+                                                       <height>25</height>
+                                                       <font>font11</font>
+                                                       <textcolor>grey2</textcolor>
+                                                       <selectedcolor>selected</selectedcolor>
+                                                       <align>center</align>
+                                                       <aligny>center</aligny>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                       </itemlayout>
+                                       <focusedlayout height="180" width="190">
+                                               <control type="image">
+                                                       <left>1</left>
+                                                       <top>0</top>
+                                                       <width>188</width>
+                                                       <height>145</height>
+                                                       <bordertexture border="5">folder-focus.png</bordertexture>
+                                                       <bordersize>5</bordersize>
+                                                       <texture fallback="unknown-user.png">$INFO[Listitem.Icon]</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <left>94</left>
+                                                       <top>145</top>
+                                                       <width>178</width>
+                                                       <height>25</height>
+                                                       <font>font11</font>
+                                                       <textcolor>white</textcolor>
+                                                       <selectedcolor>selected</selectedcolor>
+                                                       <align>center</align>
+                                                       <aligny>center</aligny>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                       </focusedlayout>
+                               </control>
+                               <control type="scrollbar" id="60">
+                                       <left>1060</left>
+                                       <top>60</top>
+                                       <width>25</width>
+                                       <height>530</height>
+                                       <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
+                                       <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
+                                       <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
+                                       <textureslidernib>ScrollBarNib.png</textureslidernib>
+                                       <textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
+                                       <onleft>2</onleft>
+                                       <onright>9000</onright>
+                                       <showonepage>false</showonepage>
+                                       <orientation>vertical</orientation>
+                               </control>
                        </control>
                </control>
                <include>CommonNowPlaying</include>
index d8e4079..b381efd 100644 (file)
                        <control type="image">
                                <left>268</left>
                                <top>10</top>
-                               <width>804</width>
-                               <height>100</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
+                               <width>790</width>
+                               <height>52</height>
+                               <texture>dialogheader.png</texture>
                        </control>
                        <control type="label" id="40">
                                <description>header label</description>
                                <left>300</left>
                                <top>20</top>
-                               <width>740</width>
+                               <width>726</width>
                                <height>30</height>
                                <font>font16</font>
                                <label>-</label>
-                               <align>left</align>
+                               <align>center</align>
                                <aligny>center</aligny>
                                <textcolor>white</textcolor>
                                <shadowcolor>black</shadowcolor>
index c847930..36017d2 100644 (file)
                        <control type="image">
                                <left>268</left>
                                <top>10</top>
-                               <width>804</width>
-                               <height>100</height>
-                               <aspectratio>stretch</aspectratio>
-                               <texture>GlassTitleBar.png</texture>
+                               <width>790</width>
+                               <height>52</height>
+                               <texture>dialogheader.png</texture>
                        </control>
                        <control type="label">
                                <description>header label</description>
                                <left>300</left>
                                <top>20</top>
-                               <width>740</width>
+                               <width>726</width>
                                <height>30</height>
                                <font>font16</font>
                                <label>$LOCALIZE[20077] - $INFO[Container(9000).ListItem.Label]</label>
-                               <align>left</align>
+                               <align>center</align>
                                <aligny>center</aligny>
                                <textcolor>white</textcolor>
                                <shadowcolor>black</shadowcolor>
index e0c94d8..0f17187 100644 (file)
                </control>
                <control type="button" id="410">
                        <description>Fake button for mouse control</description>
-                       <left>400r</left>
-                       <top>350r</top>
+                       <right>145</right>
+                       <bottom>60</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>250</height>
                        <label>-</label>
                        <font>-</font>
                        <texturenofocus>-</texturenofocus>
                        <animation effect="fade" time="200">VisibleChange</animation>
                        <animation effect="slide" start="0,0" end="0,80" time="0" condition="![VideoPlayer.HasSubtitles + VideoPlayer.SubtitlesEnabled]">Conditional</animation>
                        <animation effect="slide" start="0,0" end="0,40" time="0" condition="!VideoPlayer.HasSubtitles">Conditional</animation>
-                       <left>400r</left>
-                       <top>350r</top>
+                       <right>145</right>
+                       <bottom>45</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>260</height>
                        <itemgap>0</itemgap>
                        <onleft>400</onleft>
                        <onright>400</onright>
                <!-- STEREOSCOPIC 3D !LiveTV -->
                <control type="button" id="520">
                        <description>Fake button for mouse control</description>
-                       <left>455r</left>
-                       <top>350r</top>
+                       <right>200</right>
+                       <bottom>60</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>210</height>
                        <label>-</label>
                        <font>-</font>
                        <texturenofocus>-</texturenofocus>
                <control type="grouplist" id="500">
                        <visible>VideoPlayer.IsStereoscopic + ![Window.IsVisible(SliderDialog) | Window.IsVisible(OSDVideoSettings) | Window.IsVisible(OSDAudioSettings) | Window.IsVisible(VideoBookmarks)]</visible>
                        <animation effect="fade" time="200">VisibleChange</animation>
-                       <left>455r</left>
-                       <top>350r</top>
+                       <right>200</right>
+                       <bottom>45</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>220</height>
                        <itemgap>0</itemgap>
                        <onleft>500</onleft>
                        <onright>500</onright>
                <!-- STEREOSCOPIC 3D LiveTV -->
                <control type="button" id="570">
                        <description>Fake button for mouse control</description>
-                       <left>340r</left>
-                       <top>350r</top>
+                       <right>145</right>
+                       <bottom>60</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>210</height>
                        <label>-</label>
                        <font>-</font>
                        <texturenofocus>-</texturenofocus>
                <control type="grouplist" id="550">
                        <visible>videoplayer.isstereoscopic + ![Window.IsVisible(SliderDialog) | Window.IsVisible(OSDVideoSettings) | Window.IsVisible(OSDAudioSettings) | Window.IsVisible(VideoBookmarks) | Window.IsVisible(PVROSDChannels) | Window.IsVisible(PVROSDGuide)]</visible>
                        <animation effect="fade" time="200">VisibleChange</animation>
-                       <left>340r</left>
-                       <top>350r</top>
+                       <right>145</right>
+                       <bottom>45</bottom>
                        <width>256</width>
-                       <height>300</height>
+                       <height>220</height>
                        <itemgap>0</itemgap>
                        <onleft>550</onleft>
                        <onright>550</onright>
                        </control>
                </control>
        </controls>
-</window>
+</window>
\ No newline at end of file
index 94110a3..6e2aa3a 100644 (file)
                        <control type="image">
                                <description>separator image</description>
                                <left>80</left>
-                               <top>111</top>
+                               <top>101</top>
                                <width>1100</width>
                                <height>1</height>
                                <colordiffuse>88FFFFFF</colordiffuse>
                        <control type="epggrid" id="10">
                                <description>EPG Grid</description>
                                <left>80</left>
-                               <top>81</top>
-                               <width>1120</width>
-                               <height>555</height>
+                               <top>71</top>
+                               <width>1135</width>
+                               <height>419</height>
                                <pagecontrol>10</pagecontrol>
                                <scrolltime>350</scrolltime>
                                <timeblocks>40</timeblocks>
                                                <label>$INFO[ListItem.Label]</label>
                                        </control>
                                </rulerlayout>
-                               <channellayout height="52" width="280">
+                               <channellayout height="48" width="280">
                                        <control type="image">
                                                <left>0</left>
                                                <top>0</top>
                                                <width>270</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <texture border="2">MenuItemNF.png</texture>
                                                <include>VisibleFadeEffect</include>
                                        </control>
                                                <left>94</left>
                                                <top>0</top>
                                                <width>160</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <font>special12</font>
                                                <aligny>center</aligny>
                                                <selectedcolor>selected</selectedcolor>
                                                <label>$INFO[ListItem.ChannelName]</label>
                                        </control>
                                </channellayout>
-                               <focusedchannellayout height="52" width="280">
+                               <focusedchannellayout height="48" width="280">
                                        <control type="image">
                                                <left>0</left>
                                                <top>0</top>
                                                <width>270</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <texture border="2">MenuItemNF.png</texture>
                                                <visible>!Control.HasFocus(10)</visible>
                                                <include>VisibleFadeEffect</include>
                                                <left>0</left>
                                                <top>0</top>
                                                <width>270</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <texture border="2">MenuItemFO.png</texture>
                                                <visible>Control.HasFocus(10)</visible>
                                                <include>VisibleFadeEffect</include>
                                                <left>94</left>
                                                <top>0</top>
                                                <width>160</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <font>special12</font>
                                                <aligny>center</aligny>
                                                <selectedcolor>selected</selectedcolor>
                                                <label>$INFO[ListItem.ChannelName]</label>
                                        </control>
                                </focusedchannellayout>
-                               <itemlayout height="52" width="40">
+                               <itemlayout height="48" width="40">
                                        <control type="image" id="2">
                                                <width>40</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <left>0</left>
                                                <top>0</top>
                                                <aspectratio>stretch</aspectratio>
                                                <info>ListItem.Label</info>
                                        </control>
                                        <control type="image">
-                                               <left>5</left>
+                                               <left>6</left>
                                                <top>28</top>
-                                               <width>30</width>
-                                               <height>20</height>
+                                               <width>24</width>
+                                               <height>16</height>
                                                <texture>PVR-IsRecording.png</texture>
                                                <visible>ListItem.IsRecording</visible>
                                        </control>
                                        <control type="image">
-                                               <left>5</left>
+                                               <left>6</left>
                                                <top>28</top>
-                                               <width>20</width>
-                                               <height>20</height>
+                                               <width>16</width>
+                                               <height>16</height>
                                                <texture>PVR-HasTimer.png</texture>
                                                <visible>ListItem.HasTimer + !ListItem.IsRecording</visible>
                                        </control>
                                </itemlayout>
-                               <focusedlayout height="52" width="40">
+                               <focusedlayout height="48" width="40">
                                        <control type="image" id="14">
                                                <width>40</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <left>0</left>
                                                <top>0</top>
                                                <texture border="5">folder-focus.png</texture>
                                        </control>
                                        <control type="image" id="2">
                                                <width>40</width>
-                                               <height>52</height>
+                                               <height>48</height>
                                                <left>0</left>
                                                <top>0</top>
                                                <aspectratio>stretch</aspectratio>
                                                <info>ListItem.Label</info>
                                        </control>
                                        <control type="image">
-                                               <left>5</left>
+                                               <left>6</left>
                                                <top>28</top>
-                                               <width>30</width>
-                                               <height>20</height>
+                                               <width>24</width>
+                                               <height>16</height>
                                                <texture>PVR-IsRecording.png</texture>
                                                <visible>ListItem.IsRecording</visible>
                                        </control>
                                        <control type="image">
-                                               <left>5</left>
+                                               <left>6</left>
                                                <top>28</top>
-                                               <width>20</width>
-                                               <height>20</height>
+                                               <width>16</width>
+                                               <height>16</height>
                                                <texture>PVR-HasTimer.png</texture>
                                                <visible>ListItem.HasTimer + !ListItem.IsRecording</visible>
                                        </control>
                                </focusedlayout>
                        </control>
+                       <control type="group">
+                               <visible>!IsEmpty(ListItem.Label)</visible>
+                               <left>80</left>
+                               <top>508</top>
+                               <control type="image">
+                                       <left>62</left>
+                                       <top>6</top>
+                                       <width>130</width>
+                                       <height>130</height>
+                                       <texture background="true">$INFO[ListItem.Icon]</texture>
+                                       <aspectratio align="center" aligny="top">keep</aspectratio>
+                               </control>
+                               <control type="label">
+                                       <left>280</left>
+                                       <top>0</top>
+                                       <width>840</width>
+                                       <height>20</height>
+                                       <label>[B]$INFO[ListItem.Label][/B]</label>
+                                       <font>font13</font>
+                                       <textcolor>white</textcolor>
+                               </control>
+                               <control type="label">
+                                       <left>280</left>
+                                       <top>25</top>
+                                       <width>840</width>
+                                       <height>20</height>
+                                       <label>$INFO[ListItem.StartTime]$INFO[ListItem.EndTime, - ]$INFO[ListItem.Genre, • ]</label>
+                                       <font>font12</font>
+                                       <textcolor>grey</textcolor>
+                               </control>
+                               <control type="textbox">
+                                       <description>Plot value</description>
+                                       <left>280</left>
+                                       <top>55</top>
+                                       <width>840</width>
+                                       <height>65</height>
+                                       <font>font12</font>
+                                       <align>justify</align>
+                                       <textcolor>grey</textcolor>
+                                       <autoscroll delay="10000" time="3000" repeat="6000">true</autoscroll>
+                                       <label>$INFO[ListItem.Plot]</label>
+                               </control>
+                       </control>
                </control>
        </include>
 
index d191930..bd5e519 100644 (file)
@@ -20,8 +20,6 @@
                <disabledcolor>grey3</disabledcolor>
        </default>
        <default type="button">
-               <left>300</left>
-               <top>200</top>
                <width>300</width>
                <height>42</height>
                <texturefocus border="5">button-focus.png</texturefocus>
index 37b5478..cb4438a 100644 (file)
                <value condition="Window.IsActive(videolibrary) + !StringCompare(Playlist.Length(video),0)">ActivateWindow(videoplaylist)</value>
                <value condition="[Window.IsActive(musiclibrary) | Window.IsActive(musicfiles)] + !StringCompare(Playlist.Length(music),0)">ActivateWindow(musicplaylist)</value>
        </variable>
+       <variable name="SelectBack">
+               <value condition="![Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)]">DialogBack.png</value>
+               <value condition="Window.IsVisible(FullscreenVideo) | Window.IsVisible(Visualisation)">DialogBack2.png</value>
+       </variable>
 
        <include name="BehindDialogFadeOut">
                <control type="image">
index 1fd1b0c..5b216ff 100644 (file)
                                        <left>268</left>
                                        <top>10</top>
                                        <width>804</width>
-                                       <height>100</height>
-                                       <aspectratio>stretch</aspectratio>
-                                       <texture>GlassTitleBar.png</texture>
+                                       <height>52</height>
+                                       <texture>dialogheader.png</texture>
                                </control>
                                <control type="label">
                                        <description>header label Finished Searching</description>
                                        <height>30</height>
                                        <font>font16</font>
                                        <label>$INFO[Container(9000).ListItem.Label]</label>
-                                       <align>left</align>
+                                       <align>center</align>
                                        <aligny>center</aligny>
                                        <textcolor>white</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                        <height>30</height>
                                        <font>font16</font>
                                        <label>$INFO[Control.GetLabel(190)] $INFO[Control.GetLabel(191)]</label>
-                                       <align>left</align>
+                                       <align>center</align>
                                        <aligny>center</aligny>
                                        <textcolor>blue</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                        <onright>101</onright>
                                </control>
                                <control type="group" id="101">
+                                       <top>4</top>
                                        <control type="group" id="119">
                                                <left>0</left>
                                                <top>0</top>
index 0e19b38..055c31d 100644 (file)
@@ -7,7 +7,7 @@
                        <control type="label">
                                <description>header label</description>
                                <left>20</left>
-                               <top>13</top>
+                               <top>15</top>
                                <width>610</width>
                                <height>30</height>
                                <font>font13_title</font>
                        <control type="label">
                                <animation effect="slide" start="0,0" end="-90,0" time="0" condition="system.getbool(input.enablemouse)">Conditional</animation>
                                <description>number of files/pages</description>
-                               <right>660</right>
+                               <right>40</right>
                                <top>627</top>
                                <width>570</width>
                                <font>font12</font>
index 8477968..ff5a5e1 100644 (file)
@@ -18,7 +18,7 @@
                        <control type="label">
                                <description>header label</description>
                                <left>20</left>
-                               <top>13</top>
+                               <top>15</top>
                                <width>610</width>
                                <height>30</height>
                                <font>font13_title</font>
@@ -80,7 +80,7 @@
                                                <label>[COLOR=grey2]$INFO[Window.Property(36Hour.1.TemperatureHeading)][CR][/COLOR]$INFO[Window.Property(36Hour.1.Temperature),[B] ,[/B]]</label>
                                        </control>
                                        <control type="label">
-                                               <right>590</right>
+                                               <right>90</right>
                                                <top>60</top>
                                                <width>390</width>
                                                <height>20</height>
                                                <label>[COLOR=grey2]$INFO[Window.Property(36Hour.2.TemperatureHeading)][CR][/COLOR]$INFO[Window.Property(36Hour.2.Temperature),[B] ,[/B]]</label>
                                        </control>
                                        <control type="label">
-                                               <right>590</right>
+                                               <right>90</right>
                                                <top>60</top>
                                                <width>390</width>
                                                <height>20</height>
                                                <label>[COLOR=grey2]$INFO[Window.Property(36Hour.3.TemperatureHeading)][CR][/COLOR]$INFO[Window.Property(36Hour.3.Temperature),[B] ,[/B]]</label>
                                        </control>
                                        <control type="label">
-                                               <right>590</right>
+                                               <right>90</right>
                                                <top>60</top>
                                                <width>390</width>
                                                <height>20</height>
index 58b62c8..86fb653 100644 (file)
@@ -7,7 +7,7 @@
                        <control type="label">
                                <description>header label</description>
                                <left>20</left>
-                               <top>13</top>
+                               <top>15</top>
                                <width>610</width>
                                <height>30</height>
                                <font>font13_title</font>
                        <control type="label">
                                <animation effect="slide" start="0,0" end="-90,0" time="0" condition="system.getbool(input.enablemouse)">Conditional</animation>
                                <description>number of files/pages</description>
-                               <right>660</right>
+                               <right>40</right>
                                <top>627</top>
                                <width>570</width>
                                <font>font12</font>
index debb607..f49e741 100644 (file)
@@ -18,7 +18,7 @@
                        <control type="label">
                                <description>header label</description>
                                <left>20</left>
-                               <top>13</top>
+                               <top>15</top>
                                <width>610</width>
                                <height>30</height>
                                <font>font13_title</font>
index 4d3970b..750a39e 100644 (file)
@@ -18,7 +18,7 @@
                        <control type="label">
                                <description>header label</description>
                                <left>20</left>
-                               <top>13</top>
+                               <top>15</top>
                                <width>610</width>
                                <height>30</height>
                                <font>font13_title</font>
index 99e3b74..37223f0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="skin.confluence"
-  version="2.2.4"
+  version="2.2.8"
   name="Confluence"
   provider-name="Jezz_X, Team XBMC">
   <requires>
@@ -16,7 +16,7 @@
   </extension>
   <extension point="xbmc.addon.metadata">
     <summary lang="af">Confluence oortreksel deur Jezz_X. (XBMC se bestek oortreksel)</summary>
-    <summary lang="ar">غÙ\84اÙ\81 Ø­Ø´Ø¯ Ù\85Ù\86 Jezz_X. (Ù\87Ù\88 Ø§Ù\84غÙ\84اÙ\81 Ø§Ù\84اÙ\81تراضÙ\8a Ù\84Ù\80XBMC)</summary>
+    <summary lang="ar">جÙ\84د "Ù\83Ù\88Ù\86Ù\81Ù\84Ù\8aÙ\88Ù\86س" Ù\85Ù\86 ØµÙ\86ع Jezz_x. (اÙ\84جÙ\84د Ø§Ù\84Ù\85بدأÙ\89 Ù\84برÙ\86اÙ\85ج Ø¥Ù\83س Ø¨Ù\89 Ø¥Ù\85 Ø³Ù\89)</summary>
     <summary lang="be">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="bg">Облик от Jezz_X. (стандартния за XBMC)</summary>
     <summary lang="ca">Pell Confluence, per Jezz_X. (Pell per defecte de l'XBMC)</summary>
     <summary lang="en_US">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="es">Confluence skin por Jezz_X. (skin por defecto)</summary>
     <summary lang="es_AR">Confluence skin por Jezz_X. (skin por defecto de XBMC)</summary>
-    <summary lang="es_MX">Skin confluende por Jezz_X. (skin por defecto de XMC)</summary>
+    <summary lang="es_MX">Skin confluende por Jezz_X. (skin por defecto de XBMC)</summary>
+    <summary lang="es_VE">Tema "Confluence" por Jezz_X (Tema predeterminado de XBMC)</summary>
     <summary lang="et">Confluence rüü autorilt Jezz_X. (XBMC vaikerüü)</summary>
     <summary lang="fi">Confluence-ulkoasu Jezz_X:ltä. (XBMC:n oletus ulkoasu)</summary>
     <summary lang="fil">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="fo">Confluence útsjónd av Jezz_X. (XBMC's vanliga útsjónd)</summary>
     <summary lang="fr">Thème Confluence par Jezz_X. (thème par défaut)</summary>
+    <summary lang="fr_CA">Thème Confluence par Jezz_X. (thème par défaut)</summary>
     <summary lang="gl">Pel Confluence por Jezz_Z. (Pel predeterminada de XBMC)</summary>
     <summary lang="he">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="hr">Confluence presvlaka autora Jezz_X. (uobičajena XBMC presvlaka)</summary>
@@ -49,7 +51,7 @@
     <summary lang="lv">Confluence āda no Jeez_X. (XBMC pamatāda)</summary>
     <summary lang="mk">Confluence skin by Jezz_X. (XBMC's default skin)</summary>
     <summary lang="ms">Penyatuan, kulit daripada Jezz_X. (Kulit lalai XBMC)</summary>
-    <summary lang="nl">Confluence skin door Jezz_X</summary>
+    <summary lang="nl">Confluence skin door Jezz_X. (XBMC's standaard skin)</summary>
     <summary lang="no">Confluence-skall av Jezz_X. (XBMCs standardskall)</summary>
     <summary lang="pl">Confluence autorstwa Jezz_X</summary>
     <summary lang="pt">Tema Confluence desenvolvido por Jezz_X. (Tema padrão do XBMC)</summary>
@@ -70,7 +72,7 @@
     <summary lang="zh">Jezz_X 开发的 Confluence 皮肤(XBMC 的默认皮肤)。</summary>
     <summary lang="zh_TW">Jezz_X 製作的佈景主題(XBMC的預設佈景主題)</summary>
     <description lang="af">Confluence is die bestek oortreksel vir XBMC 9.11 en op. Dit is 'n kombinasie van konsepte van 'n klomp gewilde oortreksels, en 'n poging om hulle goeie idees te omvat en te integreer in 'n oortreksel wat maklik behoort te wees vir eerste keer XBMC gebruikers om te verstaan en te gebruik.</description>
-    <description lang="ar">حشد هو الغلاف الافتراضي لـXBMC 9.11 و ما فوق. إنه مزيج من مفاهيم من أغلفة شعبية, و يحاول ضم و مزج إفكارهم الجيدة في غلاف يسهل فهمه و استخدامه لمستخدم XBMC الجديد.</description>
+    <description lang="ar">"كونفليونس" هو الجلد المبدأى لبرنامج إكس بى إم سى اﻹصدار 9.11 وما فوق. هو خلط بين اشهر اﻷجلده الاخرى معاً ومحاوله لتبنى ودمج افكارهم للخروج بِنِتَاج يُفترض به ان يكون سهل اﻹستيعاب بمجرد النظر لمستخدمى إكس بى إم سى المبتدئين.</description>
     <description lang="be">Confluence is the default skin for XBMC 9.11 and above. It is a combination of concepts from many popular skins, and attempts to embrace and integrate their good ideas into a skin that should be easy for first time XBMC users to understand and use.</description>
     <description lang="bg">Confluence е стандартният облик на XBMC 9.11 и по-новите версии. Представлява смесица от концепциите на много от популярните облици. Целта е да се интегрират тези добри идеи в подходящ и удобен вид за хора, които се сблъскват за първи път с XBMC.</description>
     <description lang="ca">Confluence és la pell per defecte de l'XBMC 9.11 i superiors. És una combinació de conceptes de moltes pells populars que intenta adoptar i integrar les seves bones idees en una aparença que sigui senzilla d'entendre i utilitzar per els nous usuaris d'XBMC.</description>
     <description lang="es">Confluence es la skin por defecto de XBMC 9.11 y posteriores. Es una combinación de conceptos de muchas skins populares, e intenta abarcar e integrar lo mejor de ellas en una skin que sea sencilla de entender y utilizar para los nuevos usuarios de XBMC.</description>
     <description lang="es_AR">Confluence es el skin por defecto de XBMC 9.11 y posteriores. Es una combinación de conceptos de muchos skins populares, e intenta abarcar e integrar lo mejor de ellos en un skin que sea sencillo de entender y utilizar para los nuevos usuarios de XBMC.</description>
     <description lang="es_MX">Confluence es el skin por defecto para XBMC 9.11 en adelante. Es una combinación de conceptos de varias skins populares, e intenta adoptar e integrar sus buenas ideas en un skin que debería ser fá de entender y usar para quienes usen XBMC por primera vez.</description>
-    <description lang="et">Confluence on vaikerüü XBMC-le alates versioonist 9.11. Confluence on paljude populaarsete rüüde kombineerimise tulemus, mis üritab omavahel tööle panna teiste rüüde parimaid lahendusi, et saavutada rüü, mis oleks esmakasutajale ühtmoodi selge ja kerge kasutada.</description>
-    <description lang="fi">Confluence on oletus ulkoasu XBMC:n versiosta 9.11 lähtien. Se on yhdistelmä useiden suosittujen ulkoasujen konsepteista, ja yritys omaksua ja integroida heidän hyvät ideat ulkoasuun, jonka pitäisi olla helppokäyttöinen ja -tajuinen kaikille XBMC:n käyttäjille.</description>
+    <description lang="es_VE">"Confluence" es el tema predeterminado para XBMC 9.11 y más nuevos. Es una combinación de conceptos de los temas más populares e intenta acoger e integrar sus buenas ideas en un tema que debería ser fácil de entender y usar para usuarios que utilizan por primera vez XBMC.</description>
+    <description lang="et">Confluence on XBMC vaikerüü alates versioonist 9.11. Confluence on paljude populaarsete rüüde kombinatsioon, üritades omavahel siduda nende parimaid lahendusi, et saavutada esmakasutajale selget ja kergelt kasutatavat tulemust.</description>
+    <description lang="fi">Confluence on oletusulkoasu XBMC:n versiosta 9.11 lähtien. Se on yhdistelmä useiden suosittujen ulkoasujen konsepteista, ja yritys omaksua ja integroida heidän hyvät ideat ulkoasuun, jonka pitäisi olla helppokäyttöinen ja -tajuinen kaikille XBMC:n käyttäjille.</description>
     <description lang="fil">Ang Confluence ay ang default skin ng XBMC 9.11 at pataas. Ito ay kombinasyon ng mga konsepto at pagsubok paghaluin ang mga mahusay na ideya mula sa maraming popular na skins para ito ay maging madali sa mga unang beses gumamit ng XBMC.</description>
     <description lang="fo">Confluence er vanliga útsjóndin, sum er brúkt í XBMC síðan útg. 9.11. Hetta er ein samansjóðan av fleiri hugtøkum. Ætlanin er at útsjóndin skal lætta um móttøku og nýtslu av XBMC fyri nýggjar brúkarar.</description>
     <description lang="fr">Confluence est le thème par défaut à partir d'XBMC 9.11. Reprenant les concepts issus de plusieurs thèmes populaires, il est une tentative d'inclusion et d'intégration des meilleures idées afin d'en rendre la compréhension et l'utilisation faciles y compris par des débutants.</description>
+    <description lang="fr_CA">Confluence est le thème par défaut à partir d'XBMC 9.11. Reprenant les concepts issus de plusieurs thèmes populaires, il est une tentative d'inclusion et d'intégration des meilleures idées afin d'en rendre la compréhension et l'utilisation faciles y compris par des débutants.</description>
     <description lang="gl">Confluence é a pel predeterminada para XBMC 9.11 e posteriores. É unha combinación de conceptos de algunhas peles populares, e tenta abranguer e integrar  as súas mellores ideas nunha pel que sexa fácil de entender e utilizar para as usuarias que utilizan por primeira vez XBMC.</description>
     <description lang="he">Confluence הוא סקין ברירת המחדל של XBMC 9.11 ומעלה. זהו צירוף של קונספטים מסקינים פופולריים רבים, וניסיונות לאמץ ולסכם את הרעיונות הטובים שלהם לתוך סקין שיהיה פשוט להבנה ולשימוש עבור משתמשי XBMC חדשים.</description>
-    <description lang="hr">Confluence je uobičajena presvlaka za XBMC 9.11 naviše. To je mješavina koncepta iz mnogih drugih popularnih presvlaka, pokušaj da se objedine njihove dobre osobine u presvlaku i da budu lagane za upotrebu i razumljive novim XMBC korisnicima.</description>
+    <description lang="hr">Confluence je uobičajena presvlaka za XBMC 9.11 naviše. To je mješavina koncepta iz mnogih drugih popularnih presvlaka, pokušaj da se objedine njihove dobre osobine u presvlaku i da budu lagane za upotrebu i razumljive novim XBMC korisnicima.</description>
     <description lang="hu">A Confluence az alapértelmezett felszín az XBMC-hez a 9.11-es verziótól kezdődően. Merít sok sok népszerű felszín elképzeléséből, megpróbálva vegyíteni a jó ötleteket úgy, hogy az könnyen kezelhető legyen az XBMC-vel először találkozóknak is.</description>
     <description lang="id">Confluence merupakan skin bawaan untuk XBMC 9.11 dan selanjutnya. Merupakan kombinasi konsep dari beberapa skin populer, dan berusaha untuk merangkul dan menyatukan ide bagus mereka ke sebuah skin yang mudah dipakai dan dipahami oleh pengguna XBMC pertama kali.</description>
     <description lang="is">Confluence er sjálfgefið útlit XBMC 9.11 og nýrra. Það er samsetning hugmynda frá mörgum vinsælum útlitum og er tilraun til að fanga og innlima þær góðu hugmyndir í útlit þar sem hugmyndin er að skuli vera einfalt fyrir fyrir nýja XBMC notendur að skilja og nota</description>
     <description lang="zh">在 XBMC 9.11 之后的版本中 Confluence 是默认皮肤。它集合了许多流行皮肤的创意,力求把这些优点融合到一个皮肤中,使得首次使用 XBMC 的用户能更容易上手。</description>
     <description lang="zh_TW">Confluence 是從 XBMC 9.11 開始預設的佈景主題。它結合了許多受歡迎的佈景主題的概念,且試圖包含並整合它們的優點,使第一次使用 XBMC 的使用者可以簡單地上手。</description>
     <disclaimer lang="af">Confluence is die bestek oortreksel vir XBMC, verwydering mag probleme veroorsaak</disclaimer>
-    <disclaimer lang="ar">حشد هو الغلاف الافتراضي لـXBMC, إزلته قد تسبب مشاكل</disclaimer>
+    <disclaimer lang="ar">"كونفليونس" هو الجلد المبدأى لبرنامج إكس بى إم سى وإزالته قد تسبب مشاكل</disclaimer>
     <disclaimer lang="be">Confluence is the default skin for XBMC, removing it may cause issues</disclaimer>
     <disclaimer lang="bg">Confluence е стандартният облик на XBMC. Премахването му може да предизвика проблеми</disclaimer>
     <disclaimer lang="ca">Confluence és la pell per defecte de l'XBMC, la seva eliminació pot causar problemes.</disclaimer>
     <disclaimer lang="es">Confluence es la skin por defecto de XBMC. Borrarla puede causar problemas</disclaimer>
     <disclaimer lang="es_AR">Confluence es el skin por defecto de XBMC. Borrarlo puede causar problemas</disclaimer>
     <disclaimer lang="es_MX">Confluence es el skin por defecto para XBMC, removerlo podría causar problemas</disclaimer>
+    <disclaimer lang="es_VE">"Confluence" es el tema predeterminado para XBMC, eliminarlo puedes causar problemas</disclaimer>
     <disclaimer lang="et">Confluence on XBMC vaikerüü. Selle eemaldamine võib põhjustada ootamatusi.</disclaimer>
-    <disclaimer lang="fi">Confluence on XBMC:n oletus ulkoasu, sen poistaminen saattaa aiheuttaa ongelmia</disclaimer>
+    <disclaimer lang="fi">Confluence on XBMC:n oletusulkoasu, sen poistaminen saattaa aiheuttaa ongelmia</disclaimer>
     <disclaimer lang="fil">Ang Confluence ay ang default skin ng XBMC. Ang pagtanggal nito ay maaring magdulot ng problema</disclaimer>
     <disclaimer lang="fo">Confluence er vanliga útsjónding brúkt av XBMC. Strikan kann viðføra brek.</disclaimer>
     <disclaimer lang="fr">Confluence est le thème par défaut de XBMC, le supprimer peut créer des problèmes</disclaimer>
+    <disclaimer lang="fr_CA">Confluence est le thème par défaut de XBMC, le supprimer peut créer des problèmes</disclaimer>
     <disclaimer lang="gl">Confluence é a pel predeterminada para XBMC e eliminala pode causas problemas.</disclaimer>
     <disclaimer lang="he">Confluence הוא סקין ברירת המחדל של XBMC, הסרה שלו עלולה לגרום לבעיות.</disclaimer>
     <disclaimer lang="hr">Confluence je uobičajena presvlaka za XBMC, njegovim uklanjanjem može uzrokovati poteškoće.</disclaimer>
     <disclaimer lang="lv">Confluence ir XBMC pamatāda, dzēšot to var rasties problēmas</disclaimer>
     <disclaimer lang="mk">Confluence е подразбирачка маска, бришењето може да предизвика пречки</disclaimer>
     <disclaimer lang="ms">Penyatuan ialah kulit lalai XBMC, mengubahnya boleh menimbulkan isu.</disclaimer>
-    <disclaimer lang="nl">Confluence is de standaard XMBC skin, het verwijderen van Confluence kan leiden tot problemen.</disclaimer>
+    <disclaimer lang="nl">Confluence is de standaard XBMC skin, het verwijderen van Confluence kan leiden tot problemen.</disclaimer>
     <disclaimer lang="no">Confluence er standardskallet for XBMC, å fjerne det kan skape problemer</disclaimer>
     <disclaimer lang="pl">Confluence jest domyślną skórą XBMC. Jej usunięcie może powodować problemy.</disclaimer>
     <disclaimer lang="pt">O tema Confluence é o tema padrão do XBMC. Removê-lo pode causar problemas.</disclaimer>
     <disclaimer lang="sk">Confluence je predvolený skin pre XBMC, jeho odstránenie môže spôsobiť problémy</disclaimer>
     <disclaimer lang="sl">Confluence je privzeta preobleka za XBMC, njena odstranitev lahko povzroči težave</disclaimer>
     <disclaimer lang="sq">Confluence është maska kryesore së XBMC, fshirja e saj mund të shkaktoj çështje.</disclaimer>
-    <disclaimer lang="sv">Confluence är standardskal för XBMC, att ta bort detta skal kan skapa problem.</disclaimer>
+    <disclaimer lang="sv">Confluence är standardskal för XBMC. Att ta bort detta skal kan skapa problem.</disclaimer>
     <disclaimer lang="ta_IN">Confluence தான் XBMC யின் இயல்புநிலை அலங்காரம், அதை நீக்குவதால் சிக்கல்கள் ஏற்படலாம்</disclaimer>
     <disclaimer lang="tg">Пӯсти ҳамҷараёнӣ ҳамчун пӯсти пешфарз барои XBMC истифода шуда истодааст ва агар онро тоза кунед, мӯшкилӣ метавонад ба вуҷуд ояд</disclaimer>
     <disclaimer lang="th">Confluence เป็นสกินเริ่มต้นสำหรับ XBMC การลบมัน อาจทำให้เกิดปัญหา</disclaimer>
     <disclaimer lang="tr">Confluence XBMC için varsayılan dış görünümdür, kaldırmak sorunlara yol açabilir</disclaimer>
     <disclaimer lang="uk">Confluence — основна обкладинка XBMC, і її видалення може призвести до проблем</disclaimer>
     <disclaimer lang="vi">Confluence là giao diện mặc định của XBMC, loại bỏ giao diện này có thể gây ra lỗi cho chương trình</disclaimer>
-    <disclaimer lang="zh">Confluence 是 XMBC 的默认皮肤,删除它可能导致故障。</disclaimer>
-    <disclaimer lang="zh_TW">Confluence 是 XMBC 預設的佈景主題,移除它可能會造成問題</disclaimer>
+    <disclaimer lang="zh">Confluence 是 XBMC 的默认皮肤,删除它可能导致故障。</disclaimer>
+    <disclaimer lang="zh_TW">Confluence 是 XBMC 預設的佈景主題,移除它可能會造成問題</disclaimer>
     <platform>all</platform>
   </extension>
 </addon>
index 74c0f77..3d19627 100644 (file)
@@ -1,3 +1,19 @@
+[B]2.2.8[/B]
+
+- Updated language files from Transifex
+
+[B]2.2.7[/B]
+
+- Updated language files from Transifex
+
+[B]2.2.6[/B]
+
+- Updated language files from Transifex
+
+[B]2.2.5[/B]
+
+- Updated language files from Transifex
+
 [B]2.2.4[/B]
 
 - Updated language files from Transifex
index eb1b630..4f6c23b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <colors>
-       <color name="white">FFFFFFFF</color>
+       <color name="white">FFF1F1F1</color>
        <color name="grey">FFb4b4b4</color>
        <color name="grey2">FF999999</color>
        <color name="grey3">FF505050</color>
index afcd48a..5bbbb26 100644 (file)
Binary files a/addons/skin.confluence/icon.png and b/addons/skin.confluence/icon.png differ
index 6458e1e..14268d5 100644 (file)
@@ -22,11 +22,11 @@ msgstr "تغيير"
 
 msgctxt "#31003"
 msgid "Power Options"
-msgstr "Ø®Ù\8aارات Ø§Ù\84طاÙ\82Ø©"
+msgstr "إعدادات Ø§Ù\84طاÙ\82Ù\87"
 
 msgctxt "#31004"
 msgid "Working..."
-msgstr "...جاري التشغيل"
+msgstr "يعمل..."
 
 msgctxt "#31005"
 msgid "Hide Information"
@@ -38,7 +38,7 @@ msgstr "خيارات العرض"
 
 msgctxt "#31008"
 msgid "Full screen"
-msgstr "شاشة كاملة"
+msgstr "ملئ الشاشه"
 
 msgctxt "#31009"
 msgid "Total Duration"
@@ -54,11 +54,11 @@ msgstr "يشتغل الان"
 
 msgctxt "#31024"
 msgid "Page"
-msgstr "عÙ\86اصر"
+msgstr "اÙ\84صÙ\81Ø­Ù\87"
 
 msgctxt "#31025"
 msgid "Items"
-msgstr "صÙ\81حة"
+msgstr "اÙ\84عÙ\86اصر"
 
 msgctxt "#31026"
 msgid "Misc Options"
@@ -90,11 +90,11 @@ msgstr "معلومات"
 
 msgctxt "#31040"
 msgid "Now Playing"
-msgstr "يشتغل الان"
+msgstr "المُشَغَل اﻷن"
 
 msgctxt "#31042"
 msgid "PLAYING"
-msgstr "يشتغل الان"
+msgstr "المُشَغَل"
 
 msgctxt "#31043"
 msgid "PAUSED"
@@ -108,29 +108,33 @@ msgctxt "#31045"
 msgid "REWIND"
 msgstr "إرجاع"
 
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "يَطلُب"
+
 msgctxt "#31049"
 msgid "End Time"
-msgstr "وقت الانتهاء"
+msgstr "وقت انتهاء"
 
 msgctxt "#31050"
 msgid "Sort: Ascending"
-msgstr "الفرز:تصاعدي"
+msgstr "الفرز: تصاعدياً"
 
 msgctxt "#31051"
 msgid "Sort: Descending"
-msgstr "الفرز:تنازلي"
+msgstr "الفرز: تنازلياً"
 
 msgctxt "#31055"
 msgid "Open playlist"
-msgstr "فتح قائمة التشغيل"
+msgstr "إفتح قائمة التشغيل"
 
 msgctxt "#31056"
 msgid "Save playlist"
-msgstr "حفظ قائمة التشغيل"
+msgstr "إحÙ\81ظ Ù\82ائÙ\85Ø© Ø§Ù\84تشغÙ\8aÙ\84"
 
 msgctxt "#31057"
 msgid "Close playlist"
-msgstr "إغلاق قائمة التشغيل"
+msgstr "إغلق قائمه التشغيل"
 
 msgctxt "#31058"
 msgid "System music files"
@@ -142,15 +146,15 @@ msgstr "قائمة التشغيل الحالية"
 
 msgctxt "#31060"
 msgid "This file is stacked, select the part you want to play from."
-msgstr ".هذا الملف مكدس، حدد الجزء الذي تريد تشغيله"
+msgstr "هذا الملف مُكدَس، حدد الجزء الذى تريد تشغيله منه"
 
 msgctxt "#31061"
 msgid "Current Selected"
-msgstr "مختارة حاليا"
+msgstr "المُختاره حالياً"
 
 msgctxt "#31101"
 msgid "Home screen options"
-msgstr "Ø®Ù\8aارات Ø§Ù\84صÙ\81حة Ø§Ù\84رئÙ\8aسÙ\8aØ©"
+msgstr "إعدادات Ø§Ù\84صÙ\81Ø­Ù\87 Ø§Ù\84رئÙ\8aسÙ\8aÙ\87"
 
 msgctxt "#31102"
 msgid "Background"
@@ -162,7 +166,7 @@ msgstr "إظهار \"إيقاف مؤقت\" في عرض شرائح الصور"
 
 msgctxt "#31106"
 msgid "Miscellaneous options"
-msgstr "Ø®Ù\8aارات Ù\85تÙ\86Ù\88عة"
+msgstr "إعدادات Ù\85تÙ\86Ù\88عÙ\87"
 
 msgctxt "#31107"
 msgid "Hide Flagging read from video filenames [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
@@ -170,31 +174,31 @@ msgstr "[COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]إخفاء وضع علامة ال
 
 msgctxt "#31108"
 msgid "Hide Main Menu Buttons"
-msgstr "إخفاء أزرار القائمة الرئيسية"
+msgstr "إخف ازرار القائمة الرئيسية"
 
 msgctxt "#31109"
 msgid "Enable Custom Background"
-msgstr "تمكين تخصيص الخلفية"
+msgstr "تمكين تخصيص الخلفيه"
 
 msgctxt "#31110"
 msgid "Background path:"
-msgstr "خلفية مسار:"
+msgstr "مسار الخلفيه:"
 
 msgctxt "#31111"
 msgid "Hide"
-msgstr "إخفاء"
+msgstr "إخف"
 
 msgctxt "#31112"
 msgid "Options"
-msgstr "Ø®Ù\8aارات"
+msgstr "إعدادات"
 
 msgctxt "#31116"
 msgid "Show Recently added Albums"
-msgstr "أظÙ\87ر Ø§Ù\84Ø£Ù\84بÙ\88Ù\85ات Ø§Ù\84Ù\85ضاÙ\81Ø© Ù\85ؤخرا"
+msgstr "إظÙ\87ر Ø§ï»·Ù\84بÙ\88Ù\85ات Ø§Ù\84Ù\85Ù\8fضاÙ\81Ù\87 Ù\85ؤخراÙ\8b"
 
 msgctxt "#31117"
 msgid "Show Recently added Videos"
-msgstr "إظÙ\87ار Ø§Ù\84Ù\81Ù\8aدÙ\8aÙ\88ات Ø§Ù\84Ù\85ضاÙ\81Ø© مؤخراً"
+msgstr "إظÙ\87ر Ø§Ù\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87 Ø§Ù\84Ù\85Ù\8fضاÙ\81Ù\87 مؤخراً"
 
 msgctxt "#31119"
 msgid "Hide Background Fanart"
@@ -226,15 +230,19 @@ msgstr "عرض الموسيقى على الشاشة"
 
 msgctxt "#31141"
 msgid "Video OSD"
-msgstr "عرض الفيديو على الشاشة"
+msgstr "عرض المقاطع المرئيه على الشاشة"
+
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "مستوى اﻹعدادات"
 
 msgctxt "#31200"
 msgid "Shortcuts"
-msgstr "اختصارات"
+msgstr "اختصارات"
 
 msgctxt "#31203"
 msgid "Choose Your Song"
-msgstr "اختر Ø£غنيتك"
+msgstr "إختر Ø§غنيتك"
 
 msgctxt "#31205"
 msgid "Lyrics Source"
@@ -242,11 +250,11 @@ msgstr "مصدر كلمات الأغنية"
 
 msgctxt "#31206"
 msgid "Found"
-msgstr "وجد"
+msgstr "وجِدَ"
 
 msgctxt "#31207"
 msgid "Find More Items"
-msgstr "اÙ\8aجاد Ø§Ù\84Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84Ù\85Ù\88اضÙ\8aع"
+msgstr "جÙ\90د Ø§Ù\84Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84عÙ\86اصر"
 
 msgctxt "#31208"
 msgid "Upcoming Episodes"
@@ -262,7 +270,7 @@ msgstr "اخر تحديث"
 
 msgctxt "#31303"
 msgid "Data provider"
-msgstr "مزود البيانات"
+msgstr "مزود البيانات"
 
 msgctxt "#31307"
 msgid "Hide Fanart"
@@ -270,7 +278,7 @@ msgstr "Fanart إخفاء"
 
 msgctxt "#31308"
 msgid "Movie Details"
-msgstr "تفاصيل الفلم"
+msgstr "تÙ\81اصÙ\8aÙ\84 Ø§Ù\84Ù\81Ù\8aÙ\84Ù\85"
 
 msgctxt "#31309"
 msgid "Memory Used:"
@@ -294,7 +302,7 @@ msgstr "Choose a Scraper"
 
 msgctxt "#31314"
 msgid "Content Scanning Options"
-msgstr "Ø®Ù\8aارات Ù\81حص Ø§Ù\84Ù\85حتÙ\88Ù\89 "
+msgstr "إعدادات Ù\81حص Ø§Ù\84Ù\85حتÙ\88Ù\89"
 
 msgctxt "#31317"
 msgid "Set Fanart Path"
@@ -302,31 +310,31 @@ msgstr "Fanart تعيين مسار"
 
 msgctxt "#31319"
 msgid "Selected Profile"
-msgstr "الملف الشخصي المحدد"
+msgstr "الملف الشخصي المُحدد"
 
 msgctxt "#31320"
 msgid "Last Logged In"
-msgstr "آخر ØªØ³Ø¬Ù\8aÙ\84 Ø¯Ø®Ù\88Ù\84 Ù\81Ù\8a"
+msgstr "آخر ØªØ³Ø¬Ù\8aÙ\84 Ø¯Ø®Ù\88Ù\84 Ù\83اÙ\86 Ù\81Ù\89"
 
 msgctxt "#31321"
 msgid "Karaoke Song Selector"
-msgstr "محدد أغاني الكاريوكي"
+msgstr "مُحَدِد أغاني الكاريوكي"
 
 msgctxt "#31322"
 msgid "Aired"
-msgstr "المبث"
+msgstr "المَبَت"
 
 msgctxt "#31325"
 msgid "Playlist Options"
-msgstr "Ø®Ù\8aارات Ù\82ائÙ\85Ø© التشغيل"
+msgstr "إعدادات Ù\82ائÙ\85Ù\87 التشغيل"
 
 msgctxt "#31326"
 msgid "Created"
-msgstr "Ø£Ù\86Ø´ئ"
+msgstr "اÙ\8fÙ\86Ø´Ù\8eئ"
 
 msgctxt "#31327"
 msgid "Resolution"
-msgstr "الدقة"
+msgstr "اﻷبعاد"
 
 msgctxt "#31328"
 msgid "Recently Added"
@@ -346,11 +354,11 @@ msgstr "تفاصبل الألبوم"
 
 msgctxt "#31351"
 msgid "Pause"
-msgstr "تÙ\88Ù\82Ù\8aÙ\81 Ù\85ؤÙ\82ت"
+msgstr "اÙ\88Ù\82Ù\81 Ù\85ؤÙ\82تاÙ\8b"
 
 msgctxt "#31352"
 msgid "Stop"
-msgstr "تÙ\88Ù\82Ù\81 Ù\83اÙ\85Ù\84"
+msgstr "اÙ\88Ù\82Ù\81"
 
 msgctxt "#31353"
 msgid "Fast Forward"
@@ -358,7 +366,7 @@ msgstr "تقديم سريع"
 
 msgctxt "#31354"
 msgid "Rewind"
-msgstr "ترجÙ\8aع"
+msgstr "إرجاع"
 
 msgctxt "#31355"
 msgid "Movie menu"
@@ -366,7 +374,15 @@ msgstr "قائمة الفلم"
 
 msgctxt "#31356"
 msgid "Download Subtitles"
-msgstr "تحميل الترجمات"
+msgstr "تنزيل ترجمات"
+
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "شاهد كـ ثنائى الابعاد"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "غير الوضع"
 
 msgctxt "#31362"
 msgid "Enabled"
@@ -374,7 +390,7 @@ msgstr "ممكن"
 
 msgctxt "#31390"
 msgid "Skin default"
-msgstr "اÙ\84Ø®Ù\84Ù\81Ù\8aØ© Ø§Ù\84اإÙ\81تراضÙ\8aØ©"
+msgstr "اÙ\84جÙ\84د Ø§Ù\84Ù\85بدأÙ\89"
 
 msgctxt "#31391"
 msgid "Skin default with no Caps"
@@ -386,39 +402,47 @@ msgstr "Arial based"
 
 msgctxt "#31400"
 msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85ظÙ\87ر[/B][CR][CR]تغÙ\8aÙ\8aر Ø§Ù\84Ø®Ù\84Ù\81Ù\8aØ© Â· ØªØ¹Ù\8aÙ\8aÙ\86 Ø§Ù\84Ù\84غة Ù\88اÙ\84Ù\85Ù\86Ø·Ù\82Ø© Â· ØªØºÙ\8aÙ\8aر Ø®Ù\8aارات Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85Ù\84Ù\81[CR]ضبط شاشة التوقف"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85ظÙ\87ر[/B][CR][CR]ضبط Ø§Ù\84جÙ\84د Â· Ø¶Ø¨Ø· Ø§Ù\84Ù\84غة Ù\88اÙ\84Ù\85Ù\86Ø·Ù\82Ø© Â· Ø¶Ø¨Ø· Ù\82Ù\88ائÙ\85 Ø§Ù\84Ù\85Ù\84Ù\81ات[CR]ضبط شاشة التوقف"
 
 msgctxt "#31401"
 msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\81Ù\8aدÙ\8aÙ\88[/B][CR][CR]إدارة Ù\85Ù\83تبة Ø§Ù\84Ù\81Ù\8aدÙ\8aÙ\88 Â· ØªØ¹Ù\8aÙ\8aÙ\86 Ø®Ù\8aارات ØªØ´ØºÙ\8aÙ\84 Ø§Ù\84Ù\81Ù\8aدÙ\8aÙ\88 Â· ØªØºÙ\8aÙ\8aر Ø®Ù\8aارات Ù\82ائÙ\85Ø© Ø§Ù\84Ù\81Ù\8aدÙ\8aÙ\88[CR]تعÙ\8aÙ\8aÙ\86 Ø®Ø·Ù\88Ø· Ø§Ù\84ترجÙ\85Ø©"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87[/B][CR][CR]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ù\85Ù\83تبات Ø§Ù\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87 - Ø¶Ø¨Ø· Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª ØªØ´ØºÙ\8aÙ\84 Ø§Ù\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87 - ØªØºÙ\8aÙ\8aر Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ù\82Ù\88ائÙ\85 Ø§Ù\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87[CR]ضبط Ø§Ù\84ترجÙ\85ات"
 
 msgctxt "#31402"
 msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89[/B][CR][CR]إدارة Ù\85Ù\83تبة Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\8a Â· ØªØ¹Ù\8aÙ\8aÙ\86 Ø®Ù\8aارات ØªØ´ØºÙ\8aÙ\84 Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89 Â· ØªØºÙ\8aÙ\8aر Ø®Ù\8aارات Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89 Â· ØªØ¹Ù\8aÙ\8aÙ\86 Ø®Ù\8aارات الكارويوكي"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89[/B][CR][CR]ضبط Ù\85Ù\83تبات Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89 Â· Ø¶Ø¨Ø· Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª ØªØ´ØºÙ\8aÙ\84 Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89 Â· Ø¶Ø¨Ø· Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ù\82ائÙ\85Ù\87 Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89[CR]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø¥Ø°Ø§Ø¹Ù\87 Ø§Ù\84Ù\85Ù\88سÙ\8aÙ\82Ù\89 - Ø¶Ø¨Ø· Ø¥Ø¹Ø¯Ø§Ø¯ات الكارويوكي"
 
 msgctxt "#31403"
 msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84صÙ\88ر[/B][CR][CR]ضبط Ø¹Ø±Ø¶ Ø§Ù\84شرائح Â· ØªØºÙ\8aÙ\8aر Ø®Ù\8aارات Ù\82ائÙ\85Ø© Ø§Ù\84صÙ\88ر"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84صÙ\88ر[/B][CR][CR]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ù\82ائÙ\85Ù\87 Ø§Ù\84صÙ\88ر - Ø¶Ø¨Ø· Ø§Ù\84عرÙ\88ض Ø§Ù\84تÙ\82دÙ\8aÙ\85Ù\8aÙ\87"
 
 msgctxt "#31404"
 msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ø·Ù\82س[/B][CR][CR]تعÙ\8aÙ\8aÙ\86 Ø«Ù\84اث Ù\85دÙ\86 Ù\84جÙ\85ع Ù\85عÙ\84Ù\88Ù\85ات Ø¹Ù\86 Ø§Ù\84Ø·Ù\82س"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ø·Ù\82س[/B][CR][CR]إختÙ\8aار Ø«Ù\84اث Ù\85دÙ\86 Ù\84تجÙ\85Ù\8aع Ø¨Ù\8aاÙ\86ات Ø§Ù\84Ø·Ù\82س Ø§Ù\84خاصÙ\87 Ø¨Ù\87ا"
 
 msgctxt "#31406"
 msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
-msgstr "[B]تÙ\83Ù\88Ù\8aÙ\86 Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\86ظاÙ\85[/B][CR][CR]ضبط Ø§Ù\84Ù\85عاÙ\8aرة Ù\88اÙ\84عرض· ØªÙ\83Ù\88Ù\8aÙ\86 Ù\85خرج Ø§Ù\84صÙ\88ت Â· Ø¶Ø¨Ø· Ø§Ù\84تحÙ\83Ù\85 Ø¹Ù\86 Ø¨Ø¹Ø¯[CR]تعÙ\8aÙ\8aÙ\86 Ø®Ù\8aارات ØªÙ\88Ù\81Ù\8aر Ø§Ù\84طاÙ\82Ø© Â· ØªÙ\85Ù\83Ù\8aÙ\86 Ø§Ù\84تصحÙ\8aØ­ Â· Ø¶Ø¨Ø· Ø§Ù\84Ù\82Ù\81Ù\84 Ø§Ù\84رئÙ\8aسÙ\8a "
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\86ظاÙ\85[/B][CR][CR]ضبط Ù\88Ù\85عاÙ\8aرÙ\87 Ø·Ù\8fرÙ\8fÙ\82 Ø§Ù\84عرض - Ø¶Ø¨Ø· Ù\85خارج Ø§Ù\84صÙ\88ت - Ø¶Ø¨Ø· Ø§Ù\84تحÙ\83Ù\85 Ø¹Ù\86 Ø¨Ø¹Ø¯[CR]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª ØªÙ\88Ù\81Ù\8aر Ø§Ù\84طاÙ\82Ù\87 - Ø¶Ø¨Ø· Ù\88ضع Ø§Ù\84Ù\85عاÙ\84جÙ\87 - Ø¶Ø¨Ø· Ø§Ù\84Ù\82Ù\81Ù\84 Ø§Ù\84رئÙ\8aسÙ\89"
 
 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]تÙ\83Ù\88Ù\8aÙ\86 Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات [/B][CR][CR]xbmc.org Ø¥Ø¯Ø§Ø±Ø© Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات Ø§Ù\84Ù\85ثبتة Â· ØªØµÙ\81Ø­ Ù\88تثبÙ\8aت Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات Ù\85Ù\86[CR] ØªØ¹Ø¯Ù\8aÙ\84 Ø¥Ø¹Ø¯Ø§Ø¯Øª Ø§Ù\84Ù\85Ù\84Ø­Ù\82"
+msgstr "[B]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات[/B][CR][CR]ضبط Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات Ø§Ù\84Ù\85Ù\8fثبتÙ\87 - ØªØµÙ\81Ø­ Ù\88تثبÙ\8aت Ø§Ù\84Ù\85Ù\84Ø­Ù\82ات Ø¹Ø¨Ø± Ù\85Ù\88Ù\82ع Ø¥Ù\83س Ø¨Ù\89 Ø¥Ù\85 Ø³Ù\89 Ø§Ù\84رسÙ\85Ù\89[CR]ضبط Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ù\85Ù\8fÙ\84Ø­Ù\82 Ù\85عÙ\8aÙ\86"
 
 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/][CR][CR] إعداد التحكم بـXBMC عبر UPnP و HTTP. نكوين مشاركة ملف [CR] تمكن  Zeroconf. تكوين التشغيل الحي "
 
+msgctxt "#31411"
+msgid "First run help...."
+msgstr "مساعده المبتدئين...."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "تتوفر ترجمات محليه"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
-msgstr "للدخول والإستمرارا [CR]XBMC  حدد ملفك الشخصي الخاص بـ"
+msgstr "حدد الملف الشخصى المُراد[CR] لتسجيل الدخول به"
 
 msgctxt "#31501"
 msgid "Scheduled Time"
@@ -426,23 +450,23 @@ msgstr "جدول الزمن"
 
 msgctxt "#31502"
 msgid "Live TV"
-msgstr "تÙ\8a Ù\81Ù\8a مباشر"
+msgstr "تÙ\84Ù\81از مباشر"
 
 msgctxt "#31503"
 msgid "Add Group"
-msgstr "إضاÙ\81Ø© Ù\85جÙ\85Ù\88عة"
+msgstr "أضÙ\81 Ù\85جÙ\85Ù\88عÙ\87"
 
 msgctxt "#31504"
 msgid "Rename Group"
-msgstr "إعادة ØªØ³Ù\85Ù\8aØ© Ù\85جÙ\85Ù\88عة"
+msgstr "أعد ØªØ³Ù\85Ù\8aÙ\87 Ù\85جÙ\85Ù\88عÙ\87"
 
 msgctxt "#31505"
 msgid "Delete Group"
-msgstr "حذÙ\81 Ù\85جÙ\85Ù\88عة"
+msgstr "إحذÙ\81 Ù\85جÙ\85Ù\88عÙ\87"
 
 msgctxt "#31506"
 msgid "Available[CR]Groups"
-msgstr "مجموعات [ سي دي] متوفرة"
+msgstr "المجموعات[CR]المتوفره"
 
 msgctxt "#31509"
 msgid "Channel Group"
@@ -458,19 +482,19 @@ msgstr "خيارات القناة"
 
 msgctxt "#31901"
 msgid "36 Hour Forecast"
-msgstr "36 hour توقعات طقس"
+msgstr "توقعات الطقس للـ 36 ساعه القادمه"
 
 msgctxt "#31902"
 msgid "Hourly Forecast"
-msgstr "توقعات الطقس لكل ساعة"
+msgstr "توقعات الطقس لكل ساعه"
 
 msgctxt "#31903"
 msgid "Weekend Forecast"
-msgstr "توقعات طقس نهاية الأسبوع"
+msgstr "توقعات طقس نهايه الاسبوع"
 
 msgctxt "#31904"
 msgid "10 Day Forecast"
-msgstr "10 Days توقعات طقس"
+msgstr "توقعات الطقس للـ 10 ايام القادمه"
 
 msgctxt "#31905"
 msgid "Forecast"
@@ -478,8 +502,52 @@ msgstr "توقعات الطقس"
 
 msgctxt "#31908"
 msgid "Chance of Precipitation"
-msgstr "فرصة هطول الأمطار"
+msgstr "فرصه تساقط امطار"
 
 msgctxt "#31909"
 msgid "Fetching forecast info..."
-msgstr "...جلب معلومات توقعات الطقس"
+msgstr "يَجِلِب توقعات الطقس..."
+
+msgctxt "#31910"
+msgid "Map & Alerts"
+msgstr "الخريطه و التحذيرات"
+
+msgctxt "#31950"
+msgid "WEATHER"
+msgstr "الطقس"
+
+msgctxt "#31951"
+msgid "PICTURES"
+msgstr "الصور"
+
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "التلفاز المباشر"
+
+msgctxt "#31953"
+msgid "VIDEOS"
+msgstr "المقاطع المرئيه"
+
+msgctxt "#31954"
+msgid "MOVIES"
+msgstr "اﻷفلام"
+
+msgctxt "#31955"
+msgid "TV SHOWS"
+msgstr "العروض التلفازيه"
+
+msgctxt "#31956"
+msgid "MUSIC"
+msgstr "الموسيقى"
+
+msgctxt "#31957"
+msgid "PROGRAMS"
+msgstr "البرمجيات"
+
+msgctxt "#31958"
+msgid "PLAY DISC"
+msgstr "القرص"
+
+msgctxt "#31959"
+msgid "SYSTEM"
+msgstr "النظام"
index 8fb742e..5d2954d 100644 (file)
@@ -22,7 +22,7 @@ msgstr "Променете вашите"
 
 msgctxt "#31003"
 msgid "Power Options"
-msgstr "Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð½Ð° Ð·Ð°Ñ\85Ñ\80анванеÑ\82о"
+msgstr "Ð\98зклÑ\8eÑ\87и..."
 
 msgctxt "#31004"
 msgid "Working..."
@@ -30,7 +30,7 @@ msgstr "Работи..."
 
 msgctxt "#31005"
 msgid "Hide Information"
-msgstr "СкÑ\80ий Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8fÑ\82а"
+msgstr "Ð\91ез Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f"
 
 msgctxt "#31006"
 msgid "View Options"
@@ -70,7 +70,7 @@ msgstr "Място"
 
 msgctxt "#31028"
 msgid "Poster Wrap"
-msgstr "Плакати-поредица"
+msgstr "Плакати"
 
 msgctxt "#31029"
 msgid "Fanart"
@@ -230,7 +230,7 @@ msgstr "Ползвай за фон възпроизвежданата в мом
 
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
-msgstr "ТемаÑ\82иÑ\87ни Ð¼ÐµÐ»Ð¾Ð´Ð¸Ð¸ Ð¾Ñ\82 Ð¢Ð\92 Ð¡ÐµÑ\80иали Ð²Ñ\8aв Ð²Ð¸Ð´ÐµÐ¾ библиотеката (добавка TvTunes)"
+msgstr "Ð\92Ñ\8aзпÑ\80оизвеждай Ð¼ÐµÐ»Ð¾Ð´Ð¸Ð¸ Ð¾Ñ\82 Ð¢Ð\92 Ð¡ÐµÑ\80иали Ð² библиотеката (добавка TvTunes)"
 
 msgctxt "#31127"
 msgid "TvTunes"
@@ -416,6 +416,10 @@ msgctxt "#31360"
 msgid "Watch as 2D"
 msgstr "Гледай в 2D режим"
 
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Промени режима"
+
 msgctxt "#31362"
 msgid "Enabled"
 msgstr "Включено"
@@ -462,7 +466,7 @@ msgstr "[B]КОНФИГУРИРАЙТЕ ДОБАВКИТЕ[/B][CR][CR]Управ
 
 msgctxt "#31409"
 msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
-msgstr "[B]Ð\9aонÑ\84игÑ\83Ñ\80иÑ\80айÑ\82е Ð¢ÐµÐ»ÐµÐ²Ð¸Ñ\8fÑ\82а[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]Ð\9aÐ\9eÐ\9dФÐ\98Ð\93УРÐ\98РÐ\90Ð\99ТÐ\95 Ð¢Ð\95Ð\9bÐ\95Ð\92Ð\98Ð\97Ð\98ЯТÐ\90[/B][CR][CR]Change full screen info · Manage EPG data settings"
 
 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"
@@ -480,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Налични са локални субтитри"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Вписване"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Изберете потребителски профил,[CR]за да продължите"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Определя да се ползва или не, екрана за вписване"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Определя кой профил да се ползва за вписване, когато екрана за вписване е изключен"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "График"
@@ -508,6 +524,10 @@ msgctxt "#31506"
 msgid "Available[CR]Groups"
 msgstr "Налични[CR]Групи"
 
+msgctxt "#31509"
+msgid "Channel Group"
+msgstr "Група канали"
+
 msgctxt "#31510"
 msgid "Timer Set"
 msgstr "Настройка на брояча"
index 19069c1..58cbac5 100644 (file)
@@ -190,7 +190,7 @@ msgstr "Amaga els botons del menú principal"
 
 msgctxt "#31109"
 msgid "Enable Custom Background"
-msgstr "Habilita fons personalitzat"
+msgstr "Habilita el fons personalitzat"
 
 msgctxt "#31110"
 msgid "Background path:"
@@ -418,7 +418,7 @@ msgstr "Canvia el mode"
 
 msgctxt "#31362"
 msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
 
 msgctxt "#31390"
 msgid "Skin default"
@@ -476,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 "Aquesta pestanya indica que hi ha un menú al costat d'aquesta finestra que conté opcions addicionals a les d'aquesta secció. Per accedir a aquest menú, navegau a l'esquerra amb el comandament a distància o teclat, o posau el punter del ratolí a sobre de la pestanya. [CR] [CR]Feu clic a \"D'acord\" per tancar aquest diàlog. No es tornarà a mostrar."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Subtítol local disponible"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Seleccioneu el vostre perfil d'usuari de l'XBMC[CR]per iniciar la sessió i continuar"
index d5f124b..05c00d2 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "本地字幕可用"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "登录"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "选择您的用户配置文件[CR]登录并继续"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "启动时显示或隐藏登录界面。"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "选择禁用登录界面时使用的用户配置文件。"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "预定时间"
index 7e13009..36e8d05 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "有本地語言的字幕可選用"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "登入"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "選擇您的 XBMC 使用者設定檔[CR]登入並繼續"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "啟動時顯示或隱藏登入畫面"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "選擇登入畫面停用是要使用的設定檔。"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "已排程的時間"
index eeed5e3..79d88d8 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Lokalni podnaslovi dostupni"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Prijava"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Prikaži ili sakrij zaslon prijave pri pokretanju."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Odaberite profil koji će se koristiti pri pokretanju kada je zaslon prijave onemogućen."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Planirano vrijeme"
index a1d300f..7742a6b 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Místní titulky k dispozici"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Přihlášení"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Vyberte profil XBMC[CR]pro přihlášení a pokračování"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Zobrazit, nebo skrýt, přihlašovací obrazovku při spuštění."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Vyberte výchozí profil po spuštění, pokud je prihlašovací obrazovka zakázána."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Naplánovaný čas"
index e78990d..1a5fbbc 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Indstillingsniveau"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Genveje"
@@ -374,7 +378,7 @@ msgstr "Nyligt tilføjede"
 
 msgctxt "#31329"
 msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]"
-msgstr "[B]Timeren startet![/B] [COLOR=grey2] - Systemet lukker ned om[/COLOR]"
+msgstr "[B]Optagelse indstillet![/B] [COLOR=grey2] - Systemet lukker ned om[/COLOR]"
 
 msgctxt "#31330"
 msgid "Click button to play[CR][CR]Movie trailer"
@@ -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 "Dette faneblad indikerer, at der er en menu i siden af dette vindue, som indeholder ekstra indstillinger til denne sektion.\nFor at få adgang til denne menu, skal du navigere til venstre  med din fjernbetjening eller dit tastatur. Du kan også placere din musemarkør over fanebladet. [CR][CR]Tryk \"Ok\" for at lukke denne dialog. Den dukker ikke op igen."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Undertekster på lokalt sprog tilgængelig"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Vælg din XBMC brugerprofil[CR]for at logge ind og fortsætte"
@@ -510,7 +518,7 @@ msgstr "Kanalgruppe"
 
 msgctxt "#31510"
 msgid "Timer Set"
-msgstr "Indstil Timer"
+msgstr "Indstil Optagelse"
 
 msgctxt "#31511"
 msgid "Channel Options"
index 3350302..5a1c16f 100644 (file)
@@ -18,7 +18,7 @@ msgstr ""
 
 msgctxt "#31000"
 msgid "Change Your"
-msgstr "Aanpassen"
+msgstr "Verander jouw"
 
 msgctxt "#31003"
 msgid "Power Options"
@@ -122,7 +122,7 @@ msgstr "Visualisatie voorinstellingen"
 
 msgctxt "#31049"
 msgid "End Time"
-msgstr "Eindigt om"
+msgstr "Eindtijd"
 
 msgctxt "#31050"
 msgid "Sort: Ascending"
@@ -230,7 +230,7 @@ msgstr "Laat achtergrond \"Nu Afspelen\" zien voor visualisatie"
 
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
-msgstr "Speel de Themesong van de TV serie af in de videobibliotheek. (TvTunes add-on)"
+msgstr "Speel de Themasong van de TV serie af in de videobibliotheek. (TvTunes add-on)"
 
 msgctxt "#31127"
 msgid "TvTunes"
@@ -254,7 +254,7 @@ msgstr "Begin Scherm Video's Submenu"
 
 msgctxt "#31135"
 msgid "Home Page Music Sub-menu"
-msgstr "Begin Scherm Musiek Submenu"
+msgstr "Begin Scherm Muziek Submenu"
 
 msgctxt "#31136"
 msgid "Home Page Pictures Sub-menu"
@@ -458,7 +458,7 @@ msgstr "[B]WEERINSTELLINGEN CONFIGUREREN[/B][CR][CR]Geef drie locaties op voor w
 
 msgctxt "#31406"
 msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
-msgstr "[B]SYSTEEMINSTELLINGEN CONFIGUREREN[/B][CR][CR]Configureer en kalibreer schermgeluidsuitgang · Configureer invoerapparaten en energiebeheeropties · Schakel debugging in · Configureer vergrendelopties"
+msgstr "[B]SYSTEEMINSTELLINGEN CONFIGUREREN[/B][CR][CR]Configureer en kalibreer schermen · Configureer geluidsuitgang · Configureer invoerapparaten en energiebeheeropties · Schakel debugging in · Configureer vergrendelopties"
 
 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"
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Lokale ondertitels beschikbaar"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Log-in"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Selecteer uw XBMC-gebruikersprofiel[CR]om in te loggen"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Toon of verberg het log-in scherm bij opstarten"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Selecteer het profiel dat moet worden gebruikt bij opstarten wanneer het log-in scherm is gedeactiveerd."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Opname starttijd"
@@ -514,7 +526,7 @@ msgstr "Beschikbare[CR]Groepen"
 
 msgctxt "#31509"
 msgid "Channel Group"
-msgstr "Groep"
+msgstr "Kanaal Groep"
 
 msgctxt "#31510"
 msgid "Timer Set"
@@ -526,7 +538,7 @@ msgstr "Kanaal opties"
 
 msgctxt "#31901"
 msgid "36 Hour Forecast"
-msgstr "36 Uur Voorspelling"
+msgstr "36 Uurs Voorspelling"
 
 msgctxt "#31902"
 msgid "Hourly Forecast"
index 479639d..aaa84b9 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Settings level"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Shortcuts"
@@ -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 "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 dialog. It will not appear again."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Local subtitle available"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Select your XBMC user Profile[CR]to login and continue"
index 51cbb5c..460696d 100644 (file)
@@ -557,13 +557,25 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr ""
 
-#empty strings from id 31414 to 31420
+#empty strings from id 31414 to 31419
+
+msgctxt "#31420"
+msgid "Login"
+msgstr ""
 
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr ""
 
-#empty strings from id 31422 to 31500
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr ""
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr ""
+
+#empty strings from id 31424 to 31500
 
 msgctxt "#31501"
 msgid "Scheduled Time"
index 8f9dd2c..19540f5 100644 (file)
@@ -22,7 +22,7 @@ msgstr "Määra"
 
 msgctxt "#31003"
 msgid "Power Options"
-msgstr "Valikud"
+msgstr "Energia valikud"
 
 msgctxt "#31004"
 msgid "Working..."
@@ -62,7 +62,7 @@ msgstr "Nimetused"
 
 msgctxt "#31026"
 msgid "Misc Options"
-msgstr "Veel valikuid"
+msgstr "Muud valikud"
 
 msgctxt "#31027"
 msgid "Location"
@@ -74,7 +74,7 @@ msgstr "Poster ääreni"
 
 msgctxt "#31029"
 msgid "Fanart"
-msgstr "Pildid"
+msgstr "Fännipildid"
 
 msgctxt "#31031"
 msgid "Pic Thumbs"
@@ -116,17 +116,21 @@ msgctxt "#31046"
 msgid "SEEKING"
 msgstr "OTSIMINE"
 
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Visualiseeringute eelseadistused"
+
 msgctxt "#31049"
 msgid "End Time"
-msgstr "Lõpp aeg"
+msgstr "Lõpu aeg"
 
 msgctxt "#31050"
 msgid "Sort: Ascending"
-msgstr "Järjesta: Kasvav"
+msgstr "Järjesta: Kasvavalt"
 
 msgctxt "#31051"
 msgid "Sort: Descending"
-msgstr "Järjesta: Kahanev"
+msgstr "Järjesta: Kahanevalt"
 
 msgctxt "#31055"
 msgid "Open playlist"
@@ -142,7 +146,7 @@ msgstr "Sulge esitusloend"
 
 msgctxt "#31058"
 msgid "System music files"
-msgstr "Süsteemi muusika failid"
+msgstr "Süsteemsed muusikafailid"
 
 msgctxt "#31059"
 msgid "Current playlist"
@@ -166,15 +170,19 @@ msgstr "Taust"
 
 msgctxt "#31103"
 msgid "Show \"Paused\" in picture slide show"
-msgstr "Näita piltide slaidieslitusel teksti \"pausis\""
+msgstr "Näita piltide slaidiesitusel teksti \"peatatud\""
+
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Esita treilereid aknas [COLOR=grey3](ainult Video dialoogiaken)[/COLOR]"
 
 msgctxt "#31106"
 msgid "Miscellaneous options"
-msgstr "Mitmesugused seaded"
+msgstr "Muud valikud"
 
 msgctxt "#31107"
 msgid "Hide Flagging read from video filenames [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
-msgstr "Peida loetud märgistus videofailide nimedest [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
+msgstr "Peida lugemise märgistus videofailide nimedest [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
 
 msgctxt "#31108"
 msgid "Hide Main Menu Buttons"
@@ -202,7 +210,11 @@ msgstr "Näita viimati lisatud albumeid"
 
 msgctxt "#31117"
 msgid "Show Recently added Videos"
-msgstr "Näita viimati lisatud videosid"
+msgstr "Näita viimati lisatud videoid"
+
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Peamenüü Programmide alammenüü"
 
 msgctxt "#31119"
 msgid "Hide Background Fanart"
@@ -212,6 +224,10 @@ msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
 msgstr "Näita taustal \"Hetkel mängib\" videot"
 
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Näita taustal \"Hetkel mängib\" visuaali"
+
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
 msgstr "Esita videoteegis sarjade tunnusmuusikat (TvTunes lisamoodul)"
@@ -224,9 +240,25 @@ msgctxt "#31128"
 msgid "Lyrics"
 msgstr "Laulutekst"
 
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Peida fännikunst täisekraanivaates"
+
 msgctxt "#31132"
 msgid "Lyrics Add-on"
-msgstr "Laulutekstide lisamoodulid"
+msgstr "Laulutekstide lisamoodul"
+
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Peamenüü Videote alammenüü"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Peamenüü Muusika alammenüü"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Peamenüü Piltide alammenüü"
 
 msgctxt "#31140"
 msgid "Music OSD"
@@ -236,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Seadete tase"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Otseteed"
@@ -246,7 +282,7 @@ msgstr "Vali laul"
 
 msgctxt "#31205"
 msgid "Lyrics Source"
-msgstr "Laulusõnade allikas"
+msgstr "Laulutekstide allikas"
 
 msgctxt "#31206"
 msgid "Found"
@@ -294,11 +330,11 @@ msgstr "Fännipilt[CR][CR]ei ole saadaval[CR][CR]Määramiseks vajuta nuppu"
 
 msgctxt "#31312"
 msgid "Current Scraper"
-msgstr "Käibiv kraabits"
+msgstr "Käibiv kaabits"
 
 msgctxt "#31313"
 msgid "Choose a Scraper"
-msgstr "Vali kraabits"
+msgstr "Vali kaabits"
 
 msgctxt "#31314"
 msgid "Content Scanning Options"
@@ -306,11 +342,11 @@ msgstr "Sisu skaneerimise valikud"
 
 msgctxt "#31317"
 msgid "Set Fanart Path"
-msgstr "Määra fännipiltide rada"
+msgstr "Määra fännipiltide asukoht"
 
 msgctxt "#31319"
 msgid "Selected Profile"
-msgstr "Vali profiil"
+msgstr "Valitud profiil"
 
 msgctxt "#31320"
 msgid "Last Logged In"
@@ -342,7 +378,7 @@ msgstr "Viimati lisatud"
 
 msgctxt "#31329"
 msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]"
-msgstr "[B]Loendur määratud![/B] [COLOR=grey2] - Süsteemi automaatne sulgemine[/COLOR]"
+msgstr "[B]Taimer seatud![/B] [COLOR=grey2] - Süsteemi automaatne seiskamine[/COLOR]"
 
 msgctxt "#31330"
 msgid "Click button to play[CR][CR]Movie trailer"
@@ -394,7 +430,7 @@ msgstr "Rüü vaikeväärtus"
 
 msgctxt "#31391"
 msgid "Skin default with no Caps"
-msgstr "Rüü vaikeväärtus ilma tõstutundlikuseta"
+msgstr "Rüü vaikeväärtus ilma suurtähtedeta"
 
 msgctxt "#31392"
 msgid "Arial based"
@@ -402,7 +438,7 @@ msgstr "Arial-il põhinev"
 
 msgctxt "#31400"
 msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver"
-msgstr "[B]KONFIGUREERI VÄLIMUSE SEADEID[/B][CR][CR]Muuda rüüd · Muuda keelt ja regiooni · Muuda faililoendi valikuid[CR]Seadista ekraanisäästja"
+msgstr "[B]KONFIGUREERI VÄLIMUSE SEADEID[/B][CR][CR]Muuda rüüd · Määra keel ja regioon · Muuda faililoendi valikuid[CR]Seadista ekraanisäästja"
 
 msgctxt "#31401"
 msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts"
@@ -410,31 +446,43 @@ msgstr "[B]KONFIGUREERI VIDEO SEADEID[/B][CR][CR]Halda enda videoteeki · Määr
 
 msgctxt "#31402"
 msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options"
-msgstr "[B]KONFIGUREERI MUUSIKA SEADEID[/B][CR][CR]Halda enda muusikateeki · Määra muusika esitamise seaded · Määra muusika loendi seaded[CR]Seadista loo esitamine · Seadista karaoke valikud"
+msgstr "[B]KONFIGUREERI MUUSIKA SEADEID[/B][CR][CR]Halda enda muusikateeki · Määra muusika esitamise seaded · Muuda muusikaloendi valikuid[CR]Seadista loo esitamine · Seadista karaoke valikud"
 
 msgctxt "#31403"
 msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows"
-msgstr "[B]KONFIGUREERI PILDI SEADEID[/B][CR][CR]Määra piltide loendi seaded · Konfigureeri slaidiesitlusi"
+msgstr "[B]KONFIGUREERI PILDI SEADEID[/B][CR][CR]Määra pildiloendi seaded · Konfigureeri slaidiesitlusi"
 
 msgctxt "#31404"
 msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information"
-msgstr "[B]KONFIGUREERI ILMA SEADEID[/B][CR][CR]Vali kolm linna, millele ilmaprognoose koostatakse"
+msgstr "[B]KONFIGUREERI ILMA SEADEID[/B][CR][CR]Vali ilmaprognooside koostamiseks kolm linna"
 
 msgctxt "#31406"
 msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
-msgstr "[B]KONFIGUREERI SÜSTEEMI SEADEID[/B][CR][CR]Seadista ja kalibreeri ekraane · Konfigureeri heliväljundit · Seadista kaugjuhtimine[CR]Määra energia säästu valikud· Luba silumine · Seadista pealukk"
+msgstr "[B]KONFIGUREERI SÜSTEEMI SEADEID[/B][CR][CR]Seadista ja kalibreeri ekraane · Konfigureeri heliväljundit · Seadista kaugjuhtimine[CR]Määra energiasäästu valikud· Luba silumine · Seadista pealukk"
 
 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]KONFIGUREERI LISAMOODULEID[/B][CR][CR]Halda enda lisamooduleid · Sirvi ja paigalda lisamooduleid aadressilt xbmc.org[CR]Muuda lisamoodulite seadeid"
 
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]SEADISTA TV SEADEID[/B][CR][CR]Muuda täisekraani infot · Halda elektroonilise saatekava seadeid"
+
 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]KONFIGUREERI TEENUSE SEADEID[/B][CR][CR]Seadista XBMC uhtimine UPnP ja HTTP kaudu · Seadista failide ühiskasutus[CR]Luba Zeroconf · Konfigureeri AirPlay"
+msgstr "[B]KONFIGUREERI TEENUSE SEADEID[/B][CR][CR]Seadista XBMC juhtimine UPnP ja HTTP kaudu · Seadista failide jagamine[CR]Luba Zeroconf · Konfigureeri AirPlay"
 
 msgctxt "#31411"
 msgid "First run help...."
-msgstr "Esimese kasutuse abi...."
+msgstr "Esmakasutuse abi...."
+
+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 "See märge näitab, et selle akna taga on peidus lisaseadete menüü.  Menüü nägemiseks vajutage puldil või klaviatuuril vasakut noolt või suunake hiir selle märke kohale. [CR][CR]Vajutage dialoogi sulgemiseks \"Ok\". See ei avane uuesti."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Lokaalsed subtiitrid on saadaval"
 
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
@@ -466,15 +514,15 @@ msgstr "Olemasolevad[CR]grupid"
 
 msgctxt "#31509"
 msgid "Channel Group"
-msgstr "Kanali grupp"
+msgstr "Kanalite grupp"
 
 msgctxt "#31510"
 msgid "Timer Set"
-msgstr "Ajastuse seade"
+msgstr "Taimer määratud"
 
 msgctxt "#31511"
 msgid "Channel Options"
-msgstr "Kanali valik"
+msgstr "Kanalite valikud"
 
 msgctxt "#31901"
 msgid "36 Hour Forecast"
index d71604b..eaf5e89 100644 (file)
@@ -88,6 +88,10 @@ msgctxt "#31033"
 msgid "Info"
 msgstr "Tiedot"
 
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Toiminnot"
+
 msgctxt "#31040"
 msgid "Now Playing"
 msgstr "Nyt toistetaan"
@@ -108,6 +112,10 @@ msgctxt "#31045"
 msgid "REWIND"
 msgstr "KELAUS TAAKSEPÄIN"
 
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "HAKEE"
+
 msgctxt "#31049"
 msgid "End Time"
 msgstr "Päättymisaika"
@@ -368,6 +376,14 @@ msgctxt "#31356"
 msgid "Download Subtitles"
 msgstr "Lataa tekstitykset"
 
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "Katso 2D:nä"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Vaihda tilaa"
+
 msgctxt "#31362"
 msgid "Enabled"
 msgstr "Käytössä"
@@ -420,6 +436,10 @@ msgctxt "#31411"
 msgid "First run help...."
 msgstr "Ensimmäisen käynnistyksen apu..."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Paikallinen tekstitys saatavilla"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Valitse XBMC-käyttäjäprofiili[CR]kirjautuaksesi sisään"
@@ -500,6 +520,10 @@ msgctxt "#31951"
 msgid "PICTURES"
 msgstr "KUVAT"
 
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "LIVE-TV"
+
 msgctxt "#31953"
 msgid "VIDEOS"
 msgstr "VIDEOT"
diff --git a/addons/skin.confluence/language/French (Canada)/strings.po b/addons/skin.confluence/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..a05f205
--- /dev/null
@@ -0,0 +1,609 @@
+# XBMC Media Center language file
+# Addon Name: Confluence
+# Addon id: skin.confluence
+# Addon Provider: Jezz_X, 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#31000"
+msgid "Change Your"
+msgstr "Changement des"
+
+msgctxt "#31003"
+msgid "Power Options"
+msgstr "Options d'alimentation"
+
+msgctxt "#31004"
+msgid "Working..."
+msgstr "En cours…"
+
+msgctxt "#31005"
+msgid "Hide Information"
+msgstr "Masquer les informations"
+
+msgctxt "#31006"
+msgid "View Options"
+msgstr "Options d'affichage"
+
+msgctxt "#31008"
+msgid "Full screen"
+msgstr "Plein écran"
+
+msgctxt "#31009"
+msgid "Total Duration"
+msgstr "Durée totale"
+
+msgctxt "#31022"
+msgid "Music - Files"
+msgstr "Musique - Fichiers"
+
+msgctxt "#31023"
+msgid "Playing"
+msgstr "Lecture"
+
+msgctxt "#31024"
+msgid "Page"
+msgstr "Page"
+
+msgctxt "#31025"
+msgid "Items"
+msgstr "Objets"
+
+msgctxt "#31026"
+msgid "Misc Options"
+msgstr "Options diverses"
+
+msgctxt "#31027"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "#31028"
+msgid "Poster Wrap"
+msgstr "Galerie d'affiches"
+
+msgctxt "#31029"
+msgid "Fanart"
+msgstr "Fanart"
+
+msgctxt "#31031"
+msgid "Pic Thumbs"
+msgstr "Vignettes"
+
+msgctxt "#31032"
+msgid "Image Wrap"
+msgstr "Galerie d'images"
+
+msgctxt "#31033"
+msgid "Info"
+msgstr "Info"
+
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Actions"
+
+msgctxt "#31040"
+msgid "Now Playing"
+msgstr "Lecture en cours"
+
+msgctxt "#31042"
+msgid "PLAYING"
+msgstr "LECTURE"
+
+msgctxt "#31043"
+msgid "PAUSED"
+msgstr "PAUSE"
+
+msgctxt "#31044"
+msgid "FAST FORWARD"
+msgstr "AVANCE RAPIDE"
+
+msgctxt "#31045"
+msgid "REWIND"
+msgstr "RETOUR RAPIDE"
+
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "RECHERCHE"
+
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Préréglages de visualisation"
+
+msgctxt "#31049"
+msgid "End Time"
+msgstr "Échéance"
+
+msgctxt "#31050"
+msgid "Sort: Ascending"
+msgstr "Tri : Ascendant"
+
+msgctxt "#31051"
+msgid "Sort: Descending"
+msgstr "Tri : Descendant"
+
+msgctxt "#31055"
+msgid "Open playlist"
+msgstr "Ouvrir une playliste"
+
+msgctxt "#31056"
+msgid "Save playlist"
+msgstr "Sauvegarder la playliste"
+
+msgctxt "#31057"
+msgid "Close playlist"
+msgstr "Fermer la playliste"
+
+msgctxt "#31058"
+msgid "System music files"
+msgstr "Fichiers musique du système"
+
+msgctxt "#31059"
+msgid "Current playlist"
+msgstr "Playliste actuelle"
+
+msgctxt "#31060"
+msgid "This file is stacked, select the part you want to play from."
+msgstr "Ce fichier est empilé, sélectionnez le point à partir duquel vous souhaitez lire."
+
+msgctxt "#31061"
+msgid "Current Selected"
+msgstr "Sélection actuelle"
+
+msgctxt "#31101"
+msgid "Home screen options"
+msgstr "Options de l'écran d'accueil"
+
+msgctxt "#31102"
+msgid "Background"
+msgstr "Arrière-plan"
+
+msgctxt "#31103"
+msgid "Show \"Paused\" in picture slide show"
+msgstr "Afficher « Pause » dans le diaporama d'images"
+
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Lire les bandes annonces dans une fenêtre [COLOR=grey3](Ecran d'information sur la vidéo uniquement)[/COLOR]"
+
+msgctxt "#31106"
+msgid "Miscellaneous options"
+msgstr "Options diverses"
+
+msgctxt "#31107"
+msgid "Hide Flagging read from video filenames [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
+msgstr "Masquer l'indicateur de fichiers vidéo déjà vus [COLOR=grey3](Blu-ray, HD-DVD)[/COLOR]"
+
+msgctxt "#31108"
+msgid "Hide Main Menu Buttons"
+msgstr "Masquer les boutons du menu principal"
+
+msgctxt "#31109"
+msgid "Enable Custom Background"
+msgstr "Activer l'arrière-plan personnalisé"
+
+msgctxt "#31110"
+msgid "Background path:"
+msgstr "Chemin de l'arrière-plan :"
+
+msgctxt "#31111"
+msgid "Hide"
+msgstr "Masquer"
+
+msgctxt "#31112"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "#31116"
+msgid "Show Recently added Albums"
+msgstr "Afficher les albums récemment ajoutés"
+
+msgctxt "#31117"
+msgid "Show Recently added Videos"
+msgstr "Afficher les vidéos récemment ajoutées"
+
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Page d'accueil du sous menu Programmes"
+
+msgctxt "#31119"
+msgid "Hide Background Fanart"
+msgstr "Masquer le Fanart d’arrière-plan"
+
+msgctxt "#31124"
+msgid "Show Background \"Now Playing\" Video"
+msgstr "Afficher la vidéo en cours de lecture en arrière-plan"
+
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Afficher la visualisation en cours de lecture en arrière-plan"
+
+msgctxt "#31126"
+msgid "Play TV theme songs in video library (TvTunes add-on)"
+msgstr "Jouer les génériques TV dans la médiathèque vidéo (extension TvTunes)"
+
+msgctxt "#31127"
+msgid "TvTunes"
+msgstr "TvTunes"
+
+msgctxt "#31128"
+msgid "Lyrics"
+msgstr "Paroles"
+
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Cacher Fanart en mode plein ecran"
+
+msgctxt "#31132"
+msgid "Lyrics Add-on"
+msgstr "Extension gérant les paroles"
+
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Page d'accueil du sous menu Vidéos"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Page d'accueil du sous menu Musiques"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Page d'accueil du sous menu Images"
+
+msgctxt "#31140"
+msgid "Music OSD"
+msgstr "Menu à l'écran Musique"
+
+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"
+
+msgctxt "#31203"
+msgid "Choose Your Song"
+msgstr "Choisissez votre chanson"
+
+msgctxt "#31205"
+msgid "Lyrics Source"
+msgstr "Source pour les paroles"
+
+msgctxt "#31206"
+msgid "Found"
+msgstr "Trouvé"
+
+msgctxt "#31207"
+msgid "Find More Items"
+msgstr "Trouver plus d'éléments"
+
+msgctxt "#31208"
+msgid "Upcoming Episodes"
+msgstr "Prochains épisodes"
+
+msgctxt "#31300"
+msgid "Current Temp"
+msgstr "Température actuelle"
+
+msgctxt "#31301"
+msgid "Last Updated"
+msgstr "Dernière mise à jour"
+
+msgctxt "#31303"
+msgid "Data provider"
+msgstr "Fournisseur de données"
+
+msgctxt "#31307"
+msgid "Hide Fanart"
+msgstr "Sans Fanart"
+
+msgctxt "#31308"
+msgid "Movie Details"
+msgstr "Détails du film"
+
+msgctxt "#31309"
+msgid "Memory Used:"
+msgstr "Mémoire utilisée :"
+
+msgctxt "#31310"
+msgid "Track Number"
+msgstr "Numéro de la piste"
+
+msgctxt "#31311"
+msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set"
+msgstr "Image Fanart[CR][CR]Indisponible[CR][CR] Cliquer sur le bouton pour définir"
+
+msgctxt "#31312"
+msgid "Current Scraper"
+msgstr "Scraper actuel"
+
+msgctxt "#31313"
+msgid "Choose a Scraper"
+msgstr "Choisissez un scraper"
+
+msgctxt "#31314"
+msgid "Content Scanning Options"
+msgstr "Options de scan de contenu"
+
+msgctxt "#31317"
+msgid "Set Fanart Path"
+msgstr "Définir le chemin du Fanart"
+
+msgctxt "#31319"
+msgid "Selected Profile"
+msgstr "Profil sélectionné"
+
+msgctxt "#31320"
+msgid "Last Logged In"
+msgstr "Dernière connexion"
+
+msgctxt "#31321"
+msgid "Karaoke Song Selector"
+msgstr "Sélecteur chanson karaoké"
+
+msgctxt "#31322"
+msgid "Aired"
+msgstr "Diffusé"
+
+msgctxt "#31325"
+msgid "Playlist Options"
+msgstr "Options de playliste"
+
+msgctxt "#31326"
+msgid "Created"
+msgstr "Créé"
+
+msgctxt "#31327"
+msgid "Resolution"
+msgstr "Résolution"
+
+msgctxt "#31328"
+msgid "Recently Added"
+msgstr "Récemment ajouté"
+
+msgctxt "#31329"
+msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]"
+msgstr "[B]Minuterie réglée ![/B] [COLOR=grey2] - Arrêt automatique du système dans[/COLOR]"
+
+msgctxt "#31330"
+msgid "Click button to play[CR][CR]Movie trailer"
+msgstr "Cliquer sur le bouton pour lire[CR][CR]la bande-annonce du film"
+
+msgctxt "#31331"
+msgid "Album Details"
+msgstr "Détails de l'album"
+
+msgctxt "#31351"
+msgid "Pause"
+msgstr "Pause"
+
+msgctxt "#31352"
+msgid "Stop"
+msgstr "Stop"
+
+msgctxt "#31353"
+msgid "Fast Forward"
+msgstr "Avance rapide"
+
+msgctxt "#31354"
+msgid "Rewind"
+msgstr "Retour rapide"
+
+msgctxt "#31355"
+msgid "Movie menu"
+msgstr "Menu film"
+
+msgctxt "#31356"
+msgid "Download Subtitles"
+msgstr "Télécharger les sous-titres"
+
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "Voir en 2D"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Changer de mode"
+
+msgctxt "#31362"
+msgid "Enabled"
+msgstr "Activé"
+
+msgctxt "#31390"
+msgid "Skin default"
+msgstr "Par défaut"
+
+msgctxt "#31391"
+msgid "Skin default with no Caps"
+msgstr "Par défaut sans majuscule"
+
+msgctxt "#31392"
+msgid "Arial based"
+msgstr "Basé sur Arial"
+
+msgctxt "#31400"
+msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES APPARENCE[/B][CR][CR]Changer le thème · Définir la langue et la région · Changer les options de liste de fichiers[CR]Paramétrer l'économiseur d'écran"
+
+msgctxt "#31401"
+msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES VIDÉO[/B][CR][CR]Gérer votre médiathèque vidéo · Définir les options de lecture · Changer les options des listes de vidéos[CR]Définir la police des sous-titres"
+
+msgctxt "#31402"
+msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES MUSIQUE[/B][CR][CR]Gérer votre médiathèque musique · Définir les options de lecture · Changer les options des listes de musique[CR]Paramétrer les soumissions de chansons · Définir les options karaoké"
+
+msgctxt "#31403"
+msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES IMAGE[/B][CR][CR]Définir les options de lecture · Configurer les diaporamas"
+
+msgctxt "#31404"
+msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES MÉTÉO[/B][CR][CR]Choisir trois villes pour lesquelles recueillir les informations météorologiques"
+
+msgctxt "#31406"
+msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
+msgstr "[B]CONFIGURATION DES PARAMÈTRES SYSTÈME[/B][CR][CR]Configurer et calibrer les écrans · Configurer les sorties audio · Configurer les périphériques de contrôle[CR]Définir les options de gestion d'énergie · Activer le débogage · Configurer la sécurité"
+
+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]CONFIGURATION DES EXTENSIONS[/B][CR][CR]Gérer les extensions installées · Recherche et installation d'extensions depuis xbmc.org[CR]Modifier les paramètres des extensions"
+
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]CONFIGURER RÉGLAGES TV[/B][CR][CR]Changer les informations de plein écran · Gérer les données du Guide des Programmes"
+
+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]CONFIGURATION DES PARAMÈTRES DE SERVICE[/B][CR][CR]Configurer le contrôle de XBMC en UPnP et HTTP · Configurer le partage de fichiers[CR]Activer Zeroconf · Configurer AirPlay"
+
+msgctxt "#31411"
+msgid "First run help...."
+msgstr "Aide au démarrage"
+
+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 "#31420"
+msgid "Login"
+msgstr "Connexion"
+
+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"
+
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Afficher ou masquer l'écran de connexion au démarrage"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Choisir le profil qui sera utilisé lors du démarrage quand l'écran de connexion est désactivé"
+
+msgctxt "#31501"
+msgid "Scheduled Time"
+msgstr "Heure prévue"
+
+msgctxt "#31502"
+msgid "Live TV"
+msgstr "TV Direct"
+
+msgctxt "#31503"
+msgid "Add Group"
+msgstr "Ajouter un Groupe"
+
+msgctxt "#31504"
+msgid "Rename Group"
+msgstr "Renommer le Groupe"
+
+msgctxt "#31505"
+msgid "Delete Group"
+msgstr "Supprimer le Groupe"
+
+msgctxt "#31506"
+msgid "Available[CR]Groups"
+msgstr "Groupes[CR]disponibles"
+
+msgctxt "#31509"
+msgid "Channel Group"
+msgstr "Groupe des Chaînes"
+
+msgctxt "#31510"
+msgid "Timer Set"
+msgstr "Réglage de la minuterie"
+
+msgctxt "#31511"
+msgid "Channel Options"
+msgstr "Options des Chaînes"
+
+msgctxt "#31901"
+msgid "36 Hour Forecast"
+msgstr "Prévisions sur 36 heures"
+
+msgctxt "#31902"
+msgid "Hourly Forecast"
+msgstr "Prévisions heure par heure"
+
+msgctxt "#31903"
+msgid "Weekend Forecast"
+msgstr "Prévisions pour le weekend"
+
+msgctxt "#31904"
+msgid "10 Day Forecast"
+msgstr "Prévisions sur 10 jours"
+
+msgctxt "#31905"
+msgid "Forecast"
+msgstr "Prévisions"
+
+msgctxt "#31908"
+msgid "Chance of Precipitation"
+msgstr "Risque de pluie"
+
+msgctxt "#31909"
+msgid "Fetching forecast info..."
+msgstr "Récupération des prévisions météo…"
+
+msgctxt "#31910"
+msgid "Map & Alerts"
+msgstr "Carte & Alertes"
+
+msgctxt "#31950"
+msgid "WEATHER"
+msgstr "METEO"
+
+msgctxt "#31951"
+msgid "PICTURES"
+msgstr "IMAGES"
+
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "TV DIRECT"
+
+msgctxt "#31953"
+msgid "VIDEOS"
+msgstr "VIDEOS"
+
+msgctxt "#31954"
+msgid "MOVIES"
+msgstr "FILMS"
+
+msgctxt "#31955"
+msgid "TV SHOWS"
+msgstr "SERIES TV"
+
+msgctxt "#31956"
+msgid "MUSIC"
+msgstr "MUSIQUE"
+
+msgctxt "#31957"
+msgid "PROGRAMS"
+msgstr "PROGRAMMES"
+
+msgctxt "#31958"
+msgid "PLAY DISC"
+msgstr "LIRE LE DISQUE"
+
+msgctxt "#31959"
+msgid "SYSTEM"
+msgstr "SYSTEME"
index f966b7b..f2b47a5 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Sous-titres locaux disponibles"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Connexion"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Montrer ou cacher l'écran de connexion au démarrage."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Sélectionner le profil utilisé au démarrage lorsque l'écran de connexion est désactivée."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Heure prévue"
index 4f42a4a..6735f3a 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "OSD de Video"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de configuración"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Atallos"
@@ -310,7 +314,7 @@ msgstr "Agochar cartel"
 
 msgctxt "#31308"
 msgid "Movie Details"
-msgstr "Detalles da Película"
+msgstr "Detalles do Filme"
 
 msgctxt "#31309"
 msgid "Memory Used:"
@@ -378,7 +382,7 @@ msgstr "[B]Temporizador estabrecido![/B] [COLOR=grey2] - Apagado automático de
 
 msgctxt "#31330"
 msgid "Click button to play[CR][CR]Movie trailer"
-msgstr "Prema o botón para reproducir[CR][CR]Trailer da Película"
+msgstr "Prema o botón para reproducir[CR][CR]Trailer do filme"
 
 msgctxt "#31331"
 msgid "Album Details"
@@ -402,7 +406,7 @@ msgstr "Atrás"
 
 msgctxt "#31355"
 msgid "Movie menu"
-msgstr "Menú de Película"
+msgstr "Menú do filme"
 
 msgctxt "#31356"
 msgid "Download Subtitles"
@@ -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 lapela significa que existe un menú deshabilitado nesta xanela que contén máis opcións para esta sección. Para acceder ó menú, ir a esquerda co control remoto o teclado ou move o punteiro do rato até a lapela. [CR][CR]Preme en \"Feito\" para pechar a caixa de diálogo. Non aparecera máis."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Subtítulo local dispoñíbel"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Selecione o seu perfíl de usuario de XBMC[CR]para ingresar e continuar"
index 508af91..2de5a81 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Lokaler Untertitel verfügbar"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Anmeldung"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Wähle Dein XBMC Benutzer Profil[CR]Zum Anmelden und Fortfahren"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Den Anmeldebildschirm beim Start anzeigen oder verstecken"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Profil, dass beim Start verwendet werden soll wenn der Anmeldebildschirm deaktiviert ist."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Geplante Zeit"
@@ -578,7 +590,7 @@ msgstr "FILME"
 
 msgctxt "#31955"
 msgid "TV SHOWS"
-msgstr "TV SERIEN"
+msgstr "TV-SERIEN"
 
 msgctxt "#31956"
 msgid "MUSIC"
index ac1dc2d..ee747ad 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Διαθέσιμος υπότιτλος τοπικά"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Σύνδεση"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Επιλέξτε προφίλ χρήστη για το XBMC[CR]για να συνδεθείτε και να συνεχίσετε"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Εμφάνιση ή απόκρυψη της οθόνης σύνδεσης κατά την εκκίνηση."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Επιλογή του προφίλ που θα χρησιμοποιηθεί κατά την εκκίνηση αν έχει απενεργοποιηθεί η οθόνη σύνδεσης."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Προγραμματισμένη Ώρα"
index 853cafe..f1b0160 100644 (file)
@@ -168,6 +168,10 @@ msgctxt "#31103"
 msgid "Show \"Paused\" in picture slide show"
 msgstr "הראה \"הפסקה\" במצגת תמונות"
 
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "נגן קדימונים בחלון"
+
 msgctxt "#31106"
 msgid "Miscellaneous options"
 msgstr "אפשרות שונות"
@@ -204,6 +208,10 @@ msgctxt "#31117"
 msgid "Show Recently added Videos"
 msgstr "הצג וידאו שנוסף לאחרונה"
 
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "תת-תפריט תוכנות במסך הבית"
+
 msgctxt "#31119"
 msgid "Hide Background Fanart"
 msgstr "החבא הצגת פאנארט ברקע"
@@ -228,6 +236,18 @@ msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "תוספי מילים לשירים"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "תת-תפריט וידאו במסך הבית"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "תת-תפריט מוסיקה במסך הבית"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "תת-תפריט תמונות במסך הבית"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "מוזיקה OSD"
@@ -236,6 +256,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "וידאו OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "רמת הגדרות"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "קיצורים"
@@ -436,10 +460,22 @@ msgctxt "#31411"
 msgid "First run help...."
 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 "בחר בפרופיל משתמש XBMC [CR]שלך כדי להתחבר ולהמשיך"
 
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "בחר פרופיל שישמש כברירת מחדל"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "זמן מתוזמן"
index f80595c..007c556 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Helyi felirat elérhető"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Bejelentkezés"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Bejelentkezési képernyő mutatása vagy elrejtése indításkor"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Profil kiválasztása amely használatra kerül ha a bejelentkező képernyő ki van kapcsolva."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Ütemezett időzítés"
index c95cbe9..998ab2e 100644 (file)
@@ -212,6 +212,10 @@ msgctxt "#31117"
 msgid "Show Recently added Videos"
 msgstr "Mostra i Video Aggiunti di Recente"
 
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Sotto-menu Programmi nella home page"
+
 msgctxt "#31119"
 msgid "Hide Background Fanart"
 msgstr "Nascondi i Fanart sullo sfondo"
@@ -220,6 +224,10 @@ msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
 msgstr "Mostra nello Sfondo il nome del Video \"In Riproduzione\" "
 
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Mostra la visualizzazione nello sfondo \"In Riproduzione\""
+
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
 msgstr "Riproduci le sigle TV (sonore) nell'archivio video (add-on TvTunes)"
@@ -240,6 +248,18 @@ msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "Add-on Testi"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Sotto-menu Video nella home page"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Sotto-menu musica nella home page"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Sotto-menu Immagini nella home page"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "OSD Musica"
@@ -248,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "OSD Video"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Livello impostazioni"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Collegamenti"
@@ -440,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]CONFIGURA GLI ADD-ONS[/B][CR][CR]Gestisci i tuoi Add-ons installati · Cerca ed installa gli Add-ons da xbmc.org[CR]Modifica le impostazioni degli Add-ons"
 
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]CONFIGURA IMPOSTAZIONI TV[/B][CR][CR]Cambia impostazioni schermo intero · Gestisci impostazioni dati EPG"
+
 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]CONFIGURA IMPOSTAZIONI DI RETE[/B][CR][CR]Imposta il controllo di XBMC via UPnP e HTTP · Configura la condivisione dei file[CR]Abilita Zeroconf · Configura AirPlay"
@@ -448,6 +476,14 @@ msgctxt "#31411"
 msgid "First run help...."
 msgstr "Aiuto primo avvio...."
 
+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 "Questa linguetta significa che c'è un menu off a lato di questa finestra che contiene ulteriori opzioni per questa sezione. Per accedere al menu, naviga a sinistra con il tuo telecomando o tastiera, o posiziona il mouse sulla linguetta. [CR][CR]Clicca \"Ok\" per chiudere questa informazione. Non apparirà nuovamente."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Sottotitolo locale disponibile"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Scegli il tuo profilo utente di XBMC[CR]per fare il login e continuare"
index 2569a0b..b89e36e 100644 (file)
@@ -212,6 +212,10 @@ msgctxt "#31117"
 msgid "Show Recently added Videos"
 msgstr "最近追加されたビデオを表示"
 
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "ホーム画面「プログラム」のサブメニュー"
+
 msgctxt "#31119"
 msgid "Hide Background Fanart"
 msgstr "背景のファンアートを隠す"
@@ -244,6 +248,18 @@ msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "歌詞アドオン"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "ホーム画面「ビデオ』のサブメニュー"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "ホーム画面「ミュージック』のサブメニュー"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "ホーム画面「ピクチャ』のサブメニュー"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "ミュージック OSD"
@@ -448,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]アドオン設定[/B][CR][CR]インストール済みアドオン管理 - xbmc.orgからアドオンを検索・インストール[CR]アドオン設定変更"
 
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]TV設定[/B][CR][CR]フルスクリーン情報の変更 · EPGデータ設定"
+
 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]サービス設定[/B][CR][CR]UPnP や HTTP 経由による XBMC 操作設定 · ファイル共有設定[CR]Zeroconf を有効に · AirPlay 設定"
@@ -456,10 +476,30 @@ msgctxt "#31411"
 msgid "First run help...."
 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]このダイアログを閉じるのには、「OK」をクリックしてください。このメッセージは再び表示されません。"
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "ローカルの字幕を利用できます"
+
+msgctxt "#31420"
+msgid "Login"
+msgstr "ログイン"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "XBMC ユーザープロファイルを選択して[CR]ログインしてください"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "起動時にログイン画面を表示または非表示する"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "ログイン画面が無効になっている状態の時、起動時に使用されるプロファイルを選択してください。"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "タイマー予約時間"
index dfc44ef..c6f2d78 100644 (file)
@@ -462,7 +462,7 @@ msgstr "[B]시스템 설정[/B][CR][CR]화면 설정 및 조정 · 오디오 출
 
 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]ì\95 ë\93\9cì\98¨ 설정[/B][CR][CR]설치한 추가기능 관리 · xbmc.org에서 추가기능 찾기 및 설치[CR]추가기능 설정 변경"
+msgstr "[B]ì\94ê°\80기ë\8a¥ 설정[/B][CR][CR]설치한 추가기능 관리 · xbmc.org에서 추가기능 찾기 및 설치[CR]추가기능 설정 변경"
 
 msgctxt "#31409"
 msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "로컬 자막 있음"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "로그인"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "로그인할 XBMC 사용자 프로파일을[CR]선택하고 계속하세요"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "시작시 로그인 화면을 보이거나 숨깁니다."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "시작시 로그인 화면을 표시하지 않을 때 사용할 프로파일을 선택합니다."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "예약 시간"
index f9ac8e0..fcf9d93 100644 (file)
@@ -224,6 +224,10 @@ msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
 msgstr "Rādīt fonā video \"Tagad atskaņo\""
 
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Rādīt Fona \"Now Playing\" vizualizāciju"
+
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
 msgstr "Atskaņot TV dziesmas tēmas video bibliotēkā (TvTunes )"
@@ -236,10 +240,26 @@ msgctxt "#31128"
 msgid "Lyrics"
 msgstr "Lirika"
 
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Slēpt Fanart pilnekrāna vizualizāciju"
+
 msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "Dziesmu vārdu papildinājums"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr " Video Mājas lapas Apakš-iestatijumi"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Mūzikas Mājas lapas Apakš-iestatijumi"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr " Foto Mājas lapas Apakš-iestatijumi"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "Mūzikas OSD"
@@ -248,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Iestatījumi"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Saīsnes"
@@ -412,14 +436,70 @@ msgctxt "#31392"
 msgid "Arial based"
 msgstr "Virszemes bāzēts"
 
+msgctxt "#31400"
+msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver"
+msgstr "[B]KONFIGURĒT IZSKATA IESTATĪJUMUS[/B][CR][CR]Mainīt apvalku · Iestatīt valodu un reģionu · Mainīt failu saraksta opcijas[CR]Iestatīt ekrānsaudzētāju"
+
+msgctxt "#31401"
+msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts"
+msgstr "[B]KONFIGURĒT VIDEO IESTATĪJUMUS[/B][CR][CR]Pārvaldīt savu video bibliotēku · Iestatīt video atskaņošanas opcijas · Mainīt video saraksta opcijas[CR]Iestatīt subtitru fontus"
+
+msgctxt "#31402"
+msgid "[B]CONFIGURE MUSIC SETTINGS[/B][CR][CR]Manage your music library · Set music playback options · Change music listing options[CR]Setup song submission · Set karaoke options"
+msgstr "[B]KONFIGURĒT MŪZIKAS IESTATĪJUMUS[/B][CR][CR]Pārvaldīt savu mūzikas bibiliotēku · Iestatīt mūzikas atskaņošanas opcijas · Mainīt mūzikas saraksta opcijas[CR]Uzstādīt dziesmas iesniegšanu · Iestatīt karaoke opcijas"
+
+msgctxt "#31403"
+msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows"
+msgstr "[B]KONFIGURĒT ATTĒLA IESTATĪJUMUS[/B][CR][CR]Iestatīt attēlu saraksta opcijas · Konfigurēt slīdītes"
+
+msgctxt "#31404"
+msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information"
+msgstr "[B]KONFIGURĒT LAIKAPSTĀKĻU IESTATĪJUMUS[/B][CR][CR]Iestatīt trīs pilsētas, par kurām savākt laikapstākļu informāciju"
+
+msgctxt "#31406"
+msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
+msgstr "[B]KONFIGURĒT SISTĒMAS IESTATĪJUMUS[/B][CR][CR]Uzstādīt un kalibrēt displejus · Konfigurēt audio izvadi · Uzstādīt pults kontroli[CR]Iestatīt enerģijas taupības opcijas · Ieslēgt atkļūdošanu · Uzstādīt piekļuves atslēgu"
+
+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]KONFIGURĒT PIELIKUMUS[/B][CR][CR]Pārvaldīt savus uzstādītos pielikumus · Pārlūkot un uzstādīt pielikumus no xbmc.org[CR]Mainīt pielikuma iestatījumus"
+
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]KONFIGURĒT TV IESTATĪJUMUS[/B][CR][CR]Mainīt pilnekrāna info · Pārvaldīt EPG datu iestatījumus"
+
+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]KONFIGURĒT SERVISA IESTATĪJUMUS[/B][CR][CR]Uzstādīt XBMC kontroli no UPnP un HTTP · Konfigurēt failu koplietošanu[CR]Ieslēgt Zeroconf · Konfigurēt AirPlay"
+
 msgctxt "#31411"
 msgid "First run help...."
 msgstr "Palīdzība pirmo reizi darbinot..."
 
+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 "Šī cilne nozīmē, ka aiz šī loga malas ir izvēlne, kas satur šīs sekcijas ekstra opcijas. Lai piekļūtu izvēlnei, navigējiet ar pulti vai tastatūru pa kreisi, vai novietojiet peles kursoru virs cilnes. [CR][CR]Spiediet \"Ok\", lai aizvērtu šo dialogu. Tas vairs neparādīsies."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Pieejami lokālie subtitri"
+
+msgctxt "#31420"
+msgid "Login"
+msgstr "Pieteikšanās"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Izvēlaties savi XBMC lietotāja profilu[CR]lai pieslēgtos un turpinātu"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Startējot rādīt vai paslēpt pieteikšanās logu."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Izvēlieties profilu, kas tiks izmantots startējot, kad pieteikšanās logs ir atslēgts. "
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Ieplānotais laiks"
index 7f01b02..eab6555 100644 (file)
@@ -126,11 +126,11 @@ msgstr "Pabaigos laikas"
 
 msgctxt "#31050"
 msgid "Sort: Ascending"
-msgstr "Rūš.: Didėjimo tvarka"
+msgstr "Rodyti: Didėjimo tvarka"
 
 msgctxt "#31051"
 msgid "Sort: Descending"
-msgstr "Rūš.: Mažėjimo tvarka"
+msgstr "Rodyti: Mažėjimo tvarka"
 
 msgctxt "#31055"
 msgid "Open playlist"
@@ -438,7 +438,7 @@ msgstr "Arial pagrindu"
 
 msgctxt "#31400"
 msgid "[B]CONFIGURE APPEARANCE SETTINGS[/B][CR][CR]Change the skin · Set language and region · Change file listing options[CR]Set up a screensaver"
-msgstr "[B][COLOR=blue]TEMINĖS IŠVAIZDOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Pakeisti teminę išvaizdą · Nustatyti kalbą ir regioną · Konfiguruoti failų sąrašą"
+msgstr "[B][COLOR=blue]TEMINĖS IŠVAIZDOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Pakeisti teminę išvaizdą · Nustatyti kalbą ir regioną · Konfigūruoti failų sąrašą"
 
 msgctxt "#31401"
 msgid "[B]CONFIGURE VIDEO SETTINGS[/B][CR][CR]Manage your video library · Set video playback options · Change video listing options[CR]Set subtitle fonts"
@@ -458,7 +458,7 @@ msgstr "[B][COLOR=blue]ORŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Nustatyti t
 
 msgctxt "#31406"
 msgid "[B]CONFIGURE SYSTEM SETTINGS[/B][CR][CR]Setup and calibrate displays · Configure audio output · Setup remote controls[CR]Set power saving options · Enable debugging · Setup master lock"
-msgstr "[B][COLOR=blue]SISTEMOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Nustatyti ekrano kalibravimą · Nustatyti audio išėjimą · Nustatyti energijos taupymo galimybes[CR]Nustatyti distancinį valdiklį · Įgalinti derinimą · Sąrankos 'Meistras' blokavimas"
+msgstr "[B][COLOR=blue]SISTEMOS PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Nustatyti ekrano kalibravimą · Nustatyti garso išėjimą · Nustatyti energijos taupymo galimybes[CR]Nustatyti distancinį valdiklį · Įgalinti derinimą · Sąrankos [B][COLOR=red]Master lock[/COLOR][/B] toliau vadinama kaip [B][COLOR=blue]Spec. apsauga[/COLOR][/B] blokavimas"
 
 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"
@@ -466,7 +466,7 @@ msgstr "[B][COLOR=blue]PRIEDŲ PARAMETRŲ NUSTATYMAI[/COLOR][/B][CR][CR]Nustatyt
 
 msgctxt "#31409"
 msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
-msgstr "[B]][COLOR=blue]KONFIGŪRUOTI TV NUSTATYMUS[/COLOR][/B][CR][CR]Pakeisti viso ekrano info · Tvarkyti EPG duomenų parametrus"
+msgstr "[B][COLOR=blue]KONFIGŪRUOTI TV NUSTATYMUS[/COLOR][/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"
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Prieinami lokaliniai subtitrai"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Prisijungti"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Pasirinkite XBMC vartotojo profilį[CR]įeikite į sistemą ir tęskite."
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Rodyti arba slėpti prisijungimo ekraną paleidimo metu."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Pasirinkite profilį, kuris bus naudojamas paleidžiant kai prisijungimo ekranas yra išjungtas."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Suplanuotas laikas"
@@ -562,11 +574,11 @@ msgstr "ORAI"
 
 msgctxt "#31951"
 msgid "PICTURES"
-msgstr "PAVEIKSLĖLIAI"
+msgstr "NUOTRAUKOS"
 
 msgctxt "#31952"
 msgid "LIVE TV"
-msgstr "TIESIOGINIS TV"
+msgstr "LIVE TV"
 
 msgctxt "#31953"
 msgid "VIDEOS"
index 5a92df4..69b09ec 100644 (file)
@@ -484,9 +484,21 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Znaleziono napisy na dysku"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Logowanie"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
-msgstr "Wybierz profil użytkownika"
+msgstr "Wybierz profil użytkownika[CR]do zalogowania"
+
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Pokazuj lub ukrywaj ekran logowania podczas uruchamiania."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Wybierz profil, który będzie używany, w przypadku wyłączenia ekranu logowania."
 
 msgctxt "#31501"
 msgid "Scheduled Time"
index 4134b5a..00db131 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Legenda local disponível"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Login"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Mostrar ou Ocultar a tela de login ao inicializar."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Selecione o perfil que será utilizado na inicialização quando a tela de login estiver desativada."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Agendamento"
index d4355b5..499d1b5 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Legenda local disponível"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Início de Sessão"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Exibir ou ocultar o ecrã de início de sessão ao iniciar o XBMC"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Seleccionar o perfil que será usado de início quando o ecrã de início de sessão não é exibido"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Tempo Agendado"
index f4cf67d..51ec80a 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Доступны локальные субтитры"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Вход"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Выберите профиль пользователя XBMC,[CR]чтобы войти в систему"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Показать или скрыть экран входа при запуске."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Выбрать профиль, используемый при запуске, если экран входа отключен."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Запланированное время"
index 109fc23..53a6697 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Úroveň nastavení"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Odkazy"
@@ -476,10 +480,26 @@ 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 "Táto záložka zvýrazňuje, že sa na bočnej strane okna nachádza skryté menu. Aby ste sa k nemu dostali, kurzorovými tlačidlami na vašom diaľkovom ovládači alebo klávesnici choďte doľava, prípadne umiestnite kurzor myši ponad túto záložku. [CR][CR]Kliknutím na tlačidlo \"Ok\" sa zavrie toto dialógové okno. V budúcnosti sa už nezobrazí."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Dostupné lokálne titulky"
+
+msgctxt "#31420"
+msgid "Login"
+msgstr "Prihlásiť"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Prihlásenie užívateľa[CR]Pokračujte výberom profilu"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Zobraziť alebo skryť prihlasovaciu obrazovku pri štarte."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Zvoľte profil, ktorý bude použitý pri štarte, ak je prihlasovacia obrazovka vypnutá."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Naplánovaný čas"
index 1e56268..46b9fdb 100644 (file)
@@ -26,7 +26,7 @@ msgstr "Zapusti"
 
 msgctxt "#31004"
 msgid "Working..."
-msgstr "Počakajte..."
+msgstr "Počakajte ..."
 
 msgctxt "#31005"
 msgid "Hide Information"
@@ -74,7 +74,7 @@ msgstr "Plakati"
 
 msgctxt "#31029"
 msgid "Fanart"
-msgstr "Ozadja"
+msgstr "Grafike"
 
 msgctxt "#31031"
 msgid "Pic Thumbs"
@@ -118,7 +118,7 @@ msgstr "ISKANJE"
 
 msgctxt "#31048"
 msgid "Visualisation Presets"
-msgstr "Predloge vizualizacije"
+msgstr "Prednastavitve vizualizacije"
 
 msgctxt "#31049"
 msgid "End Time"
@@ -154,7 +154,7 @@ msgstr "Trenutni seznam predvajanja"
 
 msgctxt "#31060"
 msgid "This file is stacked, select the part you want to play from."
-msgstr "Ta datoteka je razdeljena. Izberite del za predvajanje."
+msgstr "Ta datoteka je združena. Izberite del za predvajanje."
 
 msgctxt "#31061"
 msgid "Current Selected"
@@ -222,7 +222,7 @@ msgstr "Skrij ozadja"
 
 msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
-msgstr "V ozadjnu prikaži video \"Trenutno predvajam\""
+msgstr "V ozadju prikaži video \"Trenutno predvajam\""
 
 msgctxt "#31125"
 msgid "Show Background \"Now Playing\" Visualisation"
@@ -248,6 +248,18 @@ msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "Dodatek besedil pesmi"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Podmeni videa na domačem oknu"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Podmeni glasbe na domačem oknu"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Podmeni slik na domačem oknu"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "Glasbeni OSD"
@@ -298,7 +310,7 @@ msgstr "Ponudnik"
 
 msgctxt "#31307"
 msgid "Hide Fanart"
-msgstr "Skrij ozadje"
+msgstr "Skrij grafike"
 
 msgctxt "#31308"
 msgid "Movie Details"
@@ -314,7 +326,7 @@ msgstr "Številka pesmi"
 
 msgctxt "#31311"
 msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set"
-msgstr "Ozadje[CR][CR]Ni na voljo[CR][CR] Kliknite na gumb in ga nastavite"
+msgstr "Grafika[CR][CR]Ni na voljo[CR][CR] Kliknite na gumb za nastavitev"
 
 msgctxt "#31312"
 msgid "Current Scraper"
@@ -326,11 +338,11 @@ msgstr "Izberi ponudnika"
 
 msgctxt "#31314"
 msgid "Content Scanning Options"
-msgstr "Možnosti iskanja vsebine"
+msgstr "Možnosti pregledovanja vsebin"
 
 msgctxt "#31317"
 msgid "Set Fanart Path"
-msgstr "Nastavi pot ozadij"
+msgstr "Nastavi pot grafik"
 
 msgctxt "#31319"
 msgid "Selected Profile"
@@ -366,7 +378,7 @@ msgstr "Nedavno dodano"
 
 msgctxt "#31329"
 msgid "[B]Timer set![/B] [COLOR=grey2] - System auto shutdown in[/COLOR]"
-msgstr "[B]Zakasnitev nastavljena![/B] [COLOR=grey2] - Sistem se bo izključil po[/COLOR]"
+msgstr "[B]Zakasnitev nastavljena![/B] [COLOR=grey2] - Sistem se bo izklopil po[/COLOR]"
 
 msgctxt "#31330"
 msgid "Click button to play[CR][CR]Movie trailer"
@@ -402,7 +414,7 @@ msgstr "Prenesi podnapise"
 
 msgctxt "#31360"
 msgid "Watch as 2D"
-msgstr "2D Ogled"
+msgstr "Glej kot 2D"
 
 msgctxt "#31361"
 msgid "Change mode"
@@ -438,7 +450,7 @@ msgstr "[B]PRILAGODITE NASTAVITVE GLASBE[/B][CR][CR]Upravljajte s knjižnico gla
 
 msgctxt "#31403"
 msgid "[B]CONFIGURE PICTURE SETTINGS[/B][CR][CR]Set picture listing options · Configure slideshows"
-msgstr "[B]PRILAGODITE NASTAVITVE SLIK[/B][CR][CR]Spremenite možnosti seznamov · Nastavite diaprojekcije slik"
+msgstr "[B]PRILAGODITE NASTAVITVE SLIK[/B][CR][CR]Spremenite možnosti seznamov · Nastavite projekcije slik"
 
 msgctxt "#31404"
 msgid "[B]CONFIGURE WEATHER SETTINGS[/B][CR][CR]Set three cities to collect weather information"
@@ -458,24 +470,36 @@ msgstr "[B]PRILAGODITVE NASTAVITVE TV[/B][CR][CR]Spremenite informacije v celoza
 
 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]PRILAGODITE NASTAVITVE STORITEV[/B][CR][CR]Nastavite upravljanje XBMC preko UPnP in HTTP · Nastavite deljenje datotek[CR]Vključite Zeroconf · Prilagodite AirPlay"
+msgstr "[B]PRILAGODITE NASTAVITVE STORITEV[/B][CR][CR]Nastavite upravljanje XBMC-ja preko UPnP-ja in HTTP-ja · Nastavite deljenje datotek[CR]Vključite Zeroconf · Prilagodite AirPlay"
 
 msgctxt "#31411"
 msgid "First run help...."
-msgstr "Pomoč ob prvem zagonu..."
+msgstr "Pomoč ob prvem zagonu ..."
 
 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 zavihek nakazuje, da se tu skriva meni z dodatnimi možnostmi trenutnega pogleda.  Za dostop do menija pritisnite levo na vašem daljinskem upravljalcu ali tipkovnici ali pa postavite miško na zavihek. [CR][CR]Kliknite \"Ok\", da zaprete to okno. Ne bo se več prikazalo."
+msgstr "Ta zavihek nakazuje, da se tu skriva meni z dodatnimi možnostmi trenutnega pogleda. Za dostop do menija pritisnite levo na vašem daljinskem upravljalniku ali tipkovnici, ali pa postavite miško na zavihek. [CR][CR]Kliknite \"Ok\", da zaprete to okno. Ne bo se več prikazalo."
 
 msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Na voljo so krajevni podnapisi"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Prijava"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Izberite vaš XBMC uporabniški profil[CR]za prijavo in nadaljujte"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Ob zagonu prikaži ali skrij okno za prijavo."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Izberite profil, ki bo uporabljen ob zagonu, ko je okno za prijavo onemogočeno."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Načrtovan čas"
@@ -522,7 +546,7 @@ msgstr "Urna napoved"
 
 msgctxt "#31903"
 msgid "Weekend Forecast"
-msgstr "Tedenska napoved"
+msgstr "Vikend napoved"
 
 msgctxt "#31904"
 msgid "10 Day Forecast"
@@ -538,7 +562,7 @@ msgstr "Možnost padavin"
 
 msgctxt "#31909"
 msgid "Fetching forecast info..."
-msgstr "Prenašam vremenske informacije..."
+msgstr "Prenašam vremenske informacije ..."
 
 msgctxt "#31910"
 msgid "Map & Alerts"
index 5ac540a..4f321f6 100644 (file)
@@ -88,6 +88,10 @@ msgctxt "#31033"
 msgid "Info"
 msgstr "Info"
 
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Acciones"
+
 msgctxt "#31040"
 msgid "Now Playing"
 msgstr "Reproduciendo"
@@ -108,6 +112,14 @@ msgctxt "#31045"
 msgid "REWIND"
 msgstr "RETROCESO"
 
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "BUSCANDO"
+
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Visualizaciones preestablecidas"
+
 msgctxt "#31049"
 msgid "End Time"
 msgstr "Hora de finalización"
@@ -160,6 +172,10 @@ msgctxt "#31103"
 msgid "Show \"Paused\" in picture slide show"
 msgstr "Mostrar \"Pausa\" en modo presentación de imágenes"
 
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Reproducir avances en ventana [COLOR=grey3](Sólo diálogo de información de video)[/COLOR] "
+
 msgctxt "#31106"
 msgid "Miscellaneous options"
 msgstr "Otras opciones"
@@ -196,6 +212,10 @@ msgctxt "#31117"
 msgid "Show Recently added Videos"
 msgstr "Mostrar últimos videos añadidos"
 
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Submenú de programas de la pantalla principal"
+
 msgctxt "#31119"
 msgid "Hide Background Fanart"
 msgstr "Ocultar el Fanart del fondo"
@@ -204,6 +224,10 @@ msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
 msgstr "Mostrar video en reproducción en el fondo"
 
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Mostrar visualización \"Reproduciendo ahora\" en el fondo"
+
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
 msgstr "Reproducir canciones de series en la colección de video (complemento TvTunes)"
@@ -216,10 +240,26 @@ msgctxt "#31128"
 msgid "Lyrics"
 msgstr "Letras"
 
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Ocultar Fanart con visualizaciones a pantalla completa"
+
 msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "Add-on para letras"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Submenú de videos de la pantalla principal"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Submenú de música de la pantalla principal"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Submenú de fotos de la pantalla principal"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "OSD de música"
@@ -228,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "OSD de video"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de ajustes"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Accesos directos"
@@ -368,6 +412,14 @@ msgctxt "#31356"
 msgid "Download Subtitles"
 msgstr "Descargar subtítulos"
 
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "Mirar como 2D"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Cambiar modo"
+
 msgctxt "#31362"
 msgid "Enabled"
 msgstr "Activado"
@@ -412,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]Configura los ADD-ONS[/B][CR][CR]Administra tus addons instalados · Busca e instala addons desde xbmc.org[CR]Modifica la configuración de los addons"
 
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]CONFIGURAR OPCIONES DE TV[/B][CR][CR]Cambiar info pantalla completa ·  Especificar datos de guía EPG"
+
 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]AJUSTES DE SERVICIOS[/B][CR][CR]Ajustes para controlar XBMC por UPnP y HTTP - Ajustes de compartición de archivos[CR]Activar Zeroconf - Ajustes de AirPlay"
@@ -420,10 +476,30 @@ msgctxt "#31411"
 msgid "First run help...."
 msgstr "Ayuda para la primera vez..."
 
+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ú oculto 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. Este no volverá a aparecer."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Subtitulo local disponible"
+
+msgctxt "#31420"
+msgid "Login"
+msgstr "Ingresar"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Selecciona tu perfil de usuario de XBMC[CR]para ingresar y continuar"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Mostrar u ocultar la pantalla de ingreso al iniciar."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Seleccionar el perfil que se usará en el inicio cuando la pantalla de ingreso esta deshabilitada."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Hora programada"
@@ -491,3 +567,43 @@ msgstr "Obteniendo información meteorológica..."
 msgctxt "#31910"
 msgid "Map & Alerts"
 msgstr "Mapa y alertas"
+
+msgctxt "#31950"
+msgid "WEATHER"
+msgstr "CLIMA"
+
+msgctxt "#31951"
+msgid "PICTURES"
+msgstr "FOTOS"
+
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "TV EN VIVO"
+
+msgctxt "#31953"
+msgid "VIDEOS"
+msgstr "VIDEOS"
+
+msgctxt "#31954"
+msgid "MOVIES"
+msgstr "PELICULAS"
+
+msgctxt "#31955"
+msgid "TV SHOWS"
+msgstr "SERIES DE TV"
+
+msgctxt "#31956"
+msgid "MUSIC"
+msgstr "MUSICA"
+
+msgctxt "#31957"
+msgid "PROGRAMS"
+msgstr "PROGRAMAS"
+
+msgctxt "#31958"
+msgid "PLAY DISC"
+msgstr "REPRODUCCIÓN DE DISCOS"
+
+msgctxt "#31959"
+msgid "SYSTEM"
+msgstr "SISTEMA"
diff --git a/addons/skin.confluence/language/Spanish (Venezuela)/strings.po b/addons/skin.confluence/language/Spanish (Venezuela)/strings.po
new file mode 100644 (file)
index 0000000..f428344
--- /dev/null
@@ -0,0 +1,517 @@
+# XBMC Media Center language file
+# Addon Name: Confluence
+# Addon id: skin.confluence
+# Addon Provider: Jezz_X, 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: Spanish (Venezuela) (http://www.transifex.com/projects/p/xbmc-main/language/es_VE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_VE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#31000"
+msgid "Change Your"
+msgstr "Cambia tu"
+
+msgctxt "#31003"
+msgid "Power Options"
+msgstr "Opciones de apagado"
+
+msgctxt "#31004"
+msgid "Working..."
+msgstr "Cargando..."
+
+msgctxt "#31005"
+msgid "Hide Information"
+msgstr "Ocultar información"
+
+msgctxt "#31006"
+msgid "View Options"
+msgstr "Ver opciones"
+
+msgctxt "#31008"
+msgid "Full screen"
+msgstr "Pantalla completa"
+
+msgctxt "#31009"
+msgid "Total Duration"
+msgstr "Duración total"
+
+msgctxt "#31022"
+msgid "Music - Files"
+msgstr "Música - Archivos"
+
+msgctxt "#31023"
+msgid "Playing"
+msgstr "Reproduciendo"
+
+msgctxt "#31024"
+msgid "Page"
+msgstr "Página"
+
+msgctxt "#31025"
+msgid "Items"
+msgstr "Items"
+
+msgctxt "#31026"
+msgid "Misc Options"
+msgstr "Opciones misceláneas"
+
+msgctxt "#31027"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "#31028"
+msgid "Poster Wrap"
+msgstr "Afiche"
+
+msgctxt "#31029"
+msgid "Fanart"
+msgstr "Fanart"
+
+msgctxt "#31031"
+msgid "Pic Thumbs"
+msgstr "Miniaturas"
+
+msgctxt "#31032"
+msgid "Image Wrap"
+msgstr "Imagen"
+
+msgctxt "#31033"
+msgid "Info"
+msgstr "Información"
+
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Acciones"
+
+msgctxt "#31042"
+msgid "PLAYING"
+msgstr "REPRODUCIENDO"
+
+msgctxt "#31043"
+msgid "PAUSED"
+msgstr "PAUSA"
+
+msgctxt "#31044"
+msgid "FAST FORWARD"
+msgstr "ADELANTAR"
+
+msgctxt "#31045"
+msgid "REWIND"
+msgstr "RETROCEDER"
+
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "BUSCANDO"
+
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Ajustes de Visualización"
+
+msgctxt "#31050"
+msgid "Sort: Ascending"
+msgstr "Orden: Ascendente"
+
+msgctxt "#31051"
+msgid "Sort: Descending"
+msgstr "Orden: Descendente"
+
+msgctxt "#31055"
+msgid "Open playlist"
+msgstr "Abrir lista de reproducción"
+
+msgctxt "#31056"
+msgid "Save playlist"
+msgstr "Guardar lista de reproducción"
+
+msgctxt "#31057"
+msgid "Close playlist"
+msgstr "Cerrar lista de reproducción"
+
+msgctxt "#31058"
+msgid "System music files"
+msgstr "Archivos de música del sistema"
+
+msgctxt "#31059"
+msgid "Current playlist"
+msgstr "Lista de reproducción actual"
+
+msgctxt "#31061"
+msgid "Current Selected"
+msgstr "Selección actual"
+
+msgctxt "#31101"
+msgid "Home screen options"
+msgstr "Opciones de pantalla inicial"
+
+msgctxt "#31102"
+msgid "Background"
+msgstr "Fondo"
+
+msgctxt "#31103"
+msgid "Show \"Paused\" in picture slide show"
+msgstr "Mostrar \"Pausado\" en presentación de imágenes"
+
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Reproducir trailers en una ventana [COLOR=grey3](Unicamente Diálogo de Información de Video)[/COLOR]"
+
+msgctxt "#31106"
+msgid "Miscellaneous options"
+msgstr "Opciones misceláneas"
+
+msgctxt "#31108"
+msgid "Hide Main Menu Buttons"
+msgstr "Ocultar botones del Menú Principal"
+
+msgctxt "#31109"
+msgid "Enable Custom Background"
+msgstr "Habilitar fondo customizado"
+
+msgctxt "#31110"
+msgid "Background path:"
+msgstr "Ruta de archivos de fondo:"
+
+msgctxt "#31111"
+msgid "Hide"
+msgstr "Ocultar"
+
+msgctxt "#31112"
+msgid "Options"
+msgstr "Opciones"
+
+msgctxt "#31116"
+msgid "Show Recently added Albums"
+msgstr "Mostrar Albumes agregados recientemente"
+
+msgctxt "#31117"
+msgid "Show Recently added Videos"
+msgstr "Mostrar Videos agregados recientemente"
+
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Sub menu de Programas en la Página Principal"
+
+msgctxt "#31119"
+msgid "Hide Background Fanart"
+msgstr "Ocultar fondo de Fanart"
+
+msgctxt "#31126"
+msgid "Play TV theme songs in video library (TvTunes add-on)"
+msgstr "Reproducir canciones del show de TV en la librería de video (TvTunes add-on)"
+
+msgctxt "#31127"
+msgid "TvTunes"
+msgstr "TvTunes"
+
+msgctxt "#31128"
+msgid "Lyrics"
+msgstr "Letras de canciones"
+
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Ocultar \"Fanart\" en visualización en pantalla completa"
+
+msgctxt "#31132"
+msgid "Lyrics Add-on"
+msgstr "Add-on para letras de canciones"
+
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Sub menu de Videos en la Página Principal"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Sub menu de Música en la Página Principal"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Sub menu de Imágenes en la Página Principal"
+
+msgctxt "#31140"
+msgid "Music OSD"
+msgstr "OSD de Música"
+
+msgctxt "#31141"
+msgid "Video OSD"
+msgstr "OSD de Video"
+
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de configuración"
+
+msgctxt "#31200"
+msgid "Shortcuts"
+msgstr "Accesos directos"
+
+msgctxt "#31203"
+msgid "Choose Your Song"
+msgstr "Selecciona tu canción"
+
+msgctxt "#31205"
+msgid "Lyrics Source"
+msgstr "Origen de letras de canciones"
+
+msgctxt "#31206"
+msgid "Found"
+msgstr "Encontrado"
+
+msgctxt "#31207"
+msgid "Find More Items"
+msgstr "Buscar más"
+
+msgctxt "#31208"
+msgid "Upcoming Episodes"
+msgstr "Episodios por venir "
+
+msgctxt "#31300"
+msgid "Current Temp"
+msgstr "Temperatura actual"
+
+msgctxt "#31301"
+msgid "Last Updated"
+msgstr "Ultima vez actualizado"
+
+msgctxt "#31303"
+msgid "Data provider"
+msgstr "Proveedor de datos"
+
+msgctxt "#31307"
+msgid "Hide Fanart"
+msgstr "Ocultar Fanart"
+
+msgctxt "#31308"
+msgid "Movie Details"
+msgstr "Detalles de la pélicula"
+
+msgctxt "#31309"
+msgid "Memory Used:"
+msgstr "Memoria usada:"
+
+msgctxt "#31310"
+msgid "Track Number"
+msgstr "Número de canción"
+
+msgctxt "#31311"
+msgid "Fanart image[CR][CR]Unavailable[CR][CR] Click button to set"
+msgstr "Imagen Fanart [CR][CR]No Disponible[CR][CR] Presiona el botón para seleccionar"
+
+msgctxt "#31312"
+msgid "Current Scraper"
+msgstr "\"Scraper\" actual"
+
+msgctxt "#31313"
+msgid "Choose a Scraper"
+msgstr "Seleccionar un \"Scraper\""
+
+msgctxt "#31314"
+msgid "Content Scanning Options"
+msgstr "Opciones de búsqueda de contenido"
+
+msgctxt "#31317"
+msgid "Set Fanart Path"
+msgstr "Seleccionar ruta de Fanart"
+
+msgctxt "#31319"
+msgid "Selected Profile"
+msgstr "Perfil seleccionado"
+
+msgctxt "#31320"
+msgid "Last Logged In"
+msgstr "Login más reciente"
+
+msgctxt "#31322"
+msgid "Aired"
+msgstr "Al aire"
+
+msgctxt "#31325"
+msgid "Playlist Options"
+msgstr "Opciones de lista de reproducción"
+
+msgctxt "#31326"
+msgid "Created"
+msgstr "Creado"
+
+msgctxt "#31327"
+msgid "Resolution"
+msgstr "Resolución"
+
+msgctxt "#31328"
+msgid "Recently Added"
+msgstr "Agregado recientemente"
+
+msgctxt "#31330"
+msgid "Click button to play[CR][CR]Movie trailer"
+msgstr "Presiona el botón para reproducir[CR][CR]Trailer de película"
+
+msgctxt "#31331"
+msgid "Album Details"
+msgstr "Detalles del disco"
+
+msgctxt "#31351"
+msgid "Pause"
+msgstr "Pausa"
+
+msgctxt "#31352"
+msgid "Stop"
+msgstr "Detener"
+
+msgctxt "#31353"
+msgid "Fast Forward"
+msgstr "Adelantar"
+
+msgctxt "#31354"
+msgid "Rewind"
+msgstr "Retroceder"
+
+msgctxt "#31355"
+msgid "Movie menu"
+msgstr "Menú de Película"
+
+msgctxt "#31356"
+msgid "Download Subtitles"
+msgstr "Descargas subtítulos"
+
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "Ver en 2D"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Cambiar modo"
+
+msgctxt "#31362"
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgctxt "#31390"
+msgid "Skin default"
+msgstr "Predeterminado del tema"
+
+msgctxt "#31391"
+msgid "Skin default with no Caps"
+msgstr "Predeterminado del tema sin mayúsculas"
+
+msgctxt "#31392"
+msgid "Arial based"
+msgstr "Basado en \"Arial\""
+
+msgctxt "#31411"
+msgid "First run help...."
+msgstr "Ayuda inicial...."
+
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Subtitulo local disponible"
+
+msgctxt "#31421"
+msgid "Select your XBMC user Profile[CR]to login and continue"
+msgstr "Selecciona tu perfil de usuario de XBMC[CR]para ingresar y continuar"
+
+msgctxt "#31502"
+msgid "Live TV"
+msgstr "TV en Vivo"
+
+msgctxt "#31503"
+msgid "Add Group"
+msgstr "Agregar Grupo"
+
+msgctxt "#31504"
+msgid "Rename Group"
+msgstr "Cambiar nombre del Grupo"
+
+msgctxt "#31505"
+msgid "Delete Group"
+msgstr "Eliminar Grupo"
+
+msgctxt "#31506"
+msgid "Available[CR]Groups"
+msgstr "Grupos[CR]Disponibles"
+
+msgctxt "#31509"
+msgid "Channel Group"
+msgstr "Grupo de Canales"
+
+msgctxt "#31511"
+msgid "Channel Options"
+msgstr "Opciones del Canal"
+
+msgctxt "#31901"
+msgid "36 Hour Forecast"
+msgstr "Predicción de 36 horas"
+
+msgctxt "#31902"
+msgid "Hourly Forecast"
+msgstr "Predicción por hora"
+
+msgctxt "#31903"
+msgid "Weekend Forecast"
+msgstr "Predicción semanal"
+
+msgctxt "#31904"
+msgid "10 Day Forecast"
+msgstr "Predicción de 10 días"
+
+msgctxt "#31905"
+msgid "Forecast"
+msgstr "Predicción del clima"
+
+msgctxt "#31908"
+msgid "Chance of Precipitation"
+msgstr "Chance de precipitación"
+
+msgctxt "#31909"
+msgid "Fetching forecast info..."
+msgstr "Obteniendo información del clima"
+
+msgctxt "#31910"
+msgid "Map & Alerts"
+msgstr "Mapas y Alertas"
+
+msgctxt "#31950"
+msgid "WEATHER"
+msgstr "CLIMA"
+
+msgctxt "#31951"
+msgid "PICTURES"
+msgstr "IMAGENES"
+
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "TV EN VIVO"
+
+msgctxt "#31953"
+msgid "VIDEOS"
+msgstr "VIDEOS"
+
+msgctxt "#31954"
+msgid "MOVIES"
+msgstr "PELICULAS"
+
+msgctxt "#31955"
+msgid "TV SHOWS"
+msgstr "SHOWS DE TV"
+
+msgctxt "#31956"
+msgid "MUSIC"
+msgstr "MUSICA"
+
+msgctxt "#31957"
+msgid "PROGRAMS"
+msgstr "PROGRAMAS"
+
+msgctxt "#31958"
+msgid "PLAY DISC"
+msgstr "REPRODUCIR DISCO"
+
+msgctxt "#31959"
+msgid "SYSTEM"
+msgstr "SISTEMA"
index 497f333..7a9607e 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Subtítulo local disponible"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Inicio de sesión"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Mostrar u ocultar la pantalla de inicio de sesión al inicio."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Seleccionar el perfil que será usado en el inicio cuando no se muestra la pantalla de inicio de sesión."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Hora programada"
index 04c96dd..222b942 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "Video-OSD"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Inställningsnivå"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Genvägar"
@@ -476,10 +480,26 @@ 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 "Denna flik visar att det finns en meny till sidan om detta fönster som innehåller extra inställningar för denna sektion. För att nå menyn, navigera med din fjärrkontroll, tangentbord eller placera din mus ovanför fliken. [CR][CR]Klicka på \"OK\" för att stänga denna dialogruta. Den kommer inte att visas igen."
 
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr "Lokal undertext tillgänglig"
+
+msgctxt "#31420"
+msgid "Login"
+msgstr "Logga in"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Välj din XBMC användarprofil[CR]för att logga in och fortsätta"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Visa eller dölj inloggningsskärmen vid start."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Välj den profil som skall användas vid start då inloggningsskärmen inte visas."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Schemalagd tid"
index 6647b33..48c3f11 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Зерунвонҳои маҳаллӣ дастрасанд"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Вуруд"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Барои ворид шудан ва идома додан[CR]профили корбари XBMC-ро интихоб кунед"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Намоиш додан ё пинҳон кардани экрани вуруд дар оғози кори система."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Профилеро, ки дар оғози кори система, ҳангоми ғайрифаъол будани экрани вуруд, истифода мешавад."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Вақти ба нақша гирифта"
index fea5742..a569a80 100644 (file)
@@ -268,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "OSD วิดีโอ"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "ระดับของการตั้งค่า"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "ปุ่มลัด"
@@ -402,7 +406,7 @@ msgstr "ย้อนกลับเร็ว"
 
 msgctxt "#31355"
 msgid "Movie menu"
-msgstr "เมนู ภาพยนต์"
+msgstr "à¹\80มà¸\99ู à¸ à¸²à¸\9eยà¸\99à¸\95รà¹\8c"
 
 msgctxt "#31356"
 msgid "Download Subtitles"
@@ -476,10 +480,26 @@ 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 "#31420"
+msgid "Login"
+msgstr "ลงชื่อเข้าใช้"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "เลือกโปรไฟล์ ผู้ใช้ XBMC ของคุณ[CR]เพื่อเข้าสู่ระบบและดำเนินการต่อไป"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "แสดงหรือซ่อน หน้าจอลงชื่อเข้าใช้เมื่อเริ่มต้น"
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "เลือกโปรไฟล์ที่จะใช้ในตอนเริ่มต้น เมื่อหน้าจอลงชื่อเข้าใช้ถูกปิดการใช้งาน"
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "ระยะเวลาที่กำหนด"
index 4a0b759..afe2567 100644 (file)
@@ -484,10 +484,22 @@ msgctxt "#31413"
 msgid "Local subtitle available"
 msgstr "Yerel altyazı mevcut"
 
+msgctxt "#31420"
+msgid "Login"
+msgstr "Oturum aç"
+
 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"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Başlangıçta oturum açma ekranını göster veya gizle."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Oturum açma ekranı devre dışı olduğunda başlangıçta kullanılacak profilinizi seçin."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Planlanan Saat"
index 3208a66..5a9920c 100644 (file)
@@ -116,6 +116,10 @@ msgctxt "#31046"
 msgid "SEEKING"
 msgstr "ПОШУК"
 
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Налаштування візуалізації"
+
 msgctxt "#31049"
 msgid "End Time"
 msgstr "Час закінчення"
@@ -168,6 +172,10 @@ msgctxt "#31103"
 msgid "Show \"Paused\" in picture slide show"
 msgstr "Показувати \"Пауза\" в режими слайдшоу"
 
+msgctxt "#31104"
+msgid "Play Trailers in a window [COLOR=grey3](Video Information Dialogue Only)[/COLOR]"
+msgstr "Відтворювати трейлери у вікні [COLOR=grey3](лише для вікна відомостей)[/COLOR]"
+
 msgctxt "#31106"
 msgid "Miscellaneous options"
 msgstr "Різні параметри"
@@ -204,6 +212,10 @@ msgctxt "#31117"
 msgid "Show Recently added Videos"
 msgstr "Показувати останнє додане відео"
 
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Підменю програм головного екрану"
+
 msgctxt "#31119"
 msgid "Hide Background Fanart"
 msgstr "Приховувати фанарт на тлі"
@@ -212,6 +224,10 @@ msgctxt "#31124"
 msgid "Show Background \"Now Playing\" Video"
 msgstr "Відтворюване відео на тлі"
 
+msgctxt "#31125"
+msgid "Show Background \"Now Playing\" Visualisation"
+msgstr "Музична візуалізація на тлі"
+
 msgctxt "#31126"
 msgid "Play TV theme songs in video library (TvTunes add-on)"
 msgstr "Грати мелодію серіалу в медіатеці (надбудова TvTunes)"
@@ -224,10 +240,26 @@ msgctxt "#31128"
 msgid "Lyrics"
 msgstr "Тексти"
 
+msgctxt "#31129"
+msgid "Hide Fanart in full screen visualisation"
+msgstr "Приховувати фанарт у повноекранній візуалізації"
+
 msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr "Надбудова текстів пісень"
 
+msgctxt "#31134"
+msgid "Home Page Videos Sub-menu"
+msgstr "Підменю відео головного екрану"
+
+msgctxt "#31135"
+msgid "Home Page Music Sub-menu"
+msgstr "Підменю музики головного екрану"
+
+msgctxt "#31136"
+msgid "Home Page Pictures Sub-menu"
+msgstr "Домашня сторінка Фотографії підменю"
+
 msgctxt "#31140"
 msgid "Music OSD"
 msgstr "OSD музики"
@@ -236,6 +268,10 @@ msgctxt "#31141"
 msgid "Video OSD"
 msgstr "OSD відео"
 
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Рівень налаштувань"
+
 msgctxt "#31200"
 msgid "Shortcuts"
 msgstr "Ярлики"
@@ -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]НАЛАШТУВАННЯ НАДБУДОВ[/B][CR][CR]Керування встановленими надбудовами • Встановлення надбудов з xbmc.org[CR]Зміна налаштувань надбудов"
 
+msgctxt "#31409"
+msgid "[B]CONFIGURE TV SETTINGS[/B][CR][CR]Change full screen info · Manage EPG data settings"
+msgstr "[B]КОНФІГУРАЦІЯ НАЛАШТУВАНЬ ТБ[/B][CR][CR]Змінити інформацію повного екрану · Керувати налаштуваннями даних телегіда"
+
 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]НАЛАШТУВАННЯ ПАРАМЕТРІВ СЛУЖБ[/B][CR][CR]Налаштування керування XBMC за UPnP і HTTP • Налаштування доступу до файлів[CR]Увімкнення Zeroconf • Налаштування AirPlay"
@@ -436,10 +476,30 @@ msgctxt "#31411"
 msgid "First run help...."
 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 "#31420"
+msgid "Login"
+msgstr "Вхід"
+
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
 msgstr "Виберіть профіль користувача XBMC,[CR]щоб увійти до системи"
 
+msgctxt "#31422"
+msgid "Show or hide the login screen at startup."
+msgstr "Показати або приховати екран входу при запуску."
+
+msgctxt "#31423"
+msgid "Select the profile that will be used at startup when the login screen is disabled."
+msgstr "Вибрати профіль, що буде використовуватися при запуску, коли екран входу вимкнено."
+
 msgctxt "#31501"
 msgid "Scheduled Time"
 msgstr "Запланований час"
diff --git a/addons/skin.confluence/media/GlassTitleBar.png b/addons/skin.confluence/media/GlassTitleBar.png
deleted file mode 100644 (file)
index 80781fd..0000000
Binary files a/addons/skin.confluence/media/GlassTitleBar.png and /dev/null differ
index af7ba85..01ddb9e 100644 (file)
Binary files a/addons/skin.confluence/media/dialogheader.png and b/addons/skin.confluence/media/dialogheader.png differ
index 1dc73d7..1d71311 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 1dc73d790015aec1376e2e83ea7bd82e9f3f015a
+Subproject commit 1d71311e4b8e5ff6244c524dd186ceca3a036f06
index cf5f58c..558552d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.dxspectrum"
-  version="1.0.10"
+  version="1.0.14"
   name="DirectX Spectrum"
   provider-name="Team XBMC">
   <extension
@@ -27,6 +27,7 @@
     <summary lang="eu">3D espektro analizatzaile bat biraka erakusten duen bistaratzea</summary>
     <summary lang="fi">Pyörivä 3D-spektrianalysaattori</summary>
     <summary lang="fr">Visualisation affichant un analyseur de spectre 3D en rotation</summary>
+    <summary lang="fr_CA">Visualisation affichant un analyseur de spectre 3D en rotation</summary>
     <summary lang="gl">Visualización que amosa un analizador de espe</summary>
     <summary lang="he">DirectX Spectrum זהו חיזוי אשר מציג סיבובי 3D Spectrum Analyzer</summary>
     <summary lang="hr">Vizualizacija koja prikazuje rotirajući 3D spektralni analizator</summary>
     <description lang="es">DirectX Spectrum es una visualización que muestra un analizador de espectro en 3D girando renderizado con DirectX que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.&#10;Se puede ajustar la altura de las barras, su velocidad, y como son renderizadas (sólido, puntos, malla). Es una visualización que utiliza poca CPU y muy agradable.</description>
     <description lang="es_AR">DirectX Spectrum es una visualización que muestra un analizador de espectro en 3D girando, renderizado con DirectX, que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.&#10;Se puede ajustar la altura de las barras, su velocidad, y como son renderizadas (sólido, puntos, malla). Es una visualización que utiliza poca CPU y muy agradable.</description>
     <description lang="es_MX">Espectro DirectX es una Visualización que muestra un Analizador de Especto en 3D rotando renderizado en DirectX que se mueve al ritmo de la música creando un efecto de onda a través del espectro de la red.&#10;También tiene configuraciones para ajustar la altura de la barra de espectro, su velocidad, y cómo las barras son renderizadas (sólidas, puntos, malla de alambre) y es una buena visualización liviana, de poco uso de cpu que se ve genial.</description>
-    <description lang="et">DirectX Spectrum on visuaal, mis näitab pöörlevat 3D spektraalanalüüsi, mis on renderdatud DirectC keskkonnas ja mis liigub muusika rütmis luues laineefekti üle spektraalvõrgu.&#10;Lisaks on sellel võimalus muuta spektri kõrgust, selle kiirust ja kuidas ribasid renderdatakse (tahkis, punktid, sõrestik). DirectX Spectrum on ilusa väljanägemisega kerge ja väikese protsessorikasutusega visuaal.</description>
+    <description lang="et">DirectX Spectrum on visuaal, mis näitab pöörlevat 3D spektraalanalüüsi, renderdatuna DirectX keskkonnas ja mis liigub muusika rütmis luues laineefekti üle spektraalvõrgu.&#10;Lisaks on sellel võimalus muuta spektri kõrgust, selle kiirust ja kuidas ribasid renderdatakse (tahkis, punktid, sõrestik). DirectX Spectrum on ilusa väljanägemisega kerge ja väikese protsessorikasutusega visuaal.</description>
     <description lang="eu">DirectX Spectrum DIRECTX erabiliaz mugitzen den 3D espektro analizatzaile bat biraka erakusten duen bistaratzea, hau musikarekin erritmoarekin batera efektu berriak sortzen ditu .&#10;Barren garaiera, abiadura eta errenderizazio modua (solidoa, puntuak, ..) doitu daitezke. CPU gutxi erabiltzen duen bistaratze atsegin bat da.</description>
     <description lang="fi">Näyttää pyörivän 3D-spektrianalysaattorin, joka liikkuu musiikin tahdissa tuottaen aaltotehosteen spektrikuvaajaan.&#10;Spektripalkin korkeuden, nopeuden, ja piirtotavan (täytetyt, pisteet, ääriviivat) voi asettaa asetuksista. Spectrum on kevyt visualisointi joka näyttää hyvältä.</description>
     <description lang="fr">DirectX Spectrum est une visualisation affichant un analyseur de spectre 3D en rotation, sous DirectX. Il réagit au rythme de la musique, créant un effet d'onde sur la grille du spectre.&#10;Il propose divers paramètres pour ajuster la hauteur des barres du spectre, la vitesse, et le rendu des barres (plein, en points, en fil de fer). Une visualisation légère, peu gourmande en CPU et agréable à regarder.</description>
+    <description lang="fr_CA">DirectX Spectrum est une visualisation affichant un analyseur de spectre 3D en rotation, sous DirectX. Il réagit au rythme de la musique, créant un effet d'onde sur la grille du spectre.&#10;Il propose divers paramètres pour ajuster la hauteur des barres du spectre, la vitesse, et le rendu des barres (plein, en points, en fil de fer). Une visualisation légère, peu gourmande en CPU et agréable à regarder.</description>
     <description lang="gl">DirectX Spectrum é unha Visualización que amosa un analizador de espectro rederizdo en DirectX que se move ó ritmo da música creando un efecto onda sobre a grella do espectro.&#10;Tamén ten configuracións para axustar a altura da barra do espectro, a súa velocidade e como as barras son renderizadas (sólidas, puntos, malla) e é unha visualización bonita, lixeira e de escaso consumo de CPU.</description>
     <description lang="he">DirectX Spectrum זהו חיזוי אשר מציג סיבובי 3D Spectrum Analyzer עובד דרך DirectX אשר זז לצלילי המוזיקה שיוצר אפקט גלים לרוחב רשת הספקטרום.&#10;יש אפשרות גם להגדיר את גובה פס הספקטרום, את המהירות, ואת התנהגות הפסים (filled, points, wire frame) וזהו חיזוי נחמד קל משקל לא מעמיס על המעבד ונראה נהדר.</description>
     <description lang="hr">DirectX Spectrum je vizualizacija koja prikazuje rotirajući 3D spektralni analizator prikazan u DirectX-u koji se pokreće u ritmu glazbe stvarajući efekt valova u spektralnoj mreži.&#10;Također sadrži i postavke za namještanje visine sprektralnih traka, njihove brzine, i načina na koji su prikazane (popunjeno, točke, žičani okvir). Vizualizacija izgleda sjajno te je malih memorijskih i CPU zahtjeva.</description>
index dd4cc21..11de3be 100644 (file)
@@ -20,6 +20,10 @@ msgctxt "#30000"
 msgid "Mode"
 msgstr "Režim"
 
+msgctxt "#30005"
+msgid "Small"
+msgstr "Malo"
+
 msgctxt "#30006"
 msgid "Default"
 msgstr "Podrazumjevano"
diff --git a/addons/visualization.dxspectrum/resources/language/French (Canada)/strings.po b/addons/visualization.dxspectrum/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..8cfe859
--- /dev/null
@@ -0,0 +1,77 @@
+# XBMC Media Center language file
+# Addon Name: DirectX Spectrum
+# Addon id: visualization.dxspectrum
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Mode"
+msgstr "Mode"
+
+msgctxt "#30001"
+msgid "Filled"
+msgstr "Plein"
+
+msgctxt "#30002"
+msgid "Wireframe"
+msgstr "Fil de fer"
+
+msgctxt "#30003"
+msgid "Points"
+msgstr "Points"
+
+msgctxt "#30004"
+msgid "Bar Height"
+msgstr "Hauteur de barre"
+
+msgctxt "#30005"
+msgid "Small"
+msgstr "Petit"
+
+msgctxt "#30006"
+msgid "Default"
+msgstr "Défaut"
+
+msgctxt "#30007"
+msgid "Big"
+msgstr "Grand"
+
+msgctxt "#30008"
+msgid "Very Big"
+msgstr "Très Grand"
+
+msgctxt "#30009"
+msgid "Speed"
+msgstr "Vitesse"
+
+msgctxt "#30010"
+msgid "Very Slow"
+msgstr "Très Lent"
+
+msgctxt "#30011"
+msgid "Slow"
+msgstr "Lent"
+
+msgctxt "#30012"
+msgid "Default"
+msgstr "Défaut"
+
+msgctxt "#30013"
+msgid "Fast"
+msgstr "Rapide"
+
+msgctxt "#30014"
+msgid "Very Fast"
+msgstr "Très Rapide"
index 0359376..c724d31 100644 (file)
@@ -70,8 +70,8 @@ msgstr "ברירת מחדל"
 
 msgctxt "#30013"
 msgid "Fast"
-msgstr "מהר"
+msgstr "×\9e×\94×\99ר"
 
 msgctxt "#30014"
 msgid "Very Fast"
-msgstr "מהר מאוד"
+msgstr "×\9e×\94×\99ר ×\9e×\90×\95×\93"
index 0b877a3..b676126 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.fishbmc"
-  version="4.0.1"
+  version="4.0.3"
   name="FishBMC"
   provider-name="26elf">
   <extension
@@ -9,9 +9,60 @@
     library_linux="fishbmc.vis"
     library_osx="fishbmc.vis"/>
   <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Визуализацията представя вълни и размиващи ефекти</summary>
+    <summary lang="cs">Vizualizace zobrazující vlny a rozmazané efekty</summary>
+    <summary lang="de">Visualisierung mit Wellen- und Weichzeichnungs-Effekten</summary>
+    <summary lang="el">Οπτικοποίηση προβολής Κυμάτων και Εφέ Θαμπώματος</summary>
     <summary lang="en">Visualisation showing Waves and Blur Effects</summary>
+    <summary lang="es">Visualización que muestra efectos de ondas y desenfoque</summary>
+    <summary lang="et">Laine- ja uduefektidega visuaal</summary>
+    <summary lang="fr_CA">Visualisation à effet de vague et flou</summary>
+    <summary lang="gl">Unha visualización con Ondas e efectos de Desenfoque</summary>
+    <summary lang="hu">A vizualizáció Hullámokat és Elmosás Effekteket mutat.</summary>
+    <summary lang="it">Visualizzazione mostrando Onde e Sfumature</summary>
+    <summary lang="nl">Visualisatie waarbij Golven en Blur effecten worden getoond </summary>
+    <summary lang="pt">Uma visualização com Ondas e Efeitos de Desfocagem</summary>
+    <summary lang="pt_BR">Visualização mostrando Ondas e Efeitos Borrados</summary>
+    <summary lang="sk">Vizualizácia zobrazujúca vlnky a efekty rozmazania</summary>
+    <summary lang="sl">Vizualizacija prikazuje valovanje in učinke zamegljenosti</summary>
+    <summary lang="tg">Таҷассум бо шамоиши мавҷҳо ва таъсирҳои хирагӣ</summary>
+    <summary lang="zh">呈现波浪和模糊效果的可视化效果</summary>
+    <description lang="bg">fishBMC е създадена въз основа на fische - самостоятелен инструмент за визуализиране на звук. Основния принцип е изчертаване на вълнова функция и размиване по предварително определени вектори. В допълнение fische съдържа и разширена функция за засичане на ритъма, което би трябвало да гарантира великолепно визуално изживяване.</description>
+    <description lang="de">fishBMC basiert auf fische, einem eigenständigen Ton-Visualisierungs-Programm. Das Grundprinzip ist: zeichne das Wellen-Spektrum und verwische die Zeichnung entlang festgelegter Vektoren. fische verfügt jedoch auch über eine fortgeschrittene Rhytmus-Erkennung, die ein großartiges visuelles Erlebnis garantiert.</description>
+    <description lang="el">Το fishBMC είναι βασισμένο στο fische, ένα ξεχωριστό εργαλείο ηχητικών οπτικοποιήσεων. Η βασική του αρχή είναι: σχεδίαση μιας κυματομορφής και χρωματισμός της εικόνας κατά μήκος προκαθορισμένων διανυσμάτων. Παρ'όλα αυτά, το fische περιλαμβάνει και ανεπτυγμένες μεθόδους εντοπισμού παλμών, γεγονός που εγγυάται μια εκπληκτική οπτική εμπειρία.</description>
     <description lang="en">fishBMC is based on fische, a standalone sound visualisation tool. The basic principle is: draw the waveform and smear the drawing along predefined vectors. However fische also incorporates advanced beat detection, which really guarantees a great visual experience.</description>
-    <disclaimer>If this breaks anything, the pieces remain yours.</disclaimer>
+    <description lang="es">fishBMC está basado en fische, una herramienta de visualización de sonido. El principio básico es: dibujar la forma de onda y extender a lo largo de vectores predefinidos. Sin embargo, fische también incluye una avanzada detección de ritmos, lo cual garantiza una gran experiencia visual. </description>
+    <description lang="et">fishBMC baseerub fische visualiseerimistööriistal. Põhiprintsiibiks on: joonista laine ja määri see ettenähtud suundades laiali. fische sisaldab lisaks veel edasijõudnud rütmituvastajat, garanteerides nii vaatajale suurepärase elamuse. </description>
+    <description lang="fr_CA">fishBMX est basé sur fische, un outil de visualisation audio autonome. Le principe de base est : dessiner la forme de l'onde et altère le dessin suivant des vecteurs prédéfinis. Cependant fische incorpore aussi une détection améliorée du tempo, ce qui garantie une expérience visuelle de qualité</description>
+    <description lang="gl">fishBMC está baseado en fische, unha ferramenta autónoma de visualización de sons. O principio básico é: debuxar as formas de onda e pintalas ao longo dos vectores predefinidos. E posíbel que fische tamén incorpore detección avanzada de golpes, que realmente garante unha grande experiencia visual.</description>
+    <description lang="hu">fishBMC a fische-n alapul, egy önálló hangvizualizációs eszköz. A fő célkitűzése: a hanghullám kirajzolása és előre megadott vektorok szerinti módosítása. Viszont a fische szintén alkalmaz egy haladó ütemérzékelőt, ami tényleg garantálja a nagyszerű vizuális élményt.</description>
+    <description lang="it">fishBMC si basa su fische, uno strumento di visualizzazione del suono standalone. Il principio di base è: disegnare la forma d'onda e spalmare il disegno lungo i vettori predefiniti. Tuttavia fische incorpora anche il rilevamento di battito avanzato, che garantisce un'ottima esperienza visiva.</description>
+    <description lang="lt">fishBMC is based on fische, a standalone sound visualisation tool. The basic principle is: draw the waveform and smear the drawing along predefined vectors. However fische also incorporates advanced beat detection, which really guarantees a great visual experience.</description>
+    <description lang="nl">FishBMC is gebaseerd op fische, een zelfstandige geluidsvisualisatie tool. Het basis principe is: Teken de golfvorm en veeg de tekening rondom voor ingestelde richting. Echter fische brengt eveneens geavanceerde beat detectie, wat echt een grote visuele beleving garandeerd.</description>
+    <description lang="pt">O fishBMC é baseado no fische, uma ferramenta autónoma de visualização de sons. O princípio básico é desenhar a onda e deformar o desenho através de vectores pré-definidos. No entanto, o fische também incorpora detecção avançada de ritmos, garantindo uma excelente experiência visual.</description>
+    <description lang="pt_BR">fishBMC é baseado no fische, uma ferramenta de visualização de som independente. O princípio básico é: desenhar a forma de onda e esmaecer o desenho ao longo de vetores pré-definidos. Entretanto fische também incorpora detecção avançada de batidas, o que realmente garante uma grande experiência visual.</description>
+    <description lang="sk">fishBMC je založený na fische, samostatnom nástroji na vizualizáciu. Základným princípom je: nakresliť priebeh signálu a rozmazať kresbu pozdĺž predefinovaných vektorov. Navyše fische obsahuje aj pokročilú detekciu rytmu, čo garantuje skutočný vizuálny zážitok.</description>
+    <description lang="sl">fishBMC temelji na fischeu, samostojnem zvočno vizualizacijskem orodju. Osnovno načelo je: nariši valovni način in ga razmaži vzdolž vnaprej določenih vektorjev. Fische prav tako vključuje tudi napredno zaznavanje ritma, ki resnično zagotavlja odlično vizualno izkušnjo.</description>
+    <description lang="tg">fishBMC дар асоси fische, абзори алоҳида барои таҷассуми садо, амал мекунад. Қоидаи асосӣ: кашидани векторҳои мавҷшакл ва бетартиб. Инчунин fische муайянкунии зарбазании иловагии дарунсохтро таъмин менамояд, ки дар ҳақиқат таҷассуми аҷибро замонат медиҳад.</description>
+    <description lang="zh">fishBMC 基于一个独立的声音可视化工具 fische。基本原理是:绘制波型并按预定的顶点涂抹。fische 还采用了先进的节拍检测,从而真正保证了绝佳的视觉体验。</description>
+    <disclaimer lang="bg">Ако "счупи" нещо - парчетата остават за Вас!</disclaimer>
+    <disclaimer lang="de">Für eventuelle Schäden wird keine Haftung übernommen.</disclaimer>
+    <disclaimer lang="el">Αν σπάσει τίποτα, θα σας μείνουν τα κομμάτια.</disclaimer>
+    <disclaimer lang="en">If this breaks anything, the pieces remain yours.</disclaimer>
+    <disclaimer lang="es">Si esto rompe alguna cosa, te puedes quedar con los trozos.</disclaimer>
+    <disclaimer lang="et">kui see midagi lõhub, siis võid tükid endale jätta</disclaimer>
+    <disclaimer lang="fr_CA">Si ça brise, vous gardez les morceaux.</disclaimer>
+    <disclaimer lang="gl">Se isto estraga algunha cousa, pode quedar cas pezas.</disclaimer>
+    <disclaimer lang="hu">Ha ez összetör valamit attól a darabok még a tieid maradnak.</disclaimer>
+    <disclaimer lang="it">se si rompe qualcosa, i cocci sono vostri.</disclaimer>
+    <disclaimer lang="lt">Jei tai sugenda nieko, gabaliukai lieka tavo.</disclaimer>
+    <disclaimer lang="nl">Gebruik maken van deze visualisatie is op eigen risico.</disclaimer>
+    <disclaimer lang="pt">Se isto quebrar alguma coisa, pode ficar com as peças.</disclaimer>
+    <disclaimer lang="pt_BR">se isto quebrar algo, as peças serão suas.</disclaimer>
+    <disclaimer lang="sk">Ak toto niečo rozbije, kúsky vám ostanú.</disclaimer>
+    <disclaimer lang="sl">V primeru, da to karkoli zlomi, koščki ostanejo vaši.</disclaimer>
+    <disclaimer lang="tg">Агар ин чизеро вайрон кунад, шумо қисмҳоро мегиред.</disclaimer>
+    <disclaimer lang="zh">用者责任自负。</disclaimer>
     <platform>linux osx</platform>
   </extension>
 </addon>
index 4e00936..ed74356 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-02:
+        Updated language files from Transifex
+
+2014-01-11:
+        Updated language files from Transifex
+
 2011-02-26:
        Initial release for XBMC 11, based on fische 4
 
diff --git a/addons/visualization.fishbmc/resources/language/Afrikaans/strings.po b/addons/visualization.fishbmc/resources/language/Afrikaans/strings.po
new file mode 100644 (file)
index 0000000..be81fd5
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Afrikaans (http://www.transifex.com/projects/p/xbmc-main/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Laag"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normaal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Hoog"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstreme"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Laag"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normaal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Hoog"
diff --git a/addons/visualization.fishbmc/resources/language/Albanian/strings.po b/addons/visualization.fishbmc/resources/language/Albanian/strings.po
new file mode 100644 (file)
index 0000000..90adfb7
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Albanian (http://www.transifex.com/projects/p/xbmc-main/language/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Poshtë"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Lartë"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstrem"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Poshtë"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Lartë"
diff --git a/addons/visualization.fishbmc/resources/language/Amharic/strings.po b/addons/visualization.fishbmc/resources/language/Amharic/strings.po
new file mode 100644 (file)
index 0000000..c2a0575
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Amharic (http://www.transifex.com/projects/p/xbmc-main/language/am/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: am\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "ዝቅተኛ "
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "መደበኛ "
+
+msgctxt "#30003"
+msgid "High"
+msgstr "ከፍተኛ "
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "ከፍተኛ"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "ዝቅተኛ "
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "መደበኛ "
+
+msgctxt "#30010"
+msgid "High"
+msgstr "ከፍተኛ "
diff --git a/addons/visualization.fishbmc/resources/language/Arabic/strings.po b/addons/visualization.fishbmc/resources/language/Arabic/strings.po
new file mode 100644 (file)
index 0000000..503d4db
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Arabic (http://www.transifex.com/projects/p/xbmc-main/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "الصغرى"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "عادي"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "مرتفع"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "أقصى"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "الصغرى"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "عادي"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "مرتفع"
diff --git a/addons/visualization.fishbmc/resources/language/Azerbaijani/strings.po b/addons/visualization.fishbmc/resources/language/Azerbaijani/strings.po
new file mode 100644 (file)
index 0000000..bcf9f1c
--- /dev/null
@@ -0,0 +1,25 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Azerbaijani (http://www.transifex.com/projects/p/xbmc-main/language/az/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: az\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
diff --git a/addons/visualization.fishbmc/resources/language/Basque/strings.po b/addons/visualization.fishbmc/resources/language/Basque/strings.po
new file mode 100644 (file)
index 0000000..efd43fd
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Basque (http://www.transifex.com/projects/p/xbmc-main/language/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Arrunta"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Handia"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extremoa"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Arrunta"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Handia"
diff --git a/addons/visualization.fishbmc/resources/language/Belarusian/strings.po b/addons/visualization.fishbmc/resources/language/Belarusian/strings.po
new file mode 100644 (file)
index 0000000..ae31f1e
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Belarusian (http://www.transifex.com/projects/p/xbmc-main/language/be/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: be\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Найменшая"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Высокая"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Найлепшая"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Найменшая"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Высокая"
diff --git a/addons/visualization.fishbmc/resources/language/Bosnian/strings.po b/addons/visualization.fishbmc/resources/language/Bosnian/strings.po
new file mode 100644 (file)
index 0000000..74c5468
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Bosnian (http://www.transifex.com/projects/p/xbmc-main/language/bs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bs\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normalno"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Visok"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstremno"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normalno"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Visok"
diff --git a/addons/visualization.fishbmc/resources/language/Bulgarian/strings.po b/addons/visualization.fishbmc/resources/language/Bulgarian/strings.po
new file mode 100644 (file)
index 0000000..f75858d
--- /dev/null
@@ -0,0 +1,57 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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 "Detail [CPU intensive]"
+msgstr "Подробно [натоварва CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Минимално"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Нормално"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Високо"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Изключително"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Скорост [пропуска някои кадри]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Много минимално"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Минимално"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Нормално"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Високо"
diff --git a/addons/visualization.fishbmc/resources/language/Burmese/strings.po b/addons/visualization.fishbmc/resources/language/Burmese/strings.po
new file mode 100644 (file)
index 0000000..736ab5d
--- /dev/null
@@ -0,0 +1,41 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Burmese (http://www.transifex.com/projects/p/xbmc-main/language/my/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: my\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "အနိမ့်စား"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "ပုံမှန်"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "အမြင့်စား"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "အနိမ့်စား"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "ပုံမှန်"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "အမြင့်စား"
diff --git a/addons/visualization.fishbmc/resources/language/Catalan/strings.po b/addons/visualization.fishbmc/resources/language/Catalan/strings.po
new file mode 100644 (file)
index 0000000..8cb158d
--- /dev/null
@@ -0,0 +1,53 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Catalan (http://www.transifex.com/projects/p/xbmc-main/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Baix"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alt"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrem"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Molt baix"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Baix"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alt"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Utilitzeu un arxiu de persistència [inici més ràpid]"
diff --git a/addons/visualization.fishbmc/resources/language/Chinese (Simple)/strings.po b/addons/visualization.fishbmc/resources/language/Chinese (Simple)/strings.po
new file mode 100644 (file)
index 0000000..700bb97
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Chinese (Simple) (http://www.transifex.com/projects/p/xbmc-main/language/zh/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "详细 [CPU 加强型]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "低"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "正常"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "高"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "极好"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "紧张模式 [更多模式的变化]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "快速 [跳过某些帧]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "极低"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "低"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "正常"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "高"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "使用持久性文件 [快速启动]"
diff --git a/addons/visualization.fishbmc/resources/language/Chinese (Traditional)/strings.po b/addons/visualization.fishbmc/resources/language/Chinese (Traditional)/strings.po
new file mode 100644 (file)
index 0000000..1daea91
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Chinese (Traditional) (http://www.transifex.com/projects/p/xbmc-main/language/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "低溫"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "一般"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "高溫"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "最高"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "低溫"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "一般"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "高溫"
diff --git a/addons/visualization.fishbmc/resources/language/Croatian/strings.po b/addons/visualization.fishbmc/resources/language/Croatian/strings.po
new file mode 100644 (file)
index 0000000..daea571
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Croatian (http://www.transifex.com/projects/p/xbmc-main/language/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Niska"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normalan"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Visoka"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstremno"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Niska"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normalan"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Visoka"
diff --git a/addons/visualization.fishbmc/resources/language/Czech/strings.po b/addons/visualization.fishbmc/resources/language/Czech/strings.po
new file mode 100644 (file)
index 0000000..48f522b
--- /dev/null
@@ -0,0 +1,57 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Czech (http://www.transifex.com/projects/p/xbmc-main/language/cs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Podrobnosti [náročné na CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Nízké"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normální"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Vysoké"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Vysoké"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Rychlost [přeskakuje některé snímky]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Velmi nízká"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Nízká"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normální"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Vysoká"
diff --git a/addons/visualization.fishbmc/resources/language/Danish/strings.po b/addons/visualization.fishbmc/resources/language/Danish/strings.po
new file mode 100644 (file)
index 0000000..917e9e8
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Danish (http://www.transifex.com/projects/p/xbmc-main/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Lav"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Høj"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstrem"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Lav"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Høj"
diff --git a/addons/visualization.fishbmc/resources/language/Dutch/strings.po b/addons/visualization.fishbmc/resources/language/Dutch/strings.po
new file mode 100644 (file)
index 0000000..cadf347
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Dutch (http://www.transifex.com/projects/p/xbmc-main/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detail [CPU intensief]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normaal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Hoog"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extreem"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Nerveus modus [meer modus veranderingen]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Snelheid [sla sommige frames over]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Heel laag"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normaal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Hoog"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Gebruik een Persistent bestand [snellere opstart]"
diff --git a/addons/visualization.fishbmc/resources/language/English (US)/strings.po b/addons/visualization.fishbmc/resources/language/English (US)/strings.po
new file mode 100644 (file)
index 0000000..bb456e1
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: English (US) (http://www.transifex.com/projects/p/xbmc-main/language/en_US/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en_US\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Low"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "High"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extreme"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Low"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "High"
diff --git a/addons/visualization.fishbmc/resources/language/English/strings.po b/addons/visualization.fishbmc/resources/language/English/strings.po
new file mode 100644 (file)
index 0000000..1819296
--- /dev/null
@@ -0,0 +1,67 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: English (http://www.transifex.com/projects/p/xbmc-main/language/en/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#settings labels
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr ""
+
+msgctxt "#30001"
+msgid "Low"
+msgstr ""
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr ""
+
+msgctxt "#30003"
+msgid "High"
+msgstr ""
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr ""
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr ""
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr ""
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr ""
+
+msgctxt "#30008"
+msgid "Low"
+msgstr ""
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr ""
+
+msgctxt "#30010"
+msgid "High"
+msgstr ""
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr ""
diff --git a/addons/visualization.fishbmc/resources/language/English/strings.xml b/addons/visualization.fishbmc/resources/language/English/strings.xml
deleted file mode 100644 (file)
index dee2f09..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<strings>
-    <!-- settings labels -->
-    <string id="30000">Detail [CPU intensive]</string>
-    <string id="30001">Low</string>
-    <string id="30002">Normal</string>
-    <string id="30003">High</string>
-    <string id="30004">Extreme</string>
-    <string id="30005">Nervous Mode [more mode changes]</string>
-    <string id="30006">Speed [skip some frames]</string>
-    <string id="30007">Very Low</string>
-    <string id="30008">Low</string>
-    <string id="30009">Normal</string>
-    <string id="30010">High</string>
-    <string id="30011">Use a Persistence File [faster startup]</string>
-</strings>
diff --git a/addons/visualization.fishbmc/resources/language/Esperanto/strings.po b/addons/visualization.fishbmc/resources/language/Esperanto/strings.po
new file mode 100644 (file)
index 0000000..1d417e0
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Esperanto (http://www.transifex.com/projects/p/xbmc-main/language/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Mia Filmoj/Gxenroj"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Nobla"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extreme"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Mia Filmoj/Gxenroj"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Nobla"
diff --git a/addons/visualization.fishbmc/resources/language/Estonian/strings.po b/addons/visualization.fishbmc/resources/language/Estonian/strings.po
new file mode 100644 (file)
index 0000000..aca9910
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Estonian (http://www.transifex.com/projects/p/xbmc-main/language/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detailne [protsessorit koormav]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Madal"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normaalne"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Kõrge"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ülim"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Närviline režiim [rohkem režiimimuutusi]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Kiire [jäta mõned kaadrid vahele]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Väga madal"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Madal"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normaalne"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Kõrge"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Kasuta püsivat faili [kiirem käivitamine]"
diff --git a/addons/visualization.fishbmc/resources/language/Faroese/strings.po b/addons/visualization.fishbmc/resources/language/Faroese/strings.po
new file mode 100644 (file)
index 0000000..39d96c9
--- /dev/null
@@ -0,0 +1,41 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Faroese (http://www.transifex.com/projects/p/xbmc-main/language/fo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Lágt"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Vanligt"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Høgt"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Lágt"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Vanligt"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Høgt"
diff --git a/addons/visualization.fishbmc/resources/language/Finnish/strings.po b/addons/visualization.fishbmc/resources/language/Finnish/strings.po
new file mode 100644 (file)
index 0000000..6210626
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Finnish (http://www.transifex.com/projects/p/xbmc-main/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Alin"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normaali"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Korkea"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Erittäin korkea"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Alin"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normaali"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Korkea"
diff --git a/addons/visualization.fishbmc/resources/language/French (Canada)/strings.po b/addons/visualization.fishbmc/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..ccbf0af
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Détails [ressources élevées]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Bas"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normaux"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Élevés"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrêmes"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Mode énervé [plus de changements de modes}"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Vitesse [saute des images]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Très basse"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Basse"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normale"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Haute"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Utiliser un fichier de persistance [démarrage accéléré]"
diff --git a/addons/visualization.fishbmc/resources/language/French/strings.po b/addons/visualization.fishbmc/resources/language/French/strings.po
new file mode 100644 (file)
index 0000000..45e162a
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: French (http://www.transifex.com/projects/p/xbmc-main/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Haute"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Excellente"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Haute"
diff --git a/addons/visualization.fishbmc/resources/language/Galician/strings.po b/addons/visualization.fishbmc/resources/language/Galician/strings.po
new file mode 100644 (file)
index 0000000..862bb5c
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Galician (http://www.transifex.com/projects/p/xbmc-main/language/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detalle [uso intensivo da CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Baixo"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extremo"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Modo Nervioso [máis trocos de modo]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Velocidade [omitir algúns fotogramas]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Moi Baixo"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Baixo"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Usar un Ficheiro Persistente [arranque rápido]"
diff --git a/addons/visualization.fishbmc/resources/language/German/strings.po b/addons/visualization.fishbmc/resources/language/German/strings.po
new file mode 100644 (file)
index 0000000..69009cf
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: German (http://www.transifex.com/projects/p/xbmc-main/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detail [CPU-intensiv]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Niedrig"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Hoch"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Höchste Qualität"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Nervöser Modus [mehr Modi Änderungen]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Geschwindigkeit [Überspringe einige Frames]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Sehr niedrig"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Tief"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Hoch"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Persistente Datei benutzen [schnellerer Start]"
diff --git a/addons/visualization.fishbmc/resources/language/Greek/strings.po b/addons/visualization.fishbmc/resources/language/Greek/strings.po
new file mode 100644 (file)
index 0000000..75a8609
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Greek (http://www.transifex.com/projects/p/xbmc-main/language/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Λεπτομέρεια [έντονη χρήση επεξεργαστή]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Ελαχ."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Κανονική"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Υψηλή"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ακραία"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Νευρική Λειτουργία [περισσότερες λειτουργικές αλλαγές]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Ταχύτητα [παράλειψη κάποιων καρέ]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Πολύ Χαμηλή"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Ελαχ."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Κανονική"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Υψηλή"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Χρήση Σταθερού Αρχείου [ταχύτερη έναρξη]"
diff --git a/addons/visualization.fishbmc/resources/language/Hebrew/strings.po b/addons/visualization.fishbmc/resources/language/Hebrew/strings.po
new file mode 100644 (file)
index 0000000..a3722a4
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Hebrew (http://www.transifex.com/projects/p/xbmc-main/language/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "נמוך"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "רגיל"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "גבוה"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "קיצוני"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "נמוך"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "רגיל"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "גבוה"
diff --git a/addons/visualization.fishbmc/resources/language/Hindi (Devanagiri)/strings.po b/addons/visualization.fishbmc/resources/language/Hindi (Devanagiri)/strings.po
new file mode 100644 (file)
index 0000000..443bf70
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Hindi (Devanagiri) (http://www.transifex.com/projects/p/xbmc-main/language/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "लो"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "सामान्य"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "उच्च"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "चरम"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "लो"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "सामान्य"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "उच्च"
diff --git a/addons/visualization.fishbmc/resources/language/Hungarian/strings.po b/addons/visualization.fishbmc/resources/language/Hungarian/strings.po
new file mode 100644 (file)
index 0000000..9310647
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Hungarian (http://www.transifex.com/projects/p/xbmc-main/language/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Részlet [CPU intenzív]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normál"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Magas"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrém"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Ideges Mód [több mód váltakozik]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Sebesség [néhány képkocka átugrása]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Nagyon alacsony"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normál"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Magas"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Tárolt fálj használata [gyorsabb indulás]"
diff --git a/addons/visualization.fishbmc/resources/language/Icelandic/strings.po b/addons/visualization.fishbmc/resources/language/Icelandic/strings.po
new file mode 100644 (file)
index 0000000..95c7acc
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Icelandic (http://www.transifex.com/projects/p/xbmc-main/language/is/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: is\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Lágt"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Venjulegt"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Hátt"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Öfgakenndur"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Lágt"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Venjulegt"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Hátt"
diff --git a/addons/visualization.fishbmc/resources/language/Indonesian/strings.po b/addons/visualization.fishbmc/resources/language/Indonesian/strings.po
new file mode 100644 (file)
index 0000000..76a51b0
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Indonesian (http://www.transifex.com/projects/p/xbmc-main/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Video/Aliran"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Tinggi"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstrim"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Video/Aliran"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Tinggi"
diff --git a/addons/visualization.fishbmc/resources/language/Italian/strings.po b/addons/visualization.fishbmc/resources/language/Italian/strings.po
new file mode 100644 (file)
index 0000000..fe7caed
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Italian (http://www.transifex.com/projects/p/xbmc-main/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Dettagli [uso CPU intensivo]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Basso"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normale"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alta"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Estremo"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Velocità [salta più frame]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Molto bassa"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Basso"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normale"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alta"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Usa un file di persistenza [avvio più rapido]"
diff --git a/addons/visualization.fishbmc/resources/language/Japanese/strings.po b/addons/visualization.fishbmc/resources/language/Japanese/strings.po
new file mode 100644 (file)
index 0000000..23a17c4
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Japanese (http://www.transifex.com/projects/p/xbmc-main/language/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "最低気温"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "ノーマル"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "高"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "エクストリーム (高音質)"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "最低気温"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "ノーマル"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "高"
diff --git a/addons/visualization.fishbmc/resources/language/Korean/strings.po b/addons/visualization.fishbmc/resources/language/Korean/strings.po
new file mode 100644 (file)
index 0000000..44091d4
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Korean (http://www.transifex.com/projects/p/xbmc-main/language/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "최저"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "보통"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "높음"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "최대"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "최저"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "보통"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "높음"
diff --git a/addons/visualization.fishbmc/resources/language/Latvian/strings.po b/addons/visualization.fishbmc/resources/language/Latvian/strings.po
new file mode 100644 (file)
index 0000000..c2ad605
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Latvian (http://www.transifex.com/projects/p/xbmc-main/language/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Zems"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normāls"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Augsts"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstrēms"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Zems"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normāls"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Augsts"
diff --git a/addons/visualization.fishbmc/resources/language/Lithuanian/strings.po b/addons/visualization.fishbmc/resources/language/Lithuanian/strings.po
new file mode 100644 (file)
index 0000000..a04d2cf
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Lithuanian (http://www.transifex.com/projects/p/xbmc-main/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Išsamiau [CPU intensyvus]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Žemas"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normalus"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Aukštas"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstremalus"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Nervinis režimas [vis daugiau režimas keisis]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Greitas [praleisti kai kuriuos kadrus]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Labai žemas"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Žemas"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normalus"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Aukštas"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Naudokite išlaikytą failą [greitesnis paleidimas]"
diff --git a/addons/visualization.fishbmc/resources/language/Macedonian/strings.po b/addons/visualization.fishbmc/resources/language/Macedonian/strings.po
new file mode 100644 (file)
index 0000000..4276150
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Macedonian (http://www.transifex.com/projects/p/xbmc-main/language/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Нормален"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "висок"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Екстремно"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Нормален"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "висок"
diff --git a/addons/visualization.fishbmc/resources/language/Maltese/strings.po b/addons/visualization.fishbmc/resources/language/Maltese/strings.po
new file mode 100644 (file)
index 0000000..b1b93ea
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Maltese (http://www.transifex.com/projects/p/xbmc-main/language/mt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mt\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Filmati/Generi"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normali"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Filmati/Atturi"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Estrem"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Filmati/Generi"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normali"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Filmati/Atturi"
diff --git a/addons/visualization.fishbmc/resources/language/Norwegian/strings.po b/addons/visualization.fishbmc/resources/language/Norwegian/strings.po
new file mode 100644 (file)
index 0000000..394e581
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Norwegian (http://www.transifex.com/projects/p/xbmc-main/language/no/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: no\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Lav"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Høy"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstrem"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Lav"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Høy"
diff --git a/addons/visualization.fishbmc/resources/language/Persian (Iran)/strings.po b/addons/visualization.fishbmc/resources/language/Persian (Iran)/strings.po
new file mode 100644 (file)
index 0000000..b0fc583
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Persian (Iran) (http://www.transifex.com/projects/p/xbmc-main/language/fa_IR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa_IR\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "کم"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "نرمال"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "زیاد"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "بی نهایت"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "کم"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "نرمال"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "زیاد"
diff --git a/addons/visualization.fishbmc/resources/language/Persian/strings.po b/addons/visualization.fishbmc/resources/language/Persian/strings.po
new file mode 100644 (file)
index 0000000..6c5bf81
--- /dev/null
@@ -0,0 +1,25 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Persian (http://www.transifex.com/projects/p/xbmc-main/language/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "نورمال"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "نورمال"
diff --git a/addons/visualization.fishbmc/resources/language/Polish/strings.po b/addons/visualization.fishbmc/resources/language/Polish/strings.po
new file mode 100644 (file)
index 0000000..6c77c96
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Polish (http://www.transifex.com/projects/p/xbmc-main/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Obciążenie [CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "min."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Zwykły"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Wysoka"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Najwyższa"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Tryb Nerwowy [więcej zmian trybów]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Szybkość [pomiń niektóre klatki]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Bardzo niskie"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "min."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Zwykły"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Wysoka"
diff --git a/addons/visualization.fishbmc/resources/language/Portuguese (Brazil)/strings.po b/addons/visualization.fishbmc/resources/language/Portuguese (Brazil)/strings.po
new file mode 100644 (file)
index 0000000..dda0089
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Portuguese (Brazil) (http://www.transifex.com/projects/p/xbmc-main/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detalhado [Intensivo uso de CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Baixo"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrema"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Modo Nervoso [mais mudanças do modo]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Velocidade [mantenha alguns frames]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Muito Baixo"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Baixo"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Use um arquivo de persistência [inicialização mais rápida]"
diff --git a/addons/visualization.fishbmc/resources/language/Portuguese/strings.po b/addons/visualization.fishbmc/resources/language/Portuguese/strings.po
new file mode 100644 (file)
index 0000000..fc08208
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Portuguese (http://www.transifex.com/projects/p/xbmc-main/language/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detalhado [uso intensivo de CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Baixa"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alta"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Máxima"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Modo Nervoso [mais mudanças de modo]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Velocidade [omitir algumas frames]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Mínima"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Baixa"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alta"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Usar um Ficheiro Persistente [início mais rápido]"
diff --git a/addons/visualization.fishbmc/resources/language/Romanian/strings.po b/addons/visualization.fishbmc/resources/language/Romanian/strings.po
new file mode 100644 (file)
index 0000000..7152ed6
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Romanian (http://www.transifex.com/projects/p/xbmc-main/language/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Minim"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Înalt"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "extremă"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Minim"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Înalt"
diff --git a/addons/visualization.fishbmc/resources/language/Russian/strings.po b/addons/visualization.fishbmc/resources/language/Russian/strings.po
new file mode 100644 (file)
index 0000000..d1e56cc
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Russian (http://www.transifex.com/projects/p/xbmc-main/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Нормальное"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Макс."
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Максимальное"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Нормальное"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Макс."
diff --git a/addons/visualization.fishbmc/resources/language/Serbian (Cyrillic)/strings.po b/addons/visualization.fishbmc/resources/language/Serbian (Cyrillic)/strings.po
new file mode 100644 (file)
index 0000000..8a12e98
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Serbian (Cyrillic) (http://www.transifex.com/projects/p/xbmc-main/language/sr_RS/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr_RS\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Нормално"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Висок"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Екстремно"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Мин."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Нормално"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Висок"
diff --git a/addons/visualization.fishbmc/resources/language/Serbian/strings.po b/addons/visualization.fishbmc/resources/language/Serbian/strings.po
new file mode 100644 (file)
index 0000000..2b5a8b8
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Serbian (http://www.transifex.com/projects/p/xbmc-main/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normalno"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Visok"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstremno"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normalno"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Visok"
diff --git a/addons/visualization.fishbmc/resources/language/Slovak/strings.po b/addons/visualization.fishbmc/resources/language/Slovak/strings.po
new file mode 100644 (file)
index 0000000..e2cdfd0
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Slovak (http://www.transifex.com/projects/p/xbmc-main/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detailný [náročný na CPU]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Nízky"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normálny"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Vysoký"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrémnz"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Nervózny režim [viac zmien módov]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Rýchlosť [vynechať niektoré snímky]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Veľmi nízky"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Nízky"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normálny"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Vysoký"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Použiť trvalý súbor [rýchlejší štart]"
diff --git a/addons/visualization.fishbmc/resources/language/Slovenian/strings.po b/addons/visualization.fishbmc/resources/language/Slovenian/strings.po
new file mode 100644 (file)
index 0000000..6d2eebc
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Slovenian (http://www.transifex.com/projects/p/xbmc-main/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Podrobno [CPU zahtevno]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Nizko"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Običajno"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Visoko"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ekstremno"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Živčni način [več sprememb]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Hitrost [preskoči nekaj sličic]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Zelo nizko"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Nizko"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Običajno"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Visoko"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Uporabi stalno datoteko [hitrejši zagon]"
diff --git a/addons/visualization.fishbmc/resources/language/Spanish (Argentina)/strings.po b/addons/visualization.fishbmc/resources/language/Spanish (Argentina)/strings.po
new file mode 100644 (file)
index 0000000..8f5b7f7
--- /dev/null
@@ -0,0 +1,49 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Spanish (Argentina) (http://www.transifex.com/projects/p/xbmc-main/language/es_AR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrema"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Muy lenta"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alto"
diff --git a/addons/visualization.fishbmc/resources/language/Spanish (Mexico)/strings.po b/addons/visualization.fishbmc/resources/language/Spanish (Mexico)/strings.po
new file mode 100644 (file)
index 0000000..d80cd46
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Spanish (Mexico) (http://www.transifex.com/projects/p/xbmc-main/language/es_MX/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alta"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrema"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Min"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alta"
diff --git a/addons/visualization.fishbmc/resources/language/Spanish/strings.po b/addons/visualization.fishbmc/resources/language/Spanish/strings.po
new file mode 100644 (file)
index 0000000..be8a0b8
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Spanish (http://www.transifex.com/projects/p/xbmc-main/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Detalle [CPU intensivo]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Bajo"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extremo"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Modo Nervioso [más cambios de modo]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Velocidad [saltarse algunos fotogramas]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Muy bajo"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Bajo"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Alto"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Usar Archivo Persistente [inicio más rápido]"
diff --git a/addons/visualization.fishbmc/resources/language/Swedish/strings.po b/addons/visualization.fishbmc/resources/language/Swedish/strings.po
new file mode 100644 (file)
index 0000000..88502e7
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Swedish (http://www.transifex.com/projects/p/xbmc-main/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Låg"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Hög"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extrem"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Låg"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Hög"
diff --git a/addons/visualization.fishbmc/resources/language/Tajik/strings.po b/addons/visualization.fishbmc/resources/language/Tajik/strings.po
new file mode 100644 (file)
index 0000000..97d3c0b
--- /dev/null
@@ -0,0 +1,65 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Tajik (http://www.transifex.com/projects/p/xbmc-main/language/tg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Detail [CPU intensive]"
+msgstr "Тафсил [CPU бошиддат]"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Паст"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Оддӣ"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Баланд"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Ниҳоят"
+
+msgctxt "#30005"
+msgid "Nervous Mode [more mode changes]"
+msgstr "Ҳолати беқарор [бештар тағйироти ҳолат]"
+
+msgctxt "#30006"
+msgid "Speed [skip some frames]"
+msgstr "Суръат [гузаронидани баъзе кадрҳо]"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Хеле суст"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Паст"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Оддӣ"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Баланд"
+
+msgctxt "#30011"
+msgid "Use a Persistence File [faster startup]"
+msgstr "Истифодаи файли суботкорӣ [оғози тезкор]"
diff --git a/addons/visualization.fishbmc/resources/language/Tamil (India)/strings.po b/addons/visualization.fishbmc/resources/language/Tamil (India)/strings.po
new file mode 100644 (file)
index 0000000..d8b7e4b
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_IN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "குறைவு"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "வழக்கமான"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "அதிகம்"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "தீவிரம்"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "குறைவு"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "வழக்கமான"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "அதிகம்"
diff --git a/addons/visualization.fishbmc/resources/language/Thai/strings.po b/addons/visualization.fishbmc/resources/language/Thai/strings.po
new file mode 100644 (file)
index 0000000..93c5729
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Thai (http://www.transifex.com/projects/p/xbmc-main/language/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "ต่ำ"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "ปกติ"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "สูง"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "สูงสุด"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "ต่ำ"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "ปกติ"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "สูง"
diff --git a/addons/visualization.fishbmc/resources/language/Turkish/strings.po b/addons/visualization.fishbmc/resources/language/Turkish/strings.po
new file mode 100644 (file)
index 0000000..39ab31f
--- /dev/null
@@ -0,0 +1,49 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Turkish (http://www.transifex.com/projects/p/xbmc-main/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Düşük"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Yüksek"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Extreme"
+
+msgctxt "#30007"
+msgid "Very Low"
+msgstr "Çok Düşük"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Düşük"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Yüksek"
diff --git a/addons/visualization.fishbmc/resources/language/Ukrainian/strings.po b/addons/visualization.fishbmc/resources/language/Ukrainian/strings.po
new file mode 100644 (file)
index 0000000..8269985
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Ukrainian (http://www.transifex.com/projects/p/xbmc-main/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Мін."
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Нормальне"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Висока"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Максимальна"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Мін."
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Нормальне"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Висока"
diff --git a/addons/visualization.fishbmc/resources/language/Uzbek/strings.po b/addons/visualization.fishbmc/resources/language/Uzbek/strings.po
new file mode 100644 (file)
index 0000000..d4f5fc4
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Uzbek (http://www.transifex.com/projects/p/xbmc-main/language/uz/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uz\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Past"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Yuqori"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Past"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Yuqori"
diff --git a/addons/visualization.fishbmc/resources/language/Vietnamese/strings.po b/addons/visualization.fishbmc/resources/language/Vietnamese/strings.po
new file mode 100644 (file)
index 0000000..95fb21f
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Vietnamese (http://www.transifex.com/projects/p/xbmc-main/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Thấp"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Bình thường"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Cao"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Tối đa"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Thấp"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Bình thường"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Cao"
diff --git a/addons/visualization.fishbmc/resources/language/Welsh/strings.po b/addons/visualization.fishbmc/resources/language/Welsh/strings.po
new file mode 100644 (file)
index 0000000..454535a
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: FishBMC
+# Addon id: visualization.fishbmc
+# Addon Provider: 26elf
+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: Welsh (http://www.transifex.com/projects/p/xbmc-main/language/cy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cy\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Isel"
+
+msgctxt "#30002"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Uchel"
+
+msgctxt "#30004"
+msgid "Extreme"
+msgstr "Eithafol"
+
+msgctxt "#30008"
+msgid "Low"
+msgstr "Isel"
+
+msgctxt "#30009"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#30010"
+msgid "High"
+msgstr "Uchel"
index e299c99..037ed20 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.glspectrum"
-  version="1.0.10"
+  version="1.0.14"
   name="OpenGL Spectrum"
   provider-name="Team XBMC">
   <extension
@@ -29,6 +29,7 @@
     <summary lang="eu">3D espektro analizatzaile bat biraka erakusten duen bistaratzea</summary>
     <summary lang="fi">Pyörivä 3D-spektrianalysaattori</summary>
     <summary lang="fr">Visualisation affichant un analyseur de spectre 3D en rotation</summary>
+    <summary lang="fr_CA">Visualisation affichant un analyseur de spectre 3D en rotation</summary>
     <summary lang="gl">Visualización que amosa un analizador de espectro virando en 3D</summary>
     <summary lang="he">DirectX Spectrum זהו חיזוי אשר מציג סיבובי 3D Spectrum Analyzer</summary>
     <summary lang="hr">Vizualizacija koja prikazuje rotirajući 3D spektralni analizator</summary>
@@ -50,7 +51,7 @@
     <summary lang="ro">Vizualizare cu afișarea unui analizor de spectru 3D rotativ</summary>
     <summary lang="ru">Визуализация, показывающая вращающийся трёхмерный анализатор спектра</summary>
     <summary lang="sk">Vizualizácia zobrazujúca rotujúci 3D spektrálny analyzátor</summary>
-    <summary lang="sl">Vizualizacija, ki prikatuje vrtečo 3D spektralno analizo</summary>
+    <summary lang="sl">Vizualizacija, ki prikazuje vrtečo 3D spektralno analizo</summary>
     <summary lang="sq">Vizualizim që tregon një Analizor</summary>
     <summary lang="sv">Visualisering som visar en roterande 3D-spektrumanalysator</summary>
     <summary lang="ta_IN">சுழலும் 3D ஸ்பெக்ட்ரம் அனலைசர் காட்சிப்படுத்தல்</summary>
     <description lang="es">OpenGL Spectrum es una visualización que muestra un analizador de espectro en 3D girando renderizado con OpenGL que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.&#10;Se puede ajustar la altura de las barras, su velocidad, y como son renderizadas (sólido, puntos, malla). Es una visualización que utiliza poca CPU y muy agradable.</description>
     <description lang="es_AR">OpenGL Spectrum es una visualización que muestra un analizador de espectro en 3D girando, renderizado con OpenGL, que se mueve al ritmo de la música creando un efecto de onda en la rejilla del espectro.&#10;Se puede ajustar la altura de las barras, su velocidad, y como son renderizadas (sólido, puntos, malla). Es una visualización que utiliza poca CPU y muy agradable.</description>
     <description lang="es_MX">Espectro Opengl es una Visualización que muestra un Analizador de Especto en 3D rotando renderizado en Opengl que se mueve al ritmo de la música creando un efecto de onda a través del espectro de la red.&#10;También tiene configuraciones para ajustar la altura de la barra de espectro, su velocidad, y cómo las barras son renderizadas (sólidas, puntos, malla de alambre) y es una buena visualización liviana, de poco uso de cpu que se ve genial.</description>
-    <description lang="et">Opengl Spectrum on visuaal, mis näitab 3D spektraalanalüüsi renderdatud Opengl'is, mis liigub liigub muusika rütmis luues laineefekti üle spektraalvõrgustiku.&#10;Lisaks on olemas ka võimalus seadistada spektri kõrgust, selle kiirust ja kuidas ribasid renderdatakse (tahkis, punktid, sõrestik). Opengl Spectrum on hea väljanägemisega kerge ja vähese protsessorikasutusega visuaal.</description>
+    <description lang="et">OpenGL Spectrum on visuaal, mis näitab 3D spektraalanalüüsi renderdatud OpenGL'is, mis liigub liigub muusika rütmis luues laineefekti üle spektraalvõrgustiku.&#10;Lisaks on olemas ka võimalus seadistada spektri kõrgust, selle kiirust ja kuidas ribasid renderdatakse (tahkis, punktid, sõrestik). Opengl Spectrum on hea väljanägemisega kerge ja vähese protsessorikasutusega visuaal.</description>
     <description lang="fi">Näyttää pyörivän 3D-spektrianalysaattorin, joka liikkuu musiikin tahdissa tuottaen aaltotehosteen spektrikuvaajaan.&#10;Spektripalkin korkeuden, nopeuden, ja piirtotavan (täytetyt, pisteet, ääriviivat) voi asettaa asetuksista. Spectrum on kevyt visualisointi joka näyttää hyvältä.</description>
     <description lang="fr">Opengl Spectrum est une visualisation affichant un analyseur de spectre 3D en rotation, sous Opengl. Il réagit au rythme de la musique, créant un effet d'onde sur la grille du spectre.&#10;Il propose divers paramètres pour ajuster la hauteur, la vitesse, et le rendu des barres du spectre (plein, points, fil de fer). Une visualisation légère, peu gourmande en CPU et agréable à regarder.</description>
+    <description lang="fr_CA">Opengl Spectrum est une visualisation affichant un analyseur de spectre 3D en rotation, sous Opengl. Il réagit au rythme de la musique, créant un effet d'onde sur la grille du spectre.&#10;Il propose divers paramètres pour ajuster la hauteur, la vitesse, et le rendu des barres du spectre (plein, points, fil de fer). Une visualisation légère, peu gourmande en CPU et agréable à regarder.</description>
     <description lang="gl">Opengl Spectrum é unha Visualización que amosa un analizador de espectro virando en 3D renderizado con OpenGL que se move ó ritmo da música creando un efecto de onde ó longo da grella do espectro.&#10;Tamén ten opcións para axustar a altura da barra, a velocidade e como se renderizan as barras (sólidas, puntos, malla) do espectro. É bonito, lixeiro, de baixo custo en CPU.</description>
     <description lang="he">Opengl Spectrum זהו חיזוי אשר מציג סיבובי 3D Spectrum Analyzer אשר זז לצלילי המוזיקה שיוצר אפקט גלים לרוחב רשת הספקטרום.&#10;יש אפשרות גם להגדיר את גובה פס הספקטרום, את המהירות, ואת התנהגות הפסים (filled, points, wire frame) וזהו חיזוי נחמד קל משקל לא מעמיס על המעבד ונראה נהדר.</description>
     <description lang="hr">Opengl Spectrum je vizualizacija koja prikazuje rotirajući 3D spektralni analizator prikazan u Opengl-u koji se pokreće u ritmu glazbe stvarajući efekt valova u spektralnoj mreži.&#10;Također sadrži i postavke za namještanje visine sprektralnih traka, njihove brzine, i načina na koji su prikazane (popunjeno, točke, žičani okvir). Vizualizacija izgleda sjajno te je malih memorijskih i CPU zahtjeva.</description>
     <description lang="ro">Spectrul OpenGL este o vizualizare care afișează un analizor de spectre 3D rotativ randat în OpenGL care se mișcă după bătăile muzicii creând un val dea-lungul grilei spectrale.&#10;De asemenea, are setări pentru ajustarea înălțimii bărilor spectrale, a vitezei, și a modului în care bările sunt randate (umplere, puncte, contur). Este o vizualizare cu consum redus al procesorului care arată fantastic de bine.</description>
     <description lang="ru">Эта визуализация на основе OpenGL показывает вращающийся трёхмерный анализатор спектра, который движется в такт музыке, создавая эффект волны по всему спектру сетки.⏎&#10;Визуализация имеет настройки для регулировки высоты полос спектра, скорости движения и способа отображения полос (сплошной, точки, каркас), а также обладает небольшим размером и малой нагрузкой на процессор.</description>
     <description lang="sk">Opengl Spectrum je vizualizácia zobrazujúca rotujúci 3D spektrálny analyzátor vykresľovaný pomocou OpenGL, ktorý sa hýbe v rytme hudby a tak vytvára vlny naprieč mriežkou spektra.[CR]&#10;Zároveň má nastavenia upravujúce výšku stĺpcov spektra, ich rýchlosť a ako sú vykresľované (vyplnené, body, drôtový model). Je to jednoduchá vizualizácia s nízkou záťažou CPU, ktorá výborne vyzerá.</description>
-    <description lang="sl">OpenGL Spectrum je vizualizacija, ki prikazuje vrtečo 3D spektralno analizato, generirano v OpenGL, ki se premika v ritmu glasbe in ustvarja učinek valovanja v celotnem spektru. Vsebuje tudi nastavitve za prilagoditev višine spektra, hitrosti in oblike (polno, točke, okvir) ter je varčna vizualizacija z nizka porabo CPU-ja, ki izgleda super.</description>
+    <description lang="sl">OpenGL Spectrum je vizualizacija, ki prikazuje vrtečo 3D spektralno analizo, generirano v OpenGL, ki se premika v ritmu glasbe in ustvarja učinek valovanja v celotnem spektru. Vsebuje tudi nastavitve za prilagoditev višine spektra, hitrosti in oblike (polno, točke, okvir) ter je varčna vizualizacija z nizko porabo CPU-ja, ki izgleda super.</description>
     <description lang="sq">Opengl Spectrum është nje vizualizim që tregonë një analizues spektral 3D që është llogaritur duke përdorur Opengl dhe lëvziet sipas muzikës duke krejuar një efekt valësh në një rrjet koordinativ spektral. Gjithashtu ka cilësime që lejojnë ndryshime të parametrave të ndryshme. Ky vizualizim nuk përdor shum llogari nga CPU.</description>
     <description lang="sv">OpenGL-spektrum är en visualisering som visar en roterande 3D-spektrumanalysator renderad i OpenGL. Den rör sig till musikens takt och skapar en vågeffekt över spektrat.&#10;OpenGL-spektrum har inställningar för att justera staplarnas höjd, deras hastighet, hur de ska visas (solida, punkter, ramverk) och är en visualisering med låg cpu-användning samtidigt som den ser bra ut</description>
     <description lang="ta_IN">OpenGL ஸ்பெக்ட்ரம் ⏎ இது Opengl நூலகம் மூலமாக செய்யப்பட்ட 3D ஸ்பெக்ட்ரம் அனலைசர். பாடல்களின் இசை அளவுக்கு ஏற்ப பட்டைகள் நடனம் ஆடும். பட்டைகளின் உயரம், வேகம் மற்றும் பட்டையின் தன்மைகள் (திட, புள்ளிகள், கம்பி சட்டம்) ஆகியவற்றை மாற்றலாம்.</description>
index 760b738..3f87951 100644 (file)
@@ -20,6 +20,10 @@ msgctxt "#30000"
 msgid "Mode"
 msgstr "Režim"
 
+msgctxt "#30005"
+msgid "Small"
+msgstr "Malo"
+
 msgctxt "#30006"
 msgid "Default"
 msgstr "Podrazumjevano"
diff --git a/addons/visualization.glspectrum/resources/language/French (Canada)/strings.po b/addons/visualization.glspectrum/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..ee3ea06
--- /dev/null
@@ -0,0 +1,77 @@
+# XBMC Media Center language file
+# Addon Name: OpenGL Spectrum
+# Addon id: visualization.glspectrum
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Mode"
+msgstr "Mode"
+
+msgctxt "#30001"
+msgid "Filled"
+msgstr "Plein"
+
+msgctxt "#30002"
+msgid "Wireframe"
+msgstr "Fil de fer"
+
+msgctxt "#30003"
+msgid "Points"
+msgstr "Points"
+
+msgctxt "#30004"
+msgid "Bar Height"
+msgstr "Hauteur de barre"
+
+msgctxt "#30005"
+msgid "Small"
+msgstr "Petit"
+
+msgctxt "#30006"
+msgid "Default"
+msgstr "Défaut"
+
+msgctxt "#30007"
+msgid "Big"
+msgstr "Grand"
+
+msgctxt "#30008"
+msgid "Very Big"
+msgstr "Très Grand"
+
+msgctxt "#30009"
+msgid "Speed"
+msgstr "Vitesse"
+
+msgctxt "#30010"
+msgid "Very Slow"
+msgstr "Très Lent"
+
+msgctxt "#30011"
+msgid "Slow"
+msgstr "Lent"
+
+msgctxt "#30012"
+msgid "Default"
+msgstr "Défaut"
+
+msgctxt "#30013"
+msgid "Fast"
+msgstr "Rapide"
+
+msgctxt "#30014"
+msgid "Very Fast"
+msgstr "Très Rapide"
index 69bf520..745bc1b 100644 (file)
@@ -70,7 +70,7 @@ msgstr "ברירת מחדל"
 
 msgctxt "#30013"
 msgid "Fast"
-msgstr "מהר"
+msgstr "×\9e×\94×\99ר"
 
 msgctxt "#30014"
 msgid "Very Fast"
index b4339af..be0504a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.milkdrop"
-  version="1.0.10"
+  version="1.0.14"
   name="MilkDrop"
   provider-name="Team XBMC">
   <extension
     <summary lang="es">MilkDrop te lleva volando a través de las ondas que estás escuchando</summary>
     <summary lang="es_AR">MilkDrop te lleva volando a través de las ondas que estás escuchando</summary>
     <summary lang="es_MX">MilkDrop the lleva volando a través de las ondas de sonido que estás escuchando</summary>
-    <summary lang="et">MilkDrop viib sind lennates läbi helilainete mida kuulad</summary>
+    <summary lang="et">MilkDrop viib sind lennates läbi kullatavate helilainete</summary>
     <summary lang="fi">MilkDrop lennättää sinut ääniaaltojen läpi</summary>
     <summary lang="fr">MilkDrop vous fait voyager dans les ondes sonores de votre musique</summary>
+    <summary lang="fr_CA">MilkDrop vous fait voyager dans les ondes sonores de votre musique</summary>
     <summary lang="gl">MilkDrop lévate voando a través da ondas de son que esta a ouvir</summary>
     <summary lang="he">MilkDrop לוקח אותך לתעופה דרך גלי הסאונד שאתה שומע</summary>
     <summary lang="hr">MilkDrop vam omogućuje let kroz zvuk koji čujete</summary>
@@ -35,6 +36,7 @@
     <summary lang="ja">MilkDrop - 音楽の波の上を飛ぶ</summary>
     <summary lang="ko">MilkDrop은 사운드웨이브 속으로 날아가는듯한 효과를 보여줍니다.</summary>
     <summary lang="lt">MilkDrop nukelia Jus i nuostabu skrydi virs debesu, istiesu fantastisku garsu gausa</summary>
+    <summary lang="lv">MilkDrop paņem Jūs līdzi lidojumā cauri skaņu viļņiem, kurus dzirdat</summary>
     <summary lang="mk">MilkDrop ве прелетува преку брановите на музиката која ја слушате</summary>
     <summary lang="nl">Met MilkDrop vliegt u mee door de soundwaves die je hoort</summary>
     <summary lang="no">MilkDrop tar deg med på en flyreise gjennom lydbølgene du hører</summary>
     <description lang="es">MilkDrop era originalmente un plug-in visualizador de música para Winamp. Mientras escuchas música, MilkDrop te lleva volando a través de las ondas que estás escuchando, y utiliza la detección del ritmo para activar una gran cantidad de efectos psicodélicos, creando una rica experiencia visual a través del sonido.</description>
     <description lang="es_AR">MilkDrop era originalmente un plug-in visualizador de música para Winamp. Mientras escuchas música, MilkDrop te lleva volando a través de las ondas que estás escuchando, y utiliza la detección del ritmo para activar una gran cantidad de efectos psicodélicos, creando una rica experiencia visual a través del sonido.</description>
     <description lang="es_MX">MilkDrop originalmente fue un "plug-in" visualizador de música para el reproductor de música Winamp. Mientras escuchas tu músuca, MilkDrop te lleva volando a través de las ondas de sonido que estás escuchando en ese momento, y usa detección de ritmo para desencadenar múltiples efectos psicodélicos, creando un rico recorrido visual a través del sonido.</description>
-    <description lang="et">MilkDrop oli algselt muusika visuaal plugin Winamp'ile. Muusikat kuulates viib MilkDrop sind lennates läbi reaalsete helilainete mida kuulad. MilkDrop kasutab rütmituvastust, et päästa valla tohutu hulk psühhedeelseid efekte luues visuaalidest rikka teekonna läbi heli.</description>
+    <description lang="et">MilkDrop oli algselt muusika visuaal plugin Winamp'ile. Muusikat kuulates viib MilkDrop sind lennates läbi kuulatavate helilainete. MilkDrop kasutab rütmituvastust, et päästa valla tohutu hulk psühhedeelseid efekte luues visuaalidest rikka teekonna läbi heli.</description>
     <description lang="fi">MilkDrop oli alunperin Winampin visualisaattorilisäosa. Kuunnellessasi musiikkia MilkDrop lennättää sinut kuulemiesi ääniaaltojen läpi ja käyttää tahdintunnistusta lukemattomien psykedeelisten tehosteiden toistamiseen, luoden visuaalisen matkan musiikin läpi.</description>
     <description lang="fr">MilkDrop était à l'origine une extension de visualisation musicale pour le lecteur audio Winamp. Pendant que vous écoutez votre musique, Milkdrop vous fait voyager à travers les ondes sonores que vous entendez, détectant le rythme pour déclencher une myriade d'effets psychédéliques, créant ainsi une riche expérience visuelle et sonore.</description>
+    <description lang="fr_CA">MilkDrop était à l'origine une extension de visualisation musicale pour le lecteur audio Winamp. Pendant que vous écoutez votre musique, Milkdrop vous fait voyager à travers les ondes sonores que vous entendez, détectant le rythme pour déclencher une myriade d'effets psychédéliques, créant ainsi une riche expérience visuelle et sonore.</description>
     <description lang="gl">MilkDrop foi orixinalmente un plugin de Visualización para múica do reprodutor de música Winamp. Nametres vostede escoita a súa música, MilkDrop lévao voando a través das ondas de son que esta a ouvir, e emprega a detección de ritmo para activar milleiros de efectos psicodélicos, creando unha rica viaxe visual a través do son.</description>
     <description lang="he">MilkDrop was originally a music visualizer "plug-in" to the Winamp music player. As you listen to your music, MilkDrop takes you flying through the actual soundwaves you're hearing, and uses beat detection to trigger myriad psychedelic effects, creating a rich visual journey through sound.</description>
     <description lang="hr">MilkDrop je orginalno bio zamišljen kao "dodatak" za Winamp glazbeni svirač. Dok slušate svoju glazbu, MilkDrop vam omogućuje let kroz zvuk koji čujete i koristi otkrivanje taktova da bi pokrenuo bezbroj psihodeličnih efekata, tako stvarajući bogato vizualno  zvučno putovanje.</description>
index cccfeac..8fcd2d0 100644 (file)
@@ -30,11 +30,11 @@ msgstr "Temps Aleatori Addicional"
 
 msgctxt "#30003"
 msgid "Enable Anisotropic Filtering"
-msgstr "Activa el filtre anisotròpic"
+msgstr "Habilita el filtre anisotròpic"
 
 msgctxt "#30004"
 msgid "Enable Hard Cuts"
-msgstr "Activa talls en sec"
+msgstr "Habilita talls en sec"
 
 msgctxt "#30005"
 msgid "Loudness Threshold For Hard Cuts"
@@ -50,7 +50,7 @@ msgstr "Temps de refresc màxim"
 
 msgctxt "#30008"
 msgid "Enable Stereo 3D"
-msgstr "Activa l'Stereo 3D"
+msgstr "Habilita l'Stereo 3D"
 
 msgctxt "#30009"
 msgid "Preset Pack"
index 93427cf..9ecfbeb 100644 (file)
@@ -22,7 +22,7 @@ msgstr "Automaatne sulanduse aeg"
 
 msgctxt "#30001"
 msgid "Time Between Presets"
-msgstr "Eelseadistustevaheline aeg"
+msgstr "Eelseadistuste vaheline aeg"
 
 msgctxt "#30002"
 msgid "Additional Random Time"
@@ -34,15 +34,15 @@ msgstr "Luba anisotroopne filtreerimine"
 
 msgctxt "#30004"
 msgid "Enable Hard Cuts"
-msgstr "Tugevad kärped kasutusel"
+msgstr "Kasuta tugevaid kärpeid"
 
 msgctxt "#30005"
 msgid "Loudness Threshold For Hard Cuts"
-msgstr "Helitugevuse künnis"
+msgstr "Helitugevuse künnis"
 
 msgctxt "#30006"
 msgid "Average Time Between Hard Cuts"
-msgstr "Keskmine intervall"
+msgstr "Keskmine intervall"
 
 msgctxt "#30007"
 msgid "Maximum Refresh Rate"
diff --git a/addons/visualization.milkdrop/resources/language/French (Canada)/strings.po b/addons/visualization.milkdrop/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..9ce3e06
--- /dev/null
@@ -0,0 +1,89 @@
+# XBMC Media Center language file
+# Addon Name: MilkDrop
+# Addon id: visualization.milkdrop
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Automatic Blend Time"
+msgstr "Durée des combinaisons"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Intervalle des présélections"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Ajout aléatoire de temps"
+
+msgctxt "#30003"
+msgid "Enable Anisotropic Filtering"
+msgstr "Activer le filtre anisotropique"
+
+msgctxt "#30004"
+msgid "Enable Hard Cuts"
+msgstr "Permettre les changements brusques"
+
+msgctxt "#30005"
+msgid "Loudness Threshold For Hard Cuts"
+msgstr "Seuil de volume pour les changements brusques"
+
+msgctxt "#30006"
+msgid "Average Time Between Hard Cuts"
+msgstr "Temps moyen entre les coupures"
+
+msgctxt "#30007"
+msgid "Maximum Refresh Rate"
+msgstr "Taux de rafraichissement maximum "
+
+msgctxt "#30008"
+msgid "Enable Stereo 3D"
+msgstr "Activer la Stereo 3D"
+
+msgctxt "#30009"
+msgid "Preset Pack"
+msgstr "Pack de présélections"
+
+msgctxt "#30010"
+msgid "User Preset Folder        "
+msgstr "Dossier de présélections de l'utilisateur        "
+
+msgctxt "#30011"
+msgid "Preset Shuffle Mode"
+msgstr "Mode de présélections aléatoires"
+
+msgctxt "#30020"
+msgid "WA51 Presets"
+msgstr "Présélections WA51"
+
+msgctxt "#30021"
+msgid "Winamp Presets"
+msgstr "Présélections Winamp"
+
+msgctxt "#30022"
+msgid "User Defined Preset Folder"
+msgstr "Dossier de présélections de l'utilisateur"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f %%"
+msgstr "%2.0f %%"
+
+msgctxt "#30052"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.milkdrop/resources/language/Latvian/strings.po b/addons/visualization.milkdrop/resources/language/Latvian/strings.po
new file mode 100644 (file)
index 0000000..2e5f6e6
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: MilkDrop
+# Addon id: visualization.milkdrop
+# 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: Latvian (http://www.transifex.com/projects/p/xbmc-main/language/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Laiks starp sagatavēm"
+
+msgctxt "#30008"
+msgid "Enable Stereo 3D"
+msgstr "Ieslēgt Stereo 3D"
+
+msgctxt "#30009"
+msgid "Preset Pack"
+msgstr "Sagatavju paka"
+
+msgctxt "#30010"
+msgid "User Preset Folder        "
+msgstr "Lietotāja sagatavju mape"
+
+msgctxt "#30011"
+msgid "Preset Shuffle Mode"
+msgstr "Sagatavju jaukšanas režīms"
+
+msgctxt "#30020"
+msgid "WA51 Presets"
+msgstr "WA51 sagataves"
+
+msgctxt "#30021"
+msgid "Winamp Presets"
+msgstr "Winamp sagataves"
+
+msgctxt "#30022"
+msgid "User Defined Preset Folder"
+msgstr "Lietotāja definēta sagatavju mape"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekundes"
+
+msgctxt "#30051"
+msgid "%2.0f %%"
+msgstr "%2.0f %%"
+
+msgctxt "#30052"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
index 9dc45c3..65103ee 100644 (file)
@@ -46,7 +46,7 @@ msgstr "Povprečen čas med ostrimi prehodi"
 
 msgctxt "#30007"
 msgid "Maximum Refresh Rate"
-msgstr "Največja frekvenca osveževanja"
+msgstr "Največja stopnja osveževanja"
 
 msgctxt "#30008"
 msgid "Enable Stereo 3D"
index 3e1a926..ec3b1df 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.projectm"
-  version="1.0.11"
+  version="1.0.15"
   name="projectM"
   provider-name="Team XBMC">
   <extension
@@ -34,6 +34,7 @@
     <summary lang="et">projectM viib sind lennates läbi helilainete mida kuulad</summary>
     <summary lang="fi">projectM lennättää sinut ääniaaltojen läpi</summary>
     <summary lang="fr">projectM vous entraine à travers les ondes sonores que vous écoutez</summary>
+    <summary lang="fr_CA">projectM vous entraine à travers les ondes sonores que vous écoutez</summary>
     <summary lang="gl">projectM lévao voando a través das ondas de son que está a ouvir</summary>
     <summary lang="he">projectM לוקח אותך לתעופה דרך גלי הסאונד שאתה שומע</summary>
     <summary lang="hr">projectM vam omogućuje let kroz zvuk koji čujete</summary>
@@ -44,6 +45,7 @@
     <summary lang="ja">projectM - 音楽の波の上を飛ぶ</summary>
     <summary lang="ko">projectM 은 사운드웨이브 속으로 날아가는듯한 효과를 보여줍니다.</summary>
     <summary lang="lt">projectM nukelia Jus į nuostabų skrydį virš debesų, ištiesų fantastiškų garsų gausą</summary>
+    <summary lang="lv">projectM paņem Jūs līdzi lidojumā cauri skaņu viļņiem, kurus dzirdat</summary>
     <summary lang="mk">projectM ве води на летање низ звучните бранови на музиката што ја слушате</summary>
     <summary lang="nl">projectM-visualisatie</summary>
     <summary lang="no">projectM tar deg på en reise flygende gjenom lydbølgene du hører</summary>
@@ -53,7 +55,7 @@
     <summary lang="ro">projectM îți oferă o senzație auditivă unică astfel încât simți că zbori printre undele sonore pe care le asculți</summary>
     <summary lang="ru">projectM отправит вас в полёт через звуковые волны, которые вы слышите</summary>
     <summary lang="sk">projektM s Vami poletí zvukovými vlnami, ktoré počúvate</summary>
-    <summary lang="sl">projectM vas popelje čez valovanje zvoka, kot ga slišite</summary>
+    <summary lang="sl">projectM vas popelje čez valovanje zvoka, ki ga poslušate</summary>
     <summary lang="sq">projectM të bën të fluturosh nëpër valet e tingullit që i dëgjon</summary>
     <summary lang="sv">projectM tar med dig på en flygtur genom ljudvågorna du hör</summary>
     <summary lang="ta_IN">projectM நீங்கள் கேட்கும் ஒலி அலைகளின் வடிவங்களின் மூலம் பறக்க செய்யும்</summary>
@@ -82,6 +84,7 @@
     <description lang="et">projectM on äge muusika visuaal. Unixi maailmas pole midagi paremat. projectM'i suurus on saavutatud kogukonna ühise raske töö tulemusena. Kasutajad nagu sina saavad luua eelseadeid, mis ühendavad muusika imeliste visualidega. Proovi seda! projectM visualiseerimine on litsentseeritud (LGPL) uuskasutus Milkdrop'ist OpenGL keskkonnas.&#10;Ainus mida projectM vajab, on 3D kiirendusega videokaart ja sinu lemmikmuusika.</description>
     <description lang="fi">projectM on uskomaton musiikkivisualisointi, joka on yhteisön kovan työn tulos. Käyttäjät voivat luoda esiasetuksia, jotka yhdistävät musiikin kuviin.&#10;projectM -visualisointi on LGPL-lisensoitu Milkdropin uudelleenimplementointi OpenGL:llä.&#10;projectM tarvitsee vain 3D-kiihdyttävän näytönohjaimen ja lempimusiikkisi.</description>
     <description lang="fr">projectM est un fantastique visualiseur musical. Il n'y a rien de mieux dans l'univers Unix. L'ampleur de projectM vient du travail énorme de la communauté. Des utilisateurs comme vous peuvent créer des préréglages qui connecteront la musique avec des visuels incroyables. Essayez-le!&#10;La visualisation projectM est une réalisation sous LGPL de Milkdrop en OpenGL.&#10;Le seul pré-requis pour projectM est une carte graphique avec accélération 3D et votre musique favorite.</description>
+    <description lang="fr_CA">projectM est un fantastique visualiseur musical. Il n'y a rien de mieux dans l'univers Unix. L'ampleur de projectM vient du travail énorme de la communauté. Des utilisateurs comme vous peuvent créer des préréglages qui connecteront la musique avec des visuels incroyables. Essayez-le!&#10;La visualisation projectM est une réalisation sous LGPL de Milkdrop en OpenGL.&#10;Le seul pré-requis pour projectM est une carte graphique avec accélération 3D et votre musique favorite.</description>
     <description lang="gl">projectM é unha impresionante Visualización de música. Non hai nada mellor no mundo Unix.  A grandeza de projectM ven da dura xeira da comunidade. Usuarios coma vostede poden crear preconfiguracións que conectan a música con incribles visualizacións. Próbeo!&#10;A Visualización projectM é unha reimplementación de Milkdrop empregando OpenGL e con licencia LGPL.&#10;Todo o que precisa projectM é unha tarxeta gráfica con aceleración 3D e a súa música favorita.</description>
     <description lang="he">projectM is an awesome music visualizer. There is nothing better in the world of Unix. projectM's greatness comes from the hard work of the community. Users like you can create presets that connect music with incredible visuals. Try it!&#10;projectM Visualization is an LGPL'ed reimplementation of Milkdrop under OpenGL&#10;All projectM requires is a video card with 3D acceleration and your favorite music.</description>
     <description lang="hr">projectM je fenomenalan glazbeni vizualizator. Ne postoji ništa bolje u svijetu Unixa. Veličina projectM-a dolazi zbog predanosti njegove zajednice. Korisnici kao što ste Vi, mogu stvoriti predloške koje povezuju glazbu i nevjerojatne vizualizacije. Isprobajte!&#10;projectM Vizualizacija je LGPL reimplementacija Milkdropa pod OpenGL-om&#10;Sve što projectM zahtijeva je video kartica sa 3d ubrzanjem i vašu omiljenu glazbu.</description>
@@ -92,6 +95,7 @@
     <description lang="ja">projectM is an awesome music visualizer. There is nothing better in the world of Unix. projectM's greatness comes from the hard work of the community. Users like you can create presets that connect music with incredible visuals. Try it!&#10;projectM Visualization is an LGPL'ed reimplementation of Milkdrop under OpenGL&#10;All projectM requires is a video card with 3D acceleration and your favorite music.</description>
     <description lang="ko">projectM은 멋진 음악 시각화입니다. Unix에는 이것보다 좋은것은 없습니다. projectM은 많은 사람들에 의해 개발되었습니다. 여러분과 같은 유저들이 음악을 표현하는 프리셋을 만들었습니다. projectM 음악시각화는 OpenGL에서 작동하도록 Milkdrop를 새로 만든것입니다. 모든 projectM은 3D 가속이 되는 비디오카드와 음악이 필요합니다.</description>
     <description lang="lt">ProjectM yra išskirtinė muzikos vizualizacija. Nėra nieko geriau, Unix pasaulyje. ProjectM spindesys tai sunkus darbas bendruomenėje. Naudotojai, tokie kaip Jūs galite sukurti ir suderinti muziką su puikiais vizualizacijos  efektais. Sužinokite!&#10;ProjectM yra įgyvendinimas iš Milkdrop pagal LGPL licenciją, ir naudoja OpenGL&#10;Viskas ko reikia projectM tai vaizdo plokštės su 3D akceleracija (greitėjimu) ir geros muzikos.</description>
+    <description lang="lv">projectM ir brīnišķīgs mūzikas vizualizētājs. Nav nekā labāka Unix pasaulē. projectM's izcilība rodas no smagā darba komūnā. Lietotāji, kas ir tādi paši kā Jūs, var radīt sagataves, kas savieno mūziku ar neticami skaistām vizualizācijām. Pamēģiniet!&#10;projectM Vizualizācija ir Milkdrop LGPL reimplementācija zem OpenGL&#10;Visi projectM pieprasa video karti ar 3D paātrinājumu un Jūsu mīļākās mūzikas izlasi.</description>
     <description lang="mk">projectM is an awesome music visualizer. There is nothing better in the world of Unix. projectM's greatness comes from the hard work of the community. Users like you can create presets that connect music with incredible visuals. Try it!⏎ projectM Visualization is an LGPL'ed reimplementation of Milkdrop under OpenGL⏎ All projectM requires is a video card with 3D acceleration and your favorite music.</description>
     <description lang="nl">ProjectM is een geweldige muziekvisualisatie. Er bestaat niets beters in de UNIX-wereld. Het success van ProjectM is het resultaat van het harde werk van de XBMC-gemeenschap. U kunt hun eigen presets instellen die muziek linken aan verbluffende visualisaties. Probeer het uit!&#10;ProjectM-visualisatie is beschikbaar onder de LGPL-licentie en is een herimplementatie van Milkdrop (OpenGL). Alles wat projectM vereist is een videokaart met 3D-versnelling en jouw favoriete muziek.</description>
     <description lang="no">projectM er en awesome musikk visualisering. Der er ingenting bedre i Unix verden. projectM er så flott takket være et hardt arbeidende felleskap. Brukere som deg kan lage forhåndsinnstillinger som kobler musikk med utrolige visualiseringer. Prøv det!&#10;projectM visualiseringen er en LGPL reinplimentasjon av Milkdrop under OpenGL&#10;Alt projectM trenger er et grafikkort med 3D støtte og din favoritt musikk</description>
     <description lang="ro">projectM este un plugin uimitor. Nu există nimic mai bun în lumea Unix. Măreția projectM vine din munca întregii comunități. Utilizatori ca și tine pot crea presetări care conectează muzica cu vizualizări incredibile. Încearcă și tu!&#10;Vizualizarea projectM este o reimplementare LGPL a lui Milkdrop sub OpenGL.&#10;Tot ceea ce necesită projectM este o placă video cu accelerare 3D și muzica ta favorită.</description>
     <description lang="ru">projectM удивительным образом визуализирует музыку. В мире Unix нет ничего лучше. projectM является результатом напряжённой работы сообщества. Пользователи могут создавать наборы настроек, которые объединяют музыку и невероятные визуальные эффекты. Попробуйте сами!⏎&#10;Визуализация projectM представляет собой LGPL-реализацию Milkdrop на основе OpenGL⏎&#10;Всё, что требуется для визуализации — это видеокарта с 3D-ускорением и любимая музыка.</description>
     <description lang="sk">projektM je úžasný hudobný vizualizér. Vo svete Unixu neexistuje nič lepšie. Veľkosť projectM pramení z tvrdej práce komunity. Užívatelia ako ty vytvárajú Predvoľby, ktoré spájajú hudbu s fantastickými vizualizáciami. Vyskúšaj to![CR] projectM vizualizácie sú LGPL implementáciou vizualizácií Milkdrop s použitím OpenGL.[CR] Jediné čo projectM potrebuje je grafickú kartu s 3D akceleráciou a Vašu obľúbenú hudbu.</description>
-    <description lang="sl">projectM je glasbeni vizualizator. Nič ni boljšega v svetu Unixa. Veličina ProjectM izhaja iz garanja skupnosti. Uporabniki, kot vi, si lahko ustvarite prednastavitve, ki povezujejo glasbo z neverjetno vizualizacijo. Poskusite!&#10;projectM Vizualizacija je LGPL reimplementacija Milkdropa v okviru OpenGL.&#10;projectM potrebuje le grafično kartico s 3D pospeševanjem in vašo najljubšo glasbo.</description>
+    <description lang="sl">projectM je glasbeni vizualizator. Nič ni boljšega v svetu Unixa. Veličina ProjectM izhaja iz garanja skupnosti. Uporabniki, kot vi, si lahko ustvarite prednastavitve, ki povezujejo glasbo z neverjetno vizualizacijo. Poskusite!&#10;Vizualizacija projectM je reimplementacija Milkdropa v LGPL v okviru OpenGL-a.&#10;projectM potrebuje le grafično kartico s 3D pospeševanjem in vašo najljubšo glasbo.</description>
     <description lang="sq">projectM është nje vizualizim i tmerrshëm. Nuk ekziston asgjë më të mirë në boten e Unix'it. Madhësija e projectM'it vjen nga puna e shkëlqyeshme të bashkimit të saj. Përdoruesit si ti mundin të krijojnë cilësime që lidhin musikën me vizualizime të jashtzakonshëm. Provoje!&#10;projectM'i është një zbatim i LGPL'uar prej Milkdrop ndër OpenGL.&#10;Të gjith që projectM kërkon është një kartë grafike me përshpejtim për 3D dhe muzikën tënde të preferuar.</description>
     <description lang="sv">projectM är en fantastisk musikvisualisering. Det finns inget bättre i Unixvärlden. projectM's storhet kommer från gemenskapens hårda jobb. Användare som du kan skapa förval som förenar musiken med otroliga visualiseringar. Prova det!&#10;projectM visualisering är en LGPL-implementation av Milkdrop i OpenGL&#10;Alla projectM kräver ett grafikkort med 3D-acceleration och din favoritmusik.</description>
     <description lang="ta_IN">projectM ஒரு அற்புதமான இசை விசுவலைஸர் ஆகும். யூனிக்ஸ் உலகில் இதைவிட சிறந்தது இல்லை. projectM உடைய சிறப்புத்தன்மை கடினமான சமூகத்தின் உழைப்பில் இருந்து வருகிறது. உங்களை போன்ற பயனர்களாலும் நம்பமுடியாத இசை முன்னமைவுகளை உருவாக்க முடியும். முயற்சித்துபாரும்!⏎ projectM காட்சியாக்கம் OpenGL கீழ்  Milkdrop உடைய மறு தயாரிப்பாக உள்ளது⏎ projectM க்கு தேவைப்படுவதெல்லாம் ஒரு 3D முடுக்கம் அட்டை மற்றும் உங்களுக்கு பிடித்த இசை.</description>
diff --git a/addons/visualization.projectm/resources/language/French (Canada)/strings.po b/addons/visualization.projectm/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..53881f4
--- /dev/null
@@ -0,0 +1,77 @@
+# XBMC Media Center language file
+# Addon Name: projectM
+# Addon id: visualization.projectm
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Render Quality"
+msgstr "Qualité de Rendu"
+
+msgctxt "#30001"
+msgid "Low"
+msgstr "Basse"
+
+msgctxt "#30002"
+msgid "Medium"
+msgstr "Moyenne"
+
+msgctxt "#30003"
+msgid "High"
+msgstr "Haute"
+
+msgctxt "#30004"
+msgid "Maximum"
+msgstr "Maximum"
+
+msgctxt "#30005"
+msgid "Shuffle Mode"
+msgstr "Mode Aléatoire"
+
+msgctxt "#30006"
+msgid "Smooth Preset Duration"
+msgstr "Lisser la durée de la présélection"
+
+msgctxt "#30007"
+msgid "Preset Duration"
+msgstr "Durée de la présélection"
+
+msgctxt "#30008"
+msgid "Beat Sensitivity"
+msgstr "Sensibilité au tempo"
+
+msgctxt "#30009"
+msgid "Preset Pack"
+msgstr "Pack de présélections"
+
+msgctxt "#30010"
+msgid "Default Pack"
+msgstr "Paquet par défaut"
+
+msgctxt "#30011"
+msgid "User Defined Preset Folder"
+msgstr "Dossier de présélections de l'utilisateur"
+
+msgctxt "#30012"
+msgid "User Preset Folder"
+msgstr "Dossier de présélections de l'utilisateur"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f %%"
+msgstr "%2.0f %%"
index db37857..7a7f470 100644 (file)
@@ -40,6 +40,38 @@ msgctxt "#30005"
 msgid "Shuffle Mode"
 msgstr "Jaukšanas režīms"
 
+msgctxt "#30006"
+msgid "Smooth Preset Duration"
+msgstr "Gluda sagataves darbība "
+
+msgctxt "#30007"
+msgid "Preset Duration"
+msgstr "Sagatavju ilgums"
+
 msgctxt "#30008"
 msgid "Beat Sensitivity"
 msgstr "Sitienu jūtīgums"
+
+msgctxt "#30009"
+msgid "Preset Pack"
+msgstr "Sagatavju paka"
+
+msgctxt "#30010"
+msgid "Default Pack"
+msgstr "Noklusētā paka"
+
+msgctxt "#30011"
+msgid "User Defined Preset Folder"
+msgstr "Lietotāja definēta sagatavju mape"
+
+msgctxt "#30012"
+msgid "User Preset Folder"
+msgstr "Lietotāja sagataves mape"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekundes"
+
+msgctxt "#30051"
+msgid "%2.0f %%"
+msgstr "%2.0f %%"
index 6cb7d67..5b2b2f2 100644 (file)
@@ -38,7 +38,7 @@ msgstr "Najvišja"
 
 msgctxt "#30005"
 msgid "Shuffle Mode"
-msgstr "Način mešanja"
+msgstr "Naključni način"
 
 msgctxt "#30006"
 msgid "Smooth Preset Duration"
diff --git a/addons/visualization.vortex/addon.xml b/addons/visualization.vortex/addon.xml
new file mode 100644 (file)
index 0000000..8f81a18
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<addon
+  id="visualization.vortex"
+  version="1.0.2"
+  name="Vortex"
+  provider-name="Team XBMC">
+  <extension
+    point="xbmc.player.musicviz"
+    library_windx="Vortex_win32dx.vis"/>
+  <extension point="xbmc.addon.metadata">
+    <summary lang="bg">Визуализацията Vortex  от пакета за XBOX</summary>
+    <summary lang="cs">Vizualizace Vortex z balíčku XBOX</summary>
+    <summary lang="de">Vortex Visualisierung aus dem XBOX Paket</summary>
+    <summary lang="el">Οπτικοποίηση Δίνης από το πακέτο XBOX</summary>
+    <summary lang="en">Vortex Visualization from XBOX package</summary>
+    <summary lang="es">Visualización Vortex del paquete XBOX</summary>
+    <summary lang="es_AR">Visualización Vortex del paquete XBOX</summary>
+    <summary lang="et">Vortex visuaal XBOX-i paketist</summary>
+    <summary lang="fr_CA">Visualisation Vortex du paquet XBOX</summary>
+    <summary lang="gl">Visualización Vortex do paquete XBOX</summary>
+    <summary lang="hu">Vortex vizualizáció az XBOX csomagból</summary>
+    <summary lang="nl">Vortex Visualisatie van XBOX verpakking</summary>
+    <summary lang="pl">Wizualizacja Vortex z pakietu XBOX</summary>
+    <summary lang="pt">Visualização Vortex do pacote XBOX</summary>
+    <summary lang="pt_BR">Visualização Vortex do pacote XBOX</summary>
+    <summary lang="sk">Vortex vizualizácia z XBOX balíčku</summary>
+    <summary lang="sl">Vizualizacija Vortex iz paketa XBOX</summary>
+    <summary lang="tg">Таҷассуми Vortex аз бастаи XBOX</summary>
+    <summary lang="zh">来自 XBOX 组件包的旋涡可视化效果</summary>
+    <platform>windx</platform>
+  </extension>
+</addon>
diff --git a/addons/visualization.vortex/icon.png b/addons/visualization.vortex/icon.png
new file mode 100644 (file)
index 0000000..c8d07f5
Binary files /dev/null and b/addons/visualization.vortex/icon.png differ
diff --git a/addons/visualization.vortex/resources/Presets/AlbumArtCube.vtx b/addons/visualization.vortex/resources/Presets/AlbumArtCube.vtx
new file mode 100644 (file)
index 0000000..44bf7a8
--- /dev/null
@@ -0,0 +1,28 @@
+// AlbumArtCube.vtx
+// Author - MrC
+
+float time = 0;
+float rx,rxamt,ry,ryamt;
+
+void Render()
+{
+       time += TIMEPASS;
+
+       gfxSetTexture(TEXTURE_ALBUMART);
+       gfxTranslate(0, 0, 2.0f - (TREBLE * 0.5));
+
+       if (BASS>0.3) rxamt = 1;
+       if (BASS<-0.3) rxamt = -1;
+       if (TREBLE>0.3) ryamt = 1;
+       if (TREBLE<-0.3) ryamt = -1;
+       rx = rx + (rxamt*TIMEPASS);
+       ry = ry + (ryamt*TIMEPASS);
+
+       gfxRotate(-70+(Sin(time)*12),1,0,0);
+       gfxRotate(rx*90,0,0,1);
+       gfxRotate(ry*90,0,1,0);
+
+       gfxColour(1, 1, 1, 1);
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/AlbumArtCubeRain.vtx b/addons/visualization.vortex/resources/Presets/AlbumArtCubeRain.vtx
new file mode 100644 (file)
index 0000000..86c4d23
--- /dev/null
@@ -0,0 +1,71 @@
+// AlbumArtCubeRain.vtx
+// Author - MrC
+// Based on CubeRain.r4 by Gordon Williams
+
+int x,y;
+float c,tm,tn,td;
+float[] c_x(256),c_y(256),c_z(256),c_vz(256),c_rx(256),c_ry(256),c_sx(256),c_sy(256),c_sz(256);
+
+float counter;
+
+void MakeNew(int n)
+{
+   c_x[n]=c_y[n]=0;
+   while (Mag(c_x[n],c_y[n])<1)
+   {
+      c_x[n] = (Rand()*10.0)-5.0;
+      c_y[n] = (Rand()*10.0)-5.0;
+   }
+
+   c_z[n] = 10;
+   c_vz[n] = (1.0+Rand())*4;
+   c_rx[n] = (1.0+Rand())*80;
+   c_ry[n] = (1.0+Rand())*80;
+   c_sx[n] = (0.5+Rand())*0.5;
+   c_sy[n] = (0.5+Rand())*0.15;
+   c_sz[n] = (0.5+Rand())*0.15;
+}
+
+void Init()
+{
+       counter = 0;
+       
+       for (x=0;x<256;x=x+1)
+       {
+      MakeNew(x);
+      c_z[x] = Rand()*10;
+       }
+       tm = tn = 0;
+}
+
+void Render()
+{
+   td = ((TREBLE+1.0f)*TIMEPASS);
+   tm = tm + td;
+   tn = tn + ((BASS+1.5)*TIMEPASS*2);
+
+   gfxTranslate(Cos(tn * 1.23f) * 0.5f, Sin(tn) * 0.5f, 0.0f);
+   gfxRotate(Cos(tn*0.6734f)*20.0f, 1.0f, 0.0f, 0.0f);
+   gfxRotate(Sin(tn*0.2143f)*20.0f, 0.0f, 1.0f, 0.0f);
+
+       gfxSetTexture(TEXTURE_ALBUMART);
+
+       for (x=0;x<20;x=x+1)
+       {
+               c_z[x] = c_z[x] - (td*c_vz[x]);
+               if (c_z[x]<0)
+               {
+                       MakeNew(x);
+               }
+       
+               c = Cos(c_z[x]*0.05*3.1416);
+               gfxColour(c,c,c,1);
+               gfxPushMatrix();
+               gfxTranslate(c_x[x],c_y[x],c_z[x]);
+               gfxRotate(c_rx[x]*tm, 1, 0, 0);
+               gfxRotate(c_ry[x]*tm, 0, 1, 0);
+               gfxCube(-c_sx[x],-c_sx[x],-c_sx[x],c_sx[x],c_sx[x],c_sx[x]);
+               gfxPopMatrix();
+       }
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/AlbumArtStretch.vtx b/addons/visualization.vortex/resources/Presets/AlbumArtStretch.vtx
new file mode 100644 (file)
index 0000000..b92d2c1
--- /dev/null
@@ -0,0 +1,52 @@
+// AlbumArtStretch.vtx
+// Author - MrC
+
+Map map;
+float time = 0;
+
+void Init()
+{
+   map.SetTimed();
+}
+
+void Render()
+{
+       if (BASS > 0)
+               time += (BASS)* TIMEPASS;
+       
+       float myX = Sin(time);
+       float myY = Cos(time);
+               
+       float dx, dy;
+   
+       for (int y = 0; y < 24; y++)
+       {
+               for (int x = 0; x < 32; x++)
+               {
+                       dx = x-15.5;
+                       dy = y-11.5;
+                       float mx = dx + myX*10;
+                       float my = dy + myY*10;
+
+                       map.SetValues(x,y, mx, my, -2, -2, -2);
+               }
+       }
+
+       map.Render();
+       gfxSetRenderTarget(map);
+
+       gfxSetTexture(TEXTURE_ALBUMART);
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+
+       float x = (MIDDLE + 1) / 2;
+       float y = (TREBLE+ 1) / 2;
+
+       gfxTexRect(-1 * x, 1 * y, 1 * x, -1 * y);
+       
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+         
+       gfxTexRect(-1, 1, 1, -1);
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/AlbumArtWaveSpectrum.vtx b/addons/visualization.vortex/resources/Presets/AlbumArtWaveSpectrum.vtx
new file mode 100644 (file)
index 0000000..bb90cba
--- /dev/null
@@ -0,0 +1,102 @@
+// AlbumArtWaveSpectum.vtx
+// Author : MrC
+
+float[] vl(256);
+int x;
+float[] cubeRot(3);
+float[] cubePos(3);
+
+void Init()
+{
+       for (int i=0; i<9;i++)
+       {
+               cubePos[i] = 0.0f;
+               cubeRot[i] = 0.0f;
+       }
+
+}
+
+void Render()
+{
+
+       gfxSetTexture(TEXTURE_ALBUMART);
+
+       for (int i=0; i<3;i++)
+       {
+               cubePos[i] = cubePos[i] + cubeRot[i];
+               cubeRot[i] = cubeRot[i] * 0.95;
+               if (cubeRot[i] > 1)
+                       cubeRot[i] = 1;
+               if (cubeRot[i] < -1)
+                       cubeRot[i] = -1;
+       }
+
+       cubeRot[0] += BASS;
+       cubeRot[1] += MIDDLE;
+       cubeRot[2] += TREBLE;
+
+
+       gfxPushMatrix();
+       gfxTranslate(-0.8, 0.25, 2);
+
+       gfxRotate(cubePos[0],1,0,0);
+       gfxRotate(cubePos[1],0,0,1);
+       gfxRotate(cubePos[2],0,1,0);
+
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+       gfxPopMatrix();
+
+    gfxSetTexture(NULL);
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+
+       gfxColour(1, 1, 1, 1);
+   
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x<256; x=x+1)
+       {
+               float r = WaveLeft(x);
+               gfxVertex((x-128) / 256.0f + 0.3, r * 0.2f + 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x<256; x=x+1)
+       {
+               float r = WaveRight(x);
+               gfxVertex((x-128) / 256.0f + 0.3, r * 0.2f + 0.1f, 0);
+       }
+       gfxEnd();
+
+   // calculate spectrum
+   for (x=0;x<256;x=x+1)
+       vl[x] = 0;
+   for (x=0;x<512;x=x+1)
+       vl[x/2] = vl[x/2] + GetSpecLeft(x)+GetSpecRight(x);
+
+   // now draw spectrum
+   gfxTranslate(-1,-0.9,0);
+   gfxBegin(PRIM_QUADLIST);
+   gfxSetTexture(NULL);
+  
+   for (x = 0; x < 256; x++)
+   {
+      vl[x] = vl[x]/8;
+      if (vl[x]>1.0) vl[x]=1.0;
+
+      
+      float xPos = x / 128.0f;
+
+      gfxColour(1,0,0,1);
+      gfxVertex(xPos+(1/128.0f),0,0);
+      gfxVertex(xPos,0,0);
+      gfxColour(1,vl[x],0, 1);
+      gfxVertex(xPos,vl[x]*0.4,0);      
+      gfxVertex(xPos+(1/128.0f),vl[x]*0.4,0);
+   }
+   gfxEnd();
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/AlbumArtZoomer.vtx b/addons/visualization.vortex/resources/Presets/AlbumArtZoomer.vtx
new file mode 100644 (file)
index 0000000..a7facdb
--- /dev/null
@@ -0,0 +1,66 @@
+// AlbumArtZoomer.vtx
+// Author - MrC
+
+float rot;
+float zoom;
+float dxx,dxy,dyx,dyy;
+
+float  t;
+float   px = 16;
+float   py = 12;
+float   pdx = 1.342;
+float   pdy = 1;
+float   basstime = 0;
+
+void Init()
+{
+       zoom = 0;
+       rot=Rand();
+       px = 16;
+       py = 12;
+       pdx = 1.342;
+       pdy = 1;
+       basstime = 0;
+}
+
+void Quad(float rt, float sz)
+{
+   dxx = Cos(rt)*sz;
+   dxy = Sin(rt)*sz;
+   dyx = Sin(rt)*sz;
+   dyy = 0.0f-Cos(rt)*sz;
+
+   gfxTexCoord((0.0f-dxx)+(0.0f+dyx),(0.0f-dxy)+(0.0f+dyy));
+   gfxVertex(-1 * 2,1 * 2,0);
+   gfxTexCoord((0.0f+dxx)+(0.0f+dyx),(0.0f+dxy)+(0.0f+dyy));
+   gfxVertex(1 * 2,1 * 2,0);
+   gfxTexCoord((0.0f+dxx)+(0.0f-dyx),(0.0f+dxy)+(0.0f-dyy));
+   gfxVertex(1 * 2,-1 * 2,0);
+   gfxTexCoord((0.0f-dxx)+(0.0f-dyx),(0.0f-dxy)+(0.0f-dyy));
+   gfxVertex(-1 * 2,-1 * 2,0);
+}
+
+void Render()
+{
+       zoom += BASS * 2 * TIMEPASS;
+       rot += TREBLE * 4* TIMEPASS;
+
+       t = TIMEPASS*(BASS+0.25) * 20;
+       px = px + (pdx*t);
+       if (px>28) { pdx = -Abs(pdx); px = 28; }
+       if (px<4) { pdx = Abs(pdx); px = 4; }
+       py = py + (pdy*t);
+       if (py>20) { pdy = -Abs(pdy); py=20; }
+       if (py<4) { pdy = Abs(pdy); py = 4; }
+
+       // draw
+       gfxSetTexture(TEXTURE_ALBUMART);
+       gfxSetAspect(0);
+       gfxTranslate(((px / 28.0f) - 0.5f), (py / 20.0f) - 0.5f, 2.414f);
+       gfxBegin(PRIM_QUADLIST);
+
+       gfxColour(1.0f, 1.0f, 1.0f, 1);
+       Quad(Sin(rot),(Fabs(Sin(zoom)) + 0.25)*5);      
+       gfxEnd();
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/Awakenings.vtx b/addons/visualization.vortex/resources/Presets/Awakenings.vtx
new file mode 100644 (file)
index 0000000..e052516
--- /dev/null
@@ -0,0 +1,125 @@
+// Awakenings.vtx
+// Author - MrC
+// Based on Awakenings_remix.r4 by John Baker and Gordon Williams
+
+int x,y;
+float c,tm,tn,td;
+float[] c_x(256),c_y(256),c_z(256),c_vz(256),c_rx(256),c_ry(256),c_sx(256),c_sy(256),c_sz(256);
+float d;
+
+Texture        envTexture;
+
+void MakeNew(int n)
+{
+   c_x[n]=c_y[n]=0;
+   while (Mag(c_x[n],c_y[n])<1)
+   {
+      c_x[n] = (Rand()*8.0)-4.0;
+      c_y[n] = (Rand()*8.0)-4.0;
+   }
+
+   c_z[n] = 10;
+   c_vz[n] = (1.0+Rand())*4;
+   c_rx[n] = (1.0+Rand())*80;
+   c_ry[n] = (1.0+Rand())*80;
+   c_sx[n] = (0.5+Rand())*0.5;
+   c_sy[n] = (0.5+Rand())*0.5;
+   c_sz[n] = (0.5+Rand())*0.05;
+}
+
+
+void Init()
+{
+       envTexture.LoadTexture("xbmc_icon.png");
+       
+       for (x=0;x<256;x=x+1)
+       {
+      MakeNew(x);
+      c_z[x] = Rand()*10;
+       }
+       tm = tn = 0;
+}
+
+void mything(float x,float y,float z)
+{ 
+   gfxBegin(PRIM_QUADLIST); 
+      gfxTexCoord(0,0); 
+      gfxVertex(-x,y,0); 
+      gfxTexCoord(1,0); 
+      gfxVertex(x,y,0); 
+      gfxTexCoord(1,1); 
+      gfxVertex(x,-y,0); 
+      gfxTexCoord(0,1); 
+      gfxVertex(-x,-y,0); 
+
+      gfxTexCoord(0,0); 
+      gfxVertex(-x,0,z); 
+      gfxTexCoord(1,0); 
+      gfxVertex(x,0,z); 
+      gfxTexCoord(1,1); 
+      gfxVertex(x,0,-z); 
+      gfxTexCoord(0,1); 
+      gfxVertex(-x,0,-z); 
+
+      gfxTexCoord(0,0); 
+      gfxVertex(0,-y,z); 
+      gfxTexCoord(1,0); 
+      gfxVertex(0,y,z); 
+      gfxTexCoord(1,1); 
+      gfxVertex(0,y,-z); 
+      gfxTexCoord(0,1); 
+      gfxVertex(0,-y,-z); 
+   gfxEnd(); 
+} 
+
+void Render()
+{
+       td = ((TREBLE+1.5f) * TIMEPASS);
+       tm = tm + td;
+       tn = tn + ((BASS+1.0) * TIMEPASS * 2);
+
+       gfxTranslate(Cos(tn * 1.23f) * 0.25f, Sin(tn) * 0.25f, 0.0f);
+       gfxRotate(Cos(tn*0.6734f)*20.0f, 1.0f, 0.0f, 0.0f);
+       gfxRotate(Sin(tn*0.2143f)*20.0f, 0.0f, 1.0f, 0.0f);
+
+       gfxSetBlendMode(BLEND_MOD);
+       gfxSetTexture(envTexture);
+       gfxTranslate(0, 0, 3+BASS);
+       gfxBegin(PRIM_QUADLIST);
+       gfxTexCoord(0, 0);
+       gfxVertex(-1.5, 1,0);
+       gfxTexCoord(1, 0);
+       gfxVertex(1.5, 1,0);
+       gfxTexCoord(1, 1);
+       gfxVertex(1.5, -1,0);
+       gfxTexCoord(0, 1);
+       gfxVertex(-1.5, -1,0);
+       gfxEnd();
+       gfxTranslate(0, 0, -3-BASS);
+
+       gfxSetTexture(envTexture);
+       gfxSetBlendMode(BLEND_ADD);
+
+       for (x=255;x>0;x=x-1)
+       { 
+               c_z[x] = c_z[x] - (td*c_vz[x]); 
+               if (c_z[x]<0) MakeNew(x); 
+
+               c = (5.0-(c_z[x]*0.5))*0.1; 
+               if (c>1.75) c=(2-c)*4; 
+               if (c>1) c=1;    
+
+               d = (20.0-(c_z[x]*2.0))*0.1; 
+               if (d>1.75) d=(2-c)*4; 
+               if (d>1) c=1;    
+
+               gfxColour(c,d*(TREBLE+1)*0.5,c,1); 
+               gfxPushMatrix(); 
+               gfxTranslate(c_x[x],c_y[x],c_z[x]); 
+               gfxRotate(c_rx[x]*tm,1.0f,0.0f,0.0f); 
+               gfxRotate(c_ry[x]*tm,0.0f,1.0f,0.0f); 
+               mything(c_sx[x],c_sy[x],c_sz[x]); 
+               gfxPopMatrix(); 
+       } 
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/Block.tra b/addons/visualization.vortex/resources/Presets/Block.tra
new file mode 100644 (file)
index 0000000..6f3526b
--- /dev/null
@@ -0,0 +1,88 @@
+// Block.tra
+// Author - MrC
+// Based on FadeBlocks.r4 by Gordon Williams
+
+int i,x,y;
+float dx,dy,sx,sy,dd,a,b,mytime;
+float[] d(64);
+Texture        mix;
+
+void Init()
+{
+       mix.CreateTexture();
+       for (x=0;x<64;x=x+1)
+               d[x] = Rand()-0.5;
+       mytime = 0;
+}
+
+void Rect(float x0, float y0, float x1, float y1)
+{
+       gfxBegin(PRIM_QUADLIST);
+
+    gfxTexCoord(0,1);
+    gfxVertex(x0, y0, 0.0);
+    gfxTexCoord(1, 1);
+    gfxVertex(x1, y0, 0.0);
+    gfxTexCoord(1, 0);
+    gfxVertex(x1, y1, 0.0);
+    gfxTexCoord(0, 0);
+    gfxVertex(x0, y1, 0.0);
+    
+    gfxEnd();
+
+}
+void Render()
+{
+     mytime = mytime + (TIMEPASS*0.25);
+       FINISHED = mytime>=1.0;
+        b = (1.0-Cos(mytime*3.14159))*0.5;
+
+
+       gfxSetRenderTarget(mix);
+       gfxClear(0);
+       gfxSetAspect(0);
+       a = -2.414;
+       gfxTranslate(0, 0, -a);
+       gfxSetBlendMode(BLEND_MOD);
+       gfxColour(1, 1, 1, 1-b);
+       gfxSetTexture(TEXTURE_CURRPRESET);
+       gfxTexRect(-1, 1, 1, -1); 
+       gfxColour(1, 1, 1, b);
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxTexRect(-1, -1, 1, 1); 
+       
+       gfxSetRenderTarget(TEXTURE_FRAMEBUFFER);
+       gfxSetBlendMode(BLEND_OFF);
+
+
+   gfxSetAspect((1.0-Cos(b*3.14159*2.0))*0.5);
+
+       gfxRotate(b*180, 0, 1, 0);
+       gfxRotate(b*180, 0, 0, 1);
+       gfxColour(1, 1, 1, 1);
+
+       gfxSetTexture(mix);
+       
+       gfxBegin(PRIM_QUADLIST);
+
+       for (i=0;i<64;i=i+1)
+       {
+      x = i%8;
+      y = i/8;
+      dx = (x/8.0);
+      dy = (y/8.0);
+      sx = ((x+1.0)/8.0);
+      sy = ((y+1.0)/8.0);
+      dd = 0.83*(a-((0.5-b)*2*d[i]));
+      gfxTexCoord(1.0-dx,dy);
+      gfxVertex(dd*(dx-0.5),dd*(dy-0.5),d[i]);
+      gfxTexCoord(1.0-sx,dy);
+      gfxVertex(dd*(sx-0.5),dd*(dy-0.5),d[i]);
+      gfxTexCoord(1.0-sx,sy);
+      gfxVertex(dd*(sx-0.5),dd*(sy-0.5),d[i]);
+      gfxTexCoord(1.0-dx,sy);
+      gfxVertex(dd*(dx-0.5),dd*(sy-0.5),d[i]);
+   }
+   gfxEnd();
+               
+}
diff --git a/addons/visualization.vortex/resources/Presets/ChessMania.vtx b/addons/visualization.vortex/resources/Presets/ChessMania.vtx
new file mode 100644 (file)
index 0000000..278d36c
--- /dev/null
@@ -0,0 +1,90 @@
+// ChessMania.vtx
+// Author - MrC
+// Based on Rovastar - Chessmania.r4 by John Baker
+
+Texture checker;
+Texture tex1;
+Texture tex2;
+
+float[] cubeRot(3*3);
+float[] cubePos(3*3);
+
+void Init()
+{
+       checker.LoadTexture("checker.png");
+       tex1.CreateTexture();
+       tex2.CreateTexture();
+
+       for (int i=0; i<9;i++)
+       {
+               cubePos[i] = 0.0f;
+               cubeRot[i] = 0.0f;
+       }
+
+}
+
+void RenderCube(int cube, float dist)
+{
+       gfxPushMatrix();
+       gfxTranslate(0, 0, dist);
+
+       gfxRotate(cubePos[0+cube*3],1,0,0);
+       gfxRotate(cubePos[1+cube*3],0,0,1);
+       gfxRotate(cubePos[2+cube*3],0,1,0);
+
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+       gfxPopMatrix();
+}
+
+void Render()
+{
+       gfxSetTexture(checker);
+
+       gfxTranslate(0,0,2.414);
+
+       for (int i=0; i<9;i++)
+       {
+               cubePos[i] = cubePos[i] + cubeRot[i];
+               cubeRot[i] = cubeRot[i] * 0.95;
+               if (cubeRot[i] > 1)
+                       cubeRot[i] = 1;
+               if (cubeRot[i] < -1)
+                       cubeRot[i] = -1;
+       }
+
+       cubeRot[0] += BASS;
+       cubeRot[1] += MIDDLE;
+       cubeRot[2] += TREBLE;
+       
+       cubeRot[4] += BASS;
+       cubeRot[5] += MIDDLE;
+       cubeRot[3] += TREBLE;
+
+       cubeRot[8] += BASS;
+       cubeRot[6] += MIDDLE;
+       cubeRot[7] += TREBLE;
+       
+       gfxSetRenderTarget(tex1);
+       gfxClear(0);
+       gfxSetTexture(checker);
+       gfxSetAspect(0);
+       gfxTexRect(-1, -1, 1, 1);
+       RenderCube(2, -1.0);
+
+       gfxSetRenderTarget(tex2);
+       gfxClear(0);
+       gfxSetTexture(checker);
+       gfxSetAspect(0);
+       gfxTexRect(-1, -1, 1, 1);
+       gfxSetTexture(tex1);
+       RenderCube(1, -1.0);
+
+       gfxSetRenderTarget(TEXTURE_FRAMEBUFFER);
+       gfxSetTexture(checker);
+       gfxSetAspect(0);
+       gfxTexRect(-1, -1, 1, 1);
+       gfxSetTexture(tex2);
+       gfxSetAspect(1);
+       RenderCube(0, -1.15);
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeBlowOut.tra b/addons/visualization.vortex/resources/Presets/CubeBlowOut.tra
new file mode 100644 (file)
index 0000000..4674c09
--- /dev/null
@@ -0,0 +1,160 @@
+// CubeBlowOut.tra
+// Author - MrC
+// Based on FadeCubeBlowOut.r4 by Gordon Williams
+
+int x,y;
+float c,tm,td,ftime,fric;
+float[] c_tx(64),c_ty(64),c_x(64),c_y(64),c_z(64),c_vx(64),c_vy(64),c_vz(64),c_rx(64),c_ry(64);
+const float dx = 0.125;
+const float dy = 0.125;
+
+void Init()
+{
+       reset();
+}
+
+void makenew(int n)
+{
+   c_tx[n]=(n%8)/8.0;
+   c_ty[n]=(n-(n%8))/64.0;
+   c_x[n] = (c_tx[n]-0.5)*2+dx;
+   c_y[n] = (c_ty[n]-0.5)*2+dy;
+   c_z[n] = 0;
+   c_vx[n] = (c_x[n]+Rand()-0.5);
+   c_vy[n] = (c_y[n]+Rand());
+   c_vz[n] = (1.0+Rand());   
+   c_rx[n] = (1.0+Rand())*160;
+   c_ry[n] = (1.0+Rand())*160;
+}
+
+void drawcube(int n)
+{
+   gfxBegin(PRIM_QUADLIST);
+   // FRONT FACE
+   gfxTexCoord(c_tx[n],c_ty[n]);
+   gfxVertex(-1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,-1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+   // BACK
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   // LEFT
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(-1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+   // RIGHT
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(1,1,-1);
+   // UP
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,-1,-1);
+   // DOWN
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+
+   gfxEnd();
+}
+
+void reset()
+{
+   for (x=0;x<64;x=x+1)
+   {
+      makenew(x);
+   }
+   tm = 0;
+   ftime = 0;
+}
+
+void Render()
+{
+       gfxPushMatrix();
+       gfxTranslate(0, 0, 2.414);
+       gfxSetAspect(0);
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);
+       gfxPopMatrix();
+       gfxSetAspect(1);
+       gfxSetTexture(TEXTURE_CURRPRESET);
+
+
+       if (ftime<0.1)
+       td = TIMEPASS*(ftime*10);
+       else
+       td = TIMEPASS;
+       tm = tm+td;
+
+       ftime = ftime + (TIMEPASS*0.225);
+       if (ftime>0.6)
+       {
+               ftime=1;
+               FINISHED = true;
+               return;
+       }
+
+       gfxPushMatrix();
+
+       gfxSetAspect(0);
+       gfxScale(-1,1,1);
+       gfxTranslate(0,0,2.414);
+       gfxTranslate(0,0,-dx);
+       gfxRotate(180,0,1,0);
+
+       fric = Pow(0.75,td);
+
+       for (x=0;x<64;x=x+1)
+       {
+       c_vy[x] = c_vy[x] - (td*2);
+       c_x[x] = c_x[x] + (td*c_vx[x]);
+       c_y[x] = c_y[x] + (td*c_vy[x]);
+       c_z[x] = c_z[x] + (td*c_vz[x]);
+       c_vx[x] = c_vx[x]*fric;
+       c_vy[x] = c_vy[x]*fric;
+       c_vz[x] = c_vz[x]*fric;
+
+       gfxPushMatrix();
+       gfxTranslate(c_x[x],c_y[x],c_z[x]);
+       gfxRotate(c_rx[x]*tm,1,0,0);
+       gfxRotate(c_ry[x]*tm,0,1,0);
+       gfxScale(dx,dx,dx);
+       drawcube(x);
+
+       gfxPopMatrix();
+
+       }
+
+       gfxPopMatrix();
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeGrid.vtx b/addons/visualization.vortex/resources/Presets/CubeGrid.vtx
new file mode 100644 (file)
index 0000000..bbceb82
--- /dev/null
@@ -0,0 +1,69 @@
+// CubeGrid.vtx
+// Author - MrC
+// Based on CubeGrid.r4 by Gordon Williams
+
+int x,y,z;
+float t,c;
+float bt,bs;
+float time;
+
+const int XMAX = 3;
+const int YMAX = 3;
+const int ZMAX = 5;
+
+Texture envTexture;
+
+void Init()
+{
+   t = 0;
+   bt = 0;
+   bs = 0;
+   time = 0;
+   envTexture.LoadTexture("env3.png");
+}
+
+void Render()
+{
+       bt = bt + (TIMEPASS*(MIDDLE+0.5f));
+       bs = bs + (TIMEPASS*(TREBLE+0.5f));
+       t = t + (TIMEPASS*2.5);
+       while (t>1.0)
+       {
+               t=t-1.0;
+       }
+
+       time = time + TIMEPASS;
+
+       gfxRotate(time*60.0f, 0.0f, 0.0f, 1.0f);
+       gfxRotate(bt*53.0f, 1.0f, 0.0f, 1.0f);
+       gfxRotate(bs*62.0f, 0.0f, 1.0f, 0.0f);
+
+       gfxSetEnvTexture(envTexture);
+
+       gfxTranslate(-XMAX*0.5f, -YMAX*0.5f, -3.0f+t);
+       for (z=0;z<=ZMAX;z=z+1)
+       {    
+               c=1;
+               if (z==0)
+                       c = t;
+               if (z==ZMAX)
+                       c = 1.0f - t;
+               gfxColour(c,c,c,1);
+               for (y=0;y<=YMAX;y=y+1) 
+               {
+                       for (x=0;x<=XMAX;x=x+1)
+                       {
+                               gfxCube(x-0.15f, y-0.15f, z-0.15f, x+0.15f, y+0.15f, z+0.15f);
+                               if (x<XMAX)
+                               {
+                                       gfxCube(x+0.15f, y-0.05f, z-0.05f, x+0.85f, y+0.05f, z+0.05f);
+                               }
+                               if (y<YMAX)
+                               {
+                                       gfxCube(x-0.05f, y+0.15f, z-0.05f, x+0.05f, y+0.85f, z+0.05f);
+                               }
+                               gfxCube(x-0.05f, y-0.05f, z+0.15f, x+0.05f, y+0.05f, z+0.85f);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeGridStrobe.vtx b/addons/visualization.vortex/resources/Presets/CubeGridStrobe.vtx
new file mode 100644 (file)
index 0000000..5180032
--- /dev/null
@@ -0,0 +1,74 @@
+// CubeGridStrobe.vtx
+// Author - Pike
+// Based on CubeGrid.r4 by Gordon Williams
+
+int x,y,z;
+float t,c;
+float bt,bs;
+float time;
+
+const int XMAX = 3;
+const int YMAX = 3;
+const int ZMAX = 5;
+
+Texture envTexture;
+Texture envTexture1;
+
+void Init()
+{
+   t = 0;
+   bt = 0;
+   bs = 0;
+   time = 0;
+   envTexture.LoadTexture("env2.jpg");
+   envTexture1.LoadTexture("env3_darker.png");
+}
+
+void Render()
+{
+       bt = bt + (TIMEPASS*(MIDDLE+0.5f));
+       bs = bs + (TIMEPASS*(TREBLE+0.5f));
+       t = t + (TIMEPASS*2.5);
+       while (t>1.0)
+       {
+               t=t-1.0;
+       }
+
+       time = time + TIMEPASS;
+
+       gfxRotate(time*60.0f, 0.0f, 0.0f, 1.0f);
+       gfxRotate(bt*53.0f, 1.0f, 0.0f, 1.0f);
+       gfxRotate(bs*62.0f, 0.0f, 1.0f, 0.0f);
+
+       if (TREBLE > 0.5)
+               gfxSetEnvTexture(envTexture);
+       else
+               gfxSetEnvTexture(envTexture1);
+
+       gfxTranslate(-XMAX*0.5f, -YMAX*0.5f, -3.0f+t);
+       for (z=0;z<=ZMAX;z=z+1)
+       {    
+               c=1;
+               if (z==0)
+                       c = t;
+               if (z==ZMAX)
+                       c = 1.0f - t;
+               gfxColour(c,c,c,1);
+               for (y=0;y<=YMAX;y=y+1) 
+               {
+                       for (x=0;x<=XMAX;x=x+1)
+                       {
+                               gfxCube(x-0.15f, y-0.15f, z-0.15f, x+0.15f, y+0.15f, z+0.15f);
+                               if (x<XMAX)
+                               {
+                                       gfxCube(x+0.15f, y-0.05f, z-0.05f, x+0.85f, y+0.05f, z+0.05f);
+                               }
+                               if (y<YMAX)
+                               {
+                                       gfxCube(x-0.05f, y+0.15f, z-0.05f, x+0.05f, y+0.85f, z+0.05f);
+                               }
+                               gfxCube(x-0.05f, y-0.05f, z+0.15f, x+0.05f, y+0.05f, z+0.85f);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeGridWire.vtx b/addons/visualization.vortex/resources/Presets/CubeGridWire.vtx
new file mode 100644 (file)
index 0000000..18d848d
--- /dev/null
@@ -0,0 +1,75 @@
+// CubeGridWire.vtx
+// Author - MrC
+// Based on CubeGrid.r4 by Gordon Williams
+
+int x,y,z;
+float t,c;
+float bt,bs;
+float time;
+
+const int XMAX = 3;
+const int YMAX = 3;
+const int ZMAX = 5;
+
+Texture envTexture;
+
+void Init()
+{
+   t = 0;
+   bt = 0;
+   bs = 0;
+   time = 0;
+   envTexture.LoadTexture("env2.jpg");
+}
+
+void Render()
+{
+       bt = bt + (TIMEPASS*(MIDDLE+0.5f));
+       bs = bs + (TIMEPASS*(TREBLE+0.5f));
+       t = t + (TIMEPASS*2.5);
+       while (t>1.0)
+       {
+               t=t-1.0;
+       }
+
+       time = time + TIMEPASS;
+
+       gfxRotate(time*60.0f, 0.0f, 0.0f, 1.0f);
+       gfxRotate(bt*53.0f, 1.0f, 0.0f, 1.0f);
+       gfxRotate(bs*62.0f, 0.0f, 1.0f, 0.0f);
+
+       if (TREBLE < 0.5)
+       {
+               gfxSetTexture(NULL);
+               gfxSetFillMode(FILLMODE_WIREFRAME);
+       }
+       else
+               gfxSetEnvTexture(envTexture);
+
+       gfxTranslate(-XMAX*0.5f, -YMAX*0.5f, -3.0f+t);
+       for (z=0;z<=ZMAX;z=z+1)
+       {    
+               c=1;
+               if (z==0)
+                       c = t;
+               if (z==ZMAX)
+                       c = 1.0f - t;
+               gfxColour(c,c,c,1);
+               for (y=0;y<=YMAX;y=y+1) 
+               {
+                       for (x=0;x<=XMAX;x=x+1)
+                       {
+                               gfxCube(x-0.15f, y-0.15f, z-0.15f, x+0.15f, y+0.15f, z+0.15f);
+                               if (x<XMAX)
+                               {
+                                       gfxCube(x+0.15f, y-0.05f, z-0.05f, x+0.85f, y+0.05f, z+0.05f);
+                               }
+                               if (y<YMAX)
+                               {
+                                       gfxCube(x-0.05f, y+0.15f, z-0.05f, x+0.05f, y+0.85f, z+0.05f);
+                               }
+                               gfxCube(x-0.05f, y-0.05f, z+0.15f, x+0.05f, y+0.05f, z+0.85f);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeRain.vtx b/addons/visualization.vortex/resources/Presets/CubeRain.vtx
new file mode 100644 (file)
index 0000000..5ddbae8
--- /dev/null
@@ -0,0 +1,70 @@
+// CubeRain.vtx
+// Author - MrC
+// Based on CubeRain.r4 By Gordon Williams
+int x,y;
+float c,tm,tn,td;
+float[] c_x(256),c_y(256),c_z(256),c_vz(256),c_rx(256),c_ry(256),c_sx(256),c_sy(256),c_sz(256);
+
+float counter;
+Texture        envTexture;
+
+void MakeNew(int n)
+{
+   c_x[n]=c_y[n]=0;
+   while (Mag(c_x[n],c_y[n])<1)
+   {
+      c_x[n] = (Rand()*8.0)-4.0;
+      c_y[n] = (Rand()*8.0)-4.0;
+   }
+
+   c_z[n] = 10;
+   c_vz[n] = (1.0+Rand())*4;
+   c_rx[n] = (1.0+Rand())*80;
+   c_ry[n] = (1.0+Rand())*80;
+   c_sx[n] = (0.5+Rand())*0.15;
+   c_sy[n] = (0.5+Rand())*0.15;
+   c_sz[n] = (0.5+Rand())*0.15;
+}
+
+void Init()
+{
+       envTexture.LoadTexture("env2.jpg");
+       counter = 0;
+       
+       for (x=0;x<256;x=x+1)
+       {
+      MakeNew(x);
+      c_z[x] = Rand()*10;
+       }
+       tm = tn = 0;
+}
+
+void Render()
+{
+       td = ((TREBLE+1.0f)*TIMEPASS);
+       tm = tm + td;
+       tn = tn + ((BASS+1.5)*TIMEPASS*2);
+
+       gfxTranslate(Cos(tn * 1.23f) * 0.5f, Sin(tn) * 0.5f, 0.0f);
+       gfxRotate(Cos(tn*0.6734f)*20.0f, 1.0f, 0.0f, 0.0f);
+       gfxRotate(Sin(tn*0.2143f)*20.0f, 0.0f, 1.0f, 0.0f);
+
+       gfxSetEnvTexture(envTexture);
+
+       for (x=0;x<256;x=x+1)
+       {
+               c_z[x] = c_z[x] - (td*c_vz[x]);
+               if (c_z[x]<0)
+               {
+                       MakeNew(x);
+               }
+               c = Cos(c_z[x]*0.05*3.1416);
+               gfxColour(c,c,c,1);
+               gfxPushMatrix();
+               gfxTranslate(c_x[x],c_y[x],c_z[x]);
+               gfxRotate(c_rx[x]*tm, 1, 0, 0);
+               gfxRotate(c_ry[x]*tm, 0, 1, 0);
+               gfxCube(-c_sx[x],-c_sy[x],-c_sz[x],c_sx[x],c_sy[x],c_sz[x]);
+               gfxPopMatrix();
+       }
+}
diff --git a/addons/visualization.vortex/resources/Presets/CubeSlide.vtx b/addons/visualization.vortex/resources/Presets/CubeSlide.vtx
new file mode 100644 (file)
index 0000000..09beb21
--- /dev/null
@@ -0,0 +1,69 @@
+// CubeSlide.vtx
+// Author - MrC
+// Based on CubeSlide.r4 by Gordon Williams
+
+Texture env;
+Texture skybox;
+
+int x,y;
+float tm,tn,ofs,c;
+
+void Init()
+{
+       skybox.LoadTexture("skybox.dds");
+       env.LoadTexture("tex_edge.png");
+}
+
+void reset()
+{
+   tm = 0;
+   tn = 0;
+}
+
+float tiltfunc(float p)
+{
+   return (Sin((ofs+p)*0.1)+Cos((ofs+p)*0.123))*10.0;
+}
+
+void Render()
+{
+       tm = tm + 1 * TIMEPASS * 8;
+
+       if (TREBLE > 0.0)
+               tm = tm + ((TREBLE) * TIMEPASS * 20);
+
+       while (tm>1)
+       {
+               tm = tm-1;
+               ofs = ofs + 1;
+       }
+
+       tn = tn + ((BASS+1.5)*TIMEPASS);
+
+
+       gfxSetAspect(0);
+       gfxLookAt(Cos(tn*1.23)*5,Sin(tn)*5,(tm*2)-1,Cos(tn*0.6734)*2,Sin(tn*0.2143)*2,(tm*2)+8,0,1,0);   
+       gfxRotate(-tiltfunc(0)*tm,0,0,1);
+
+       gfxSetTexture(skybox);
+       gfxPushMatrix();
+       gfxTranslate(0,0,tm*2);
+       gfxRotate(tiltfunc(0)*tm,0,0,1);
+       gfxCube(-400,-400,-400,400,400,400);
+       gfxPopMatrix();
+       gfxSetTexture(env);
+
+       gfxSetBlendMode(BLEND_ADD);
+
+       for (y=0;y<15;y=y+1)
+       {
+               c = 1.0 - ((y-tm)/15.0);      
+               for (x=-3;x<4;x=x+1)
+               {
+                       gfxColour(c,c,c,1);
+                       gfxCube((x*2)-0.75,-0.375,(y*2)-0.75, (x*2)+0.75,0.375,(y*2)+0.75);
+               }
+               gfxRotate(tiltfunc(y),0,0,1);
+       }
+   
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/CubeTunnel.vtx b/addons/visualization.vortex/resources/Presets/CubeTunnel.vtx
new file mode 100644 (file)
index 0000000..9bb7a69
--- /dev/null
@@ -0,0 +1,66 @@
+// CubeTunnel.vtx
+// Author - MrC
+// Based on CubeTunnel.r4 By Gordon Williams
+
+Texture        texture;
+Texture        sky;
+
+int    x,y;
+float tm,tn,ofs,c,ox,oy,stretch;
+
+void Init()
+{
+       sky.LoadTexture("skybox.dds");
+       texture.LoadTexture("plasma_edge.jpg");
+       
+       tm = 0;
+       tn = 0;
+}
+
+float tiltfunc(float p)
+{
+   float a =  (Sin((ofs+p)*0.1)        + Cos((ofs+p)*0.423))*15.0;
+   return a;
+}
+
+void Render()
+{
+       tm = tm + ((TREBLE+1.5)*TIMEPASS*8);
+       while (tm>1)
+       {
+               tm = tm-1;
+               ofs =   ofs     + 1;
+       }
+
+
+       tn =    tn + ((BASS+1.5)*TIMEPASS);
+
+       stretch = 3.5+(Sin(tn*1.23)*2);
+
+       gfxSetAspect(0);
+       gfxLookAt(Cos(tn*1.23)*2.5, Sin(tn)*2.5,(tm*stretch)-1,Cos(tn*0.6734)*2,Sin(tn*0.2143)*2,(tm*stretch)+6,0.0,1.0,0.0);   
+       gfxRotate(-tiltfunc(0)*tm,0,0,1);
+
+       gfxSetTexture(sky);
+       gfxPushMatrix();
+       gfxTranslate(0, 0, tm*stretch);
+       gfxRotate(tiltfunc(0)*tm,0,0,1);
+       gfxCube(-400,-400,-400,400,400,400);
+       gfxPopMatrix();
+
+       gfxSetTexture(texture);
+
+       gfxSetBlendMode(BLEND_ADD);
+       for (y=0;y<15;y=y+1)
+       {
+               c = 1.0 - ((y-tm)/15.0);      
+               for (x=0;x<8;x=x+1)
+               {
+                       gfxColour(c,c,c,1);
+                       ox = Sin(x*3.14159*0.25)*5;
+                       oy = Cos(x*3.14159*0.25)*5;
+                       gfxCube(ox-0.75,oy-0.75,(y*stretch)-(0.75*stretch), 0.75+ox,oy+0.75,(y*stretch)+(0.75*stretch));
+               }
+               gfxRotate(tiltfunc(y),0,0,1);
+       }
+}
diff --git a/addons/visualization.vortex/resources/Presets/Cubes.tra b/addons/visualization.vortex/resources/Presets/Cubes.tra
new file mode 100644 (file)
index 0000000..c66439a
--- /dev/null
@@ -0,0 +1,162 @@
+// Cube.tra
+// Author - MrC
+// Based on FadeCube.r4 By Gordon Williams
+
+int x,y;
+float c,tm,td,ftime,fric;
+float[] c_tx(64),c_ty(64),c_x(64),c_y(64),c_z(64),c_vx(64),c_vy(64),c_vz(64),c_rx(64),c_ry(64);
+const float dx = 0.125;
+const float dy = 0.125;
+
+void Init()
+{
+       reset();
+}
+
+void makenew(int n)
+{
+   c_tx[n]=(n%8)/8.0;
+   c_ty[n]=(n-(n%8))/64.0;
+   c_x[n] = (c_tx[n]-0.5)*2+dx;
+   c_y[n] = (c_ty[n]-0.5)*2+dy;
+   c_z[n] = 0;
+   c_vx[n] = (c_x[n]+Rand()-0.5);
+   c_vy[n] = (c_y[n]+Rand());
+   c_vz[n] = -(1.0+Rand());   
+   c_rx[n] = (1.0+Rand())*160;
+   c_ry[n] = (1.0+Rand())*160;
+}
+
+void drawcube(int n)
+{
+   gfxBegin(PRIM_QUADLIST);
+   // FRONT FACE
+   gfxTexCoord(c_tx[n],c_ty[n]);
+   gfxVertex(-1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,-1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+   // BACK
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   // LEFT
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(-1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+   // RIGHT
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(1,1,-1);
+   // UP
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,-1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,-1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,-1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,-1,-1);
+   // DOWN
+   gfxTexCoord(c_tx[n],1-(c_ty[n]));
+   gfxVertex(1,1,-1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]));
+   gfxVertex(1,1,1);
+   gfxTexCoord(c_tx[n]+dx,1-(c_ty[n]+dy));
+   gfxVertex(-1,1,1);
+   gfxTexCoord(c_tx[n],1-(c_ty[n]+dy));
+   gfxVertex(-1,1,-1);
+
+   gfxEnd();
+}
+
+void reset()
+{
+   for (x=0;x<64;x=x+1)
+   {
+      makenew(x);
+   }
+   tm = 0;
+   ftime = 0;
+}
+
+void Render()
+{
+       gfxPushMatrix();
+       gfxTranslate(0, 0, 2.414);
+       gfxSetAspect(0);
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);
+       gfxPopMatrix();
+       gfxSetAspect(1);
+       gfxSetTexture(TEXTURE_CURRPRESET);
+
+       if (ftime<0.1)
+               td = TIMEPASS*(ftime*10);
+       else
+               td = TIMEPASS;
+       tm = tm+td;
+
+       ftime = ftime + (TIMEPASS*0.225);
+       if (ftime>1)
+       {
+               ftime=1;
+               FINISHED = true;
+               return;
+       }
+
+       gfxPushMatrix();
+
+       gfxSetAspect(0);
+       gfxScale(-1,1,1);
+       gfxTranslate(0,0,2.414);
+       gfxTranslate(0,0,dx);
+
+       gfxRotate(180,0,1,0);
+
+
+       fric = Pow(0.75,td);
+
+
+       for (x=0;x<64;x=x+1)
+       {
+               c_vy[x] = c_vy[x] - (td*2);
+               c_x[x] = c_x[x] + (td*c_vx[x]);
+               c_y[x] = c_y[x] + (td*c_vy[x]);
+               c_z[x] = c_z[x] + (td*c_vz[x]);
+               c_vx[x] = c_vx[x]*fric;
+               c_vy[x] = c_vy[x]*fric;
+               c_vz[x] = c_vz[x]*fric;
+
+               gfxPushMatrix();
+               gfxTranslate(c_x[x],c_y[x],c_z[x]);
+               gfxRotate(c_rx[x]*tm,1,0,0);
+               gfxRotate(c_ry[x]*tm,0,1,0);
+               gfxScale(dx,dx,dx);
+               drawcube(x);
+
+               gfxPopMatrix();
+
+       }
+
+       gfxPopMatrix();
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/DynamicCubeTunnel.vtx b/addons/visualization.vortex/resources/Presets/DynamicCubeTunnel.vtx
new file mode 100644 (file)
index 0000000..1f78e1c
--- /dev/null
@@ -0,0 +1,176 @@
+// DynamicCubeTunnel.vtx
+// Author - MrC
+// Based on DynamicCubeTunnel.r4 by Gordon Williams
+
+Texture env;
+Texture skybox;
+Map map;
+
+
+int x,y;
+float tm,tn,ofs,c;
+float btime,ctime;
+float[] v(32*24),o(32*24),va(32*24),oa(32*24);
+float[] pv(4),po(4);
+int sx,sy,i;
+float wa,txa,txb,tya,tyb;
+
+
+void Init()
+{
+       skybox.LoadTexture("skybox.dds");
+       env.LoadTexture("huemap.jpg");
+       map.SetTimed();
+       reset();
+}
+
+void reset()
+{
+       tm = 0;
+       tn = 0;
+       btime = 0;
+       ctime = 0;
+
+       for (sy=0;sy<24;sy=sy+1)
+       {
+               for (sx=0;sx<32;sx=sx+1)
+               {
+                       v[sy*32 + sx] = Rand()+1.0;
+                       o[sy*32 + sx] = Rand()*6.3;     
+                       va[sy*32 + sx] = (Rand()+1.0)*3.0;
+                       oa[sy*32 + sx] = Rand()*6.3;    
+               }
+       }
+
+
+       for (i=0;i<4;i=i+1)
+       {
+               pv[i] = Rand()+1.0;
+               po[i] = Rand()*6.3;
+       }
+
+}
+
+float tiltfunc(float p)
+{
+   return (Sin((ofs+p)*0.1)+Cos((ofs+p)*0.123))*10.0;
+}
+
+void Render()
+{
+
+       btime = btime + (TIMEPASS*(TREBLE+0.5)*2.0);
+       ctime = ctime + (TIMEPASS*(BASS+0.5)*0.5);
+
+       for (sy=0;sy<24;sy=sy+1)
+       for (sx=0;sx<32;sx=sx+1)
+       {
+       float tu = ((sx-15.5)/16) + Sin(oa[sy * 32 + sx] + (va[sy * 32 + sx]*btime));
+       float tv = ((sy-11.5)/12) + Sin(o[sy * 32 + sx] + (v[sy * 32 + sx]*btime));
+       map.SetValues(sx, sy, tu, tv, -1.5, -1.5, -1.5);
+       }
+
+       map.Render();
+
+       gfxPushMatrix();
+       gfxSetAspect(0);
+       gfxTranslate(0,0,2.414);
+
+       gfxSetTexture(env);
+       gfxSetBlendMode(BLEND_MOD);
+
+       gfxSetRenderTarget(map);
+
+       txa = (Sin(po[0]+(ctime*pv[0]))*2.0);
+       tya = (Sin(po[1]+(ctime*pv[1]))*2.0);
+       txb = (Sin(po[2]+(ctime*pv[2]))*2.0);
+       tyb = (Sin(po[3]+(ctime*pv[3]))*2.0);
+
+       gfxBegin(PRIM_QUADLIST);
+       // bottom
+       gfxColour(1,1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-1,-0.9,0);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(1,-0.9,0);
+       gfxColour(1,1,1,1);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(1,-1.0,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-1,-1.0,0);
+
+       // top
+       gfxColour(1,1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-1,0.9,0);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(1,0.9,0);
+       gfxColour(1,1,1,1);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(1,1.0,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-1,1.0,0);
+
+       // left
+       gfxColour(1,1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-0.9,-1,0);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(-0.9,1,0);
+       gfxColour(1,1,1,1);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(-1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(-1,-1,0);
+
+       // right
+       gfxColour(1,1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(0.9,-1,0);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(0.9,1,0);
+       gfxColour(1,1,1,1);
+       gfxTexCoord(txb,tyb);
+       gfxVertex(1,1,0);
+       gfxTexCoord(txa,tya);   
+       gfxVertex(1,-1,0);
+       gfxEnd();
+
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+       gfxPopMatrix();
+
+
+       tm = tm + ((TREBLE+1.5)*TIMEPASS*8);
+       while (tm>1)
+       {
+               tm = tm-1;
+               ofs = ofs + 1;
+       }
+
+       tn = tn + ((BASS+1.5)*TIMEPASS);
+
+       gfxSetAspect(0);
+       gfxLookAt(Cos(tn*1.23)*3.5,Sin(tn)*3.5,(tm*2)-1,Cos(tn*0.6734)*2,Sin(tn*0.2143)*2,(tm*2)+8,0,1,0);
+       gfxRotate(-tiltfunc(0)*tm,0,0,1);
+       gfxSetTexture(skybox);
+       gfxPushMatrix();
+       gfxTranslate(0,0,tm*2);
+       gfxRotate(tiltfunc(0)*tm,0,0,1);
+       gfxCube(-400,-400,-400,400,400,400);
+       gfxPopMatrix();
+       gfxSetTexture(map);
+
+       gfxSetBlendMode(BLEND_ADD);
+
+       for (y=0;y<15;y=y+1)
+       {
+               c = 1.0 - ((y-tm)/15.0);      
+               gfxColour(c,c,c,1);
+               gfxCube(-4,-4,(y*2)-0.75, 4,-4.5,(y*2)+0.75);
+               gfxCube(-4,4,(y*2)-0.75, 4,4.5,(y*2)+0.75);
+               gfxCube(-4,-4,(y*2)-0.75, -4.5,4,(y*2)+0.75);
+               gfxCube(4,-4,(y*2)-0.75, 4.5,4,(y*2)+0.75);
+               gfxRotate(tiltfunc(y),0,0,1);
+       }
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/FlipBoth.tra b/addons/visualization.vortex/resources/Presets/FlipBoth.tra
new file mode 100644 (file)
index 0000000..5e44bf8
--- /dev/null
@@ -0,0 +1,54 @@
+// FlipBoth.tra
+// Author - MrC
+// Based on FadeFlipBoth.r4 by Gordon Williams
+float myTime = 0;
+float d;
+
+void Init()
+{
+
+}
+
+void Rect(float x0, float y0, float x1, float y1)
+{
+       gfxBegin(PRIM_QUADLIST);
+
+    gfxTexCoord(0,1);
+    gfxVertex(x0, y0, 0.0);
+    gfxTexCoord(1, 1);
+    gfxVertex(x1, y0, 0.0);
+    gfxTexCoord(1, 0);
+    gfxVertex(x1, y1, 0.0);
+    gfxTexCoord(0, 0);
+    gfxVertex(x0, y1, 0.0);
+    
+    gfxEnd();
+
+}
+void Render()
+{
+       myTime = myTime + (TIMEPASS/1.5);
+
+       FINISHED = myTime>=1.0;
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+
+       d = 0.0-Cos(myTime*3.14159);
+
+       gfxSetTexture(TEXTURE_CURRPRESET);
+       gfxSetBlendMode(BLEND_ADD);
+       gfxColour(1, 1, 1, 0.25);
+
+       Rect(-1.0, -1.0, 0.0 - d, 1.0);
+       Rect(d, -1.0, 1.0, 1.0);
+       Rect(-1.0, -1.0, 1.0, 0 - d);
+       Rect(-1.0, d, 1.0, 1.0);
+
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       Rect(0.0 - d, -1.0, 1.0, 1.0);
+       Rect(-1.0, -1.0, d, 1.0);
+       Rect(-1.0, 0.0 - d, 1.0, 1.0);
+       Rect(-1.0, -1.0, 1.0, d);
+
+}
diff --git a/addons/visualization.vortex/resources/Presets/HamsterMatic.vtx b/addons/visualization.vortex/resources/Presets/HamsterMatic.vtx
new file mode 100644 (file)
index 0000000..7e8cd8d
--- /dev/null
@@ -0,0 +1,104 @@
+// HamsterMatic.vtx
+// Author - MrC
+// Based on HamsterMatic.r4 by Gordon Williams
+
+Texture        tex;
+float btime;
+float[] rot(8);
+float[] rots(8);
+int x;
+float dxx,dxy,dyx,dyy;
+// colours
+float ar,ag,ab,br,bg,bb;
+float colamt,coltime;
+
+void Init()
+{
+       int id = Rand() * 3;
+       if (id == 0)
+               tex.LoadTexture("Alien.png");
+       else if (id == 1)
+               tex.LoadTexture("Smiley.png");
+       else
+               tex.LoadTexture("skull.png");
+       
+       btime = 0;
+       for (x=0;x<8;x=x+1)
+       {
+               rot[x]=Rand();
+               rots[x]=Rand()+1.0f;
+       }
+       colamt = 1;
+       br = 0.0;
+       bg = 0.0;
+       bb = 0.5;
+       coltime = 1+(Rand()*5);
+}
+
+void quad(float rt, float sz)
+{
+   dxx = Cos(rt)*sz;
+   dxy = Sin(rt)*sz;
+   dyx = Sin(rt)*sz;
+   dyy = 0.0f-Cos(rt)*sz;
+
+   gfxTexCoord((0.0f-dxx)+(0.0f+dyx),(0.0f-dxy)+(0.0f+dyy));
+   gfxVertex(1.0,-1,0);
+   gfxTexCoord((0.0f+dxx)+(0.0f+dyx),(0.0f+dxy)+(0.0f+dyy));
+   gfxVertex(-1.0,-1,0);
+   gfxTexCoord((0.0f+dxx)+(0.0f-dyx),(0.0f+dxy)+(0.0f-dyy));
+   gfxVertex(-1.0,1,0);
+   gfxTexCoord((0.0f-dxx)+(0.0f-dyx),(0.0f-dxy)+(0.0f-dyy));
+   gfxVertex(1.0,1,0);
+}
+
+void Render()
+{
+       gfxSetBlendMode(BLEND_MOD);
+
+       // keep moving
+       btime = btime + TIMEPASS;
+       while (btime>1)
+       {
+               btime = btime - 1;
+               for (x=6;x>=0;x=x-1)
+               {
+                       rot[x+1]=rot[x];
+                       rots[x+1]=rots[x];
+               }
+               rot[0] = 0;
+               rots[0] = Rand()+1.0f;
+       }
+
+       coltime = coltime - TIMEPASS;
+       if (coltime<0)
+       {
+               coltime = 1+(Rand()*5);
+               ar = br; ag = bg; ab = bb;
+               colamt =  0;
+               x = (Rand()*6.0)+1.0;
+               br = x%2;
+               bg = ((x%4)-br)/2;
+               bb = ((x%8)-(bg*2)-br)/4;
+               br = br/2.0;
+               bg = bg/2.0;
+               bb = bb/2.0;
+       }
+       colamt = colamt + TIMEPASS;
+       if (colamt>1) colamt=1;
+       gfxClear( ((1.0f-colamt)*ar)+(colamt*br), ((1.0f-colamt)*ag)+(colamt*bg), ((1.0f-colamt)*ab)+(colamt*bb) );
+
+       // draw
+       gfxSetTexture(tex);
+       gfxSetAspect(0);
+       gfxTranslate(0.0f, 0.0f, 2.414f);
+       gfxBegin(PRIM_QUADLIST);
+       for (x=7;x>=0;x=x-1)
+       {
+               rot[x] = rot[x] + (TIMEPASS*rots[x]*(0.5+BASS)*1.5f);
+               gfxColour(1.0f, 1.0f, 1.0f, 0.0f-((x+btime)/8.0f));
+               quad(rot[x],0.2f+((x+btime)/2.0));      
+       }
+       gfxEnd();
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/MentalHangover.vtx b/addons/visualization.vortex/resources/Presets/MentalHangover.vtx
new file mode 100644 (file)
index 0000000..b7014e2
--- /dev/null
@@ -0,0 +1,143 @@
+// MentalHangover.vtx
+// Author - MrC
+
+Texture checker;
+Texture ball;
+float ty;
+
+float d = 0;
+float c;
+
+// colours
+float ar,ag,ab,br,bg,bb;
+float colamt,coltime;
+
+// balls
+float[] c_z(64),c_vz(64),c_sx(64),c_sy(64), c_vy(64);
+
+void Init()
+{
+       checker.LoadTexture("checker_transp.png");
+       ball.LoadTexture("smiley.png");
+       
+       ty = 0;
+       coltime = 0;
+       
+       for (int x=0;x<64;x=x+1)
+       {
+      MakeNew(x);
+      c_z[x] = (Rand()*6) - 2;
+         c_vy[x] = Rand()*2 - 1;
+       }
+}
+
+void MakeNew(int n)
+{
+   c_z[n] = 4;
+   c_vz[n] = Rand()* 1.0f + 1.0;
+   c_vy[n] = (Rand()*1.0 + 0.5);
+   c_sx[n] = (-0.5+Rand())*2.5;
+   c_sy[n] = 0.0f;
+}
+
+
+void Sprite(float x, float y, float z, float sz)
+{
+   gfxTexCoord(0,0);
+   gfxVertex(x-sz,y+sz,z);
+   gfxTexCoord(1,0);
+   gfxVertex(x+sz,y+sz,z);
+   gfxTexCoord(1,1);
+   gfxVertex(x+sz,y-sz,z);
+   gfxTexCoord(0,1);
+   gfxVertex(x-sz,y-sz,z);
+}
+
+void Render()
+{
+       d = (TIMEPASS*6 + (TREBLE * 4 * TIMEPASS)) * 0.25;
+
+       ty -= d;
+
+       if (ty > 2)
+       ty -= 1.0f;
+
+       if (ty < 2)
+       ty += 1.0f;
+
+       // Floor
+
+       coltime = coltime - TIMEPASS;
+       if (coltime<0)
+       {
+               coltime = 1+(Rand()*5);
+               ar = br; ag = bg; ab = bb;
+               colamt =  0;
+               float x = (Rand()*5.0)+1.0;
+               br = x%2;
+               bg = ((x%4)-br)/2;
+               bb = ((x%8)-(bg*2)-br)/4;
+               br = br/2.0;
+               bg = bg/2.0;
+               bb = bb/2.0;
+       }
+       colamt = colamt + TIMEPASS;
+       if (colamt>1) colamt=1;
+
+       gfxRotate(-5.0,1,0,0);
+
+       gfxSetTexture(NULL);
+       gfxTranslate(0, -0.245, 2.0f);
+       gfxSetBlendMode(BLEND_MOD);
+
+       gfxBegin(PRIM_QUADLIST);
+       gfxColour( ((1.0f-colamt)*ag)+(colamt*bg), ((1.0f-colamt)*ab)+(colamt*bb), ((1.0f-colamt)*ar)+(colamt*br), 1 );
+       gfxVertex(-5, 0, 2.5);
+       gfxVertex(5, 0, 2.5);
+       gfxVertex(5, 0, -2.5);
+       gfxVertex(-5, 0, -2.5);
+       gfxEnd();
+
+       gfxSetTexture(checker);
+       gfxSetBlendMode(BLEND_MOD);
+
+       gfxBegin(PRIM_QUADLIST);
+       gfxColour(0, 0, 0, 0.4);
+       gfxColour( ((1.0f-colamt)*ar)+(colamt*br), ((1.0f-colamt)*ag)+(colamt*bg), ((1.0f-colamt)*ab)+(colamt*bb), 1 );
+       gfxTexCoord(0, 0 + ty);
+       gfxVertex(-10, 0, 2.5);
+       gfxTexCoord(20, 0 + ty);
+       gfxVertex(10, 0, 2.5);
+       gfxTexCoord(20, 5 + ty);
+       gfxVertex(10, 0, -2.5);
+       gfxTexCoord(0, 5 + ty);
+       gfxVertex(-10, 0, -2.5);
+       gfxEnd();
+
+       gfxSetTexture(ball);
+
+       gfxSetBlendMode(BLEND_MOD);
+
+       gfxBegin(PRIM_QUADLIST);
+       for (int x=0;x<32;x++)
+       {
+       
+               c_z[x] = c_z[x] - (d*c_vz[x]);
+               c_vy[x] = c_vy[x] + 1 * TIMEPASS*2;
+               c_sy[x] = c_sy[x] - (c_vy[x] * d);
+               if (c_sy[x] < 0.025)
+               {
+                       c_sy[x] = 0.025;
+                       c_vy[x] = - (c_vy[x]* 0.9);
+               }
+               if (c_z[x]<-2)
+                       MakeNew(x);
+
+               c = (7.0-(c_z[x]+2))*0.11; 
+               gfxColour(1,1,1,1); 
+               Sprite(c_sx[x],c_sy[x],c_z[x], 0.0350);
+       } 
+
+       gfxEnd();
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/MeteorShower.vtx b/addons/visualization.vortex/resources/Presets/MeteorShower.vtx
new file mode 100644 (file)
index 0000000..d636aaa
--- /dev/null
@@ -0,0 +1,73 @@
+// MeteorShower.vtx
+// Author - MrC
+// Based on MeteorShower.r4 by Gordon Williams
+Texture trail;
+Texture sky;
+
+float[] pvel(256),ppos(256),ptheta(256),prad(256),plen(256),psnd(256);
+int x;
+float f,g,bt;
+const int cnt = 256;
+float time;
+
+void Init()
+{
+       sky.LoadTexture("skybox.dds");
+       trail.LoadTexture("trail2.dds");
+       
+       for (x=0;x<cnt;x=x+1) newpt(x);
+       bt = 0;
+       time = 0;
+}
+
+void drawit(float ax,float ay,float bx, float by,float r)
+{
+   gfxTexCoord(0,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),ay);
+   gfxTexCoord(0,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),ay);
+   gfxTexCoord(1,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),by);
+   gfxTexCoord(1,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),by);
+}
+
+void newpt(int p)
+{
+   pvel[p] = (Rand()+0.5)*2.0;
+   ppos[p] = 0.0;
+   ptheta[p] = Rand()*3.14159*2.0;
+   prad[p] = (Rand()*2.0)+0.25;
+   plen[p] = 1.5+Rand();
+   psnd[p] = Rand();
+} 
+
+void Render()
+{
+       gfxClear(0.1, 0, 0);
+
+       bt = bt + (TIMEPASS*(0.5+BASS));
+       time += TIMEPASS;
+       gfxSetBlendMode(BLEND_ADD);
+
+       f = Sin(bt+Sin(time*1.353));
+       g=f;
+       gfxTranslate(0,0,3);
+       gfxRotate(90*(g+1.0),Sin(time*0.4),Cos(time*0.4),0);
+       gfxSetTexture(sky);
+
+       gfxCube(-20,-20,-20,20,20,20);
+       gfxSetTexture(trail);
+       gfxTranslate((Sin(bt*1.61))*0.3,(Sin(bt*1.23))*0.3,-8+(g*5.0));
+       gfxBegin(PRIM_QUADLIST);
+       for (x=0;x<cnt;x=x+1)
+       {
+               ppos[x] = ppos[x] + (pvel[x]*TIMEPASS*(0.5+(psnd[x]*BASS)+((1.0-psnd[x])*TREBLE)));
+               if (ppos[x]<0) ppos[x] = 0;
+               if (ppos[x]>1.0) newpt(x);
+               gfxColour(1,1,1,(1.0-Cos(ppos[x]*3.14159*2.0))*0.5);
+               drawit(ptheta[x],(ppos[x]*16.0)+plen[x],ptheta[x]+0.08+(prad[x]*0.025),(ppos[x]*16.0),prad[x]);
+       }
+       gfxEnd();
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/MiddleGrid.tra b/addons/visualization.vortex/resources/Presets/MiddleGrid.tra
new file mode 100644 (file)
index 0000000..dfff79e
--- /dev/null
@@ -0,0 +1,67 @@
+// MiddleGrid.tra
+// Author - MrC
+// Based on FadeMiddleGrid.r4 By Gordon Williams
+
+int x,y,mx,my,hx,hy;
+float dx,dy,sx,sy,a,b,mytime;
+
+void Init()
+{
+
+}
+
+void Render()
+{
+       mytime = mytime + (TIMEPASS*0.40);
+
+
+       gfxSetAspect(0);
+       gfxTranslate(-1, -1, 2.414);
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(0, 2, 2, 0);
+
+       mx = 16;
+       my = 12;
+       hx = 8;
+       hy = 6;
+
+       gfxScale(2.0/mx,2.0/my,1.0);
+       sx = 1.0/mx;
+       sy = 1.0/my;
+
+       gfxSetTexture(TEXTURE_CURRPRESET);
+       gfxColour(1, 1, 1, 1);
+
+       gfxBegin(PRIM_QUADLIST);
+
+       FINISHED = true;
+
+       dx = 0;
+       for (x=0;x<mx;x=x+1)
+       {
+               dy = 0;
+               for (y=0;y<my;y=y+1)
+               {     
+                       a = (mytime*10.0)-((Abs(x-hx)+Abs(y-hy))*0.25);
+                       if (a<0) a=0;
+                       if (a<3.14159)
+                       {
+                               a = (Cos(a)*0.25)+0.25;
+                               gfxTexCoord(dx,1.0f - dy);
+                               gfxVertex(x+0.5-a,y+0.5-a,0.0);
+                               gfxTexCoord(dx+sx,1.0f-dy);
+                               gfxVertex(x+0.5+a,y+0.5-a,0.0);
+                               gfxTexCoord(dx+sx,1.0f-(dy+sy));
+                               gfxVertex(x+0.5+a,y+0.5+a,0.0);
+                               gfxTexCoord(dx,1.0f - (dy+sy));
+                               gfxVertex(x+0.5-a,y+0.5+a,0.0);
+                               FINISHED = false;
+                       }
+                       dy = dy + sy;
+               }
+               dx = dx + sx;
+       }
+       gfxEnd();
+
+}
diff --git a/addons/visualization.vortex/resources/Presets/SingingSkull.vtx b/addons/visualization.vortex/resources/Presets/SingingSkull.vtx
new file mode 100644 (file)
index 0000000..c7cac90
--- /dev/null
@@ -0,0 +1,72 @@
+// AlbumArtZoomer.vtx
+// Author - MrC
+
+Texture skull1;
+Texture skull2;
+Texture skull3;
+Texture skull4;
+Texture skull5;
+Texture skull6;
+Texture skull7;
+Texture skull0;
+
+float bt,bump,n;
+
+void Init()
+{
+       skull0.LoadTexture("skull_jawud1.png");
+       skull1.LoadTexture("skull_jawud2.png");
+       skull2.LoadTexture("skull_jawud3.png");
+       skull3.LoadTexture("skull_jawud4.png");
+       skull4.LoadTexture("skull_jawud5.png");
+       skull5.LoadTexture("skull_jawud6.png");
+       skull6.LoadTexture("skull_jawud7.png");
+       skull7.LoadTexture("skull_jawud8.png");
+       bt = 0;
+}
+
+float time = 0;
+
+void Render()
+{
+       time += TIMEPASS*10;
+       bt = bt + (TIMEPASS*(0.5+BASS));
+       n = 1.0-(TIMEPASS*4);
+       bump = (bump*n)+(BASS*(1.0-n));
+       
+       int tex = 0;
+       if (MIDDLE > 0)
+               tex = MIDDLE * 10;
+       if (tex == 0)
+               gfxSetTexture(skull0);
+       else if (tex == 1)
+               gfxSetTexture(skull1);
+       else if (tex == 2)
+               gfxSetTexture(skull2);
+       else if (tex == 3)
+               gfxSetTexture(skull3);
+       else if (tex == 4)
+               gfxSetTexture(skull4);
+       else if (tex == 5)
+               gfxSetTexture(skull5);
+       else if (tex == 6)
+               gfxSetTexture(skull6);
+       else if (tex >= 7)
+               gfxSetTexture(skull7);
+//     gfxSetAspect(0);
+       gfxSetBlendMode(BLEND_MOD);
+       gfxTranslate(0,0,2.5);
+       
+       float x = (Sin(bt*6.43)+Cos(bt*4.23))*0.25;
+       float y = (Cos(bt*6.43)+Sin(bt*4.23))*0.25;
+
+       
+       gfxTexRect(x - 0.5, y + 0.5, x + 0.5, y -0.5);
+
+       float col = 0;
+       if (BASS > 0)
+               col = BASS;
+
+       col = Fabs(Sin(time));
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/Slide.tra b/addons/visualization.vortex/resources/Presets/Slide.tra
new file mode 100644 (file)
index 0000000..e73e209
--- /dev/null
@@ -0,0 +1,52 @@
+// Slide.tra
+// Author - MrC
+
+int direction;
+float position;
+
+void Init()
+{
+       position = 0;
+       direction = Rand() * 4;
+}
+
+void Render()
+{
+       position += TIMEPASS*0.75;
+       if (position >= 1.0f)
+               FINISHED = true;
+
+   gfxSetTexture(TEXTURE_CURRPRESET);
+   gfxSetAspect(0);
+   gfxTranslate(0, 0, 2.414);
+   gfxColour(1, 1, 1, 1);
+   gfxTexRect(-1, 1, 1, -1);
+   
+   gfxSetTexture(TEXTURE_NEXTPRESET);
+
+       if (direction == 0)
+       {
+               // Top to bottom
+               float i = -3 + position * 2;
+               gfxTexRect(-1, i+2, 1, i);
+       }
+       else if (direction == 1)
+       {
+               // Bottom to top
+               float i = 1 - (position * 2);
+               gfxTexRect(-1, i+2, 1, i);
+       }
+       else if (direction == 2)
+       {
+               // Left to right
+               float i = -3 + position * 2;
+               gfxTexRect(i, 1, i+2, -1);
+       }
+       else
+       {
+               // Right to left
+               float i = 1 - position * 2;
+               gfxTexRect(i, 1, i+2, -1);
+       }
+               
+}
diff --git a/addons/visualization.vortex/resources/Presets/SpaceHarrier.vtx b/addons/visualization.vortex/resources/Presets/SpaceHarrier.vtx
new file mode 100644 (file)
index 0000000..60ffd09
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+
+SCENE (
+"name" = "Space Harrier 2";
+"author" = "Gordon Williams";
+SOLID bg();
+TEXTURE texa();
+TEXTURE texb();
+GL gl(bg,texa,texb);
+)
+*/
+Texture checker;
+
+int x;
+float bt,bump,n;
+float time;
+
+//- ---------------------------
+void drawit(float ox,float oy)
+{
+       gfxColour(1, 1, 1, 1);
+   gfxTexCoord(0+ox,0+oy);
+   gfxVertex(-10,0,-5);
+   gfxTexCoord(20+ox,0+oy);
+   gfxVertex(10,0,-5);
+
+       gfxColour(0, 0, 0, 0);
+   gfxTexCoord(20+ox,10+oy);
+   gfxVertex(10,0,5);
+   gfxTexCoord(0+ox,10+oy);
+   gfxVertex(-10,0,5);
+}
+//- ---------------------------
+
+void Init()
+{
+       checker.LoadTexture("checker.png");
+       bt = 0;
+//   bg.col = rgb(0,0,0);
+//   strcpy(texa.filename,"dots.png");
+//   strcpy(texb.filename,"grid.png");
+//   strcpy(gl.shader,"T0;BAa;");
+}
+
+void Render()
+{
+       time += TIMEPASS;
+   bt = bt + (TIMEPASS*(0.5+BASS));
+   n = 1.0-(TIMEPASS*4);
+   bump = (bump*n)+(BASS*(1.0-n));
+
+//   gl.clear();
+
+   gfxRotate(bump*40.0,1,0,0);
+   gfxRotate((Sin(bt*6.43)+Cos(bt*4.23))*15,0,1,0);
+
+   gfxRotate((Sin(bt*2)+Cos(bt*4.23))*30,0,0,1);
+
+       gfxSetTexture(checker);
+   gfxTranslate(0,0.3,5);
+   gfxColour(1,1,1,1);
+   gfxBegin(PRIM_QUADLIST);
+   drawit(0,bt);
+   gfxEnd();
+
+//   gl.glbindtexture(2);
+   gfxTranslate(0,-0.6,0);
+//   gl.glcolor(1,1,1,1);
+   gfxBegin(PRIM_QUADLIST);
+   drawit(0,bt+time);
+   gfxEnd();
+   
+   gfxSetTexture(NULL);
+   gfxTranslate(0, 0.3, -2 );
+   gfxScale(5,0.35,1);
+   gfxColour(1,1,1,1);
+   gfxSetLineWidth(2);
+   gfxBegin(PRIM_LINESTRIP);
+
+   gfxColour(1, 1, 0, 1);
+   for (x=0;x<256;x=x+1)
+       gfxVertex((x-128.0)/128.0,WaveLeft(x),0);
+   gfxEnd();
+   
+   gfxColour(0, 1, 1, 1);
+   gfxBegin(PRIM_LINESTRIP);
+   for (x=0;x<256;x=x+1)
+       gfxVertex((x-128.0)/128.0,WaveRight(x),0);
+   gfxEnd();
+   
+}
diff --git a/addons/visualization.vortex/resources/Presets/Speakers.vtx b/addons/visualization.vortex/resources/Presets/Speakers.vtx
new file mode 100644 (file)
index 0000000..e7e4af1
--- /dev/null
@@ -0,0 +1,95 @@
+// Speakers.vtx
+// Author - MrC
+
+float[] x(15), y(15), vx(15), vy(15);
+
+Texture speaker;
+
+void Init()
+{
+   speaker.LoadTexture("speaker.png");
+   
+   for (int i = 0; i < 15; i++)
+   {
+               x[i] = (Rand()-0.5) * 2;
+               y[i] = (Rand()-0.5) * 2;
+               vx[i] = (Rand()-0.5) * 0.05;
+               vy[i] = (Rand()-0.5) * 0.05;
+   }
+}
+
+void quad(float x, float y, float sz)
+{
+   gfxTexCoord(0,0);
+   gfxVertex(x-sz,y+sz,0);
+   gfxTexCoord(1,0);
+   gfxVertex(x+sz,y+sz,0);
+   gfxTexCoord(1,1);
+   gfxVertex(x+sz,y-sz,0);
+   gfxTexCoord(0,1);
+   gfxVertex(x-sz,y-sz,0);
+}
+
+float time = 0;
+
+void Render()
+{
+       time += TIMEPASS * 30;
+
+       for (int i = 0; i < 15; i++)
+       {
+               float value;
+               if (i < 5)
+                       value = BASS;
+               else if (i < 10)
+                       value = MIDDLE;
+               else
+                       value = TREBLE;
+
+                                               
+               x[i] = x[i] + vx[i] * value;
+               if (x[i] < -1)
+               {
+                       x[i] = -1;
+                       vx[i] = -vx[i];
+               }
+               else if (x[i] > 1)
+               {
+                       x[i] = 1;
+                       vx[i] = -vx[i];
+               }
+               y[i] = y[i] + vy[i] * value;
+               if (y[i] < -1)
+               {
+                       y[i] = -1;
+                       vy[i] = -vy[i];
+               }
+               else if (y[i] > 1)
+               {
+                       y[i] = 1;
+                       vy[i] = -vy[i];
+               }
+       }
+
+
+       gfxSetTexture(speaker);
+       gfxSetAspect(1);
+       gfxTranslate(0, 0, 2.0);
+       gfxBegin(PRIM_QUADLIST);
+       gfxColour(1.0f, 1.0f, 1.0f, 1);
+       gfxSetBlendMode(BLEND_MOD);
+       for (int i=0; i < 5; i++)
+       {
+               quad(x[i], y[i], 0.1 + (1+BASS)*0.2);
+       }
+       for (int i=5; i < 10; i++)
+       {
+               quad(x[i], y[i], 0.1 + (1+MIDDLE)*0.2);
+       }
+       for (int i=10; i < 15; i++)
+       {
+               quad(x[i], y[i], 0.1 + (1+TREBLE)*0.2);
+       }
+       gfxEnd();
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/SpectrumCylinder.vtx b/addons/visualization.vortex/resources/Presets/SpectrumCylinder.vtx
new file mode 100644 (file)
index 0000000..3d58875
--- /dev/null
@@ -0,0 +1,91 @@
+// SpectrumCylinder.vtx
+// Author - MrC
+// Based on SpectrumCylinder.r4 by Gordon Williams
+
+float time = 0;
+
+float tm;
+int x,y;
+
+float rx,rxamt,ry,ryamt;
+int currBuffer;
+
+float[] buffers(12*12);
+
+float[] savr(12);
+int[] sn(12);
+float[] sp(12);
+
+
+Map    map;
+Texture envTexture;
+
+void Init()
+{
+       envTexture.LoadTexture("env3.png");
+       currBuffer = 0;
+
+       for (y=0;y<24;y=y+1)
+       {
+               for (x=0;x<32;x=x+1)
+               {
+                       map.SetValues(x, y, Sin((x-15.5)*3)*0.01, Sin((y-11.5)*3)*0.01, 1, 1, 1);
+               }
+       }
+       rxamt = 1;
+       ryamt = -1;
+}
+
+void Render()
+{
+       time += TIMEPASS;
+
+       map.Render();
+
+       gfxSetRenderTarget(map);
+
+       gfxPushMatrix();
+
+       gfxTranslate(0,0,17.5f);
+       gfxRotate(-70+(Sin(time)*12),1,0,0);
+
+       if (BASS>0.3) rxamt = 1;
+       if (BASS<-0.3) rxamt = -1;
+       if (TREBLE>0.3) ryamt = 1;
+       if (TREBLE<-0.3) ryamt = -1;
+       rx = rx + (rxamt*TIMEPASS);
+       ry = ry + (ryamt*TIMEPASS);
+
+       gfxRotate(rx*90,0,0,1);
+       gfxRotate(ry*90,0,1,0);
+
+
+       for (x = 0; x < 12; x++) 
+       {
+               sp[x] = GetSpec(x*2);
+       }
+       gfxSetEnvTexture(envTexture);
+
+       // draw buffer out of cubes  
+       for (y=0;y<12;y=y+1)
+       {
+               for (x=0;x<12;x=x+1)
+               {
+                       gfxColour(x/12.0,y/12.0,1.0-(y/12.0),1.0); // fade colour
+                       gfxCube(-5.5+x,-0.25f,1.0,-5.5+x+0.5f,0.25f,1.0+(sp[x]*1.5));
+               }
+               gfxRotate(360.0/12.0,1,0,0);
+       }
+
+       gfxPopMatrix();
+
+       gfxSetRenderTarget(0);
+       gfxSetEnvTexture(NULL);
+       gfxSetTexture(map);
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);            
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/SpectrumField.vtx b/addons/visualization.vortex/resources/Presets/SpectrumField.vtx
new file mode 100644 (file)
index 0000000..9b421b4
--- /dev/null
@@ -0,0 +1,73 @@
+// SpectrumFile.vtx
+// Author - MrC
+
+const int STEP = 5;
+float time = 0;
+
+float tm;
+int x,y;
+
+float rx,ry,ryamt;
+int currBuffer;
+
+float[] buffers(24*32);
+int counter = 0;
+
+void Init()
+{
+       currBuffer = 0;
+       counter = 0;
+       for (int i=0; i<24*32; i++)
+       {
+               buffers[i]=0;
+       }
+       
+       ryamt = -25.0f;
+       ry = Rand() * 360.0f;
+
+}
+
+void Render()
+{
+
+       time += TIMEPASS;
+
+       gfxTranslate(0,-2,30.0f);
+       counter++;
+
+       ryamt = (BASS) * 40;
+
+       ry = ry + (ryamt*TIMEPASS);
+
+
+       gfxRotate(-20,1,0,0);
+       gfxRotate(ry,0,1,0);
+
+       gfxSetBlendMode(BLEND_ADD);
+
+       if (counter == 5)
+       {
+               currBuffer = (currBuffer+1) % 24;
+               for (int i=0; i<32; i++)
+               {
+                       buffers[currBuffer*32 + i] = GetSpec(i) * 4;
+               }
+               counter = 0;
+       }
+
+       gfxColour(1, 1, 1, 1);
+       gfxSetLineWidth(5);
+
+       for (int i=0; i<24;i++)
+       {
+               int index = (i+currBuffer+1) % 24;
+
+               gfxBegin(PRIM_LINESTRIP);
+               for (int x=0; x<32; x++)
+               {
+                       gfxColour(i/24.0,x/32.0,1.0-(x/32.0),1.0); // fade colour
+                       gfxVertex(-12+i-(counter/5.0f), buffers[index*32 + x], -16+x);
+               }
+               gfxEnd();
+       } 
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/SpectrumSphere.vtx b/addons/visualization.vortex/resources/Presets/SpectrumSphere.vtx
new file mode 100644 (file)
index 0000000..8ff226c
--- /dev/null
@@ -0,0 +1,186 @@
+// SpectrumSphere.vtx
+// Author - morte0815
+
+float time = 0;
+float rx,rxamt,ry,ryamt;
+
+float[] org_coordsX(70);
+float[] org_coordsY(70);
+float[] org_coordsZ(70);
+float[] org_colorR(70);
+float[] org_colorG(70);
+float[] org_colorB(70);
+
+float stacks = 8;
+float segments = 8;
+
+float velX,velY,velZ;
+float posX,posY,posZ;
+float signX,signY,signZ;
+Map    map;
+
+int x,y;
+
+void Init()
+{
+  velX= 0;
+  velY= 0;
+  velZ = 0;
+  posX= 0;
+  posY= 0;
+  posZ = 0;
+  posX= 0;
+  posY= 0;
+  posZ = 0;
+  signX= 1;
+  signY= 1;
+  signZ = 1;
+
+  if(BASS < 0.2f){signZ = 1;}
+  if(MIDDLE < 0.2f){signY = -1;}
+  if(TREBLE < 0.2f){signX = -1;}
+  
+  for (int i = 0; i< stacks; i++)
+  {
+    float temp = Cos(3.14159f/6.0f*i-3.14159f/2.0f);
+    for (int j = 0; j < segments; j++)
+    {
+      org_coordsY[Fabs(i*segments+j)] = Sin(3.14159f/6.0f*i-3.14159f/2.0f);
+      org_coordsX[Fabs(i*segments+j)] = Cos(2*3.14159f/segments*j) * temp;
+      org_coordsZ[Fabs(i*segments+j)] = Sin(2*3.14159f/segments*j) * temp;
+    }
+  }
+  for (int i = 0; i< stacks; i++)
+  {
+    for (int j = 0; j< segments; j++)
+    {
+      org_colorR[i*segments+j] = Sin(i);
+      org_colorG[i*segments+j] = Sin(j);
+      org_colorB[i*segments+j] = 1-Sin(j);
+    }
+  }
+  
+  
+  
+
+
+}
+
+void RenderSphere()
+{
+  float addX=0;
+  float addY=0;
+  float addZ=0;
+  float scale = 0.5f;
+  float colorVal = 0;
+  gfxBegin(PRIM_TRIANGLELIST);
+    for (int i = 0; i< stacks-2; i++)
+    {
+      for (int j = 0; j< segments; j++)
+      {
+        float temp = i*segments+j;
+        addX = GetSpec(Fabs(temp/2)) * org_coordsX[temp]*scale;
+        addY = GetSpec(Fabs(temp/2)) * org_coordsY[temp]*scale;
+        addZ = GetSpec(Fabs(temp/2)) * org_coordsZ[temp]*scale;
+        colorVal = GetSpec(Fabs(temp/2));
+        
+        
+        gfxColour(org_colorR[temp],org_colorG[temp] ,org_colorB[temp] ,1);
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+        
+        temp = (i+1)*segments+((j+1)%segments);
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+        
+        temp = i*segments+((j+1)%segments);
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+        
+        temp = i*segments+j;
+        addX = GetSpec(Fabs(temp/2)) * org_coordsX[temp]*scale;
+        addY = GetSpec(Fabs(temp/2)) * org_coordsY[temp]*scale;
+        addZ = GetSpec(Fabs(temp/2)) * org_coordsZ[temp]*scale;
+        colorVal = GetSpec(Fabs(temp/2));
+        
+        gfxColour(org_colorR[temp],org_colorG[temp],org_colorB[temp],1);
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+        
+        temp = (i+1)*segments+j;
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+        
+        temp = (i+1)*segments+((j+1)%segments);
+        gfxVertex(org_coordsX[temp] + addX,org_coordsY[temp] + addY,org_coordsZ[temp] + addZ);
+      }
+    }
+  gfxEnd();
+}
+
+void PushAround()
+{
+    if (Abs(BASS) > 0.3f){velZ += BASS*3.0f;}
+    if (Abs(BASS) < 0.3f){velZ -= BASS*3.0f;}
+    if (Abs(MIDDLE) > 0.3f){velY += MIDDLE*3.0f;}
+    if (Abs(MIDDLE) < 0.3f){velY -= MIDDLE*3.0f;}
+    if (Abs(TREBLE) > 0.3f){velX += TREBLE*3.0f;}
+    if (Abs(TREBLE) < 0.3f){velX -= TREBLE*3.0f;}
+    
+   velX = Clamp(velX,-3.0f,3.0f);
+  velY = Clamp(velY,-3.0f,3.0f);
+  velZ = Clamp(velZ,-3.0f,3.0f);
+  
+  posX += signX*velX*TIMEPASS;
+  posY += signY*velY*TIMEPASS;
+  posZ += signZ*velZ*TIMEPASS;
+  
+  if (posX < -4 || posX > 4){signX = -signX;}
+  if (posY < -4 || posY > 4){signY = -signY;}
+  if (posZ < -4 || posZ > 4){signZ = -signZ;}
+  
+  gfxTranslate(posX,posY,posZ);
+}
+
+void Render()
+{
+    time += TIMEPASS;
+    for (y=0;y<24;y=y+1)
+       {
+               for (x=0;x<32;x=x+1)
+               {
+                 float dx = (x-16);
+                 float dy = (y-12);
+                 float s = Mag(dx,dy)/Mag(16,12);
+                 if (s == 0)
+                 {
+                   map.SetValues(x, y, 0.1, 0.1, 0.8,0.8, 0.8);
+          }
+                       map.SetValues(x, y, dx*s*0.1*Fabs(BASS), dy*s*0.1*Fabs(BASS), 0.8,0.8, 0.8);
+               }
+       
+       }
+       map.Render();
+  
+       gfxSetRenderTarget(map);
+       gfxPushMatrix();
+    gfxTranslate(0,0,15);
+       
+    PushAround();                                   
+
+    if (BASS>0.3) ryamt = 1;
+       if (BASS<-0.3) ryamt = -1;
+               ry = ry + (ryamt*TIMEPASS);
+
+       gfxRotate(ry*90,0,1,0);
+
+               
+               RenderSphere();
+               
+               gfxPopMatrix();
+
+       gfxSetRenderTarget(0);
+       gfxSetEnvTexture(NULL);
+       gfxSetTexture(map);
+  
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);   
+}
diff --git a/addons/visualization.vortex/resources/Presets/Sphere.tra b/addons/visualization.vortex/resources/Presets/Sphere.tra
new file mode 100644 (file)
index 0000000..ef0df64
--- /dev/null
@@ -0,0 +1,65 @@
+// Sphere.tra
+// Author - MrC
+// Based on FadeSphere.r4 by Gordon Williams
+
+const int stripx = 32;
+const int stripy = 16;
+
+int x,y;
+float dx,da,db,sa,sb,a,b,mytime;
+
+void Init()
+{   
+}
+
+void Render()
+{
+       mytime = mytime + (TIMEPASS * 0.25);
+       FINISHED = (mytime>1);
+
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxSetAspect(0);
+       gfxTranslate(0,0,2.414);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);
+       gfxTranslate(0,0,-2.414);
+
+       a = mytime*2;
+       if (a>1.0) a=1.0;
+       a = (1.0-Cos(a*3.14159))/2.0;
+
+       gfxSetAspect(a);
+
+       b = (mytime*2)-1.0;
+       if (b<0.0) b=0.0;
+       b = (1.0-Cos(b*3.14159))/2.0;
+
+       gfxTranslate(b*6,0,2.414+(a*1.5));
+
+       gfxRotate(mytime*720,1,1,1);   
+
+       gfxSetTexture(TEXTURE_CURRPRESET);
+
+       gfxColour(1,1,1,1);
+       for (y=0;y<stripy;y=y+1)
+       {
+               da = (1.0*y)/stripy;
+               db = (1.0*(y+1))/stripy;
+               sa = Sin(da*3.14159);
+               sb = Sin(db*3.14159);
+               da = -Cos(da*3.14159);
+               db = -Cos(db*3.14159);
+               gfxBegin(PRIM_QUADSTRIP);
+               for (x=0;x<=stripx;x=x+1)
+               {
+                       dx = (1.0*x)/stripx;
+                       gfxTexCoord(dx,(da*-0.5)+0.5);
+                       gfxVertex(((dx*2.0)-1.0)*(1.0-a)+(Cos(3.14159*2.0*dx)*a*sa),da,(Sin(3.14159*2.0*dx)*a*sa));
+                       gfxTexCoord(dx,(db*-0.5)+0.5);
+                       gfxVertex(((dx*2.0)-1.0)*(1.0-a)+(Cos(3.14159*2.0*dx)*a*sb),db,(Sin(3.14159*2.0*dx)*a*sb));
+               }
+               gfxEnd();
+       }
+
+}
+
diff --git a/addons/visualization.vortex/resources/Presets/Square.tra b/addons/visualization.vortex/resources/Presets/Square.tra
new file mode 100644 (file)
index 0000000..e44ed91
--- /dev/null
@@ -0,0 +1,66 @@
+// Square.tra
+// Author - MrC
+// Based on FadeGrid.r4 by Gordon Williams
+
+int x,y,mx,my;
+float dx,dy,sx,sy,a,b,mytime;
+
+void Init()
+{
+
+}
+
+void Render()
+{
+       mytime = mytime + (TIMEPASS*0.40);
+       
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);
+
+       gfxSetAspect(0);
+       gfxTranslate(-1, -1, 0);
+
+       mx = 16;
+       my = 12;
+
+       gfxScale(2.0/mx,2.0/my,1.0);
+       sx = 1.0/mx;
+       sy = 1.0/my;
+
+       gfxSetTexture(TEXTURE_CURRPRESET);
+       gfxColour(1, 1, 1, 1);
+
+       gfxBegin(PRIM_QUADLIST);
+
+       FINISHED = true;
+
+       dx = 0;
+       for (x=0;x<mx;x=x+1)
+       {
+               dy = 0;
+               for (y=0;y<my;y=y+1)
+               {     
+                       a = (mytime*10.0)-((my+1.0+x-y)*0.25);
+                       if (a<0) a=0;
+                       if (a<3.14159)
+                       {
+                               a = (Cos(a)*0.25)+0.25;
+                               gfxTexCoord(dx,1.0f - dy);
+                               gfxVertex(x+0.5-a,y+0.5-a,0.0);
+                               gfxTexCoord(dx+sx,1.0f-dy);
+                               gfxVertex(x+0.5+a,y+0.5-a,0.0);
+                               gfxTexCoord(dx+sx,1.0f-(dy+sy));
+                               gfxVertex(x+0.5+a,y+0.5+a,0.0);
+                               gfxTexCoord(dx,1.0f - (dy+sy));
+                               gfxVertex(x+0.5-a,y+0.5+a,0.0);
+                               FINISHED = false;
+                       }
+                       dy = dy + sy;
+               }
+               dx = dx + sx;
+       }
+       gfxEnd();
+}
diff --git a/addons/visualization.vortex/resources/Presets/StereoSpectrum.vtx b/addons/visualization.vortex/resources/Presets/StereoSpectrum.vtx
new file mode 100644 (file)
index 0000000..4f24830
--- /dev/null
@@ -0,0 +1,128 @@
+// Author : paridox
+
+const int BUFFERS = 24;
+const int WIDTH = 128;
+
+int currBuffer;
+int rowRenderCount = 0;
+
+float[] buffers(256 * BUFFERS);
+float[] bounces(BUFFERS);
+float[] yaws(BUFFERS);
+
+int counter = 0;
+
+float m_prevValue = 0.0;
+
+void Init()
+{
+       currBuffer = 0;
+
+       for (int clear = 0; clear < 256 * BUFFERS; clear++)
+       {
+               buffers[clear] = 0.0;
+       }
+}
+
+void doRender(int bufferToUse, float Zpos)
+{
+       gfxPushMatrix();
+       gfxTranslate(0.0f, bounces[bufferToUse], 0.0f);
+
+       //gfxPushMatrix();
+       gfxRotate(yaws[currBuffer], 0, 0, 1);
+
+       for (int x = 0; x < WIDTH; x++)
+       {
+               float value = 0.0;
+
+               // get the current value
+               for (int calcAverage = 0; calcAverage < (256 / WIDTH); calcAverage++)
+               {
+                       //if (x == (WIDTH / 2))
+                       //{
+                               //gfxPopMatrix();
+                               //gfxPushMatrix();
+                               //gfxRotate(-yaws[currBuffer], 0, 0, 1);
+                       //}
+
+                       int index = (bufferToUse * 256) + (x*(256/WIDTH)) + calcAverage;
+                       if (index >= 0 && index < 256*BUFFERS)
+                               value = value + buffers[index];
+               }
+//             value = value / (256.0f / WIDTH);
+               value = value * 2.0;
+
+               float prevValue = value;
+
+               // get previous value
+               if (x != 0 && x != (WIDTH / 2)) prevValue = m_prevValue;
+
+               // remember for next time
+               m_prevValue = value;
+
+               value = (value + prevValue) / 2.0f;
+
+               if (rowRenderCount == BUFFERS)
+                       gfxColour((x >= (WIDTH / 2) ? 1.0 - (x-(WIDTH/2.0f)) / (WIDTH * 2.0f / 3.0f) : 0.0), (x < (WIDTH / 2) ? 1.0 - (WIDTH/2-x) / (WIDTH * 2.0f / 3.0f) : 0.0), 0.0, 0.2); // front bright colour
+               else
+                       gfxColour((x >= (WIDTH / 2) ? (0.8f - (x-(WIDTH/2.0f)) / (WIDTH * 2.0f / 3.0f)) / (Zpos+1) : 0.0), (x < (WIDTH / 2) ? (0.8f - (WIDTH/2-x) / (WIDTH * 2.0f / 3.0f)) / (Zpos+1) : 0.0), 0.0, 1.0); // fade colour
+               if (x == 0 || x == WIDTH / 2)
+                       gfxBegin(PRIM_QUADSTRIP);
+
+               gfxVertex(-(WIDTH / 16.0f)+(x/8.0f)+(x < WIDTH / 2 ? 0.2f : 0.0) + (x < (WIDTH / 2) ? 0.0 : 0.0), value, Zpos + 0.3f);
+               gfxVertex(-(WIDTH / 16.0f)+(x/8.0f)+(x < WIDTH / 2 ? 0.0f : 0.2f) + (x < (WIDTH / 2) ? 0.0 : 0.0), value, Zpos);
+
+               if (x == WIDTH / 2 - 1 || x == WIDTH - 1)
+                       gfxEnd();
+       }
+
+       //gfxPopMatrix();
+
+       gfxPopMatrix();
+}
+
+void Render()
+{
+       yaws[currBuffer] = Fabs(Sin(BASS) * 6);
+       counter++;
+
+       gfxTranslate(0.0, 0.0, 12.0f);
+       bounces[currBuffer] = -1.6 + Fabs((BASS + TREBLE) / 2.0f);
+
+       {
+               for (int i = 0; i < 256; i++)
+               {
+                       int index = i + (currBuffer * 256);
+                       int prevIndex = (index + 256) % (BUFFERS * 256);
+                       int prevIndex2 = (index + 512) % (BUFFERS * 256);
+                       float value = 0.0f;
+                       
+                       if (i < 128)
+                       {
+                               buffers[index] = (GetSpecLeft(i * 4 + 0) + GetSpecLeft(i * 4 + 1) + GetSpecLeft(i * 4 + 2) + GetSpecLeft(i * 4 + 3)) / 4.0f;
+                       }
+                       else
+                       {
+                               buffers[index] = (GetSpecRight((256 - i) * 4 + 0) + GetSpecRight((256 - i) * 4 + 1) + GetSpecRight((256 - i) * 4 + 2) + GetSpecRight((256 - i) * 4 + 3)) / 4.0f;
+                       }
+               }
+       
+               currBuffer = (currBuffer + 1) % BUFFERS;
+               counter = 0;
+       }
+
+       rowRenderCount = 0;
+       int rendPos = BUFFERS;
+//doRender(currBuffer-1, 0 * 0.25f);
+       for (int rend=currBuffer; rend<BUFFERS; rend++)
+       {
+               rowRenderCount++;
+               doRender(rend, rendPos-- * 0.25f);
+       }
+       for (int rend=0; rend < currBuffer; rend++)
+       {
+               rowRenderCount++;
+               doRender(rend, rendPos-- * 0.25f);
+       }
+}
diff --git a/addons/visualization.vortex/resources/Presets/VoicePrintDonut.vtx b/addons/visualization.vortex/resources/Presets/VoicePrintDonut.vtx
new file mode 100644 (file)
index 0000000..d144c85
--- /dev/null
@@ -0,0 +1,74 @@
+// VoicePrintDonut.vtx
+// Author - MrC
+// Based on VoicePrint.r4 by Gordon Williams
+
+VoicePrint     vp;
+Map map;
+float time = 0;
+float minX;
+
+float rx,rxamt,ry,ryamt;
+
+void Init()
+{
+       vp.LoadColourMap("huemap.jpg");
+       vp.SetSpeed(0.5);
+
+       for (int y=0;y<24;y=y+1)
+       {
+               for (int x=0;x<32;x=x+1)
+               {
+                       float dx = (x-16)/16.0;
+                       float dy = (y-12)/12.0;
+                       float s = (Mag(dx,dy))-1.5;
+                       map.SetValues(x, y, dx*s, dy*s, 1, 1, 1);
+               }
+       }
+       
+}
+
+void Render()
+{
+       gfxPushMatrix();
+       minX = 0.75f - BASS;
+       if (minX<0.5f) minX=0.5f;
+       if (minX>0.99f) minX=0.99f;
+
+       vp.SetRect(minX, 0, 0.5, 0.99);
+
+       vp.Render();
+
+       gfxSetRenderTarget(map);
+       gfxSetTexture(vp);
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxTexRect(-1, 1, 1, -1);
+
+       map.Render();
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+       gfxTexRect(-1, 1, 1, -1);
+
+       gfxPopMatrix();
+
+       time += TIMEPASS;
+
+       gfxSetTexture(vp);
+       gfxTranslate(0, 0, 2.0f-(BASS* 0.5f));
+
+       if (BASS>0.3) rxamt = 1;
+       if (BASS<-0.3) rxamt = -1;
+       if (TREBLE>0.3) ryamt = 1;
+       if (TREBLE<-0.3) ryamt = -1;
+       rx = rx + (rxamt*TIMEPASS);
+       ry = ry + (ryamt*TIMEPASS);
+
+       gfxRotate(-70+(Sin(time)*12),1,0,0);
+       gfxRotate(rx*90,0,0,1);
+       gfxRotate(ry*90,0,1,0);
+
+       gfxColour(1, 1, 1, 1);
+       gfxSetAspect(1);
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WalkingCube.vtx b/addons/visualization.vortex/resources/Presets/WalkingCube.vtx
new file mode 100644 (file)
index 0000000..98e88a7
--- /dev/null
@@ -0,0 +1,151 @@
+// WalkingCube.vtx
+// Author - MrC
+
+float time = 0;
+float rx,rxamt,ry,ryamt;
+float y = 0;
+Texture checker;
+Texture sky;
+float tx, ty;
+
+float d = 0;
+
+void Init()
+{
+       checker.LoadTexture("checker.png");
+       sky.LoadTexture("sky.dds");
+       
+       tx = 0;
+       ty = 0;
+       ryamt = 0;
+       
+}
+
+void Render()
+{
+
+       gfxPushMatrix();
+
+       d = TIMEPASS*((BASS + 1.5)*4);
+       d = TIMEPASS*6 + (BASS * 4 * TIMEPASS);
+
+       time += d;
+
+       ry += TIMEPASS * ryamt * 2;
+
+       gfxSetTexture(sky);
+
+       gfxSetBlendMode(BLEND_MOD);
+       gfxPushMatrix();
+       gfxSetAspect(0);
+       gfxTranslate(0,0,2.414);
+
+       gfxBegin(PRIM_QUADLIST);
+       gfxColour(1, 1, 1, 1);
+       gfxTexCoord(0, 0);
+       gfxVertex(-1, 1, 0);
+
+       gfxTexCoord(1, 0);
+       gfxVertex(1, 1, 0);
+
+       gfxTexCoord(1, 1);
+       gfxVertex(1, -0.2, 0);
+
+       gfxTexCoord(0, 1);
+       gfxVertex(-1, -0.2, 0);
+
+       gfxColour(0.7, 0.7, 0.7, 1);
+
+       gfxTexCoord(0, 1);
+       gfxVertex(-1, -0.2, 0);
+
+       gfxTexCoord(1, 1);
+       gfxVertex(1, -0.2, 0);
+
+       gfxTexCoord(1, 0);
+       gfxVertex(1, -1, 0);
+
+       gfxTexCoord(0, 0);
+       gfxVertex(-1, -1, 0);
+
+       gfxEnd();
+
+       gfxSetAspect(1);
+       gfxPopMatrix();
+
+       gfxSetTexture(TEXTURE_ALBUMART);
+
+       if (BASS>0.3) rxamt = 1;
+       if (BASS<-0.3) rxamt = -1;
+       if (TREBLE>0.4) ryamt = Rand()-0.5f;
+
+
+
+       gfxPushMatrix();
+       gfxSetBlendMode(BLEND_OFF);
+       gfxScale(1,-1,1);
+       gfxTranslate(0, 0.5 + Fabs(Sin(time * 2 *45 * 3.1415 / 180))* 0.125, 2.0f);
+       gfxRotate(ry*90,0,1,0);
+       gfxRotate(time*45,0,0,1);
+
+       gfxColour(1, 1, 1, 1);
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+
+       gfxPopMatrix(); 
+
+       gfxPushMatrix();
+
+       gfxTranslate(0, Fabs(Sin(time * 2 *45 * 3.1415 / 180))* 0.125, 2.0f);
+       gfxRotate(ry*90,0,1,0);
+       gfxRotate(time*45,0,0,1);
+
+       gfxColour(1, 1, 1, 1);
+       gfxCube(-0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f);
+
+       gfxPopMatrix(); 
+
+
+       float c = Cos(ry*90 * 3.1415 / 180);
+       float s = Sin(ry * 90 * 3.1415 / 180);
+
+       ty -= d * 0.06f * s;
+       tx -= d * 0.06f * c;
+
+       if (ty > 2)
+       ty -= 1.0f;
+
+       if (ty < 2)
+       ty += 1.0f;
+
+       if (tx > 2)
+       tx -= 1.0f;
+
+       if (tx < 2)
+       tx += 1.0f;
+
+
+       // Floor
+
+
+       gfxSetTexture(checker);
+       gfxTranslate(0, -0.245, 2.0f);
+       gfxSetBlendMode(BLEND_MOD);
+
+       gfxBegin(PRIM_QUADLIST);
+       gfxColour(0, 0, 0, 0.4);
+       gfxTexCoord((0+tx)*2, (0+ty)*2);
+       gfxVertex(-2, 0, 2);
+       gfxTexCoord((1+tx)*2, (0+ty)*2);
+       gfxVertex(2, 0, 2);
+       gfxColour(1, 1, 1, 0.8);
+       gfxTexCoord((1+tx)*2, (1+ty)*2);
+       gfxVertex(2, 0, -2);
+       gfxTexCoord((0+tx)*2, (1+ty)*2);
+       gfxVertex(-2, 0, -2);
+       gfxEnd();
+
+
+       gfxPopMatrix(); 
+
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WarpDrive.vtx b/addons/visualization.vortex/resources/Presets/WarpDrive.vtx
new file mode 100644 (file)
index 0000000..95d8df2
--- /dev/null
@@ -0,0 +1,73 @@
+// WarpDrive.vtx
+// Author - MrC
+// Based on WarpDrive.r4 by Gordon Williams
+
+Texture trail;
+Texture sky;
+
+float[] pvel(256),ppos(256),ptheta(256),prad(256),plen(256),psnd(256);
+int x;
+float f,g,bt;
+const int cnt = 256;
+float time;
+
+void Init()
+{
+       sky.LoadTexture("skybox.dds");
+       trail.LoadTexture("bluestrip.dds");
+       
+       for (x=0;x<cnt;x=x+1) newpt(x);
+       bt = 0;
+       time = 0;
+}
+
+void drawit(float ax,float ay,float bx, float by,float r)
+{
+   gfxTexCoord(0,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),ay);
+   gfxTexCoord(0,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),ay);
+   gfxTexCoord(1,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),by);
+   gfxTexCoord(1,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),by);
+}
+
+void newpt(int p)
+{
+   pvel[p] = (Rand()+0.5)*2.0;
+   ppos[p] = 0.0;
+   ptheta[p] = Rand()*3.14159*2.0;
+   prad[p] = (Rand()*1.25)+0.25;
+   plen[p] = 1.0+Rand();
+   psnd[p] = Rand();
+} 
+
+void Render()
+{
+       gfxClear(0, 0, 0.1);
+
+       bt = bt + (TIMEPASS*(0.2+BASS));
+       time += TIMEPASS;
+       gfxSetBlendMode(BLEND_ADD);
+
+       f = Sin(bt+Sin(time*1.353));
+       g = Sin(f*3.14159*0.5);
+       gfxTranslate(0,0,3);
+       gfxRotate(90*(g+1.0),Sin(time*0.4),Cos(time*0.4),0);
+       gfxSetTexture(sky);
+       gfxCube(-200,-200,-200,200,200,200);
+       gfxSetTexture(trail);
+       gfxTranslate((Sin(bt*1.61))*0.3,(Sin(bt*1.23))*0.3,-8+(g*6.0));
+       gfxBegin(PRIM_QUADLIST);
+       for (x=0;x<cnt;x=x+1)
+       {
+               ppos[x] = ppos[x] + (pvel[x]*TIMEPASS*(0.5+(psnd[x]*BASS)+((1.0-psnd[x])*TREBLE)));
+               if (ppos[x]<0) ppos[x] = 0;
+               if (ppos[x]>1.0) newpt(x);
+               gfxColour(1,1,1,(1.0-Cos(ppos[x]*3.14159*2.0))*0.5);
+               drawit(ptheta[x],(ppos[x]*16.0)+plen[x],ptheta[x]+0.08+(prad[x]*0.025),(ppos[x]*16.0),prad[x]);
+       }
+       gfxEnd();
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WarpDriveTwist.vtx b/addons/visualization.vortex/resources/Presets/WarpDriveTwist.vtx
new file mode 100644 (file)
index 0000000..fafcaf2
--- /dev/null
@@ -0,0 +1,74 @@
+// WarpDriveTwist.vtx
+// Author - MrC
+// Based on WarpDriveTwist.r4 by Gordon Williams
+
+Texture trail;
+
+float[] pvel(256),ppos(256),ptheta(256),prad(256),plen(256),psnd(256);
+int[] pval(256),vr(8),vg(8),vb(8);
+
+int x;
+float f,g,bt;
+const int cnt = 256;
+float time;
+
+void Init()
+{
+       trail.LoadTexture("bluestrip.dds");
+       
+       for (x=0;x<cnt;x=x+1) newpt(x);
+       bt = 0;
+       time = 0;
+}
+
+void drawit(float ax,float ay,float bx, float by,float r)
+{
+   gfxTexCoord(0,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),ay);
+   gfxTexCoord(0,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),ay);
+   gfxTexCoord(1,1);
+   gfxVertex(r*Cos(bx),r*Sin(bx),by);
+   gfxTexCoord(1,0);
+   gfxVertex(r*Cos(ax),r*Sin(ax),by);
+}
+
+void newpt(int p)
+{
+   pvel[p] = (Rand()+0.5)*2.0;
+   ppos[p] = 0.0;
+   ptheta[p] = Rand()*3.14159*2.0;
+   prad[p] = (Rand()*1.25)+0.25;
+   plen[p] = 1.0+Rand();
+   psnd[p] = Rand() * 4;
+   pval[p] = Rand()*4;
+} 
+
+void Render()
+{
+
+       gfxClear(0, 0, 0.1);
+
+       bt = bt + (TIMEPASS*(0.2+BASS));
+       time += TIMEPASS;
+       gfxSetBlendMode(BLEND_ADD);
+
+       f = Sin(bt+Sin(time*1.353));
+       g = Sin(f*3.14159*0.5);
+       gfxTranslate(0,0,3);
+       gfxRotate(90*(g+1.0),Sin(time*0.4),Cos(time*0.4),0);
+       gfxSetTexture(trail);
+       gfxTranslate((Sin(bt*1.61))*0.3,(Sin(bt*1.23))*0.3,-8+(g*6.0));
+       gfxBegin(PRIM_QUADLIST);
+       for (x=0;x<cnt;x=x+1)
+       {
+               ppos[x] = ppos[x] + (pvel[x]*TIMEPASS*(0.5+(psnd[x]*BASS)+((1.0-psnd[x])*TREBLE)));
+               ptheta[x] = ptheta[x] + (((pval[x]%2)-0.5)*(BASS+0.15)*TIMEPASS*20);
+               if (ppos[x]<0) ppos[x] = 0;
+               if (ppos[x]>1.0) newpt(x);
+               gfxColour(1,1,1,(1.0-Cos(ppos[x]*3.14159*2.0))*0.5);
+               drawit(ptheta[x],(ppos[x]*16.0)+plen[x],ptheta[x]+0.08+(prad[x]*0.025),(ppos[x]*16.0),prad[x]);
+       }
+       gfxEnd();
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/Wave.vtx b/addons/visualization.vortex/resources/Presets/Wave.vtx
new file mode 100644 (file)
index 0000000..82c4986
--- /dev/null
@@ -0,0 +1,26 @@
+// Author : MrC
+
+void Render()
+{
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+   
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x<256; x=x+1)
+       {
+               float r = WaveLeft(x);
+               gfxColour(1, Fabs(r), 0.1f, 1);
+               gfxVertex((x-128) / 128.0f, r * 0.4f + 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x<256; x=x+1)
+       {
+               float r = WaveRight(x);
+               gfxColour(Fabs(r), 1, 0.1f, 1);
+               gfxVertex((x-128) / 128.0f, r * 0.4f - 0.5f, 0);
+       }
+       gfxEnd();
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WaveRing.vtx b/addons/visualization.vortex/resources/Presets/WaveRing.vtx
new file mode 100644 (file)
index 0000000..792adbb
--- /dev/null
@@ -0,0 +1,59 @@
+// Author - MrC
+// Based on WaveRing.r4 by Gordon Williams
+
+Map map;
+
+int x,y;
+float theta,rad,dx,dy;
+float mx, my;
+
+void Init()
+{
+       for (y=0;y<24;y=y+1)
+       {
+      for (x=0;x<32;x=x+1)
+      {
+         dx = x-15.5;
+         dy = y-11.5;
+         rad = Mag(dx,dy);
+         theta = Atan2(dy,dx);
+         mx = -(0.01*dy/rad)-Sin((rad-7.5)*0.1)*0.02*dx/rad;
+         my = (0.01*dx/rad)-Sin((rad-7.5)*0.1)*0.02*dy/rad;
+         map.SetValues(x, y, mx, my, (3.0+Cos(theta))*0.275, (3.0+Cos(theta*2.0))*0.275, (3.0+Cos(theta*4.0))*0.275);
+      } 
+       }
+}
+
+void Render()
+{
+       map.Render();
+
+       gfxSetRenderTarget(map);
+
+       gfxColour(1,1,1,1);
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               rad = 0.25 + (WaveLeft(x) / 10.0f);
+               theta = x*3.141592/128.0;
+               gfxVertex(Cos(theta)*rad, Sin(theta)*rad,1);
+       }
+       gfxEnd();
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               rad = 0.25 + (WaveRight(x) / 10.0f);
+               theta = x*3.141592/128.0;
+               gfxVertex(Cos(theta)*rad, Sin(theta)*rad,1);
+       }
+       gfxEnd();
+
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+         
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxTexRect(-1, 1, 1, -1);
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WaveScope.vtx b/addons/visualization.vortex/resources/Presets/WaveScope.vtx
new file mode 100644 (file)
index 0000000..4f0a7f1
--- /dev/null
@@ -0,0 +1,99 @@
+// Author - MrC
+// Based on WaveScope.r4 by Gordon Williams
+Map map;
+
+float dx,dy,a,r,d,tp,s,t,c;
+float px,py,pdx,pdy; // point 
+float cr,cg,cb,basstime;
+
+void Init()
+{
+   px = 16;
+   py = 12;
+   pdx = 1.342;
+   pdy = 1;
+   basstime = 0;
+   map.SetTimed();
+}
+
+void Render()
+{
+       //--------------------------------------
+       // Update map
+       
+       t = TIMEPASS*(BASS+0.25)*40;
+       px = px + (pdx*t);
+       if (px>28)
+       {
+               pdx = -(pdx);
+               px = 28;
+       }
+       else if (px<4)
+       {
+               pdx = -(pdx);
+               px = 4;
+       }
+       py = py + (pdy*t);
+       if (py>20)
+       {
+               pdy = -(pdy);
+               py = 20;
+       }
+       else if (py<4)
+       {
+               pdy = -(pdy);
+               py = 4;
+       }
+
+       basstime = basstime + (TIMEPASS*(BASS+1));
+       cr = (Cos(basstime)-1.0)/2.0;
+       cg = (Cos(basstime*2.0)-1.0)/2.0;
+       cb = (Cos(basstime*4.0)-1.0)/2.0;
+
+       for (int y = 0; y < 24; y++)
+       {
+               for (int x = 0; x < 32; x++)
+               {
+                       dx = x-px;
+                       dy = y-py;
+                       d = Mag(dx,dy);
+                       if (d>0.01)
+                       {
+                               c = (0.5/d)-0.05;
+                               if (c<0)
+                                       c=0;
+                               a = (d-12)/64;
+                               if (a>0)
+                                       a=0;
+                               r = 1-(d/4.0);
+                               map.SetValues(x,y, (dx*a)+(dy*c), (dy*a)-(dx*c), cr+r, cg+r, cb+r);
+                       }
+               }
+       }
+
+       map.Render();
+
+       gfxSetRenderTarget(map);
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               gfxVertex((x-128)/128.0f, (WaveLeft(x) / 3.0f) + 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               gfxVertex((x-128)/128.0f, (WaveRight(x) / 3.0f) - 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+       gfxTexRect(-1, -1, 1, 1);
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/WaveZoomer.vtx b/addons/visualization.vortex/resources/Presets/WaveZoomer.vtx
new file mode 100644 (file)
index 0000000..ae26e0d
--- /dev/null
@@ -0,0 +1,90 @@
+// WaveZoomer.vtx
+// Author - MrC
+// Based on WaveZoomer.r4 b Gordon Williams
+
+Map map;
+
+int x,y;
+float dx,dy,a,r;
+float cr,cg,cb,cx,cy,crot,cox,coy;
+float ccr,ccg,ccb;
+float sinrot,cosrot;
+float tx,ty,tz;
+float mx, my;
+int beat;
+
+void Init()
+{
+       map.SetTimed();
+       cx = 15.5;
+       cy = 11.5;
+       cox = 0;
+       coy = 0;
+       crot = 0;
+}
+
+void Render()
+{
+       if ((BASS+MIDDLE+TREBLE>0.6) && (beat!=1)) 
+       {
+      beat=1;
+      cx = (20.0*Rand())+6.0;
+      cy = (16.0*Rand())+4.0;
+      cox = (Rand()-0.5)*1.5;
+      coy = (Rand()-0.5)*1.5;
+      crot = (Rand()-0.5)*2;
+      ccr = Rand()-2;
+      ccg = Rand()-2;
+      ccb = Rand()-2;
+   }
+   else if ((BASS+MIDDLE+TREBLE<-0.6) && (beat!=0))
+   {
+      beat = 0;
+   }
+
+   sinrot = -0.05*Sin(crot)*(BASS+1.5);
+   cosrot = -0.05*Cos(crot)*(BASS+1.5);
+   
+   tx = cox*(MIDDLE+1.5);
+   ty = coy*(MIDDLE+1.5);
+   for (y=0;y<24;y=y+1)
+   {
+      for (x=0;x<32;x=x+1)
+      {
+         dx = x-cx;
+         dy = y-cy;
+         mx = tx+((dx*cosrot)+(dy*sinrot));
+         my = ty+((dy*cosrot)-(dx*sinrot));
+         map.SetValues(x, y, mx, my, ccr, ccg, ccb);
+      }
+       }
+
+       map.Render();
+
+       gfxSetRenderTarget(map);
+
+       gfxColour(0.8,0.8,0.8, 1);
+
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               gfxVertex((x-128)*0.0078125f, (WaveLeft(x) * 0.2f) + 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxBegin(PRIM_LINESTRIP);
+       for (int x=0; x < 256; x = x+1)
+       {
+               gfxVertex((x-128)*0.0078125f, (WaveRight(x) * 0.2f) - 0.5f, 0);
+       }
+       gfxEnd();
+
+       gfxSetRenderTarget(0);
+       gfxSetTexture(map);
+         
+       gfxTexRect(-1, 1, 1, -1);
+
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/Woofer.vtx b/addons/visualization.vortex/resources/Presets/Woofer.vtx
new file mode 100644 (file)
index 0000000..f6ab55a
--- /dev/null
@@ -0,0 +1,65 @@
+// woofer.vtx
+// Author - morte0815
+
+float angle = 0;
+
+void Init()
+{
+
+}
+
+void Quad(float x, float y, float z, float width, float tu_u,float tv_l, float tu_b , float tv_r)
+{
+gfxBegin(PRIM_QUADLIST);
+gfxTexCoord(tu_u, tv_l);
+gfxVertex(x,y,z);
+gfxTexCoord(tu_b, tv_l);
+gfxVertex(x+width,y,z);
+gfxTexCoord(tu_b, tv_r);
+gfxVertex(x+width,y+width,z);
+gfxTexCoord(tu_u, tv_r);
+gfxVertex(x,y+width,z);
+
+
+gfxEnd();
+}
+
+
+float Length(float x, float y)
+{
+  return Sqrt(x*x+y*y);
+}
+
+void Render()
+{
+  if (BASS>0.5f)angle += TIMEPASS*5;
+  if (BASS<0.5f)angle -= TIMEPASS*5;
+  
+  gfxTranslate(0, 0, 25.0f);
+    
+    gfxRotate(-100,1,0,0);
+    gfxRotate(angle,0,0,1);
+  
+  
+    gfxSetTexture(TEXTURE_ALBUMART);
+    
+    for (int i = -10; i < 10; i++)
+  {
+    for ( int j = -10; j < 10; j++)
+    {
+      if (Length(i,j) <= 10)
+      {
+      float height=(Length(i,j)/10.0f*BASS);
+      height+=((10.0f-Length(i,j))/10.0f*TREBLE);
+      height+=((5.0f-Length(i,j))/10*MIDDLE);
+      Quad(i,j,height,1,(i+10)/20.0f,(j+10)/20.0f,(i+1+10)/20.0f,(j+1+10)/20.0f);
+      }
+    }
+  }
+  
+  
+  
+      
+    gfxEnd();
+    
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/XBMCRain.vtx b/addons/visualization.vortex/resources/Presets/XBMCRain.vtx
new file mode 100644 (file)
index 0000000..224b4e1
--- /dev/null
@@ -0,0 +1,95 @@
+// Author - MrC
+// Based on R4Rain.r4 by Gordon Williams
+
+int x,y, t;
+float c,tm,tn,td, s;
+float[] c_x(64),c_y(64),c_z(64),c_vz(64),c_rx(64),c_ry(64),c_sx(64),c_sy(64),c_sz(64);
+float d;
+
+Texture        texture;
+Texture        sky;
+
+void MakeNew(int n)
+{
+   c_x[n]=c_y[n]=0;
+   while (Mag(c_x[n],c_y[n])<1)
+   {
+      c_x[n] = (Rand()*6.0)-3.0;
+      c_y[n] = (Rand()*6.0)-3.0;
+   }
+
+   c_z[n] = 10;
+   c_vz[n] = (1.0+Rand())*4;
+   c_rx[n] = (1.0+Rand())*80;
+   c_ry[n] = (1.0+Rand())*80;
+   c_sx[n] = (0.5+Rand())*0.5;
+   c_sy[n] = (0.5+Rand())*0.5;
+   c_sz[n] = (1.0+Rand())*0.05;
+}
+
+
+void Init()
+{
+       texture.LoadTexture("splash_original.dds");
+       sky.LoadTexture("skybox.dds");
+       
+       for (x=0;x<64;x=x+1)
+       {
+      MakeNew(x);
+      c_z[x] = Rand()*10;
+       }
+       tm = tn = 0;
+}
+
+void mything(float x,float y,float z)
+{ 
+   gfxBegin(PRIM_QUADLIST); 
+   for (t=0; t<1; t++)
+   {
+       s = z*((t/2.0f)-1.0);
+      gfxTexCoord(0,0); 
+      gfxVertex(-x,y,s); 
+      gfxTexCoord(1,0); 
+      gfxVertex(x,y,s); 
+      gfxTexCoord(1,1); 
+      gfxVertex(x,-y,s); 
+      gfxTexCoord(0,1); 
+      gfxVertex(-x,-y,s); 
+   
+   }
+   gfxEnd(); 
+} 
+
+void Render()
+{
+       td = ((TREBLE+1.5f)*TIMEPASS);
+       tm = tm + td;
+       tn = tn + ((BASS+1.0)*TIMEPASS*2);
+
+       gfxTranslate(Cos(tn * 1.23f) * 0.5f, Sin(tn) * 0.5f, 0.0f);
+       gfxRotate(Cos(tn*0.6734f)*20.0f, 1.0f, 0.0f, 0.0f);
+       gfxRotate(Sin(tn*0.2143f)*20.0f, 0.0f, 1.0f, 0.0f);
+
+       gfxSetTexture(sky);
+       gfxCube(-100,-100,-100,100,100,100);
+
+       gfxSetTexture(texture);
+
+       gfxSetBlendMode(BLEND_ADD);
+
+       for (x=0;x<64;x++)
+       { 
+               c_z[x] = c_z[x] - (td*c_vz[x]); 
+               if (c_z[x]<0) MakeNew(x); 
+
+               c = (10.0-c_z[x])*0.11; 
+               gfxColour(c,c,c,1); 
+               gfxPushMatrix(); 
+               gfxTranslate(c_x[x],c_y[x],c_z[x]); 
+               gfxRotate(c_rx[x]*tm,1.0f,0.0f,0.0f); 
+               gfxRotate(c_ry[x]*tm,0.0f,1.0f,0.0f); 
+               mything(c_sx[x],c_sy[x],c_sz[x]); 
+               gfxPopMatrix(); 
+       } 
+       
+}
\ No newline at end of file
diff --git a/addons/visualization.vortex/resources/Presets/tunnel.tra b/addons/visualization.vortex/resources/Presets/tunnel.tra
new file mode 100644 (file)
index 0000000..42cf0a6
--- /dev/null
@@ -0,0 +1,56 @@
+// Tunnel.tra
+// Author - MrC
+// Based on FadeTunnel.r4 by Gordon Williams
+
+const int strips = 64;
+
+int x,y;
+float dx,dy,sx,sy,tx,a,b,mytime;
+
+void Init()
+{
+}
+
+void Render()
+{
+       mytime = mytime + (TIMEPASS * 0.25);
+       FINISHED = (mytime>1);
+
+       gfxSetTexture(TEXTURE_NEXTPRESET);
+       gfxSetAspect(0);
+       gfxTranslate(0, 0, 2.414);
+       gfxColour(1, 1, 1, 1);
+       gfxTexRect(-1, 1, 1, -1);
+       gfxTranslate(0, 0, -2.414);
+
+       a = mytime*2;
+       if (a>1.0) a=1.0;
+       a = (1.0-Cos(a*3.14159))/2.0;
+
+       b = (mytime*2)-1.0;
+       if (b<0.0) b=0.0;
+       b = (1.0-Cos(b*3.14159))/2.0;
+
+       gfxTranslate(0,0,2.414+(a*3.0)-(b*8));
+
+       gfxRotate((1.0-Cos(a*3.14159))*180,1,1,1);   
+       gfxRotate(a*90,1,0,0);   
+       gfxRotate((1.0-Cos(b*3.14159))*180,0,1,0);   
+
+       gfxSetTexture(TEXTURE_CURRPRESET);
+
+       gfxColour(1,1,1,1);
+       gfxBegin(PRIM_QUADSTRIP);
+
+       for (x=0;x<=strips;x=x+1)
+       {
+               dx = (1.0*x)/strips;
+               tx = dx*2;
+               if (tx>1) tx=2.0-tx;
+               gfxTexCoord(tx,1.0);
+               gfxVertex(((dx*4.0)-1.0)*(1.0-a)+(-Cos(3.14159*2.0*dx)*a),-1-a,(-Sin(3.14159*2.0*dx)*a));
+               gfxTexCoord(tx,0.0);
+               gfxVertex(((dx*4.0)-1.0)*(1.0-a)+(-Cos(3.14159*2.0*dx)*a),1+a,(-Sin(3.14159*2.0*dx)*a));
+       }
+       gfxEnd();
+}
diff --git a/addons/visualization.vortex/resources/Textures/Plasma_edge.jpg b/addons/visualization.vortex/resources/Textures/Plasma_edge.jpg
new file mode 100644 (file)
index 0000000..27143d3
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Plasma_edge.jpg differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD1.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD1.png
new file mode 100644 (file)
index 0000000..ea58ba9
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD1.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD2.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD2.png
new file mode 100644 (file)
index 0000000..bd1bee0
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD2.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD3.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD3.png
new file mode 100644 (file)
index 0000000..6daa4cd
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD3.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD4.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD4.png
new file mode 100644 (file)
index 0000000..bbe0751
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD4.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD5.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD5.png
new file mode 100644 (file)
index 0000000..ab93d76
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD5.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD6.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD6.png
new file mode 100644 (file)
index 0000000..83935d1
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD6.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD7.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD7.png
new file mode 100644 (file)
index 0000000..a3c7761
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD7.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Skull_JawUD8.png b/addons/visualization.vortex/resources/Textures/Skull_JawUD8.png
new file mode 100644 (file)
index 0000000..93686da
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Skull_JawUD8.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Smiley.png b/addons/visualization.vortex/resources/Textures/Smiley.png
new file mode 100644 (file)
index 0000000..3b6d9d8
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Smiley.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Speaker.png b/addons/visualization.vortex/resources/Textures/Speaker.png
new file mode 100644 (file)
index 0000000..f7de0b6
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Speaker.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Tex_Edge.png b/addons/visualization.vortex/resources/Textures/Tex_Edge.png
new file mode 100644 (file)
index 0000000..380e128
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Tex_Edge.png differ
diff --git a/addons/visualization.vortex/resources/Textures/Vortex_Credits.png b/addons/visualization.vortex/resources/Textures/Vortex_Credits.png
new file mode 100644 (file)
index 0000000..3c46640
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/Vortex_Credits.png differ
diff --git a/addons/visualization.vortex/resources/Textures/alien.png b/addons/visualization.vortex/resources/Textures/alien.png
new file mode 100644 (file)
index 0000000..a2cbd01
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/alien.png differ
diff --git a/addons/visualization.vortex/resources/Textures/aqua_ravines.jpg b/addons/visualization.vortex/resources/Textures/aqua_ravines.jpg
new file mode 100644 (file)
index 0000000..0083567
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/aqua_ravines.jpg differ
diff --git a/addons/visualization.vortex/resources/Textures/bluestrip.dds b/addons/visualization.vortex/resources/Textures/bluestrip.dds
new file mode 100644 (file)
index 0000000..a48cada
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/bluestrip.dds differ
diff --git a/addons/visualization.vortex/resources/Textures/checker.png b/addons/visualization.vortex/resources/Textures/checker.png
new file mode 100644 (file)
index 0000000..4ca89c6
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/checker.png differ
diff --git a/addons/visualization.vortex/resources/Textures/checker_transp.png b/addons/visualization.vortex/resources/Textures/checker_transp.png
new file mode 100644 (file)
index 0000000..753c662
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/checker_transp.png differ
diff --git a/addons/visualization.vortex/resources/Textures/env2.jpg b/addons/visualization.vortex/resources/Textures/env2.jpg
new file mode 100644 (file)
index 0000000..ae425b7
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/env2.jpg differ
diff --git a/addons/visualization.vortex/resources/Textures/env3.png b/addons/visualization.vortex/resources/Textures/env3.png
new file mode 100644 (file)
index 0000000..a90b1a3
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/env3.png differ
diff --git a/addons/visualization.vortex/resources/Textures/env3_darker.png b/addons/visualization.vortex/resources/Textures/env3_darker.png
new file mode 100644 (file)
index 0000000..2e3cd96
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/env3_darker.png differ
diff --git a/addons/visualization.vortex/resources/Textures/huemap.jpg b/addons/visualization.vortex/resources/Textures/huemap.jpg
new file mode 100644 (file)
index 0000000..ceb0917
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/huemap.jpg differ
diff --git a/addons/visualization.vortex/resources/Textures/skull.png b/addons/visualization.vortex/resources/Textures/skull.png
new file mode 100644 (file)
index 0000000..a684418
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/skull.png differ
diff --git a/addons/visualization.vortex/resources/Textures/sky.dds b/addons/visualization.vortex/resources/Textures/sky.dds
new file mode 100644 (file)
index 0000000..6c00f41
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/sky.dds differ
diff --git a/addons/visualization.vortex/resources/Textures/skybox.dds b/addons/visualization.vortex/resources/Textures/skybox.dds
new file mode 100644 (file)
index 0000000..4d389eb
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/skybox.dds differ
diff --git a/addons/visualization.vortex/resources/Textures/splash_original.dds b/addons/visualization.vortex/resources/Textures/splash_original.dds
new file mode 100644 (file)
index 0000000..bed53fa
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/splash_original.dds differ
diff --git a/addons/visualization.vortex/resources/Textures/trail2.dds b/addons/visualization.vortex/resources/Textures/trail2.dds
new file mode 100644 (file)
index 0000000..7d1178c
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/trail2.dds differ
diff --git a/addons/visualization.vortex/resources/Textures/vortex-v.jpg b/addons/visualization.vortex/resources/Textures/vortex-v.jpg
new file mode 100644 (file)
index 0000000..f70f906
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/vortex-v.jpg differ
diff --git a/addons/visualization.vortex/resources/Textures/xbmc_icon.png b/addons/visualization.vortex/resources/Textures/xbmc_icon.png
new file mode 100644 (file)
index 0000000..f011789
Binary files /dev/null and b/addons/visualization.vortex/resources/Textures/xbmc_icon.png differ
diff --git a/addons/visualization.vortex/resources/language/Afrikaans/strings.po b/addons/visualization.vortex/resources/language/Afrikaans/strings.po
new file mode 100644 (file)
index 0000000..ce6622d
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Afrikaans (http://www.transifex.com/projects/p/xbmc-main/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tyd Tussen Voorafinstellings"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Addisionele Lukraak Tyd"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek."
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f rps"
diff --git a/addons/visualization.vortex/resources/language/Albanian/strings.po b/addons/visualization.vortex/resources/language/Albanian/strings.po
new file mode 100644 (file)
index 0000000..13600b3
--- /dev/null
@@ -0,0 +1,21 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Albanian (http://www.transifex.com/projects/p/xbmc-main/language/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekonda"
diff --git a/addons/visualization.vortex/resources/language/Amharic/strings.po b/addons/visualization.vortex/resources/language/Amharic/strings.po
new file mode 100644 (file)
index 0000000..a06478a
--- /dev/null
@@ -0,0 +1,25 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Amharic (http://www.transifex.com/projects/p/xbmc-main/language/am/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: am\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Arabic/strings.po b/addons/visualization.vortex/resources/language/Arabic/strings.po
new file mode 100644 (file)
index 0000000..bcc8136
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Arabic (http://www.transifex.com/projects/p/xbmc-main/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "الزمن بين الإعدادات المسبقة"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "وقت إضافي عشوائي"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f الثانية"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Belarusian/strings.po b/addons/visualization.vortex/resources/language/Belarusian/strings.po
new file mode 100644 (file)
index 0000000..7f90080
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Belarusian (http://www.transifex.com/projects/p/xbmc-main/language/be/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: be\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Time Between Presets"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Additional Random Time"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Bulgarian/strings.po b/addons/visualization.vortex/resources/language/Bulgarian/strings.po
new file mode 100644 (file)
index 0000000..b3a3c50
--- /dev/null
@@ -0,0 +1,57 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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 "Random Presets"
+msgstr "Случаен ред на шаблоните"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Време между отделните шаблони"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Допълнително произволно време"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "\"Заключи\" (спри на) шаблона"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Включи прехода между шаблоните"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Покажи FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Покажи debug конзолата"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Покажи аудио анализа"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f сек"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Burmese/strings.po b/addons/visualization.vortex/resources/language/Burmese/strings.po
new file mode 100644 (file)
index 0000000..80e3f64
--- /dev/null
@@ -0,0 +1,29 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Burmese (http://www.transifex.com/projects/p/xbmc-main/language/my/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: my\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Preset များအတွင်းကြာချိန်"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Catalan/strings.po b/addons/visualization.vortex/resources/language/Catalan/strings.po
new file mode 100644 (file)
index 0000000..4888225
--- /dev/null
@@ -0,0 +1,45 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Catalan (http://www.transifex.com/projects/p/xbmc-main/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Predefinits aleatoris"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Temps entre predefinits"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Temps aleatori addicional"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Mostra els FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Mostra la consola de depuració"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f seg"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Chinese (Simple)/strings.po b/addons/visualization.vortex/resources/language/Chinese (Simple)/strings.po
new file mode 100644 (file)
index 0000000..e564fbc
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Chinese (Simple) (http://www.transifex.com/projects/p/xbmc-main/language/zh/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "随机预置"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "预置切换时间"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "附加随机时间"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "锁定预置"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "允许过渡"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "停止首个预置"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "显示祯率"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "显示调试控制台"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "显示音频分析"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f 秒"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Chinese (Traditional)/strings.po b/addons/visualization.vortex/resources/language/Chinese (Traditional)/strings.po
new file mode 100644 (file)
index 0000000..c2f06d3
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Chinese (Traditional) (http://www.transifex.com/projects/p/xbmc-main/language/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "預置切換時間"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "附屬隨機時間"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f 秒"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Croatian/strings.po b/addons/visualization.vortex/resources/language/Croatian/strings.po
new file mode 100644 (file)
index 0000000..d96dd1e
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Croatian (http://www.transifex.com/projects/p/xbmc-main/language/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Vrijeme između predloška"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Dodatno naizmjenično vrijeme"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekundi"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Czech/strings.po b/addons/visualization.vortex/resources/language/Czech/strings.po
new file mode 100644 (file)
index 0000000..9890a2a
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Czech (http://www.transifex.com/projects/p/xbmc-main/language/cs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Náhodné předvolby"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Čas mezi předvolbami"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Dodatečný náhodný čas"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Uzamknout předvolbu"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Povolit překlady"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Zastavit první předvolbu"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Zobrazit FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Zobrazit ladící konzoli"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Zobrazit analýzu zvuku"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Danish/strings.po b/addons/visualization.vortex/resources/language/Danish/strings.po
new file mode 100644 (file)
index 0000000..b41eba4
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Danish (http://www.transifex.com/projects/p/xbmc-main/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tid mellem forudindstillinger"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Ekstra tilfældig tid"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Dutch/strings.po b/addons/visualization.vortex/resources/language/Dutch/strings.po
new file mode 100644 (file)
index 0000000..65aaae6
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Dutch (http://www.transifex.com/projects/p/xbmc-main/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Willekeurige Presets"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tijd tussen presets"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Bijkomende willekeurige tijd"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Vastzetten Preset"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Activeer transities"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Stop eerste preset"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Toon FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Toon debug console"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Toon audio analyses"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.Van sec."
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.Van fps"
diff --git a/addons/visualization.vortex/resources/language/English (US)/strings.po b/addons/visualization.vortex/resources/language/English (US)/strings.po
new file mode 100644 (file)
index 0000000..4344489
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: English (US) (http://www.transifex.com/projects/p/xbmc-main/language/en_US/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en_US\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Time Between Presets"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Additional Random Time"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/English/strings.po b/addons/visualization.vortex/resources/language/English/strings.po
new file mode 100644 (file)
index 0000000..9f3d66e
--- /dev/null
@@ -0,0 +1,66 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: English (http://www.transifex.com/projects/p/xbmc-main/language/en/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#settings labels
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr ""
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr ""
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr ""
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr ""
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr ""
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr ""
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr ""
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr ""
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr ""
+
+#empty strings from id 30009 to 30049
+#setting value formats
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr ""
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr ""
diff --git a/addons/visualization.vortex/resources/language/Estonian/strings.po b/addons/visualization.vortex/resources/language/Estonian/strings.po
new file mode 100644 (file)
index 0000000..c598141
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Estonian (http://www.transifex.com/projects/p/xbmc-main/language/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Juhuslikud eelseaded"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Eelseadistuste vaheline aeg"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Juhuslik lisaaeg"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Lukusta eelseaded"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Luba üleminekud"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Peate esimene eelseade"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Näita värskenduskiirust"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Näita silumise konsooli"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Näita audio analüüsi"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f s"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Finnish/strings.po b/addons/visualization.vortex/resources/language/Finnish/strings.po
new file mode 100644 (file)
index 0000000..a774df3
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Finnish (http://www.transifex.com/projects/p/xbmc-main/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Esiasetusten välinen aika"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Satunnainen lisäaika"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f s"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/French (Canada)/strings.po b/addons/visualization.vortex/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..7083e40
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Préréglages aléatoires"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Intervalle entre les préréglages"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Temps aléatoire additionnel"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Verrouiller le préréglage"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Transitions activées"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Arrêt au premier préréglage"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Afficher la fréquences d'images"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Afficher la console de débogage"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Afficher l'analyse audio"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sec"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f ips"
diff --git a/addons/visualization.vortex/resources/language/French/strings.po b/addons/visualization.vortex/resources/language/French/strings.po
new file mode 100644 (file)
index 0000000..ff82f74
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: French (http://www.transifex.com/projects/p/xbmc-main/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Intervalle des présélections"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Ajout aléatoire de temps"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Galician/strings.po b/addons/visualization.vortex/resources/language/Galician/strings.po
new file mode 100644 (file)
index 0000000..2553c83
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Galician (http://www.transifex.com/projects/p/xbmc-main/language/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Preconfiguracións Ó Chou"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tempo entre Preconfiguracións"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tempo ó chou adicional"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Bloquear Preconfiguración"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Activar Transicións"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Deter a primeira Preconfiguración"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Amosar FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Amosar a consola de depuración"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Amosar análises de son"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f seg"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/German/strings.po b/addons/visualization.vortex/resources/language/German/strings.po
new file mode 100644 (file)
index 0000000..7fc0cd4
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: German (http://www.transifex.com/projects/p/xbmc-main/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Zufällige Voreinstellungen"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Zeit zwischen den Voreinstellungen"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Zusätzliche zufällige Zeit"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Voreinstellung sperren"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Erlaube Übergänge"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Erste Voreinstellung anhalten"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Zeige FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Zeige Debug-Konsole"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Zeige Audio-Analyse"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Greek/strings.po b/addons/visualization.vortex/resources/language/Greek/strings.po
new file mode 100644 (file)
index 0000000..4ae0e0c
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Greek (http://www.transifex.com/projects/p/xbmc-main/language/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Τυχαίες Προρυθμίσεις"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Χρόνος Μεταξύ Προρυθμίσεων"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Επιπλέον Χρόνος Τυχαίων"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Κλείδωμα Προρύθμισης"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Ενεργοποίηση Μεταβάσεων"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Διακοπή πρώτης προρύθμισης"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Εμφάνιση FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Εμφάνιση κονσόλας εντοπισμού σφαλμάτων"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Εμφάνιση ηχητικής ανάλυσης"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f δευτ."
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Hebrew/strings.po b/addons/visualization.vortex/resources/language/Hebrew/strings.po
new file mode 100644 (file)
index 0000000..c4938f2
--- /dev/null
@@ -0,0 +1,37 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Hebrew (http://www.transifex.com/projects/p/xbmc-main/language/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Time Between Presets"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Additional Random Time"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "הצג FPS"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f שניות"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Hungarian/strings.po b/addons/visualization.vortex/resources/language/Hungarian/strings.po
new file mode 100644 (file)
index 0000000..e502fd4
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Hungarian (http://www.transifex.com/projects/p/xbmc-main/language/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Véletlen Beállítások"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Idő a beállításkészletek között"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Többlet véletlen idő"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Beállítások zárolása"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Átfedések engedélyezése"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Első beállítás megállítása"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "FPS mutatása"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Hibakereső konzol mutatása"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Audióvizsgálat mutatása"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f mp"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Icelandic/strings.po b/addons/visualization.vortex/resources/language/Icelandic/strings.po
new file mode 100644 (file)
index 0000000..3a6918d
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Icelandic (http://www.transifex.com/projects/p/xbmc-main/language/is/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: is\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tími á milli forstillinga"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Aukalegur slembitími"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekúndur"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Indonesian/strings.po b/addons/visualization.vortex/resources/language/Indonesian/strings.po
new file mode 100644 (file)
index 0000000..bf1d412
--- /dev/null
@@ -0,0 +1,25 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Indonesian (http://www.transifex.com/projects/p/xbmc-main/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Waktu Antara Presets"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f detik"
diff --git a/addons/visualization.vortex/resources/language/Italian/strings.po b/addons/visualization.vortex/resources/language/Italian/strings.po
new file mode 100644 (file)
index 0000000..a586793
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Italian (http://www.transifex.com/projects/p/xbmc-main/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tempo tra i preset"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tempo aggiuntivo casuale"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secondi"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Japanese/strings.po b/addons/visualization.vortex/resources/language/Japanese/strings.po
new file mode 100644 (file)
index 0000000..941ef78
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Japanese (http://www.transifex.com/projects/p/xbmc-main/language/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "各プリセットの間隔"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "追加ランダム時間"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f秒"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Korean/strings.po b/addons/visualization.vortex/resources/language/Korean/strings.po
new file mode 100644 (file)
index 0000000..8f76faf
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Korean (http://www.transifex.com/projects/p/xbmc-main/language/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "프리셋사이 간격"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "추가적 랜덤 간격"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f 초"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Latvian/strings.po b/addons/visualization.vortex/resources/language/Latvian/strings.po
new file mode 100644 (file)
index 0000000..333fee1
--- /dev/null
@@ -0,0 +1,41 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Latvian (http://www.transifex.com/projects/p/xbmc-main/language/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Nejaušas sagataves"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Laiks starp sagatavēm"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Aizslēgt sagatavi"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Apturēt pimo sagatavi"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekundes"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Lithuanian/strings.po b/addons/visualization.vortex/resources/language/Lithuanian/strings.po
new file mode 100644 (file)
index 0000000..fecc285
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Lithuanian (http://www.transifex.com/projects/p/xbmc-main/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Laikas Tarp Nustatymu"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Papildomas Atsitiktinis Laikas"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Macedonian/strings.po b/addons/visualization.vortex/resources/language/Macedonian/strings.po
new file mode 100644 (file)
index 0000000..ecfd947
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Macedonian (http://www.transifex.com/projects/p/xbmc-main/language/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Време помеѓу подесувањата"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Дополнително случајно време"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Norwegian/strings.po b/addons/visualization.vortex/resources/language/Norwegian/strings.po
new file mode 100644 (file)
index 0000000..ad28223
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Norwegian (http://www.transifex.com/projects/p/xbmc-main/language/no/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: no\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tid mellom forvalg"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Ytterligere tilfeldig tid"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Polish/strings.po b/addons/visualization.vortex/resources/language/Polish/strings.po
new file mode 100644 (file)
index 0000000..839b69c
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Polish (http://www.transifex.com/projects/p/xbmc-main/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Losowe efekty"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Interwał efektów"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Dodatkowy czas losowy"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Zablokuj efekty"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Włącz przejścia"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Zatrzymaj pierwsze ustawienie"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Pokaż FPS "
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Pokaż konsolę debugowania"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Pokaż analizę dźwięku "
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek."
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Portuguese (Brazil)/strings.po b/addons/visualization.vortex/resources/language/Portuguese (Brazil)/strings.po
new file mode 100644 (file)
index 0000000..5fcc5ad
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Portuguese (Brazil) (http://www.transifex.com/projects/p/xbmc-main/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Pré-definidos Randômicos"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tempo entre pré-definidos"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tempo Randômico Adicional"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Travar Pré-definição"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Ativar Transições"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Interromper primeira pré-definição"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Mostrar FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Apresentar console de depuração"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Apresentar análise de áudio"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f segs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Portuguese/strings.po b/addons/visualization.vortex/resources/language/Portuguese/strings.po
new file mode 100644 (file)
index 0000000..1f6d775
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Portuguese (http://www.transifex.com/projects/p/xbmc-main/language/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Pré-Selecções Aleatórias"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tempo entre Pré-Selecções"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tempo Aleatório Adicional"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Trancar Pré-Selecção"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Activar Transições"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Parar primeira pré-selecção"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Exibir frames p/ seg."
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Exibir consola de depuração"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Exibir análise de áudio"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f segundos"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Romanian/strings.po b/addons/visualization.vortex/resources/language/Romanian/strings.po
new file mode 100644 (file)
index 0000000..539f201
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Romanian (http://www.transifex.com/projects/p/xbmc-main/language/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Durată între vizualizări predefinite"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Timp aleatoriu adițional"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sec"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Russian/strings.po b/addons/visualization.vortex/resources/language/Russian/strings.po
new file mode 100644 (file)
index 0000000..15e6db6
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Russian (http://www.transifex.com/projects/p/xbmc-main/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Время между настройками"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Дополнительное случайное время"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f с"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f кадр/с"
diff --git a/addons/visualization.vortex/resources/language/Slovak/strings.po b/addons/visualization.vortex/resources/language/Slovak/strings.po
new file mode 100644 (file)
index 0000000..2191c7e
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Slovak (http://www.transifex.com/projects/p/xbmc-main/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Náhodné predvoľby"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Čas medzi predvoľbami"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Pridaný náhodná čas"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Zamknúť predvoľbu"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Zapnúť prechody"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Zastaviť prvú predvľbu"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Zobraziť FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Zobraziť ladiace informácie"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Zobraziť analýzu zvuku"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f secs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Slovenian/strings.po b/addons/visualization.vortex/resources/language/Slovenian/strings.po
new file mode 100644 (file)
index 0000000..9050415
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Slovenian (http://www.transifex.com/projects/p/xbmc-main/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Naključne prednastavitve"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Čas med prednastavitvami"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Dodaten naključen čas"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Zakleni prednastavitev"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Omogoči prehode"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Ustavi prvo prednastavitev"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Prikaži FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Prikaži razhroščevalno konzolo"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Prikaži analizo zvoka"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sekund"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Spanish (Argentina)/strings.po b/addons/visualization.vortex/resources/language/Spanish (Argentina)/strings.po
new file mode 100644 (file)
index 0000000..30f661d
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Spanish (Argentina) (http://www.transifex.com/projects/p/xbmc-main/language/es_AR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Ajustes aleatorios"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tiempo entre presets"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tiempo aleatorio adicional"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Bloquear ajuste"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Habilitar transiciones"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Detener el primer ajuste"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Mostrar FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Mostrar consola de depuración"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Mostrar análisis de audio"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f seg"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Spanish (Mexico)/strings.po b/addons/visualization.vortex/resources/language/Spanish (Mexico)/strings.po
new file mode 100644 (file)
index 0000000..1de4c3e
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Spanish (Mexico) (http://www.transifex.com/projects/p/xbmc-main/language/es_MX/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tiempo Entre Preajustes"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tiempo Aleatorio Adicional"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f segs"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Spanish/strings.po b/addons/visualization.vortex/resources/language/Spanish/strings.po
new file mode 100644 (file)
index 0000000..8314a2a
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Spanish (http://www.transifex.com/projects/p/xbmc-main/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Preajuste aleatorio"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tiempo entre preajustes"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Tiempo aleatorio adicional"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Bloquear preajuste"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Activar Transiciones"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Detener el primer preajuste"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Mostrar FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Mostrar consola de depuración"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Mostrar análisis de audio"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f seg"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Swedish/strings.po b/addons/visualization.vortex/resources/language/Swedish/strings.po
new file mode 100644 (file)
index 0000000..e6778c1
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Swedish (http://www.transifex.com/projects/p/xbmc-main/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Tid mellan förval"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Extra slumpmässig tid"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f sek"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Tajik/strings.po b/addons/visualization.vortex/resources/language/Tajik/strings.po
new file mode 100644 (file)
index 0000000..1d33866
--- /dev/null
@@ -0,0 +1,61 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Tajik (http://www.transifex.com/projects/p/xbmc-main/language/tg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Random Presets"
+msgstr "Танзими тасодуфӣ"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Вақт байни интихобҳо"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Вақти тасодуфии иловагӣ"
+
+msgctxt "#30003"
+msgid "Lock Preset"
+msgstr "Танзими қулф"
+
+msgctxt "#30004"
+msgid "Enable Transitions"
+msgstr "Фаъол кардани интиқолҳо"
+
+msgctxt "#30005"
+msgid "Stop first preset"
+msgstr "Қатъ кардани танзими аслӣ"
+
+msgctxt "#30006"
+msgid "Show FPS"
+msgstr "Намоиши FPS"
+
+msgctxt "#30007"
+msgid "Show debug console"
+msgstr "Намоиш консол бо иттилооти ислоҳи хатоҳо"
+
+msgctxt "#30008"
+msgid "Show audio analysis"
+msgstr "Намоиши таҳлили садо"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f сония"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f кадр/с"
diff --git a/addons/visualization.vortex/resources/language/Tamil (India)/strings.po b/addons/visualization.vortex/resources/language/Tamil (India)/strings.po
new file mode 100644 (file)
index 0000000..acd2e69
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Tamil (India) (http://www.transifex.com/projects/p/xbmc-main/language/ta_IN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_IN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "அடுக்கு குணங்கலுக்கு இடையேயான நேரம்"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "கூடுதல் குறிப்பிலாத நேரம்"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f நொடிகள்"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Thai/strings.po b/addons/visualization.vortex/resources/language/Thai/strings.po
new file mode 100644 (file)
index 0000000..b0b124f
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Thai (http://www.transifex.com/projects/p/xbmc-main/language/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "ระยะเวลาระหว่างชุดรูปแบบ"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "เวลาสุ่มเพิ่มเติม"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f วินาที"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f เฟรมต่อวิ."
diff --git a/addons/visualization.vortex/resources/language/Turkish/strings.po b/addons/visualization.vortex/resources/language/Turkish/strings.po
new file mode 100644 (file)
index 0000000..2aff8fe
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Turkish (http://www.transifex.com/projects/p/xbmc-main/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Ön Ayarlar Arasındaki Zaman"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "İlave Rasgele Zaman"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f saniye"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f fps"
diff --git a/addons/visualization.vortex/resources/language/Ukrainian/strings.po b/addons/visualization.vortex/resources/language/Ukrainian/strings.po
new file mode 100644 (file)
index 0000000..446a111
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Ukrainian (http://www.transifex.com/projects/p/xbmc-main/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Тривалість показу одного ефекту"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Додатковий час випадкової тривалості"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f сек"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f кадр/с"
diff --git a/addons/visualization.vortex/resources/language/Vietnamese/strings.po b/addons/visualization.vortex/resources/language/Vietnamese/strings.po
new file mode 100644 (file)
index 0000000..ec65efe
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Vietnamese (http://www.transifex.com/projects/p/xbmc-main/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Thời gian đổi Preset"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Thời gian random thêm vào"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f giây"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f hình/s"
diff --git a/addons/visualization.vortex/resources/language/Welsh/strings.po b/addons/visualization.vortex/resources/language/Welsh/strings.po
new file mode 100644 (file)
index 0000000..80df8f5
--- /dev/null
@@ -0,0 +1,33 @@
+# XBMC Media Center language file
+# Addon Name: Vortex
+# Addon id: visualization.vortex
+# 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: Welsh (http://www.transifex.com/projects/p/xbmc-main/language/cy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cy\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
+
+msgctxt "#30001"
+msgid "Time Between Presets"
+msgstr "Amse Rhwg Rhagosodiadau"
+
+msgctxt "#30002"
+msgid "Additional Random Time"
+msgstr "Amser Hap Ychwanegol"
+
+msgctxt "#30050"
+msgid "%2.0f secs"
+msgstr "%2.0f eil"
+
+msgctxt "#30051"
+msgid "%2.0f fps"
+msgstr "%2.0f ye"
diff --git a/addons/visualization.vortex/resources/settings.xml b/addons/visualization.vortex/resources/settings.xml
new file mode 100644 (file)
index 0000000..de32b26
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settings>
+       <setting id="RandomPresets" type="bool" label="30000" default="true"/>
+       <setting id="TimeBetweenPresets" type="rangeofnum" label="30001" rangestart="5" rangeend="50" elements="10" valueformat="30050" default="0"/>
+       <setting id="AdditionalRandomTime" type="rangeofnum" label="30002" rangestart="5" rangeend="50" elements="10" valueformat="30050" default="0"/>
+       <setting id="LockPreset" type="bool" label="30003" default="false"/>
+       <setting id="EnableTransitions" type="bool" label="30004" default="true"/>
+       <setting id="StopFirstPreset" type="bool" label="30005" default="false"/>
+       <setting id="ShowFPS" type="bool" label="30006" default="false" visible="false"/>
+       <setting id="ShowDebugConsole" type="bool" label="30007" default="false" visible="false"/>
+       <setting id="ShowAudioAnalysis" type="bool" label="30008" default="false" visible="false"/>
+</settings>
index ddaad52..fad0fd3 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="visualization.waveform"
-  version="1.0.10"
+  version="1.0.14"
   name="Waveform"
   provider-name="MrC">
   <extension
@@ -29,6 +29,7 @@
     <summary lang="et">Visuaal, mis näitab ekraanil kahte signaalikujulist graafikut</summary>
     <summary lang="fi">Kaksi aaltomuotograafia</summary>
     <summary lang="fr">Visualisation affichant 2 graphiques de forme d'onde à l'écran</summary>
+    <summary lang="fr_CA">Visualisation affichant 2 graphiques de forme d'onde à l'écran</summary>
     <summary lang="gl">Visualización amosando 2 gráficos en forma de onde na pantalla</summary>
     <summary lang="he">חיזוי אשר מציג 2 גרפיים בצורת גל על המסך</summary>
     <summary lang="hr">Vizualizacija koja prikazuje 2 valna grafikona</summary>
     <description lang="es">Waveform es un sencillo visualizador que muestra 2 gráficos de ondas en la pantalla, uno para cada canal, derecho e izquierdo, que se mueven al ritmo de la música.</description>
     <description lang="es_AR">Waveform es un sencillo visualizador que muestra 2 gráficos de ondas en la pantalla, uno para cada canal, derecho e izquierdo, que se mueven al ritmo de la música.</description>
     <description lang="es_MX">Waveform es una Visualización simple que muestra 2 Gráficos de Forma de onda en la pantalla, uno para cada canal Izquierdo y Derecho que se mueven al ritmo de la música</description>
-    <description lang="et">Waveform on lihte visuaal, mis näitab ekraanil kahte signaalikujulist graafikut - üks vasaku ja teine parema kanali jaoks, mis mõlemad liiguvad muusika rütmis.</description>
+    <description lang="et">Waveform on lihtne visuaal, ekraanil on 2 signaalikujulist graafikut - üks vasaku ja teine parema kanali jaoks, mis mõlemad liiguvad muusika rütmis.</description>
     <description lang="fi">Waveform on kaksi aaltomuotograafia näyttävä yksinkertainen visualisointi. Toinen on vasemmalle ja toinen oikealle kanavalla ja ne liikkuvat musiikin tahdissa.</description>
     <description lang="fr">Waveform est une visualisation simple affichant deux graphiques de forme d'onde à l'écran. Chaque forme d'onde représente une voie, gauche et droite, et réagit selon le rythme de la musique.</description>
+    <description lang="fr_CA">Waveform est une visualisation simple affichant deux graphiques de forme d'onde à l'écran. Chaque forme d'onde représente une voie, gauche et droite, et réagit selon le rythme de la musique.</description>
     <description lang="gl">Waveform é unha Visualización simple que amosa 2 gráficos en forma de onde na súa pantalla, unha por cada lateral correspondente ás canles de audio da esquerda e da dereita que se move ó ritmo da música</description>
-    <description lang="he">Waveform ×\94×\95×\90 ×\97×\99×\96×\95×\99 ×¤×©×\95×\98 ×\90שר ×\9eצ×\99×\92 2 ×\92רפ×\99×\99×\9d ×\91צ×\95רת ×\92×\9c ×¢×\9c ×\94×\9eס×\9a, ×\90×\97×\93 ×\9c×\9b×\9c ×¢×¨×\95×¥ ×©×\9e×\90×\9c×\99 ×\95×\99×\9e× ×\99 ×\90שר זז לפי קצב המוזיקה</description>
+    <description lang="he">Waveform ×\94×\95×\90 ×\97×\99×\96×\95×\99 ×¤×©×\95×\98 ×\94×\9eצ×\99×\92 2 ×\92רפ×\99×\9d ×\91צ×\95רת ×\92×\9c ×¢×\9c ×\94×\9eס×\9a, ×\90×\97×\93 ×\9c×\9b×\9c ×¢×¨×\95×¥ ×©×\9e×\90×\9c×\99 ×\95×\99×\9e× ×\99 ×\94זז לפי קצב המוזיקה</description>
     <description lang="hr">Waveform je jednostavna vizualizacija koja prikazuje 2 valna grafikona, po jedan za lijevi i desni kanal koji se pokreću u ritmu glazbe.</description>
     <description lang="hu">A Waveform egy egyszerű vizualizáció, amely 2db hullámot mutat reprezentálva a bal és a jobb hangcsatornákat, melyek a zene ritmusára mozognak.</description>
     <description lang="id">Waveform adalah visualisasi sederhana yang menunjukkan grafik dua gelombang pada layar, masing-masing untuk Satu saluran Kiri dan Kanan yang bergerak dengan ketukan musik</description>
index 6c4feb7..3b2a881 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon
   id="webinterface.default"
-  version="2.2.4"
+  version="2.2.8"
   name="Default"
   provider-name="Team XBMC">
   <requires>
@@ -33,8 +33,9 @@
     <summary lang="fa">نمایه وب تیم Xbmc.(رابط پیش فرض Xbmc)</summary>
     <summary lang="fi">Team XBMC:n WWW-käyttöliittymä. (XBMC:n oletus WWW-käyttöliittymä)</summary>
     <summary lang="fr">Interface Web de l'équipe d'XBMC. (Interface Web par défaut d'XBMC)</summary>
+    <summary lang="fr_CA">Interface Web de l'équipe d'XBMC. (Interface Web par défaut d'XBMC)</summary>
     <summary lang="gl">Interface web da equipa de XBMC. (Interface web predefinida de XBMC)</summary>
-    <summary lang="he">צ×\95×\95ת XBMC ×\9e×\9eשק ×\90×\99× ×\98רנ×\98. (×\9e×\9eשק ×\94×\90×\99× ×\98רנ×\98 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×©×\9c XBMC)</summary>
+    <summary lang="he">×\9e×\9eשק ×\94×\93פ×\93פ×\9f ×\94רש×\9e×\99 ×©×\9c XBMC. (×\91ר×\99רת ×\94×\9e×\97×\93×\9c)</summary>
     <summary lang="hr">Tim XBMC Web sučelje. (XBMC-ovo uobičajeno web sučelje)</summary>
     <summary lang="hu">Az XBMC csapat Webes kezelőfelülete (XBMC alapértelmezett webes kezelőfelülete)</summary>
     <summary lang="id">Antar Muka Web Tim XBMC. (Antar muka web bawaan XBMC)</summary>
     <description lang="es">Interfaz web por defecto de XBMC. Diseñada para dispositivos de cualquier resolución</description>
     <description lang="es_AR">Interfaz web por defecto de XBMC. Diseñada para dispositivos de cualquier resolución</description>
     <description lang="es_MX">Interfaz Web por defecto para XBMC; Diseñado para dispositivos de todas las resoluciones</description>
-    <description lang="et">XBMC vaikimisi veebikeskkond; Disainitud erinevate resulutsioonidega seadmetele.</description>
+    <description lang="et">XBMC vaikimisi veebikeskkond; Disainitud erinevate resolutsioonidega seadmetele.</description>
     <description lang="eu">XBMC-ren lehenetsiriko web interfazea. Erresoluzio guztietako gailentzat diseinatua</description>
     <description lang="fa">رابط پیش فرض Xbmcوطراحی شده برای هر رزولیشن</description>
     <description lang="fi">Oletus WWW-käyttöliittymä XBMC:lle. Suunniteltu käytettäväksi kaiken kokoisilla laitteilla.</description>
     <description lang="fr">Interface Web par défaut d'XBMC; Adaptée aux dispositifs de toutes résolutions</description>
+    <description lang="fr_CA">Interface Web par défaut d'XBMC; Adaptée aux dispositifs de toutes résolutions</description>
     <description lang="gl">Interface web predefinida para XBMC, deseñada para dispositivos de todas as resolucións</description>
-    <description lang="he">×\9e×\9eשק ×\94×\90×\99× ×\98רנ×\98 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר XBMC; ×ª×\95×\9b× ×\9f ×¢×\91×\95ר ×\9e×\9bש×\99ר×\99×\9d ×\91×\9b×\9c ×\94ר×\96×\95×\9c×\95צ×\99ות</description>
+    <description lang="he">×\9e×\9eשק ×\93פ×\93פ×\9f ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר XBMC; ×\9eת×\90×\99×\9d ×\9c×\9e×\9bש×\99ר×\99×\9d ×\91×¢×\9c×\99 ×¨×\96×\95×\9c×\95צ×\99×\95ת ×©×\95× ות</description>
     <description lang="hr">Uobičajeno web sučelje za XBMC; Dizajnirano za uređaje svih razlučivosti</description>
     <description lang="hu">Az XBMC alapértelmezett webes kezelőfelülete; Minden felbontásra alkalmas</description>
     <description lang="id">Antar muka web bawaan bagi XBMC; Dirancang bagi perangkat dengan semua resolusi</description>
-    <description lang="it">Interfaccia Web di default per XMBC; Realizzata per periferiche con qualunque risoluzione</description>
+    <description lang="it">Interfaccia Web di default per XBMC; Realizzata per periferiche con qualunque risoluzione</description>
     <description lang="ja">Default web interface for XBMC; Designed for devices of all resolutions</description>
     <description lang="ko">XBMC 기본 웹 인터페이스; 모든 해상도의 기기를 위해 디자인 됨</description>
     <description lang="lt">Numatytoji XBMC Web sąsaja skirta visų rezoliucijų prietaisams</description>
     <description lang="ru">Веб-интерфейс XBMC по умолчанию. Разработан для устройств с любыми разрешениями.</description>
     <description lang="se">XBMC's standardwebbgränsnitt; Designat för alla upplösningar</description>
     <description lang="sk">Predvolené webové rozhranie pre XBMC; Navrhnuté pre zariadenia zobrazujúce v akomkoľvek rozlíšení</description>
-    <description lang="sl">Privzet spletni vmesnik za XBMC; ustvarjen za naprave vseh ločljivosti</description>
+    <description lang="sl">Privzet spletni vmesnik za XBMC, ustvarjen za naprave vseh ločljivosti</description>
     <description lang="sr">Подразумевани веб интерфејс XBMC-а, намењен уређајима свих резолуција</description>
     <description lang="sv">Standardwebbgränssnitt för XBMC; Designat för enheter med alla upplösningar</description>
     <description lang="ta_IN">XBMC முன்னிருப்பு இணைய இடைமுகம்; அனைத்து சாதனங்களின் தெளிவிற்காக வடிவமைக்கப்பட்டுள்ளது</description>
index eea48de..b322a76 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.addon" version="12.9.11" provider-name="Team XBMC">
+<addon id="xbmc.addon" version="12.9.12" provider-name="Team XBMC">
   <backwards-compatibility abi="12.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
index c722b8c..9cd3ec0 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.debug" version="0.1.7" provider-name="Team XBMC" name="Log">
+<addon id="xbmc.debug" version="0.1.11" provider-name="Team XBMC" name="Log">
   <backwards-compatibility abi="0.1"/>
   <requires>
     <c-pluff version="0.1"/>
     <summary lang="en">Add-on to improve logging customisability</summary>
     <summary lang="en_US">Add-on to improve logging customizability</summary>
     <summary lang="es">Complemento para mejorar la personalización del registro</summary>
+    <summary lang="es_AR">Complemento mejorar la personalización de los registros</summary>
     <summary lang="es_MX">Complemento para mejorar la personalizacion del registro</summary>
     <summary lang="et">Lisa, mis võimaldab logimise kohandamist</summary>
     <summary lang="fr">Extension pour améliorer la personnalisation de la journalisation</summary>
+    <summary lang="fr_CA">Extension pour améliorer la personnalisation de la journalisation</summary>
     <summary lang="gl">Complemento para mellorar a personalización do rexistro</summary>
     <summary lang="hr">Dodatak za poboljšanje prilagodljivosti zapisivanja</summary>
     <summary lang="hu">Kiegészítő a naplózás testre szabásához</summary>
     <summary lang="id">Addon untuk memperbaiki keleluasaan menggubah pencatatan log</summary>
     <summary lang="is">Viðbót til þess að bæta skráningu á sérsniði</summary>
     <summary lang="it">Addon per migliorare la personalizzazione di logging</summary>
+    <summary lang="ja">ログのカスタマイズ性をより良くするアドオン</summary>
     <summary lang="lt">Priedų registravimo adaptacija</summary>
     <summary lang="lv">Pievienojumprogramma, ierakstījumu žurnalā pielāgošanai</summary>
     <summary lang="my">logging စိတ်ကြိုက်ပြုပြင် မှုကို တိုးတက်စေသော Addon</summary>
@@ -34,6 +37,7 @@
     <summary lang="pt_BR">Complemento para melhorar customização de registro</summary>
     <summary lang="ru">Дополнение расширенных настроек ведения журнала</summary>
     <summary lang="sk">Doplnok pre lepšie nastavenie denníka na ladenie chýb</summary>
+    <summary lang="sl">Dodatek, ki izboljša prilagajanje zapisovanja delovanja programa</summary>
     <summary lang="sv">Tillägg för att förbättra loggningen av anpassningsmöjligheterna</summary>
     <summary lang="ta_IN">தனிப்பயனாக்கு பதிவை மேம்படுத்துவதற்கான துணை-பயன்</summary>
     <summary lang="tg">Барномаи иловагӣ барои такмили танзимоти воридшавӣ</summary>
diff --git a/addons/xbmc.debug/resources/language/French (Canada)/strings.po b/addons/xbmc.debug/resources/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..0910e83
--- /dev/null
@@ -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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#30000"
+msgid "Verbose logging for SMB library"
+msgstr "Journalisation détaillée pour la librairie SMB"
+
+msgctxt "#30001"
+msgid "Verbose logging for CURL library (http, dav)"
+msgstr "Journalisation détaillée pour la librairie CURL (http, dav)"
+
+msgctxt "#30002"
+msgid "Verbose logging for CMYTH library"
+msgstr "Journalisation détaillée pour la librairie CMYTH"
+
+msgctxt "#30003"
+msgid "Verbose logging for FFMPEG libraries"
+msgstr "Journalisation détaillée pour les librairies FFMPEG"
+
+msgctxt "#30004"
+msgid "Verbose logging for RTMP library"
+msgstr "Journalisation détaillée pour la librairie RTMP"
+
+msgctxt "#30005"
+msgid "Verbose logging for DBUS calls"
+msgstr "Journalisation détaillée pour les appels DBUS"
diff --git a/addons/xbmc.debug/resources/language/Slovenian/strings.po b/addons/xbmc.debug/resources/language/Slovenian/strings.po
new file mode 100644 (file)
index 0000000..5c5075b
--- /dev/null
@@ -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: Slovenian (http://www.transifex.com/projects/p/xbmc-main/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+msgctxt "#30000"
+msgid "Verbose logging for SMB library"
+msgstr "Podrobno zapisovanje knjižnice SMB"
+
+msgctxt "#30001"
+msgid "Verbose logging for CURL library (http, dav)"
+msgstr "Podrobno zapisovanje knjižnice CURL (http, dav)"
+
+msgctxt "#30002"
+msgid "Verbose logging for CMYTH library"
+msgstr "Podrobno zapisovanje knjižnice CMYTH"
+
+msgctxt "#30003"
+msgid "Verbose logging for FFMPEG libraries"
+msgstr "Podrobno zapisovanje knjižnice FFMPEG"
+
+msgctxt "#30004"
+msgid "Verbose logging for RTMP library"
+msgstr "Podrobno zapisovanje knjižnice RTMP"
+
+msgctxt "#30005"
+msgid "Verbose logging for DBUS calls"
+msgstr "Podrobno zapisovanje klicev DBUS"
diff --git a/addons/xbmc.debug/resources/language/Spanish (Argentina)/strings.po b/addons/xbmc.debug/resources/language/Spanish (Argentina)/strings.po
new file mode 100644 (file)
index 0000000..4bd743a
--- /dev/null
@@ -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: Spanish (Argentina) (http://www.transifex.com/projects/p/xbmc-main/language/es_AR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#30000"
+msgid "Verbose logging for SMB library"
+msgstr "Registro con verborragia para la biblioteca SMB"
+
+msgctxt "#30001"
+msgid "Verbose logging for CURL library (http, dav)"
+msgstr "Registro con verborragia para la biblioteca CURL (http, dav)"
+
+msgctxt "#30002"
+msgid "Verbose logging for CMYTH library"
+msgstr "Registro con verborragia para la biblioteca CMYTH"
+
+msgctxt "#30003"
+msgid "Verbose logging for FFMPEG libraries"
+msgstr "Registro con verborragia para la biblioteca FFMPEG"
+
+msgctxt "#30004"
+msgid "Verbose logging for RTMP library"
+msgstr "Registro con verborragia para la biblioteca RTMP"
+
+msgctxt "#30005"
+msgid "Verbose logging for DBUS calls"
+msgstr "Registro con verborragia para las llamadas DBUS"
index a1088af..b046a3d 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.json" version="6.13.0" provider-name="Team XBMC">
+<addon id="xbmc.json" version="6.13.5" provider-name="Team XBMC">
   <backwards-compatibility abi="6.0.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
index f54eac9..add08d0 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <addon id="xbmc.pvr" version="1.9.0" provider-name="Team XBMC">
+  <backwards-compatibility abi="1.9.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
   </requires>
index 86cb77a..8b24f0e 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.python" version="2.13.0" provider-name="Team XBMC">
+<addon id="xbmc.python" version="2.14.0" provider-name="Team XBMC">
   <backwards-compatibility abi="2.1.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
index 9615aa3..6689777 100644 (file)
@@ -32,6 +32,9 @@ GENERATE_DEPS += $(TOPDIR)/xbmc/interfaces/legacy/*.h $(TOPDIR)/xbmc/interfaces/
 vpath %.i $(INTERFACES_DIR)/swig
 
 $(GENDIR)/%.cpp: $(GENDIR)/%.xml $(JAVA) $(SWIG) $(DOXY_XML_PATH)
+       # Work around potential groovy bug reported at: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733234
+       $(JAVA) -cp "$(GROOVY_DIR)/groovy-all-2.1.7.jar:$(GROOVY_DIR)/commons-lang-2.6.jar:$(TOPDIR)/tools/codegenerator:$(INTERFACES_DIR)/python" \
+          org.codehaus.groovy.tools.FileSystemCompiler -d $(TOPDIR)/tools/codegenerator $(TOPDIR)/tools/codegenerator/Helper.groovy  $(TOPDIR)/tools/codegenerator/SwigTypeParser.groovy $(INTERFACES_DIR)/python/MethodType.groovy $(INTERFACES_DIR)/python/PythonTools.groovy
        $(JAVA) -cp "$(GROOVY_DIR)/groovy-all-2.1.7.jar:$(GROOVY_DIR)/commons-lang-2.6.jar:$(TOPDIR)/tools/codegenerator:$(INTERFACES_DIR)/python" \
           groovy.ui.GroovyMain $(TOPDIR)/tools/codegenerator/Generator.groovy $< $(INTERFACES_DIR)/python/PythonSwig.cpp.template $@ $(DOXY_XML_PATH)
        rm $<
index f602df5..808f74b 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([xbmc], [12.9.11], [http://trac.xbmc.org])
+AC_INIT([xbmc], [12.9.12], [http://issues.xbmc.org])
 AC_CONFIG_HEADERS([xbmc/config.h])
 AH_TOP([#pragma once])
 m4_include([m4/ax_prog_cc_for_build.m4])
@@ -37,7 +37,7 @@ AC_DEFUN([XB_ADD_PLAYER],
 AC_DEFUN([XB_ADD_CODEC],
 [
   AC_MSG_CHECKING([for $2])
-  case $add_codecs in
+  case $3 in
     *$2*)
       use_codec_$2="yes"
       AC_SUBST([USE_$1], 1)
@@ -188,9 +188,6 @@ libcec_disabled="== libcec disabled. CEC adapter support will not be available.
 # External library message strings
 external_libraries_enabled="== Use of all supported external libraries enabled. =="
 external_libraries_disabled="== Use of all supported external libraries disabled. =="
-external_ffmpeg_enabled="== Use of external ffmpeg enabled. =="
-external_ffmpeg_disabled="== Use of external ffmpeg disabled. =="
-ffmpeg_vdpau_not_supported="== External ffmpeg doesn't support VDPAU. VDPAU support disabled. =="
 dashes="------------------------"
 final_message="\n  XBMC Configuration:"
 final_message="\n$dashes$final_message\n$dashes"
@@ -371,9 +368,9 @@ AC_ARG_ENABLE([alsa],
 
 AC_ARG_ENABLE([pulse],
   [AS_HELP_STRING([--enable-pulse],
-  [enable PulseAudio support (default is no)])],
+  [enable PulseAudio support (default is auto)])],
   [use_pulse=$enableval],
-  [use_pulse=no])
+  [use_pulse=auto])
 
 AC_ARG_ENABLE([ssh],
   [AS_HELP_STRING([--disable-ssh],
@@ -569,12 +566,6 @@ AC_ARG_ENABLE([external-libraries],
   [use_external_libraries=$enableval],
   [use_external_libraries=no])
 
-AC_ARG_ENABLE([external-ffmpeg],
-  [AS_HELP_STRING([--enable-external-ffmpeg],
-  [enable use of external ffmpeg libraries (default is no) 'Linux only'])],
-  [use_external_ffmpeg=$enableval],
-  [use_external_ffmpeg=$use_external_libraries])
-
 AC_ARG_ENABLE([libav-compat],
   [AS_HELP_STRING([--enable-libav-compat],
   [build a wrapper around libav to provide the functions needed by XBMC. This is
@@ -606,6 +597,9 @@ PKG_PROG_PKG_CONFIG
 MAKE="${MAKE:-make}"
 OBJDUMP="${OBJDUMP:-objdump}"
 
+use_external_ffmpeg=no
+use_static_ffmpeg=no
+
 # ffmpeg needs the output of uname -s (e.x. linux, darwin) for the target_os
 # there is no autoconf variable which will give
 # the correct output format when doing cross compilation
@@ -629,18 +623,22 @@ case $host in
      use_x11=no
      build_shared_lib=yes    
     ;;
-  i*86*-linux-gnu*)
+  i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
      ARCH="i486-linux"
      if test "$use_cpu" = "no" -a "$cross_compiling" = "yes";  then
         use_arch="x86"
         use_cpu="i686"
+     else
+        target_platform=target_linux
      fi
      ;;
-  x86_64-*-linux-gnu*)
+  x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
      ARCH="x86_64-linux"
      if test "$use_cpu" = "no" -a "$cross_compiling" = "yes";  then
         use_arch="x86_64"
         use_cpu="x86_64"
+     else
+        target_platform=target_linux
      fi
      ;;
   i386-*-freebsd*)
@@ -681,10 +679,10 @@ case $host in
      ARCH="powerpc-osx"
      use_arch="ppc"
      ;;
-  powerpc-*-linux-gnu*)
+  powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
      ARCH="powerpc-linux"
      ;;
-  powerpc64-*-linux-gnu*)
+  powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*)
      ARCH="powerpc64-linux"
      ;;
   arm*-*-linux-gnu*)
@@ -874,6 +872,15 @@ elif test "$use_arch" = "arm"; then
     fi
   fi
 fi
+if test "$target_platform" = "target_linux"; then
+  USE_STATIC_FFMPEG=1
+  use_static_ffmpeg=yes
+  AC_DEFINE([USE_STATIC_FFMPEG], [1], [link ffmpeg statically])
+  # ffmpeg may depend on gnutls and vorbisenc, we add those libs at the end of linker
+  # command in order to resolve any missing symbols
+  GNUTLS_ALL_LIBS=`${PKG_CONFIG} --static --libs-only-l --silence-errors gnutls`
+  VORBISENC_ALL_LIBS=`${PKG_CONFIG} --static --libs-only-l --silence-errors vorbisenc`
+fi 
 
 # Checks for library functions.
 AC_FUNC_ALLOCA
@@ -1137,6 +1144,12 @@ if test "$target_platform" = "target_android" ; then
   AC_CHECK_LIB([log],         [__android_log_vprint],, AC_MSG_ERROR($missing_library))
   AC_CHECK_LIB([jnigraphics],     [main],, AC_MSG_ERROR($missing_library))
 fi
+PKG_CHECK_MODULES([LIBXML], [libxml-2.0],
+  [INCLUDES="$INCLUDES $LIBXML_CFLAGS"; LIBS="$LIBS $LIBXML_LIBS"],
+  AC_MSG_ERROR($missing_library))
+PKG_CHECK_MODULES([LIBXSLT], [libxslt],
+  [INCLUDES="$INCLUDES $LIBXSLT_CFLAGS"; LIBS="$LIBS $LIBXSLT_LIBS"],
+  AC_MSG_ERROR($missing_library))
 PKG_CHECK_MODULES([FRIBIDI],    [fribidi],
   [INCLUDES="$INCLUDES $FRIBIDI_CFLAGS"; LIBS="$LIBS $FRIBIDI_LIBS"],
   AC_MSG_ERROR($missing_library))
@@ -1244,7 +1257,12 @@ XB_FIND_SONAME([VORBIS],      [vorbis])
 XB_FIND_SONAME([VORBISFILE],  [vorbisfile])
 XB_FIND_SONAME([MODPLUG],     [modplug])
 XB_FIND_SONAME([ASS],         [ass])
-XB_FIND_SONAME([MPEG2],       [mpeg2])
+
+#link statically against mpeg2 on ios  because of ios7
+#crash & burn if dyloaded
+if test "$ARCH" != "arm-osx" ; then
+  XB_FIND_SONAME([MPEG2],       [mpeg2])
+fi
 
 # Audio encoders
 if test "x$use_libmp3lame" != "xno"; then
@@ -1606,19 +1624,13 @@ fi
 # libshairplay for AirTunes (prefered lib)
 USE_AIRTUNES=0
 if test "x$use_airtunes" != "xno"; then
-  AC_CHECK_HEADERS([shairplay/raop.h],,
-   [if test "x$use_airtunes" = "xyes"; then
-      AC_MSG_ERROR($libshairplay_not_found)
-    elif test "x$use_airtunes" != "xno"; then
-      AC_MSG_NOTICE($libshairplay_not_found)
-      use_airtunes="no"
-    fi
+  AC_CHECK_HEADERS([shairplay/raop.h],USE_AIRTUNES=1,
+   [AC_MSG_NOTICE($libshairplay_not_found)
    ])
 
-  if test "x$use_airtunes" != "xno"; then
-    XB_FIND_SONAME([SHAIRPLAY], [shairplay], [use_airtunes])
-    USE_AIRTUNES=1
-    USE_LIBSHAIRPORT=1
+  if test "x$USE_AIRTUNES" != "x0"; then
+    XB_FIND_SONAME([SHAIRPLAY], [shairplay], [USE_AIRTUNES])
+    USE_LIBSHAIRPLAY=1
     AC_CHECK_MEMBERS([struct raop_callbacks_s.cls],,,
                      [[#include <shairplay/raop.h>]])
     AC_DEFINE([HAVE_LIBSHAIRPLAY],[1],["Define to 1 if you have libshairplay."])
@@ -1626,23 +1638,24 @@ if test "x$use_airtunes" != "xno"; then
 
   #libshairport - as a fallback for AirTunes
   if test "x$USE_AIRTUNES" == "x0"; then
-    AC_CHECK_HEADERS([shairport/shairport.h],,
-     [if test "x$use_airtunes" = "xyes"; then
-        AC_MSG_ERROR($libshairport_not_found)
-      elif test "x$use_airtunes" != "xno"; then
-        AC_MSG_NOTICE($libshairport_not_found)
-        use_airtunes="no"
-      fi
+    AC_CHECK_HEADERS([shairport/shairport.h],USE_AIRTUNES=1,
+     [AC_MSG_NOTICE($libshairport_not_found)
      ])
 
-    if test "x$use_airtunes" != "xno"; then
-      XB_FIND_SONAME([SHAIRPORT], [shairport], [use_airtunes])
-      USE_AIRTUNES=1
+    if test "x$USE_AIRTUNES" != "x0"; then
+      XB_FIND_SONAME([SHAIRPORT], [shairport], [USE_AIRTUNES])
       AC_CHECK_MEMBERS([struct AudioOutput.ao_set_metadata],,,
                        [[#include <shairport/shairport.h>]])
       AC_DEFINE([HAVE_LIBSHAIRPORT],[1],["Define to 1 if you have libshairport."])
     fi
   fi
+
+  if test "x$USE_AIRTUNES" == "x0"; then
+    if test "x$use_airtunes" == "xyes"; then
+      AC_MSG_ERROR("No airtunes library could be found. (libshairport/libshairplay)")
+    fi
+    use_airtunes="no"
+  fi
 fi
 
 # libudev
@@ -1962,16 +1975,19 @@ case $add_players in
 esac
 
 # additional internal codecs
-case $add_codecs in
-  *amcodec*)
-      AC_CHECK_HEADER([amcodec/codec_error.h],, AC_MSG_ERROR($missing_headers))
-      XB_ADD_CODEC([LIBAMCODEC], [amcodec])
-      ;;
-  *libstagefright*)
-      XB_ADD_CODEC([LIBSTAGEFRIGHT], [libstagefright])
-      ;;
-  *)
-esac
+# remember to convert commas to spaces
+for codecs in `echo $add_codecs | sed 's/,/ /g'`; do
+  case $codecs in
+    *amcodec*)
+        AC_CHECK_HEADER([amcodec/codec_error.h],, AC_MSG_ERROR($missing_headers))
+        XB_ADD_CODEC([LIBAMCODEC], [amcodec], [$codecs])
+        ;;
+    *libstagefright*)
+        XB_ADD_CODEC([LIBSTAGEFRIGHT], [libstagefright], [$codecs])
+        ;;
+    *)
+  esac
+done
 
 # platform specific bin utilities
 if test "$build_vendor" != "apple" ; then
@@ -2378,7 +2394,7 @@ else
 fi
 
 if test "x$use_airtunes" != "xno"; then
-  if test "x$USE_LIBSHAIRPORT" == "x1"; then
+  if test "x$USE_LIBSHAIRPLAY" == "x1"; then
     final_message="$final_message\n  AirTunes support (libshairplay):\tYes"  
   else
     final_message="$final_message\n  AirTunes support (libshairport):\tYes"
@@ -2599,6 +2615,7 @@ AC_SUBST(DISABLE_FISHBMC)
 AC_SUBST(DISABLE_PROJECTM)
 AC_SUBST(USE_SKIN_TOUCHED)
 AC_SUBST(USE_EXTERNAL_FFMPEG)
+AC_SUBST(USE_STATIC_FFMPEG)
 AC_SUBST(USE_LIBAV_HACKS)
 AC_SUBST(PYTHON_VERSION)
 AC_SUBST(OUTPUT_FILES)
@@ -2643,6 +2660,8 @@ AC_SUBST(USE_ANDROID)
 AC_SUBST(GTEST_CONFIGURED)
 AC_SUBST(USE_DOXYGEN)
 AC_SUBST(USE_PVR_ADDONS)
+AC_SUBST(GNUTLS_ALL_LIBS)
+AC_SUBST(VORBISENC_ALL_LIBS)
 
 # pushd and popd are not available in other shells besides bash, so implement
 # our own pushd/popd functions
@@ -2800,7 +2819,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
       --disable-ffserver \
       --disable-ffmpeg \
       --disable-crystalhd \
-      --enable-shared \
+      `if test "$use_static_ffmpeg" = "yes"; then echo --enable-static; else echo --enable-shared; fi` \
       --disable-doc \
       --enable-postproc \
       --enable-gpl \
@@ -2848,7 +2867,6 @@ XB_CONFIG_MODULE([lib/libdvd/libdvdread], [
     --disable-strip \
     --disable-opts \
     --cc="$CC" &&
-  $MAKE dvdread-config &&
   mkdir -p `pwd`/../includes/dvdread
   cp `pwd`/../libdvdread/src/*.h `pwd`/../includes/dvdread
   cp `pwd`/../libdvdread/src/dvdread/*.h `pwd`/../includes/dvdread
@@ -2858,7 +2876,7 @@ XB_CONFIG_MODULE([lib/libdvd/libdvdnav], [
   ./configure2 \
     --extra-cflags="$CFLAGS $DVDREAD_CFLAGS -I`pwd`/../includes $DROID_DVDLIB_SEEK64" \
     --extra-ldflags="-L`pwd`/../libdvdread/obj" \
-    --with-dvdread-config="`pwd`/../libdvdread/obj/dvdread-config" \
+    --with-dvdread-config="`pwd`/../dvdread-config" \
     --prefix="${prefix}" --includedir="${includedir}" --libdir="${libdir}" --datadir="${datadir}" \
     --host=$host_alias \
     --build=$build_alias \
index 51dfaf9..5bfe729 100644 (file)
@@ -13,8 +13,9 @@ TOC
 1. Introduction
 -----------------------------------------------------------------------------
 
-We currently recommend Ubuntu Natty (11.04) or later. Current work has been
-done here. Additionally, building from OSX Snow Leopard is working.
+We currently recommend Ubuntu "Precise Pangolin" (12.04) 64Bit. This is what our continuous 
+integration system "jenkins" is using.
+Additionally, building from OSX Snow Leopard is working.
 
 NOTE TO NEW USERS: All lines that are prefixed with the '#'
 character are commands that need to be typed into a terminal window /
@@ -33,6 +34,12 @@ users will need to get the equivalents.
 If you run a 64bit operating system you will also need to get ia32-libs
 
    # sudo apt-get install ia32-libs
+   
+The following versions are used on our continuous integration system "jenkins". Other (newer)
+versions might work as well.
+
+JDK: openjdk-6-jdk (java version "1.6.0_27")
+JRE: openjre-6-jre (java version "1.6.0_27")
 
 
 -----------------------------------------------------------------------------
@@ -49,15 +56,28 @@ To get the Android SDK, go to http://developer.android.com/sdk and
 download the latest version for your operating system. The NDK
 can be downloaded from http://developer.android.com/tools/sdk/ndk/ 
 
-[NOTICE] Compiling XBMC for Android requires at least Android NDK
-         Revision r8e. Android NDK Revision 7 and earlier do not work
-         properly for our cause.
+[NOTICE] Compiling XBMC for Android requires Android NDK
+         Revision r9. For the SDK just use the latest available. 
+         It will work.
 
 After downloading the SDK and NDK extract the files contained in the
-archives to your harddisk.
+archives to your harddisk. For our example we are extracting in the following
+directories (this matches the example from tools/depends/README aswell):
+
+NDK (referenced as <android-ndk> from now on):
+/opt/android-ndk-r9
+
+TOOLCHAIN (arm) (referenced as <android-toolchain-arm> from now on):
+/opt/arm-linux-androideabi-4.8-vanilla/android-14
+
+TOOLCHAIN (x86) (referenced as <android-toolchain-x86> from now on):
+/opt/x86-linux-4.8-vanilla/android-14
+
+SDK (referenced as <android-sdk> from now on):
+/opt/android-sdk-linux
 
 Make sure you have a recent JRE and JDK installed otherwise the
-Android SDK will not work.
+Android SDK will not work. (see point 2.)
 
 --------------------------------------------------------------------
 3.2. Installing Android SDK packages
@@ -78,18 +98,30 @@ Android platform you first need to setup an Android toolchain using
 the Android NDK which you earlier extracted to <android-ndk>. The
 following commands will create a toolchain suitable for the most
 common scenario.
-The --install-dir option (and therefore the <android-toolchain> value)
-specifies where the resulting toolchain should be installed (your choice).
+The --install-dir option (and therefore the <android-toolchain-arm>/<android-toolchain-x86> value)
+specifies where the resulting toolchain should be installed (your choice). 
+
+[NOTICE] XBMC uses the android API Version 14 and gcc version 4.8!
+
+Building for arm architecture:
 
    # cd <android-ndk>
    # ls platforms
    # cd build/tools
    # ./make-standalone-toolchain.sh --ndk-dir=../../ \
-     --install-dir=<android-toolchain>/android-14 --platform=android-14 \
-     --toolchain=arm-linux-androideabi-4.7
+     --install-dir=<android-toolchain-arm>/android-14 --platform=android-14 \
+     --toolchain=arm-linux-androideabi-4.8
+     
+Building for x86 architecture:
 
-Make sure to pick a toolchain for your desired architecture. Currently only
-gcc 4.7 and gcc 4.8 toolchains are supported, anything else will likely fail to build.
+   # cd <android-ndk>
+   # ls platforms
+   # cd build/tools
+   # ./make-standalone-toolchain.sh --ndk-dir=../../ \
+     --install-dir=<android-toolchain-x86>/android-14 --platform=android-14 \
+     --toolchain=x86-4.8 --arch=x86 --system=linux-x86_64
+
+Make sure to pick a toolchain for your desired architecture.
 
 --------------------------------------------------------------------
 3.4. Create a (new) debug key to sign debug APKs
@@ -141,7 +173,9 @@ on with the Android toolchain and creating an Android Application Package
    give it a 'make -j20' or so.
 
    Verify that all deps built correctly (it will tell you so) before
-   continuing. You will get crazy build errors otherwise.
+   continuing. You will get crazy build errors otherwise. If in doubt
+   run another 'make' (single threaded) until the message 
+   "Dependencies built successfully." appears.
 
 --------------------------------------------------------------------
 5.2. Building XBMC
@@ -214,7 +248,7 @@ and the <device-id> may not be needed when using the Android emulator)
 
 GDB can be used to debug, though the support is rather primitive. Rather than
 using gdb directly, you will need to use ndk-gdb which wraps it. Do NOT trust
-the -p/--project switches, as of ndk7b they do not work. Instead you will need
+the -p/--project switches, as they do not work. Instead you will need
 to cd to tools/android/packaging/xbmc and execute it from there.
 
   # ndk-gdb --start --delay=0
@@ -267,8 +301,7 @@ instead we build as usual then package ourselves. It may be beneficial to use
 ndk-build to do the actual packaging, but for now its behavior is emulated.
 
 ABI:
-Presently we are targeting armv7a+neon for arm, and i686 for x86. Note that x86
-builds successfully but has not been tested.
+Presently we are targeting armv7a+neon for arm, and i686 for x86.
 
 --------------------------------------------------------------------
 9. Useful Commands
@@ -292,3 +325,4 @@ is 'tools/android/packaging' and that the proper sdk/ndk paths are set.
 -Enable CheckJNI (BEFORE starting the application)
   # adb shell setprop debug.checkjni 1
   
+
index d88cc50..627aeb1 100644 (file)
@@ -51,8 +51,9 @@ Build-Depends: autoconf, automake, autopoint, autotools-dev, cmake, curl,
   libpulse-dev, librtmp-dev, libsamplerate-dev, libsdl-dev, libsdl-image1.2-dev, libsdl-mixer1.2-dev,
   libshairplay-dev, libsmbclient-dev, libsqlite3-dev, libssh-dev, libssl-dev, libswscale-dev,
   libtag1-dev (>= 1.8), libtiff-dev, libtinyxml-dev, libtool, libudev-dev, libusb-dev, libva-dev,
-  libvdpau-dev, libvorbis-dev, libxinerama-dev, libxmu-dev, libxrandr-dev, libxt-dev, libyajl-dev,
-  lsb-release, nasm [!amd64], python-dev, python-imaging, python-support, swig, unzip, yasm, zip, zlib1g-dev
+  libvdpau-dev, libvorbis-dev, libxinerama-dev, libxml2-dev, libxmu-dev, libxrandr-dev, libxslt1-dev,
+  libxt-dev, libyajl-dev, lsb-release, nasm [!amd64], python-dev, python-imaging, python-support, swig,
+  unzip, yasm, zip, zlib1g-dev
 
 *** For developers and anyone else who compiles frequently it is recommended to
 use ccache
index ed3688a..1c597d6 100644 (file)
@@ -73,7 +73,7 @@ Here is the magic command to get the build dependencies (used to compile the ver
 
 For Ubuntu (all versions >= 7.04):
 
-   $ sudo apt-get install automake bison build-essential cmake curl cvs default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libenca-dev libflac-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libglew-dev libhal-dev libhal-storage-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmad0-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libogg-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsamplerate-dev libsdl-dev libsdl-gfx1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libvdpau-dev libvorbisenc2 libxmu-dev libxrandr-dev libxrender-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
+   $ sudo apt-get install automake bison build-essential cmake curl cvs default-jre fp-compiler gawk gdc gettext git-core gperf libasound2-dev libass-dev libboost-dev libboost-thread-dev libbz2-dev libcap-dev libcdio-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libenca-dev libflac-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libglew-dev libiso9660-dev libjasper-dev libjpeg-dev liblzo2-dev libmad0-dev libmicrohttpd-dev libmodplug-dev libmpeg2-4-dev libmpeg3-dev libmysqlclient-dev libnfs-dev libogg-dev libogg-dev libpcre3-dev libplist-dev libpng-dev libpulse-dev libsamplerate-dev libsdl-dev libsdl-gfx1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsmbclient-dev libsqlite3-dev libssh-dev libssl-dev libtiff-dev libtinyxml-dev libtool libudev-dev libusb-dev libvdpau-dev libvorbisenc2 libxml2-dev libxmu-dev libxrandr-dev libxrender-dev libxslt1-dev libxt-dev libyajl-dev mesa-utils nasm pmount python-dev python-imaging python-sqlite swig unzip yasm zip zlib1g-dev
 
 For >= 10.10:
    $ sudo apt-get install autopoint libltdl-dev
index 0cf0a08..318f9c0 100644 (file)
@@ -857,10 +857,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Kies bestemmingvouer"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Speel stereo na al die luidsprekers"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Aantal kanale"
@@ -1641,10 +1637,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Krediete"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Af"
@@ -5501,10 +5493,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV opnames"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Bestek vouer vir PVR duimnaelsketse"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanale"
@@ -8265,10 +8253,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Verwyder media saamdeel"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtitel vouer"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Fliek & alternatiewe subtitel gids"
@@ -8629,10 +8613,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Gekykde episode telling"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitel lokasie"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Vaste"
@@ -9457,6 +9437,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Oortreksel kort paar lêers"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Tik soek string in"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Kennisgewings"
@@ -9825,10 +9809,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Luidspreker konfigurasie"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10116,3 +10096,11 @@ msgstr "libCEC koppelvlak weergawe nie ondersteun. %x is laer as die weergawe wa
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Item vouer"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Skakel oor na kanaal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Neem op"
index 0a6206d..7cf59b3 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Zgjidhni adresarin e destinacionit"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Dalja stereo në të gjithë pëforcuesit e zërit"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Numri i kanaleve"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Informacione"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Mbyllur"
@@ -5585,10 +5577,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV Regjistrimet"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Regjstri i përzgjedhur për thumbnail'at PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanalet"
@@ -8349,10 +8337,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Fshij share të mediave"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Dosje e subtitrave"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Zhvendosni & alternoni adresarin e subtitrave"
@@ -8713,10 +8697,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Numërim i episodeve të shikuara"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "\\Vendndodhja e subtitrave"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "fiksuar"
@@ -9541,6 +9521,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Maskës i mungojnë disa skeda"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Shkruani rreshtin për kërkimin"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Njoftimet"
@@ -9909,10 +9893,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfigurimi i përforcuesve"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10200,3 +10180,11 @@ msgstr "Verzioni i ndërfaqes libCEC nuk përkrahet. %x është më poshtë se v
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Dosje artikujsh"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Kaloni tek kanali"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Regjistro"
index ed1f660..cc1085e 100644 (file)
@@ -4789,10 +4789,6 @@ msgctxt "#21336"
 msgid "Connecting to: %s"
 msgstr "በ መገናኘት ላይ: %s"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "የ ንዑስ አርእስት ፎልደር"
-
 msgctxt "#21371"
 msgid "Thumbnail"
 msgstr "የ አውራ ጥፍር"
@@ -5477,10 +5473,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "ስፒከር ማዋቀሪያ "
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -5560,3 +5552,7 @@ msgstr "ቲቪ "
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "የ እቃ ፎልደር"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "መቅረጫ "
index fe89fb9..f6ed3a7 100644 (file)
@@ -27,11 +27,11 @@ msgstr "الموسيقى"
 
 msgctxt "#3"
 msgid "Videos"
-msgstr "اÙ\84Ù\81Ù\8aدÙ\8aÙ\88"
+msgstr "اÙ\84Ù\85Ù\82اطع Ø§Ù\84Ù\85رئÙ\8aÙ\87"
 
 msgctxt "#4"
 msgid "TV-Guide"
-msgstr "دÙ\84Ù\8aÙ\84 Ø§Ù\84تÙ\84Ù\81زÙ\8aÙ\88Ù\86"
+msgstr "دÙ\84Ù\8aÙ\84 Ø§Ù\84تÙ\84Ù\81از"
 
 msgctxt "#5"
 msgid "Settings"
@@ -43,7 +43,7 @@ msgstr "XBMC النسخة المستقرة"
 
 msgctxt "#7"
 msgid "File manager"
-msgstr "إدارة الملفات"
+msgstr "مُدير الملفات"
 
 msgctxt "#8"
 msgid "Weather"
@@ -51,11 +51,11 @@ msgstr "الطقس"
 
 msgctxt "#9"
 msgid "xbmc media center"
-msgstr "xbmc مركز وسائط"
+msgstr "مركز وسائط إكس بى إم سى"
 
 msgctxt "#11"
 msgid "Monday"
-msgstr "اÙ\84اثنين"
+msgstr "اÙ\84Ø¥ثنين"
 
 msgctxt "#12"
 msgid "Tuesday"
@@ -295,19 +295,19 @@ msgstr "متغير"
 
 msgctxt "#98"
 msgid "View: Auto"
-msgstr "عرض: ØªÙ\84Ù\82ائÙ\8aØ©"
+msgstr "اÙ\84عرض: ØªÙ\84Ù\82ائÙ\89"
 
 msgctxt "#99"
 msgid "View: Auto big"
-msgstr "عرض: ØªÙ\84Ù\82ائÙ\8aØ© Ù\83بÙ\8aرة"
+msgstr "اÙ\84عرض : ØªÙ\84Ù\82ائÙ\89 Ù\83بÙ\8aر"
 
 msgctxt "#100"
 msgid "View: Icons"
-msgstr "عرض: Ø±Ù\85Ù\88ز"
+msgstr "اÙ\84عرض: Ø§Ù\8aÙ\82Ù\88Ù\86ات"
 
 msgctxt "#101"
 msgid "View: List"
-msgstr "عرض: Ù\82ائÙ\85Ø©"
+msgstr "اÙ\84عرض: Ù\82ائÙ\85Ù\87"
 
 msgctxt "#102"
 msgid "Scan"
@@ -315,15 +315,15 @@ msgstr "فحص"
 
 msgctxt "#103"
 msgid "Sort by: Name"
-msgstr "ترتيب حسب: الإسم"
+msgstr "فرز حسب: الإسم"
 
 msgctxt "#104"
 msgid "Sort by: Date"
-msgstr "ترتيب حسب: التاريخ"
+msgstr "فرزحسب: التاريخ"
 
 msgctxt "#105"
 msgid "Sort by: Size"
-msgstr "ترتيب حسب: الحجم"
+msgstr "فرزحسب: الحجم"
 
 msgctxt "#106"
 msgid "No"
@@ -335,7 +335,7 @@ msgstr "نعم"
 
 msgctxt "#108"
 msgid "Slideshow"
-msgstr "عرض Ø§Ù\84شرائح"
+msgstr "عرض شرائح"
 
 msgctxt "#109"
 msgid "Create thumbs"
@@ -347,7 +347,7 @@ msgstr "إنشاء مصغرات"
 
 msgctxt "#111"
 msgid "Shortcuts"
-msgstr "اختصارات"
+msgstr "Ø¥ختصارات"
 
 msgctxt "#112"
 msgid "Paused"
@@ -355,11 +355,11 @@ msgstr "متوقف"
 
 msgctxt "#113"
 msgid "Update failed"
-msgstr "فشل التحديث"
+msgstr "تعذر التحديث"
 
 msgctxt "#114"
 msgid "Installation failed"
-msgstr "فشل التثبيت"
+msgstr "تعذر التثبيت"
 
 msgctxt "#115"
 msgid "Copy"
@@ -367,7 +367,7 @@ msgstr "نسخ"
 
 msgctxt "#116"
 msgid "Move"
-msgstr "تحريك"
+msgstr "نقل"
 
 msgctxt "#117"
 msgid "Delete"
@@ -383,15 +383,15 @@ msgstr "مجلد جديد"
 
 msgctxt "#120"
 msgid "Confirm file copy"
-msgstr "تأكيد نسخ ملف"
+msgstr "تأكيد نسخ الملف"
 
 msgctxt "#121"
 msgid "Confirm file move"
-msgstr "تأكيد نقل ملف"
+msgstr "تأكيد نقل الملف"
 
 msgctxt "#122"
 msgid "Confirm file delete?"
-msgstr "تأكيد حذف ملف؟"
+msgstr "تأكيد حذف الملف؟"
 
 msgctxt "#123"
 msgid "Copy these files?"
@@ -399,7 +399,7 @@ msgstr "نسخ هذه الملفات؟"
 
 msgctxt "#124"
 msgid "Move these files?"
-msgstr "تحريك هذه الملفات؟"
+msgstr "نقل هذه الملفات؟"
 
 msgctxt "#125"
 msgid "Delete these files? - Deleting files cannot be undone!"
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "حدد دليل الوجهة"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "إخراج النظام الصوتي لجميع المكبرات"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "عدد القنوات"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "الاعتمادات"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "معطلة"
@@ -2433,6 +2425,14 @@ msgctxt "#735"
 msgid "Character set"
 msgstr "تعيين الأحرف"
 
+msgctxt "#736"
+msgid "Style"
+msgstr "المظهر"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "الألوان"
+
 msgctxt "#738"
 msgid "Normal"
 msgstr "عادي"
@@ -2565,6 +2565,14 @@ msgctxt "#776"
 msgid "Wireless network name (ESSID)"
 msgstr "اسم الشبكة اللاسلكية (ESSID)"
 
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "كلمه مرور الشبكه اللاسلكيه"
+
+msgctxt "#778"
+msgid "Wireless security"
+msgstr "أمان الشبكه اللاسلكيه"
+
 msgctxt "#779"
 msgid "Save and apply network interface settings"
 msgstr "حفظ إعدادات واجهة الشبكة"
@@ -2665,6 +2673,10 @@ msgctxt "#852"
 msgid "Valid port range is 1024-65535"
 msgstr "نطاق المنفذ السليم هو 1024-65535"
 
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "إضافه صور..."
+
 msgctxt "#998"
 msgid "Add Music..."
 msgstr "إضافة موسيقى..."
@@ -3269,6 +3281,18 @@ msgctxt "#10037"
 msgid "Standard"
 msgstr "قياسي"
 
+msgctxt "#10043"
+msgid "Help"
+msgstr "المساعده"
+
+msgctxt "#10044"
+msgid "No help available"
+msgstr "لا توجد مساعده متوفره لهذا"
+
+msgctxt "#10126"
+msgid "File browser"
+msgstr "مُتصفح الملفات"
+
 msgctxt "#10131"
 msgid "Lock settings"
 msgstr "إعدادات القفل"
@@ -3549,6 +3573,10 @@ msgctxt "#12353"
 msgid "Reactivate lock"
 msgstr "تنشيط قفل"
 
+msgctxt "#12354"
+msgid "Would you like to update it now?"
+msgstr "اترغب بنحديثها الأن؟"
+
 msgctxt "#12356"
 msgid "Change lock"
 msgstr "تغيير قفل"
@@ -4037,6 +4065,10 @@ msgctxt "#13302"
 msgid "Fan speed override"
 msgstr "السيطرة على سرعة المروحة"
 
+msgctxt "#13303"
+msgid "Fonts"
+msgstr "الخطوط"
+
 msgctxt "#13304"
 msgid "Enable flipping bi-directional strings"
 msgstr "مكن جعل الأحرف"
@@ -4473,6 +4505,14 @@ msgctxt "#13432"
 msgid "Allow hardware acceleration (VideoToolbox)"
 msgstr "تمكين تسارع (VideoToolbox)"
 
+msgctxt "#13433"
+msgid "Play the next video automatically"
+msgstr "شغل المقطع التالى تلقائياً"
+
+msgctxt "#13434"
+msgid "Play only this"
+msgstr "شغل هذا وفقط"
+
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "تزامن أسلوب تشغيل الشاشة"
@@ -4957,6 +4997,10 @@ msgctxt "#15109"
 msgid "Skin default"
 msgstr "الغلاف الافتراضي"
 
+msgctxt "#15111"
+msgid "Theme"
+msgstr "الثمه"
+
 msgctxt "#15112"
 msgid "Default theme"
 msgstr "السمة الافتراضية"
@@ -5085,6 +5129,10 @@ msgctxt "#16022"
 msgid "Bob (inverted)"
 msgstr "بوب مزدوج"
 
+msgctxt "#16024"
+msgid "Cancelling..."
+msgstr "يَلغِى..."
+
 msgctxt "#16025"
 msgid "Enter the artist name"
 msgstr "أدخل اسم الفنان"
@@ -5377,10 +5425,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "تسجيلات TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "مصدر افتراضي لصور PVR مصغرة"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "محطات"
@@ -6001,6 +6045,14 @@ msgctxt "#19194"
 msgid "Continue?"
 msgstr "متابعة؟"
 
+msgctxt "#19197"
+msgid "Recording started on: %s"
+msgstr "بدأ التسجيل فى: %s"
+
+msgctxt "#19198"
+msgid "Recording finished on: %s"
+msgstr "إنتهى التسجيل فى: %s"
+
 msgctxt "#19199"
 msgid "Channel manager"
 msgstr "مدير القنوات"
@@ -7985,10 +8037,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "إزالة مشاركة الوسائط"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "مجلد الترجمة"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "دليل ترجمة الفيديو البديل"
@@ -8345,10 +8393,6 @@ msgctxt "#21456"
 msgid "External storage"
 msgstr "تخزين خارجي"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "موقع الترجمة "
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "صالح"
@@ -9153,6 +9197,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "بعض ملفات الغلاف مفقودة"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "أدخل نص البحث"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "الإشعارات"
@@ -9477,6 +9525,10 @@ msgctxt "#33083"
 msgid "Enable custom script button"
 msgstr "تمكين زر تخصيص نصي"
 
+msgctxt "#33084"
+msgid "Auto login"
+msgstr "تسجيل دخول تلقائى"
+
 msgctxt "#33100"
 msgid "Failed to start"
 msgstr "فشل البدء"
@@ -9521,10 +9573,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "إعداد المكبر"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -9776,3 +9824,15 @@ msgstr "إبدأ/توقف"
 msgctxt "#36037"
 msgid "TV"
 msgstr "TV"
+
+msgctxt "#36120"
+msgid "Select the default subtitles when different languages are available."
+msgstr "إختر لغه الترجمه المبدأيه عندما تتوفر اكثر من ترجمه باكثر من لغه"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "تبديل الى القناة"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "تسجيل"
index 80102df..54fac5a 100644 (file)
@@ -1789,10 +1789,6 @@ msgctxt "#20342"
 msgid "Movies"
 msgstr "Filmlər"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtitrlərin qovluqu"
-
 msgctxt "#21375"
 msgid "Normal"
 msgstr "Normal"
index db08942..ae978f0 100644 (file)
@@ -857,10 +857,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Hautatu helburuko direktorioa"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo bozgoragailu guztietara"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Kanal kopurua"
@@ -1637,10 +1633,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Kredituak"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip-a"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Off"
@@ -5453,10 +5445,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TB grabaketak"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR argazkitxoen lehenetsiriko karpeta"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kateak"
@@ -7841,10 +7829,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Kendu media partekatzea"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Azpitituluen karpeta"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Filmak eta txandakatu azpitituluen direktorioa"
@@ -8201,10 +8185,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "nahasia"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Azpititulu kokapena"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Konpondua"
@@ -9037,6 +9017,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Itxurari fitxategi batzuek falta zaizkio"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Sartu bilaketa katea"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Jakinarazpenak"
@@ -9401,10 +9385,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Bozgorailuaren konfigurazioa"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10123,7 +10103,7 @@ msgstr "Ezarri blokeo nagusiaren PIN kodea"
 
 msgctxt "#36397"
 msgid "If enabled, the master lock code is required to unlock XBMC on startup "
-msgstr "Gaiturik dagoenean blokeo kodea eskatuko da abioan XMBC desblokeatzeko"
+msgstr "Gaiturik dagoenean blokeo kodea eskatuko da abioan XBMC desblokeatzeko"
 
 msgctxt "#36399"
 msgid "No info available yet."
@@ -10209,6 +10189,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Ez dago informazio erabilgarririk oraindik."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Aldatu kanala"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Grabatu"
+
 msgctxt "#37001"
 msgid "(Directors Comments)"
 msgstr "(Zuzendari iruzkinak)"
index 9c9a404..7e72bde 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Абярыце каталёг прызначэньня"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Выводзіць стэрэа ва ўсе дынамікі"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Колькасьць каналаў"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Credits"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Няма"
@@ -5753,10 +5745,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV recordings"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Стандартны каталёг для мініятур PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Channels"
@@ -8561,10 +8549,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Remove media share"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Каталёг субтытраў"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Movie & alternate subtitle directory"
@@ -8933,10 +8917,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mixed"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Месца субтытраў"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Фіксаванае"
@@ -9789,6 +9769,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Некаторыя файлы адсутнічаюць у аздабленьні"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Увядзіце тэкст для пошуку"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Апавяшчэньні"
@@ -10161,10 +10145,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Канфігурацыя галосьнікаў"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10909,10 +10889,6 @@ 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 "Number of days of EPG data to import from backends. Defaults to 2 days."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11625,6 +11601,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "No info available yet."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Switch to channel"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Запіс"
+
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Enable hardware decoding of video files."
index 14f22bf..2b93905 100644 (file)
@@ -19,7 +19,7 @@ msgstr "Programi"
 
 msgctxt "#1"
 msgid "Pictures"
-msgstr "Fotke"
+msgstr "Slike"
 
 msgctxt "#2"
 msgid "Music"
@@ -27,11 +27,11 @@ msgstr "Muzika"
 
 msgctxt "#3"
 msgid "Videos"
-msgstr "Filmovi"
+msgstr "Video"
 
 msgctxt "#4"
 msgid "TV-Guide"
-msgstr "TV"
+msgstr "TV vodič"
 
 msgctxt "#5"
 msgid "Settings"
@@ -43,7 +43,7 @@ msgstr "XBMC SVN"
 
 msgctxt "#7"
 msgid "File manager"
-msgstr "Upr. datotekama"
+msgstr "Datoteka"
 
 msgctxt "#8"
 msgid "Weather"
@@ -103,11 +103,11 @@ msgstr "maj"
 
 msgctxt "#26"
 msgid "June"
-msgstr "jun"
+msgstr "juni"
 
 msgctxt "#27"
 msgid "July"
-msgstr "jul"
+msgstr "juli"
 
 msgctxt "#28"
 msgid "August"
@@ -131,31 +131,31 @@ msgstr "decembar"
 
 msgctxt "#41"
 msgid "Mon"
-msgstr "pon"
+msgstr "Pon"
 
 msgctxt "#42"
 msgid "Tue"
-msgstr "uto"
+msgstr "Uto"
 
 msgctxt "#43"
 msgid "Wed"
-msgstr "sri"
+msgstr "Sri"
 
 msgctxt "#44"
 msgid "Thu"
-msgstr "Ä\8det"
+msgstr "Ä\8cet"
 
 msgctxt "#45"
 msgid "Fri"
-msgstr "pet"
+msgstr "Pet"
 
 msgctxt "#46"
 msgid "Sat"
-msgstr "sub"
+msgstr "Sub"
 
 msgctxt "#47"
 msgid "Sun"
-msgstr "ned"
+msgstr "Ned"
 
 msgctxt "#51"
 msgid "Jan"
@@ -269,37 +269,61 @@ msgctxt "#86"
 msgid "NNW"
 msgstr "SSZ"
 
+msgctxt "#87"
+msgid "VAR"
+msgstr "VAR"
+
+msgctxt "#88"
+msgid "South"
+msgstr "Jug"
+
+msgctxt "#89"
+msgid "North"
+msgstr "Sjever"
+
+msgctxt "#90"
+msgid "West"
+msgstr "Zapad"
+
+msgctxt "#91"
+msgid "East"
+msgstr "Istok"
+
+msgctxt "#92"
+msgid "Variable"
+msgstr "Varijabla"
+
 msgctxt "#98"
 msgid "View: Auto"
-msgstr "Prikaz: Autom."
+msgstr "Prikaz: Auto"
 
 msgctxt "#99"
 msgid "View: Auto big"
-msgstr "Prikaz: Autom. veliko"
+msgstr "Prikaz: Auto-veliko"
 
 msgctxt "#100"
 msgid "View: Icons"
-msgstr "Prikaz: Ikone"
+msgstr "Prikaz: Ikoni"
 
 msgctxt "#101"
 msgid "View: List"
-msgstr "Prikaz: Spisak"
+msgstr "Prikaz: Lista"
 
 msgctxt "#102"
 msgid "Scan"
-msgstr "Analiziraj"
+msgstr "Skeniraj"
 
 msgctxt "#103"
 msgid "Sort by: Name"
-msgstr "Složi po: Imenu"
+msgstr "Sortiraj po: Imenu"
 
 msgctxt "#104"
 msgid "Sort by: Date"
-msgstr "Složi po: Datumu"
+msgstr "Sortiraj po: Datumu"
 
 msgctxt "#105"
 msgid "Sort by: Size"
-msgstr "Složi po: Veli."
+msgstr "Sortiraj po: Veličini"
 
 msgctxt "#106"
 msgid "No"
@@ -311,7 +335,7 @@ msgstr "Da"
 
 msgctxt "#108"
 msgid "Slideshow"
-msgstr "Reprod. slajdova"
+msgstr "Slajdovi"
 
 msgctxt "#109"
 msgid "Create thumbs"
@@ -359,11 +383,11 @@ msgstr "Nova fascikla"
 
 msgctxt "#120"
 msgid "Confirm file copy"
-msgstr "Potvrdite kopiranje"
+msgstr "Potvrdi kopiranje"
 
 msgctxt "#121"
 msgid "Confirm file move"
-msgstr "Potvrdite premještanje"
+msgstr "Potvrdi premještanje"
 
 msgctxt "#122"
 msgid "Confirm file delete?"
@@ -383,15 +407,15 @@ msgstr "Brisanje ovih datoteka? - Nakon brisanja, datoteke nije moguće povratit
 
 msgctxt "#126"
 msgid "Status"
-msgstr "Stanje"
+msgstr "Status"
 
 msgctxt "#127"
 msgid "Objects"
-msgstr "Objekata"
+msgstr "Objekti"
 
 msgctxt "#128"
 msgid "General"
-msgstr "Opšte"
+msgstr "Generalno"
 
 msgctxt "#129"
 msgid "Slideshow"
@@ -415,7 +439,7 @@ msgstr "Izvođači"
 
 msgctxt "#134"
 msgid "Songs"
-msgstr "Numere"
+msgstr "Pjesme"
 
 msgctxt "#135"
 msgid "Genres"
@@ -423,7 +447,7 @@ msgstr "Žanrovi"
 
 msgctxt "#136"
 msgid "Playlists"
-msgstr "Spiskovi za repro."
+msgstr "Reprodukcije"
 
 msgctxt "#137"
 msgid "Search"
@@ -499,7 +523,7 @@ msgstr "Skladišta"
 
 msgctxt "#155"
 msgid "Drive"
-msgstr "Uređaj"
+msgstr "Drajv"
 
 msgctxt "#156"
 msgid "Free"
@@ -519,7 +543,7 @@ msgstr "nije uspostavljena"
 
 msgctxt "#160"
 msgid "Free"
-msgstr "slobodno"
+msgstr "Slobodno"
 
 msgctxt "#161"
 msgid "Unavailable"
@@ -535,7 +559,7 @@ msgstr "Čitanje"
 
 msgctxt "#164"
 msgid "No disc"
-msgstr "Disk nije umetnut"
+msgstr "Nema diska"
 
 msgctxt "#165"
 msgid "Disc present"
@@ -545,6 +569,14 @@ msgctxt "#166"
 msgid "Skin"
 msgstr "Maska"
 
+msgctxt "#167"
+msgid "Cancel file operations"
+msgstr "Poništi rad datoteke"
+
+msgctxt "#168"
+msgid "%s- %s"
+msgstr "%s- %s"
+
 msgctxt "#169"
 msgid "Resolution"
 msgstr "Rezolucija"
@@ -559,7 +591,7 @@ msgstr "Datum izdavanja"
 
 msgctxt "#173"
 msgid "Display 4:3 videos as"
-msgstr "Prikaži 4:3 video materijal kao"
+msgstr "Prikaži 4:3 video kao"
 
 msgctxt "#175"
 msgid "Moods"
@@ -579,7 +611,7 @@ msgstr "Trajanje"
 
 msgctxt "#181"
 msgid "Select album"
-msgstr "Izaberite album"
+msgstr "Izaberi album"
 
 msgctxt "#182"
 msgid "Tracks"
@@ -611,7 +643,7 @@ msgstr "Izaberi sve"
 
 msgctxt "#189"
 msgid "Scanning media info"
-msgstr "Analiziranje informacija"
+msgstr "Skeniranje informacija"
 
 msgctxt "#190"
 msgid "Save"
@@ -619,7 +651,7 @@ msgstr "Sačuvaj"
 
 msgctxt "#191"
 msgid "Shuffle"
-msgstr "Nasumice"
+msgstr "Miješanje"
 
 msgctxt "#192"
 msgid "Clear"
@@ -627,11 +659,11 @@ msgstr "Poništi"
 
 msgctxt "#193"
 msgid "Scan"
-msgstr "Analiziraj"
+msgstr "Skeniraj"
 
 msgctxt "#194"
 msgid "Searching..."
-msgstr "Pretraživanje..."
+msgstr "Pretražuje..."
 
 msgctxt "#195"
 msgid "No info found!"
@@ -639,7 +671,7 @@ msgstr "Nisu pronađene informacije!"
 
 msgctxt "#196"
 msgid "Select movie:"
-msgstr "Izaberite film:"
+msgstr "Izaberi film:"
 
 msgctxt "#197"
 msgid "Querying %s info"
@@ -675,7 +707,7 @@ msgstr "Opis"
 
 msgctxt "#208"
 msgid "Play"
-msgstr "Reprodukuj"
+msgstr "Pokreni"
 
 msgctxt "#209"
 msgid "Next"
@@ -687,7 +719,7 @@ msgstr "Prethodno"
 
 msgctxt "#213"
 msgid "Calibrate user interface..."
-msgstr "Prilagodite korisničko okruženje..."
+msgstr "Kalibriranje korisničkog interfejsa..."
 
 msgctxt "#214"
 msgid "Video calibration..."
@@ -711,11 +743,11 @@ msgstr "DVD uređaj"
 
 msgctxt "#219"
 msgid "Please insert disc"
-msgstr "Molim, umetnite disk"
+msgstr "Molimo, ubacite disk"
 
 msgctxt "#220"
 msgid "Remote share"
-msgstr "Daljinsko djeljenje"
+msgstr "Udaljeno djeljenje"
 
 msgctxt "#221"
 msgid "Network is not connected"
@@ -729,13 +761,17 @@ msgctxt "#224"
 msgid "Speed"
 msgstr "Brzina"
 
+msgctxt "#225"
+msgid "Vertical Shift"
+msgstr "Vertikalni Pomak"
+
 msgctxt "#226"
 msgid "Test patterns..."
-msgstr "Isprobaj šablon..."
+msgstr "Šablon za testiranje slike..."
 
 msgctxt "#227"
 msgid "Lookup audio CD track names from freedb.org"
-msgstr "Potraži imena numera, muzičkog CD-a, na freedb.org"
+msgstr "Potraži imena pjesama, muzičkog CD-a, na freedb.org"
 
 msgctxt "#228"
 msgid "Shuffle playlist on load"
@@ -805,6 +841,10 @@ msgctxt "#244"
 msgid "Full screen"
 msgstr "Puni ekran"
 
+msgctxt "#245"
+msgid "Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)"
+msgstr "Dimenzije: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Piksela: %2.2f:1) (VShift: %2.2f)"
+
 msgctxt "#247"
 msgid "Scripts"
 msgstr "Skripte"
@@ -821,14 +861,14 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Izaberite odredišnu fasciklu"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo izlaz ka svim zvučnicima"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Broj kanala"
 
+msgctxt "#254"
+msgid "DTS capable receiver"
+msgstr "DTS sposoban reciver"
+
 msgctxt "#255"
 msgid "CDDB"
 msgstr "CDDB"
@@ -1001,6 +1041,18 @@ msgctxt "#298"
 msgid "Bookmarks"
 msgstr "Obilježivači"
 
+msgctxt "#300"
+msgid "MP1 capable receiver"
+msgstr "MP1 sposoban reciver"
+
+msgctxt "#301"
+msgid "MP2 capable receiver"
+msgstr "MP2 sposoban reciver"
+
+msgctxt "#302"
+msgid "MP3 capable receiver"
+msgstr "MP3 sposoban reciver"
+
 msgctxt "#303"
 msgid "Delay"
 msgstr "Kašnjenje"
@@ -1153,6 +1205,14 @@ msgctxt "#345"
 msgid "Year"
 msgstr "Godina"
 
+msgctxt "#347"
+msgid "DTS-HD capable receiver"
+msgstr "DTS-HD sposoban reciver"
+
+msgctxt "#349"
+msgid "TrueHD capable receiver"
+msgstr "TrueHD sposoban reciver"
+
 msgctxt "#350"
 msgid "Programs"
 msgstr "Programi"
@@ -1209,6 +1269,10 @@ msgctxt "#363"
 msgid "Sort by: File"
 msgstr "Složi po: Dato."
 
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Dolby Digital (AC3) sposoban reciver"
+
 msgctxt "#365"
 msgid "Sort by: Name"
 msgstr "Složi po: Imenu"
@@ -1473,6 +1537,14 @@ msgctxt "#434"
 msgid "From %s at %i %s"
 msgstr "Od %s do %i %s"
 
+msgctxt "#435"
+msgid "No optical disc drive detected"
+msgstr "Optički drajv nije pronađen"
+
+msgctxt "#436"
+msgid "You need an optical disc drive to play this video"
+msgstr "Treba vam optički drajv da bi ste gledali ovaj video"
+
 msgctxt "#437"
 msgid "Removable disk"
 msgstr "Prenosivi disk"
@@ -1597,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Zasluge"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Izme. čip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Isklj."
@@ -1973,6 +2041,10 @@ msgctxt "#576"
 msgid "Times played"
 msgstr "Reprodukovan"
 
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Uzeto"
+
 msgctxt "#580"
 msgid "Sort direction"
 msgstr "Smer slaganja"
@@ -2089,6 +2161,14 @@ msgctxt "#611"
 msgid "Enter number"
 msgstr "Unesite broj"
 
+msgctxt "#612"
+msgid "Bits/sample"
+msgstr "Bits/sample"
+
+msgctxt "#613"
+msgid "Sample rate"
+msgstr "Sample rate"
+
 msgctxt "#620"
 msgid "Audio CDs"
 msgstr "Muzički CD-ovi"
@@ -2113,6 +2193,10 @@ msgctxt "#625"
 msgid "All songs of"
 msgstr "Sve pjesme od"
 
+msgctxt "#626"
+msgid "In progress TV shows"
+msgstr "TV programi u toku"
+
 msgctxt "#629"
 msgid "View mode"
 msgstr "Režim prikaza"
@@ -2241,6 +2325,10 @@ msgctxt "#665"
 msgid "Compression level"
 msgstr "Nivo kompresije"
 
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Verbalno logovanje"
+
 msgctxt "#700"
 msgid "Cleaning up library"
 msgstr "Čišćenje biblioteke"
@@ -2257,6 +2345,10 @@ msgctxt "#705"
 msgid "Network"
 msgstr "Mreža"
 
+msgctxt "#706"
+msgid "Server"
+msgstr "Server"
+
 msgctxt "#708"
 msgid "Use an HTTP proxy server to access the internet"
 msgstr "Koristi posrednički HTTP server za pristup Internetu"
@@ -2273,6 +2365,10 @@ msgctxt "#713"
 msgid "HTTP proxy"
 msgstr "HTTP posrednik"
 
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Zadatak"
+
 msgctxt "#716"
 msgid "Automatic (DHCP)"
 msgstr "Automatski (DHCP)"
@@ -2285,6 +2381,18 @@ msgctxt "#719"
 msgid "IP address"
 msgstr "IP adresa"
 
+msgctxt "#720"
+msgid "Netmask"
+msgstr "Netmask"
+
+msgctxt "#721"
+msgid "Default gateway"
+msgstr "Standardni gateway"
+
+msgctxt "#722"
+msgid "DNS server"
+msgstr "DNS server"
+
 msgctxt "#723"
 msgid "Save & restart"
 msgstr "Sačuvaj i ponovo pokreni"
@@ -2329,6 +2437,14 @@ msgctxt "#735"
 msgid "Character set"
 msgstr "Skup znakova"
 
+msgctxt "#736"
+msgid "Style"
+msgstr "Stil"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "Boja"
+
 msgctxt "#738"
 msgid "Normal"
 msgstr "Normalan"
@@ -2461,6 +2577,14 @@ msgctxt "#776"
 msgid "Wireless network name (ESSID)"
 msgstr "Ime bežične mreže (ESSID)"
 
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Bežična lozinka"
+
+msgctxt "#778"
+msgid "Wireless security"
+msgstr "Bežična zaštita"
+
 msgctxt "#779"
 msgid "Save and apply network interface settings"
 msgstr "Sačuvaj i primjeni postavke mrežnog intrefejsa"
@@ -2541,6 +2665,18 @@ msgctxt "#798"
 msgid "Internet access"
 msgstr "Pristup Internetu"
 
+msgctxt "#799"
+msgid "Library Update"
+msgstr "Ažuriranje biblioteke"
+
+msgctxt "#800"
+msgid "Music library needs to rescan tags from files."
+msgstr "Muzička biblioteka mora da skenira informaciju iz datoteke."
+
+msgctxt "#801"
+msgid "Would you like to scan now?"
+msgstr "Želis li skenirati sada?"
+
 msgctxt "#850"
 msgid "Invalid port number entered"
 msgstr "Uneli ste pogrešan broj priključka"
@@ -2553,6 +2689,10 @@ msgctxt "#852"
 msgid "Valid port range is 1024-65535"
 msgstr "Ispravan opseg priključaka je od 1024 do 65535"
 
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "Dodaj slike..."
+
 msgctxt "#998"
 msgid "Add Music..."
 msgstr "Dodaj Muziku..."
@@ -2561,6 +2701,10 @@ msgctxt "#999"
 msgid "Add Videos..."
 msgstr "Dodaj Video..."
 
+msgctxt "#1000"
+msgid "Preview"
+msgstr "Pregled"
+
 msgctxt "#1001"
 msgid "Unable to connect"
 msgstr "Nije moguće povezivanje"
@@ -2757,6 +2901,26 @@ msgctxt "#1051"
 msgid "Enter web address"
 msgstr "Unesite internet adresu"
 
+msgctxt "#1180"
+msgid "Proxy type"
+msgstr "Vrsta proksija"
+
+msgctxt "#1181"
+msgid "HTTP"
+msgstr "HTTP"
+
+msgctxt "#1182"
+msgid "SOCKS4"
+msgstr "SOCKS4"
+
+msgctxt "#1183"
+msgid "SOCKS4A"
+msgstr "SOCKS4A"
+
+msgctxt "#1184"
+msgid "SOCKS5"
+msgstr "SOCKS5"
+
 msgctxt "#1200"
 msgid "SMB client"
 msgstr "SMB klijent"
@@ -2893,10 +3057,22 @@ msgctxt "#1271"
 msgid "Device name"
 msgstr "Ime uređaja"
 
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Koristi zaštitu sa lozinkom"
+
 msgctxt "#1273"
 msgid "AirPlay"
 msgstr "AirPlay"
 
+msgctxt "#1274"
+msgid "AirTunes"
+msgstr "AirTunes"
+
+msgctxt "#1275"
+msgid "Filter %s"
+msgstr "Filter %s"
+
 msgctxt "#1300"
 msgid "Custom audio device"
 msgstr "Prilagođen zvučni uređaj"
@@ -2945,6 +3121,10 @@ msgctxt "#1405"
 msgid "in"
 msgstr "u"
 
+msgctxt "#1406"
+msgid "the"
+msgstr " "
+
 msgctxt "#1407"
 msgid "Vicinity"
 msgstr "blizini"
@@ -2969,6 +3149,10 @@ msgctxt "#1412"
 msgid "windy"
 msgstr "vjetrovito"
 
+msgctxt "#1413"
+msgid "Patches"
+msgstr "Zakrpe"
+
 msgctxt "#1414"
 msgid "Thunderstorm"
 msgstr "oluja"
@@ -2989,6 +3173,10 @@ msgctxt "#1418"
 msgid "Thunderstorms"
 msgstr "grmljavina"
 
+msgctxt "#1419"
+msgid "Shallow"
+msgstr "Plitak"
+
 msgctxt "#1420"
 msgid "Moderate"
 msgstr "Umjeren"
@@ -3005,26 +3193,110 @@ msgctxt "#1423"
 msgid "Mist"
 msgstr "Magla"
 
+msgctxt "#1424"
+msgid "Overcast"
+msgstr "Oblačno"
+
+msgctxt "#1425"
+msgid "Pellets"
+msgstr "Kuglica"
+
+msgctxt "#1426"
+msgid "Hail"
+msgstr "Grad"
+
+msgctxt "#1427"
+msgid "Smoke"
+msgstr "Dim"
+
+msgctxt "#1428"
+msgid "Volcanic"
+msgstr "Vulkanski"
+
+msgctxt "#1429"
+msgid "Ash"
+msgstr "Pepeo"
+
+msgctxt "#1430"
+msgid "Widespread"
+msgstr "Rasprostranjen"
+
+msgctxt "#1431"
+msgid "Dust"
+msgstr "Prašina"
+
+msgctxt "#1432"
+msgid "Sand"
+msgstr "Pijesak"
+
+msgctxt "#1433"
+msgid "Spray"
+msgstr "Sprej"
+
+msgctxt "#1434"
+msgid "Whirls"
+msgstr "Virovi"
+
+msgctxt "#1435"
+msgid "Sandstorm"
+msgstr "Pješčana oluja"
+
+msgctxt "#1436"
+msgid "Blowing"
+msgstr "Duvanje"
+
+msgctxt "#1437"
+msgid "Pellet"
+msgstr "Kuglice"
+
+msgctxt "#1438"
+msgid "Small"
+msgstr "Malo"
+
 msgctxt "#1439"
 msgid "and"
 msgstr "i"
 
+msgctxt "#1440"
+msgid "Sleet"
+msgstr "Susnježica"
+
 msgctxt "#1441"
 msgid "with"
 msgstr "sa"
 
+msgctxt "#1442"
+msgid "Chance"
+msgstr "Šansa"
+
 msgctxt "#1443"
 msgid "of"
 msgstr "od"
 
+msgctxt "#1444"
+msgid "Funnel"
+msgstr "Lijevak"
+
+msgctxt "#1445"
+msgid "Cloud"
+msgstr "Oblak"
+
 msgctxt "#1446"
 msgid "Unknown"
 msgstr "Nepoznato"
 
+msgctxt "#1447"
+msgid "Squals"
+msgstr "Oluje"
+
 msgctxt "#1448"
 msgid "Precipitation"
 msgstr "Obilne padavine"
 
+msgctxt "#1449"
+msgid "Partial"
+msgstr "Djelimično"
+
 msgctxt "#1450"
 msgid "Put display to sleep when idle"
 msgstr "Postavi ekran „na spavanje“, kada se ne koristi"
@@ -3033,6 +3305,14 @@ msgctxt "#2050"
 msgid "Runtime"
 msgstr "Trajanje"
 
+msgctxt "#2080"
+msgid "Empty list"
+msgstr "Prazna lista"
+
+msgctxt "#2081"
+msgid "Went back to parent list because the active list has been emptied"
+msgstr "Vratio se nazad na matičnu listu jer je aktivna lista prazna"
+
 msgctxt "#2100"
 msgid "Script failed! : %s"
 msgstr "Skripta je „pukla“! : %s"
@@ -3145,22 +3425,78 @@ msgctxt "#10034"
 msgid "Settings - Profiles"
 msgstr "Postavke - Profili"
 
+msgctxt "#10035"
+msgid "Reset"
+msgstr "Resetuj"
+
 msgctxt "#10037"
 msgid "Standard"
 msgstr "Uobičajeno"
 
+msgctxt "#10042"
+msgid "Are you sure you want to reset the settings in this category?"
+msgstr "Jeste li sigurni da želite resetovati postavke u ovoj kategoriji?"
+
+msgctxt "#10043"
+msgid "Help"
+msgstr "Pomoć"
+
+msgctxt "#10044"
+msgid "No help available"
+msgstr "Pomoć nije dostupna"
+
+msgctxt "#10126"
+msgid "File browser"
+msgstr "Preglednik datoteke"
+
+msgctxt "#10128"
+msgid "Network setup"
+msgstr "Podešavanje mreže"
+
+msgctxt "#10129"
+msgid "Media source"
+msgstr "Izvor medije"
+
+msgctxt "#10130"
+msgid "Profile settings"
+msgstr "Podešavanje profila"
+
 msgctxt "#10131"
 msgid "Lock settings"
 msgstr "Zaključaj postavke"
 
+msgctxt "#10132"
+msgid "Content settings"
+msgstr "Podešavanje sadržaja"
+
 msgctxt "#10134"
 msgid "Favourites"
 msgstr "Omiljeno"
 
+msgctxt "#10135"
+msgid "Songs/Info"
+msgstr "Pjesme/Info"
+
+msgctxt "#10136"
+msgid "Smart playlist editor"
+msgstr "Editor pametne-plejliste"
+
+msgctxt "#10137"
+msgid "Smart playlist rule editor"
+msgstr "Editor pravila za pametnu-plejlistu"
+
+msgctxt "#10139"
+msgid "Pictures/Info"
+msgstr "Slike/Info"
+
 msgctxt "#10140"
 msgid "Add-on settings"
 msgstr "Postavke dodatka"
 
+msgctxt "#10146"
+msgid "Add-ons/Info"
+msgstr "Dodaci/Info"
+
 msgctxt "#10210"
 msgid "Looking for subtitles..."
 msgstr "Traženje titlova..."
@@ -3425,10 +3761,30 @@ msgctxt "#12348"
 msgid "Item locked"
 msgstr "Stavka je zaključana"
 
+msgctxt "#12349"
+msgid "Updating video library art"
+msgstr "Ažuriranje slika za videoteku"
+
+msgctxt "#12350"
+msgid "Processing %s"
+msgstr "Obrađuje %s"
+
+msgctxt "#12351"
+msgid "The art cache in your video library needs updating."
+msgstr "Skladište sa posterima u vasoj videoteci treba ažuriranje."
+
+msgctxt "#12352"
+msgid "No downloading is needed."
+msgstr "Download nije potreban."
+
 msgctxt "#12353"
 msgid "Reactivate lock"
 msgstr "Ponovo aktiviraj kôd"
 
+msgctxt "#12354"
+msgid "Would you like to update it now?"
+msgstr "Želite li ažurirati sada?"
+
 msgctxt "#12356"
 msgid "Change lock"
 msgstr "Promjeni kôd"
@@ -3461,6 +3817,10 @@ msgctxt "#12373"
 msgid "Settings & file manager"
 msgstr "Postavke i upr. datotekama"
 
+msgctxt "#12376"
+msgid "Set as default for all videos"
+msgstr "Stavi kao standard za sav video"
+
 msgctxt "#12377"
 msgid "This will reset any previously saved values"
 msgstr "Ovo će poništiti prethodno sačuvane vrijednosti"
@@ -3581,6 +3941,14 @@ msgctxt "#13016"
 msgid "Power off System"
 msgstr "Isključivanje sistema"
 
+msgctxt "#13017"
+msgid "Inhibit idle shutdown"
+msgstr "Spriječi nezaposleno gašenje"
+
+msgctxt "#13018"
+msgid "Allow idle shutdown"
+msgstr "Dozvoli nezaposleno gašenje"
+
 msgctxt "#13020"
 msgid "Is another session active, perhaps over ssh?"
 msgstr "Da li je druga sesija aktivna, možda putem ssh?"
@@ -3605,6 +3973,54 @@ msgctxt "#13025"
 msgid "Joystick unplugged"
 msgstr "Upravljačka palica je nepovezana"
 
+msgctxt "#13026"
+msgid "Try to wake remote servers on access"
+msgstr "Pokušaj probuditi servere na ulaz"
+
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Wake on Lan (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "Čekam da se mreža spoji..."
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Wake on Lan nije uspješan!"
+
+msgctxt "#13030"
+msgid "Waiting for server to wake up..."
+msgstr "Čekam da se server probudi..."
+
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Produženo čekanje da se server probudi..."
+
+msgctxt "#13032"
+msgid "Waiting for services to launch..."
+msgstr "Čekam na pokretanje usluga..."
+
+msgctxt "#13033"
+msgid "MAC Discovery"
+msgstr "MAC Pronalazak"
+
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Ažuriran za %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Pronađen za %s"
+
+msgctxt "#13036"
+msgid "Failed for %s"
+msgstr "Nije uspjelo za %s"
+
+msgctxt "#13050"
+msgid "Running low on battery"
+msgstr "Nizak nivo baterije"
+
 msgctxt "#13100"
 msgid "Flicker filter"
 msgstr "Flicker filter"
@@ -3785,6 +4201,18 @@ msgctxt "#13211"
 msgid "Alarm!"
 msgstr "Alarm!"
 
+msgctxt "#13212"
+msgid "Cancelled with %im%is left"
+msgstr "Poništen sa %im%is do kraja"
+
+msgctxt "#13213"
+msgid "%2.0fm"
+msgstr "%2.0fm"
+
+msgctxt "#13214"
+msgid "%2.0fs"
+msgstr "%2.0fs"
+
 msgctxt "#13249"
 msgid "Search for subtitles in RARs"
 msgstr "Pretraži titlove u RAR-ovima"
@@ -3897,6 +4325,10 @@ msgctxt "#13302"
 msgid "Fan speed override"
 msgstr "Nametni brzinu ventilatora"
 
+msgctxt "#13303"
+msgid "Fonts"
+msgstr "Fontovi"
+
 msgctxt "#13304"
 msgid "Enable flipping bi-directional strings"
 msgstr "Omogući obrtanje bi-direkcionih stringova"
@@ -4333,6 +4765,14 @@ msgctxt "#13432"
 msgid "Allow hardware acceleration (VideoToolbox)"
 msgstr "Dopustite hardversko ubrzanje  (VideoToolbox)"
 
+msgctxt "#13433"
+msgid "Play the next video automatically"
+msgstr "Pokreni sljedeci video automatski"
+
+msgctxt "#13434"
+msgid "Play only this"
+msgstr "Pokreni samo ovo"
+
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "A/V način sinhron."
@@ -4373,6 +4813,30 @@ msgctxt "#13510"
 msgid "Sync playback to display"
 msgstr "Sinhronizuj reprodukciju prema prikazu"
 
+msgctxt "#13511"
+msgid "Choose art"
+msgstr "Izaberi poster"
+
+msgctxt "#13512"
+msgid "Current art"
+msgstr "Sadašnji poster"
+
+msgctxt "#13513"
+msgid "Remote art"
+msgstr "Dostupni posteri"
+
+msgctxt "#13514"
+msgid "Local art"
+msgstr "Lokalni posteri"
+
+msgctxt "#13515"
+msgid "No art"
+msgstr "Bez postera"
+
+msgctxt "#13516"
+msgid "Add art"
+msgstr "Dodaj poster"
+
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
 msgstr "Pauziraj kod promjena učestalosti osvježavanja"
@@ -4521,6 +4985,10 @@ msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "Video keš - DVD-ROM"
 
+msgctxt "#14027"
+msgid "Local Network"
+msgstr "Lokalna mreža"
+
 msgctxt "#14028"
 msgid "Internet"
 msgstr "Internet"
@@ -4529,6 +4997,10 @@ msgctxt "#14030"
 msgid "Audio cache - DVD-ROM"
 msgstr "Keš zvuka - DVD-ROM"
 
+msgctxt "#14031"
+msgid "Local Network"
+msgstr "Lokalna mreža"
+
 msgctxt "#14032"
 msgid "Internet"
 msgstr "Internet"
@@ -4537,6 +5009,10 @@ msgctxt "#14034"
 msgid "DVD cache - DVD-ROM"
 msgstr "DVD keš - DVD-ROM"
 
+msgctxt "#14035"
+msgid "Local Network"
+msgstr "Lokalna mreža"
+
 msgctxt "#14036"
 msgid "Services"
 msgstr "Usluge"
@@ -4685,6 +5161,10 @@ msgctxt "#14077"
 msgid "Remove from favourites"
 msgstr "Ukloni iz omiljenog"
 
+msgctxt "#14078"
+msgid "Colours"
+msgstr "Boje"
+
 msgctxt "#14079"
 msgid "Timezone country"
 msgstr "Zemlja vremenske zone"
@@ -4765,6 +5245,10 @@ msgctxt "#14099"
 msgid "Eject disc when CD ripping is complete"
 msgstr "Izbaci disk kada CD rip-ovanje završi"
 
+msgctxt "#14100"
+msgid "Stop ripping CD"
+msgstr "Zaustavi ripovanje CD-a"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Ukloni"
@@ -4817,6 +5301,10 @@ msgctxt "#15109"
 msgid "Skin default"
 msgstr "Podrazumjevana maska"
 
+msgctxt "#15111"
+msgid "Theme"
+msgstr "Tema"
+
 msgctxt "#15112"
 msgid "Default theme"
 msgstr "Podrazumjevana tema"
@@ -4945,6 +5433,10 @@ msgctxt "#16022"
 msgid "Bob (inverted)"
 msgstr "Bob (obratno)"
 
+msgctxt "#16024"
+msgid "Cancelling..."
+msgstr "Poništava..."
+
 msgctxt "#16025"
 msgid "Enter the artist name"
 msgstr "Unesi ime izvođača"
@@ -4985,6 +5477,18 @@ msgctxt "#16035"
 msgid "Party mode playlist"
 msgstr "Spisak za rep. režima žurke"
 
+msgctxt "#16036"
+msgid "De-interlace (Half)"
+msgstr "De-interlace (Half)"
+
+msgctxt "#16037"
+msgid "Deinterlace video"
+msgstr "Deinterlace video"
+
+msgctxt "#16038"
+msgid "Deinterlace method"
+msgstr "Deinterlace metoda"
+
 msgctxt "#16039"
 msgid "Off"
 msgstr "Isklj."
@@ -5117,22 +5621,506 @@ msgctxt "#16318"
 msgid "Temporal/Spatial (Half)"
 msgstr "Vremenski/prostorni (polovično)"
 
+msgctxt "#16319"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "#16320"
+msgid "DXVA Bob"
+msgstr "DXVA Bob"
+
+msgctxt "#16321"
+msgid "DXVA Best"
+msgstr "DXVA Best"
+
+msgctxt "#16322"
+msgid "Spline36"
+msgstr "Spline36"
+
+msgctxt "#16324"
+msgid "Software Blend"
+msgstr "Softver Blend"
+
+msgctxt "#16400"
+msgid "Post-processing"
+msgstr "Post-procesiranje"
+
 msgctxt "#17500"
 msgid "Display sleep timeout"
 msgstr "Vrijeme nakon kog će ekran preći u stanje spavanja"
 
+msgctxt "#17997"
+msgid "%i MByte"
+msgstr "%i MByte"
+
+msgctxt "#17998"
+msgid "%i hours"
+msgstr "%i sati"
+
+msgctxt "#17999"
+msgid "%i days"
+msgstr "%i dana"
+
 msgctxt "#19000"
 msgid "Switch to channel"
 msgstr "Prebaci na kanal"
 
+msgctxt "#19001"
+msgid "Separate the search words by using AND, OR and/or NOT."
+msgstr "Razdvoji riječi koristeći AND, OR i\\ili NOT."
+
+msgctxt "#19002"
+msgid "or use phrases to find an exact match, like \"The wizard of Oz\"."
+msgstr "ili koristi fraze da dobiješ precizan rezultat, npr. \"Bijelo dugme\"."
+
+msgctxt "#19003"
+msgid "Find similar programs"
+msgstr "Pronađi slične programe"
+
+msgctxt "#19004"
+msgid "Importing EPG from clients"
+msgstr "Importuje EPG iz klijenta"
+
+msgctxt "#19005"
+msgid "PVR stream information"
+msgstr "PVR strim informacija"
+
+msgctxt "#19006"
+msgid "Receiving device"
+msgstr "Primajuci uređaj"
+
+msgctxt "#19007"
+msgid "Device status"
+msgstr "Status uređaja"
+
+msgctxt "#19008"
+msgid "Signal quality"
+msgstr "Kvalitet signala"
+
+msgctxt "#19009"
+msgid "SNR"
+msgstr "SNR"
+
+msgctxt "#19010"
+msgid "BER"
+msgstr "BER"
+
+msgctxt "#19011"
+msgid "UNC"
+msgstr "UNC"
+
+msgctxt "#19012"
+msgid "PVR Backend"
+msgstr "PVR Backend"
+
+msgctxt "#19013"
+msgid "Free to air"
+msgstr "Free to air"
+
 msgctxt "#19014"
 msgid "Fixed"
 msgstr "Brzo"
 
+msgctxt "#19015"
+msgid "Encryption"
+msgstr "Enkripcija"
+
+msgctxt "#19016"
+msgid "PVR Backend %i - %s"
+msgstr "PVR Backend %i - %s"
+
+msgctxt "#19017"
+msgid "TV recordings"
+msgstr "Snimci"
+
+msgctxt "#19019"
+msgid "Channels"
+msgstr "Kanali"
+
+msgctxt "#19020"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19021"
+msgid "Radio"
+msgstr "Radio"
+
+msgctxt "#19022"
+msgid "Hidden"
+msgstr "Sakriveno"
+
+msgctxt "#19023"
+msgid "TV channels"
+msgstr "TV Kanali"
+
+msgctxt "#19024"
+msgid "Radio channels"
+msgstr "Radio Kanali"
+
+msgctxt "#19025"
+msgid "Upcoming recordings"
+msgstr "Predstojeći snimci"
+
+msgctxt "#19026"
+msgid "Add timer..."
+msgstr "Dodaj tajmer..."
+
+msgctxt "#19027"
+msgid "No search results"
+msgstr "Nema rezultata pretrage"
+
+msgctxt "#19028"
+msgid "No EPG entries"
+msgstr "Nema EPG podataka"
+
+msgctxt "#19029"
+msgid "Channel"
+msgstr "Kanal"
+
+msgctxt "#19030"
+msgid "Now"
+msgstr "Sada"
+
 msgctxt "#19031"
 msgid "Next"
 msgstr "Sljedeće"
 
+msgctxt "#19032"
+msgid "Timeline"
+msgstr "Matrica"
+
+msgctxt "#19033"
+msgid "Information"
+msgstr "Informacija"
+
+msgctxt "#19034"
+msgid "Already started recording on this channel"
+msgstr "Snimanje je već u toku na ovom kanalu"
+
+msgctxt "#19035"
+msgid "%s could not be played. Check the log for details."
+msgstr "%s se nemoze pokrenuti. Provjerite log za više informacija."
+
+msgctxt "#19036"
+msgid "This recording cannot be played. Check the log for details."
+msgstr "Ovaj snimak se nemoze pokrenuti. Provjerite log za više informacija."
+
+msgctxt "#19037"
+msgid "Show signal quality"
+msgstr "Prikaži kvalitet signala"
+
+msgctxt "#19038"
+msgid "Not supported by the PVR backend."
+msgstr "Nije podržano od PVR backend-a."
+
+msgctxt "#19039"
+msgid "Are you sure you want to hide this channel?"
+msgstr "Jeste li sigurni da želite sakriti ovaj kanal?"
+
+msgctxt "#19040"
+msgid "Timer"
+msgstr "Tajmer"
+
+msgctxt "#19041"
+msgid "Are you sure you want to rename this recording?"
+msgstr "Jeste li sigurni da želite preimenovati ovaj snimak?"
+
+msgctxt "#19042"
+msgid "Are you sure you want to rename this timer?"
+msgstr "Jeste li sigurni da želite preimenovati ovaj tajmer?"
+
+msgctxt "#19043"
+msgid "Recording"
+msgstr "Snimanje u toku"
+
+msgctxt "#19044"
+msgid "Please check your configuration or check the log for details."
+msgstr "Molimo vas provjerite Vaše postavke ili provjerite log za više informacija."
+
+msgctxt "#19045"
+msgid "No PVR clients have been started yet. Wait for the PVR clients to start up or check the log for details."
+msgstr "Još uvijek niste pokrenuli Vaš PVR-klijent. Pričekajte dok se PVR-klijent pokrene ili provjerite log za više informacija."
+
+msgctxt "#19046"
+msgid "New channel"
+msgstr "Novi kanal"
+
+msgctxt "#19047"
+msgid "Programme info"
+msgstr "Program"
+
+msgctxt "#19048"
+msgid "Group management"
+msgstr "Upravljanje grupama"
+
+msgctxt "#19049"
+msgid "Show channel"
+msgstr "Prikaži kanal"
+
+msgctxt "#19050"
+msgid "Show visible channels"
+msgstr "Prikaži neskrivene kanale"
+
+msgctxt "#19051"
+msgid "Show hidden channels"
+msgstr "Prikaži skrivene kanale"
+
+msgctxt "#19052"
+msgid "Move channel to:"
+msgstr "Premjesti kanal u:"
+
+msgctxt "#19053"
+msgid "Recording information"
+msgstr "Informacija o snimku"
+
+msgctxt "#19054"
+msgid "Hide channel"
+msgstr "Sakri kanal"
+
+msgctxt "#19055"
+msgid "No information available"
+msgstr "Informacija nije dostupna"
+
+msgctxt "#19056"
+msgid "New timer"
+msgstr "Novi tajmer"
+
+msgctxt "#19057"
+msgid "Edit timer"
+msgstr "Izmjeni tajmer"
+
+msgctxt "#19058"
+msgid "Timer enabled"
+msgstr "Tajmer uključen"
+
+msgctxt "#19059"
+msgid "Stop recording"
+msgstr "Zaustavi snimanje"
+
+msgctxt "#19060"
+msgid "Delete timer"
+msgstr "Izbriši tajmer"
+
+msgctxt "#19061"
+msgid "Add timer"
+msgstr "Dodaj tajmer"
+
+msgctxt "#19062"
+msgid "Sort by: Channel"
+msgstr "Sortiraj po: Kanalu"
+
+msgctxt "#19063"
+msgid "Go to begin"
+msgstr "Idi na početak"
+
+msgctxt "#19064"
+msgid "Go to end"
+msgstr "Idi na kraj"
+
+msgctxt "#19065"
+msgid "Default EPG window"
+msgstr "Standardni EPG prozor"
+
+msgctxt "#19067"
+msgid "This event is already being recorded."
+msgstr "Ovaj program se već snima."
+
+msgctxt "#19068"
+msgid "This recording could not be deleted. Check the log for details."
+msgstr "Ovaj snimak se nemože izbrisati. Provjerite log za vise informacija."
+
+msgctxt "#19069"
+msgid "EPG"
+msgstr "EPG"
+
+msgctxt "#19071"
+msgid "EPG update interval"
+msgstr "Interval za ažuriranje EPG-a"
+
+msgctxt "#19072"
+msgid "Do not store the EPG in the database"
+msgstr "Nemoj čuvati EPG u databazi"
+
+msgctxt "#19073"
+msgid "Delay channel switch"
+msgstr "Uspori mjenjanje kanala"
+
+msgctxt "#19074"
+msgid "Active:"
+msgstr "Aktivno:"
+
+msgctxt "#19075"
+msgid "Name:"
+msgstr "Ime:"
+
+msgctxt "#19076"
+msgid "Folder:"
+msgstr "Fascikla:"
+
+msgctxt "#19077"
+msgid "Radio:"
+msgstr "Radio:"
+
+msgctxt "#19078"
+msgid "Channel:"
+msgstr "Kanal:"
+
+msgctxt "#19079"
+msgid "Day:"
+msgstr "Dan:"
+
+msgctxt "#19080"
+msgid "Begin:"
+msgstr "Počni:"
+
+msgctxt "#19081"
+msgid "End:"
+msgstr "Završi:"
+
+msgctxt "#19082"
+msgid "Priority:"
+msgstr "Prioritet:"
+
+msgctxt "#19083"
+msgid "Lifetime (days):"
+msgstr "Rok trajanja (dana):"
+
+msgctxt "#19084"
+msgid "First day:"
+msgstr "Prvi dan:"
+
+msgctxt "#19085"
+msgid "Unknown channel %u"
+msgstr "Nepoznat kanal %u"
+
+msgctxt "#19086"
+msgid "Mo-__-__-__-__-__-__"
+msgstr "Po-__-__-__-__-__-__"
+
+msgctxt "#19087"
+msgid "__-Tu-__-__-__-__-__"
+msgstr "__-Ut-__-__-__-__-__"
+
+msgctxt "#19088"
+msgid "__-__-We-__-__-__-__"
+msgstr "__-__-Sr-__-__-__-__"
+
+msgctxt "#19089"
+msgid "__-__-__-Th-__-__-__"
+msgstr "__-__-__-Če-__-__-__"
+
+msgctxt "#19090"
+msgid "__-__-__-__-Fr-__-__"
+msgstr "__-__-__-__-Pe-__-__"
+
+msgctxt "#19091"
+msgid "__-__-__-__-__-Sa-__"
+msgstr "__-__-__-__-__-Su-__"
+
+msgctxt "#19092"
+msgid "__-__-__-__-__-__-Su"
+msgstr "__-__-__-__-__-__-Ne"
+
+msgctxt "#19093"
+msgid "Mo-Tu-We-Th-Fr-__-__"
+msgstr "Po-Ut-Sr-Če-Pe-__-__"
+
+msgctxt "#19094"
+msgid "Mo-Tu-We-Th-Fr-Sa-__"
+msgstr "Po-Ut-Sr-Če-Pe-Su-__"
+
+msgctxt "#19095"
+msgid "Mo-Tu-We-Th-Fr-Sa-Su"
+msgstr "Po-Ut-Sr-Če-Pe-Su-Ne"
+
+msgctxt "#19096"
+msgid "__-__-__-__-__-Sa-Su"
+msgstr "__-__-__-__-__-Su-Ne"
+
+msgctxt "#19097"
+msgid "Enter the name for the recording"
+msgstr "Unesi ime za snimak"
+
+msgctxt "#19098"
+msgid "Warning"
+msgstr "Upozorenje"
+
+msgctxt "#19102"
+msgid "Please switch to another channel."
+msgstr "Molimo prebacite na drugi kanal."
+
+msgctxt "#19104"
+msgid "Enter the name of the folder for the recording"
+msgstr "Unesi ime fascikle za snimak"
+
+msgctxt "#19106"
+msgid "Next timer on"
+msgstr "Naredni tajmer na"
+
+msgctxt "#19107"
+msgid "at"
+msgstr "na"
+
+msgctxt "#19109"
+msgid "Couldn't save timer. Check the log for details."
+msgstr "Tajmer se nije mogao sačuvati. Provjerite log za više informacije."
+
+msgctxt "#19110"
+msgid "An unexpected error occurred. Try again later or check the log for details."
+msgstr "Dogodila se neočekivana greška. Probajte ponovo ili provjerite log za više informacija."
+
+msgctxt "#19111"
+msgid "PVR backend error. Check the log for details."
+msgstr "PVR backend greska. Provjeri log za više informacija."
+
+msgctxt "#19114"
+msgid "Version"
+msgstr "Verzija"
+
+msgctxt "#19115"
+msgid "Address"
+msgstr "Adresa"
+
+msgctxt "#19116"
+msgid "Disksize"
+msgstr "Velicina diska"
+
+msgctxt "#19117"
+msgid "Search for channels"
+msgstr "Pretraživanje kanala"
+
+msgctxt "#19118"
+msgid "Cannot use PVR functions while searching."
+msgstr "Nije moguće koristiti PVR funkcije dok traje pretraživanje."
+
+msgctxt "#19119"
+msgid "On which server you want to search?"
+msgstr "Na kojem serveru želite vršiti pretraživanje?"
+
+msgctxt "#19120"
+msgid "Client number"
+msgstr "Broj klijenta"
+
+msgctxt "#19121"
+msgid "Avoid repeats"
+msgstr "Izbjegni ponavljanje"
+
+msgctxt "#19122"
+msgid "This timer is still recording. Are you sure you want to delete this timer?"
+msgstr "Ovaj tajmer još uvijek snima. Jeste li sigurni da želite izbrisati ovaj tajmer?"
+
+msgctxt "#19123"
+msgid "Free to air channels only"
+msgstr "Samo \"Free-to-air\" kanali"
+
+msgctxt "#19143"
+msgid "Group management"
+msgstr "Upravljanje grupama"
+
+msgctxt "#19148"
+msgid "Channel"
+msgstr "Kanal"
+
 msgctxt "#19163"
 msgid "Recordings"
 msgstr "Snimci"
@@ -5141,6 +6129,26 @@ msgctxt "#19177"
 msgid "Playback"
 msgstr "Reprodukcija"
 
+msgctxt "#19180"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19204"
+msgid "New channel"
+msgstr "Novi kanal"
+
+msgctxt "#19205"
+msgid "Group management"
+msgstr "Upravljanje grupama"
+
+msgctxt "#19222"
+msgid "EPG"
+msgstr "EPG"
+
+msgctxt "#19256"
+msgid "Stop recording"
+msgstr "Zaustavi snimanje"
+
 msgctxt "#19607"
 msgid "Fashion"
 msgstr "Režim"
@@ -6457,10 +7465,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Ukloni dijeljenu lokaciju medija"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Fascikla sa titlovima"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Fascikla filmova i alternativnih titlova"
@@ -7181,6 +8185,10 @@ msgctxt "#22031"
 msgid "Size"
 msgstr "Velič."
 
+msgctxt "#22032"
+msgid "Colours"
+msgstr "Boje"
+
 msgctxt "#22034"
 msgid "Export karaoke titles as HTML"
 msgstr "Izvoz karaoke naslova kao HTML"
@@ -7433,6 +8441,10 @@ msgctxt "#24094"
 msgid "(current)"
 msgstr "Omogući hardversko ubrzanje (CrystalHD)"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Unesite riječ za pretragu"
+
 msgctxt "#29800"
 msgid "Library Mode"
 msgstr "Režim biblioteke"
@@ -7741,10 +8753,6 @@ msgctxt "#34003"
 msgid "DXVA2"
 msgstr "DXVA"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfiguracija zvučnika"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -7804,3 +8812,15 @@ msgstr "Povezano"
 msgctxt "#36035"
 msgid "Always"
 msgstr "Uvijek"
+
+msgctxt "#36037"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Prebaci na kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Snimi"
index 3349de9..6ee8b1f 100644 (file)
@@ -51,7 +51,7 @@ msgstr "Времето"
 
 msgctxt "#9"
 msgid "xbmc media center"
-msgstr "медиен център xbmc"
+msgstr "медиен център XBMC"
 
 msgctxt "#11"
 msgid "Monday"
@@ -159,11 +159,11 @@ msgstr "нед."
 
 msgctxt "#51"
 msgid "Jan"
-msgstr "ян."
+msgstr "януари"
 
 msgctxt "#52"
 msgid "Feb"
-msgstr "февр."
+msgstr "февруари"
 
 msgctxt "#53"
 msgid "Mar"
@@ -171,7 +171,7 @@ msgstr "март"
 
 msgctxt "#54"
 msgid "Apr"
-msgstr "апр."
+msgstr "април"
 
 msgctxt "#55"
 msgid "May"
@@ -187,23 +187,23 @@ msgstr "юли"
 
 msgctxt "#58"
 msgid "Aug"
-msgstr "авг."
+msgstr "август"
 
 msgctxt "#59"
 msgid "Sep"
-msgstr "септ."
+msgstr "септември"
 
 msgctxt "#60"
 msgid "Oct"
-msgstr "окт."
+msgstr "октомври"
 
 msgctxt "#61"
 msgid "Nov"
-msgstr "ное."
+msgstr "ноември"
 
 msgctxt "#62"
 msgid "Dec"
-msgstr "дек."
+msgstr "декември"
 
 msgctxt "#71"
 msgid "N"
@@ -295,19 +295,19 @@ msgstr "Променливо"
 
 msgctxt "#98"
 msgid "View: Auto"
-msgstr "Ð\92ид: Автоматичен"
+msgstr "Ð\98зглед: Автоматичен"
 
 msgctxt "#99"
 msgid "View: Auto big"
-msgstr "Ð\92ид: Автоматичен (едър)"
+msgstr "Ð\98зглед: Автоматичен (едър)"
 
 msgctxt "#100"
 msgid "View: Icons"
-msgstr "Ð\92ид: Икони"
+msgstr "Ð\98зглед: Икони"
 
 msgctxt "#101"
 msgid "View: List"
-msgstr "Ð\92ид: Списък"
+msgstr "Ð\98зглед: Списък"
 
 msgctxt "#102"
 msgid "Scan"
@@ -415,7 +415,7 @@ msgstr "Обекти"
 
 msgctxt "#128"
 msgid "General"
-msgstr "Ð\93лавни"
+msgstr "Ð\9eÑ\81новни"
 
 msgctxt "#129"
 msgid "Slideshow"
@@ -551,7 +551,7 @@ msgstr "Не е наличен"
 
 msgctxt "#162"
 msgid "Tray open"
-msgstr "CD-то е отворено"
+msgstr "Дисковото устройство е отворено"
 
 msgctxt "#163"
 msgid "Reading"
@@ -567,7 +567,11 @@ msgstr "Има диск"
 
 msgctxt "#166"
 msgid "Skin"
-msgstr "Облик"
+msgstr "Облици"
+
+msgctxt "#167"
+msgid "Cancel file operations"
+msgstr "Прекъсване на действие с файлове"
 
 msgctxt "#168"
 msgid "%s- %s"
@@ -581,13 +585,17 @@ msgctxt "#170"
 msgid "Adjust display refresh rate to match video"
 msgstr "Синхронизирай честотата на екрана с видеото"
 
+msgctxt "#171"
+msgid "Sort title"
+msgstr "Заглавие за сортиране"
+
 msgctxt "#172"
 msgid "Release date"
 msgstr "Дата на издаване"
 
 msgctxt "#173"
 msgid "Display 4:3 videos as"
-msgstr "Режим Ð·Ð° Ð²Ð¸Ð´ÐµÐ°Ñ\82а във формат 4:3"
+msgstr "Режим Ð·Ð° Ð²Ð¸Ð´ÐµÐ¾Ñ\82о във формат 4:3"
 
 msgctxt "#175"
 msgid "Moods"
@@ -679,7 +687,7 @@ msgstr "Зареждане на детайлите за филма"
 
 msgctxt "#199"
 msgid "Web interface"
-msgstr "Уеб интерфейс"
+msgstr "Уеб интерфейси"
 
 msgctxt "#202"
 msgid "Tagline"
@@ -861,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Изберете целева папка"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Извеждай стерео сигнала до всички високоговорители"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Брой на каналите"
@@ -879,7 +883,7 @@ msgstr "CDDB"
 
 msgctxt "#256"
 msgid "Fetching CD information"
-msgstr "Изтегляне на информация за CD-то"
+msgstr "Изтегляне на информация за диска"
 
 msgctxt "#257"
 msgid "Error"
@@ -903,7 +907,7 @@ msgstr "Изчакване за започване..."
 
 msgctxt "#262"
 msgid "Scripts output"
-msgstr "Резултат от криптовете"
+msgstr "Резултат от скриптовете"
 
 msgctxt "#263"
 msgid "Allow control of XBMC via HTTP"
@@ -919,11 +923,11 @@ msgstr "Спри записа"
 
 msgctxt "#266"
 msgid "Sort by: Track"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Аудио запис"
+msgstr "Ð\9fодÑ\80едба: Аудио запис"
 
 msgctxt "#267"
 msgid "Sort by: Time"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Време"
+msgstr "Ð\9fодÑ\80едба: Време"
 
 msgctxt "#268"
 msgid "Sort by: Title"
@@ -931,11 +935,11 @@ msgstr "Сортиране : Заглавие"
 
 msgctxt "#269"
 msgid "Sort by: Artist"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Артист"
+msgstr "Ð\9fодÑ\80едба: Артист"
 
 msgctxt "#270"
 msgid "Sort by: Album"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Албум"
+msgstr "Ð\9fодÑ\80едба: Албум"
 
 msgctxt "#271"
 msgid "Top 100"
@@ -987,7 +991,7 @@ msgstr "Намерени са %i  елемента"
 
 msgctxt "#283"
 msgid "Search results"
-msgstr "Резултати от търсенето"
+msgstr "Резултат от търсенето"
 
 msgctxt "#284"
 msgid "No results found"
@@ -1067,7 +1071,7 @@ msgstr "Език"
 
 msgctxt "#305"
 msgid "Enabled"
-msgstr "Ð\92клÑ\8eÑ\87ено"
+msgstr "Ð\92клÑ\8eÑ\87ена"
 
 msgctxt "#306"
 msgid "Non-interleaved"
@@ -1279,7 +1283,7 @@ msgstr "Степен на затъмняване от скрийнсейвъра
 
 msgctxt "#363"
 msgid "Sort by: File"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Файл"
+msgstr "Ð\9fодÑ\80едба: Файл"
 
 msgctxt "#364"
 msgid "Dolby Digital (AC3) capable receiver"
@@ -1303,7 +1307,7 @@ msgstr "IMDb"
 
 msgctxt "#369"
 msgid "Title"
-msgstr "Заглавие"
+msgstr "Заглавия"
 
 msgctxt "#370"
 msgid "Thunderstorms"
@@ -1487,7 +1491,7 @@ msgstr "Не е налична"
 
 msgctxt "#417"
 msgid "View: Big icons"
-msgstr "Ð\92ид: Големи икони"
+msgstr "Ð\98зглед: Големи икони"
 
 msgctxt "#418"
 msgid "Low"
@@ -1507,7 +1511,7 @@ msgstr "Изтрий инф. за албума"
 
 msgctxt "#423"
 msgid "Delete CD information"
-msgstr "Изтрий инф. за CD-то"
+msgstr "Изтрий инф. за диска"
 
 msgctxt "#424"
 msgid "Select"
@@ -1519,7 +1523,7 @@ msgstr "Не е открита информация за албума"
 
 msgctxt "#426"
 msgid "No CD information found"
-msgstr "Не е открита информация за CD-то"
+msgstr "Не е открита информация за диска"
 
 msgctxt "#427"
 msgid "Disc"
@@ -1535,7 +1539,7 @@ msgstr "Моля, въведете следния диск"
 
 msgctxt "#430"
 msgid "Sort by: DVD#"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: DVD№"
+msgstr "Ð\9fодÑ\80едба: DVD№"
 
 msgctxt "#431"
 msgid "No cache"
@@ -1643,7 +1647,7 @@ msgstr "Режим"
 
 msgctxt "#457"
 msgid "Switch view"
-msgstr "Ð\9fÑ\80евклÑ\8eÑ\87и Ð²Ð¸да"
+msgstr "Ð\9fÑ\80евклÑ\8eÑ\87и Ð¸Ð·Ð³Ð»Ðµда"
 
 msgctxt "#459"
 msgid "Subs"
@@ -1693,10 +1697,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Заслуги"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Изкл."
@@ -1771,7 +1771,7 @@ msgstr "Пълна звукова височина"
 
 msgctxt "#495"
 msgid "Upsample videos to GUI resolution"
-msgstr "Ð\92Ñ\8aзпÑ\80оизвеждай Ð²Ð¸Ð´ÐµÐ°Ñ\82а в резолюцията на GUI (графичния интерфейс)"
+msgstr "Ð\92Ñ\8aзпÑ\80оизвеждай Ð²Ð¸Ð´ÐµÐ¾Ñ\82о в резолюцията на GUI (графичния интерфейс)"
 
 msgctxt "#496"
 msgid "Calibration"
@@ -1815,7 +1815,11 @@ msgstr "Зареждане на информация от файлове..."
 
 msgctxt "#507"
 msgid "Sort by: Usage"
-msgstr "Сорт. по: Употреба"
+msgstr "Подредба: Употреба"
+
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "Включи визуализацията"
 
 msgctxt "#511"
 msgid "Enable video mode switching"
@@ -1903,7 +1907,7 @@ msgstr "Въведете жанр"
 
 msgctxt "#534"
 msgid "View: %s"
-msgstr "Ð\92ид: %s"
+msgstr "Ð\98зглед: %s"
 
 msgctxt "#535"
 msgid "List"
@@ -1963,7 +1967,7 @@ msgstr "Смесвай многоканалното аудио до два ст
 
 msgctxt "#550"
 msgid "Sort by: %s"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: %s"
+msgstr "Ð\9fодÑ\80едба: %s"
 
 msgctxt "#551"
 msgid "Name"
@@ -2031,11 +2035,11 @@ msgstr "Артист на албум"
 
 msgctxt "#567"
 msgid "Play count"
-msgstr "Ð\91Ñ\80ой Ð²Ñ\8aзпÑ\80оизвеждания"
+msgstr "Ð\91Ñ\80ой Ð³Ð»Ðµдания"
 
 msgctxt "#568"
 msgid "Last played"
-msgstr "Ð\9fоÑ\81ледно Ð²Ñ\8aзпÑ\80оизвеждане"
+msgstr "Ð\9fоÑ\81ледно Ð³Ð»ÐµÐ´Ð°Ð½ Ð½Ð°"
 
 msgctxt "#569"
 msgid "Comment"
@@ -2067,7 +2071,7 @@ msgstr "В процес"
 
 msgctxt "#576"
 msgid "Times played"
-msgstr "Ð\91Ñ\80ой Ð²Ñ\8aзпÑ\80оизвеждания"
+msgstr "Ð\91Ñ\80ой Ð³Ð»Ðµдания"
 
 msgctxt "#577"
 msgid "Date Taken"
@@ -2083,11 +2087,11 @@ msgstr "Метод на сортиране"
 
 msgctxt "#582"
 msgid "View mode"
-msgstr "Ð\92ид (режим)"
+msgstr "Ð\98зглед (режим)"
 
 msgctxt "#583"
 msgid "Remember views for different folders"
-msgstr "РазлиÑ\87ен Ð²Ð¸д за отделните папки"
+msgstr "РазлиÑ\87ен Ð¸Ð·Ð³Ð»Ðµд за отделните папки"
 
 msgctxt "#584"
 msgid "Ascending"
@@ -2147,7 +2151,7 @@ msgstr "Повтори: Всички"
 
 msgctxt "#600"
 msgid "Rip audio CD"
-msgstr "Извличане на музиката в CD-то"
+msgstr "Извличане на музика от аудио диск"
 
 msgctxt "#601"
 msgid "Medium"
@@ -2189,6 +2193,10 @@ msgctxt "#611"
 msgid "Enter number"
 msgstr "Въведете номер"
 
+msgctxt "#612"
+msgid "Bits/sample"
+msgstr "Бит/мостра"
+
 msgctxt "#614"
 msgid "Virtual folder"
 msgstr "Виртуална папка"
@@ -2217,9 +2225,13 @@ msgctxt "#625"
 msgid "All songs of"
 msgstr "Всички песни на"
 
+msgctxt "#626"
+msgid "In progress TV shows"
+msgstr "Гледани сериали"
+
 msgctxt "#629"
 msgid "View mode"
-msgstr "Ð\92ид (режим)"
+msgstr "Ð\98зглед (режим)"
 
 msgctxt "#630"
 msgid "Normal"
@@ -2249,6 +2261,14 @@ msgctxt "#636"
 msgid "Custom"
 msgstr "Персонално"
 
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "Регулиране на ReplayGain нивото"
+
 msgctxt "#639"
 msgid "Use track levels"
 msgstr "С нива от песните"
@@ -2257,6 +2277,14 @@ msgctxt "#640"
 msgid "Use album levels"
 msgstr "С нива от албумите"
 
+msgctxt "#641"
+msgid "PreAmp Level - ReplayGained files"
+msgstr "Ниво за файлове с ReplayGain"
+
+msgctxt "#642"
+msgid "PreAmp Level - Non ReplayGained files"
+msgstr "Ниво за файлове без ReplayGain"
+
 msgctxt "#644"
 msgid "Crop black bars"
 msgstr "Изрязване на черните ленти"
@@ -2295,7 +2323,7 @@ msgstr "Години"
 
 msgctxt "#653"
 msgid "Update library"
-msgstr "Ð\90кÑ\82Ñ\83ализиÑ\80ай библиотеката"
+msgstr "Ð\9eбнови библиотеката"
 
 msgctxt "#654"
 msgid "Show debug info"
@@ -2385,6 +2413,10 @@ msgctxt "#713"
 msgid "HTTP proxy"
 msgstr "HTTP proxy"
 
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Назначение"
+
 msgctxt "#716"
 msgid "Automatic (DHCP)"
 msgstr "Автоматично (DHCP) [динамично конфигуриране]"
@@ -2491,7 +2523,7 @@ msgstr "Файлове"
 
 msgctxt "#745"
 msgid "No scanned information for this view"
-msgstr "Ð\9dÑ\8fма Ñ\81каниÑ\80ана Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f Ð·Ð° Ñ\82ози Ð²Ð¸д"
+msgstr "Ð\9dÑ\8fма Ñ\81каниÑ\80ана Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f Ð·Ð° Ñ\82ози Ð¸Ð·Ð³Ð»Ðµд"
 
 msgctxt "#746"
 msgid "Please turn off library mode"
@@ -2535,7 +2567,7 @@ msgstr "Редактирай дълбочина на пътя"
 
 msgctxt "#759"
 msgid "View: Big list"
-msgstr "Ð\92ид: Ð\93олÑ\8fм Ð»Ð¸Ñ\81Ñ\82"
+msgstr "Ð\98зглед: Ð\93олÑ\8fм Ñ\81пиÑ\81Ñ\8aк"
 
 msgctxt "#760"
 msgid "Yellow"
@@ -2593,6 +2625,10 @@ msgctxt "#776"
 msgid "Wireless network name (ESSID)"
 msgstr "Име на безжичната мрежа (ESSID)"
 
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Парола на безжична мрежа"
+
 msgctxt "#779"
 msgid "Save and apply network interface settings"
 msgstr "Запиши и приложи настройките на мрежовия интерфейс"
@@ -2675,7 +2711,7 @@ msgstr "Интернет достъп"
 
 msgctxt "#799"
 msgid "Library Update"
-msgstr "Ð\9eпÑ\80еÑ\81нÑ\8fване библиотека"
+msgstr "Ð\9eбновÑ\8fване Ð½Ð° библиотека"
 
 msgctxt "#800"
 msgid "Music library needs to rescan tags from files."
@@ -2683,7 +2719,7 @@ msgstr "Музикалната библиотека изисква повтор
 
 msgctxt "#801"
 msgid "Would you like to scan now?"
-msgstr "Ð\98Ñ\81каÑ\82е Ð»Ð¸ Ð´Ð° Ñ\81каниÑ\80аÑ\82е сега?"
+msgstr "Ð\94а Ð±Ñ\8aдаÑ\82 Ð»Ð¸ Ñ\81каниÑ\80ани сега?"
 
 msgctxt "#850"
 msgid "Invalid port number entered"
@@ -3057,6 +3093,10 @@ msgctxt "#1260"
 msgid "Announce these services to other systems via Zeroconf"
 msgstr "Обяви, чрез Zeroconf, горните услуги пред други системи"
 
+msgctxt "#1269"
+msgid "Allow volume control"
+msgstr "Включи регулатора на звука"
+
 msgctxt "#1270"
 msgid "Allow XBMC to receive AirPlay content"
 msgstr "Разреши приемането на AirPlay съдържание"
@@ -3065,6 +3105,10 @@ msgctxt "#1271"
 msgid "Device name"
 msgstr "Име на устройството"
 
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Защити с парола"
+
 msgctxt "#1273"
 msgid "AirPlay"
 msgstr "AirPlay"
@@ -3073,6 +3117,10 @@ msgctxt "#1274"
 msgid "AirTunes"
 msgstr "AirTunes"
 
+msgctxt "#1275"
+msgid "Filter %s"
+msgstr "Филтър %s"
+
 msgctxt "#1300"
 msgid "Custom audio device"
 msgstr "Задаено аудио устройство"
@@ -3181,6 +3229,10 @@ msgctxt "#1423"
 msgid "Mist"
 msgstr "Мъгла"
 
+msgctxt "#1424"
+msgid "Overcast"
+msgstr "Плътна облачност"
+
 msgctxt "#1426"
 msgid "Hail"
 msgstr "Градушка"
@@ -3201,6 +3253,10 @@ msgctxt "#1432"
 msgid "Sand"
 msgstr "Пясък"
 
+msgctxt "#1434"
+msgid "Whirls"
+msgstr "Вихрушки"
+
 msgctxt "#1435"
 msgid "Sandstorm"
 msgstr "Пясъчна буря"
@@ -3233,6 +3289,10 @@ msgctxt "#1448"
 msgid "Precipitation"
 msgstr "Валеж"
 
+msgctxt "#1449"
+msgid "Partial"
+msgstr "Частично"
+
 msgctxt "#1450"
 msgid "Put display to sleep when idle"
 msgstr "\"Приспиване\" на екрана при бездействие"
@@ -3367,7 +3427,7 @@ msgstr "Основни"
 
 msgctxt "#10037"
 msgid "Standard"
-msgstr "Стандарт"
+msgstr "Стандартни"
 
 msgctxt "#10038"
 msgid "Advanced"
@@ -3377,6 +3437,10 @@ msgctxt "#10039"
 msgid "Expert"
 msgstr "За експерти"
 
+msgctxt "#10040"
+msgid "Add-on browser"
+msgstr "Баузър за добавки"
+
 msgctxt "#10041"
 msgid "Reset above settings to default"
 msgstr "Нулиране на горните настройки"
@@ -3405,6 +3469,10 @@ msgctxt "#10047"
 msgid "Try changing the setting level to see additional categories and settings."
 msgstr "Променете нивото на настройките, за да видите допълнителните категории от настройки."
 
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "Прозорец за напредъка"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "Браузер на файлове"
@@ -3427,7 +3495,7 @@ msgstr "Заключи настройките"
 
 msgctxt "#10132"
 msgid "Content settings"
-msgstr "Настроки на съдържанието"
+msgstr "Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð½Ð° Ñ\81Ñ\8aдÑ\8aÑ\80жаниеÑ\82о"
 
 msgctxt "#10134"
 msgid "Favourites"
@@ -3727,7 +3795,7 @@ msgstr "Достигнахте лимита на опитите за отклю
 
 msgctxt "#12347"
 msgid "The system will now power down."
-msgstr "Сега Ñ\81иÑ\81Ñ\82емаÑ\82а Ñ\89е Ñ\81е Ð¸Ð·ÐºÐ»Ñ\8eÑ\87и."
+msgstr "СиÑ\81Ñ\82емаÑ\82а Ñ\89е Ñ\81е Ð¸Ð·ÐºÐ»Ñ\8eÑ\87и Ñ\81ега."
 
 msgctxt "#12348"
 msgid "Item locked"
@@ -3735,7 +3803,11 @@ msgstr "Заключен елемент"
 
 msgctxt "#12349"
 msgid "Updating video library art"
-msgstr "Актуализиране кеша на картинкиите от видео библиотеката"
+msgstr "Актуализиране кеша на картинките от видео библиотеката"
+
+msgctxt "#12350"
+msgid "Processing %s"
+msgstr "Обработване на %s"
 
 msgctxt "#12351"
 msgid "The art cache in your video library needs updating."
@@ -4071,7 +4143,7 @@ msgstr "VDPAU ниво на Upscaling с високо качество"
 
 msgctxt "#13123"
 msgid "Keep skin?"
-msgstr "Ð\96елаеÑ\82е Ð´Ð° Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82е Ñ\82ози Ð¾Ð±Ð»Ð¸Ðº?"
+msgstr "Ð\96елаеÑ\82е Ð»Ð¸ Ð´Ð° Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82е Ð¾Ð±Ð»Ð¸ÐºÐ°?"
 
 msgctxt "#13130"
 msgid "Blank other displays"
@@ -4303,7 +4375,7 @@ msgstr "Скорост на вентилатора"
 
 msgctxt "#13301"
 msgid "Auto temperature control"
-msgstr "Автоматично контролиране на температа"
+msgstr "Автоматично контролиране на температурата"
 
 msgctxt "#13302"
 msgid "Fan speed override"
@@ -4373,6 +4445,10 @@ msgctxt "#13318"
 msgid "Recursive slideshow"
 msgstr "Рекурсивно слайдшоу"
 
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "В случаен ред"
+
 msgctxt "#13320"
 msgid "Stereo"
 msgstr "Стерео"
@@ -4539,7 +4615,7 @@ msgstr "Сила на звука"
 
 msgctxt "#13377"
 msgid "Default view mode"
-msgstr "Стандартен режим на вида"
+msgstr "Стандартен изглед"
 
 msgctxt "#13378"
 msgid "Default brightness"
@@ -4847,7 +4923,7 @@ msgstr "Добави картинка"
 
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
-msgstr "Пауза при промя на честота на обновяване"
+msgstr "Пауза при промяна честота на обновяване"
 
 msgctxt "#13551"
 msgid "Off"
@@ -4895,7 +4971,7 @@ msgstr "Универсално дистанционно"
 
 msgctxt "#13613"
 msgid "Multi Remote (Harmony)"
-msgstr "Multi Remote (Harmony)"
+msgstr "Универсално дистанционно (Harmony)"
 
 msgctxt "#13620"
 msgid "Apple Remote Error"
@@ -4943,7 +5019,7 @@ msgstr "Автопревключване на миниатюри, когато"
 
 msgctxt "#14011"
 msgid "Enable auto switching to thumbs view"
-msgstr "Ð\90вÑ\82опÑ\80евклÑ\8eÑ\87ване Ð½Ð° Ð²Ð¸д с миниатюри"
+msgstr "Ð\90вÑ\82опÑ\80евклÑ\8eÑ\87ване Ð½Ð° Ð¸Ð·Ð³Ð»Ðµд с миниатюри"
 
 msgctxt "#14012"
 msgid "- Use large icons"
@@ -5259,12 +5335,20 @@ msgstr "Възпроизвеждане"
 
 msgctxt "#14099"
 msgid "Eject disc when CD ripping is complete"
-msgstr "Отваряне на дисковото устройство (CD-то) след приключване"
+msgstr "Отваряне на дисковото устройство след приключване"
 
 msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Спиране извличането на диска"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Източникът не е наличен"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Да останат"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Премахни"
@@ -5343,7 +5427,7 @@ msgstr "Възпроизведи чрез..."
 
 msgctxt "#15215"
 msgid "Hide file names in thumbs view"
-msgstr "Ð\9fÑ\80и Ð²Ð¸д с миниатюри скрий имената на файловете"
+msgstr "Ð\9fÑ\80и Ð¸Ð·Ð³Ð»Ðµд с миниатюри скрий имената на файловете"
 
 msgctxt "#15216"
 msgid "Play in party mode"
@@ -5527,11 +5611,11 @@ msgstr "Всички видеа"
 
 msgctxt "#16101"
 msgid "Unwatched"
-msgstr "Негледани"
+msgstr "Ð\9dеизгледани"
 
 msgctxt "#16102"
 msgid "Watched"
-msgstr "Ð\93ледани"
+msgstr "Ð\98згледани"
 
 msgctxt "#16103"
 msgid "Mark as watched"
@@ -5545,6 +5629,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "Редактирай заглавието"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Управление..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "Заглавие за сортиране"
@@ -5627,7 +5715,7 @@ msgstr "Temporal/Spatial"
 
 msgctxt "#16312"
 msgid "(VDPAU)Noise Reduction"
-msgstr "(VDPAU)Намаляване на шумa"
+msgstr "(VDPAU)Намаляване на шума"
 
 msgctxt "#16313"
 msgid "(VDPAU)Sharpness"
@@ -5669,6 +5757,10 @@ msgctxt "#16324"
 msgid "Software Blend"
 msgstr "Software Blend"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-processing"
@@ -5709,6 +5801,10 @@ msgctxt "#19004"
 msgid "Importing EPG from clients"
 msgstr "Внасяне на EPG от клиентите"
 
+msgctxt "#19005"
+msgid "PVR stream information"
+msgstr "Информация за PVR протокола"
+
 msgctxt "#19006"
 msgid "Receiving device"
 msgstr "Приемащо устройство"
@@ -5733,6 +5829,14 @@ msgctxt "#19011"
 msgid "UNC"
 msgstr "UNC"
 
+msgctxt "#19012"
+msgid "PVR Backend"
+msgstr "PVR сървър"
+
+msgctxt "#19013"
+msgid "Free to air"
+msgstr "Без шифриране"
+
 msgctxt "#19014"
 msgid "Fixed"
 msgstr "Фиксирана"
@@ -5741,6 +5845,10 @@ msgctxt "#19015"
 msgid "Encryption"
 msgstr "Шифроване"
 
+msgctxt "#19016"
+msgid "PVR Backend %i - %s"
+msgstr "PVR сървър %i - %s"
+
 msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Записи от ТВ"
@@ -5779,7 +5887,11 @@ msgstr "Добави брояч"
 
 msgctxt "#19027"
 msgid "No search results"
-msgstr "Няма резултати от търсенето"
+msgstr "Няма резултат от търсенето"
+
+msgctxt "#19028"
+msgid "No EPG entries"
+msgstr "Няма EPG записи"
 
 msgctxt "#19029"
 msgid "Channel"
@@ -5839,7 +5951,7 @@ msgstr "Записване"
 
 msgctxt "#19044"
 msgid "Please check your configuration or check the log for details."
-msgstr "Ð\9fÑ\80овеÑ\80еÑ\82е ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\8fÑ\82а Ð¸Ð»Ð¸ Ð»Ð¾Ð³а за детайли."
+msgstr "Ð\9fÑ\80овеÑ\80еÑ\82е ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\8fÑ\82а Ð¸Ð»Ð¸ Ð´Ð½ÐµÐ²Ð½Ð¸Ðºа за детайли."
 
 msgctxt "#19046"
 msgid "New channel"
@@ -5847,7 +5959,7 @@ msgstr "Нов канал"
 
 msgctxt "#19047"
 msgid "Programme info"
-msgstr "Ð\9fÑ\80огÑ\80ама Ð¸Ð½Ñ\84о"
+msgstr "Ð\98нÑ\84. Ð·Ð° Ð¿Ñ\80огÑ\80амаÑ\82а"
 
 msgctxt "#19048"
 msgid "Group management"
@@ -5929,6 +6041,14 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19071"
+msgid "EPG update interval"
+msgstr "Интервал на EPG обновяване"
+
+msgctxt "#19072"
+msgid "Do not store the EPG in the database"
+msgstr "Не съхранявай EPG в базата данни"
+
 msgctxt "#19073"
 msgid "Delay channel switch"
 msgstr "Забавяне на превключването"
@@ -6053,6 +6173,10 @@ msgctxt "#19106"
 msgid "Next timer on"
 msgstr "Следващ брояч"
 
+msgctxt "#19107"
+msgid "at"
+msgstr "в"
+
 msgctxt "#19109"
 msgid "Couldn't save timer. Check the log for details."
 msgstr "Незапазен брояч. Проверете дневника за детайли."
@@ -6093,6 +6217,18 @@ msgctxt "#19122"
 msgid "This timer is still recording. Are you sure you want to delete this timer?"
 msgstr "Този брояч записва. Да го изтрия ли?"
 
+msgctxt "#19123"
+msgid "Free to air channels only"
+msgstr "Само отворени канали"
+
+msgctxt "#19124"
+msgid "Ignore present timers"
+msgstr "Игнорирай съществуващите таймери"
+
+msgctxt "#19125"
+msgid "Ignore present recordings"
+msgstr "Игнорирай съществуващите записи"
+
 msgctxt "#19126"
 msgid "Start time"
 msgstr "Време на започване"
@@ -6125,6 +6261,14 @@ msgctxt "#19133"
 msgid "Search string"
 msgstr "Низ за търсене"
 
+msgctxt "#19134"
+msgid "Include description"
+msgstr "Търси в описанията"
+
+msgctxt "#19135"
+msgid "Case sensitive"
+msgstr "Различаване на малки и главни букви"
+
 msgctxt "#19136"
 msgid "Channel unavailable"
 msgstr "Каналът е недостъпен"
@@ -6229,6 +6373,10 @@ msgctxt "#19164"
 msgid "Cannot start recording. Check the log for details."
 msgstr "Записът не може да бъде започнат. Проверете дневника за детайли."
 
+msgctxt "#19165"
+msgid "Switch"
+msgstr "Превключи"
+
 msgctxt "#19166"
 msgid "PVR information"
 msgstr "PVR информация"
@@ -6237,6 +6385,10 @@ msgctxt "#19167"
 msgid "Scan for missing icons"
 msgstr "Сканирай за липсващи икони"
 
+msgctxt "#19169"
+msgid "Hide video information box"
+msgstr "Скрий информацията за видеото"
+
 msgctxt "#19172"
 msgid "Instant recording duration"
 msgstr "Продължителност на незабавните записи"
@@ -6249,6 +6401,14 @@ msgctxt "#19174"
 msgid "Default recording lifetime"
 msgstr "Стандартен срок за съхранение на записите"
 
+msgctxt "#19175"
+msgid "Margin at the start of a recording"
+msgstr "Интервал в началото на записа"
+
+msgctxt "#19176"
+msgid "Margin at the end of a recording"
+msgstr "Интервал в края на записа"
+
 msgctxt "#19177"
 msgid "Playback"
 msgstr "Възпроизвеждане"
@@ -6305,10 +6465,18 @@ msgctxt "#19195"
 msgid "Client actions"
 msgstr "Клиентски действия"
 
+msgctxt "#19196"
+msgid "PVR client specific actions"
+msgstr "Действия на записите, специфични за клиента"
+
 msgctxt "#19197"
 msgid "Recording started on: %s"
 msgstr "Записът стартиран на: %s"
 
+msgctxt "#19198"
+msgid "Recording finished on: %s"
+msgstr "Записът приключи на: %s"
+
 msgctxt "#19199"
 msgid "Channel manager"
 msgstr "Диспечер на каналите"
@@ -6345,6 +6513,10 @@ msgctxt "#19208"
 msgid "Enter the name of the new channel"
 msgstr "Въведете име на новия канал"
 
+msgctxt "#19209"
+msgid "XBMC virtual backend"
+msgstr "Виртуален сървър XBMC"
+
 msgctxt "#19210"
 msgid "Client"
 msgstr "Клиент"
@@ -6353,6 +6525,22 @@ msgctxt "#19211"
 msgid "Delete channel"
 msgstr "Изтрий канала"
 
+msgctxt "#19212"
+msgid "This list contains changes"
+msgstr "В списъка има промени "
+
+msgctxt "#19213"
+msgid "Select backend"
+msgstr "Изберете сървър"
+
+msgctxt "#19214"
+msgid "Enter a valid URL for the new channel"
+msgstr "Въведете валиден адрес на новия канал"
+
+msgctxt "#19215"
+msgid "The PVR backend does not support timers."
+msgstr "PVR сървъра не поддържа таймери."
+
 msgctxt "#19216"
 msgid "All radio channels"
 msgstr "Всички радио канали"
@@ -6403,11 +6591,15 @@ msgstr "Скривай OSD за канала при превключване н
 
 msgctxt "#19232"
 msgid "Clear search results"
-msgstr "Ð\98зÑ\87иÑ\81Ñ\82и Ñ\80езÑ\83лÑ\82аÑ\82иÑ\82е от търсенето"
+msgstr "Ð\98зÑ\87иÑ\81Ñ\82и Ñ\80езÑ\83лÑ\82аÑ\82а от търсенето"
 
 msgctxt "#19233"
 msgid "Display a notification on timer updates"
-msgstr "Уведомяване при обновяване на брояч"
+msgstr "Известяване при обновяване на брояч"
+
+msgctxt "#19235"
+msgid "PVR manager is starting up"
+msgstr "PVR мениджъра се стартира"
 
 msgctxt "#19236"
 msgid "Loading channels from clients"
@@ -6421,6 +6613,14 @@ msgctxt "#19238"
 msgid "Loading recordings from clients"
 msgstr "Зареждане на записи от клиенти"
 
+msgctxt "#19239"
+msgid "Starting background threads"
+msgstr "Стартиране на фонови процеси"
+
+msgctxt "#19241"
+msgid "The PVR manager has been enabled without any"
+msgstr "PVR мениджъра е включен без"
+
 msgctxt "#19245"
 msgid "Set wakeup command (cmd [timestamp])"
 msgstr "Задайте команда за събуждане (cmd [timestamp])"
@@ -6441,10 +6641,18 @@ msgctxt "#19249"
 msgid "Filter channels"
 msgstr "Филтриране на канали"
 
+msgctxt "#19250"
+msgid "Loading EPG from database"
+msgstr "Зареждане на EPG от базата данни"
+
 msgctxt "#19251"
 msgid "Update EPG information"
 msgstr "Актуализиране на EPG информацията"
 
+msgctxt "#19254"
+msgid "EPG update failed for channel"
+msgstr "Не бе актуализиран EPG за канала"
+
 msgctxt "#19255"
 msgid "Start recording"
 msgstr "Начало на запис"
@@ -6465,6 +6673,10 @@ msgctxt "#19259"
 msgid "Parental control"
 msgstr "Родителски контрол"
 
+msgctxt "#19260"
+msgid "Unlock duration"
+msgstr "Период за отключване"
+
 msgctxt "#19261"
 msgid "Change PIN"
 msgstr "Променете кода"
@@ -6533,6 +6745,10 @@ msgctxt "#19280"
 msgid "Client specific settings"
 msgstr "Настройки, специфични за клиента"
 
+msgctxt "#19499"
+msgid "Other/Unknown"
+msgstr "Друго/Нейзвестно"
+
 msgctxt "#19500"
 msgid "Movie/Drama"
 msgstr "Филм/Драма"
@@ -6579,12 +6795,16 @@ msgstr "Новини/Прогноза за времето"
 
 msgctxt "#19519"
 msgid "Documentary"
-msgstr "Докуметален"
+msgstr "Документален"
 
 msgctxt "#19520"
 msgid "Discussion/Interview/Debate"
 msgstr "Дискусии/Интервюта/Дебати"
 
+msgctxt "#19535"
+msgid "Talk Show"
+msgstr "Токшоу"
+
 msgctxt "#19548"
 msgid "Sports"
 msgstr "Спорт"
@@ -6629,6 +6849,14 @@ msgctxt "#19559"
 msgid "Martial Sports"
 msgstr "Бойни спортове"
 
+msgctxt "#19566"
+msgid "Entertainment Programmes for 6 to 14"
+msgstr "Развлекателни програми от 6 до 14"
+
+msgctxt "#19567"
+msgid "Entertainment Programmes for 10 to 16"
+msgstr "Развлекателни програми от 10 до 16"
+
 msgctxt "#19568"
 msgid "Informational/Educational/School Programme"
 msgstr "Информационни/Образователни/Училищни програми"
@@ -6665,6 +6893,10 @@ msgctxt "#19596"
 msgid "Arts/Culture"
 msgstr "Изкуства/Култура"
 
+msgctxt "#19598"
+msgid "Fine Arts"
+msgstr "Изящни изкуства"
+
 msgctxt "#19599"
 msgid "Religion"
 msgstr "Религия"
@@ -6681,6 +6913,10 @@ msgctxt "#19602"
 msgid "Film/Cinema"
 msgstr "Филм/Кино"
 
+msgctxt "#19603"
+msgid "Experimental Film/Video"
+msgstr "Експериментален филм/видео"
+
 msgctxt "#19607"
 msgid "Fashion"
 msgstr "Мода"
@@ -6729,6 +6965,10 @@ msgctxt "#19645"
 msgid "Tourism/Travel"
 msgstr "Туризъм/Пътешествия"
 
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Авто Мото"
+
 msgctxt "#19648"
 msgid "Fitness &amp; Health"
 msgstr "Фитнес и здраве"
@@ -6745,6 +6985,22 @@ msgctxt "#19651"
 msgid "Gardening"
 msgstr "Градинарство"
 
+msgctxt "#19660"
+msgid "Special Characteristics"
+msgstr "Специални характеристики"
+
+msgctxt "#19661"
+msgid "Original Language"
+msgstr "Оригинален език"
+
+msgctxt "#19663"
+msgid "Unpublished"
+msgstr "Непубликувано"
+
+msgctxt "#19664"
+msgid "Live Broadcast"
+msgstr "Директно излъчване"
+
 msgctxt "#19676"
 msgid "Drama"
 msgstr "Драма"
@@ -6831,7 +7087,7 @@ msgstr "Желаете ли играта да бъде стартирана?"
 
 msgctxt "#20014"
 msgid "Sort by: Playlist"
-msgstr "СоÑ\80Ñ\82. Ð¿Ð¾: Плейлист"
+msgstr "Ð\9fодÑ\80едба: Плейлист"
 
 msgctxt "#20015"
 msgid "Remote thumb"
@@ -6879,7 +7135,7 @@ msgstr "Заключи прозореца на музиката"
 
 msgctxt "#20039"
 msgid "Lock videos window"
-msgstr "Ð\97аклÑ\8eÑ\87и Ð¿Ñ\80озоÑ\80еÑ\86а Ð½Ð° Ð²Ð¸Ð´ÐµÐ°Ñ\82а"
+msgstr "Ð\97аклÑ\8eÑ\87и Ð¿Ñ\80озоÑ\80еÑ\86а Ð½Ð° Ð²Ð¸Ð´ÐµÐ¾ Ñ\84айловеÑ\82е"
 
 msgctxt "#20040"
 msgid "Lock pictures window"
@@ -7227,7 +7483,7 @@ msgstr "Отписване"
 
 msgctxt "#20128"
 msgid "Go to root"
-msgstr "Ð\9eÑ\82иди Ð² Ð¾Ñ\81новнаÑ\82а"
+msgstr "Ð\9aÑ\8aм Ð² Ð¾Ñ\81новнаÑ\82а Ð¿Ð°Ð¿Ðºа"
 
 msgctxt "#20129"
 msgid "Weave"
@@ -7455,7 +7711,7 @@ msgstr "Ротирай снимките въз основа на EXIF инфор
 
 msgctxt "#20185"
 msgid "Use poster view styles for TV shows"
-msgstr "Ð\97а Ð¢Ð\92 Ð¡ÐµÑ\80иали Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹ Ð²Ð¸д с плакати"
+msgstr "Ð\97а Ð¢Ð\92 Ð¡ÐµÑ\80иали Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹ Ð¸Ð·Ð³Ð»Ðµд с плакати"
 
 msgctxt "#20186"
 msgid "Please wait"
@@ -7467,7 +7723,7 @@ msgstr "UPnP"
 
 msgctxt "#20188"
 msgid "Announce library updates via UPnP"
-msgstr "Ð\9eбÑ\8fвÑ\8fване Ð°ÐºÑ\82Ñ\83ализаÑ\86ииÑ\82е на библиотеката чрез UPnP"
+msgstr "Ð\9eбÑ\8fвÑ\8fване Ð¾Ð±Ð½Ð¾Ð²Ñ\8fванеÑ\82о на библиотеката чрез UPnP"
 
 msgctxt "#20189"
 msgid "Enable auto scrolling for plot & review"
@@ -7483,7 +7739,7 @@ msgstr "Водене на debug дневник"
 
 msgctxt "#20192"
 msgid "Download additional information during updates"
-msgstr "СвалÑ\8fй Ð´Ð¾Ð¿Ñ\8aлниÑ\82елна Ð¸Ð½Ñ\84. Ð¿Ñ\80и Ð°ÐºÑ\82Ñ\83ализиÑ\80ане на библиотеката"
+msgstr "СвалÑ\8fй Ð´Ð¾Ð¿Ñ\8aлниÑ\82елна Ð¸Ð½Ñ\84. Ð¿Ñ\80и Ð¾Ð±Ð½Ð¾Ð²Ñ\8fване на библиотеката"
 
 msgctxt "#20193"
 msgid "Default service for album information"
@@ -7631,7 +7887,7 @@ msgstr "Сканиране на филмите чрез \"%s\""
 
 msgctxt "#20318"
 msgid "Scanning music videos using %s"
-msgstr "СканиÑ\80ане Ð½Ð° Ð¼Ñ\83зикалниÑ\82е Ð²Ð¸Ð´ÐµÐ° чрез \"%s\""
+msgstr "СканиÑ\80ане Ð½Ð° Ð¼Ñ\83зикалниÑ\82е ÐºÐ»Ð¸Ð¿Ð¾Ð²Ðµ чрез \"%s\""
 
 msgctxt "#20319"
 msgid "Scanning tvshows using %s"
@@ -7811,7 +8067,7 @@ msgstr "ТВ Сериал"
 
 msgctxt "#20365"
 msgid "Episode plot"
-msgstr "Сюжет на епизода"
+msgstr "Сюжет на епизод"
 
 msgctxt "#20366"
 msgid "* All seasons"
@@ -7819,7 +8075,7 @@ msgstr "* Всички сезони"
 
 msgctxt "#20367"
 msgid "Hide watched"
-msgstr "Без гледаните"
+msgstr "Ð\91ез Ð¸Ð·Ð³Ð»ÐµÐ´Ð°Ð½Ð¸Ñ\82е"
 
 msgctxt "#20368"
 msgid "Prod code"
@@ -7827,7 +8083,7 @@ msgstr "Код на продукта"
 
 msgctxt "#20369"
 msgid "Show plot for unwatched items"
-msgstr "Ð\9fоказвай Ñ\81Ñ\8eжеÑ\82а Ð·Ð° Ð½ÐµÐ³Ð»ÐµÐ´Ð°Ð½Ð¸Ñ\82е ÐµÐ»ÐµÐ¼ÐµÐ½Ñ\82и"
+msgstr "Ð\9fоказвай Ñ\81Ñ\8eжеÑ\82а Ð·Ð° Ð½ÐµÐ¸Ð·Ð³Ð»ÐµÐ´Ð°Ð½Ð¸Ñ\82е"
 
 msgctxt "#20370"
 msgid "* Hidden to prevent spoilers *"
@@ -7871,7 +8127,7 @@ msgstr "Избраната папка съдържа един ТВ Сериал"
 
 msgctxt "#20380"
 msgid "Exclude selected folder from scans"
-msgstr "Ð\98зклÑ\8eÑ\87и Ð¸Ð·Ð±Ñ\80анаÑ\82а Ð¿Ð°Ð¿ÐºÐ° Ð¾Ñ\82 Ñ\81каниÑ\80аниÑ\8fÑ\82а"
+msgstr "Ð\98зклÑ\8eÑ\87и Ð¸Ð·Ð±Ñ\80анаÑ\82а Ð¿Ð°Ð¿ÐºÐ° Ð¾Ñ\82 Ñ\81каниÑ\80анеÑ\82о"
 
 msgctxt "#20381"
 msgid "Specials"
@@ -7959,7 +8215,7 @@ msgstr "Възпроизведи музикален клип"
 
 msgctxt "#20402"
 msgid "Download actor thumbnails when adding to library"
-msgstr "СвалÑ\8fй Ð¼Ð¸Ð½Ð¸Ð°Ñ\82Ñ\8eÑ\80и Ð½Ð° Ð°ÐºÑ\82Ñ\8cоÑ\80иÑ\82и при добавяне в библиотеката"
+msgstr "СвалÑ\8fй Ð¼Ð¸Ð½Ð¸Ð°Ñ\82Ñ\8eÑ\80и Ð½Ð° Ð°ÐºÑ\82Ñ\8cоÑ\80иÑ\82е при добавяне в библиотеката"
 
 msgctxt "#20403"
 msgid "Set actor thumb"
@@ -8017,6 +8273,10 @@ msgctxt "#20417"
 msgid "Writer"
 msgstr "Сценарист"
 
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Сценаристи"
+
 msgctxt "#20419"
 msgid "Replace file names with library titles"
 msgstr "Заменяй имената на файловете със заглавията от библиотеката"
@@ -8071,11 +8331,11 @@ msgstr "Презаписване на старите файлове?"
 
 msgctxt "#20432"
 msgid "Exclude path from library updates"
-msgstr "Ð\98зклÑ\8eÑ\87и Ð¿Ñ\8aÑ\82Ñ\8f Ð¾Ñ\82 Ð°ÐºÑ\82Ñ\83ализиÑ\80ания на библиотеката"
+msgstr "Ð\98зклÑ\8eÑ\87и Ð¿Ñ\8aÑ\82Ñ\8f Ð¾Ñ\82 Ð¾Ð±Ð½Ð¾Ð²Ñ\8fвания на библиотеката"
 
 msgctxt "#20433"
 msgid "Extract thumbnails and video information"
-msgstr "Ð\98звлиÑ\87ай Ð¼Ð¸Ð½Ð¸Ð°Ñ\82Ñ\8eÑ\80и Ð¸ Ð¸Ð½Ñ\84. Ð·Ð° Ð²Ð¸Ð´ÐµÐ°Ñ\82а"
+msgstr "Ð\98звлиÑ\87ай Ð¼Ð¸Ð½Ð¸Ð°Ñ\82Ñ\8eÑ\80и Ð¸ Ð¸Ð½Ñ\84. Ð·Ð° Ð²Ð¸Ð´ÐµÐ¾ Ñ\84айловеÑ\82е"
 
 msgctxt "#20434"
 msgid "Sets"
@@ -8083,7 +8343,7 @@ msgstr "Поредици"
 
 msgctxt "#20435"
 msgid "Combine split video items"
-msgstr "Ð\9eбединÑ\8fвай Ð¾Ñ\82делениете елементи на едно видео"
+msgstr "Ð\9eбединÑ\8fвай Ð¾Ñ\82делните елементи на едно видео"
 
 msgctxt "#20436"
 msgid "Export actor thumbs?"
@@ -8111,7 +8371,7 @@ msgstr "Отдалечен fanart"
 
 msgctxt "#20442"
 msgid "Change content"
-msgstr "Промени съдържанието"
+msgstr "Промяна на съдържанието"
 
 msgctxt "#20443"
 msgid "Do you want to refresh info for all"
@@ -8203,7 +8463,7 @@ msgstr "Избери \"%s\""
 
 msgctxt "#20465"
 msgid "Manage movie set"
-msgstr "УпÑ\80авление Ð½Ð° Ð¿Ðµредица"
+msgstr "УпÑ\80авление Ð½Ð° Ð¿Ð¾редица"
 
 msgctxt "#20466"
 msgid "Select movie set"
@@ -8215,7 +8475,7 @@ msgstr "Без (Премахване от \"%s\")"
 
 msgctxt "#20468"
 msgid "Add movie to a new set"
-msgstr "Ð\94обавÑ\8fне ÐºÑ\8aм Ð½ова поредица"
+msgstr "Ð\9dова поредица"
 
 msgctxt "#20469"
 msgid "Keep current set (%s)"
@@ -8277,10 +8537,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Премахни споделения медиен ресурс"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка за субтитри"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Премести и промени папката за субтитри"
@@ -8631,7 +8887,7 @@ msgstr "Кеш паметта е запълнена"
 
 msgctxt "#21455"
 msgid "Cache filled before reaching required amount for continous playback"
-msgstr "Ð\97апÑ\8aлванена Ðµ Ð¿Ñ\80еди Ð´Ð° Ñ\81е ÐºÐµÑ\88иÑ\80аÑ\82 достатъчно данни за непрекъснато възпроизвеждане."
+msgstr "Ð\9aеÑ\88Ñ\8aÑ\82 Ðµ Ð·Ð°Ð¿Ñ\8aлнен Ð¿Ñ\80еди Ð¿Ñ\80оÑ\87иÑ\82анеÑ\82о Ð½Ð° достатъчно данни за непрекъснато възпроизвеждане."
 
 msgctxt "#21456"
 msgid "External storage"
@@ -8649,10 +8905,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "смесено"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Позиция на субтитрите"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Фиксирана"
@@ -8687,7 +8939,7 @@ msgstr "%s до %s"
 
 msgctxt "#21600"
 msgid "Prefer external subtitles"
-msgstr "Ð\9fÑ\80иоÑ\80иÑ\82изиÑ\80ай външните субтитри"
+msgstr "Ð\9fÑ\80едимÑ\81Ñ\82во Ð½Ð° външните субтитри"
 
 msgctxt "#21601"
 msgid "Prefer external subtitles to internal ones"
@@ -8783,7 +9035,7 @@ msgstr "Exposure bias"
 
 msgctxt "#21832"
 msgid "Exposure mode"
-msgstr "Rежим на експозиция"
+msgstr "Режим на експозиция"
 
 msgctxt "#21833"
 msgid "Flash used"
@@ -8909,6 +9161,10 @@ msgctxt "#21877"
 msgid "Date created"
 msgstr "Дата на създаване"
 
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "Спешност"
+
 msgctxt "#21879"
 msgid "Country code"
 msgstr "Код на държавата"
@@ -8959,7 +9215,7 @@ msgstr "Изберете артист"
 
 msgctxt "#21891"
 msgid "Artist information"
-msgstr "Информация за артис"
+msgstr "Информация за артиста"
 
 msgctxt "#21892"
 msgid "Instruments"
@@ -8999,11 +9255,11 @@ msgstr "Роден/Формиран"
 
 msgctxt "#22000"
 msgid "Update library on startup"
-msgstr "Ð\90кÑ\82Ñ\83ализиÑ\80ай библиотеката при всяко стартиране"
+msgstr "Ð\9eбновÑ\8fвай библиотеката при всяко стартиране"
 
 msgctxt "#22001"
 msgid "Hide progress of library updates"
-msgstr "СкÑ\80ивай Ð½Ð°Ð¿Ñ\80едÑ\8aка Ð¿Ñ\80и Ð°ÐºÑ\82Ñ\83ализиÑ\80ане на библиотеката"
+msgstr "СкÑ\80ивай Ð½Ð°Ð¿Ñ\80едÑ\8aка Ð¿Ñ\80и Ð¾Ð±Ð½Ð¾Ð²Ñ\8fване на библиотеката"
 
 msgctxt "#22002"
 msgid "DNS suffix"
@@ -9197,6 +9453,10 @@ msgctxt "#23054"
 msgid "Running"
 msgstr "Изпълнява се"
 
+msgctxt "#23055"
+msgid "Scale Teletext to 4:3"
+msgstr "Мащабирай телетекста до 4:3"
+
 msgctxt "#23100"
 msgid "External Player Active"
 msgstr "Активен е външен плейър"
@@ -9519,7 +9779,7 @@ msgstr "Повредена"
 
 msgctxt "#24099"
 msgid "Would you like to switch to this skin?"
-msgstr "Ð\96елаеÑ\82е Ð»Ð¸ Ð´Ð° Ð¿Ñ\80евклÑ\8eÑ\87иÑ\82е Ð½Ð° Ñ\82ози Ð¾Ð±Ð»Ð¸Ðº?"
+msgstr "Ð\9fÑ\80евклÑ\8eÑ\87ване Ð½Ð° Ð¾Ð±Ð»Ð¸ÐºÐ°?"
 
 msgctxt "#24100"
 msgid "To use this feature you must download an Add-on:"
@@ -9585,6 +9845,26 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Записвай субтитрите в папката на филма"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Услуга за ТВ сериали"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Изберете коя услуга да се ползва при стандартно търсене на субтитри за ТВ сериал"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Услуга за филми"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Изберете коя услуга да се ползва при стандартно търсене на субтитри за филм"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Въведете низ за търсене"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Известия"
@@ -9823,7 +10103,7 @@ msgstr "Настройване на"
 
 msgctxt "#33060"
 msgid "Power"
-msgstr "Ð\9cоÑ\89ноÑ\81Ñ\82"
+msgstr "Ð\98зклÑ\8eÑ\87и..."
 
 msgctxt "#33061"
 msgid "Menu"
@@ -9969,10 +10249,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурация на високоговорителите"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10015,11 +10291,11 @@ 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 минути] - действа като [Винаги], но след избрания период от време преустановява извеждането на сигнал. [Изключено] - аудио извода се привежда в суспендирано суспендирано състояни. БЕЛЕЖКА: при последните два режима е възможно да пропуснете част от възпроизведения материал - докато приемника се приведе в работен режим от суспендирано/изключено състояние!"
+msgstr "Изберете поведение когато не се възпроизвежда звук. [Винаги] - непрекъснато извеждане на сигнал, който не можете да чуете. Така приемника няма да се изключи и ще бъде в готовност веднага да възпроизвежда при необходимост, но може да доведе до блокиране на звука от други приложения. [1- 10 минути] - действа като [Винаги], но след избрания период от време преустановява извеждането на сигнал. [Изключено] - аудио извода се привежда в суспендирано суспендирано състояние. БЕЛЕЖКА: при последните два режима е възможно да пропуснете част от възпроизведения материал - докато приемника се приведе в работен режим от суспендирано/изключено състояние!"
 
 msgctxt "#34120"
 msgid "Play GUI sounds"
-msgstr "Ð\9fÑ\80оÑ\81виÑ\80вай Ð·Ð²Ñ\83Ñ\86и Ð¾Ñ\82 потребителския интерфейс"
+msgstr "Ð\9eзвÑ\83Ñ\87аване Ð½Ð° потребителския интерфейс"
 
 msgctxt "#34121"
 msgid "Only when playback stopped"
@@ -10067,7 +10343,7 @@ msgstr "Стартирането на Zeroconf се провали"
 
 msgctxt "#34301"
 msgid "Is Apple's Bonjour Service installed? See log for more info."
-msgstr "Ð\98нÑ\81Ñ\82алиÑ\83Ñ\80ана Ð»Ð¸ Ðµ Ñ\83Ñ\81лÑ\83гаÑ\82а Apple's Bonjour? Вижте дневника за допълнителна информация."
+msgstr "Ð\98нÑ\81Ñ\82алиÑ\80ана Ð»Ð¸ Ðµ Ñ\83Ñ\81лÑ\83гаÑ\82а Apple Bonjour? Вижте дневника за допълнителна информация."
 
 msgctxt "#34302"
 msgid "AirPlay requires Zeroconf to be enabled."
@@ -10159,7 +10435,7 @@ msgstr "Не ползвай персоналната клавишна карта
 
 msgctxt "#35100"
 msgid "Enable joystick and gamepad support"
-msgstr "Включи поддръжката на gamepad"
+msgstr "Включи поддръжката на геймпад"
 
 msgctxt "#35102"
 msgid "Disable joystick when this device is present"
@@ -10287,7 +10563,7 @@ msgstr "Изпращай команда \"неактивен източник\"
 
 msgctxt "#36026"
 msgid "Put devices in standby mode when putting the PC in standby"
-msgstr "При активен режим \"Изчакване\" за компютъра задай режима и за усройствата"
+msgstr "При активен режим \"Изчакване\", за компютъра, задай режима и за устройствата"
 
 msgctxt "#36027"
 msgid "This device needs servicing"
@@ -10341,6 +10617,10 @@ msgctxt "#36040"
 msgid "Unsupported libCEC interface version. %x is lower than the version XBMC supports (%x)"
 msgstr "Версията на libCEC интерфейса не се поддържа. %x е по-стара от необходимата %x"
 
+msgctxt "#36041"
+msgid "* Item folder"
+msgstr "* Папка на елемента"
+
 msgctxt "#36042"
 msgid "Use limited colour range (16-235)"
 msgstr "Ползвай ограничена цветова гама (16-256)"
@@ -10383,7 +10663,7 @@ msgstr "При стартиране на  XBMC коя от началните с
 
 msgctxt "#36110"
 msgid "Select or disable the sound scheme used in the User Interface."
-msgstr "Ð\98збеÑ\80еÑ\82е Ð¿Ð°ÐºÐµÑ\82 Ð¾Ñ\82 Ð·Ð²Ñ\83Ñ\86и, ÐºÐ¾Ð¹Ñ\82о Ð´Ð° Ñ\81е Ð¿Ð¾Ð»Ð·Ð²Ð° Ð¿Ñ\80и Ñ\80абоÑ\82аÑ\82а Ñ\81 потребителския интерфейс. Ако желаете можете да изключите звуковите ефекти."
+msgstr "Ð\98збеÑ\80еÑ\82е Ð¿Ð°ÐºÐµÑ\82 Ð¾Ñ\82 Ð·Ð²Ñ\83Ñ\86и, ÐºÐ¾Ð¹Ñ\82о Ð´Ð° Ñ\81е Ð¿Ð¾Ð»Ð·Ð²Ð° Ð·Ð° Ð¾Ð·Ð²Ñ\83Ñ\87аване Ð½Ð° потребителския интерфейс. Ако желаете можете да изключите звуковите ефекти."
 
 msgctxt "#36111"
 msgid "Turn this off to remove the scrolling RSS news ticker."
@@ -10459,7 +10739,7 @@ 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 "Ð\98збеÑ\80еÑ\82е Ñ\81кÑ\80ийнÑ\81ейвÑ\8aÑ\80. XBMC Ñ\89е Ð½Ð°Ð»Ð¾Ð¶Ð¸ \"Dim\" (заÑ\82Ñ\8aмнÑ\8fваÑ\89иÑ\8f Ñ\81кÑ\80ийнÑ\81ейвÑ\8aÑ\80) Ð¿Ñ\80и Ñ\81Ñ\8aÑ\81Ñ\82оÑ\8fние \"Ð\9dа Ð¿Ð°Ñ\83за\" Ð¿Ð¾ Ð²Ñ\80еме Ð½Ð° Ð²Ñ\8aпÑ\80оизвождане на цял екран или при липса на активност."
+msgstr "Ð\98збеÑ\80еÑ\82е Ñ\81кÑ\80ийнÑ\81ейвÑ\8aÑ\80. XBMC Ñ\89е Ð½Ð°Ð»Ð¾Ð¶Ð¸ \"Dim\" (заÑ\82Ñ\8aмнÑ\8fваÑ\89иÑ\8f Ñ\81кÑ\80ийнÑ\81ейвÑ\8aÑ\80) Ð¿Ñ\80и Ñ\81Ñ\8aÑ\81Ñ\82оÑ\8fние \"Ð\9dа Ð¿Ð°Ñ\83за\" Ð¿Ð¾ Ð²Ñ\80еме Ð½Ð° Ð²Ñ\8aзпÑ\80оизвеждане на цял екран или при липса на активност."
 
 msgctxt "#36131"
 msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
@@ -10503,7 +10783,7 @@ msgstr "Все още не е налична информация."
 
 msgctxt "#36141"
 msgid "Show plot information for unwatched media in the Video Library."
-msgstr "Показва сюжета и за негледаните файлове в библиотеката."
+msgstr "Ð\9fоказва Ñ\81Ñ\8eжеÑ\82а Ð¸ Ð·Ð° Ð½ÐµÐ¸Ð·Ð³Ð»ÐµÐ´Ð°Ð½Ð¸Ñ\82е Ñ\84айлове Ð² Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ\82екаÑ\82а."
 
 msgctxt "#36142"
 msgid "No info available yet."
@@ -10627,7 +10907,7 @@ msgstr "Все още не е налична информация."
 
 msgctxt "#36177"
 msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
-msgstr "Превключва между \"Запитване\", \"Възпроизведи\", \"Възобнови\" и \"Покажи информация\". \"Запитване\" ще извежда меню с наличните опции. \"Възобнови\" ще започва възпроизвеждане на видео файла от точката до която сте гледали последния път. \"Покажи информация\" ще извежда прозорец с информация за избрания елемент."
+msgstr "Превключва между \"Запитване\", \"Възпроизведи\", \"Възобнови\" и \"Покажи информация\". \"Запитване\" ще извежда меню с наличните опции. \"Възобнови\" ще започва възпроизвеждане на видео файла от точката до която сте гледали последния път. \"Покажи информация\" ще извежда прозореца с информация за избрания елемент."
 
 msgctxt "#36178"
 msgid "No info available yet."
@@ -10635,7 +10915,7 @@ msgstr "Все още не е налична информация."
 
 msgctxt "#36179"
 msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
-msgstr "Когато файл бъде добавен в библиотекта, след сканиране, той ще бъде изобразяван чрез заглавието от метраинформацията, вместо чрез името на файла."
+msgstr "Когато файл бъде добавен в библиотеката, след сканиране, той ще бъде изобразяван чрез заглавието от метраинформацията, вместо чрез името на файла."
 
 msgctxt "#36180"
 msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode."
@@ -10819,11 +11099,11 @@ msgstr "Все още не е налична информация."
 
 msgctxt "#36255"
 msgid "Determine if artists that appear only on compilations are shown in the library artist view."
-msgstr "Да се показват ли музикантите, които учатват само в сборни албуми, в елемента \"Артисти\" на музикалната библиотека."
+msgstr "Ð\94а Ñ\81е Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ\82 Ð»Ð¸ Ð¼Ñ\83зиканÑ\82иÑ\82е, ÐºÐ¾Ð¸Ñ\82о Ñ\83Ñ\87аÑ\81Ñ\82ваÑ\82 Ñ\81амо Ð² Ñ\81боÑ\80ни Ð°Ð»Ð±Ñ\83ми, Ð² ÐµÐ»ÐµÐ¼ÐµÐ½Ñ\82а \"Ð\90Ñ\80Ñ\82иÑ\81Ñ\82и\" Ð½Ð° Ð¼Ñ\83зикалнаÑ\82а Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ\82ека."
 
 msgctxt "#36256"
 msgid "Automatically fetch album and artist information via scrapers during scan."
-msgstr "Автоматично сваляне на информация за албуми и артисти (от услугите предоставящи информаци) по време на сканирането."
+msgstr "Автоматично сваляне на информация за албуми и артисти (от услугите предоставящи информация) по време на сканирането."
 
 msgctxt "#36257"
 msgid "Select the default album information source"
@@ -10867,15 +11147,15 @@ msgstr "При добавяне на песен към плейлист тя щ
 
 msgctxt "#36268"
 msgid "Default is 89dB per standard. Change with caution."
-msgstr "Стандартната сойност е 89dB. Променяйте я внимателно!"
+msgstr "Стандартната стойност е 89dB. Променяйте я внимателно!"
 
 msgctxt "#36269"
 msgid "Default is 89dB per standard. Change with caution."
-msgstr "Стандартната сойност е 89dB. Променяйте я внимателно!"
+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 секунди."
+msgstr "Изглажда прехода от една песен към друга. Песента, която приключва, постепенно затихва, докато същевременно започва да звучи следващата, като се усилва. Можете да зададете продължителността на застъпването (времето когато и двете песни звучат едновременно) между 1 и 15 секунди."
 
 msgctxt "#36272"
 msgid "Allow crassfading to occur when both tracks are from the same album."
@@ -10947,7 +11227,7 @@ msgstr "Задайте качеството на извличаните файл
 
 msgctxt "#36290"
 msgid "For FLAC define compression level, default 5"
-msgstr "За FLAC опреелете ниво на компресия. Стандартното е 5."
+msgstr "Ð\97а FLAC Ð¾Ð¿Ñ\80еделеÑ\82е Ð½Ð¸Ð²Ð¾ Ð½Ð° ÐºÐ¾Ð¼Ð¿Ñ\80еÑ\81иÑ\8f. Ð¡Ñ\82андаÑ\80Ñ\82ноÑ\82о Ðµ 5."
 
 msgctxt "#36291"
 msgid "Auto eject disc after rip is complete."
@@ -10959,7 +11239,7 @@ msgstr "Все още не е налична информация."
 
 msgctxt "#36293"
 msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
-msgstr "При възпроизвеждане на аудио файл XBMC ще потърси съвпадащ .cdg файл и ако намери, ще изобрази гарфичните символи, който се съдържат в него."
+msgstr "При възпроизвеждане на аудио файл XBMC ще потърси съвпадащ .cdg файл и ако намери, ще изобрази графичните символи, който се съдържат в него."
 
 msgctxt "#36294"
 msgid "No info available yet."
@@ -11023,7 +11303,7 @@ msgstr "Автоматично ротиране на изображенията
 
 msgctxt "#36309"
 msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
-msgstr "Ð\9fоказване Ð½Ð° Ð²Ð¸Ð´ÐµÐ¾Ñ\84айлове, Ð½Ð°Ñ\80ед Ñ\81 Ñ\84айловеÑ\82е Ð½Ð° Ñ\81нимкиÑ\82е. Ð\9eпÑ\86иÑ\8fÑ\82а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ðµ Ð¿Ð¾Ð»Ðµна защото модерните фотоапарати записват и видео."
+msgstr "Ð\9fоказване Ð½Ð° Ð²Ð¸Ð´ÐµÐ¾Ñ\84айлове, Ð½Ð°Ñ\80ед Ñ\81 Ñ\84айловеÑ\82е Ð½Ð° Ñ\81нимкиÑ\82е. Ð\9eпÑ\86иÑ\8fÑ\82а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¿Ð¾Ð»ÐµÐ·на защото модерните фотоапарати записват и видео."
 
 msgctxt "#36310"
 msgid "No info available yet."
@@ -11079,7 +11359,7 @@ msgstr "Включва UPnP сървъра на XBMC. Това ще позвол
 
 msgctxt "#36324"
 msgid "When a manual or automatical library update occurs, notify UPnP clients."
-msgstr "Ð\98звеÑ\81Ñ\82Ñ\8fвай UPnP ÐºÐ»Ð¸ÐµÐ½Ñ\82иÑ\82е Ð¿Ñ\80и Ð°ÐºÑ\82Ñ\83ализиÑ\80ане на библиотеката (ръчно или автоматично)."
+msgstr "Ð\98звеÑ\81Ñ\82Ñ\8fвай UPnP ÐºÐ»Ð¸ÐµÐ½Ñ\82иÑ\82е Ð¿Ñ\80и Ð¾Ð±Ð½Ð¾Ð²Ñ\8fване на библиотеката (ръчно или автоматично)."
 
 msgctxt "#36325"
 msgid "No info available yet."
@@ -11201,6 +11481,10 @@ msgctxt "#36355"
 msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out."
 msgstr "Когато ползвате няколко екрана тези които не изобразяват XBMC ще бъдат затъмнени."
 
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Тестови модели за калибриране на дисплея."
+
 msgctxt "#36359"
 msgid "No info available yet."
 msgstr "Все още не е налична информация."
@@ -11209,10 +11493,6 @@ 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 тихи канала, които се нуждаят от усилване)"
@@ -11249,6 +11529,10 @@ 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 "Определя поведението на звуците от потребителския интерфейс - кога да се възпроизвеждат. Като звука издаван при при навигиране из менютата и за оповестяване на важно известие."
+
 msgctxt "#36374"
 msgid "No info available yet."
 msgstr "Все още не е налична информация."
@@ -11303,7 +11587,7 @@ msgstr "Ако разполагате с ограничен, по скорост
 
 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 "Изключване на екрана при липса на действие. Полезно е ако телевизорът Ви се изключва при липса на сигнал, но не желаете да суспендирате/изклювате компютъра."
+msgstr "Изключване на екрана при липса на действие. Полезно е ако телевизорът Ви се изключва при липса на сигнал, но не желаете да суспендирате/изключвате компютъра."
 
 msgctxt "#36388"
 msgid "No info available yet."
@@ -11319,7 +11603,7 @@ msgstr "Определете какво действие трябва да пр
 
 msgctxt "#36391"
 msgid "Turn debug logging on or off. Useful for troubleshooting."
-msgstr "Ð\92клÑ\8eÑ\87ва/Ð\98зклÑ\8eÑ\87ва Ð²Ð¾Ð´ÐµÐ½ÐµÑ\82о Ð½Ð° debug Ð´Ð½ÐµÐ²Ð½Ð¸Ðº. Ð\9eпÑ\86иÑ\8fÑ\82а Ðµ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° ÐºÐ¾Ð³Ð°Ñ\82о Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо Ð´Ð° Ñ\81е Ñ\81Ñ\8aбеÑ\80е Ð²Ñ\8aзможно Ð½Ð°Ð¹-много Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8f Ð·Ð° Ð¾Ñ\82Ñ\81Ñ\82Ñ\80анÑ\8fванеÑ\82о Ð½Ð° Ð´Ð°Ð´Ð´ÐµÐ½Ð° Ð½ÐµÐ¸Ð·Ð¿Ñ\80авноÑ\81Ñ\82."
+msgstr "Включва/Изключва воденето на debug дневник. Опцията е полезна когато е необходимо да се събере възможно най-много информация за отстраняването на дадена неизправност."
 
 msgctxt "#36392"
 msgid "No info available yet."
@@ -11433,6 +11717,18 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Включва хардуерното декодиране на видео файлове от AMLogic декодер."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Превключи на канал"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Покажи информация"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Запис"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Стереоскопичен режим (текущ)"
@@ -11441,6 +11737,18 @@ msgctxt "#36501"
 msgid "Stereoscopic mode"
 msgstr "Стереоскопичен режим"
 
+msgctxt "#36503"
+msgid "Over/Under"
+msgstr "Отгоре/Отдолу"
+
+msgctxt "#36504"
+msgid "Side by side"
+msgstr "Отляво/Отдясно"
+
+msgctxt "#36507"
+msgid "Interlaced"
+msgstr "Презредово"
+
 msgctxt "#36521"
 msgid "Ask me"
 msgstr "Запитване"
@@ -11451,7 +11759,7 @@ msgstr "Предпочитан режим"
 
 msgctxt "#36526"
 msgid "Disable stereoscopic mode when playback is stopped"
-msgstr "Ð\98зклÑ\8eÑ\87ване Ð½Ð° стереоскопичния режим при спиране на възпроизвеждането"
+msgstr "Ð\98зклÑ\8eÑ\87и стереоскопичния режим при спиране на възпроизвеждането"
 
 msgctxt "#36527"
 msgid "This video is stereoscopic. Select playback mode"
@@ -11505,9 +11813,37 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Включва хардуерното декодиране на видео файлове."
 
+msgctxt "#37000"
+msgid "(Visually Impaired)"
+msgstr "(За глухи)"
+
+msgctxt "#37001"
+msgid "(Directors Comments)"
+msgstr "(Коментари на режисьора)"
+
+msgctxt "#37002"
+msgid "(Directors Comments 2)"
+msgstr "(Коментари на режисьора 2)"
+
+msgctxt "#37011"
+msgid "(CC)"
+msgstr "(CC)"
+
+msgctxt "#37012"
+msgid "(Forced)"
+msgstr "(Задължително)"
+
+msgctxt "#37013"
+msgid "(Directors Comments)"
+msgstr "(Коментари на режисьора)"
+
 msgctxt "#37014"
 msgid "Last used profile"
-msgstr "Последно ползван профил"
+msgstr "Последния ползван профил"
+
+msgctxt "#37015"
+msgid "Browse Into"
+msgstr "Преглед на плейлиста"
 
 msgctxt "#37016"
 msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
index c6c7542..80d15a7 100644 (file)
@@ -4729,10 +4729,6 @@ msgctxt "#21337"
 msgid "TuxBox device"
 msgstr "TuxBox device"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "စာတန်းထိုး ဖိုင်တွဲ"
-
 msgctxt "#21371"
 msgid "Thumbnail"
 msgstr "Thumbnail"
@@ -4865,10 +4861,6 @@ msgctxt "#21454"
 msgid "Cache full"
 msgstr "Cache ပြည့်နေသည်"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "စာတန်းထိုးမည့်နေရာ"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "အမြန်"
@@ -5680,3 +5672,11 @@ msgstr "အဆိုတော် အချက်အလက် ပုံမှန
 msgctxt "#36318"
 msgid "Specify the default weather information source. See the Add-ons Manager for options."
 msgstr "ရာသီဥတု အချက်အလက် ပုံမှန် ရယူမည့် ရင်းမြစ်ကို ရွေးပါ။ ပြုပြင်ပြောင်းလဲလို့ ရသည်များကို Add-ons မန်နေဂျာတွင် ကြည့်ပါ။"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "channel သို့ပြောင်းမည်"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "မှတ်တမ်းသွင်းမည်"
index c9e0430..bf07c22 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleccioneu el directori de destí"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Sortida estèreo a tots els altaveus"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canals"
@@ -895,7 +891,7 @@ msgstr "S'ha produït un error"
 
 msgctxt "#258"
 msgid "Enable tag reading"
-msgstr "Activa la lectura d'etiquetes"
+msgstr "Habilita la lectura d'etiquetes"
 
 msgctxt "#259"
 msgid "Opening"
@@ -975,7 +971,7 @@ msgstr "Ajusteu la barra per canviar la posició dels subtítols"
 
 msgctxt "#278"
 msgid "Adjust the rectangle so it is perfectly square"
-msgstr "Ajusteu el rectangle fins que sigui un rectangle perfecte"
+msgstr "Ajusteu el rectangle fins que sigui un quadrat perfecte"
 
 msgctxt "#279"
 msgid "Unable to load settings"
@@ -1075,7 +1071,7 @@ msgstr "Idioma"
 
 msgctxt "#305"
 msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
 
 msgctxt "#306"
 msgid "Non-interleaved"
@@ -1619,7 +1615,7 @@ msgstr "Receptor compatible Dolby Digital Plus (E-AC3)"
 
 msgctxt "#449"
 msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
 
 msgctxt "#450"
 msgid "Columns"
@@ -1701,10 +1697,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Crèdits"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Inactiu"
@@ -1827,11 +1819,11 @@ msgstr "Ordena per: Ús"
 
 msgctxt "#510"
 msgid "Enable visualisations"
-msgstr "Activa les visualitzacions"
+msgstr "Habilita les visualitzacions"
 
 msgctxt "#511"
 msgid "Enable video mode switching"
-msgstr "Activa el canvi de mode de vídeo"
+msgstr "Habilita el canvi de mode de vídeo"
 
 msgctxt "#512"
 msgid "Startup window"
@@ -2903,7 +2895,7 @@ msgstr "Submenú"
 
 msgctxt "#1035"
 msgid "Enable submenu buttons"
-msgstr "Activa els botons del submenú"
+msgstr "Habilita els botons del submenú"
 
 msgctxt "#1036"
 msgid "Favourites"
@@ -3831,7 +3823,7 @@ msgstr "Introduïu la combinació de botons del gamepad i"
 
 msgctxt "#12331"
 msgid "press OK, or Back to cancel"
-msgstr "premeu D'acord, or enree per cancel·lar"
+msgstr "premeu «D'acord», or enrere per cancel·lar"
 
 msgctxt "#12332"
 msgid "Set lock"
@@ -4179,11 +4171,11 @@ msgstr "Desactivat"
 
 msgctxt "#13107"
 msgid "Enabled during video playback"
-msgstr "Activat durant la reproducció de vídeo"
+msgstr "Habilitat durant la reproducció de vídeo"
 
 msgctxt "#13108"
 msgid "Always enabled"
-msgstr "Sempre activat"
+msgstr "Sempre habilitat"
 
 msgctxt "#13109"
 msgid "Test & apply resolution"
@@ -4207,11 +4199,11 @@ msgstr "Desactivat"
 
 msgctxt "#13114"
 msgid "Enabled for SD content"
-msgstr "Activat per a contingut SD"
+msgstr "Habilitat per el contingut SD"
 
 msgctxt "#13115"
 msgid "Always enabled"
-msgstr "Sempre activat"
+msgstr "Sempre habilitat"
 
 msgctxt "#13116"
 msgid "Upscaling method"
@@ -4487,7 +4479,7 @@ msgstr "Fonts"
 
 msgctxt "#13304"
 msgid "Enable flipping bi-directional strings"
-msgstr "Activa invertir cadenes bidireccionals"
+msgstr "Habilita invertir les cadenes bidireccionals"
 
 msgctxt "#13305"
 msgid "Show RSS news feeds"
@@ -4563,7 +4555,7 @@ msgstr "Només dreta"
 
 msgctxt "#13323"
 msgid "Enable karaoke support"
-msgstr "Activa el suport de karaoke"
+msgstr "Habilita el suport de karaoke"
 
 msgctxt "#13324"
 msgid "Background transparency"
@@ -4703,11 +4695,11 @@ msgstr "Genera les miniatures automàticament"
 
 msgctxt "#13361"
 msgid "Enable voice"
-msgstr "Activa la veu"
+msgstr "Habilita la veu"
 
 msgctxt "#13375"
 msgid "Enable device"
-msgstr "Activa el dispositiu"
+msgstr "Habilita el dispositiu"
 
 msgctxt "#13376"
 msgid "Volume"
@@ -4795,7 +4787,7 @@ msgstr "Configuracions de l'àudio i dels subtítols"
 
 msgctxt "#13397"
 msgid "Enable subtitles"
-msgstr "Activa els subtítols"
+msgstr "Habilita els subtítols"
 
 msgctxt "#13398"
 msgid "Shortcuts"
@@ -4947,7 +4939,7 @@ msgstr "Reprodueix només aquest"
 
 msgctxt "#13435"
 msgid "Enable HQ Scalers for scalings above"
-msgstr "Habilitar Escaladors HQ per escalades anteriors"
+msgstr "Habilita els escaladors HQ per escalades anteriors"
 
 msgctxt "#13436"
 msgid "Allow hardware acceleration (libstagefright)"
@@ -5091,7 +5083,7 @@ msgstr "Error del'Apple Remote"
 
 msgctxt "#13621"
 msgid "Apple Remote support could be enabled."
-msgstr "No es pot activar el suport per l'Apple Remote."
+msgstr "No es pot habilitar el suport per l'Apple Remote."
 
 msgctxt "#14000"
 msgid "Stack"
@@ -5131,7 +5123,7 @@ msgstr "Canvia automàticament a les miniatures segons"
 
 msgctxt "#14011"
 msgid "Enable auto switching to thumbs view"
-msgstr "Activar Autoconmutació en les vistes de caràtules"
+msgstr "Habilita l'autoconmutació en la vista de caràtules"
 
 msgctxt "#14012"
 msgid "- Use large icons"
@@ -5457,6 +5449,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Atura l'extracció del CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Font no disponible"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Manté"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Suprimeix"
@@ -5973,10 +5973,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Enregistraments de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Directori per defecte per les miniatures del PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canals"
@@ -6135,7 +6131,7 @@ msgstr "Edita el temporitzador"
 
 msgctxt "#19058"
 msgid "Timer enabled"
-msgstr "Temporitzador activat"
+msgstr "Temporitzador habilitat"
 
 msgctxt "#19059"
 msgid "Stop recording"
@@ -6811,7 +6807,11 @@ msgstr "Iniciant els fils de segon pla"
 
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
-msgstr "El gestor PVR s'ha activat sense cap"
+msgstr "El gestor PVR s'ha habilitat sense cap"
+
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "s'ha habilitat el complement PVR. Habiliteu almenys un complement"
 
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
@@ -6925,6 +6925,10 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Tots els enregistraments"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "No s'ha trobat cap complement PVR"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Necessitau un sintonitzador, programari de rerefons, i un"
@@ -6959,7 +6963,7 @@ msgstr "Configuració específica del client"
 
 msgctxt "#19281"
 msgid "Confirm channel switches by pressing OK"
-msgstr "Confirma el canvi de canal prement OK"
+msgstr "Confirma el canvi de canal prement «D'acord»"
 
 msgctxt "#19499"
 msgid "Other/Unknown"
@@ -7571,7 +7575,7 @@ msgstr "- sense enllaç establert -"
 
 msgctxt "#20079"
 msgid "Enable animations"
-msgstr "Enable animations"
+msgstr "Habilita les animacions"
 
 msgctxt "#20080"
 msgid "Disable RSS during music"
@@ -7579,7 +7583,7 @@ msgstr "Desactiva l'RSS durant la música"
 
 msgctxt "#20081"
 msgid "Enable shortcut buttons"
-msgstr "Activa els botons d'accés directe"
+msgstr "Habilita els botons d'accés directe"
 
 msgctxt "#20082"
 msgid "Show programs in main menu"
@@ -7659,7 +7663,7 @@ msgstr "Codi mestre i opcions"
 
 msgctxt "#20101"
 msgid "Entering master lock code always enables master mode"
-msgstr "Intorduïnt el codi mestre de bloqueig sempre activa el mode mestre"
+msgstr "Intorduïnt el codi mestre de bloqueig sempre habilita el mode mestre"
 
 msgctxt "#20102"
 msgid "or copy from default?"
@@ -8825,10 +8829,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Elimina recurs compartit"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Carpeta del subtítols"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Movie & alternate subtitle directory"
@@ -8839,7 +8839,7 @@ msgstr "Substitueix les fonts dels subtítols ASS/SSA"
 
 msgctxt "#21369"
 msgid "Enable mouse and Touch Screen support"
-msgstr "Activa el suport de ratolí i pantalla tàctil"
+msgstr "Habilita el suport de ratolí i pantalla tàctil"
 
 msgctxt "#21370"
 msgid "Play navigation sounds during media playback"
@@ -8875,15 +8875,15 @@ msgstr "Widescreen"
 
 msgctxt "#21378"
 msgid "Enable 480p"
-msgstr "Activa 480p"
+msgstr "Habilita 480p"
 
 msgctxt "#21379"
 msgid "Enable 720p"
-msgstr "Activa 720p"
+msgstr "Habilita 720p"
 
 msgctxt "#21380"
 msgid "Enable 1080i"
-msgstr "Activa 1080i"
+msgstr "Habilita 1080i"
 
 msgctxt "#21381"
 msgid "Enter name of new playlist"
@@ -8895,7 +8895,7 @@ msgstr "Mostra els botons \"Afegeix font\" en les llistes de fitxers"
 
 msgctxt "#21383"
 msgid "Enable scrollbars"
-msgstr "Activa les barres de desplaçament"
+msgstr "Habilita les barres de desplaçament"
 
 msgctxt "#21384"
 msgid "Make watched filtering a toggle in video library"
@@ -8919,7 +8919,7 @@ msgstr "Silenciós"
 
 msgctxt "#21389"
 msgid "Enable custom background"
-msgstr "Enable custom background"
+msgstr "Habilita el fons personalitzat"
 
 msgctxt "#21390"
 msgid "Power management level"
@@ -8955,7 +8955,7 @@ msgstr "High quality pixel shader v2"
 
 msgctxt "#21398"
 msgid "Enable playlist at startup"
-msgstr "Enable playlist at startup"
+msgstr "Habilita la llista de reproducció al inicialitzar"
 
 msgctxt "#21399"
 msgid "Use tween animations"
@@ -9197,10 +9197,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mesclat"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicació dels subtítols"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixed"
@@ -9233,6 +9229,10 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s a %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Prefereix els subtítols externs"
+
 msgctxt "#21602"
 msgid "(External)"
 msgstr "(Extern)"
@@ -9843,7 +9843,7 @@ msgstr "Desactiva"
 
 msgctxt "#24022"
 msgid "Enable"
-msgstr "Activa"
+msgstr "Habilita"
 
 msgctxt "#24023"
 msgid "Add-on disabled"
@@ -9921,6 +9921,14 @@ msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "El complement no té l'estructura correcta"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s és utilitzat per següents complement(s) instal·lats"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Aquest complement no es pot desinstal·lar"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Rollback"
@@ -9951,7 +9959,7 @@ msgstr "Registre de canvis"
 
 msgctxt "#24059"
 msgid "Would you like to enable this Add-on?"
-msgstr "Voleu activar aquest complement?"
+msgstr "Voleu habilitar aquest complement?"
 
 msgctxt "#24060"
 msgid "Would you like to disable this Add-on?"
@@ -9963,7 +9971,7 @@ msgstr "Hi ha una actualització per al complement disponible"
 
 msgctxt "#24062"
 msgid "Enabled Add-ons"
-msgstr "Complements activats"
+msgstr "Complements habilitats"
 
 msgctxt "#24063"
 msgid "Auto update"
@@ -9971,7 +9979,7 @@ msgstr "Actualització automàtica"
 
 msgctxt "#24064"
 msgid "Add-on enabled"
-msgstr "Complement activat"
+msgstr "Complement habilitat"
 
 msgctxt "#24065"
 msgid "Add-on updated"
@@ -10045,6 +10053,10 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(a la llista negra)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "El complement és incompatible o s'ha marcat com trencat al dipòsit."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Voleu desactivar-lo en el sistema?"
@@ -10073,6 +10085,14 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "La pell manca d'alguns fitxers"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "El complement és incompatible a causa de les dependències no satisfetes."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pausa quan s'estiguin cercant subtítols"
+
 msgctxt "#24107"
 msgid "Searching for subtitles ..."
 msgstr "Cercant subtítols ..."
@@ -10105,6 +10125,14 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Desa els subtítols a la carpeta de la pel·lícula"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Servei de TV per defecte"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduïu la cadena de cerca"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificacions"
@@ -10431,7 +10459,7 @@ msgstr "Camí a l'script"
 
 msgctxt "#33083"
 msgid "Enable custom script button"
-msgstr "Activa el botó d'scripts personalitzats"
+msgstr "Habilita el botó d'scripts personalitzats"
 
 msgctxt "#33084"
 msgid "Auto login"
@@ -10489,10 +10517,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuració dels altaveus"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10667,7 +10691,7 @@ msgstr "Mapa de teclat a utilitzar per a aquest dispositiu"
 
 msgctxt "#35008"
 msgid "Keymap enabled"
-msgstr "Mapa de teclat activat"
+msgstr "Mapa de teclat habilitat"
 
 msgctxt "#35009"
 msgid "Do not use the custom keymap for this device"
@@ -10675,7 +10699,7 @@ msgstr "No utilitzeu el mapa de teclat personalitzat per a aquest dispositiu"
 
 msgctxt "#35100"
 msgid "Enable joystick and gamepad support"
-msgstr "Activa el suport de manaments de joc"
+msgstr "Habilita el suport de joystick i gamepad"
 
 msgctxt "#35102"
 msgid "Disable joystick when this device is present"
@@ -10683,7 +10707,7 @@ 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"
+msgstr "Habilita les tecles de sistema en pantalla completa"
 
 msgctxt "#35500"
 msgid "Location"
@@ -10727,7 +10751,7 @@ msgstr "Premeu el botó de comandament \"usuari\""
 
 msgctxt "#36005"
 msgid "Enable switch side commands"
-msgstr "Activa la commutació de comandes del costat"
+msgstr "Habilita la commutació de comandes del costat"
 
 msgctxt "#36006"
 msgid "Could not open the adaptor"
@@ -11083,7 +11107,7 @@ msgstr "Encara no hi ha informació disponible."
 
 msgctxt "#36155"
 msgid "Enable hardware decoding of video files."
-msgstr "Activa el maquinari de descodificació d'arxius de vídeo."
+msgstr "Habilita el maquinari de descodificació d'arxius de vídeo."
 
 msgctxt "#36156"
 msgid "No info available yet."
@@ -11155,7 +11179,7 @@ msgstr "No hi ha informació disponible"
 
 msgctxt "#36174"
 msgid "Enable Teletext when watching a live TV stream."
-msgstr "Activar el teletext durant una transmissió en directe per televisió."
+msgstr "Habilita el teletext durant una transmissió en directe per televisió."
 
 msgctxt "#36175"
 msgid "Scale Teletext to 4:3 ratio."
@@ -11333,10 +11357,6 @@ msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Finestra EPG per defecte. Per omissió és la línia de temps."
 
-msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Nombre de dies de dades de l'EPG per importar des de 'backends'. El valor per defecte és 2 dies."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Temps entre les EPG del backend. Per omissió 120 minuts."
@@ -11535,7 +11555,7 @@ msgstr "Llegeix la informació d'etiquetes d'arxius de música. Per a grans dire
 
 msgctxt "#36275"
 msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
-msgstr "Controla la forma com es mostren els noms de les cançons a la interfície d'usuari. Per funcionar correctament han d'estar activades les etiquetes ID3."
+msgstr "Controla la forma com es mostren els noms de les cançons a la interfície d'usuari. Per funcionar correctament han d'estar habilitades les etiquetes ID3."
 
 msgctxt "#36276"
 msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
@@ -12095,7 +12115,15 @@ msgstr "Ometre el mesclador VDAPU estalvia recursos en sistemes de baixa potènc
 
 msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
-msgstr "Activa el maquinari de descodificació de vídeo utilitzant el descodificador AMLogic"
+msgstr "Habilita el maquinari de descodificació de vídeo utilitzant el descodificador AMLogic"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Canvia al canal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Grava"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12219,11 +12247,11 @@ msgstr "Extreu-lo tant per analògic (auriculars) com per HDMI"
 
 msgctxt "#36543"
 msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
-msgstr "Activa-ho per potenciar els diàlegs en comparació amb els so de fons quan es redueixi el nombre de canals d'àudio"
+msgstr "Habilita-ho per potenciar els diàlegs en comparació amb els so de fons quan es redueixi el nombre de canals d'àudio"
 
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
-msgstr "Activa el maquinari de descodificació d'arxius de vídeo."
+msgstr "Habilita el maquinari de descodificació d'arxius de vídeo."
 
 msgctxt "#37000"
 msgid "(Visually Impaired)"
index 57b840c..2fa3414 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "选择目标目录"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "立体声输出到所有扬声器"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "声道数"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "开发者"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "改机"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "关"
@@ -4981,10 +4973,6 @@ 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 "影音同步方式"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "停止抓取 CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "无效源"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "如何处置媒体项目%s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "保留"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "移除"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - 场内插值"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "后处理"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "电视录像"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 缩略图默认文件夹"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "频道"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "电子节目单"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "现在转入"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "电子节目单更新间隔"
@@ -6313,6 +6317,10 @@ msgctxt "#19099"
 msgid "Service"
 msgstr "服务"
 
+msgctxt "#19100"
+msgid "Mux"
+msgstr "复用器"
+
 msgctxt "#19101"
 msgid "Provider"
 msgstr "提供者"
@@ -8089,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "下载歌手信息失败"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "用在线信息覆盖歌曲标签"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "此选项启用时,你在歌曲标签中设置的风格、年代、歌手等信息,将会被下载信息所覆盖。当你的歌曲标签中有 MusicBrainz 标识时很有用。"
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android 音乐"
@@ -8865,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "移除媒体共享"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "字幕文件夹"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "电影和备选字幕目录"
@@ -9237,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "混合"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕位置"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "固定"
@@ -9327,7 +9335,7 @@ msgstr "拍摄时间"
 
 msgctxt "#21821"
 msgid "Description"
-msgstr "照片描述"
+msgstr "描述"
 
 msgctxt "#21822"
 msgid "Camera make"
@@ -10185,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "字幕保存到电影文件夹"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "默认剧集服务"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "选择用于搜索剧集字幕的默认服务"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "默认电影服务"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "选择用于搜索电影字幕的默认服务"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "人工搜索字符串"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "输入查询字符串"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "提示信息"
@@ -10569,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2(FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "扬声器设置"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10613,6 +10641,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分] - 类似总是选项,过了持续期限后音频进入暂停状态。[关] - 音频输出进入暂停状态。注意 - 音频进入暂停状态可能造成声音丢失。"
+
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "播放用户界面音效"
@@ -10761,6 +10793,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 "位置"
@@ -11213,6 +11249,10 @@ 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 "#36170"
 msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
 msgstr "允许视频播放器为尽可能将视频满屏显示而在一定程度上忽略宽高比。"
@@ -11414,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "默认电子节目单窗口显示。默认为时间表。"
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "从后端导入电子节目单天数。默认为2天。"
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "从后端导入电子节目单天数。默认为3天。"
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11555,7 +11595,7 @@ msgstr "无可用信息。"
 
 msgctxt "#36255"
 msgid "Determine if artists that appear only on compilations are shown in the library artist view."
-msgstr "决定仅在合中出现的歌手是否显示在资料库歌手视图。"
+msgstr "决定仅在合中出现的歌手是否显示在资料库歌手视图。"
 
 msgctxt "#36256"
 msgid "Automatically fetch album and artist information via scrapers during scan."
@@ -11977,18 +12017,14 @@ 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 "#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 "#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 "选择启用将双声道立体声音源上混为多声道以匹配扬声器数量。"
-
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
 msgstr "当你的功放能解码 AC3 音频流时选择此项。"
@@ -12221,9 +12257,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "设置当一个电子节目单项被选中时的动作:[显示上下文菜单] 将触发上下文菜单让你选择更多动作;[切换到频道] 将立即转到相应频道;[显示信息] 将显示剧情介绍等详细信息;[录像] 将创建一个所选项目的录像定时器。"
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "显示上下文菜单"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "切换到频道"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "显示信息"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "录像"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12277,6 +12329,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 "首选模式"
@@ -12357,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "启用视频文件的硬解码。"
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "字幕立体深度"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "设置字幕在立体视频中的远近距离。数值越大则会感觉字幕离你越近。"
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "封面和同人画使用高质量贴图(占用更多内存)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "限制图形用户界面分辨率以节省内存。不影响视频播放。1080为无限制。需要重新启动。"
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(视障)"
@@ -12400,3 +12472,15 @@ 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 和音量等系统键"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "启用高色深艺术图片"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "设置用户界面分辨率限制"
index eee1b17..640e432 100644 (file)
@@ -585,6 +585,10 @@ msgctxt "#170"
 msgid "Adjust display refresh rate to match video"
 msgstr "調整視訊更新頻率以符合視訊"
 
+msgctxt "#171"
+msgid "Sort title"
+msgstr "排序標題"
+
 msgctxt "#172"
 msgid "Release date"
 msgstr "發行日期"
@@ -857,14 +861,14 @@ msgctxt "#249"
 msgid "Music"
 msgstr "音樂"
 
+msgctxt "#250"
+msgid "Visualisation"
+msgstr "視覺效果"
+
 msgctxt "#251"
 msgid "Select destination directory"
 msgstr "選擇目的目錄"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "雙聲道時輸出到所有喇叭"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "通道數"
@@ -1181,10 +1185,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 "多位演出者"
@@ -1209,6 +1221,10 @@ msgctxt "#345"
 msgid "Year"
 msgstr "年份"
 
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "下降混合的正規化程度"
+
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
 msgstr "DTS-HD 相容接收機"
@@ -1561,6 +1577,10 @@ msgctxt "#439"
 msgid "Cache"
 msgstr "快取"
 
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "硬碟"
+
 msgctxt "#441"
 msgid "UDF"
 msgstr "UDF"
@@ -1589,6 +1609,10 @@ msgctxt "#447"
 msgid "Autorun media"
 msgstr "自動播放媒體"
 
+msgctxt "#448"
+msgid "Dolby Digital Plus (E-AC3) capable receiver"
+msgstr "Dolby Digital Plus (E-AC3) 相容的接收機"
+
 msgctxt "#449"
 msgid "Enabled"
 msgstr "啟用"
@@ -1625,6 +1649,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "選擇顯示"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "限制取樣頻率 (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "字幕"
@@ -1673,10 +1701,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "工作人員"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "改機晶片"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "關閉"
@@ -1797,6 +1821,10 @@ msgctxt "#507"
 msgid "Sort by: Usage"
 msgstr "排序:使用次數"
 
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "啟用視覺效果"
+
 msgctxt "#511"
 msgid "Enable video mode switching"
 msgstr "啟用 切換視訊模式"
@@ -2177,6 +2205,10 @@ msgctxt "#613"
 msgid "Sample rate"
 msgstr "取樣率"
 
+msgctxt "#614"
+msgid "Virtual folder"
+msgstr "虛擬資料夾"
+
 msgctxt "#620"
 msgid "Audio CDs"
 msgstr "音樂 CD 擷取"
@@ -2237,6 +2269,14 @@ msgctxt "#636"
 msgid "Custom"
 msgstr "自訂"
 
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "回放增益"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "回放增益音量調整"
+
 msgctxt "#639"
 msgid "Use track levels"
 msgstr "依曲目重覆播放"
@@ -2245,6 +2285,18 @@ msgctxt "#640"
 msgid "Use album levels"
 msgstr "依專輯重覆播放"
 
+msgctxt "#641"
+msgid "PreAmp Level - ReplayGained files"
+msgstr "前級擴大等級 - 回放增益檔案"
+
+msgctxt "#642"
+msgid "PreAmp Level - Non ReplayGained files"
+msgstr "前級擴大等級 - 無回放增益檔案"
+
+msgctxt "#643"
+msgid "Avoid clipping on ReplayGained files"
+msgstr "針對回放增益檔案防止 Clipping"
+
 msgctxt "#644"
 msgid "Crop black bars"
 msgstr "修剪黑邊"
@@ -2373,6 +2425,10 @@ msgctxt "#713"
 msgid "HTTP proxy"
 msgstr "HTTP 代理伺服器"
 
+msgctxt "#715"
+msgid "Assignment"
+msgstr "指派"
+
 msgctxt "#716"
 msgid "Automatic (DHCP)"
 msgstr "自動(動態分配)"
@@ -2877,6 +2933,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "程式附加元件"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "設定外掛縮圖"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "附加元件設定"
@@ -3057,6 +3117,10 @@ msgctxt "#1260"
 msgid "Announce these services to other systems via Zeroconf"
 msgstr "透過 Zeroconf 自動發佈這些服務到其他系統"
 
+msgctxt "#1269"
+msgid "Allow volume control"
+msgstr "允許音量控制"
+
 msgctxt "#1270"
 msgid "Allow XBMC to receive AirPlay content"
 msgstr "允許XBMC接收AirPlay內容"
@@ -3437,10 +3501,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 "您確定要重設該類別下的設定嗎?"
@@ -3453,6 +3537,14 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "無說明內容"
 
+msgctxt "#10100"
+msgid "Yes/No dialogue"
+msgstr "確認對話框"
+
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "進度對話框"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "檔案瀏覽器"
@@ -3593,10 +3685,18 @@ msgctxt "#10524"
 msgid "Movie info"
 msgstr "電影資訊"
 
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "選擇對話框"
+
 msgctxt "#12001"
 msgid "Music/Info"
 msgstr "音樂/資訊"
 
+msgctxt "#12002"
+msgid "Dialogue OK"
+msgstr "確認對話框"
+
 msgctxt "#12003"
 msgid "Videos/Info"
 msgstr "視訊/資訊"
@@ -3609,6 +3709,10 @@ msgctxt "#12005"
 msgid "Fullscreen video"
 msgstr "全螢幕視訊"
 
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "音效視覺效果"
+
 msgctxt "#12009"
 msgid "Rebuild index..."
 msgstr "重建目錄索引…"
@@ -3807,7 +3911,7 @@ msgstr "密碼不能空白,請重試。"
 
 msgctxt "#12360"
 msgid "Master lock"
-msgstr "主機鎖定"
+msgstr "管理員密碼"
 
 msgctxt "#12362"
 msgid "Shutdown system if Master Lock retries exceeded"
@@ -3941,6 +4045,10 @@ msgctxt "#13013"
 msgid "Reboot"
 msgstr "重新啟動"
 
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "最小化"
+
 msgctxt "#13015"
 msgid "Power button action"
 msgstr "電源按鈕作用"
@@ -4061,6 +4169,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 +4265,10 @@ msgctxt "#13161"
 msgid "Primary DNS"
 msgstr "主要的 DNS 位址"
 
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "初始化失敗"
+
 msgctxt "#13170"
 msgid "Never"
 msgstr "從不"
@@ -4397,6 +4513,10 @@ msgctxt "#13318"
 msgid "Recursive slideshow"
 msgstr "重覆圖片"
 
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "隨機"
+
 msgctxt "#13320"
 msgid "Stereo"
 msgstr "立體聲"
@@ -4609,10 +4729,22 @@ msgctxt "#13388"
 msgid "Preset"
 msgstr "預設"
 
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "該視覺效果\n沒有預設值"
+
+msgctxt "#13390"
+msgid "There are no settings available\nfor this visualisation"
+msgstr "該視覺效果\n沒有可用的設定"
+
 msgctxt "#13391"
 msgid "Eject/Load"
 msgstr "托盤開/關"
 
+msgctxt "#13392"
+msgid "Use visualisation if playing audio"
+msgstr "撥放音效時使用視覺效果"
+
 msgctxt "#13393"
 msgid "Calculate size"
 msgstr "計算大小"
@@ -4781,6 +4913,18 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "只播放這個"
 
+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 "影音同步方式"
@@ -4841,6 +4985,10 @@ msgctxt "#13515"
 msgid "No art"
 msgstr "沒有圖片"
 
+msgctxt "#13516"
+msgid "Add art"
+msgstr "新增圖片"
+
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
 msgstr "當變更更新率時暫停"
@@ -4857,6 +5005,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 遙控器"
@@ -4985,6 +5141,10 @@ msgctxt "#14024"
 msgid "Enter the nearest large town"
 msgstr "輸入最近的城市"
 
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "視訊/音效/光碟緩衝區 - 硬碟"
+
 msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "視訊緩衝區 - 光碟機"
@@ -5253,6 +5413,10 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "停止擷取CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "無法取得的來源"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "移除"
@@ -5329,6 +5493,10 @@ msgctxt "#15213"
 msgid "Play using..."
 msgstr "播放方式…"
 
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "使用流暢的影音同步"
+
 msgctxt "#15215"
 msgid "Hide file names in thumbs view"
 msgstr "顯示縮圖時隱藏檔案名稱"
@@ -5469,6 +5637,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 "無法打開資料庫。"
@@ -5529,6 +5701,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "編輯標題"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "管理..."
+
 msgctxt "#16200"
 msgid "Operation was aborted"
 msgstr "操作被取消"
@@ -5617,6 +5793,10 @@ msgctxt "#16314"
 msgid "Inverse Telecine"
 msgstr "填補為逐行信號"
 
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Lanczos3 最佳化"
+
 msgctxt "#16316"
 msgid "Auto"
 msgstr "自動"
@@ -5645,10 +5825,22 @@ msgctxt "#16322"
 msgid "Spline36"
 msgstr "Spline36"
 
+msgctxt "#16323"
+msgid "Spline36 optimised"
+msgstr "Spline36 最佳化"
+
 msgctxt "#16324"
 msgid "Software Blend"
 msgstr "軟體混合"
 
+msgctxt "#16325"
+msgid "VDPAU - Bob"
+msgstr "VDPAU - Bob"
+
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "視訊後處理"
@@ -5741,10 +5933,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "電視錄影"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 縮圖的預設目錄"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "頻道"
@@ -5809,6 +5997,10 @@ 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 "這個錄影無法被播放。詳情請查閱日誌。"
@@ -6053,6 +6245,10 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "警告"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "服務"
+
 msgctxt "#19102"
 msgid "Please switch to another channel."
 msgstr "請切換到另一個頻道"
@@ -6297,6 +6493,10 @@ msgctxt "#19170"
 msgid "Timeout when starting playback"
 msgstr "開始播放時超時"
 
+msgctxt "#19171"
+msgid "Start playback minimised"
+msgstr "開始播放時最小化"
+
 msgctxt "#19172"
 msgid "Instant recording duration"
 msgstr "即時錄影長度"
@@ -6365,6 +6565,10 @@ msgctxt "#19189"
 msgid "Continue last channel on startup"
 msgstr "啟動時切換到上次的頻道"
 
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "最小化"
+
 msgctxt "#19191"
 msgid "PVR service"
 msgstr "PVR 服務"
@@ -6517,6 +6721,10 @@ msgctxt "#19229"
 msgid "Close channel OSD after switching channels"
 msgstr "切換頻道後關閉頻道 OSD"
 
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "播放時防止更新電子節目表"
+
 msgctxt "#19231"
 msgid "Always use the channel order from the backend(s)"
 msgstr "永遠使用後端的頻道順序"
@@ -6665,10 +6873,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 "你需要一個接收器 (tuner)、後端軟體和為該後端軟體"
 
+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 以取得更多資訊。"
@@ -7337,6 +7553,14 @@ msgctxt "#20085"
 msgid "Show system info"
 msgstr "顯示系統資訊"
 
+msgctxt "#20086"
+msgid "Show available disk space C: E: F:"
+msgstr "顯示可用的磁碟空間 C: E: F:"
+
+msgctxt "#20087"
+msgid "Show available disk space E: F: G:"
+msgstr "顯示可用的磁碟空間 E: F: G:"
+
 msgctxt "#20088"
 msgid "Weather info"
 msgstr "天氣資訊"
@@ -7459,7 +7683,7 @@ msgstr "密碼無效"
 
 msgctxt "#20118"
 msgid "This requires the master lock to be set."
-msgstr "需先設定管理員鎖定"
+msgstr "需先設定管理員密碼。"
 
 msgctxt "#20119"
 msgid "Would you like to set it now?"
@@ -7781,6 +8005,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "下載演出者資訊失敗"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "使用線上的資訊覆寫歌曲標籤"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "啟用這個選項後,全部下載的專輯和演出者資訊將會蓋過原本的歌曲標籤,例如類型、年分、歌曲演出者等等。如果你在你的歌曲標籤中帶有 MusicBrainz 識別碼的話將會很有用。"
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android 音樂"
@@ -8273,6 +8505,10 @@ msgctxt "#20413"
 msgid "Get fanart"
 msgstr "取得 Fanart"
 
+msgctxt "#20414"
+msgid "Show fanart in video and music libraries"
+msgstr "在影片和音樂資料庫中顯示 Fanart"
+
 msgctxt "#20415"
 msgid "Scanning for new content"
 msgstr "掃描新的內容"
@@ -8353,6 +8589,10 @@ msgctxt "#20434"
 msgid "Sets"
 msgstr "影片集"
 
+msgctxt "#20435"
+msgid "Combine split video items"
+msgstr "合併分開的影片項目"
+
 msgctxt "#20436"
 msgid "Export actor thumbs?"
 msgstr "匯出演員縮略圖"
@@ -8545,10 +8785,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "移除媒體共享"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "自訂字幕資料夾"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "電影和替代字幕資料夾"
@@ -8917,10 +9153,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "混合"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕位置"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "固定"
@@ -8953,6 +9185,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 "檔案名稱"
@@ -9345,6 +9589,10 @@ 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 "在清單中顯示視訊檔"
@@ -9435,11 +9683,11 @@ msgstr "播放全部"
 
 msgctxt "#23049"
 msgid "Teletext not available"
-msgstr "只不到 Teletext"
+msgstr "找不到電傳文訊"
 
 msgctxt "#23050"
 msgid "Activate Teletext"
-msgstr "使用廣播視訊"
+msgstr "使用電傳文訊"
 
 msgctxt "#23051"
 msgid "Part %i"
@@ -9459,7 +9707,7 @@ msgstr "正在執行"
 
 msgctxt "#23055"
 msgid "Scale Teletext to 4:3"
-msgstr "將 Teletext 比例調為4:3"
+msgstr "將電傳文訊比例調為 4:3"
 
 msgctxt "#23100"
 msgid "External Player Active"
@@ -9505,6 +9753,10 @@ msgctxt "#24009"
 msgid "Script"
 msgstr "腳本"
 
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "視覺效果"
+
 msgctxt "#24011"
 msgid "Add-on repository"
 msgstr "附加元件庫"
@@ -9625,14 +9877,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 "可取得的附加元件"
@@ -9737,6 +10005,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "鎖定附加元件管理員"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "這個附加元件不能被停用"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "〈目前版本〉"
@@ -9745,6 +10017,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 "您想要在您的系統上停用嗎?"
@@ -9773,6 +10049,78 @@ 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 "#24116"
+msgid "Default TV Service"
+msgstr "預設電視服務"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "選擇預設用來搜尋電視節目字幕的服務。"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "預設電影服務"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "選擇預設用來搜尋電影字幕的服務。"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "手動搜尋字串"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "輸入搜尋字串"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "通知"
@@ -9877,6 +10225,10 @@ msgctxt "#33016"
 msgid "Clips"
 msgstr "片斷"
 
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "重新啟動外掛以啟用"
+
 msgctxt "#33018"
 msgid "Tonight"
 msgstr "今晚"
@@ -10145,9 +10497,13 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "喇叭設定"
+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 媒體音效 2 (FFmpeg wmav2)"
 
 msgctxt "#34101"
 msgid "2.0"
@@ -10205,6 +10561,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 "找不到下一個播放項目"
@@ -10241,6 +10617,10 @@ msgctxt "#34401"
 msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
 msgstr "影像濾鏡/放大器初始化失敗,改用預設的雙線性放大"
 
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "初始化音訊裝置失敗"
+
 msgctxt "#34403"
 msgid "Check your audiosettings"
 msgstr "檢查你的音訊設定"
@@ -10263,7 +10643,7 @@ msgstr "單指點一下代表 Enter"
 
 msgctxt "#34408"
 msgid "2 finger single tap or 1 finger long press for contextmenu"
-msgstr "兩指點一下或單指長按開啟內容功能表"
+msgstr "兩指點一下或單指長按開啟內容選單"
 
 msgctxt "#35000"
 msgid "Peripherals"
@@ -10273,6 +10653,10 @@ msgctxt "#35001"
 msgid "Generic HID device"
 msgstr "通用 HID 裝置"
 
+msgctxt "#35002"
+msgid "Generic network adaptor"
+msgstr "通用網路配接器"
+
 msgctxt "#35003"
 msgid "Generic disk"
 msgstr "通用磁碟機"
@@ -10309,6 +10693,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 "位置"
@@ -10329,6 +10717,10 @@ msgctxt "#35504"
 msgid "Product ID"
 msgstr "產品 ID"
 
+msgctxt "#36000"
+msgid "Pulse-Eight CEC adaptor"
+msgstr "Pulse-Eight CEC 配接器"
+
 msgctxt "#36001"
 msgid "Pulse-Eight Nyxboard"
 msgstr "Pulse-Eight Nyxboard"
@@ -10349,6 +10741,10 @@ 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 時打開這台電視"
@@ -10369,6 +10765,10 @@ 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連接埠編號"
@@ -10377,6 +10777,10 @@ 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 "使用這個電視的語言設定"
@@ -10429,6 +10833,14 @@ 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 "切換到其他來源時暫停播放"
@@ -10461,6 +10873,10 @@ 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 "改變使用者介面的視覺風格"
@@ -10545,6 +10961,26 @@ 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 "顯示媒體檔的副檔名,比如說:「浪人情歌.mp3」會被簡化顯示為「浪人情歌」"
+
+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 "允許在使用者介面中透過內容選單 (例如鍵盤上的 C 可以開啟這個選單) 刪除或重新命名檔案。"
+
+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 "顯示隱藏的檔案和目錄。"
@@ -10557,10 +10993,26 @@ 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 會強制啟動 'Dim' 螢幕保護程式。"
+
+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 "播放暫停的時候螢幕變暗。使用 'Dim' 螢幕保護程式時將沒有效果。"
+
 msgctxt "#36135"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10585,18 +11037,62 @@ 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 "#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 "無可用資訊。"
@@ -10629,10 +11125,38 @@ 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 "#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 "#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 "無可用資訊。"
@@ -10641,6 +11165,10 @@ msgctxt "#36178"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36179"
+msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
+msgstr "當檔案被掃描進資料庫時顯示檔案資訊中的標題而非檔案名稱。"
+
 msgctxt "#36181"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10673,14 +11201,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 "無可用資訊。"
@@ -10689,6 +11249,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 中的個人影片錄影機 (Personal Video Recorder, 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 "刪除頻道/電子節目表資料庫,然後從後段重新匯入。"
+
 msgctxt "#36210"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10725,14 +11313,54 @@ msgctxt "#36218"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "預設的電子節目表顯示方式。預設為時間軸。"
+
+msgctxt "#36220"
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "從後端匯入電子節目表的天數。預設是 3 天。"
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "從後端匯入電子節目表的時間間隔。預設為 120 分鐘。"
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "當播放電視時不要匯入電子節目表以節省 CPU 資源。"
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "為了加快 XBMC 重新啟動的速度,電子節目表的資料預設存放在本地的資料庫。"
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "當找不到頻道的電子節目表時隱藏 \"找不到資訊\" 的標籤。"
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "刪除 XBMC 中的電子節目表資料庫然後從後端重新匯入。"
+
 msgctxt "#36226"
 msgid "No info available yet."
 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 "無可用資訊。"
@@ -10741,14 +11369,42 @@ msgctxt "#36233"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+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 "#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 "#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 "轉到已被家長鎖定的頻道時要求輸入密碼。你可以在一般標籤中的頻道編輯器中標記要鎖定的頻道。家長鎖定的頻道沒有輸入密碼的話不能被播放或側錄,而且電子節目表中的該頻道的資訊也會被隱藏。"
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "輸入用來解開家長鎖定頻道的新密碼。"
+
 msgctxt "#36251"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10765,10 +11421,50 @@ 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 "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "將音樂資料庫匯出成 XML 檔。你可選擇是否覆蓋目前的 XML 檔案。"
+
+msgctxt "#36263"
+msgid "Import a XML file into the Music Library database."
+msgstr "匯入一個 XML 檔到你的音樂資料庫。"
+
 msgctxt "#36264"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36267"
+msgid "XBMC will read the ReplayGain information encoded in your audio files by a program such as MP3Gain and normalise the sound levels accordingly."
+msgstr "XBMC 會讀取音樂檔案中經過如 MP3Gain 等程式編碼過的回放增益資訊,並依此來調整輸出的音量。"
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "如果可能發生 Clipping 的話降低檔案的音量。"
+
+msgctxt "#36273"
+msgid "Select the visualisation that will be displayed while listening to music."
+msgstr "選擇播放音樂時要顯示的視覺效果。"
+
 msgctxt "#36277"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10789,14 +11485,66 @@ 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 "無可用資訊。"
 
+msgctxt "#36293"
+msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
+msgstr "當播放音樂的時候,XBMC 會尋找符合的 .cdg 檔案,並顯示它的圖片。"
+
 msgctxt "#36294"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36295"
+msgid "Select the font used during karoake."
+msgstr "選擇卡拉OK所用的字型。"
+
+msgctxt "#36296"
+msgid "Select the size of the font used during karoake."
+msgstr "選擇卡拉 OK 要使用的字型大小。"
+
+msgctxt "#36297"
+msgid "Select the font colour used during karoake."
+msgstr "選擇卡拉OK的字體顏色。"
+
+msgctxt "#36298"
+msgid "Select the character set used during karoake."
+msgstr "選擇卡拉 OK 要使用的字元編碼。"
+
 msgctxt "#36299"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10825,6 +11573,22 @@ 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 "#36309"
+msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
+msgstr "在圖片檔案清單中顯示影片媒體,因為現在大部分的數位相機都有提供錄影的功能。"
+
 msgctxt "#36310"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10833,6 +11597,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 "無可用資訊。"
@@ -10841,6 +11617,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 "無可用資訊。"
@@ -10849,18 +11633,50 @@ 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 "#36324"
+msgid "When a manual or automatical library update occurs, notify UPnP clients."
+msgstr "當手動或自動發生資料庫更新時,通知 UPnP 客戶端。"
+
 msgctxt "#36325"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36326"
+msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
+msgstr "啟用 UPnP 客戶端。這將允許你從任何 UPnP 伺服器串流媒體且包含播放控制的功能。"
+
 msgctxt "#36327"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36328"
+msgid "Enable remote users to control XBMC through the built-in webserver."
+msgstr "讓遠端使用者可以透過內建的網頁伺服器控制 XBMC"
+
+msgctxt "#36329"
+msgid "Define the webserver port."
+msgstr "設定網路伺服器的連接埠。"
+
+msgctxt "#36330"
+msgid "Define the webserver username."
+msgstr "設定網頁伺服器的使用者帳號。"
+
+msgctxt "#36331"
+msgid "Define webserver password."
+msgstr "設定網頁伺服器的密碼。"
+
 msgctxt "#36333"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10945,6 +11761,34 @@ msgctxt "#36360"
 msgid "No info available yet."
 msgstr "無可用資訊。"
 
+msgctxt "#36363"
+msgid "Boost AC3 streams that have been downmixed to 2 channels."
+msgstr "加強被下降混合成雙聲道的 AC3 串流"
+
+msgctxt "#36365"
+msgid "Select this option if your receiver is capable of decoding AC3 streams."
+msgstr "如果你的接收器有能力解碼 AC3 串流則選擇這個選項。"
+
+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 "#36369"
+msgid "Select this option if your receiver is capable of decoding TrueHD streams."
+msgstr "如果你的接收器有能力解碼 TrueHD 串流則選擇這個選項。"
+
+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 "選擇要播放解碼後音效的裝置。"
+
 msgctxt "#36374"
 msgid "No info available yet."
 msgstr "無可用資訊。"
@@ -10953,18 +11797,82 @@ 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 "#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 "設定管理員密碼。"
+
+msgctxt "#36397"
+msgid "If enabled, the master lock code is required to unlock XBMC on startup "
+msgstr "如果啟用的話,當 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 "無可用資訊。"
@@ -11041,10 +11949,178 @@ 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 "#36425"
+msgid "Show context menu"
+msgstr "顯示內容選單"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "切換到頻道"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "顯示資訊"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "錄音"
+
+msgctxt "#36500"
+msgid "Stereoscopic mode (current)"
+msgstr "3D 立體模式 (目前的)"
+
+msgctxt "#36501"
+msgid "Stereoscopic mode"
+msgstr "3D 立體模式"
+
+msgctxt "#36502"
+msgid "None"
+msgstr "無"
+
+msgctxt "#36504"
+msgid "Side by side"
+msgstr "並排"
+
+msgctxt "#36507"
+msgid "Interlaced"
+msgstr "交錯掃描"
+
+msgctxt "#36520"
+msgid "Playback mode of stereoscopic videos"
+msgstr "3D 立體影片的播放模式"
+
+msgctxt "#36521"
+msgid "Ask me"
+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 "當播放停止時停用 3D 立體模式"
+
+msgctxt "#36527"
+msgid "This video is stereoscopic. Select playback mode"
+msgstr "這是一部 3D 立體影片。選擇播放模式"
+
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "選擇 3D 立體模式"
+
+msgctxt "#36530"
+msgid "Preferred mode"
+msgstr "偏好的模式"
+
+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 立體模式"
+
+msgctxt "#36537"
+msgid "No info available yet."
+msgstr "無可用資訊。"
+
+msgctxt "#36538"
+msgid "No info available yet."
+msgstr "無可用資訊。"
+
+msgctxt "#36539"
+msgid "No info available yet."
+msgstr "無可用資訊。"
+
+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 "#36543"
+msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
+msgstr "啟用這個功能讓下降混合多聲道時的對白比背景音效大聲"
+
+msgctxt "#36544"
+msgid "Enable hardware decoding of video files."
+msgstr "啟用影片硬體解碼。"
+
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "字幕立體效果深度"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "設定立體電影中字幕的視覺深度。愈高的值字幕感覺會愈接近觀眾。"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "限制使用者介面的解析度以節省記憶體。這不會影響影片播放。使用 1080 為不限制。需要重新啟動 XBMC。"
+
+msgctxt "#37001"
+msgid "(Directors Comments)"
+msgstr "(導演評論)"
+
+msgctxt "#37002"
+msgid "(Directors Comments 2)"
+msgstr "(導演評論 2)"
+
+msgctxt "#37011"
+msgid "(CC)"
+msgstr "(CC)"
+
+msgctxt "#37013"
+msgid "(Directors Comments)"
+msgstr "(導演評論)"
+
 msgctxt "#37014"
 msgid "Last used profile"
 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 和音量控制等系統按鍵"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "設定使用者介面的解析度限制"
index 36f8fa2..70ea894 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Odaberi odredišni direktorij"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Reproduciraj stereo na sve zvučnike"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Broj kanala"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Zasluge"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Isključi"
@@ -4981,10 +4973,6 @@ 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"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Zaustavi ripanje CD-a"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Nedostupan izvor"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Što želite učiniti s medijskim datotekama iz %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Zadržati"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Ukloni"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Dodatna obrada"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV snimanje"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Zadana mapa za PVR minijature"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Programi"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Idi odmah"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "EPG interval ažuriranja"
@@ -6887,7 +6891,7 @@ msgstr "Ažuriraj EPG informacije"
 
 msgctxt "#19252"
 msgid "Schedule EPG update for this channel?"
-msgstr "Zakaži EPG ažuriranje za ovaj program?"
+msgstr "Zadaj EPG ažuriranje za ovaj program?"
 
 msgctxt "#19253"
 msgid "EPG update scheduled for channel"
@@ -7871,11 +7875,11 @@ msgstr "Upiši lozinku za"
 
 msgctxt "#20144"
 msgid "Shutdown timer"
-msgstr "Zakazano vrijeme isključivanja"
+msgstr "Zakazano samoisključivanje"
 
 msgctxt "#20145"
 msgid "Shutdown interval (in minutes)"
-msgstr "Interval vremena isključivanja (u minutama)"
+msgstr "Interval samoisključivanja (u minutama)"
 
 msgctxt "#20146"
 msgid "Started, shutdown in %im"
@@ -7895,11 +7899,11 @@ msgstr "Isključivanje za 120 minuta"
 
 msgctxt "#20150"
 msgid "Custom shutdown timer"
-msgstr "Zakaži vrijeme isključivanja"
+msgstr "Samoisključivanje susatava"
 
 msgctxt "#20151"
 msgid "Cancel shutdown timer"
-msgstr "Otkaži zakazano isključivanje"
+msgstr "Prekini samoisključivanje"
 
 msgctxt "#20152"
 msgid "Lock preferences for %s"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Neuspjelo preuzimanje informacija izvođača"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Prikaži oznake pjesama s Interneta"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Ako je ovo omogućeno, svaka informacija koja je preuzeta za albume i izvođače biti će prikazana umjesto informacija postavljenih u oznakama pjesama, poput žanra, godine, izvođača pjesme itd. Korisno ako imate MusicBrainz identifikatore u vašim oznakama pjesama."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android glazba"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Odstrani dijeljenje medija"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mapa podnaslova"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film i alternativni direktorij podnaslova"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "izmješano"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokacija podnaslova"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fiksni"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Spremi podnaslov u mapu filma"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Zadana usluga za TV serije"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Odaberite uslugu koja će se koristiti kao zadana za podnaslove tv serija"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Zadana usluga za filmove"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Odaberite uslugu koja će se koristiti kao zadana za podnaslove filmova"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Upiši string za pretraživanje"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Upišite zahtjev za pretraživanje"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Obavijesti"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Podešavanje zvučnika"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Zadani EPG prozor prikaza. Zadana je Kronologija."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Broj dana EPG podataka koji će se uvesti iz pozadinskih softvera. Zadano je 2 dana."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Broj dana EPG podataka koji će se uvesti iz pozadinskih softvera. Zadano je 3 dana."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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."
@@ -12241,9 +12257,17 @@ 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 "#36426"
+msgid "Switch to channel"
+msgstr "Prebaci na program"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Prikaži informacije"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Snimaj"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12405,14 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Omogući hardversko dekôdiranje video datoteka."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Stereoskopska dubina podnaslova"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Postavite vizualnu dubinu podnaslova za stereoskopske video snimke. Ako je veća vrijednost, podnaslovi će biti bliži gledatelju."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(slabovidno)"
index 6250302..c827f66 100644 (file)
@@ -51,7 +51,7 @@ msgstr "Počasí"
 
 msgctxt "#9"
 msgid "xbmc media center"
-msgstr "Multimediální centrum xmbc"
+msgstr "Multimediální centrum XBMC"
 
 msgctxt "#11"
 msgid "Monday"
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Vyberte cílový adresář"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Přehrávat stereo zvuk ze všech reproduktorů"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Počet kanálů"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Zásluhy"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Vypnuto"
@@ -5693,10 +5685,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Nahrané pořady"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Výchozí složka pro náhledy PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanály"
@@ -8465,10 +8453,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Odebrat sdílení"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Složka titulků"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Video a alternativní adresář s titulky"
@@ -8829,10 +8813,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Počet shlédnutých epizod."
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Umístění titulků"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Pevné"
@@ -9673,6 +9653,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Ve vzhledu chybí některé soubory"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Zadejte řetězec k vyhledání"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Oznamování"
@@ -10045,10 +10029,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Nastavení reproduktorů"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10844,3 +10824,11 @@ msgstr "Žádné informace nejsou zatím k dispozici."
 msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Žádné informace nejsou zatím k dispozici."
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Přepnout na kanál"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Nahrávat"
index 61d5ef4..efad187 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Vælg destinationsmappe"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Send stereosignal til alle højttalere"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Antal lydkanaler"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Tak til"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Fra"
@@ -5753,10 +5745,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV-optagelser"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Standardmappe til PVR-miniaturebilleder"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanaler"
@@ -5787,7 +5775,7 @@ msgstr "Kommende optagelser"
 
 msgctxt "#19026"
 msgid "Add timer..."
-msgstr "Tilføj timer..."
+msgstr "Tilføj optagelse..."
 
 msgctxt "#19027"
 msgid "No search results"
@@ -5843,7 +5831,7 @@ msgstr "Er du sikker på, at du vil skjule denne kanal?"
 
 msgctxt "#19040"
 msgid "Timer"
-msgstr "Timer"
+msgstr "Optagelse"
 
 msgctxt "#19041"
 msgid "Are you sure you want to rename this recording?"
@@ -5851,7 +5839,7 @@ msgstr "Er du sikker på, at du vil omdøbe denne optagelse?"
 
 msgctxt "#19042"
 msgid "Are you sure you want to rename this timer?"
-msgstr "Er du sikker på, at du vil omdøbe denne timer?"
+msgstr "Er du sikker på, at du vil omdøbe denne optagelse?"
 
 msgctxt "#19043"
 msgid "Recording"
@@ -5907,15 +5895,15 @@ msgstr "Ingen information tilgængelig"
 
 msgctxt "#19056"
 msgid "New timer"
-msgstr "Ny timer"
+msgstr "Ny optagelse"
 
 msgctxt "#19057"
 msgid "Edit timer"
-msgstr "Rediger timer"
+msgstr "Rediger optagelse"
 
 msgctxt "#19058"
 msgid "Timer enabled"
-msgstr "Timer aktiveret"
+msgstr "Optagelse aktiveret"
 
 msgctxt "#19059"
 msgid "Stop recording"
@@ -5923,11 +5911,11 @@ msgstr "Stop optagelse"
 
 msgctxt "#19060"
 msgid "Delete timer"
-msgstr "Slet timer"
+msgstr "Slet optagelse"
 
 msgctxt "#19061"
 msgid "Add timer"
-msgstr "Tilføj timer"
+msgstr "Tilføj optagelse"
 
 msgctxt "#19062"
 msgid "Sort by: Channel"
@@ -6079,7 +6067,7 @@ msgstr "Indtast navn på mappen til optagelsen"
 
 msgctxt "#19106"
 msgid "Next timer on"
-msgstr "Næste timer aktiveret"
+msgstr "Næste optagelse kl. "
 
 msgctxt "#19107"
 msgid "at"
@@ -6087,7 +6075,7 @@ msgstr "på"
 
 msgctxt "#19109"
 msgid "Couldn't save timer. Check the log for details."
-msgstr "Kunne ikke gemme timeren. Se log'en for detaljer."
+msgstr "Kunne ikke gemme optagelsen. Se log'en for detaljer."
 
 msgctxt "#19110"
 msgid "An unexpected error occurred. Try again later or check the log for details."
@@ -6131,7 +6119,7 @@ msgstr "Undgå gentagelser"
 
 msgctxt "#19122"
 msgid "This timer is still recording. Are you sure you want to delete this timer?"
-msgstr "Denne timer optager stadig. Er du sikker på, at du vil slette denne timer?"
+msgstr "Denne optagelse optager stadig. Er du sikker på, at du vil slette denne optagelse?"
 
 msgctxt "#19123"
 msgid "Free to air channels only"
@@ -6139,7 +6127,7 @@ msgstr "Kun ukodede kanaler"
 
 msgctxt "#19124"
 msgid "Ignore present timers"
-msgstr "Ignorer nuværende timere"
+msgstr "Ignorer nuværende optagelser"
 
 msgctxt "#19125"
 msgid "Ignore present recordings"
@@ -6479,7 +6467,7 @@ msgstr "Indtast en gyldig web-adresse til den nye kanal"
 
 msgctxt "#19215"
 msgid "The PVR backend does not support timers."
-msgstr "PVR backend'en understøtter ikke timere."
+msgstr "PVR backend'en understøtter ikke optagelser."
 
 msgctxt "#19216"
 msgid "All radio channels"
@@ -6543,7 +6531,7 @@ msgstr "Ryd søgeresultater"
 
 msgctxt "#19233"
 msgid "Display a notification on timer updates"
-msgstr "Vis en besked ved opdatering af timer"
+msgstr "Vis en besked ved opdatering af optagelser"
 
 msgctxt "#19235"
 msgid "PVR manager is starting up"
@@ -6555,7 +6543,7 @@ msgstr "Indlæser kanaler fra klienter"
 
 msgctxt "#19237"
 msgid "Loading timers from clients"
-msgstr "Indlæser timere fra klienter"
+msgstr "Indlæser optagelser fra klienter"
 
 msgctxt "#19238"
 msgid "Loading recordings from clients"
@@ -7575,7 +7563,7 @@ msgstr "Indtast adganskode til"
 
 msgctxt "#20144"
 msgid "Shutdown timer"
-msgstr "Nedlukningstimer"
+msgstr "Sluk nedtælling"
 
 msgctxt "#20145"
 msgid "Shutdown interval (in minutes)"
@@ -7599,11 +7587,11 @@ msgstr "Luk ned om 120 minutter"
 
 msgctxt "#20150"
 msgid "Custom shutdown timer"
-msgstr "Nedlukningstimer"
+msgstr "Tilpasset sluk nedtælling"
 
 msgctxt "#20151"
 msgid "Cancel shutdown timer"
-msgstr "Annuller nedlukningstimer"
+msgstr "Annuller sluk nedtælling"
 
 msgctxt "#20152"
 msgid "Lock preferences for %s"
@@ -8561,10 +8549,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Fjern mediedelingsmappe"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mappe til undertekster"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Alternativ mappe til film og undertekster"
@@ -8933,10 +8917,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "Blandede"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Undertekstplacering"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fast"
@@ -9789,6 +9769,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Skin'et mangler nogle filer"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Indtast søgeord"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Meddelelser"
@@ -10161,10 +10145,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Højttalerkonfiguration"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10221,6 +10201,26 @@ msgctxt "#34123"
 msgid "Never"
 msgstr "Aldrig"
 
+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 ikke finde næste emne at afspille"
@@ -10765,6 +10765,10 @@ msgctxt "#36179"
 msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
 msgstr "Når en fil er skannet ind i biblioteket vil den vise metadata-titlen i stedet for filnavnet."
 
+msgctxt "#36180"
+msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode."
+msgstr "Udtræk miniaturebilleder og information om codecs og visningsformat, for visning i Biblioteks visning. "
+
 msgctxt "#36181"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10849,6 +10853,26 @@ 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 "importere kanalgrupper fra PVR-backend (hvis det er supporteret). Det vil slette brugeroprettet grupper, hvis de ikke er fundet på backend."
 
+msgctxt "#36205"
+msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
+msgstr "Sorter kanaler efter kanalnummer på backend, men vis XBMC's egene kanal numre."
+
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "Anvend kanalnumre fra backend i stedet for at indstilel dem manuelt i XBMC."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "Åben kanal indstillinger, for ændring af kanal sortering, kanal navn, ikon, m.m."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "Giv besked til back-end om at søge efter kanaler (hvis supporteret)"
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "Slet kanal/EPG database og genimportere data fra back-end bagefter."
+
 msgctxt "#36210"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10885,14 +10909,50 @@ msgctxt "#36218"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "Standard EPG visning. Normal er Tidslinje"
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "Timer mellem EPG data import fra backend. Standard er 120 minutter."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Importer ikke EPG data mens TV vises for at minimerer CPU forbrug."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "Normalt er EPG data gemt i en lokal database for hurtig visning når XBMC genstartes."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Skjul \"Ingen information tilgængelig\" beskeden når der ikke findes EPG data for kanal."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "Set data i XBMC's lokale EPG database og genimporter data fra backend."
+
 msgctxt "#36226"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Vis den valgte kanals stream i en lille boks i stedet for fuld skærm."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "Vis den sidst sete kanal når der skiftes til live-tv."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+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 "Tryk på en nummer tast i fuld skærms visning, vil automatisk skifte til den pågældende kanal efter 1 sekund."
+
 msgctxt "#36232"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10901,14 +10961,58 @@ msgctxt "#36233"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36234"
+msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
+msgstr "Varighed af optagelsen ved tryk på optag knappen eller ved oprettelse af en ny manuel optagelse. Standard er 180 minutter."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "Vis en besked når en optagelse er oprettet, færdig eller fjernet af backend."
+
 msgctxt "#36240"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+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 "Udfør \"Vågn-op komandoen\" nedenfor, når XBMC afsluttes eller går i dvale tilstand. Tidspunkt for næste planlagte optagelse tilføjes som parameter."
+
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "Kommandoen vil ikke blive udført hvis en optagelse er planlagt indenfor timeout perioden. Standard er 15 minutter."
+
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "Komandoen til udførelse. Standard er '/usr/bin/setwakeup.sh'."
+
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Tid som trækkes fra start tidspunkt for næste planlagte optagelse. Standard er 15 minutter."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Udfør \"Vågn-op kommandoen\" på et bestemt tidspunkt hver dag."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Tidspunkt for udførelse af \"Vågn-op kommandoen\"."
+
 msgctxt "#36247"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+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 "Spørg efter PIN kode for adgang til kanaler låst med forældrekontrol. Kanaler kan markeres som låste under kanal indstillinger på fanen generelt. kanaler låst med forældrekontrol kan ikke vises eller optages uden indtastning af PIN koden, og EPG information er skjult for disse kanaler."
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Indtast en ny PIN kode for at låse op for kanaler låst med forældrekontrol."
+
+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 "Spørg efter PIN kode igen efter X antal sekunder, når der forsøges på adgang til kanaler låst med forældrekontrol. Standard er 300 sekunder."
+
 msgctxt "#36251"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10925,14 +11029,82 @@ msgctxt "#36254"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36255"
+msgid "Determine if artists that appear only on compilations are shown in the library artist view."
+msgstr "Skal artister som kun er med på kompilations album, skal vises i artist visning."
+
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Automatisk hent album of artist information ved hjælp af scrapers i forbindelse med skanning."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Vælg standard album information kilde"
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Vælg standard artist information kilde. Se Add-on håndtering for muligheder."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Tjek for nye, fjernede og ændrede medie filer når XBMC startes."
+
 msgctxt "#36260"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Exporter musik biblioteks databasen til XML filer. Dette vil overskrive eventuelle eksisterende XML filer."
+
+msgctxt "#36263"
+msgid "Import a XML file into the Music Library database."
+msgstr "Importer en XML fil ind i musik biblioteks databasen."
+
 msgctxt "#36264"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36265"
+msgid "XBMC automatically plays the next item in the current folder. For example, in Files View: After a track has been played, XBMC would automatically play the next track in the same folder."
+msgstr "XBMC afspiller automatisk den næste fil i den nuværende mappe. For eksempel i \"Fil visning: Efter et nummer er blevet afspillet, afspiller XBMC automatisk den næste fil i den samme mappe."
+
+msgctxt "#36266"
+msgid "When songs are added to a playlist they are queued instead of playback starting immediately."
+msgstr "Når sange tilføjes en afspilningsliste, sættes de i kø i stedet for at blive afspillet med det samme."
+
+msgctxt "#36268"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Standard er 89db. Vær forsigtig med at ændre dette."
+
+msgctxt "#36269"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Standard er 89db. Vær forsigtig med at ændre dette."
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "Sænk automatisk volumen på en afspilning, med for højt signal niveau - ver 100%"
+
+msgctxt "#36271"
+msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds."
+msgstr "Anvend blød og overlappet overgang mellem musik numre. Du kan indstille overlap mellem sangene fra 1-15 sekunder."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Anvend crossfading mellem sange fra samme album."
+
+msgctxt "#36274"
+msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
+msgstr "Læs tag information fra musik filerne. For store musik biblioteker kan dette gøre indlæsning langsom over en netværksforbindelse."
+
+msgctxt "#36275"
+msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
+msgstr "Kontrollerer hvordan titler på sange vises. For at fungerer ska ID3 tags være aktiveret."
+
+msgctxt "#36276"
+msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
+msgstr "Anvendes til information i højre side af skærmen. Det anvendes normalt til at vise længde på numret."
+
 msgctxt "#36277"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10949,18 +11121,74 @@ msgctxt "#36280"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36281"
+msgid "XBMC will search for thumbs on remote shares and optical media. This can often slow down the listing of network folders."
+msgstr "XBMC vil søge efter miniature på netværks drev eller CD/DVD. Dette kan gøre indlæsning langsom over netværk."
+
 msgctxt "#36282"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36283"
+msgid "Autorun CDs when inserted in drive."
+msgstr "Automatisk afspilning af CD når den indsættes."
+
+msgctxt "#36284"
+msgid "Read the information belonging to an audio CD from an internet database."
+msgstr "Hent information om en musik CD fra internettet."
+
+msgctxt "#36285"
+msgid "Select the location on your hard drive where ripped tracks will be saved to."
+msgstr "Vælg hvor du ønsker at gemme musik numre som rippes fra CD."
+
+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 "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."
+
+msgctxt "#36287"
+msgid "Select which audio encoder to use when ripping."
+msgstr "Vælg lyd encoder som skal anvendes til at rippe musik. "
+
+msgctxt "#36288"
+msgid "Select which quality you want to rip your files."
+msgstr "Vælg til hvilken kvalitet du ønsker at rippe."
+
+msgctxt "#36289"
+msgid "Select which bitrate to use for the specified audio encoder for audio compression."
+msgstr "Vælg bitrate som skal anvendes af den valgte lyd encoder når lyden komprimeres."
+
+msgctxt "#36290"
+msgid "For FLAC define compression level, default 5"
+msgstr "Vælg FLAC kompressions niveau. Standard er 5."
+
+msgctxt "#36291"
+msgid "Auto eject disc after rip is complete."
+msgstr "Skub CD ud når ripning  er færdig"
+
 msgctxt "#36292"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36293"
+msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
+msgstr "Ved afspilning af musik vil eventuelle .cdg filer vises."
+
 msgctxt "#36294"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36295"
+msgid "Select the font used during karoake."
+msgstr "Vælg skrifttype for karoake."
+
+msgctxt "#36296"
+msgid "Select the size of the font used during karoake."
+msgstr "Vælg skriftstørrelse for karaoke."
+
+msgctxt "#36298"
+msgid "Select the character set used during karoake."
+msgstr "Vælg karaktersæt for karaoke."
+
 msgctxt "#36299"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -10989,6 +11217,14 @@ msgctxt "#36305"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36306"
+msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
+msgstr "Hvis EXIF information findes (date, time, camera used, etc.), vil den blive vist."
+
+msgctxt "#36307"
+msgid "Automatically generate picture thumbnails when entering picture folder."
+msgstr "Automatisk genererer miniature billeder, når en mappe med billeder åbnes."
+
 msgctxt "#36310"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
@@ -11205,6 +11441,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Skift til kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Optag"
+
 msgctxt "#36537"
 msgid "No info available yet."
 msgstr "Ingen information tilgængelig endnu."
index 3f982ce..d35d7b4 100644 (file)
@@ -419,7 +419,7 @@ msgstr "Algemeen"
 
 msgctxt "#129"
 msgid "Slideshow"
-msgstr "Voorstelling"
+msgstr "Diavoorstelling"
 
 msgctxt "#130"
 msgid "System info"
@@ -607,7 +607,7 @@ msgstr "Stijlen"
 
 msgctxt "#179"
 msgid "Song"
-msgstr "Tracklist"
+msgstr "Lied"
 
 msgctxt "#180"
 msgid "Duration"
@@ -619,7 +619,7 @@ msgstr "Selecteer album"
 
 msgctxt "#182"
 msgid "Tracks"
-msgstr "Nummer"
+msgstr "Nummers"
 
 msgctxt "#183"
 msgid "Review"
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Selecteer doelmap"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Geluid naar alle luidsprekers"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Aantal kanalen"
@@ -1231,7 +1227,7 @@ msgstr "Normaliseer niveaus bij downmixen"
 
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
-msgstr "DTS-HD geschikte obtvanger"
+msgstr "DTS-HD geschikte ontvanger"
 
 msgctxt "#348"
 msgid "Enable passthrough"
@@ -1595,7 +1591,7 @@ msgstr "Buffer"
 
 msgctxt "#440"
 msgid "Hard disk"
-msgstr "Harde Schijf"
+msgstr "Harde schijf"
 
 msgctxt "#441"
 msgid "UDF"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Credits"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Uit"
@@ -1983,7 +1975,7 @@ msgstr "Doorgifte Geluidsuitvoerapparaat"
 
 msgctxt "#547"
 msgid "No biography for this artist"
-msgstr "Geen biografie beschikbaar voor artiest"
+msgstr "Geen biografie beschikbaar voor deze artiest"
 
 msgctxt "#548"
 msgid "Downmix multichannel audio to stereo"
@@ -2259,7 +2251,7 @@ msgstr "Lopende TV series"
 
 msgctxt "#629"
 msgid "View mode"
-msgstr "Weergave"
+msgstr "Weergave modus"
 
 msgctxt "#630"
 msgid "Normal"
@@ -2431,7 +2423,7 @@ msgstr "Server"
 
 msgctxt "#708"
 msgid "Use an HTTP proxy server to access the internet"
-msgstr "HTTP-proxy gebruiken"
+msgstr "Gebruik een HTTP-proxy-server voor toegang tot het internet"
 
 msgctxt "#711"
 msgid "Internet Protocol (IP)"
@@ -4315,7 +4307,7 @@ msgstr "DNS-server"
 
 msgctxt "#13162"
 msgid "Initialise failed"
-msgstr "Initialiseren mislukt"
+msgstr "Initialisatie mislukt"
 
 msgctxt "#13170"
 msgid "Never"
@@ -4563,7 +4555,7 @@ msgstr "Diavoorstelling met mappen"
 
 msgctxt "#13319"
 msgid "Randomise"
-msgstr "Willekeurige volgorde"
+msgstr "Willekeurige"
 
 msgctxt "#13320"
 msgid "Stereo"
@@ -4975,15 +4967,11 @@ msgstr "geef de voorkeur aan VDPAU Video Mixer"
 
 msgctxt "#13438"
 msgid "Allow hardware acceleration (amcodec)"
-msgstr "Hardwareversnelling inschakelen (amcodec)"
+msgstr "Hardwareversnelling toestaan (amcodec)"
 
 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)"
+msgstr "Hardwareversnelling toestaan (mediacodec)"
 
 msgctxt "#13500"
 msgid "A/V sync method"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "CD rippen stoppen"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Niet beschikbare bron"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Wat wilt u dat er gebeurt met de media items van %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Behouden"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Verwijder"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Kwaliteitsverbetering video"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV opnames"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Standaard map voor TV thumbnails"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanalen"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "TV gids"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ga naar nu"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Vernieuwingsinterval van TV gids"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Downloaden van artiestinformatie mislukt"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Overschrijf nummer tags met online informatie"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Wanneer dit is geactiveerd, zal alle informatie dat is gedownload voor albums en artiesten worden overschreven voor als wat je hebt ingesteld in jou nummer tags, zoals genre`s, jaar, nummer artiesten, etc. Handig als je MusicBrainz indentificatie hebt in jouw nummer tags."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android muziek"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Gedeelde media verwijderen"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Map voor ondertitels..."
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Video - alternatieve ondertitelmap"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "gemixed"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Locatie van de ondertitels"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Vast"
@@ -9799,7 +9803,7 @@ msgstr "Instellingen verkeerd"
 
 msgctxt "#23055"
 msgid "Scale Teletext to 4:3"
-msgstr "Schaal Teletext naar 4:3"
+msgstr "Schaal Teletekst naar 4:3"
 
 msgctxt "#23100"
 msgid "External Player Active"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Sla ondertitels op in filmmap"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Standaard TV service"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Selecteer dienst dat zal worden gebruik als standaard om te zoeken naar TV serie ondertitels"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Standaard films dienst"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Selecteer dienst dat zal worden gebruikt als standaard om te zoeken voor film ondertitels"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Handmatige zoekopdracht"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Geef zoekopdracht"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Mededelingen"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Aantal geluidskanalen"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11247,11 +11271,11 @@ msgstr "Nog geen informatie beschikbaar."
 
 msgctxt "#36174"
 msgid "Enable Teletext when watching a live TV stream."
-msgstr "Laat Teletext toe tijdens het kijken van live TV."
+msgstr "Laat Teletekst toe tijdens het kijken van live TV."
 
 msgctxt "#36175"
 msgid "Scale Teletext to 4:3 ratio."
-msgstr "Schaal Teletext naar 4:3 beeldverhouding."
+msgstr "Schaal Teletekst naar 4:3 beeldverhouding."
 
 msgctxt "#36176"
 msgid "No info available yet."
@@ -11351,7 +11375,7 @@ msgstr "Kies de standaardbron voor TV showinformatie. Zie de Add-ons Beheerder v
 
 msgctxt "#36200"
 msgid "Default scraper used for adding music videos to your library."
-msgstr "Standaard scraper voor het toevoegen van musicvideos aan je bilbiotheek."
+msgstr "Standaard scraper voor het toevoegen van muziekvideo`s aan je bibliotheek."
 
 msgctxt "#36201"
 msgid "No info available yet."
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Standaard EPG venster. Standaard is dit ingesteld op Tijdlijn."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Aantal dagen van EPG gegevens te importeren vanuit de back-ends. Standaard 2 dagen."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Aantal dagen van EPG gegevens te importeren vanuit de back-ends. Standaard 3 dagen."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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."
@@ -12241,9 +12257,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Selecteer wat er moet gebeuren wanneer een EPG item is geselecteerd: [Toon context menu] zal het contextuele menu activeren van waaruit je vervolgacties kan kiezen; [Verander naar kanaal] Zal gelijk afstemmen naar het gerealteerde kanaal; [Toon informatie] zal een gedetailleerd informatiescherm tonen met plot en vervolgopties; [Opnemen] Zal een opname timer creëren voor het geselecteerde item."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Toon context menu"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Kanaal wijzigen"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Toon informatie"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Opnemen"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Gebruik hardware decodering van video bestanden."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Ondertitel Stereoscopische diepte"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Stelt de visuele diepte van ondertitels in voor stereoscopische video`s. Hoe hoger de waarde, des te dichterbij zullen de ondertitels verschijnen voor de kijker."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Gebruik hogere kwaliteitstexturen voor covers en fan-art (gebruikt meer geheugen)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limiteert de resolutie van de GUI om geheugen te besparen. dit beïnvloed niet het afspelen van video`s. gebruik 1080p voor ongelimiteerd. Vereist een Herstart."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Slechtzienden)"
@@ -12428,3 +12476,11 @@ 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"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Activeer een hogere kleurdiepte voor artwork"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Stel GUI resolutielimiet in"
index 994ddd6..21dc66c 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Select destination directory"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Output stereo to all speakers"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Number of channels"
@@ -1189,6 +1185,10 @@ msgctxt "#336"
 msgid "Framerate conversion"
 msgstr "Framerate conversion"
 
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Output configuration"
+
 msgctxt "#338"
 msgid "Fixed"
 msgstr "Fixed"
@@ -1497,6 +1497,10 @@ msgctxt "#419"
 msgid "High"
 msgstr "High"
 
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Keep audio device alive"
+
 msgctxt "#422"
 msgid "Delete album info"
 msgstr "Delete album info"
@@ -1641,6 +1645,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Switch view"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limit sampling rate (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Subs"
@@ -1689,10 +1697,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Credits"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Off"
@@ -2925,6 +2929,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Program Add-ons"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Set plug-in thumb"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Add-on settings"
@@ -3489,14 +3497,30 @@ msgctxt "#10035"
 msgid "Reset"
 msgstr "Reset"
 
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Basic"
+
 msgctxt "#10037"
 msgid "Standard"
 msgstr "Standard"
 
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Advanced"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
 msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Add-on browser"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Reset above settings to default"
+
 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?"
@@ -3509,6 +3533,18 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "No help available"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Resets all the visible settings to their default values."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "No categories available"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Try changing the setting level to see additional categories and settings."
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Yes/No dialog"
@@ -3845,6 +3881,10 @@ msgctxt "#12346"
 msgid "Password retry limit exceeded."
 msgstr "Password retry limit exceeded."
 
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "The system will now power down."
+
 msgctxt "#12348"
 msgid "Item locked"
 msgstr "Item locked"
@@ -4145,6 +4185,10 @@ msgctxt "#13110"
 msgid "Save resolution?"
 msgstr "Save resolution?"
 
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Would you like to keep this change?"
+
 msgctxt "#13112"
 msgid "High quality upscaling"
 msgstr "High quality upscaling"
@@ -4189,6 +4233,10 @@ msgctxt "#13122"
 msgid "VDPAU Studio level colour conversion"
 msgstr "VDPAU Studio level color conversion"
 
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Keep skin?"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "Blank other displays"
@@ -4993,6 +5041,14 @@ msgctxt "#13553"
 msgid "%.1f Seconds"
 msgstr "%.1f Seconds"
 
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minute"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minutes"
+
 msgctxt "#13600"
 msgid "Apple remote"
 msgstr "Apple remote"
@@ -5677,6 +5733,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "Edit title"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Manage..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "Edit sort title"
@@ -5905,10 +5965,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV recordings"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Default folder for PVR thumbnails"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Channels"
@@ -6221,6 +6277,18 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "Warning"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "Service"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Provider"
+
 msgctxt "#19102"
 msgid "Please switch to another channel."
 msgstr "Please switch to another channel."
@@ -6669,6 +6737,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 PVR Add-on could be enabled. Check your settings or the log for more info."
+
 msgctxt "#19224"
 msgid "Recording aborted"
 msgstr "Recording aborted"
@@ -6729,10 +6801,18 @@ msgctxt "#19239"
 msgid "Starting background threads"
 msgstr "Starting background threads"
 
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "No PVR Add-on enabled"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
 msgstr "The PVR manager has been enabled without any"
 
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "enabled PVR Add-on. Enable at least one Add-on"
+
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "in order to use the PVR functionality."
@@ -6845,6 +6925,10 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* All recordings"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "No PVR Add-ons could be found"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "You need a tuner, backend software, and an"
@@ -8745,10 +8829,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Remove media share"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtitle folder"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Movie & alternate subtitle directory"
@@ -9117,10 +9197,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mixed"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitle location"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixed"
@@ -9153,6 +9229,18 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s to %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Prefer external subtitles"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Prefer external subtitles to internal ones"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(External)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "File name"
@@ -9833,14 +9921,30 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Available Updates"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Dependencies not met. Please contact Add-on author."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "Add-on does not have the correct structure"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s is used by the following installed Add-on(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "This Add-on cannot be uninstalled"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Rollback"
 
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatible"
+
 msgctxt "#24050"
 msgid "Available Add-ons"
 msgstr "Available Add-ons"
@@ -9945,6 +10049,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "Lock Add-on manager"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "This Add-on cannot be disabled"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "(current)"
@@ -9953,6 +10061,10 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(blacklisted)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Add-on is incompatible or has been marked broken in repository."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Would you like to disable it on your system?"
@@ -9981,6 +10093,50 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Skin is missing some files"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Add-on is incompatible due to unmet dependencies."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pause when searching for subtitles"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Searching for subtitles ..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d subtitles found"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "No subtitles found"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Downloading subtitles ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Languages to download subtitles for"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Failed to download subtitle"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Enter search string"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifications"
@@ -10361,10 +10517,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Speaker Configuration"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11181,10 +11333,6 @@ 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 "Number of days of EPG data to import from backends. Defaults to 2 days."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11945,6 +12093,14 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Enable hardware video decode using AMLogic decoder"
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Switch to channel"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Record"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Stereoscopic mode (current)"
index bab2c12..4df7d2e 100755 (executable)
@@ -1046,7 +1046,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#252"
-msgid "Output stereo to all speakers"
+msgid "Stereo upmix"
 msgstr ""
 
 msgctxt "#253"
@@ -1990,11 +1990,7 @@ msgctxt "#470"
 msgid "Credits"
 msgstr ""
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr ""
-
-#empty strings from id 472 to 473
+#empty strings from id 471 to 473
 
 msgctxt "#474"
 msgid "Off"
@@ -2797,7 +2793,12 @@ msgctxt "#666"
 msgid "Verbose logging..."
 msgstr ""
 
-#empty strings from id 667 to 699
+#: system/settings/settings.xml
+msgctxt "#667"
+msgid "Enable Dolby Digital transcoding"
+msgstr ""
+
+#empty strings from id 668 to 699
 
 msgctxt "#700"
 msgid "Cleaning up library"
@@ -5996,7 +5997,7 @@ msgid "Allow hardware acceleration (MediaCodec)"
 msgstr ""
 
 msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
+msgid "Allow frame-multi-threaded decoding"
 msgstr ""
 
 #empty strings from id 13441 to 13499
@@ -6603,7 +6604,7 @@ msgstr ""
 
 #: xbmc/video/VideoDatabase.cpp
 msgctxt "#15013"
-msgid "What would you like to do with media items from"
+msgid "What would you like to do with media items from %s"
 msgstr ""
 
 #: xbmc/video/VideoDatabase.cpp
@@ -7257,9 +7258,10 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr ""
 
+#. Name of a setting, asking to enter the path to a folder that contains icons for TV channels
 #: system/settings/settings.xml
 msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
+msgid "Folder with channel icons"
 msgstr ""
 
 #: xbmc/windows/GUIWindowSystemInfo.cpp
@@ -7456,7 +7458,12 @@ msgctxt "#19065"
 msgid "Default EPG window"
 msgstr ""
 
-#empty string with id 19066
+#. Name of a shortcut to a custom folder for channel icons
+#: xbmc/pvr/windows/GUIWindowPVRChannels.cpp
+#: xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
+msgctxt "#19066"
+msgid "Channel icons"
+msgstr ""
 
 msgctxt "#19067"
 msgid "This event is already being recorded."
@@ -7471,7 +7478,9 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr ""
 
-#empty string with id 19070
+msgctxt "#19070"
+msgid "Go to now"
+msgstr ""
 
 msgctxt "#19071"
 msgid "EPG update interval"
@@ -8354,7 +8363,35 @@ msgctxt "#19281"
 msgid "Confirm channel switches by pressing OK"
 msgstr ""
 
-#empty strings from id 19282 to 19498
+#. Label for a select option or list item, representing an icon graphic (like a TV channel icon)
+#: xbmc/pvr/windows/GUIWindowPVRChannels.cpp
+#: xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
+msgctxt "#19282"
+msgid "Current icon"
+msgstr ""
+
+#. Label for a select option or list item, representing an icon graphic (like a TV channel icon)
+#: xbmc/pvr/windows/GUIWindowPVRChannels.cpp
+#: xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
+msgctxt "#19283"
+msgid "No icon"
+msgstr ""
+
+#. Label for a select/menu option to select an icon graphic
+#: xbmc/pvr/windows/GUIWindowPVRChannels.cpp
+#: xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
+msgctxt "#19284"
+msgid "Choose icon"
+msgstr ""
+
+#. Label for a select/menu option to select an icon graphic
+#: xbmc/pvr/windows/GUIWindowPVRChannels.cpp
+#: xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
+msgctxt "#19285"
+msgid "Browse for icon"
+msgstr ""
+
+#empty strings from id 19286 to 19498
 
 #: xbmc/epg/Epg.cpp
 msgctxt "#19499"
@@ -8730,7 +8767,7 @@ msgstr ""
 
 #: xbmc/epg/Epg.cpp
 msgctxt "#19648"
-msgid "Fitness &amp; Health"
+msgid "Fitness & Health"
 msgstr ""
 
 #: xbmc/epg/Epg.cpp
@@ -8762,7 +8799,7 @@ msgstr ""
 
 #: xbmc/epg/Epg.cpp
 msgctxt "#19662"
-msgid "Black &amp; White"
+msgid "Black & White"
 msgstr ""
 
 #: xbmc/epg/Epg.cpp
@@ -9633,9 +9670,21 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr ""
 
-#empty strings from id 20200 to 20239
+#empty strings from id 20200 to 20219
 #string id's 20200 thru 20211 are reserved for speedstrings (LocalizeStrings.cpp)
 
+#: system/settings/settings.xml
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr ""
+
+#empty strings from id 20222 to 20239
+
 #: xbmc/dialogs/GUIDialogMediaSource.cpp
 msgctxt "#20240"
 msgid "Android music"
@@ -9797,7 +9846,12 @@ msgctxt "#20321"
 msgid "Scanning albums using %s"
 msgstr ""
 
-#empty strings from id 20322 to 20323
+#empty string with id 20322
+
+#: xbmc/video/windows/GUIWindowVideoNav.cpp
+msgctxt "#20323"
+msgid "Movie plot"
+msgstr ""
 
 msgctxt "#20324"
 msgid "Play part..."
@@ -10535,7 +10589,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#21366"
-msgid "Subtitle folder"
+msgid "Custom subtitle folder"
 msgstr ""
 
 msgctxt "#21367"
@@ -10949,7 +11003,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#21460"
-msgid "Subtitle location"
+msgid "Subtitle location on screen"
 msgstr ""
 
 #: system/settings/settings.xml
@@ -12087,7 +12141,17 @@ msgctxt "#24119"
 msgid "Select service that will be used as default to search for Movie subtitles"
 msgstr ""
 
-#empty strings from id 24120 to 24999
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr ""
+
+#empty strings from id 24122 to 24999
 
 msgctxt "#25000"
 msgid "Notifications"
@@ -12122,7 +12186,22 @@ msgctxt "#25006"
 msgid "Select playback item"
 msgstr ""
 
-#empty strings from id 25007 to 29799
+#: xbmc/filesystem/BlurayDirectory.cpp
+msgctxt "#25007"
+msgid "Chapters: %u - duration: %s"
+msgstr ""
+
+#: xbmc/cores/dvdplayer/DVDPlayer.cpp
+msgctxt "#25008"
+msgid "Blu-ray Disc playback failed"
+msgstr ""
+
+#: xbmc/cores/dvdplayer/DVDPlayer.cpp
+msgctxt "#25009"
+msgid "The menu of this Blu-ray Disc is not supported"
+msgstr ""
+
+#empty strings from id 25010 to 29799
 #strings 29800 thru 29998 reserved strings used only in the default Project Mayhem III skin and not c++ code
 
 #: skin.confluence
@@ -12558,7 +12637,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#34100"
-msgid "Speaker Configuration"
+msgid "Number of channels"
 msgstr ""
 
 #: system/settings/settings.xml
@@ -13671,7 +13750,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
 msgstr ""
 
 #: system/settings/settings.xml
@@ -14381,7 +14460,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
+msgid "Select the number of channels supported by the audio connection, or the number of speakers if connected by analog connections. This setting does not apply to passthrough audio. Note - SPDIF supports 2.0 channels only but can still output multichannel audio using a format supported by passthrough."
 msgstr ""
 
 #: system/settings/settings.xml
@@ -14391,7 +14470,7 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#36364"
-msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
+msgid "Select to enable upmixing of 2 channel audio to the number of audio channels specified by the speaker configuration."
 msgstr ""
 
 #: system/settings/settings.xml
@@ -14686,10 +14765,40 @@ msgstr ""
 
 #: system/settings/settings.xml
 msgctxt "#36423"
-msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgid "Use frame-multi-threaded decoding instead of hardware accelerated decoding (less reliable than default single thread mode)."
 msgstr ""
 
-#empty strings from id 36424 to 36499
+#: system/settings/settings.xml
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36427"
+msgid "Show information"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36428"
+msgid "Record"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36429"
+msgid "Select this if the audio out connection only supports multichannel audio as Dolby Digital 5.1, this allows multichannel audio such as AAC5.1 or FLAC5.1 to be listened to in 5.1 surround sound. Note - transcoding can lead to a reduction in sound quality"
+msgstr ""
+
+#empty strings from id 36430 to 36499
 #end reservation
 
 #: system/settings/settings.xml
@@ -14871,7 +14980,27 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr ""
 
-#empty strings from id 36545 to 36999
+#: system/settings/settings.xml
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr ""
+
+#: system/settings/rbp.xml
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr ""
+
+#: system/settings/rbp.xml
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr ""
+
+#empty strings from id 36549 to 36999
 #reserved strings 365XX
 
 #: xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
@@ -14935,3 +15064,23 @@ msgstr ""
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr ""
+
+#: system/settings/rbp.xml
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr ""
+
+#: system/settings/rbp.xml
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr ""
+
+#: xbmc/network/upnp/UPnPPlayer.cpp
+msgctxt "#37022"
+msgid "UPnP Player"
+msgstr ""
+
+#: xbmc/network/upnp/UPnPPlayer.cpp
+msgctxt "#37023"
+msgid "Do you wish to stop playback on the remote device?"
+msgstr ""
index 78c43a9..5aa52c8 100644 (file)
@@ -689,10 +689,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Elektu celdosierujon"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Output Stereo to ĉiom Speakers"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Nombro de kanaloj"
@@ -1441,10 +1437,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "CrEditiis"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Off"
@@ -3893,6 +3885,10 @@ msgctxt "#24027"
 msgid "Weather"
 msgstr "Mia Wealar"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Tajpi Search String"
+
 msgctxt "#34123"
 msgid "Never"
 msgstr "Never"
@@ -3900,3 +3896,7 @@ msgstr "Never"
 msgctxt "#36016"
 msgid "Connected"
 msgstr "Xbox is Connected"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Registri"
index a0ce402..94c83aa 100644 (file)
@@ -231,7 +231,7 @@ msgstr "Idakagu"
 
 msgctxt "#77"
 msgid "SE"
-msgstr "kagu"
+msgstr "Kagu"
 
 msgctxt "#78"
 msgid "SSE"
@@ -315,15 +315,15 @@ msgstr "Uuenda"
 
 msgctxt "#103"
 msgid "Sort by: Name"
-msgstr "Järjesta:Nimi"
+msgstr "Järjesta: Nimi"
 
 msgctxt "#104"
 msgid "Sort by: Date"
-msgstr "Järjesta:Kuupäev"
+msgstr "Järjesta: Kuupäev"
 
 msgctxt "#105"
 msgid "Sort by: Size"
-msgstr "Järjesta:Suurus"
+msgstr "Järjesta: Suurus"
 
 msgctxt "#106"
 msgid "No"
@@ -603,7 +603,7 @@ msgstr "Stiilid"
 
 msgctxt "#179"
 msgid "Song"
-msgstr "Lugu"
+msgstr "Laul"
 
 msgctxt "#180"
 msgid "Duration"
@@ -615,7 +615,7 @@ msgstr "Vali album"
 
 msgctxt "#182"
 msgid "Tracks"
-msgstr "Lugusid"
+msgstr "Lood"
 
 msgctxt "#183"
 msgid "Review"
@@ -763,7 +763,7 @@ msgstr "Kiirus"
 
 msgctxt "#225"
 msgid "Vertical Shift"
-msgstr "Vertikaalne"
+msgstr "Vertikaalne nihe"
 
 msgctxt "#226"
 msgid "Test patterns..."
@@ -787,7 +787,7 @@ msgstr "Video filtrid"
 
 msgctxt "#231"
 msgid "None"
-msgstr "Ükski"
+msgstr "Puudub"
 
 msgctxt "#232"
 msgid "Point"
@@ -843,11 +843,11 @@ msgstr "Täisekraan"
 
 msgctxt "#245"
 msgid "Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)"
-msgstr "Kalibreerimine: (%i,%i)->(%i,%i) (Suurendus x%2.2f) Suhe:%2.2f:1 (Pikslid: %2.2f:1) (VShift: %2.2f)"
+msgstr "Kalibreerimine: (%i,%i)->(%i,%i) (Suurendus x%2.2f) Suhe:%2.2f:1 (Pikslid: %2.2f:1) (Vert. nihe: %2.2f)"
 
 msgctxt "#247"
 msgid "Scripts"
-msgstr "Skript"
+msgstr "Skriptid"
 
 msgctxt "#248"
 msgid "Language"
@@ -859,11 +859,7 @@ msgstr "Muusika"
 
 msgctxt "#251"
 msgid "Select destination directory"
-msgstr "Vali sihtkataloog"
-
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Väljasta stereo kõikidesse kõlaritesse"
+msgstr "Vali sihtkoha kaust"
 
 msgctxt "#253"
 msgid "Number of channels"
@@ -879,7 +875,7 @@ msgstr "CDDB"
 
 msgctxt "#256"
 msgid "Fetching CD information"
-msgstr "CD andmete toomine"
+msgstr "CD andmete hankimine"
 
 msgctxt "#257"
 msgid "Error"
@@ -887,7 +883,7 @@ msgstr "Viga"
 
 msgctxt "#258"
 msgid "Enable tag reading"
-msgstr "Luba silumise logimine"
+msgstr "Luba märgendi lugemine"
 
 msgctxt "#259"
 msgid "Opening"
@@ -971,11 +967,11 @@ msgstr "Kohanda ristkülikut kuni tekib perfektne ruut"
 
 msgctxt "#279"
 msgid "Unable to load settings"
-msgstr "Võimetu seadete laadimiseks"
+msgstr "Seadete laadimine ei ole võimalik"
 
 msgctxt "#280"
 msgid "Using default settings"
-msgstr "Vaikesätete kasutamine"
+msgstr "Kasutatakse vaikimisi seadeid"
 
 msgctxt "#281"
 msgid "Please check the XML files"
@@ -1123,11 +1119,11 @@ msgstr "Viga artistide puhastamisel"
 
 msgctxt "#322"
 msgid "Cleaning genres..."
-msgstr "Žanride puhastamine..."
+msgstr "Žanrite puhastamine..."
 
 msgctxt "#323"
 msgid "Error cleaning genres"
-msgstr "Viga žanride puhastamisel"
+msgstr "Viga žanrite puhastamisel"
 
 msgctxt "#324"
 msgid "Cleaning paths..."
@@ -1299,7 +1295,7 @@ msgstr "Pealkiri"
 
 msgctxt "#370"
 msgid "Thunderstorms"
-msgstr "pikne"
+msgstr "äikesetormid"
 
 msgctxt "#371"
 msgid "Partly"
@@ -1677,10 +1673,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Tiitrid"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod-kiip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Väljas"
@@ -1751,7 +1743,7 @@ msgstr "Lisavalikud (ainult edasijõudnutele!)"
 
 msgctxt "#494"
 msgid "Overall audio headroom"
-msgstr "Üldine heli kõrgus laeni (dB)"
+msgstr "Üldine helitugevuse lagi (dB)"
 
 msgctxt "#495"
 msgid "Upsample videos to GUI resolution"
@@ -2175,7 +2167,7 @@ msgstr "Sisesta number"
 
 msgctxt "#612"
 msgid "Bits/sample"
-msgstr "Bitid/diskreet"
+msgstr "Bitid/valim"
 
 msgctxt "#613"
 msgid "Sample rate"
@@ -2459,7 +2451,7 @@ msgstr "Värv"
 
 msgctxt "#738"
 msgid "Normal"
-msgstr "Normal"
+msgstr "Normaalne"
 
 msgctxt "#739"
 msgid "Bold"
@@ -2523,11 +2515,11 @@ msgstr "Muuda programmi rada"
 
 msgctxt "#756"
 msgid "Edit program name"
-msgstr "Toimeta programmi nime"
+msgstr "Muuda programmi nime"
 
 msgctxt "#757"
 msgid "Edit path depth"
-msgstr "Ülim"
+msgstr "Muuda raja sügavust"
 
 msgctxt "#759"
 msgid "View: Big list"
@@ -2559,7 +2551,7 @@ msgstr "Helesinine"
 
 msgctxt "#766"
 msgid "Light grey"
-msgstr "Heleroheline"
+msgstr "Helehall"
 
 msgctxt "#767"
 msgid "Grey"
@@ -2623,7 +2615,7 @@ msgstr "Võrguliidese seadete kasutuselevõtt. Palun oota."
 
 msgctxt "#785"
 msgid "Network interface restarted successfully."
-msgstr "Võrguliidese edukalt taaskäivitatud."
+msgstr "Võrguliides edukalt taaskäivitatud."
 
 msgctxt "#786"
 msgid "Network interface did not start successfully."
@@ -2667,7 +2659,7 @@ msgstr "Ühekordne viivitus (ms)"
 
 msgctxt "#796"
 msgid "Continuous repeat delay (ms)"
-msgstr "Korduse intervall (ms)"
+msgstr "Pidev viivitus (ms)"
 
 msgctxt "#797"
 msgid "Maximum number of clients"
@@ -2679,7 +2671,11 @@ msgstr "Internet"
 
 msgctxt "#799"
 msgid "Library Update"
-msgstr "Kogu uuendamine"
+msgstr "Teegi uuendamine"
+
+msgctxt "#800"
+msgid "Music library needs to rescan tags from files."
+msgstr "Muusikateegi märgendid vajavad failidest ülelugemist"
 
 msgctxt "#801"
 msgid "Would you like to scan now?"
@@ -2707,7 +2703,7 @@ msgstr "Lisa muusikat..."
 
 msgctxt "#999"
 msgid "Add Videos..."
-msgstr "Lisa videosid..."
+msgstr "Lisa videoid..."
 
 msgctxt "#1000"
 msgid "Preview"
@@ -2795,7 +2791,7 @@ msgstr "Sisesta rajad või sirvi meedia asukohti"
 
 msgctxt "#1022"
 msgid "Enter a name for this media Source."
-msgstr "Sisesta nimi"
+msgstr "Sisesta selle meediaallika nimi."
 
 msgctxt "#1023"
 msgid "Browse for new share"
@@ -3003,27 +2999,27 @@ msgstr "Pildid ja failid"
 
 msgctxt "#1221"
 msgid "Music & video & pictures"
-msgstr "Muusika ja video ja pildid"
+msgstr "Muusika, video ja pildid"
 
 msgctxt "#1222"
 msgid "Music & video & pictures & files"
-msgstr "Muusika ja video ja pildid ja failid"
+msgstr "Muusika, video, pildid ja failid"
 
 msgctxt "#1223"
 msgid "Disabled"
-msgstr "Blokeeritud"
+msgstr "Ei kasutata"
 
 msgctxt "#1226"
 msgid "Files & music & video"
-msgstr "Failid ja muusika ja videod"
+msgstr "Failid, muusika ja videod"
 
 msgctxt "#1227"
 msgid "Files & pictures & music"
-msgstr "Failid ja pildid ja muusika"
+msgstr "Failid, pildid ja muusika"
 
 msgctxt "#1228"
 msgid "Files & pictures & video"
-msgstr "Failid ja pildid ja video"
+msgstr "Failid, pildid ja video"
 
 msgctxt "#1229"
 msgid "Music & programs"
@@ -3039,19 +3035,19 @@ msgstr "Pildid ja programmid"
 
 msgctxt "#1232"
 msgid "Music & video & pictures & programs"
-msgstr "Muusika ja video ja pildid ja programmid"
+msgstr "Muusika, video, pildid ja programmid"
 
 msgctxt "#1233"
 msgid "Programs & video & music"
-msgstr "Programmid ja video ja muusika"
+msgstr "Programmid, video ja muusika"
 
 msgctxt "#1234"
 msgid "Programs & pictures & music"
-msgstr "Programmid ja pildid ja muusika"
+msgstr "Programmid, pildid ja muusika"
 
 msgctxt "#1235"
 msgid "Programs & pictures & video"
-msgstr "Programmid ja pildid ja video"
+msgstr "Programmid, pildid ja video"
 
 msgctxt "#1259"
 msgid "Zeroconf"
@@ -3103,7 +3099,7 @@ msgstr "ja"
 
 msgctxt "#1398"
 msgid "Freezing"
-msgstr "külmutamine"
+msgstr "ine"
 
 msgctxt "#1399"
 msgid "Late"
@@ -3161,6 +3157,10 @@ msgctxt "#1412"
 msgid "windy"
 msgstr "tuuline"
 
+msgctxt "#1413"
+msgid "Patches"
+msgstr "laigud"
+
 msgctxt "#1414"
 msgid "Thunderstorm"
 msgstr "äikesetorm"
@@ -3207,7 +3207,7 @@ msgstr "Lauspilvisus"
 
 msgctxt "#1425"
 msgid "Pellets"
-msgstr "Pelletid"
+msgstr "Graanulid"
 
 msgctxt "#1426"
 msgid "Hail"
@@ -3237,6 +3237,10 @@ msgctxt "#1432"
 msgid "Sand"
 msgstr "Liiv"
 
+msgctxt "#1433"
+msgid "Spray"
+msgstr "Pihustatud"
+
 msgctxt "#1434"
 msgid "Whirls"
 msgstr "Tuisupöörised"
@@ -3251,7 +3255,7 @@ msgstr "Puhumine"
 
 msgctxt "#1437"
 msgid "Pellet"
-msgstr "Pellet"
+msgstr "Graanul"
 
 msgctxt "#1438"
 msgid "Small"
@@ -3277,6 +3281,10 @@ msgctxt "#1443"
 msgid "of"
 msgstr "/"
 
+msgctxt "#1444"
+msgid "Funnel"
+msgstr "lehter"
+
 msgctxt "#1445"
 msgid "Cloud"
 msgstr "Pilv"
@@ -3309,6 +3317,10 @@ msgctxt "#2080"
 msgid "Empty list"
 msgstr "Tühjenda nimekiri"
 
+msgctxt "#2081"
+msgid "Went back to parent list because the active list has been emptied"
+msgstr "Võeti kasutusele peamine loend, sest jooksev loend tühjendati"
+
 msgctxt "#2100"
 msgid "Script failed! : %s"
 msgstr "Skripti viga! : %s"
@@ -3415,7 +3427,7 @@ msgstr "Videod/Esitusloend"
 
 msgctxt "#10029"
 msgid "Login screen"
-msgstr "Logimisviip"
+msgstr "Logimisekraan"
 
 msgctxt "#10034"
 msgid "Settings - Profiles"
@@ -3631,7 +3643,7 @@ msgstr "Tagasi muusika menüüsse"
 
 msgctxt "#12011"
 msgid "Return to videos window"
-msgstr "Tagasi videode menüüsse"
+msgstr "Tagasi videote menüüsse"
 
 msgctxt "#12021"
 msgid "Start from beginning"
@@ -3789,6 +3801,10 @@ msgctxt "#12350"
 msgid "Processing %s"
 msgstr "%s töötlemine"
 
+msgctxt "#12351"
+msgid "The art cache in your video library needs updating."
+msgstr "Sinu videoteegi pildipuhver vajab uuendamist"
+
 msgctxt "#12352"
 msgid "No downloading is needed."
 msgstr "Allalaadimine pole vajalik."
@@ -3835,7 +3851,7 @@ msgstr "Seaded & failihaldur"
 
 msgctxt "#12376"
 msgid "Set as default for all videos"
-msgstr "Säti vaikeväärtuseks kõikidele videodele"
+msgstr "Säti vaikeväärtuseks kõikidele videotele"
 
 msgctxt "#12377"
 msgid "This will reset any previously saved values"
@@ -3915,7 +3931,7 @@ msgstr "Ainult video"
 
 msgctxt "#13003"
 msgid "- Delay"
-msgstr "- Viitus"
+msgstr "- Viivitus"
 
 msgctxt "#13004"
 msgid "- Minimum file duration"
@@ -3935,7 +3951,7 @@ msgstr "Välju"
 
 msgctxt "#13010"
 msgid "Hibernate"
-msgstr "Hiberneeri"
+msgstr "Uinu"
 
 msgctxt "#13011"
 msgid "Suspend"
@@ -3993,10 +4009,30 @@ msgctxt "#13025"
 msgid "Joystick unplugged"
 msgstr "Juhtkang lahti ühendatud"
 
+msgctxt "#13026"
+msgid "Try to wake remote servers on access"
+msgstr "Proovi pöördumisel kaugservereid äratada"
+
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Ärka võrgust pöördumisel (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "Võrguühenduse ootamine..."
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Võrgust äratamine ebaõnnestus!"
+
 msgctxt "#13030"
 msgid "Waiting for server to wake up..."
 msgstr "Serveri ärkamise ootamine…"
 
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Pikendatud serveri ärkamise ootamine…"
+
 msgctxt "#13032"
 msgid "Waiting for services to launch..."
 msgstr "Teenuste käivitamise ootamine…"
@@ -4005,6 +4041,14 @@ msgctxt "#13033"
 msgid "MAC Discovery"
 msgstr "MAC leidmine"
 
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Uuendatud %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Leitud %s"
+
 msgctxt "#13036"
 msgid "Failed for %s"
 msgstr "%s nurjus"
@@ -4047,7 +4091,7 @@ msgstr "Salvesta resolutsioon?"
 
 msgctxt "#13112"
 msgid "High quality upscaling"
-msgstr "Audio visualiseerimine"
+msgstr "Kõrge kvaliteediga suurendus"
 
 msgctxt "#13113"
 msgid "Disabled"
@@ -4087,7 +4131,7 @@ msgstr "VDPAU HQ suurenduse aste"
 
 msgctxt "#13130"
 msgid "Blank other displays"
-msgstr "Tühista teised ekraanid"
+msgstr "Pimenda teised ekraanid"
 
 msgctxt "#13131"
 msgid "Disabled"
@@ -4095,7 +4139,7 @@ msgstr "Ei kasutata"
 
 msgctxt "#13132"
 msgid "Blank displays"
-msgstr "Tühistatud ekraanid"
+msgstr "Pimendatud ekraanid"
 
 msgctxt "#13140"
 msgid "Active connections detected!"
@@ -4171,7 +4215,7 @@ msgstr "Kustuta profiil '%s'?"
 
 msgctxt "#13204"
 msgid "Last loaded profile:"
-msgstr "Viimati laaditud profiil:"
+msgstr "Viimati laetud profiil:"
 
 msgctxt "#13205"
 msgid "Unknown"
@@ -4197,6 +4241,10 @@ msgctxt "#13211"
 msgid "Alarm!"
 msgstr "Äratus!"
 
+msgctxt "#13212"
+msgid "Cancelled with %im%is left"
+msgstr "Tühistatud %im%is enne alarmi"
+
 msgctxt "#13213"
 msgid "%2.0fm"
 msgstr "%2.0fm"
@@ -4227,7 +4275,7 @@ msgstr "Katkesta liigutamine"
 
 msgctxt "#13270"
 msgid "Hardware:"
-msgstr "Riistvara"
+msgstr "Riistvara:"
 
 msgctxt "#13271"
 msgid "CPU Usage:"
@@ -4315,7 +4363,7 @@ msgstr "Automaatne temperatuuri kontroll"
 
 msgctxt "#13302"
 msgid "Fan speed override"
-msgstr "Ventilaatori kiiruse alistus"
+msgstr "Etteantud ventilaatori kiirus"
 
 msgctxt "#13303"
 msgid "Fonts"
@@ -4323,27 +4371,27 @@ msgstr "Fondid"
 
 msgctxt "#13304"
 msgid "Enable flipping bi-directional strings"
-msgstr "Luba kahesuunaliste märkide pööramist"
+msgstr "Luba kahesuunaliste sõnade pööramist"
 
 msgctxt "#13305"
 msgid "Show RSS news feeds"
-msgstr "Näita RSS uudiste voogu"
+msgstr "Näita RSS uudisvoogu"
 
 msgctxt "#13306"
 msgid "Show parent folder items"
-msgstr "Näita kõrgema kausta nimetusi"
+msgstr "Näita emakausta nimetusi"
 
 msgctxt "#13307"
 msgid "Track naming template"
-msgstr "Lugude failinime mall"
+msgstr "Loonimede mall"
 
 msgctxt "#13308"
 msgid "Do you wish to reboot your system"
-msgstr "kas sa soovid alglaadida süsteemi,"
+msgstr "Kas sa soovid süsteemi alglaadimist"
 
 msgctxt "#13309"
 msgid "instead of just XBMC?"
-msgstr "mitte lihtsalt XBMC-d?"
+msgstr "XBMC-st väljumise asemel?"
 
 msgctxt "#13310"
 msgid "Zoom effect"
@@ -4351,7 +4399,7 @@ msgstr "Suurendusefekt"
 
 msgctxt "#13311"
 msgid "Float effect"
-msgstr "Ujumise efekt"
+msgstr "Hõljumise efekt"
 
 msgctxt "#13312"
 msgid "Black bar reduction"
@@ -4375,7 +4423,7 @@ msgstr "Rekursiivsed pisipildid"
 
 msgctxt "#13317"
 msgid "View slideshow"
-msgstr "Slaidiseanss"
+msgstr "Vaata slaidiesitlust"
 
 msgctxt "#13318"
 msgid "Recursive slideshow"
@@ -4471,7 +4519,7 @@ msgstr "Vaheta perioodiliselt"
 
 msgctxt "#13345"
 msgid "Switch LED off on playback"
-msgstr "Lülitage LED valgus taasesitusel välja"
+msgstr "Lülitage LED taasesitusel välja"
 
 msgctxt "#13346"
 msgid "Movie information"
@@ -4515,7 +4563,7 @@ msgstr "Pixel Shader (madala kvaliteediga)"
 
 msgctxt "#13356"
 msgid "Hardware overlays"
-msgstr "Riistvara katted"
+msgstr "Riistvaralised katted"
 
 msgctxt "#13357"
 msgid "High quality pixel shader"
@@ -4527,7 +4575,7 @@ msgstr "Esita"
 
 msgctxt "#13359"
 msgid "Set artist thumb"
-msgstr "Säti artisti pisipilt"
+msgstr "Määra artisti pisipilt"
 
 msgctxt "#13360"
 msgid "Automatically generate thumbnails"
@@ -4535,7 +4583,7 @@ msgstr "Genereeri pisipildid automaatselt"
 
 msgctxt "#13361"
 msgid "Enable voice"
-msgstr "Luba kõne"
+msgstr "Luba hääl"
 
 msgctxt "#13375"
 msgid "Enable device"
@@ -4587,7 +4635,7 @@ msgstr "Kasuta ajapõhist otsimist"
 
 msgctxt "#13387"
 msgid "Track naming template - right"
-msgstr "Loo failinime mall - parem"
+msgstr "Lugude failinime mall - parem"
 
 msgctxt "#13388"
 msgid "Preset"
@@ -4671,11 +4719,11 @@ msgstr "Kuula Last.fm'i"
 
 msgctxt "#13411"
 msgid "Minimum fan speed"
-msgstr "Miinimum ventilaatori kiirus"
+msgstr "Minimaalne ventilaatori kiirus"
 
 msgctxt "#13412"
 msgid "Play from here"
-msgstr "Esita siit"
+msgstr "Esita siit alates"
 
 msgctxt "#13413"
 msgid "Downloading"
@@ -4695,11 +4743,11 @@ msgstr "Automaatne tuvastus"
 
 msgctxt "#13417"
 msgid "Basic shaders (ARB)"
-msgstr "Lihtsad varjud (ARB)"
+msgstr "Lihtsad varjutajad (ARB)"
 
 msgctxt "#13418"
 msgid "Advanced shaders (GLSL)"
-msgstr "Täiustatud varjud (GLSL)"
+msgstr "Täiustatud varjutajad (GLSL)"
 
 msgctxt "#13419"
 msgid "Software"
@@ -4727,35 +4775,35 @@ msgstr "Kasuta piksli puhvri objekte"
 
 msgctxt "#13425"
 msgid "Allow hardware acceleration (VDPAU)"
-msgstr "Luba riistvara kiirendus (VDPAU)"
+msgstr "Luba riistvaraline kiirendus (VDPAU)"
 
 msgctxt "#13426"
 msgid "Allow hardware acceleration (VAAPI)"
-msgstr "Luba riistvara kiirendus (VAAPI)"
+msgstr "Luba riistvaraline kiirendus (VAAPI)"
 
 msgctxt "#13427"
 msgid "Allow hardware acceleration (DXVA2)"
-msgstr "Luba riistvara kiirendus (DXVA2)"
+msgstr "Luba riistvaraline kiirendus (DXVA2)"
 
 msgctxt "#13428"
 msgid "Allow hardware acceleration (CrystalHD)"
-msgstr "Luba riistvara kiirendus (CrystalHD)"
+msgstr "Luba riistvaraline kiirendus (CrystalHD)"
 
 msgctxt "#13429"
 msgid "Allow hardware acceleration (VDADecoder)"
-msgstr "Luba riistvara kiirendus (VDADecoder)"
+msgstr "Luba riistvaraline kiirendus (VDADecoder)"
 
 msgctxt "#13430"
 msgid "Allow hardware acceleration (OpenMax)"
-msgstr "Luba riistvara kiirendus (OpenMax)"
+msgstr "Luba riistvaraline kiirendus (OpenMax)"
 
 msgctxt "#13431"
 msgid "Pixel Shaders"
-msgstr "Pikselivarjajad"
+msgstr "Pikselite varjutajad"
 
 msgctxt "#13432"
 msgid "Allow hardware acceleration (VideoToolbox)"
-msgstr "Luba riistvara kiirendus (VideoToolbox)"
+msgstr "Luba riistvaraline kiirendus (VideoToolbox)"
 
 msgctxt "#13433"
 msgid "Play the next video automatically"
@@ -4765,6 +4813,22 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "Esita ainult see"
 
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Luba kõrge kvaliteediga suurendajad"
+
+msgctxt "#13436"
+msgid "Allow hardware acceleration (libstagefright)"
+msgstr "Luba riistvaraline kiirendus (libstagefright)"
+
+msgctxt "#13438"
+msgid "Allow hardware acceleration (amcodec)"
+msgstr "Luba riistvaraline kiirendus (amcodec)"
+
+msgctxt "#13439"
+msgid "Allow hardware acceleration (MediaCodec)"
+msgstr "Luba riistvaraline kiirendus (MediaCodec)"
+
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "A/V sünkro meetod"
@@ -4805,6 +4869,30 @@ msgctxt "#13510"
 msgid "Sync playback to display"
 msgstr "Sünkroniseeri taasesitus ekraaniga"
 
+msgctxt "#13511"
+msgid "Choose art"
+msgstr "Vali pilt"
+
+msgctxt "#13512"
+msgid "Current art"
+msgstr "Valitud pilt"
+
+msgctxt "#13513"
+msgid "Remote art"
+msgstr "Kauge pilt"
+
+msgctxt "#13514"
+msgid "Local art"
+msgstr "Kohalik pilt"
+
+msgctxt "#13515"
+msgid "No art"
+msgstr "Pilt puudub"
+
+msgctxt "#13516"
+msgid "Add art"
+msgstr "Lisa pilt"
+
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
 msgstr "Peata esitus värskendussageduse muutmise ajal"
@@ -4851,11 +4939,11 @@ msgstr "Multifunkts. pult (Harmony)"
 
 msgctxt "#13620"
 msgid "Apple Remote Error"
-msgstr "Apple Remote'i viga"
+msgstr "Apple puldi viga"
 
 msgctxt "#13621"
 msgid "Apple Remote support could be enabled."
-msgstr "Apple Remote tuge ei õnnestunud lubada."
+msgstr "Apple puldi tuge ei õnnestunud lubada."
 
 msgctxt "#14000"
 msgid "Stack"
@@ -5055,7 +5143,7 @@ msgstr "Lõpeta skaneerimine"
 
 msgctxt "#14057"
 msgid "Not possible while scanning for media info"
-msgstr "Ei ole võimalik, kui skaneeritakse meedia andmeid"
+msgstr "Ei ole võimalik meedia andmete skaneerimise ajal"
 
 msgctxt "#14058"
 msgid "Film grain effect"
@@ -5191,7 +5279,7 @@ msgstr "Turvalisus"
 
 msgctxt "#14094"
 msgid "Input devices"
-msgstr "Sisendseaded"
+msgstr "Sisendseadmed"
 
 msgctxt "#14095"
 msgid "Power saving"
@@ -5255,7 +5343,7 @@ msgstr "* Kõik lood"
 
 msgctxt "#15105"
 msgid "* All genres"
-msgstr "* Küik žanrid"
+msgstr "* Kõik žanrid"
 
 msgctxt "#15107"
 msgid "Buffering..."
@@ -5263,7 +5351,7 @@ msgstr "Puhvrisse laadimine..."
 
 msgctxt "#15108"
 msgid "Navigation sounds"
-msgstr "Menüü helinad"
+msgstr "Menüü helid"
 
 msgctxt "#15109"
 msgid "Skin default"
@@ -5415,7 +5503,7 @@ msgstr "Taasesitus ebaõnnestus"
 
 msgctxt "#16027"
 msgid "One or more items failed to play."
-msgstr "Ühe või rohkema nimetusi esitamine ebaõnnestus."
+msgstr "Ühe või mitme nimetuse esitamine ebaõnnestus."
 
 msgctxt "#16028"
 msgid "Enter value"
@@ -5439,7 +5527,7 @@ msgstr "Andmebaasi ei saanud avada."
 
 msgctxt "#16034"
 msgid "Could not get songs from database."
-msgstr "Andmebaasist ei saanud laule."
+msgstr "Laulude lugemine andmebaasist ei õnnestunud."
 
 msgctxt "#16035"
 msgid "Party mode playlist"
@@ -5487,7 +5575,7 @@ msgstr "Märgi vaadatuks"
 
 msgctxt "#16104"
 msgid "Mark as unwatched"
-msgstr "Märgi vaatamataks"
+msgstr "Märgi mitte vaadatuks"
 
 msgctxt "#16105"
 msgid "Edit title"
@@ -5663,7 +5751,7 @@ msgstr "Vastuvõttev seade"
 
 msgctxt "#19007"
 msgid "Device status"
-msgstr "Seade seisund"
+msgstr "Seadme seisund"
 
 msgctxt "#19008"
 msgid "Signal quality"
@@ -5687,7 +5775,7 @@ msgstr "PVR põhi"
 
 msgctxt "#19013"
 msgid "Free to air"
-msgstr "Free to air"
+msgstr "Vabalevi"
 
 msgctxt "#19014"
 msgid "Fixed"
@@ -5705,10 +5793,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV salvestused"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Vaikimisi kaust PVR pisipiltidele"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanalid"
@@ -5763,7 +5847,7 @@ msgstr "Järgmine"
 
 msgctxt "#19032"
 msgid "Timeline"
-msgstr "Ajavöö"
+msgstr "Ajaskaala"
 
 msgctxt "#19033"
 msgid "Information"
@@ -5787,11 +5871,11 @@ msgstr "Näita signaali kvaliteeti."
 
 msgctxt "#19038"
 msgid "Not supported by the PVR backend."
-msgstr "Puudub PVR lõppseade toetus."
+msgstr "Puudub PVR lõppseadme toetus."
 
 msgctxt "#19039"
 msgid "Are you sure you want to hide this channel?"
-msgstr "Olete kindel, et soovite seda kanalit peita."
+msgstr "Olete kindel, et soovite seda kanalit peita?"
 
 msgctxt "#19040"
 msgid "Timer"
@@ -5799,7 +5883,7 @@ msgstr "Ajastus"
 
 msgctxt "#19041"
 msgid "Are you sure you want to rename this recording?"
-msgstr "Olete kindel, et soovite salvestust ümber nimetada."
+msgstr "Olete kindel, et soovite salvestust ümber nimetada?"
 
 msgctxt "#19042"
 msgid "Are you sure you want to rename this timer?"
@@ -5919,7 +6003,7 @@ msgstr "Ära salvesta elektroonlisist saatekava andmebaasi"
 
 msgctxt "#19073"
 msgid "Delay channel switch"
-msgstr "Viivita kanali vahetust"
+msgstr "Viivita kanali vahetusega"
 
 msgctxt "#19074"
 msgid "Active:"
@@ -6039,7 +6123,7 @@ msgstr " "
 
 msgctxt "#19109"
 msgid "Couldn't save timer. Check the log for details."
-msgstr "Ajastust ei salvestatud. "
+msgstr "Ajastust ei salvestatud. Vaata logist detaile."
 
 msgctxt "#19110"
 msgid "An unexpected error occurred. Try again later or check the log for details."
@@ -6087,7 +6171,7 @@ msgstr "Taimer veel salvestab. Oled kindel, et soovid seda taimerit kustutada?"
 
 msgctxt "#19123"
 msgid "Free to air channels only"
-msgstr "Tasuta vaid õhukanalitele"
+msgstr "Ainult vabalevi kanalid"
 
 msgctxt "#19124"
 msgid "Ignore present timers"
@@ -6103,7 +6187,7 @@ msgstr "Alguse aeg"
 
 msgctxt "#19127"
 msgid "End time"
-msgstr "Lõppemise aeg"
+msgstr "Lõpu aeg"
 
 msgctxt "#19128"
 msgid "Start date"
@@ -6111,7 +6195,7 @@ msgstr "Alguse kuupäev"
 
 msgctxt "#19129"
 msgid "End date"
-msgstr "Lõppemise kuupäev"
+msgstr "Lõpu kuupäev"
 
 msgctxt "#19130"
 msgid "Minimum duration"
@@ -6135,7 +6219,7 @@ msgstr "Hõlma kirjeldus"
 
 msgctxt "#19135"
 msgid "Case sensitive"
-msgstr "Tõusutundlik"
+msgstr "Tõstutundlik"
 
 msgctxt "#19136"
 msgid "Channel unavailable"
@@ -6143,7 +6227,7 @@ msgstr "Kanal pole saadaval"
 
 msgctxt "#19137"
 msgid "No groups defined"
-msgstr "Gruppe pole määrateltud"
+msgstr "Gruppe pole määratletud"
 
 msgctxt "#19138"
 msgid "Please create a group first"
@@ -6167,7 +6251,7 @@ msgstr "Gruppide haldamine"
 
 msgctxt "#19144"
 msgid "No groups defined"
-msgstr "Gruppe pole määrateltud"
+msgstr "Gruppe pole määratletud"
 
 msgctxt "#19145"
 msgid "Grouped"
@@ -6255,11 +6339,11 @@ msgstr "Videosalvesti andmed"
 
 msgctxt "#19167"
 msgid "Scan for missing icons"
-msgstr "Skaneeri puuduvaid ikoone"
+msgstr "Otsi puuduvaid ikoone"
 
 msgctxt "#19169"
 msgid "Hide video information box"
-msgstr "Peida video andmete kast"
+msgstr "Peida video andmed"
 
 msgctxt "#19170"
 msgid "Timeout when starting playback"
@@ -6295,7 +6379,7 @@ msgstr "Kanaleid vahetades näita kanali infot"
 
 msgctxt "#19179"
 msgid "Automatically hide channel information"
-msgstr "Automaatselt peida kanali info"
+msgstr "Peida kanali info automaatselt"
 
 msgctxt "#19180"
 msgid "TV"
@@ -6303,7 +6387,7 @@ msgstr "TV"
 
 msgctxt "#19181"
 msgid "Menu/OSD"
-msgstr "Menüü/kuvaregulaator"
+msgstr "Menüü/ekraanikuva"
 
 msgctxt "#19182"
 msgid "Days to display in the EPG"
@@ -6485,10 +6569,18 @@ msgctxt "#19229"
 msgid "Close channel OSD after switching channels"
 msgstr "Sulge kanali OSD pärast kanali vahetust"
 
+msgctxt "#19231"
+msgid "Always use the channel order from the backend(s)"
+msgstr "Kasuta alati põhja(de) kanalijärjestust"
+
 msgctxt "#19232"
 msgid "Clear search results"
 msgstr "Puhasta otsingutulemused"
 
+msgctxt "#19233"
+msgid "Display a notification on timer updates"
+msgstr "Näita teadet taimeri uuendamisel "
+
 msgctxt "#19235"
 msgid "PVR manager is starting up"
 msgstr "PVR haldur käivitub"
@@ -6497,10 +6589,18 @@ msgctxt "#19236"
 msgid "Loading channels from clients"
 msgstr "Kliendist kanalite laadimine"
 
+msgctxt "#19237"
+msgid "Loading timers from clients"
+msgstr "Kliendist taimerite laadimine"
+
 msgctxt "#19238"
 msgid "Loading recordings from clients"
 msgstr "Kliendist salvestuste laadimine"
 
+msgctxt "#19239"
+msgid "Starting background threads"
+msgstr "Taustaprotsesside käivitus"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
 msgstr "PVR haldur lubati ilma ühegi"
@@ -6509,21 +6609,25 @@ msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "PVR funktsionaalsuse kasutamiseks."
 
+msgctxt "#19244"
+msgid "Backend idle time"
+msgstr "Põhja jõudeaeg"
+
 msgctxt "#19245"
 msgid "Set wakeup command (cmd [timestamp])"
-msgstr "Määra Ã¼les Ã¤ratus käsk (cmd [ajatempel])"
+msgstr "Määra Ã¤ratuse käsklus (cmd [ajatempel])"
 
 msgctxt "#19246"
 msgid "Wakeup before recording"
-msgstr "Enne salvestamist ärka"
+msgstr "Äratus enne salvestamist"
 
 msgctxt "#19247"
 msgid "Daily wakeup"
-msgstr "Päevane äratus"
+msgstr "Igapäevane äratus"
 
 msgctxt "#19248"
 msgid "Daily wakeup time (HH:MM:SS)"
-msgstr "Päevase äratuse aeg (TT:MM:SS)"
+msgstr "Igapäevase äratuse aeg (TT:MM:SS)"
 
 msgctxt "#19249"
 msgid "Filter channels"
@@ -6691,7 +6795,7 @@ msgstr "Täiskasvanute film/Draama"
 
 msgctxt "#19516"
 msgid "News/Current Affairs"
-msgstr "Uudised/Praegused afäärid"
+msgstr "Uudised/Päevakajaline"
 
 msgctxt "#19517"
 msgid "News/Weather Report"
@@ -6699,7 +6803,7 @@ msgstr "Uudised/Ilmateade"
 
 msgctxt "#19518"
 msgid "News Magazine"
-msgstr "Ajaleht"
+msgstr "Uudisteajakiri"
 
 msgctxt "#19519"
 msgid "Documentary"
@@ -6783,12 +6887,16 @@ msgstr "Eelkooliealiste programmid"
 
 msgctxt "#19566"
 msgid "Entertainment Programmes for 6 to 14"
-msgstr "Meelelahutusprogrammid 6 kuni 14 aastatele"
+msgstr "Meelelahutusprogrammid 6 kuni 14 aastastele"
 
 msgctxt "#19567"
 msgid "Entertainment Programmes for 10 to 16"
 msgstr "Meelelahutusprogrammid 10 kuni 16 aastastele"
 
+msgctxt "#19568"
+msgid "Informational/Educational/School Programme"
+msgstr "Info/Haridus/Kooliprogramm"
+
 msgctxt "#19569"
 msgid "Cartoons/Puppets"
 msgstr "Multikad/Nukuteater"
@@ -6849,6 +6957,10 @@ msgctxt "#19603"
 msgid "Experimental Film/Video"
 msgstr "Eksperimentaalne film/Video"
 
+msgctxt "#19604"
+msgid "Broadcasting/Press"
+msgstr "Ringhääling/Ajakirjandus"
+
 msgctxt "#19605"
 msgid "New Media"
 msgstr "Uus meedia"
@@ -6859,23 +6971,27 @@ msgstr "Kunsti/Kultuuriajakirjad"
 
 msgctxt "#19607"
 msgid "Fashion"
-msgstr "Režiim"
+msgstr "Mood"
 
 msgctxt "#19612"
 msgid "Social/Political/Economics"
-msgstr "Sotsiaalne/Poliitiline/Ökonoomne"
+msgstr "Sotsiaalne/Poliitiline/Majandus"
 
 msgctxt "#19613"
 msgid "Magazines/Reports/Documentary"
 msgstr "Ajakirjad/Reportaažid/Dokumentaalid"
 
+msgctxt "#19614"
+msgid "Economics/Social Advisory"
+msgstr "Majandus/Sotsiaalne nõuandev"
+
 msgctxt "#19615"
 msgid "Remarkable People"
-msgstr "Tähtsad isikud"
+msgstr "Väljapaistvad inimesed"
 
 msgctxt "#19628"
 msgid "Education/Science/Factual"
-msgstr "Haridus/Teadus/Faktilised"
+msgstr "Haridus/Teadus/Faktid"
 
 msgctxt "#19629"
 msgid "Nature/Animals/Environment"
@@ -6883,7 +6999,7 @@ msgstr "Loodus/Loomad/Keskkond"
 
 msgctxt "#19630"
 msgid "Technology/Natural Sciences"
-msgstr "Tehnoloogia/Loodusteadus"
+msgstr "Tehnoloogia/Loodusteadused"
 
 msgctxt "#19631"
 msgid "Medicine/Physiology/Psychology"
@@ -6893,6 +7009,10 @@ msgctxt "#19632"
 msgid "Foreign Countries/Expeditions"
 msgstr "Välisriigid/Ekspeditsioonid"
 
+msgctxt "#19633"
+msgid "Social/Spiritual Sciences"
+msgstr "Sotsiaalne/Hingeharimine"
+
 msgctxt "#19634"
 msgid "Further Education"
 msgstr "Elukestev õpe"
@@ -6913,6 +7033,10 @@ msgctxt "#19646"
 msgid "Handicraft"
 msgstr "Käsitöö"
 
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Moto"
+
 msgctxt "#19648"
 msgid "Fitness &amp; Health"
 msgstr "Fitness &amp; Tervis"
@@ -6999,7 +7123,7 @@ msgstr "Väline DVD-mängija"
 
 msgctxt "#20003"
 msgid "Trainers folder"
-msgstr "Treinerite kaust"
+msgstr "Koolitajate kaust"
 
 msgctxt "#20004"
 msgid "Screenshot folder"
@@ -7031,7 +7155,7 @@ msgstr "Video esitusloendid"
 
 msgctxt "#20013"
 msgid "Do you wish to launch the game?"
-msgstr "Kas soovid mängu tööle panna?"
+msgstr "Kas soovid mängu käivitada?"
 
 msgctxt "#20014"
 msgid "Sort by: Playlist"
@@ -7039,7 +7163,7 @@ msgstr "Järjesta: Esitusloend"
 
 msgctxt "#20015"
 msgid "Remote thumb"
-msgstr "Eemalda pisipilt"
+msgstr "Kauge pisipilt"
 
 msgctxt "#20016"
 msgid "Current thumb"
@@ -7067,7 +7191,7 @@ msgstr "Skaneeri uus"
 
 msgctxt "#20025"
 msgid "Scan all"
-msgstr "Skaneeri küik"
+msgstr "Skaneeri kõik"
 
 msgctxt "#20026"
 msgid "Region"
@@ -7075,7 +7199,7 @@ msgstr "Regioon"
 
 msgctxt "#20037"
 msgid "Summary"
-msgstr "Ülevaade"
+msgstr "Kokkuvõte"
 
 msgctxt "#20038"
 msgid "Lock music window"
@@ -7175,7 +7299,7 @@ msgstr "Jaga vaikimisi"
 
 msgctxt "#20063"
 msgid "Shares with default (read only)"
-msgstr "Jaga vaikimisi (ainult loetav)"
+msgstr "Jaga vaikimisi (ainult lugemiseks)"
 
 msgctxt "#20064"
 msgid "Copy default"
@@ -7239,7 +7363,7 @@ msgstr " - link on määramata -"
 
 msgctxt "#20079"
 msgid "Enable animations"
-msgstr "Luba animeerimine"
+msgstr "Luba animatsioonid"
 
 msgctxt "#20080"
 msgid "Disable RSS during music"
@@ -7399,7 +7523,7 @@ msgstr "Programmi andmete laadimine"
 
 msgctxt "#20121"
 msgid "Party on!"
-msgstr "Muusika esitamine algab"
+msgstr "Pidu algab!"
 
 msgctxt "#20122"
 msgid "True"
@@ -7571,7 +7695,7 @@ msgstr "Lukustamise tugi puudub"
 
 msgctxt "#20165"
 msgid "Not locked"
-msgstr "Pole lukus"
+msgstr "Ei ole lukus"
 
 msgctxt "#20166"
 msgid "Locked"
@@ -7623,7 +7747,7 @@ msgstr "Tehtud"
 
 msgctxt "#20178"
 msgid "Shift"
-msgstr "Shift"
+msgstr "Nihe"
 
 msgctxt "#20179"
 msgid "Caps Lock"
@@ -7709,6 +7833,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Artisti andmete allalaadimine ebaõnnestus"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Kirjuta laulu märgendid üle internetist pärit infoga."
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Kui lubatud, siis kirjutatakse kõik laulude ning artistide märgendid üle allalaetud infoga. See on tuleb kasuks, kui laulud sisaldavad MusicBrainz märgendeid."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Androidi muusika"
@@ -7731,7 +7863,7 @@ msgstr "Androidi rakendused"
 
 msgctxt "#20250"
 msgid "Party on! (videos)"
-msgstr "Videesitus algab"
+msgstr "Videoesitus algab"
 
 msgctxt "#20251"
 msgid "Mixing drinks (videos)"
@@ -7887,7 +8019,7 @@ msgstr "Kaustanimi"
 
 msgctxt "#20335"
 msgid "Look for content recursively?"
-msgstr "Otsi sisu kasvavas järjestuses?"
+msgstr "Otsi sisu rekursiivselt?"
 
 msgctxt "#20336"
 msgid "Unlock sources"
@@ -7987,7 +8119,7 @@ msgstr "Osa"
 
 msgctxt "#20360"
 msgid "Episodes"
-msgstr "Osa"
+msgstr "Osad"
 
 msgctxt "#20361"
 msgid "Loading episode details"
@@ -8143,11 +8275,11 @@ msgstr "Esita lugu"
 
 msgctxt "#20399"
 msgid "Go to music videos from album"
-msgstr "Vaata albumi muusikavideosid"
+msgstr "Vaata albumi muusikavideoid"
 
 msgctxt "#20400"
 msgid "Go to music videos by artist"
-msgstr "Vaata artisti muusikavideosid"
+msgstr "Vaata artisti muusikavideoid"
 
 msgctxt "#20401"
 msgid "Play music video"
@@ -8351,7 +8483,7 @@ msgstr "osa"
 
 msgctxt "#20453"
 msgid "episodes"
-msgstr "osa"
+msgstr "osad"
 
 msgctxt "#20454"
 msgid "Listener"
@@ -8371,7 +8503,7 @@ msgstr "Grupeeri filmid settideks"
 
 msgctxt "#20459"
 msgid "Tags"
-msgstr "Sildid"
+msgstr "Märgendid"
 
 msgctxt "#20460"
 msgid "Add %s"
@@ -8383,16 +8515,36 @@ msgstr "Eemalda %s"
 
 msgctxt "#20462"
 msgid "New tag..."
-msgstr "Uus silt…"
+msgstr "Uus märgend…"
 
 msgctxt "#20463"
 msgid "A tag with the name '%s' already exists."
-msgstr "'%s' nimeline silt on juba olemas."
+msgstr "'%s' nimeline märgend on juba olemas."
 
 msgctxt "#20464"
 msgid "Select %s"
 msgstr "Vali %s"
 
+msgctxt "#20465"
+msgid "Manage movie set"
+msgstr "Halda filmisetti"
+
+msgctxt "#20466"
+msgid "Select movie set"
+msgstr "Vali filmisett"
+
+msgctxt "#20467"
+msgid "No set (Remove from %s)"
+msgstr "Sett puudub (Eemalda %s hulgast)"
+
+msgctxt "#20468"
+msgid "Add movie to a new set"
+msgstr "Lisa film uude setti"
+
+msgctxt "#20469"
+msgid "Keep current set (%s)"
+msgstr "Säilita praegune sett (%s)"
+
 msgctxt "#21330"
 msgid "Show hidden files and directories"
 msgstr "Näita peidetud faile ja katalooge"
@@ -8433,6 +8585,10 @@ msgctxt "#21360"
 msgid "Share video and music libraries through UPnP"
 msgstr "Jaga video- ja muusikakogusid üle UPnP"
 
+msgctxt "#21361"
+msgid "Look for remote UPnP players"
+msgstr "Otsi kaugeid UPnP mängijaid"
+
 msgctxt "#21362"
 msgid "Bookmark created"
 msgstr "Järjehoidja loodud"
@@ -8449,10 +8605,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Eemalda meedia jagu"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtiitrite kaust"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Filmide ja alternatiivsete subtiitrite kataloog"
@@ -8467,7 +8619,7 @@ msgstr "Luba hiire ja puutetundliku ekraani tugi"
 
 msgctxt "#21370"
 msgid "Play navigation sounds during media playback"
-msgstr "Luba meedia esitamisel menüü helinad"
+msgstr "Luba meedia esitamisel menüü helid"
 
 msgctxt "#21371"
 msgid "Thumbnail"
@@ -8515,7 +8667,7 @@ msgstr "Sisesta uue esitusloendi nimi"
 
 msgctxt "#21382"
 msgid "Show \"Add source\" buttons in file lists"
-msgstr "Näita \"Lisa allikas\" nuppe failide loendites"
+msgstr "Näita \"Lisa allikas\" nuppe faililoendites"
 
 msgctxt "#21383"
 msgid "Enable scrollbars"
@@ -8821,10 +8973,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "segatud"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtiitrite asukoht"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fikseeritud"
@@ -8845,6 +8993,18 @@ msgctxt "#21465"
 msgid "Above video"
 msgstr "Video kohal"
 
+msgctxt "#21467"
+msgid "%.1f to %.1f"
+msgstr "%.1f kuni %.1f"
+
+msgctxt "#21468"
+msgid "%d to %d"
+msgstr "%d kuni %d"
+
+msgctxt "#21469"
+msgid "%s to %s"
+msgstr "%s kuni %s"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Faili nimi"
@@ -8947,7 +9107,7 @@ msgstr "Valgusallikas"
 
 msgctxt "#21836"
 msgid "Metering mode"
-msgstr "Meeterežiim"
+msgstr "Mõõterežiim"
 
 msgctxt "#21837"
 msgid "ISO"
@@ -8977,6 +9137,10 @@ msgctxt "#21843"
 msgid "Orientation"
 msgstr "Suund"
 
+msgctxt "#21857"
+msgid "Sub-location"
+msgstr "Alam-asukoht"
+
 msgctxt "#21858"
 msgid "Image type"
 msgstr "Pildi tüüp"
@@ -9043,11 +9207,11 @@ msgstr "Linn"
 
 msgctxt "#21874"
 msgid "State"
-msgstr "Olek"
+msgstr "Osariik"
 
 msgctxt "#21875"
 msgid "Country"
-msgstr "Maa"
+msgstr "Riik"
 
 msgctxt "#21876"
 msgid "Original Tx Reference"
@@ -9055,7 +9219,7 @@ msgstr "Algupärane Tx viide"
 
 msgctxt "#21877"
 msgid "Date created"
-msgstr "Sisestamise kuupäev"
+msgstr "Loomise kuupäev"
 
 msgctxt "#21878"
 msgid "Urgency"
@@ -9167,7 +9331,7 @@ msgstr "%2.3fs"
 
 msgctxt "#22004"
 msgid "Delayed by: %2.3fs"
-msgstr "Viivitus by: %2.3fs"
+msgstr "Viivitus: %2.3fs"
 
 msgctxt "#22005"
 msgid "Ahead by: %2.3fs"
@@ -9263,11 +9427,11 @@ msgstr "Märgistik"
 
 msgctxt "#22034"
 msgid "Export karaoke titles as HTML"
-msgstr "Salvesta HTML formaadis"
+msgstr "Salvesta karaoke pealkirjad HTML formaadis"
 
 msgctxt "#22035"
 msgid "Export karaoke titles as CSV"
-msgstr "Salvesta CSV formaadis"
+msgstr "Salvesta karaoke pealkirjad CSV formaadis"
 
 msgctxt "#22036"
 msgid "Import karaoke titles..."
@@ -9495,7 +9659,7 @@ msgstr "Paigalda"
 
 msgctxt "#24039"
 msgid "Disabled Add-ons"
-msgstr "Keela lisamooduleid"
+msgstr "Keelatud lisamoodulid"
 
 msgctxt "#24040"
 msgid "(Clear the current setting)"
@@ -9661,6 +9825,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Rüül puuduvad mõned failid"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Sisesta otsingusõna"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Teated"
@@ -10041,10 +10209,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Kõlarite paigutus"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10201,6 +10365,10 @@ msgctxt "#35100"
 msgid "Enable joystick and gamepad support"
 msgstr "Luba juhtkangi ja puldi tugi"
 
+msgctxt "#35102"
+msgid "Disable joystick when this device is present"
+msgstr "Keela juhtkang selle seadme puhul"
+
 msgctxt "#35500"
 msgid "Location"
 msgstr "Asukoht"
@@ -10227,11 +10395,11 @@ msgstr "Pulse-Eight Nyxboard"
 
 msgctxt "#36002"
 msgid "Switch to keyboard side command"
-msgstr "Vaheta klaviatuuri poolt käsk"
+msgstr "Kasuta klaviatuurikäsku"
 
 msgctxt "#36003"
 msgid "Switch to remote side command"
-msgstr "Vaheta kaugjuhtimise poolt käsk"
+msgstr "Kasuta kaugjuhtimise käsku"
 
 msgctxt "#36004"
 msgid "Press \"user\" button command"
@@ -10253,6 +10421,10 @@ msgctxt "#36009"
 msgid "Put devices in standby mode when activating screensaver"
 msgstr "Lülita seadmed ooterežiimi kui ekraanisäästja tööle hakkab"
 
+msgctxt "#36010"
+msgid "Wake devices when deactivating screensaver"
+msgstr "Ärata seadmed ekraanisäästja sulgemisel"
+
 msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
 msgstr "Ei õnnestunud tuvastada CEC COM-porti. Määra see manuaalselt."
@@ -10299,7 +10471,7 @@ msgstr "XBMC sulgemisel edasta käsk 'allikas pole aktiive'"
 
 msgctxt "#36026"
 msgid "Put devices in standby mode when putting the PC in standby"
-msgstr "Pane seade ooterežiimi kui arvuti läheb ooterežiimile"
+msgstr "Pane seadmed ooterežiimi kui arvuti läheb ooterežiimile"
 
 msgctxt "#36027"
 msgid "This device needs servicing"
@@ -10319,7 +10491,7 @@ msgstr "Ühendus kadus"
 
 msgctxt "#36033"
 msgid "Pause playback when switching to another source"
-msgstr "Teisele allikale üle minnes pausi taasesitus"
+msgstr "Peata taasesitus teisele allikale üle minnes"
 
 msgctxt "#36035"
 msgid "Always"
@@ -10335,12 +10507,20 @@ msgstr "TV"
 
 msgctxt "#36038"
 msgid "Amplifier / AVR device"
-msgstr "Võimendi /AVR seade"
+msgstr "Võimendi / AVR seade"
+
+msgctxt "#36039"
+msgid "TV and AVR device (explicit)"
+msgstr "TV ja AVR seade (määratud)"
 
 msgctxt "#36040"
 msgid "Unsupported libCEC interface version. %x is lower than the version XBMC supports (%x)"
 msgstr "Toetuseta libCEC kasutajaliidese versioon. %x on madalam kui XBMC toetatud versioon (%x)"
 
+msgctxt "#36041"
+msgid "* Item folder"
+msgstr "* Nimetuse kataloog"
+
 msgctxt "#36101"
 msgid "Change the look and feel of the User Interface."
 msgstr "Muuda kasutajaliidese välimust."
@@ -10349,6 +10529,42 @@ msgctxt "#36102"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36103"
+msgid "Select the skin for the User Interface. This will define the look and feel of XBMC."
+msgstr "Vali kasutajaliidese rüü. See määrab XBMC välimuse."
+
+msgctxt "#36104"
+msgid "Change specific skin settings. The available options are dependent on the skin used."
+msgstr "Vaheta selle rüü seaded. Võimalikud valikud sõltuvad kasutatavast rüüst."
+
+msgctxt "#36105"
+msgid "Change the theme associated with your selected skin."
+msgstr "Vaheta valitud rüü teemat."
+
+msgctxt "#36106"
+msgid "Change the colours of your selected skin."
+msgstr "Vaheta valitud rüü värve."
+
+msgctxt "#36107"
+msgid "Choose the fonts displayed in the User Interface. The font sets are configured by your skin."
+msgstr "Vaheta kasutajaliidese fonte. Fontide valik on rüüga määratud."
+
+msgctxt "#36108"
+msgid "Resize the view of the GUI."
+msgstr "Muuda kasutajaliidese suurust."
+
+msgctxt "#36109"
+msgid "Select the media window that XBMC displays on startup."
+msgstr "Vali XBMC käivitamisel avatav meediaaken."
+
+msgctxt "#36110"
+msgid "Select or disable the sound scheme used in the User Interface."
+msgstr "Vali või keela kasutajaliidese helitaust."
+
+msgctxt "#36111"
+msgid "Turn this off to remove the scrolling RSS news ticker."
+msgstr "Lülita see välja RSS uudisvoo eemaldamiseks."
+
 msgctxt "#36112"
 msgid "Edit the RSS feeds."
 msgstr "Redigeeri RSS vooge."
@@ -10361,6 +10577,14 @@ msgctxt "#36114"
 msgid "Chooses the language of the User Interface."
 msgstr "Vali kasutajaliidese keel."
 
+msgctxt "#36115"
+msgid "Select the formats for temperature, time and date. The available options depend on the selected language."
+msgstr "Vali temperatuuri, aja ja kuupäeva formaadid. Võimalikud valikud sõltuvad valitud keelest."
+
+msgctxt "#36116"
+msgid "Choose which character set is used for displaying text in the GUI."
+msgstr "Vali kasutajaliidese teksti kuvamiseks kasutatav märgistik."
+
 msgctxt "#36117"
 msgid "Select country location."
 msgstr "Vali oma asukohariik."
@@ -10369,10 +10593,38 @@ msgctxt "#36118"
 msgid "Select your current timezone."
 msgstr "Vali oma praegune ajatsoon."
 
+msgctxt "#36119"
+msgid "Select the default audio track when different language tracks are available."
+msgstr "Vali vaikimisi audio keel, kui saadaval on erinevates keeltes audio."
+
+msgctxt "#36120"
+msgid "Select the default subtitles when different languages are available."
+msgstr "Vali vaikimisi subtiitrid, kui saadaval on mitmed keeled."
+
 msgctxt "#36121"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36122"
+msgid "Display the (..) item in lists for visiting the parent folder."
+msgstr "Näita (..) nimetust emakausta külastamiseks."
+
+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 "Näita meediafailide faililaiendeid. Näiteks 'You Enjoy Myself.mp3' asemel kuvatakse lihtsalt '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 "Ignoreeri järjestamisel mõningaid eesliiteid. Näiteks 'The Simpsons' järjestatakse lihtsalt kui 'Simpsons'. Eesliidete seadistamiseks vaata 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 "Luba kasutajaliidese abil failide kustutamine ja ümbernimetamine, kasutades selleks kontekstimenüüd (selle menüü kuvamiseks vajuta klaviatuuril C)"
+
+msgctxt "#36126"
+msgid "Show the add source button from root sections of the user interface."
+msgstr "Näita allika lisamise nuppu kasutajaliidese peamenüüs."
+
 msgctxt "#36127"
 msgid "Show hidden files and directories."
 msgstr "Näita peidetud faile ja katalooge."
@@ -10381,6 +10633,22 @@ msgctxt "#36128"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36129"
+msgid "Set the amount of idle time required before displaying the screensaver."
+msgstr "Määra jõudeaja pikkus enne ekraanisäästja näitamist."
+
+msgctxt "#36131"
+msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
+msgstr "Muuda ekraanisäästja seadeid. Võimalikud valikud sõltuvad kasutatavast ekraanisäästjast."
+
+msgctxt "#36132"
+msgid "Preview the selected screensaver."
+msgstr "Ava ekraanisäästja eelvaade."
+
+msgctxt "#36134"
+msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
+msgstr "Hämarda ekraan pausi ajal. Valik ei kehti 'Dim' ekraanisäästja korral."
+
 msgctxt "#36135"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10405,22 +10673,58 @@ msgctxt "#36140"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36141"
+msgid "Show plot information for unwatched media in the Video Library."
+msgstr "Näita veel vaatamata videote süžeed."
+
 msgctxt "#36142"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36143"
+msgid "Get thumbnails for actors when scanning media."
+msgstr "Lae näitlejate pisipildid samaaegselt meedia skaneerimisega."
+
+msgctxt "#36144"
+msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'."
+msgstr "Eemalda seriaalide hooaegade nimekiri, valikud on 'Kui ainult üks hooaeg' (vaikimisi), 'Alati' ning 'Mitte kunagi'"
+
+msgctxt "#36145"
+msgid "Group movies into 'Movie sets' when browsing the movie library."
+msgstr "Grupeeri filmiteegis liikudes filmid settidesse."
+
 msgctxt "#36146"
 msgid "Check for new media files on XBMC startup."
 msgstr "Otsi XBMC käivitudes uusi faile."
 
+msgctxt "#36147"
+msgid "Hide the library scanning progress bar during scans."
+msgstr "Peida skaneerimise edenemisriba."
+
+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 "Eemalda teegist nimetused, mida ei leita (kas ümber nimetatud, kustutatud või eemaldataval meedial asunud)."
+
+msgctxt "#36149"
+msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Ekspordi videoteegi andmebaas XML failidesse. Valikuliselt kirjutatakse olemasolevad XML failid üle."
+
 msgctxt "#36150"
 msgid "Import a XML file into the Video Library database."
-msgstr "Impordi XML fail video teegi andmebaasi."
+msgstr "Impordi XML fail videoteegi andmebaasi."
 
 msgctxt "#36151"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36152"
+msgid "Enable automatic playback of the next file in the list of the selected item."
+msgstr "Luba nimekirjast järgmise faili automaatne taasesitus."
+
+msgctxt "#36153"
+msgid "Adjust the method used to process and display video."
+msgstr "Määra video näitamise ja töötlemise meetod."
+
 msgctxt "#36155"
 msgid "Enable hardware decoding of video files."
 msgstr "Luba riistvaraline videofailide dekodeerimine."
@@ -10457,10 +10761,38 @@ msgctxt "#36163"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36164"
+msgid "Select when the refresh rate adjustments should take place."
+msgstr "Vali värskendussageduse muudatuste tegemise hetk."
+
+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 "Peatu hetkeks värskendussageduse muutmisel. Aktiveeri esitatava videoga kõige paremini sobiva värskendussageduse leidmiseks. Nii saadakse potentsiaalselt kõige sujuvam video taasesitus."
+
+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 peab olema sünkroonis, seda saab tagada ümbersämplimise, pakettide vahelejätmise/dubleerimisega või takti korrigeerimisega."
+
+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 "Luba kuvasuhte vähest muutmist, et video täidaks suuremat osa ekraanist."
+
+msgctxt "#36171"
+msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
+msgstr "Vali 4:3 videote suurendusaste laiekraanil näitamisel."
+
 msgctxt "#36173"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36174"
+msgid "Enable Teletext when watching a live TV stream."
+msgstr "Luba teletekst TV vaatamisel."
+
+msgctxt "#36175"
+msgid "Scale Teletext to 4:3 ratio."
+msgstr "Skaleeri teletekst 4:3 suhtele."
+
 msgctxt "#36176"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10469,6 +10801,14 @@ msgctxt "#36178"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36179"
+msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
+msgstr "Faili teeki sisselugemisel näidatakse failinime asemel metaandmete pealkirja."
+
+msgctxt "#36180"
+msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode."
+msgstr "Eralda teegi režiimis näitamiseks pisipildid ning muu info, nagu koodekid ja kuvasuhe."
+
 msgctxt "#36181"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10501,6 +10841,10 @@ msgctxt "#36190"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36191"
+msgid "Set a custom directory for your subtitles. This can be a file share."
+msgstr "Määra subtiitrite kataloog. See võib olla ka jagatud kettal."
+
 msgctxt "#36192"
 msgid "Location of subtitles on the screen."
 msgstr "Subtiitrite asukoht ekraanil."
@@ -10513,6 +10857,10 @@ msgctxt "#36194"
 msgid "Autorun DVD video when inserted in drive."
 msgstr "Käivita DVD sisestamisel automaatselt video."
 
+msgctxt "#36195"
+msgid "Force a region for DVD playback."
+msgstr "Määra DVD mahamängimise regioon."
+
 msgctxt "#36196"
 msgid "Attempt to skip 'unskippable' introductions before DVD menu."
 msgstr "Ürita DVD sissejuhatav osa enne peamenüüd vahele jätta."
@@ -10521,6 +10869,18 @@ msgctxt "#36197"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36198"
+msgid "Select the default movie information source. See the Add-ons Manager for options."
+msgstr "Vali vaikimisi filmiinfo allikas. Vaata võimalikke variante lisamoodulite haldurist."
+
+msgctxt "#36199"
+msgid "Select the default TV show information source. See the Add-ons Manager for options."
+msgstr "Vali vaikimisi seriaaliinfo allikas. Vaata võimalikke variante lisamoodulite haldurist."
+
+msgctxt "#36200"
+msgid "Default scraper used for adding music videos to your library."
+msgstr "Vaikimisi muusikavideote lisamise kraabits."
+
 msgctxt "#36201"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10529,6 +10889,30 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+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 "Impordi kanaligrupid PVR põhirakendusest (kui võimalik). Kasutaja loodud grupid kustutatakse, kui neid põhirakendusest ei leita."
+
+msgctxt "#36205"
+msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
+msgstr "Sorteeri kanalid serveri kanalinumbrite järgi, kuid kasuta XBMC oma kanalite numeratsiooni."
+
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "Käsitsi XBMC konfigureerimise asemel kasuta põhirakenduse numeratsiooni."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "Ava kanalihaldur, mis lubab muuta kanalite järjestust, kanali nime, ikooni jne."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "Luba põhirakendusel kanalite otsing (kui võimalik)."
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "Kustuta kanalite/saatekava andmebaas ning impordi see põhirakendusest uuesti."
+
 msgctxt "#36210"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10567,16 +10951,48 @@ msgstr "Info pole veel saadaval."
 
 msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
-msgstr "Vaikimisi näidatav EPG aken. Vaikeväärtus on ajaskaala."
+msgstr "Vaikimisi näidatav saatekava aken. Vaikeväärtus on ajaskaala."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "Saatekava põhirakendusest importimise sagedus. Vaikimisi iga 120 minuti järel."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Ära impordi saatekava TV vaatamise ajal, sellega vähendad protsessori koormust."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "XBMC käivitamise kiirendamiseks salvestatakse saatekava andmed vaikimisi kohalikus andmebaasis."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Peida \"info puudub\" teated, kui kanali saatekava hankimine ebaõnnestub."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "Kustuta XBMC saatekava andmebaas ning impordi see põhirakendusest uuesti."
 
 msgctxt "#36226"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Kuva valitud kanali pilt täisekraani asemel väikeses kastis."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "Näita TV-le üleminekul viimati vaadatud kanalit."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+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 "Numbriklahvi vajutus täisekraanil lülitab 1 sekundi pärast valitud numbriga kanalile."
+
 msgctxt "#36232"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10585,14 +11001,58 @@ msgctxt "#36233"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36234"
+msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
+msgstr "Salvestuse kestus salvestusnupu vajutamisel või uue taimeri loomisel. Vaikimisi 180 minutit."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "Näita teadet, kui põhirakendus lisab, muudab või kustutab taimereid."
+
 msgctxt "#36240"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+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 "Käivita allolev \"äratuskäsklus\", kui XBCM suletakse või läheb unerežiimi. Järgmise plaanitud salvestuse aeg antakse parameetrina kaasa."
+
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "Käsku ei käivitata, kui salvestus algab selle aja jooksul. Vaikimisi 15 minutit."
+
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "Käivitatav käsklus. Vaikimisi '/usr/bin/setwakeup.sh'."
+
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Järgmise plaanitud salvestuse algusajast lahutatav aeg. Vaikimisi 15 minutit."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Käivita äratuskäsklus iga päev etteantud ajal."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Igapäevase äratuskäskluse käivitamise aeg."
+
 msgctxt "#36247"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+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 "Vanemliku lukuga kanalitele ligipääsuks küsitakse PIN koodi. Kanaleid saab lukustatuks märkida kanaliredaktori abil. Vanemliku luku all olevaid kanaleid ei saa vaadata ega salvestada, samuti on peidetud nende saatekava."
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Sisesta PIN kood lukustatud kanali avamiseks."
+
+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 "Küsi uuesti PIN koodi lukustatud kanali avamiseks, kui seda ei ole etteantud aja jooksul juba tehtud. Vaikimisi aeg on 300 sekundit."
+
 msgctxt "#36251"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10609,14 +11069,78 @@ msgctxt "#36254"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36255"
+msgid "Determine if artists that appear only on compilations are shown in the library artist view."
+msgstr "Määratle, kas ainult kogumikel esinevad artiste näidatakse ka teegi artistivaates."
+
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Leia albumi ja artisti info automaatselt skaneerimise ajal."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Vali vaikimisi albumiinfo allikas."
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Vali vaikimisi artistiinfo allikas. Vaata võimalikke variante lisamoodulite haldurist."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Kontrolli uusi ja kustutatud faile XBCM käivitamisel."
+
+msgctxt "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Ekspordi muusikateegi andmebaas XML failidesse. Valikuliselt kirjutatakse olemasolevad XML failid üle."
+
 msgctxt "#36263"
 msgid "Import a XML file into the Music Library database."
-msgstr "Impordi XML fail muusika teegi andmebaasi."
+msgstr "Impordi XML fail muusikateegi andmebaasi."
 
 msgctxt "#36264"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36265"
+msgid "XBMC automatically plays the next item in the current folder. For example, in Files View: After a track has been played, XBMC would automatically play the next track in the same folder."
+msgstr "XBMC esitab automaatselt järgmise jooksvas kaustas asuva faili. Näiteks failide vaates: peale loo lõppemist esitab XBMC automaatselt järgmise jooksvas kaustas asuva loo."
+
+msgctxt "#36266"
+msgid "When songs are added to a playlist they are queued instead of playback starting immediately."
+msgstr "Laulude esitusloendisse lisamisel jäävad nad koheselt esitamise asemel  järjekorda."
+
+msgctxt "#36268"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Vaikimisi standard on 89dB. Ole muutmisel ettevaatlik."
+
+msgctxt "#36269"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Vaikimisi standard on 89dB. Ole muutmisel ettevaatlik."
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "Vähenda faili helitugevust, kui heli muutub katkendlikuks."
+
+msgctxt "#36271"
+msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds."
+msgstr "Kasuta lugude vahel sujuvaid üleminekuid. Üleminek võib kesta 1-15 sekundit."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Luba sujuvad üleminekud, kui lood on samalt albumilt."
+
+msgctxt "#36274"
+msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
+msgstr "Loe märgendite info lugude failidest. Suurte, eriti võrgus asuvate, kaustade puhul võib lugemine aeglasemaks minna."
+
+msgctxt "#36275"
+msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
+msgstr "Määra kasutajaliideses laulunimede näitamise viis. Selle funktsionaalsuse toimimiseks on vajalikud ID3 märgendid."
+
+msgctxt "#36276"
+msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
+msgstr "Kasutusel kasutajaliidese parempoolses osas. Tavaliselt näidatakse seal lugude pikkusi. "
+
 msgctxt "#36277"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10633,14 +11157,58 @@ msgctxt "#36280"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36281"
+msgid "XBMC will search for thumbs on remote shares and optical media. This can often slow down the listing of network folders."
+msgstr "XBMC otsib pisipilte välisvõrgust ja optilistelt seadmetelt. See võib aeglustada võrgukaustade kuvamist."
+
 msgctxt "#36282"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36283"
+msgid "Autorun CDs when inserted in drive."
+msgstr "Käivita sisestatud CD-d automaatselt."
+
+msgctxt "#36284"
+msgid "Read the information belonging to an audio CD from an internet database."
+msgstr "Loe audio CD info interneti andmebaasist."
+
+msgctxt "#36285"
+msgid "Select the location on your hard drive where ripped tracks will be saved to."
+msgstr "Vali kõvakettal ripitud lugude salvestuskoht."
+
+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 "Märgendid: [B]%N[/B]: Lugu, [B]%S[/B]: Plaat, [B]%A[/B]: Artist, [B]%T[/B]: Pealkiri, [B]%B[/B]: Album, [B]%G[/B]: Žanr, [B]%Y[/B]: Aasta, [B]%F[/B]: Failinimi, [B]%D[/B]: Kestvus, [B]%J[/B]: Kuupäev, [B]%R[/B]: Hinnang, [B]%I[/B]: Faili suurus."
+
+msgctxt "#36287"
+msgid "Select which audio encoder to use when ripping."
+msgstr "Vali rippimisel kasutatav audiokoodek."
+
+msgctxt "#36288"
+msgid "Select which quality you want to rip your files."
+msgstr "Vali rippimise kvaliteet."
+
+msgctxt "#36289"
+msgid "Select which bitrate to use for the specified audio encoder for audio compression."
+msgstr "Vali audio pakkimiseks kasutatav koodeki bitikiirus."
+
+msgctxt "#36290"
+msgid "For FLAC define compression level, default 5"
+msgstr "Vali FLAC pakkimistase, vaikimisi 5"
+
+msgctxt "#36291"
+msgid "Auto eject disc after rip is complete."
+msgstr "Väljasta plaat peale rippimise lõppu."
+
 msgctxt "#36292"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36293"
+msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
+msgstr "Muusikafailide esitamisel otsib XBMC sobivat .cdg faili ning näitab selle sisu."
+
 msgctxt "#36294"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10687,7 +11255,7 @@ msgstr "Info pole veel saadaval."
 
 msgctxt "#36306"
 msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
-msgstr "Kui EXIF info on olemas (kuupäev, kellaaeg, kaamera jne.) siis seda näidatakse."
+msgstr "Kui EXIF info on olemas (kuupäev, kellaaeg, kaamera jne.), siis seda näidatakse."
 
 msgctxt "#36307"
 msgid "Automatically generate picture thumbnails when entering picture folder."
@@ -10695,7 +11263,11 @@ msgstr "Piltide kausta sisenedes genereeri automaatselt pisipildid."
 
 msgctxt "#36308"
 msgid "Pictures will automatically rotate according to information in the EXIF tag, if found."
-msgstr "Pildid keeratakse EXIFis oleva info järgi."
+msgstr "Pildid keeratakse automaatselt EXIFis oleva info järgi."
+
+msgctxt "#36309"
+msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
+msgstr "Näita videoid piltide nimekirjas, kuna enamusel digikaameratel on nüüd videosalvestuste võimalus."
 
 msgctxt "#36310"
 msgid "No info available yet."
@@ -10705,6 +11277,18 @@ msgctxt "#36311"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36312"
+msgid "Select the amount of time that each image is displayed in a slideshow."
+msgstr "Vali iga pildi esitusloendis näitamise aeg."
+
+msgctxt "#36313"
+msgid "Images in a slideshow will pan and zoom while displayed."
+msgstr "Pilte suurendatakse ja nihutatakse esitusloendis näitamise ajal."
+
+msgctxt "#36314"
+msgid "View slideshow images in a random order."
+msgstr "Vaata esitusloendi pilte juhuslikus järjestuses."
+
 msgctxt "#36315"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10713,6 +11297,14 @@ msgctxt "#36316"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36317"
+msgid "Select up to three locations for which the weather can be displayed."
+msgstr "Vali kuni kolm asukohta, mille ilmateadet näidatakse."
+
+msgctxt "#36318"
+msgid "Specify the default weather information source. See the Add-ons Manager for options."
+msgstr "Vali vaikimisi ilmateate allikas. Vaata võimalikke variante lisamoodulite haldurist."
+
 msgctxt "#36319"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10721,18 +11313,38 @@ msgctxt "#36320"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36321"
+msgid "Display name of the XBMC installation when using various network services."
+msgstr "Kuva XBMC paigalduse nimi võrguteenuste kasutamisel."
+
 msgctxt "#36322"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36323"
+msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
+msgstr "Luba UPnP server. See võimaldab meediastriimingut igale UPnP kliendile."
+
+msgctxt "#36324"
+msgid "When a manual or automatical library update occurs, notify UPnP clients."
+msgstr "Teavita UPnP kliente igast teegiuuendusest."
+
 msgctxt "#36325"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36326"
+msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
+msgstr "Luba UPnP klient. See lubab meediastriimingut igast UPnP serverist ning serveri juhtimist."
+
 msgctxt "#36327"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36328"
+msgid "Enable remote users to control XBMC through the built-in webserver."
+msgstr "Luba kasutajatel XBMC juhtimine läbi sisseehitatud veebiserveri."
+
 msgctxt "#36329"
 msgid "Define the webserver port."
 msgstr "Määra veebiserveri port."
@@ -10745,6 +11357,14 @@ msgctxt "#36331"
 msgid "Define webserver password."
 msgstr "Määra veebiserveri salasõna."
 
+msgctxt "#36332"
+msgid "Select between web interfaces installed via the Add-on Manager."
+msgstr "Vali lisamoodulite halduri abil paigaldatud veebiliideste vahel."
+
+msgctxt "#36334"
+msgid "Allow programs on this computer to control XBMC via the Web Interface or the JSON-RPC interface protocol."
+msgstr "Luba sellel arvutil olevatel programmidel XBMC juhtimine veebiliidese või JSON-RPC protokolli abil."
+
 msgctxt "#36335"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
@@ -10817,9 +11437,21 @@ msgctxt "#36353"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36355"
+msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out."
+msgstr "Pimenda mitme ekraani kasutamisel need ekraanid, kus XBMC-d ei kasutata."
+
+msgctxt "#36356"
+msgid "Eliminate vertical tearing."
+msgstr "Kõrvalda vertikaalne katkendlikkus."
+
+msgctxt "#36357"
+msgid "Calibrate the User Interface by adjusting the overscan. Use this tool if the image being displayed is too large or small for your display."
+msgstr "Kalibreeri kasutajaliidest ülekatte korrigeerimisega. Kasuta seda tööriista, kui näidatav pilt on sinu ekraani jaoks liiga suur või väike."
+
 msgctxt "#36358"
 msgid "Test patterns for display hardware calibration."
-msgstr "Ekraani kalibreerimis mustrid."
+msgstr "Ekraani kalibreerimise mustrid."
 
 msgctxt "#36359"
 msgid "No info available yet."
@@ -10965,6 +11597,26 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Info pole veel saadaval."
 
+msgctxt "#36422"
+msgid "Enable hardware video decode using AMLogic decoder"
+msgstr "Luba riistvaraline videofailide dekodeerimine kasutades AMLogic dekoodrit."
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Vali kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Salvesta"
+
+msgctxt "#36502"
+msgid "None"
+msgstr "Puudub"
+
+msgctxt "#36508"
+msgid "Hardware Based"
+msgstr "Riistvaral põhinev"
+
 msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "Eelistatud režiim"
index c1771e5..7d27266 100644 (file)
@@ -829,10 +829,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Vel mappu at goyma í"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Send stereo til allar hátalarar"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Tal av kanalum"
@@ -4525,10 +4521,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Sjónvarps upptøkur"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Vanlig mappa til goymslu av PVR myndum"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Rás"
@@ -6969,10 +6961,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Strika media savn"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mappa til undirtekstir"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Onnur mappa til film og undirtekstir "
@@ -7241,10 +7229,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Sæð brot"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Stað til undirtekst"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Rætta"
@@ -7937,6 +7921,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Útsjónd manglar nakrar fílir"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Skriva leitorð"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Fráboðanir"
@@ -8257,10 +8245,6 @@ msgctxt "#33200"
 msgid "Detected New Connection"
 msgstr "Fann nýggja íbinding"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Hátalara uppseting"
-
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "Spæl GUI ljóð"
@@ -8456,3 +8440,11 @@ msgstr "Sjónvarp og AVR eind (serlig)"
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Lutir í mappu"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Skift til kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Upptøka"
index 5da4b8f..4f9d949 100644 (file)
@@ -15,7 +15,7 @@ msgstr ""
 
 msgctxt "#0"
 msgid "Programs"
-msgstr "Ohjelmat"
+msgstr "Sovellukset"
 
 msgctxt "#1"
 msgid "Pictures"
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Valitse kohdehakemisto"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Syötä stereoääni kaikille kaiuttimille"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Kanavien määrä"
@@ -1677,10 +1673,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Tekijät"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod-piiri"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Ei käytössä"
@@ -2053,6 +2045,10 @@ msgctxt "#576"
 msgid "Times played"
 msgstr "Toistokertoja"
 
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Otettu"
+
 msgctxt "#580"
 msgid "Sort direction"
 msgstr "Järjestelyn suunta"
@@ -2341,6 +2337,10 @@ msgctxt "#665"
 msgid "Compression level"
 msgstr "Pakkaustaso"
 
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Runsas lokitus..."
+
 msgctxt "#700"
 msgid "Cleaning up library"
 msgstr "Puhdistetaan kirjastoa"
@@ -2377,6 +2377,10 @@ msgctxt "#713"
 msgid "HTTP proxy"
 msgstr "HTTP-välipalvelin"
 
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Jakotapa"
+
 msgctxt "#716"
 msgid "Automatic (DHCP)"
 msgstr "Automaattinen (DHCP)"
@@ -2395,7 +2399,7 @@ msgstr "Maski"
 
 msgctxt "#721"
 msgid "Default gateway"
-msgstr "Oletus yhdyskäytävä"
+msgstr "Oletusyhdyskäytävä"
 
 msgctxt "#722"
 msgid "DNS server"
@@ -2407,7 +2411,7 @@ msgstr "Tallenna ja uudelleenkäynnistä"
 
 msgctxt "#724"
 msgid "Invalid address specified. Value must be AAA.BBB.CCC.DDD"
-msgstr "Osoite on oltava muodossa AAA.BBB.CCC.DDD"
+msgstr "Osoitteen on oltava muodossa AAA.BBB.CCC.DDD"
 
 msgctxt "#725"
 msgid "with numbers between 0 and 255."
@@ -3489,6 +3493,14 @@ msgctxt "#10136"
 msgid "Smart playlist editor"
 msgstr "Älykäs soittolistan muokkaus"
 
+msgctxt "#10137"
+msgid "Smart playlist rule editor"
+msgstr "Älykäs soittolistan ehtojen muokkaus"
+
+msgctxt "#10139"
+msgid "Pictures/Info"
+msgstr "Kuvat/Tiedot"
+
 msgctxt "#10140"
 msgid "Add-on settings"
 msgstr "Lisäosan asetukset"
@@ -3933,6 +3945,10 @@ msgctxt "#13013"
 msgid "Reboot"
 msgstr "Käynnistä uudelleen"
 
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "PIenennä"
+
 msgctxt "#13015"
 msgid "Power button action"
 msgstr "Virtakytkimen toiminto"
@@ -3973,10 +3989,46 @@ msgctxt "#13025"
 msgid "Joystick unplugged"
 msgstr "Peliohjain irroitettu"
 
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Herätys lähiverkon kautta (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "Luodaan verkkoyhteyttä..."
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Herätys lähiverkon kautta epäonnistui!"
+
+msgctxt "#13030"
+msgid "Waiting for server to wake up..."
+msgstr "Odotetaan palvelimen heräämistä..."
+
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Odotetaan yhä palvelimen heräämistä..."
+
+msgctxt "#13032"
+msgid "Waiting for services to launch..."
+msgstr "Odotetaan palvelujen käynnistymistä..."
+
 msgctxt "#13033"
 msgid "MAC Discovery"
 msgstr "MAC osoitteen löytäminen"
 
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Päivityksen kesto %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Haun kesto %s"
+
+msgctxt "#13036"
+msgid "Failed for %s"
+msgstr "Epäonnistui: "
+
 msgctxt "#13050"
 msgid "Running low on battery"
 msgstr "Alhainen akun varaus"
@@ -4561,6 +4613,14 @@ msgctxt "#13388"
 msgid "Preset"
 msgstr "Esiasetukset"
 
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "Tälle visualisoinnille\nei löytynyt esiasetuksia"
+
+msgctxt "#13390"
+msgid "There are no settings available\nfor this visualisation"
+msgstr "Asetuksia ei ole saatavilla\ntälle visualisoinnille."
+
 msgctxt "#13391"
 msgid "Eject/Load"
 msgstr "Poista/Lataa"
@@ -4733,6 +4793,10 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "Toista vain tämä"
 
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Käytä HQ-skaalaimia yllä oleville"
+
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "A/V-tahdistusmenetelmä"
@@ -4945,6 +5009,10 @@ msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "Videovälimuisti - DVD-ROM"
 
+msgctxt "#14027"
+msgid "Local Network"
+msgstr "Lähiverkko"
+
 msgctxt "#14028"
 msgid "Internet"
 msgstr "Internet"
@@ -4953,6 +5021,10 @@ msgctxt "#14030"
 msgid "Audio cache - DVD-ROM"
 msgstr "Musiikkivälimuisti - DVD-ROM"
 
+msgctxt "#14031"
+msgid "Local Network"
+msgstr "Lähiverkko"
+
 msgctxt "#14032"
 msgid "Internet"
 msgstr "Internet"
@@ -4961,6 +5033,10 @@ msgctxt "#14034"
 msgid "DVD cache - DVD-ROM"
 msgstr "DVD-välimuisti - DVD-ROM"
 
+msgctxt "#14035"
+msgid "Local Network"
+msgstr "Lähiverkko"
+
 msgctxt "#14036"
 msgid "Services"
 msgstr "Palvelut"
@@ -5685,10 +5761,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Nauhoitukset"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR-pienoiskuvien oletuskansio"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanavat"
@@ -5753,6 +5825,10 @@ msgctxt "#19034"
 msgid "Already started recording on this channel"
 msgstr "Tämän kanavan nauhoittaminen on jo aloitettu"
 
+msgctxt "#19035"
+msgid "%s could not be played. Check the log for details."
+msgstr "%s ei voi toistaa. Katso lokitiedostosta lisätietoja."
+
 msgctxt "#19036"
 msgid "This recording cannot be played. Check the log for details."
 msgstr "Nauhoitusta ei voi toistaa. Katso lokitiedostosta lisätietoja."
@@ -8229,6 +8305,10 @@ msgctxt "#20417"
 msgid "Writer"
 msgstr "Käsikirjoittaja"
 
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Kirjoittajat"
+
 msgctxt "#20419"
 msgid "Replace file names with library titles"
 msgstr "Korvaa tiedostojen nimet kirjaston sisältämillä nimillä"
@@ -8405,6 +8485,10 @@ msgctxt "#20464"
 msgid "Select %s"
 msgstr "Valitse %s"
 
+msgctxt "#20468"
+msgid "Add movie to a new set"
+msgstr "Lisää elokuva uuteen ryhmään"
+
 msgctxt "#21330"
 msgid "Show hidden files and directories"
 msgstr "Näytä piilotetut tiedostot ja kansiot"
@@ -8461,10 +8545,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Poista sijainti"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Tekstityskansio"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Elokuvien ja vaihtoehtoisten tekstitysten hakemisto"
@@ -8825,9 +8905,9 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Katsottujen jaksojen lukumäärä"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Tekstityksen sijainti"
+msgctxt "#21458"
+msgid "Group by"
+msgstr "Ryhmitys"
 
 msgctxt "#21461"
 msgid "Fixed"
@@ -8993,6 +9073,14 @@ msgctxt "#21843"
 msgid "Orientation"
 msgstr "Suunta"
 
+msgctxt "#21858"
+msgid "Image type"
+msgstr "Kuvatyyppi"
+
+msgctxt "#21859"
+msgid "Time created"
+msgstr "Luontipvm"
+
 msgctxt "#21860"
 msgid "Supplemental categories"
 msgstr "Lisäkategoriat"
@@ -9065,6 +9153,10 @@ msgctxt "#21877"
 msgid "Date created"
 msgstr "Luontipäivä"
 
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "Tärkeys"
+
 msgctxt "#21879"
 msgid "Country code"
 msgstr "Maakoodi"
@@ -9161,6 +9253,10 @@ msgctxt "#22001"
 msgid "Hide progress of library updates"
 msgstr "Piilota päivityksen edistyminen"
 
+msgctxt "#22002"
+msgid "DNS suffix"
+msgstr "DNS-liite"
+
 msgctxt "#22003"
 msgid "%2.3fs"
 msgstr "%2.3fs"
@@ -9257,6 +9353,10 @@ msgctxt "#22032"
 msgid "Colours"
 msgstr "Värit"
 
+msgctxt "#22033"
+msgid "Charset"
+msgstr "Merkistö"
+
 msgctxt "#22034"
 msgid "Export karaoke titles as HTML"
 msgstr "Tallenna HTML-muodossa"
@@ -9657,6 +9757,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Kuosista puuttuu tiedostoja"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Anna hakusana"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Ilmoitukset"
@@ -9981,6 +10085,10 @@ msgctxt "#33083"
 msgid "Enable custom script button"
 msgstr "Oma skripti -painike käytössä"
 
+msgctxt "#33084"
+msgid "Auto login"
+msgstr "Automaattinen sisäänkirjautuminen"
+
 msgctxt "#33100"
 msgid "Failed to start"
 msgstr "Käynnistys epäonnistui:"
@@ -10025,10 +10133,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Kaiutinjärjestelmä"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10237,6 +10341,10 @@ msgctxt "#36009"
 msgid "Put devices in standby mode when activating screensaver"
 msgstr "Aseta laitteet valmiustilaan näytönsäästäjän aktivoituessa"
 
+msgctxt "#36010"
+msgid "Wake devices when deactivating screensaver"
+msgstr "Herätä laitteet näytönsäästäjän kytkeytyessä pois"
+
 msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
 msgstr "CEC-porttia ei havaittu. Määritä se käsin."
@@ -10333,10 +10441,50 @@ msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Kohteiden kansio"
 
+msgctxt "#36101"
+msgid "Change the look and feel of the User Interface."
+msgstr "Vaihda käyttöliittymän ulkoasua."
+
 msgctxt "#36102"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36103"
+msgid "Select the skin for the User Interface. This will define the look and feel of XBMC."
+msgstr "Valitse käyttöliittymän ulkoasu. Tämä vaikuttaa siihen miltä XBMC näyttää."
+
+msgctxt "#36104"
+msgid "Change specific skin settings. The available options are dependent on the skin used."
+msgstr "Vaihda ulkoasun asetuksia. Valittavissa olevat vaihtoehdot riippuvät käytetystä ulkoasusta."
+
+msgctxt "#36105"
+msgid "Change the theme associated with your selected skin."
+msgstr "Vaihda käytössä olevan ulkoasun teemaa."
+
+msgctxt "#36106"
+msgid "Change the colours of your selected skin."
+msgstr "Vaihda käytössä olevan ulkoasun värejä."
+
+msgctxt "#36107"
+msgid "Choose the fonts displayed in the User Interface. The font sets are configured by your skin."
+msgstr "Valitse käyttöliittymän fontit. Fonttivalikoima on määritelty ulkoasussa."
+
+msgctxt "#36108"
+msgid "Resize the view of the GUI."
+msgstr "Muuta käyttöliittymän kokoa."
+
+msgctxt "#36109"
+msgid "Select the media window that XBMC displays on startup."
+msgstr "Valitse mediaikkuna, jonka XBMC näyttää käynnistyttyään."
+
+msgctxt "#36110"
+msgid "Select or disable the sound scheme used in the User Interface."
+msgstr "Valitse tai poista käytöstä käyttöliittymän äänet."
+
+msgctxt "#36111"
+msgid "Turn this off to remove the scrolling RSS news ticker."
+msgstr "Kytke tämä pois poistaaksesi ruudulla vierivät RSS-uutiset."
+
 msgctxt "#36112"
 msgid "Edit the RSS feeds."
 msgstr "Muokkaa RSS-syötteitä."
@@ -10349,14 +10497,54 @@ msgctxt "#36114"
 msgid "Chooses the language of the User Interface."
 msgstr "Valitsee käyttöliittymän kielen."
 
+msgctxt "#36115"
+msgid "Select the formats for temperature, time and date. The available options depend on the selected language."
+msgstr "Valitse missä muodossa lämpötila, aika ja päiväys näytetään. Vaihtoehdot riippuvat valitusta kielestä."
+
+msgctxt "#36116"
+msgid "Choose which character set is used for displaying text in the GUI."
+msgstr "Valitse mitä merkistöä käytetään tekstin näyttämiseen käyttöliittymässä."
+
+msgctxt "#36117"
+msgid "Select country location."
+msgstr "Valitse maan sijainti"
+
 msgctxt "#36118"
 msgid "Select your current timezone."
-msgstr "Valitse nykyinen aikavyöhykkeesi."
+msgstr "Valitse aikavyöhykkeesi."
+
+msgctxt "#36119"
+msgid "Select the default audio track when different language tracks are available."
+msgstr "Valitse oletusääniraita kun useampi kieli on saatavilla."
+
+msgctxt "#36120"
+msgid "Select the default subtitles when different languages are available."
+msgstr "Valitse oletustekstitys kun useampia kieliä on saatavilla."
 
 msgctxt "#36121"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36122"
+msgid "Display the (..) item in lists for visiting the parent folder."
+msgstr "Näytä (..) valinta yläkansion valitsemiseksi."
+
+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 "Näytä mediatiedostojen päätteet. Esimerkiksi 'You Enjoy Myself.mp3' näkyisi pelkästään 'You Enjoy Myself' ilman päätettä."
+
+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 "Älä huomio tiettyjä sanoja aakkosjärjestettäessä. Esimerkiksi 'The Simpsons' näkyisi S-kirjaimen kohdalla kuten 'Simpsons'. Katso lisää 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 "Salli tiedostojen poisto ja uudelleen nimeäminen käyttöliittymän avulla (paina esimerkiksi näppäimistöltä C päästäksesi tähän valikkoon)."
+
+msgctxt "#36126"
+msgid "Show the add source button from root sections of the user interface."
+msgstr "Näytä Lisää lähde -nappi käyttöliittymän päätasoilla."
+
 msgctxt "#36127"
 msgid "Show hidden files and directories."
 msgstr "Näytä piilotetut tiedostot ja kansiot."
@@ -10401,6 +10589,10 @@ msgctxt "#36151"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36154"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
 msgctxt "#36156"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
@@ -10505,6 +10697,10 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Aktivoi videotallennusominaisuudet (PVR) XBMC:ssä. Ainakin yhden PVR-lisäosan on oltava asennettu tätä varten."
+
 msgctxt "#36210"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
@@ -10545,6 +10741,10 @@ msgctxt "#36226"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Näytä signaalin voimakkuustiedot codecin infoikkunassa (mikäli lisäosa ja backend tukee tätä ominaisuutta)."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
@@ -10557,6 +10757,22 @@ msgctxt "#36233"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Tallennuksen prioriteetti. Korkeampi numero tarkoittaa korkeampaa prioriteettiä. Oletus on 50. Kaikki lisäosat ja backendit eivät tue tätä."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Poista tallennus tämän ajan jälkeen. Oletus on 99 päivää. Kaikki lisäosat ja backendit eivät tue tätä."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Aloita tallennus hieman ennen ohjelma-aikaa. Oletus on 2 minuuttia. Kaikki lisäosat ja backendit eivät tue tätä."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Lopeta tallentaminen hieman ohjelma-ajan jälkeen. Oletus on 10 minuuttia. Kaikki lisäosat ja backendit eivät tue tätä."
+
 msgctxt "#36240"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
@@ -10585,6 +10801,10 @@ msgctxt "#36254"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36260"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
 msgctxt "#36261"
 msgid "Path where taken screenshots will be stored."
 msgstr "Polku, johon otetut kuvakaappaukset tallennetaan."
@@ -10701,6 +10921,10 @@ msgctxt "#36331"
 msgid "Define webserver password."
 msgstr "Määritä web-palvelimen salasana."
 
+msgctxt "#36333"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
 msgctxt "#36335"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
@@ -10905,6 +11129,30 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Ei tietoa saatavilla vielä."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Vaihda kanavalle"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Nauhoita"
+
+msgctxt "#36537"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
+msgctxt "#36538"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
+msgctxt "#36539"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä.§"
+
+msgctxt "#36540"
+msgid "No info available yet."
+msgstr "Ei tietoa saatavilla vielä."
+
 msgctxt "#37014"
 msgid "Last used profile"
 msgstr "Viimeksi käytetty profiili"
diff --git a/language/French (Canada)/strings.po b/language/French (Canada)/strings.po
new file mode 100644 (file)
index 0000000..c8090a6
--- /dev/null
@@ -0,0 +1,12486 @@
+# XBMC Media Center language file
+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: French (Canada) (http://www.transifex.com/projects/p/xbmc-main/language/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgctxt "#0"
+msgid "Programs"
+msgstr "Programmes"
+
+msgctxt "#1"
+msgid "Pictures"
+msgstr "Images"
+
+msgctxt "#2"
+msgid "Music"
+msgstr "Musique"
+
+msgctxt "#3"
+msgid "Videos"
+msgstr "Vidéos"
+
+msgctxt "#4"
+msgid "TV-Guide"
+msgstr "Guide TV"
+
+msgctxt "#5"
+msgid "Settings"
+msgstr "Paramètres"
+
+msgctxt "#6"
+msgid "XBMC SVN"
+msgstr "SVN XBMC"
+
+msgctxt "#7"
+msgid "File manager"
+msgstr "Gestionnaire de fichiers"
+
+msgctxt "#8"
+msgid "Weather"
+msgstr "Météo"
+
+msgctxt "#9"
+msgid "xbmc media center"
+msgstr "Centre multimédia Xbmc"
+
+msgctxt "#11"
+msgid "Monday"
+msgstr "Lundi"
+
+msgctxt "#12"
+msgid "Tuesday"
+msgstr "Mardi"
+
+msgctxt "#13"
+msgid "Wednesday"
+msgstr "Mercredi"
+
+msgctxt "#14"
+msgid "Thursday"
+msgstr "Jeudi"
+
+msgctxt "#15"
+msgid "Friday"
+msgstr "Vendredi"
+
+msgctxt "#16"
+msgid "Saturday"
+msgstr "Samedi"
+
+msgctxt "#17"
+msgid "Sunday"
+msgstr "Dimanche"
+
+msgctxt "#21"
+msgid "January"
+msgstr "Janvier"
+
+msgctxt "#22"
+msgid "February"
+msgstr "Février"
+
+msgctxt "#23"
+msgid "March"
+msgstr "Mars"
+
+msgctxt "#24"
+msgid "April"
+msgstr "Avril"
+
+msgctxt "#25"
+msgid "May"
+msgstr "Mai"
+
+msgctxt "#26"
+msgid "June"
+msgstr "Juin"
+
+msgctxt "#27"
+msgid "July"
+msgstr "Juillet"
+
+msgctxt "#28"
+msgid "August"
+msgstr "Août"
+
+msgctxt "#29"
+msgid "September"
+msgstr "Septembre"
+
+msgctxt "#30"
+msgid "October"
+msgstr "Octobre"
+
+msgctxt "#31"
+msgid "November"
+msgstr "Novembre"
+
+msgctxt "#32"
+msgid "December"
+msgstr "Décembre"
+
+msgctxt "#41"
+msgid "Mon"
+msgstr "Lun"
+
+msgctxt "#42"
+msgid "Tue"
+msgstr "Mar"
+
+msgctxt "#43"
+msgid "Wed"
+msgstr "Mer"
+
+msgctxt "#44"
+msgid "Thu"
+msgstr "Jeu"
+
+msgctxt "#45"
+msgid "Fri"
+msgstr "Ven"
+
+msgctxt "#46"
+msgid "Sat"
+msgstr "Sam"
+
+msgctxt "#47"
+msgid "Sun"
+msgstr "Dim"
+
+msgctxt "#51"
+msgid "Jan"
+msgstr "Jan"
+
+msgctxt "#52"
+msgid "Feb"
+msgstr "Fév"
+
+msgctxt "#53"
+msgid "Mar"
+msgstr "Mar"
+
+msgctxt "#54"
+msgid "Apr"
+msgstr "Avr"
+
+msgctxt "#55"
+msgid "May"
+msgstr "Mai"
+
+msgctxt "#56"
+msgid "Jun"
+msgstr "Juin"
+
+msgctxt "#57"
+msgid "Jul"
+msgstr "Juil"
+
+msgctxt "#58"
+msgid "Aug"
+msgstr "Août"
+
+msgctxt "#59"
+msgid "Sep"
+msgstr "Sep"
+
+msgctxt "#60"
+msgid "Oct"
+msgstr "Oct"
+
+msgctxt "#61"
+msgid "Nov"
+msgstr "Nov"
+
+msgctxt "#62"
+msgid "Dec"
+msgstr "Déc"
+
+msgctxt "#71"
+msgid "N"
+msgstr "N"
+
+msgctxt "#72"
+msgid "NNE"
+msgstr "NNE"
+
+msgctxt "#73"
+msgid "NE"
+msgstr "NE"
+
+msgctxt "#74"
+msgid "ENE"
+msgstr "ENE"
+
+msgctxt "#75"
+msgid "E"
+msgstr "E"
+
+msgctxt "#76"
+msgid "ESE"
+msgstr "ESE"
+
+msgctxt "#77"
+msgid "SE"
+msgstr "SE"
+
+msgctxt "#78"
+msgid "SSE"
+msgstr "SSE"
+
+msgctxt "#79"
+msgid "S"
+msgstr "S"
+
+msgctxt "#80"
+msgid "SSW"
+msgstr "SSO"
+
+msgctxt "#81"
+msgid "SW"
+msgstr "SO"
+
+msgctxt "#82"
+msgid "WSW"
+msgstr "OSO"
+
+msgctxt "#83"
+msgid "W"
+msgstr "O"
+
+msgctxt "#84"
+msgid "WNW"
+msgstr "ONO"
+
+msgctxt "#85"
+msgid "NW"
+msgstr "NO"
+
+msgctxt "#86"
+msgid "NNW"
+msgstr "NNO"
+
+msgctxt "#87"
+msgid "VAR"
+msgstr "VAR"
+
+msgctxt "#88"
+msgid "South"
+msgstr "Sud"
+
+msgctxt "#89"
+msgid "North"
+msgstr "Nord"
+
+msgctxt "#90"
+msgid "West"
+msgstr "Ouest"
+
+msgctxt "#91"
+msgid "East"
+msgstr "Est"
+
+msgctxt "#92"
+msgid "Variable"
+msgstr "Variable"
+
+msgctxt "#98"
+msgid "View: Auto"
+msgstr "Vue : auto"
+
+msgctxt "#99"
+msgid "View: Auto big"
+msgstr "Vue : auto grande"
+
+msgctxt "#100"
+msgid "View: Icons"
+msgstr "Vue : icônes"
+
+msgctxt "#101"
+msgid "View: List"
+msgstr "Vue : liste"
+
+msgctxt "#102"
+msgid "Scan"
+msgstr "Balayer"
+
+msgctxt "#103"
+msgid "Sort by: Name"
+msgstr "Trier par : nom"
+
+msgctxt "#104"
+msgid "Sort by: Date"
+msgstr "Trier par : date"
+
+msgctxt "#105"
+msgid "Sort by: Size"
+msgstr "Trier par : taille"
+
+msgctxt "#106"
+msgid "No"
+msgstr "Non"
+
+msgctxt "#107"
+msgid "Yes"
+msgstr "Oui"
+
+msgctxt "#108"
+msgid "Slideshow"
+msgstr "Diaporama"
+
+msgctxt "#109"
+msgid "Create thumbs"
+msgstr "Créer des imagettes"
+
+msgctxt "#110"
+msgid "Create thumbnails"
+msgstr "Créer des imagettes"
+
+msgctxt "#111"
+msgid "Shortcuts"
+msgstr "Raccourcis"
+
+msgctxt "#112"
+msgid "Paused"
+msgstr "En pause"
+
+msgctxt "#113"
+msgid "Update failed"
+msgstr "La mise à jour a échoué"
+
+msgctxt "#114"
+msgid "Installation failed"
+msgstr "L'installation a échoué"
+
+msgctxt "#115"
+msgid "Copy"
+msgstr "Copier"
+
+msgctxt "#116"
+msgid "Move"
+msgstr "Déplacer"
+
+msgctxt "#117"
+msgid "Delete"
+msgstr "Supprimer"
+
+msgctxt "#118"
+msgid "Rename"
+msgstr "Renommer"
+
+msgctxt "#119"
+msgid "New folder"
+msgstr "Nouveau dossier"
+
+msgctxt "#120"
+msgid "Confirm file copy"
+msgstr "Confirmer la copie du fichier"
+
+msgctxt "#121"
+msgid "Confirm file move"
+msgstr "Confirmer le déplacement du fichier"
+
+msgctxt "#122"
+msgid "Confirm file delete?"
+msgstr "Confirmer la suppression du fichier?"
+
+msgctxt "#123"
+msgid "Copy these files?"
+msgstr "Copier ces fichiers?"
+
+msgctxt "#124"
+msgid "Move these files?"
+msgstr "Déplacer ces fichiers?"
+
+msgctxt "#125"
+msgid "Delete these files? - Deleting files cannot be undone!"
+msgstr "Supprimer ces fichiers? Ceci sera définitif!"
+
+msgctxt "#126"
+msgid "Status"
+msgstr "État"
+
+msgctxt "#127"
+msgid "Objects"
+msgstr "Objets"
+
+msgctxt "#128"
+msgid "General"
+msgstr "Général"
+
+msgctxt "#129"
+msgid "Slideshow"
+msgstr "Diaporama"
+
+msgctxt "#130"
+msgid "System info"
+msgstr "Informations système"
+
+msgctxt "#131"
+msgid "Display"
+msgstr "Affichage"
+
+msgctxt "#132"
+msgid "Albums"
+msgstr "Albums"
+
+msgctxt "#133"
+msgid "Artists"
+msgstr "Artistes"
+
+msgctxt "#134"
+msgid "Songs"
+msgstr "Morceaux"
+
+msgctxt "#135"
+msgid "Genres"
+msgstr "Genres"
+
+msgctxt "#136"
+msgid "Playlists"
+msgstr "Listes de lecture"
+
+msgctxt "#137"
+msgid "Search"
+msgstr "Rechercher"
+
+msgctxt "#138"
+msgid "System Information"
+msgstr "Informations Système"
+
+msgctxt "#139"
+msgid "Temperatures:"
+msgstr "Températures :"
+
+msgctxt "#140"
+msgid "CPU:"
+msgstr "UCT :"
+
+msgctxt "#141"
+msgid "GPU:"
+msgstr "UTG :"
+
+msgctxt "#142"
+msgid "Time:"
+msgstr "Heure :"
+
+msgctxt "#143"
+msgid "Current:"
+msgstr "Actuelle :"
+
+msgctxt "#144"
+msgid "Build:"
+msgstr "Version :"
+
+msgctxt "#145"
+msgid "Network:"
+msgstr "Réseau :"
+
+msgctxt "#146"
+msgid "Type:"
+msgstr "Type :"
+
+msgctxt "#147"
+msgid "Static"
+msgstr "Statique"
+
+msgctxt "#148"
+msgid "DHCP"
+msgstr "DHCP"
+
+msgctxt "#149"
+msgid "MAC address"
+msgstr "Adresse MAC "
+
+msgctxt "#150"
+msgid "IP address"
+msgstr "Adresse IP "
+
+msgctxt "#151"
+msgid "Link:"
+msgstr "Connexion :"
+
+msgctxt "#152"
+msgid "Half duplex"
+msgstr "semi-duplex"
+
+msgctxt "#153"
+msgid "Full duplex"
+msgstr "Bidirectionnel"
+
+msgctxt "#154"
+msgid "Storage"
+msgstr "Stockage"
+
+msgctxt "#155"
+msgid "Drive"
+msgstr "Lecteur"
+
+msgctxt "#156"
+msgid "Free"
+msgstr "Libre"
+
+msgctxt "#157"
+msgid "Video"
+msgstr "Vidéo"
+
+msgctxt "#158"
+msgid "Free memory"
+msgstr "Mémoire libre"
+
+msgctxt "#159"
+msgid "No link"
+msgstr "Aucune connexion"
+
+msgctxt "#160"
+msgid "Free"
+msgstr "Libres"
+
+msgctxt "#161"
+msgid "Unavailable"
+msgstr "Non disponible"
+
+msgctxt "#162"
+msgid "Tray open"
+msgstr "Plateau ouvert"
+
+msgctxt "#163"
+msgid "Reading"
+msgstr "Lecture"
+
+msgctxt "#164"
+msgid "No disc"
+msgstr "Aucun disque"
+
+msgctxt "#165"
+msgid "Disc present"
+msgstr "Disque présent"
+
+msgctxt "#166"
+msgid "Skin"
+msgstr "Habillage"
+
+msgctxt "#167"
+msgid "Cancel file operations"
+msgstr "Annuler les opérations de fichiers"
+
+msgctxt "#168"
+msgid "%s- %s"
+msgstr "%s- %s"
+
+msgctxt "#169"
+msgid "Resolution"
+msgstr "Résolution"
+
+msgctxt "#170"
+msgid "Adjust display refresh rate to match video"
+msgstr "Ajuster le taux de rafraîchissement à la vidéo"
+
+msgctxt "#171"
+msgid "Sort title"
+msgstr "Trier les titres"
+
+msgctxt "#172"
+msgid "Release date"
+msgstr "Date de parution"
+
+msgctxt "#173"
+msgid "Display 4:3 videos as"
+msgstr "Afficher les vidéos 4:3 en tant que"
+
+msgctxt "#175"
+msgid "Moods"
+msgstr "Humeurs"
+
+msgctxt "#176"
+msgid "Styles"
+msgstr "Styles"
+
+msgctxt "#179"
+msgid "Song"
+msgstr "Morceau"
+
+msgctxt "#180"
+msgid "Duration"
+msgstr "Durée"
+
+msgctxt "#181"
+msgid "Select album"
+msgstr "Choisir un album"
+
+msgctxt "#182"
+msgid "Tracks"
+msgstr "Pistes"
+
+msgctxt "#183"
+msgid "Review"
+msgstr "Critique"
+
+msgctxt "#184"
+msgid "Refresh"
+msgstr "Rafraîchir"
+
+msgctxt "#185"
+msgid "Searching album"
+msgstr "Recherche d'album"
+
+msgctxt "#186"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "#187"
+msgid "No albums found!"
+msgstr "Aucun album trouvé!"
+
+msgctxt "#188"
+msgid "Select all"
+msgstr "Tout sélectionner"
+
+msgctxt "#189"
+msgid "Scanning media info"
+msgstr "Balayage des informations de média"
+
+msgctxt "#190"
+msgid "Save"
+msgstr "Enregistrer"
+
+msgctxt "#191"
+msgid "Shuffle"
+msgstr "Mélanger"
+
+msgctxt "#192"
+msgid "Clear"
+msgstr "Effacer"
+
+msgctxt "#193"
+msgid "Scan"
+msgstr "Balayer"
+
+msgctxt "#194"
+msgid "Searching..."
+msgstr "Recherche..."
+
+msgctxt "#195"
+msgid "No info found!"
+msgstr "Aucune information trouvée!"
+
+msgctxt "#196"
+msgid "Select movie:"
+msgstr "Choisir un film :"
+
+msgctxt "#197"
+msgid "Querying %s info"
+msgstr "Demande d'information sur %s"
+
+msgctxt "#198"
+msgid "Loading movie details"
+msgstr "Chargement des détails du film"
+
+msgctxt "#199"
+msgid "Web interface"
+msgstr "Interface Web"
+
+msgctxt "#202"
+msgid "Tagline"
+msgstr "Accroche"
+
+msgctxt "#203"
+msgid "Plot outline"
+msgstr "Aperçu de l'intrigue"
+
+msgctxt "#205"
+msgid "Votes"
+msgstr "Votes"
+
+msgctxt "#206"
+msgid "Cast"
+msgstr "Dstribution"
+
+msgctxt "#207"
+msgid "Plot"
+msgstr "Intrigue"
+
+msgctxt "#208"
+msgid "Play"
+msgstr "Lecture"
+
+msgctxt "#209"
+msgid "Next"
+msgstr "Suivant"
+
+msgctxt "#210"
+msgid "Previous"
+msgstr "Précédent"
+
+msgctxt "#213"
+msgid "Calibrate user interface..."
+msgstr "Calibrer l'interface utilisateur..."
+
+msgctxt "#214"
+msgid "Video calibration..."
+msgstr "Calibrage de l'écran..."
+
+msgctxt "#215"
+msgid "Soften"
+msgstr "Adoucir"
+
+msgctxt "#216"
+msgid "Zoom amount"
+msgstr "Niveau de Zoom"
+
+msgctxt "#217"
+msgid "Pixel ratio"
+msgstr "Rapport de pixel"
+
+msgctxt "#218"
+msgid "DVD drive"
+msgstr "Lecteur DVD"
+
+msgctxt "#219"
+msgid "Please insert disc"
+msgstr "Veuillez insérer un disque"
+
+msgctxt "#220"
+msgid "Remote share"
+msgstr "Partage distant"
+
+msgctxt "#221"
+msgid "Network is not connected"
+msgstr "Le réseau n'est pas connecté"
+
+msgctxt "#222"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "#224"
+msgid "Speed"
+msgstr "Vitesse"
+
+msgctxt "#225"
+msgid "Vertical Shift"
+msgstr "Décalage vertical"
+
+msgctxt "#226"
+msgid "Test patterns..."
+msgstr "Mire de réglage..."
+
+msgctxt "#227"
+msgid "Lookup audio CD track names from freedb.org"
+msgstr "Rechercher le nom de pistes du CD audio sur freedb.org"
+
+msgctxt "#228"
+msgid "Shuffle playlist on load"
+msgstr "Mélanger la liste de lecture lors du chargement"
+
+msgctxt "#229"
+msgid "HDD spindown time"
+msgstr "Temps d'arrêt du disque dur"
+
+msgctxt "#230"
+msgid "Video filters"
+msgstr "Filtres vidéo"
+
+msgctxt "#231"
+msgid "None"
+msgstr "Aucun"
+
+msgctxt "#232"
+msgid "Point"
+msgstr "Point"
+
+msgctxt "#233"
+msgid "Linear"
+msgstr "Linéaire"
+
+msgctxt "#234"
+msgid "Anisotropic"
+msgstr "Anisotropique"
+
+msgctxt "#235"
+msgid "Quincunx"
+msgstr "Quincunx"
+
+msgctxt "#236"
+msgid "Gaussian cubic"
+msgstr "Cubique Gaussien"
+
+msgctxt "#237"
+msgid "Minification"
+msgstr "Réduction"
+
+msgctxt "#238"
+msgid "Magnification"
+msgstr "Grossissement"
+
+msgctxt "#239"
+msgid "Clear playlist on finish"
+msgstr "Effacer la liste de lecture une fois terminé"
+
+msgctxt "#240"
+msgid "Display Mode"
+msgstr "Mode d'affichage"
+
+msgctxt "#241"
+msgid "Full Screen #%d"
+msgstr "Plein écran #%d"
+
+msgctxt "#242"
+msgid "Windowed"
+msgstr "Fenêtré"
+
+msgctxt "#243"
+msgid "Refresh Rate"
+msgstr "Taux de rafraîchissement"
+
+msgctxt "#244"
+msgid "Full screen"
+msgstr "Plein écran"
+
+msgctxt "#245"
+msgid "Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)"
+msgstr "Dimensionnement : (%i,%i)->(%i,%i) (Zoom x%2.2f) AR : %2.2f : 1 (Pixels : %2.2f : 1) (VShift : %2.2f)"
+
+msgctxt "#247"
+msgid "Scripts"
+msgstr "Scripts"
+
+msgctxt "#248"
+msgid "Language"
+msgstr "Langue"
+
+msgctxt "#249"
+msgid "Music"
+msgstr "Musique"
+
+msgctxt "#250"
+msgid "Visualisation"
+msgstr "Visualisation"
+
+msgctxt "#251"
+msgid "Select destination directory"
+msgstr "Choisir le répertoire de destination"
+
+msgctxt "#253"
+msgid "Number of channels"
+msgstr "Nombre de canaux"
+
+msgctxt "#254"
+msgid "DTS capable receiver"
+msgstr "Récepteur compatible DTS"
+
+msgctxt "#255"
+msgid "CDDB"
+msgstr "CDDB"
+
+msgctxt "#256"
+msgid "Fetching CD information"
+msgstr "Récupération des informations du CD"
+
+msgctxt "#257"
+msgid "Error"
+msgstr "Erreur"
+
+msgctxt "#258"
+msgid "Enable tag reading"
+msgstr "Activer la lecture des balises"
+
+msgctxt "#259"
+msgid "Opening"
+msgstr "Ouverture"
+
+msgctxt "#260"
+msgid "Shoutcast"
+msgstr "Shoutcast"
+
+msgctxt "#261"
+msgid "Waiting for start..."
+msgstr "En attente du démarrage..."
+
+msgctxt "#262"
+msgid "Scripts output"
+msgstr "Sortie des scripts"
+
+msgctxt "#263"
+msgid "Allow control of XBMC via HTTP"
+msgstr "Permettre le contrôle de XBMC par HTTP"
+
+msgctxt "#264"
+msgid "Record"
+msgstr "Enregistrer"
+
+msgctxt "#265"
+msgid "Stop Rec."
+msgstr "Arrêter l'enregistrement"
+
+msgctxt "#266"
+msgid "Sort by: Track"
+msgstr "Trier par : piste"
+
+msgctxt "#267"
+msgid "Sort by: Time"
+msgstr "Trier par : durée"
+
+msgctxt "#268"
+msgid "Sort by: Title"
+msgstr "Trier par : titre"
+
+msgctxt "#269"
+msgid "Sort by: Artist"
+msgstr "Trier par : artiste"
+
+msgctxt "#270"
+msgid "Sort by: Album"
+msgstr "Trier par : album"
+
+msgctxt "#271"
+msgid "Top 100"
+msgstr "Les 100 1ers"
+
+msgctxt "#272"
+msgid "Top-Left overscan compensation"
+msgstr "Compensation de surbalayage haut-gauche"
+
+msgctxt "#273"
+msgid "Bottom-Right overscan compensation"
+msgstr "Compensation de surbalayage bas-droite"
+
+msgctxt "#274"
+msgid "Subtitle positioning"
+msgstr "Positionnement des sous-titres"
+
+msgctxt "#275"
+msgid "Pixel ratio adjustment"
+msgstr "Ajustement du ratio de pixel"
+
+msgctxt "#276"
+msgid "Adjust the arrow to change the amount of overscan"
+msgstr "Ajuster la flèche pour changer la quantité de surbalayage"
+
+msgctxt "#277"
+msgid "Adjust the bar to change the subtitles position"
+msgstr "Ajuster la barre pour changer la position des sous-titres"
+
+msgctxt "#278"
+msgid "Adjust the rectangle so it is perfectly square"
+msgstr "Ajuster le rectangle pour qu'il soit parfaitement carré"
+
+msgctxt "#279"
+msgid "Unable to load settings"
+msgstr "Impossible de charger les préférences"
+
+msgctxt "#280"
+msgid "Using default settings"
+msgstr "Utilisation des paramètres par défaut"
+
+msgctxt "#281"
+msgid "Please check the XML files"
+msgstr "Veuillez vérifiez les fichiers XML"
+
+msgctxt "#282"
+msgid "Found %i items"
+msgstr "%i éléments trouvés"
+
+msgctxt "#283"
+msgid "Search results"
+msgstr "Résultats de la recherche"
+
+msgctxt "#284"
+msgid "No results found"
+msgstr "Aucun résultat"
+
+msgctxt "#285"
+msgid "Preferred audio language"
+msgstr "Langue préférée pour l'audio"
+
+msgctxt "#286"
+msgid "Preferred subtitle language"
+msgstr "Langue préférée pour les sous-titres"
+
+msgctxt "#287"
+msgid "Subtitles"
+msgstr "Sous-titres"
+
+msgctxt "#288"
+msgid "Font"
+msgstr "Police"
+
+msgctxt "#289"
+msgid "Size"
+msgstr "Taille"
+
+msgctxt "#290"
+msgid "Dynamic range compression"
+msgstr "Compression de l'étendue dynamique"
+
+msgctxt "#291"
+msgid "Video"
+msgstr "Vidéo"
+
+msgctxt "#292"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "#293"
+msgid "Browse for subtitles"
+msgstr "Rechercher des sous-titres"
+
+msgctxt "#294"
+msgid "Create bookmark"
+msgstr "Créer un signet"
+
+msgctxt "#296"
+msgid "Clear bookmarks"
+msgstr "Effacer les signets"
+
+msgctxt "#297"
+msgid "Audio offset"
+msgstr "Décalage audio"
+
+msgctxt "#298"
+msgid "Bookmarks"
+msgstr "Signets"
+
+msgctxt "#300"
+msgid "MP1 capable receiver"
+msgstr "Récepteur compatible MP1"
+
+msgctxt "#301"
+msgid "MP2 capable receiver"
+msgstr "Récepteur compatible MP2"
+
+msgctxt "#302"
+msgid "MP3 capable receiver"
+msgstr "Récepteur compatible MP3"
+
+msgctxt "#303"
+msgid "Delay"
+msgstr "Délai"
+
+msgctxt "#304"
+msgid "Language"
+msgstr "Langue"
+
+msgctxt "#305"
+msgid "Enabled"
+msgstr "Activé"
+
+msgctxt "#306"
+msgid "Non-interleaved"
+msgstr "Non entrelacé"
+
+msgctxt "#308"
+msgid "Original stream's language"
+msgstr "Langue originale du flux"
+
+msgctxt "#309"
+msgid "User Interface language"
+msgstr "Langue de l'interface utilisateur"
+
+msgctxt "#312"
+msgid "(0=auto)"
+msgstr "(0=auto)"
+
+msgctxt "#313"
+msgid "Cleaning database"
+msgstr "Épurement de la base de données"
+
+msgctxt "#314"
+msgid "Preparing..."
+msgstr "Préparation..."
+
+msgctxt "#315"
+msgid "Database error"
+msgstr "Erreur de la base de données"
+
+msgctxt "#316"
+msgid "Searching songs..."
+msgstr "Recherche de morceaux..."
+
+msgctxt "#317"
+msgid "Cleaned database successfully"
+msgstr "Épurement de la base de données réussie"
+
+msgctxt "#318"
+msgid "Cleaning songs..."
+msgstr "Épurement des morceaux..."
+
+msgctxt "#319"
+msgid "Error cleaning songs"
+msgstr "Erreur pendant l'épurement des morceaux"
+
+msgctxt "#320"
+msgid "Cleaning artists..."
+msgstr "Épurement des artistes..."
+
+msgctxt "#321"
+msgid "Error cleaning artists"
+msgstr "Erreur durant l'épurement des artistes"
+
+msgctxt "#322"
+msgid "Cleaning genres..."
+msgstr "Épurement des genres..."
+
+msgctxt "#323"
+msgid "Error cleaning genres"
+msgstr "Erreur durant l'épurement des genres"
+
+msgctxt "#324"
+msgid "Cleaning paths..."
+msgstr "Épurement des chemins..."
+
+msgctxt "#325"
+msgid "Error cleaning paths"
+msgstr "Erreur durant l'épurement des chemins"
+
+msgctxt "#326"
+msgid "Cleaning albums..."
+msgstr "Épurement des albums..."
+
+msgctxt "#327"
+msgid "Error cleaning albums"
+msgstr "Erreur durant l'épurement des albums"
+
+msgctxt "#328"
+msgid "Writing changes..."
+msgstr "Enregistrement des modifications..."
+
+msgctxt "#329"
+msgid "Error writing changes"
+msgstr "Erreur de l'enregistrement des modifications..."
+
+msgctxt "#330"
+msgid "This may take some time..."
+msgstr "Ceci peut durer un moment..."
+
+msgctxt "#331"
+msgid "Compressing database..."
+msgstr "Compression de la base de données..."
+
+msgctxt "#332"
+msgid "Error compressing database"
+msgstr "Erreur de compression de la base de données"
+
+msgctxt "#333"
+msgid "Do you want to clean the library?"
+msgstr "Voulez-vous épurer la médiathèque ?"
+
+msgctxt "#334"
+msgid "Clean library..."
+msgstr "Épurer la médiathèque..."
+
+msgctxt "#335"
+msgid "Start"
+msgstr "Démarrer"
+
+msgctxt "#336"
+msgid "Framerate conversion"
+msgstr "Conversion des images par seoncde"
+
+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"
+
+msgctxt "#341"
+msgid "Play disc"
+msgstr "Lire le disque"
+
+msgctxt "#342"
+msgid "Movies"
+msgstr "Films"
+
+msgctxt "#343"
+msgid "Adjust framerate"
+msgstr "Ajuster les images par seconde"
+
+msgctxt "#344"
+msgid "Actors"
+msgstr "Acteurs"
+
+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"
+
+msgctxt "#350"
+msgid "Programs"
+msgstr "Programmes"
+
+msgctxt "#351"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#352"
+msgid "Dim"
+msgstr "Atténuer"
+
+msgctxt "#353"
+msgid "Black"
+msgstr "Noir"
+
+msgctxt "#354"
+msgid "Matrix trails"
+msgstr "Repères de matrice"
+
+msgctxt "#355"
+msgid "Screensaver time"
+msgstr "Activation de l'économiseur d'écran"
+
+msgctxt "#356"
+msgid "Screensaver mode"
+msgstr "Mode de l'économiseur d'écran"
+
+msgctxt "#357"
+msgid "Shutdown function timer"
+msgstr "Minuterie de la fonction fermeture"
+
+msgctxt "#358"
+msgid "All albums"
+msgstr "Tous les albums"
+
+msgctxt "#359"
+msgid "Recently added albums"
+msgstr "Albums ajoutés récemment"
+
+msgctxt "#360"
+msgid "Screensaver"
+msgstr "Économiseur d'écran"
+
+msgctxt "#361"
+msgid "R. Slideshow"
+msgstr "Diapositives récursives"
+
+msgctxt "#362"
+msgid "Screensaver dim level"
+msgstr "Atténuation de l'économiseur d'écran"
+
+msgctxt "#363"
+msgid "Sort by: File"
+msgstr "Trier par : fichiers"
+
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Récepteur compatible « Dolby Digital » (AC3)"
+
+msgctxt "#365"
+msgid "Sort by: Name"
+msgstr "Trier par : nom"
+
+msgctxt "#366"
+msgid "Sort by: Year"
+msgstr "Trier par : année"
+
+msgctxt "#367"
+msgid "Sort by: Rating"
+msgstr "Trier par : évaluation"
+
+msgctxt "#368"
+msgid "IMDb"
+msgstr "IMDb"
+
+msgctxt "#369"
+msgid "Title"
+msgstr "Titre"
+
+msgctxt "#370"
+msgid "Thunderstorms"
+msgstr "Orages"
+
+msgctxt "#371"
+msgid "Partly"
+msgstr "Partiellement"
+
+msgctxt "#372"
+msgid "Mostly"
+msgstr "Principalement"
+
+msgctxt "#373"
+msgid "Sunny"
+msgstr "Ensoleillé"
+
+msgctxt "#374"
+msgid "Cloudy"
+msgstr "Nuageux"
+
+msgctxt "#375"
+msgid "Snow"
+msgstr "Neige"
+
+msgctxt "#376"
+msgid "Rain"
+msgstr "Pluie"
+
+msgctxt "#377"
+msgid "Light"
+msgstr "Légère"
+
+msgctxt "#378"
+msgid "AM"
+msgstr "AM"
+
+msgctxt "#379"
+msgid "PM"
+msgstr "PM"
+
+msgctxt "#380"
+msgid "Showers"
+msgstr "Averses"
+
+msgctxt "#381"
+msgid "Few"
+msgstr "Quelques"
+
+msgctxt "#382"
+msgid "Scattered"
+msgstr "Éparse"
+
+msgctxt "#383"
+msgid "Wind"
+msgstr "Vent"
+
+msgctxt "#384"
+msgid "Strong"
+msgstr "Fort"
+
+msgctxt "#385"
+msgid "Fair"
+msgstr "Beau"
+
+msgctxt "#386"
+msgid "Clear"
+msgstr "Dégagé"
+
+msgctxt "#387"
+msgid "Clouds"
+msgstr "Nuages"
+
+msgctxt "#388"
+msgid "Early"
+msgstr "Matinal(e)"
+
+msgctxt "#389"
+msgid "Shower"
+msgstr "Averses"
+
+msgctxt "#390"
+msgid "Flurries"
+msgstr "Averses de neige"
+
+msgctxt "#391"
+msgid "Low"
+msgstr "Faible"
+
+msgctxt "#392"
+msgid "Medium"
+msgstr "Moyen"
+
+msgctxt "#393"
+msgid "High"
+msgstr "Haut"
+
+msgctxt "#394"
+msgid "Fog"
+msgstr "Brouillard"
+
+msgctxt "#395"
+msgid "Haze"
+msgstr "Brume"
+
+msgctxt "#396"
+msgid "Select location"
+msgstr "Choisir un lieu"
+
+msgctxt "#397"
+msgid "Refresh time"
+msgstr "Intervalle de rafraîchissement"
+
+msgctxt "#398"
+msgid "Temperature units"
+msgstr "Unité de température"
+
+msgctxt "#399"
+msgid "Speed units"
+msgstr "Unité de vitesse"
+
+msgctxt "#400"
+msgid "Weather"
+msgstr "Météo"
+
+msgctxt "#401"
+msgid "Temp"
+msgstr "Temp."
+
+msgctxt "#402"
+msgid "Feels like"
+msgstr "Refr. éolien"
+
+msgctxt "#403"
+msgid "UV index"
+msgstr "Indice UV"
+
+msgctxt "#404"
+msgid "Wind"
+msgstr "Vent"
+
+msgctxt "#405"
+msgid "Dew point"
+msgstr "Point de rosée"
+
+msgctxt "#406"
+msgid "Humidity"
+msgstr "Humidité"
+
+msgctxt "#409"
+msgid "Defaults"
+msgstr "Par défauts"
+
+msgctxt "#410"
+msgid "Accessing weather service"
+msgstr "Accès au service météo"
+
+msgctxt "#411"
+msgid "Getting weather for:"
+msgstr "Obtenir la météo pour :"
+
+msgctxt "#412"
+msgid "Unable to get weather data"
+msgstr "Échec de la récupération des données météo"
+
+msgctxt "#413"
+msgid "Manual"
+msgstr "Manuel"
+
+msgctxt "#414"
+msgid "No review for this album"
+msgstr "Pas de critique pour cet album"
+
+msgctxt "#415"
+msgid "Downloading thumbnail..."
+msgstr "Téléchargement des imagettes..."
+
+msgctxt "#416"
+msgid "Not available"
+msgstr "Non disponible"
+
+msgctxt "#417"
+msgid "View: Big icons"
+msgstr "Vue : grosses icônes"
+
+msgctxt "#418"
+msgid "Low"
+msgstr "Bas"
+
+msgctxt "#419"
+msgid "High"
+msgstr "Haut"
+
+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 infos de l'album"
+
+msgctxt "#423"
+msgid "Delete CD information"
+msgstr "Supprimer les infos du CD"
+
+msgctxt "#424"
+msgid "Select"
+msgstr "Choisir"
+
+msgctxt "#425"
+msgid "No album information found"
+msgstr "Aucune information d'album trouvée"
+
+msgctxt "#426"
+msgid "No CD information found"
+msgstr "Aucune information de CD trouvée"
+
+msgctxt "#427"
+msgid "Disc"
+msgstr "Disque"
+
+msgctxt "#428"
+msgid "Insert correct CD/DVD"
+msgstr "Insérer le bon CD/DVD"
+
+msgctxt "#429"
+msgid "Please insert the following disc:"
+msgstr "Veuillez insérer le disque suivant :"
+
+msgctxt "#430"
+msgid "Sort by: DVD#"
+msgstr "Trier par : no DVD"
+
+msgctxt "#431"
+msgid "No cache"
+msgstr "Pas de cache"
+
+msgctxt "#432"
+msgid "Remove movie from library"
+msgstr "Enlever le film de la médiathèque"
+
+msgctxt "#433"
+msgid "Really remove '%s'?"
+msgstr "Vraiment enlever « %s »?"
+
+msgctxt "#434"
+msgid "From %s at %i %s"
+msgstr "De %s à %i %s"
+
+msgctxt "#435"
+msgid "No optical disc drive detected"
+msgstr "Pas de lecteur optique détecté"
+
+msgctxt "#436"
+msgid "You need an optical disc drive to play this video"
+msgstr "Un lecteur DVD est nécessaire pour lire cette vidéo"
+
+msgctxt "#437"
+msgid "Removable disk"
+msgstr "Disque amovible"
+
+msgctxt "#438"
+msgid "Opening file"
+msgstr "Ouverture du fichier"
+
+msgctxt "#439"
+msgid "Cache"
+msgstr "Cache"
+
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "Disque dur"
+
+msgctxt "#441"
+msgid "UDF"
+msgstr "UDF"
+
+msgctxt "#442"
+msgid "Local network"
+msgstr "Réseau Local"
+
+msgctxt "#443"
+msgid "Internet"
+msgstr "Internet"
+
+msgctxt "#444"
+msgid "Video"
+msgstr "Vidéo"
+
+msgctxt "#445"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "#446"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "#447"
+msgid "Autorun media"
+msgstr "Exéc. auto des médias"
+
+msgctxt "#448"
+msgid "Dolby Digital Plus (E-AC3) capable receiver"
+msgstr "récepteur compatible Dolby Digital Plus (E-AC3)"
+
+msgctxt "#449"
+msgid "Enabled"
+msgstr "Activé"
+
+msgctxt "#450"
+msgid "Columns"
+msgstr "Colonnes"
+
+msgctxt "#451"
+msgid "Row 1 address"
+msgstr "Adresse ligne 1 "
+
+msgctxt "#452"
+msgid "Row 2 address"
+msgstr "Adresse ligne 2"
+
+msgctxt "#453"
+msgid "Row 3 address"
+msgstr "Adresse ligne 3"
+
+msgctxt "#454"
+msgid "Row 4 address"
+msgstr "Adresse ligne 4"
+
+msgctxt "#455"
+msgid "Rows"
+msgstr "Lignes"
+
+msgctxt "#456"
+msgid "Mode"
+msgstr "Mode"
+
+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"
+
+msgctxt "#460"
+msgid "Audio stream"
+msgstr "Flux audio"
+
+msgctxt "#461"
+msgid "[active]"
+msgstr "[actif]"
+
+msgctxt "#462"
+msgid "Subtitle"
+msgstr "Sous-titres"
+
+msgctxt "#463"
+msgid "Backlight"
+msgstr "Rétroélairage"
+
+msgctxt "#464"
+msgid "Brightness"
+msgstr "Luminosité"
+
+msgctxt "#465"
+msgid "Contrast"
+msgstr "Contraste"
+
+msgctxt "#466"
+msgid "Gamma"
+msgstr "Gamma"
+
+msgctxt "#467"
+msgid "Type"
+msgstr "Type"
+
+msgctxt "#468"
+msgid "Move the bar to change the OSD position"
+msgstr "Déplacez la barre pour changer la position de l'affichage à l'écran"
+
+msgctxt "#469"
+msgid "OSD position"
+msgstr "Position de l'affichage à l'écran"
+
+msgctxt "#470"
+msgid "Credits"
+msgstr "Crédits"
+
+msgctxt "#474"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#475"
+msgid "Music only"
+msgstr "Musique seulement"
+
+msgctxt "#476"
+msgid "Music & video"
+msgstr "Musique & vidéo"
+
+msgctxt "#477"
+msgid "Unable to load playlist"
+msgstr "Impossible de charger la liste de lecture"
+
+msgctxt "#478"
+msgid "OSD"
+msgstr "Affichage à l' écran"
+
+msgctxt "#479"
+msgid "Skin & language"
+msgstr "Habillage & langue"
+
+msgctxt "#480"
+msgid "Appearance"
+msgstr "Apparence"
+
+msgctxt "#481"
+msgid "Audio options"
+msgstr "Options audio"
+
+msgctxt "#482"
+msgid "About XBMC"
+msgstr "À propos de XBMC"
+
+msgctxt "#485"
+msgid "Delete album"
+msgstr "Supprimer l'album"
+
+msgctxt "#486"
+msgid "Repeat"
+msgstr "Répéter"
+
+msgctxt "#487"
+msgid "Repeat one"
+msgstr "Répéter une fois"
+
+msgctxt "#488"
+msgid "Repeat folder"
+msgstr "Répéter le dossier"
+
+msgctxt "#489"
+msgid "Play the next song automatically"
+msgstr "Lire automatiquement le morceau suivant"
+
+msgctxt "#491"
+msgid "- Use big icons"
+msgstr "- Utiliser de grosses icônes"
+
+msgctxt "#492"
+msgid "Resize VobSubs"
+msgstr "Redimensionner les VobSubs"
+
+msgctxt "#493"
+msgid "Advanced options (Experts Only!)"
+msgstr "Options avancées (experts uniquement!)"
+
+msgctxt "#494"
+msgid "Overall audio headroom"
+msgstr "Marge de sécurité audio globale"
+
+msgctxt "#495"
+msgid "Upsample videos to GUI resolution"
+msgstr "Suréchantilloner les vidéos à la résolution de l'interface utilisateur"
+
+msgctxt "#496"
+msgid "Calibration"
+msgstr "Calibrage"
+
+msgctxt "#497"
+msgid "Show file extensions"
+msgstr "Afficher les extensions des fichiers"
+
+msgctxt "#498"
+msgid "Sort by: Type"
+msgstr "Trier par : type"
+
+msgctxt "#499"
+msgid "Unable to connect to online lookup service"
+msgstr "Connexion impossible au service de recherche en ligne"
+
+msgctxt "#500"
+msgid "Downloading album information failed"
+msgstr "Échec du téléchargement des informations de l'album"
+
+msgctxt "#501"
+msgid "Looking for album names..."
+msgstr "Recherche des noms d'album..."
+
+msgctxt "#502"
+msgid "Open"
+msgstr "Ouvert"
+
+msgctxt "#503"
+msgid "Busy"
+msgstr "Occupé"
+
+msgctxt "#504"
+msgid "Empty"
+msgstr "Vide"
+
+msgctxt "#505"
+msgid "Loading media info from files..."
+msgstr "Chargement des infos des médias à partir des fichiers..."
+
+msgctxt "#507"
+msgid "Sort by: Usage"
+msgstr "Trier par : utilisation"
+
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "Autoriser les visualisations"
+
+msgctxt "#511"
+msgid "Enable video mode switching"
+msgstr "Activer la commutaiton du mode vidéo"
+
+msgctxt "#512"
+msgid "Startup window"
+msgstr "Écran de démarrage"
+
+msgctxt "#513"
+msgid "Home window"
+msgstr "Écran d'accueil"
+
+msgctxt "#514"
+msgid "Manual settings"
+msgstr "Paramètres manuels"
+
+msgctxt "#515"
+msgid "Genre"
+msgstr "Genre"
+
+msgctxt "#517"
+msgid "Recently played albums"
+msgstr "Albums joués récemment"
+
+msgctxt "#518"
+msgid "Launch"
+msgstr "Lancer"
+
+msgctxt "#519"
+msgid "Launch in..."
+msgstr "Lancer en..."
+
+msgctxt "#521"
+msgid "Compilations"
+msgstr "Compilations"
+
+msgctxt "#522"
+msgid "Remove source"
+msgstr "Enlever la source"
+
+msgctxt "#523"
+msgid "Switch media"
+msgstr "Changer de média"
+
+msgctxt "#524"
+msgid "Select playlist"
+msgstr "Choisir une liste de lecture"
+
+msgctxt "#525"
+msgid "New playlist..."
+msgstr "Nouvelle liste de lecture..."
+
+msgctxt "#526"
+msgid "Add to playlist"
+msgstr "Ajouter à la liste de lecture"
+
+msgctxt "#527"
+msgid "Manually add to library"
+msgstr "Ajouter manuellement à la médiathèque"
+
+msgctxt "#528"
+msgid "Enter title"
+msgstr "Saisir le titre"
+
+msgctxt "#529"
+msgid "Error: Duplicate title"
+msgstr "Erreur : doublon de titre"
+
+msgctxt "#530"
+msgid "Select genre"
+msgstr "Choisir le genre"
+
+msgctxt "#531"
+msgid "New genre"
+msgstr "Nouveau genre"
+
+msgctxt "#532"
+msgid "Manual addition"
+msgstr "Ajout manuel"
+
+msgctxt "#533"
+msgid "Enter genre"
+msgstr "Saisir le genre"
+
+msgctxt "#534"
+msgid "View: %s"
+msgstr "Vue : %s"
+
+msgctxt "#535"
+msgid "List"
+msgstr "Liste"
+
+msgctxt "#536"
+msgid "Icons"
+msgstr "Icônes"
+
+msgctxt "#537"
+msgid "Big list"
+msgstr "Grande liste"
+
+msgctxt "#538"
+msgid "Big icons"
+msgstr "Grosses icônes"
+
+msgctxt "#539"
+msgid "Wide"
+msgstr "Large"
+
+msgctxt "#540"
+msgid "Big wide"
+msgstr "Grand large"
+
+msgctxt "#541"
+msgid "Album icons"
+msgstr "Icônes d'albums"
+
+msgctxt "#542"
+msgid "DVD icons"
+msgstr "Icônes de DVD"
+
+msgctxt "#543"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "#544"
+msgid "Media info"
+msgstr "Infos du média"
+
+msgctxt "#545"
+msgid "Audio output device"
+msgstr "Périphérique de sortie audio"
+
+msgctxt "#546"
+msgid "Passthrough output device"
+msgstr "Périphérique de sortie en transit"
+
+msgctxt "#547"
+msgid "No biography for this artist"
+msgstr "Pas de biographie pour cet artiste"
+
+msgctxt "#548"
+msgid "Downmix multichannel audio to stereo"
+msgstr "Démixage de l'audio multicanaux en stéréo"
+
+msgctxt "#550"
+msgid "Sort by: %s"
+msgstr "Trier par : %s"
+
+msgctxt "#551"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "#552"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "#553"
+msgid "Size"
+msgstr "Taille"
+
+msgctxt "#554"
+msgid "Track"
+msgstr "Piste"
+
+msgctxt "#555"
+msgid "Time"
+msgstr "Durée"
+
+msgctxt "#556"
+msgid "Title"
+msgstr "Titre"
+
+msgctxt "#557"
+msgid "Artist"
+msgstr "Artiste"
+
+msgctxt "#558"
+msgid "Album"
+msgstr "Album"
+
+msgctxt "#559"
+msgid "Playlist"
+msgstr "Liste de lecture"
+
+msgctxt "#560"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "#561"
+msgid "File"
+msgstr "Fichier"
+
+msgctxt "#562"
+msgid "Year"
+msgstr "Année"
+
+msgctxt "#563"
+msgid "Rating"
+msgstr "Évaluation"
+
+msgctxt "#564"
+msgid "Type"
+msgstr "Type"
+
+msgctxt "#565"
+msgid "Usage"
+msgstr "Utilisation"
+
+msgctxt "#566"
+msgid "Album artist"
+msgstr "Artiste de l'album"
+
+msgctxt "#567"
+msgid "Play count"
+msgstr "Nombre de lectures"
+
+msgctxt "#568"
+msgid "Last played"
+msgstr "Dernière lecture"
+
+msgctxt "#569"
+msgid "Comment"
+msgstr "Commentaire"
+
+msgctxt "#570"
+msgid "Date added"
+msgstr "Ajouté le"
+
+msgctxt "#571"
+msgid "Default"
+msgstr "Par défaut"
+
+msgctxt "#572"
+msgid "Studio"
+msgstr "Studio"
+
+msgctxt "#573"
+msgid "Path"
+msgstr "Chemin"
+
+msgctxt "#574"
+msgid "Country"
+msgstr "Pays"
+
+msgctxt "#575"
+msgid "In progress"
+msgstr "En cours"
+
+msgctxt "#576"
+msgid "Times played"
+msgstr "Nombre de lectures"
+
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Pris le"
+
+msgctxt "#580"
+msgid "Sort direction"
+msgstr "Direction du tri"
+
+msgctxt "#581"
+msgid "Sort method"
+msgstr "Méthode du tri"
+
+msgctxt "#582"
+msgid "View mode"
+msgstr "Mode d'affichage"
+
+msgctxt "#583"
+msgid "Remember views for different folders"
+msgstr "Mémoriser l'affichage des différents dossiers"
+
+msgctxt "#584"
+msgid "Ascending"
+msgstr "Croissant"
+
+msgctxt "#585"
+msgid "Descending"
+msgstr "Décroissant"
+
+msgctxt "#586"
+msgid "Edit playlist"
+msgstr "Modifier la liste de lecture"
+
+msgctxt "#587"
+msgid "Filter"
+msgstr "Filtrer"
+
+msgctxt "#588"
+msgid "Cancel party mode"
+msgstr "Annuler le mode fête"
+
+msgctxt "#589"
+msgid "Party mode"
+msgstr "Mode fête"
+
+msgctxt "#590"
+msgid "Random"
+msgstr "Aléatoire"
+
+msgctxt "#591"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#592"
+msgid "One"
+msgstr "Une fois"
+
+msgctxt "#593"
+msgid "All"
+msgstr "Tout"
+
+msgctxt "#594"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#595"
+msgid "Repeat: Off"
+msgstr "Répéter : arrêt"
+
+msgctxt "#596"
+msgid "Repeat: One"
+msgstr "Répéter : une fois"
+
+msgctxt "#597"
+msgid "Repeat: All"
+msgstr "Répéter : tout"
+
+msgctxt "#600"
+msgid "Rip audio CD"
+msgstr "Extraire le CD audio"
+
+msgctxt "#601"
+msgid "Medium"
+msgstr "Moyenne"
+
+msgctxt "#602"
+msgid "Standard"
+msgstr "Normal"
+
+msgctxt "#603"
+msgid "Extreme"
+msgstr "Extrême"
+
+msgctxt "#604"
+msgid "Constant bitrate"
+msgstr "Débit binaire constant"
+
+msgctxt "#605"
+msgid "Ripping..."
+msgstr "Extraction en cours..."
+
+msgctxt "#607"
+msgid "To:"
+msgstr "Vers :"
+
+msgctxt "#608"
+msgid "Could not rip CD or track"
+msgstr "Impossible d'extraire le CD ou la piste"
+
+msgctxt "#609"
+msgid "CDDARipPath is not set."
+msgstr "CDDARipPath (chemin d'extraction) n'est pas défini."
+
+msgctxt "#610"
+msgid "Rip audio track"
+msgstr "Extraire une piste audio"
+
+msgctxt "#611"
+msgid "Enter number"
+msgstr "Saisir le numéro"
+
+msgctxt "#612"
+msgid "Bits/sample"
+msgstr "Octets/échantillon"
+
+msgctxt "#613"
+msgid "Sample rate"
+msgstr "Fréquence d'échantillonnage"
+
+msgctxt "#614"
+msgid "Virtual folder"
+msgstr "Dossier virtuel"
+
+msgctxt "#620"
+msgid "Audio CDs"
+msgstr "CD audio"
+
+msgctxt "#621"
+msgid "Encoder"
+msgstr "Encodeur"
+
+msgctxt "#622"
+msgid "Quality"
+msgstr "Qualité"
+
+msgctxt "#623"
+msgid "Bitrate"
+msgstr "Débit binare"
+
+msgctxt "#624"
+msgid "Include track number"
+msgstr "Inclure le numéro de piste"
+
+msgctxt "#625"
+msgid "All songs of"
+msgstr "Toutes les chansons de"
+
+msgctxt "#626"
+msgid "In progress TV shows"
+msgstr "Émissions TV en cours"
+
+msgctxt "#629"
+msgid "View mode"
+msgstr "Mode d'affichage"
+
+msgctxt "#630"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#631"
+msgid "Zoom"
+msgstr "Zoom"
+
+msgctxt "#632"
+msgid "Stretch 4:3"
+msgstr "Étiré 4:3"
+
+msgctxt "#633"
+msgid "Wide Zoom"
+msgstr "Zoom élargi"
+
+msgctxt "#634"
+msgid "Stretch 16:9"
+msgstr "Étiré 16:9"
+
+msgctxt "#635"
+msgid "Original Size"
+msgstr "Taille originale"
+
+msgctxt "#636"
+msgid "Custom"
+msgstr "Personnalisé"
+
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "Normalisation - ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "Ajustements du volume de normalisation"
+
+msgctxt "#639"
+msgid "Use track levels"
+msgstr "Utiliser les niveaux des pistes"
+
+msgctxt "#640"
+msgid "Use album levels"
+msgstr "Utiliser les niveaux des albums"
+
+msgctxt "#641"
+msgid "PreAmp Level - ReplayGained files"
+msgstr "Niveau de préamplification - Fichiers normalisés"
+
+msgctxt "#642"
+msgid "PreAmp Level - Non ReplayGained files"
+msgstr "Niveau de préamplification - Fichiers non normalisés"
+
+msgctxt "#643"
+msgid "Avoid clipping on ReplayGained files"
+msgstr "Eviter la distorsion sur les fichiers normalisés"
+
+msgctxt "#644"
+msgid "Crop black bars"
+msgstr "Rogner les barres noires"
+
+msgctxt "#645"
+msgid "Need to unpack a big file. Continue?"
+msgstr "Besoin d'extraire un fichier volumineux. Continuer?"
+
+msgctxt "#646"
+msgid "Remove from library"
+msgstr "Retirer de la médiathèque"
+
+msgctxt "#647"
+msgid "Export video library"
+msgstr "Exporter la médiathèque vidéo"
+
+msgctxt "#648"
+msgid "Import video library"
+msgstr "Importer une médiathèque vidéo"
+
+msgctxt "#649"
+msgid "Importing"
+msgstr "Importation"
+
+msgctxt "#650"
+msgid "Exporting"
+msgstr "Exportation"
+
+msgctxt "#651"
+msgid "Browse for library"
+msgstr "Rechercher une médiathèque"
+
+msgctxt "#652"
+msgid "Years"
+msgstr "Années"
+
+msgctxt "#653"
+msgid "Update library"
+msgstr "Actualiser la médiathèque"
+
+msgctxt "#654"
+msgid "Show debug info"
+msgstr "Afficher les infos de débogage"
+
+msgctxt "#655"
+msgid "Browse for executable"
+msgstr "Recherche d'exécutable"
+
+msgctxt "#656"
+msgid "Browse for playlist"
+msgstr "Recherche d'une liste de lecture"
+
+msgctxt "#657"
+msgid "Browse for folder"
+msgstr "Recherche d'un dossier"
+
+msgctxt "#658"
+msgid "Song information"
+msgstr "Informations sur le morceau"
+
+msgctxt "#659"
+msgid "Non-linear stretch"
+msgstr "Étirement non-linéaire"
+
+msgctxt "#660"
+msgid "Volume amplification"
+msgstr "Amplification du volume"
+
+msgctxt "#661"
+msgid "Choose export folder"
+msgstr "Choisir le dossier d'exportation"
+
+msgctxt "#662"
+msgid "This file is no longer available."
+msgstr "Ce fichier n'est plus disponible."
+
+msgctxt "#663"
+msgid "Would you like to remove it from the library?"
+msgstr "Souhaitez-vous l'enlever de la médiathèque?"
+
+msgctxt "#664"
+msgid "Browse for Script"
+msgstr "Rechercher un script"
+
+msgctxt "#665"
+msgid "Compression level"
+msgstr "Niveau de compression"
+
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Journalisation bavarde..."
+
+msgctxt "#700"
+msgid "Cleaning up library"
+msgstr "Épurement de la médiathèque"
+
+msgctxt "#701"
+msgid "Removing old songs from the library"
+msgstr "Suppression des anciens morceaux de la médiathèque"
+
+msgctxt "#702"
+msgid "This path has been scanned before"
+msgstr "Ce dossier a été balayé"
+
+msgctxt "#705"
+msgid "Network"
+msgstr "Réseau"
+
+msgctxt "#706"
+msgid "Server"
+msgstr "Serveur"
+
+msgctxt "#708"
+msgid "Use an HTTP proxy server to access the internet"
+msgstr "Utiliser un serveur mandataire HTTP pour accéder à internet"
+
+msgctxt "#711"
+msgid "Internet Protocol (IP)"
+msgstr "Protocole internet (IP)"
+
+msgctxt "#712"
+msgid "Invalid port specified. Value must be between 1 and 65535."
+msgstr "Port spécifié invalide. Valeur entre 1 et 65535."
+
+msgctxt "#713"
+msgid "HTTP proxy"
+msgstr "Mandataire HTTP"
+
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Assignation"
+
+msgctxt "#716"
+msgid "Automatic (DHCP)"
+msgstr "Automatique (DHCP)"
+
+msgctxt "#717"
+msgid "Manual (Static)"
+msgstr "Manuelle (Statique)"
+
+msgctxt "#719"
+msgid "IP address"
+msgstr "Adresse IP"
+
+msgctxt "#720"
+msgid "Netmask"
+msgstr "Masque de sous réseau"
+
+msgctxt "#721"
+msgid "Default gateway"
+msgstr "Passerelle par défaut"
+
+msgctxt "#722"
+msgid "DNS server"
+msgstr "Serveur DNS"
+
+msgctxt "#723"
+msgid "Save & restart"
+msgstr "Enregistrer & redémarrer"
+
+msgctxt "#724"
+msgid "Invalid address specified. Value must be AAA.BBB.CCC.DDD"
+msgstr "Adresse spécifiée invalide. Respecter le format AAA.BBB.CCC.DDD"
+
+msgctxt "#725"
+msgid "with numbers between 0 and 255."
+msgstr "avec des nombres de 0 à 255."
+
+msgctxt "#726"
+msgid "Changes not saved. Continue without saving?"
+msgstr "Changements non enregistrés. Continuer sans les enregister?"
+
+msgctxt "#727"
+msgid "Web server"
+msgstr "Serveur Web"
+
+msgctxt "#728"
+msgid "FTP server"
+msgstr "Serveur FTP"
+
+msgctxt "#730"
+msgid "Port"
+msgstr "Port"
+
+msgctxt "#732"
+msgid "Save & apply"
+msgstr "Enregistrer & appliquer"
+
+msgctxt "#733"
+msgid "Password"
+msgstr "Mot de passe"
+
+msgctxt "#734"
+msgid "No pass"
+msgstr "Pas de mot de passe"
+
+msgctxt "#735"
+msgid "Character set"
+msgstr "Jeu de caractères"
+
+msgctxt "#736"
+msgid "Style"
+msgstr "Style"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "Couleur"
+
+msgctxt "#738"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#739"
+msgid "Bold"
+msgstr "Gras"
+
+msgctxt "#740"
+msgid "Italics"
+msgstr "Italique"
+
+msgctxt "#741"
+msgid "Bold italics"
+msgstr "Gras italique"
+
+msgctxt "#742"
+msgid "White"
+msgstr "Blanc"
+
+msgctxt "#743"
+msgid "Yellow"
+msgstr "Jaune"
+
+msgctxt "#744"
+msgid "Files"
+msgstr "Fichiers"
+
+msgctxt "#745"
+msgid "No scanned information for this view"
+msgstr "Aucune information récupérée pour cette vue"
+
+msgctxt "#746"
+msgid "Please turn off library mode"
+msgstr "Veuillez désactiver le mode médiathèque"
+
+msgctxt "#747"
+msgid "Error loading image"
+msgstr "Erreur lors du chargement de l'image"
+
+msgctxt "#748"
+msgid "Edit path"
+msgstr "Modifier le chemin"
+
+msgctxt "#749"
+msgid "Mirror image"
+msgstr "Image miroir"
+
+msgctxt "#750"
+msgid "Are you sure?"
+msgstr "Êtes-vous sûr?"
+
+msgctxt "#751"
+msgid "Removing source"
+msgstr "Suppression de la source"
+
+msgctxt "#754"
+msgid "Add program link"
+msgstr "Ajouter un lien de programme"
+
+msgctxt "#755"
+msgid "Edit program path"
+msgstr "Modifier le chemin du programme"
+
+msgctxt "#756"
+msgid "Edit program name"
+msgstr "Modifier le nom du programme"
+
+msgctxt "#757"
+msgid "Edit path depth"
+msgstr "Modifier la profondeur du chemin"
+
+msgctxt "#759"
+msgid "View: Big list"
+msgstr "Vue : grande liste"
+
+msgctxt "#760"
+msgid "Yellow"
+msgstr "Jaune"
+
+msgctxt "#761"
+msgid "White"
+msgstr "Blanc"
+
+msgctxt "#762"
+msgid "Blue"
+msgstr "Bleu"
+
+msgctxt "#763"
+msgid "Bright green"
+msgstr "Vert vif"
+
+msgctxt "#764"
+msgid "Yellow green"
+msgstr "Vert jaune"
+
+msgctxt "#765"
+msgid "Cyan"
+msgstr "Cyan"
+
+msgctxt "#766"
+msgid "Light grey"
+msgstr "Gris clair"
+
+msgctxt "#767"
+msgid "Grey"
+msgstr "Gris"
+
+msgctxt "#770"
+msgid "Error %i: share not available"
+msgstr "Erreur %i : partage non disponible"
+
+msgctxt "#772"
+msgid "Audio output"
+msgstr "Sortie audio"
+
+msgctxt "#773"
+msgid "Seeking"
+msgstr "Recherche"
+
+msgctxt "#774"
+msgid "Slideshow folder"
+msgstr "Répertoire du diaporama"
+
+msgctxt "#775"
+msgid "Network interface"
+msgstr "Interface réseau"
+
+msgctxt "#776"
+msgid "Wireless network name (ESSID)"
+msgstr "Nom du réseau sans fil (ESSID)"
+
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Mot de passe Wi-Fi"
+
+msgctxt "#778"
+msgid "Wireless security"
+msgstr "Sécurité Wi-Fi"
+
+msgctxt "#779"
+msgid "Save and apply network interface settings"
+msgstr "Sauvegarder et appliquer les paramètres de l'interface réseau"
+
+msgctxt "#780"
+msgid "No encryption"
+msgstr "Aucun chiffrage"
+
+msgctxt "#781"
+msgid "WEP"
+msgstr "WEP"
+
+msgctxt "#782"
+msgid "WPA"
+msgstr "WPA"
+
+msgctxt "#783"
+msgid "WPA2"
+msgstr "WPA2"
+
+msgctxt "#784"
+msgid "Applying network interface settings. Please wait."
+msgstr "Application des paramètres de l'interface réseau. Veuillez patienter."
+
+msgctxt "#785"
+msgid "Network interface restarted successfully."
+msgstr "Réinitialisation réussie de l'interface réseau."
+
+msgctxt "#786"
+msgid "Network interface did not start successfully."
+msgstr "Erreur de démarrage de l'interface réseau."
+
+msgctxt "#787"
+msgid "Interface disabled"
+msgstr "Interface désactivée"
+
+msgctxt "#788"
+msgid "Network interface disabled successfully."
+msgstr "Désactivation réussie de l'interface réseau."
+
+msgctxt "#789"
+msgid "Wireless network name (ESSID)"
+msgstr "Nom du réseau sans fil (ESSID)"
+
+msgctxt "#790"
+msgid "Remote control"
+msgstr "Télécommande"
+
+msgctxt "#791"
+msgid "Allow programs on this system to control XBMC"
+msgstr "Autoriser le contrôle de XBMC par des programmes locaux"
+
+msgctxt "#792"
+msgid "Port"
+msgstr "Port"
+
+msgctxt "#793"
+msgid "Port range"
+msgstr "Plage des port"
+
+msgctxt "#794"
+msgid "Allow programs on other systems to control XBMC"
+msgstr "Autoriser le contrôle de XBMC par des programmes distants"
+
+msgctxt "#795"
+msgid "Initial repeat delay (ms)"
+msgstr "Délai de répétition initial (ms)"
+
+msgctxt "#796"
+msgid "Continuous repeat delay (ms)"
+msgstr "Délai de répétition continue (ms)"
+
+msgctxt "#797"
+msgid "Maximum number of clients"
+msgstr "Nombre maximum de clients"
+
+msgctxt "#798"
+msgid "Internet access"
+msgstr "Accès internet"
+
+msgctxt "#799"
+msgid "Library Update"
+msgstr "Mise-à-jour de la médiathèque"
+
+msgctxt "#800"
+msgid "Music library needs to rescan tags from files."
+msgstr "La médiathèque doit à nouveau obtenir les balises à partir des fichiers."
+
+msgctxt "#801"
+msgid "Would you like to scan now?"
+msgstr "Voudriez-vous balayer maintenant?"
+
+msgctxt "#850"
+msgid "Invalid port number entered"
+msgstr "Numéro de port saisi invalide"
+
+msgctxt "#851"
+msgid "Valid port range is 1-65535"
+msgstr "Plage valide de port entre 1-65535"
+
+msgctxt "#852"
+msgid "Valid port range is 1024-65535"
+msgstr "Plage valide de port entre 1024-65535"
+
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "Ajouter des images..."
+
+msgctxt "#998"
+msgid "Add Music..."
+msgstr "Ajouter une source audio..."
+
+msgctxt "#999"
+msgid "Add Videos..."
+msgstr "Ajouter une source vidéo..."
+
+msgctxt "#1000"
+msgid "Preview"
+msgstr "Prévisualisation"
+
+msgctxt "#1001"
+msgid "Unable to connect"
+msgstr "Impossible de se connecter"
+
+msgctxt "#1002"
+msgid "XBMC was unable to connect to the network location."
+msgstr "XBMC n'a pas pu se connecter à l'emplacement réseau."
+
+msgctxt "#1003"
+msgid "This could be due to the network not being connected."
+msgstr "Ceci provient peut-être de la déconnexion du réseau."
+
+msgctxt "#1004"
+msgid "Would you like to add it anyway?"
+msgstr "Désirez-vous tout de même l'ajouter?"
+
+msgctxt "#1006"
+msgid "IP address"
+msgstr "Adresse IP"
+
+msgctxt "#1007"
+msgid "Add network location"
+msgstr "Ajouter un emplacement réseau"
+
+msgctxt "#1008"
+msgid "Protocol"
+msgstr "Protocole"
+
+msgctxt "#1009"
+msgid "Server address"
+msgstr "Adresse du serveur"
+
+msgctxt "#1010"
+msgid "Server name"
+msgstr "Nom du serveur"
+
+msgctxt "#1011"
+msgid "Remote path"
+msgstr "Chemin cible"
+
+msgctxt "#1012"
+msgid "Shared folder"
+msgstr "Dossier partagé"
+
+msgctxt "#1013"
+msgid "Port"
+msgstr "Port"
+
+msgctxt "#1014"
+msgid "Username"
+msgstr "Utilisateur"
+
+msgctxt "#1015"
+msgid "Browse for network server"
+msgstr "Rechercher un serveur réseau"
+
+msgctxt "#1016"
+msgid "Enter the network address of the server"
+msgstr "Indiquer l'adresse réseau du serveur"
+
+msgctxt "#1017"
+msgid "Enter the path on the server"
+msgstr "Saisir le chemin sur le serveur"
+
+msgctxt "#1018"
+msgid "Enter the port number"
+msgstr "Saisir le numéro du port"
+
+msgctxt "#1019"
+msgid "Enter the username"
+msgstr "Saisir le nom d'utilisateur"
+
+msgctxt "#1020"
+msgid "Add %s source"
+msgstr "Ajouter une source %s"
+
+msgctxt "#1021"
+msgid "Enter the paths or browse for the media locations."
+msgstr "Saisir  les chemins ou rechercher des emplacements de médias"
+
+msgctxt "#1022"
+msgid "Enter a name for this media Source."
+msgstr "Saisir un nom pour cette source."
+
+msgctxt "#1023"
+msgid "Browse for new share"
+msgstr "Rechercher un nouveau partage"
+
+msgctxt "#1024"
+msgid "Browse"
+msgstr "Parcourir"
+
+msgctxt "#1025"
+msgid "Could not retrieve directory information."
+msgstr "Impossible de récupérer les informations du dossier."
+
+msgctxt "#1026"
+msgid "Add source"
+msgstr "Ajouter une source"
+
+msgctxt "#1027"
+msgid "Edit source"
+msgstr "Modifier la source"
+
+msgctxt "#1028"
+msgid "Edit %s source"
+msgstr "Modifier la source %s"
+
+msgctxt "#1029"
+msgid "Enter the new label"
+msgstr "Saisir le nouveau label"
+
+msgctxt "#1030"
+msgid "Browse for image"
+msgstr "Recherche d'image"
+
+msgctxt "#1031"
+msgid "Browse for image folder"
+msgstr "Recherche d'un dossier d'images"
+
+msgctxt "#1032"
+msgid "Add network location..."
+msgstr "Ajouter un emplacement réseau..."
+
+msgctxt "#1033"
+msgid "Browse for file"
+msgstr "Recherche d'un fichier"
+
+msgctxt "#1034"
+msgid "Submenu"
+msgstr "Sous-menu"
+
+msgctxt "#1035"
+msgid "Enable submenu buttons"
+msgstr "Activer les boutons du sous-menu"
+
+msgctxt "#1036"
+msgid "Favourites"
+msgstr "Favoris"
+
+msgctxt "#1037"
+msgid "Video Add-ons"
+msgstr "Extensions Vidéo"
+
+msgctxt "#1038"
+msgid "Music Add-ons"
+msgstr "Extensions Musique"
+
+msgctxt "#1039"
+msgid "Picture Add-ons"
+msgstr "Extensions Image"
+
+msgctxt "#1040"
+msgid "Loading directory"
+msgstr "Chargement du dossier"
+
+msgctxt "#1041"
+msgid "Retrieved %i items"
+msgstr "%i objets récupérés"
+
+msgctxt "#1042"
+msgid "Retrieved %i of %i items"
+msgstr "%i objets récupérés sur %i"
+
+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"
+
+msgctxt "#1046"
+msgid "Access points"
+msgstr "Points d'accès"
+
+msgctxt "#1047"
+msgid "Other..."
+msgstr "Autre..."
+
+msgctxt "#1048"
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+msgctxt "#1049"
+msgid "Script settings"
+msgstr "Paramètres du Script"
+
+msgctxt "#1050"
+msgid "Singles"
+msgstr "Simples"
+
+msgctxt "#1051"
+msgid "Enter web address"
+msgstr "Saisir une adresse web"
+
+msgctxt "#1180"
+msgid "Proxy type"
+msgstr "Type de mandataire"
+
+msgctxt "#1181"
+msgid "HTTP"
+msgstr "HTTP"
+
+msgctxt "#1182"
+msgid "SOCKS4"
+msgstr "SOCKS4"
+
+msgctxt "#1183"
+msgid "SOCKS4A"
+msgstr "SOCKS4A"
+
+msgctxt "#1184"
+msgid "SOCKS5"
+msgstr "SOCKS5"
+
+msgctxt "#1185"
+msgid "SOCKS5 with remote dns resolving"
+msgstr "SOCKS5 avec résolution DNS à distance"
+
+msgctxt "#1200"
+msgid "SMB client"
+msgstr "Client SMB"
+
+msgctxt "#1202"
+msgid "Workgroup"
+msgstr "Groupe de travail"
+
+msgctxt "#1203"
+msgid "Default username"
+msgstr "Nom d'utilisateur par défaut"
+
+msgctxt "#1204"
+msgid "Default password"
+msgstr "Mot de passe par défaut"
+
+msgctxt "#1207"
+msgid "WINS server"
+msgstr "Serveur WINS"
+
+msgctxt "#1208"
+msgid "Mount SMB shares"
+msgstr "Monter les partages SMB"
+
+msgctxt "#1210"
+msgid "Remove"
+msgstr "Enlever"
+
+msgctxt "#1211"
+msgid "Music"
+msgstr "Musique"
+
+msgctxt "#1212"
+msgid "Video"
+msgstr "Vidéo"
+
+msgctxt "#1213"
+msgid "Pictures"
+msgstr "Images"
+
+msgctxt "#1214"
+msgid "Files"
+msgstr "Fichiers"
+
+msgctxt "#1215"
+msgid "Music & video "
+msgstr "Musique & vidéos"
+
+msgctxt "#1216"
+msgid "Music & pictures"
+msgstr "Musique & images"
+
+msgctxt "#1217"
+msgid "Music & files"
+msgstr "Musique & fichiers"
+
+msgctxt "#1218"
+msgid "Video & pictures"
+msgstr "Vidéos & images"
+
+msgctxt "#1219"
+msgid "Video & files"
+msgstr "Vidéos & fichiers"
+
+msgctxt "#1220"
+msgid "Pictures & files"
+msgstr "Images & fichiers"
+
+msgctxt "#1221"
+msgid "Music & video & pictures"
+msgstr "Musique & vidéos & images"
+
+msgctxt "#1222"
+msgid "Music & video & pictures & files"
+msgstr "Musique & vidéos & images & fichiers"
+
+msgctxt "#1223"
+msgid "Disabled"
+msgstr "Désactivé"
+
+msgctxt "#1226"
+msgid "Files & music & video"
+msgstr "Fichiers & musique & vidéos"
+
+msgctxt "#1227"
+msgid "Files & pictures & music"
+msgstr "Fichiers & images & musique"
+
+msgctxt "#1228"
+msgid "Files & pictures & video"
+msgstr "Fichiers & images & vidéos"
+
+msgctxt "#1229"
+msgid "Music & programs"
+msgstr "Musique & programmes"
+
+msgctxt "#1230"
+msgid "Video & programs"
+msgstr "Vidéos & programmes"
+
+msgctxt "#1231"
+msgid "Pictures & programs"
+msgstr "Images & programmes"
+
+msgctxt "#1232"
+msgid "Music & video & pictures & programs"
+msgstr "Musique & vidéos & images & programmes"
+
+msgctxt "#1233"
+msgid "Programs & video & music"
+msgstr "Programmes & vidéos & musique"
+
+msgctxt "#1234"
+msgid "Programs & pictures & music"
+msgstr "Programmes & images & musique"
+
+msgctxt "#1235"
+msgid "Programs & pictures & video"
+msgstr "Programmes & images & vidéos"
+
+msgctxt "#1259"
+msgid "Zeroconf"
+msgstr "Zeroconf"
+
+msgctxt "#1260"
+msgid "Announce these services to other systems via Zeroconf"
+msgstr "Annoncer ces services aux autres systèmes via Zeroconf"
+
+msgctxt "#1269"
+msgid "Allow volume control"
+msgstr "Autoriser le contrôle du volume"
+
+msgctxt "#1270"
+msgid "Allow XBMC to receive AirPlay content"
+msgstr "Permettre à XBMC de recevoir du contenu AirPlay"
+
+msgctxt "#1271"
+msgid "Device name"
+msgstr "Nom du périphérique"
+
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Utiliser une protection par mot de passe"
+
+msgctxt "#1273"
+msgid "AirPlay"
+msgstr "AirPlay"
+
+msgctxt "#1274"
+msgid "AirTunes"
+msgstr "AirTunes"
+
+msgctxt "#1275"
+msgid "Filter %s"
+msgstr "Filtrer %s"
+
+msgctxt "#1300"
+msgid "Custom audio device"
+msgstr "Périphérique audio personnalisé"
+
+msgctxt "#1301"
+msgid "Custom passthrough device"
+msgstr "Périphérique passthrough personnalisée"
+
+msgctxt "#1396"
+msgid "Drifting"
+msgstr "Dérivation"
+
+msgctxt "#1397"
+msgid "and"
+msgstr "et"
+
+msgctxt "#1398"
+msgid "Freezing"
+msgstr "Gel"
+
+msgctxt "#1399"
+msgid "Late"
+msgstr "Tard"
+
+msgctxt "#1400"
+msgid "Isolated"
+msgstr "Isolé(e)"
+
+msgctxt "#1401"
+msgid "Thundershowers"
+msgstr "Orages"
+
+msgctxt "#1402"
+msgid "Thunder"
+msgstr "Tonnerre"
+
+msgctxt "#1403"
+msgid "Sun"
+msgstr "Soleil"
+
+msgctxt "#1404"
+msgid "Heavy"
+msgstr "important(e)(s)"
+
+msgctxt "#1405"
+msgid "in"
+msgstr "dans"
+
+msgctxt "#1406"
+msgid "the"
+msgstr "la"
+
+msgctxt "#1407"
+msgid "Vicinity"
+msgstr "environs"
+
+msgctxt "#1408"
+msgid "Ice"
+msgstr "Glace"
+
+msgctxt "#1409"
+msgid "Crystals"
+msgstr "Cristaux"
+
+msgctxt "#1410"
+msgid "Calm"
+msgstr "Calme"
+
+msgctxt "#1411"
+msgid "with"
+msgstr "avec"
+
+msgctxt "#1412"
+msgid "windy"
+msgstr "venteux"
+
+msgctxt "#1413"
+msgid "Patches"
+msgstr "Parcelles"
+
+msgctxt "#1414"
+msgid "Thunderstorm"
+msgstr "Orage"
+
+msgctxt "#1415"
+msgid "Drizzle"
+msgstr "Bruine"
+
+msgctxt "#1416"
+msgid "Foggy"
+msgstr "Brumeux"
+
+msgctxt "#1417"
+msgid "Grains"
+msgstr "Grains"
+
+msgctxt "#1418"
+msgid "Thunderstorms"
+msgstr "Orages"
+
+msgctxt "#1419"
+msgid "Shallow"
+msgstr "Léger"
+
+msgctxt "#1420"
+msgid "Moderate"
+msgstr "Modéré"
+
+msgctxt "#1421"
+msgid "Very High"
+msgstr "Très fort"
+
+msgctxt "#1422"
+msgid "Windy"
+msgstr "Venteux"
+
+msgctxt "#1423"
+msgid "Mist"
+msgstr "Brume"
+
+msgctxt "#1424"
+msgid "Overcast"
+msgstr "Couvert"
+
+msgctxt "#1425"
+msgid "Pellets"
+msgstr "Granules"
+
+msgctxt "#1426"
+msgid "Hail"
+msgstr "Grêle"
+
+msgctxt "#1427"
+msgid "Smoke"
+msgstr "Fumée"
+
+msgctxt "#1428"
+msgid "Volcanic"
+msgstr "Volcanique"
+
+msgctxt "#1429"
+msgid "Ash"
+msgstr "Cendre"
+
+msgctxt "#1430"
+msgid "Widespread"
+msgstr "Répandu"
+
+msgctxt "#1431"
+msgid "Dust"
+msgstr "Poussière"
+
+msgctxt "#1432"
+msgid "Sand"
+msgstr "Sable"
+
+msgctxt "#1433"
+msgid "Spray"
+msgstr "Gouttelettes"
+
+msgctxt "#1434"
+msgid "Whirls"
+msgstr "Tourbillons"
+
+msgctxt "#1435"
+msgid "Sandstorm"
+msgstr "Tempête de sable"
+
+msgctxt "#1436"
+msgid "Blowing"
+msgstr "Soufflant"
+
+msgctxt "#1437"
+msgid "Pellet"
+msgstr "Granule"
+
+msgctxt "#1438"
+msgid "Small"
+msgstr "Petit"
+
+msgctxt "#1439"
+msgid "and"
+msgstr "et"
+
+msgctxt "#1440"
+msgid "Sleet"
+msgstr "Neige fondue"
+
+msgctxt "#1441"
+msgid "with"
+msgstr "avec"
+
+msgctxt "#1442"
+msgid "Chance"
+msgstr "Risque"
+
+msgctxt "#1443"
+msgid "of"
+msgstr "de"
+
+msgctxt "#1444"
+msgid "Funnel"
+msgstr "Entonnoir"
+
+msgctxt "#1445"
+msgid "Cloud"
+msgstr "Nuage"
+
+msgctxt "#1446"
+msgid "Unknown"
+msgstr "Inconnu"
+
+msgctxt "#1447"
+msgid "Squals"
+msgstr "Rafales"
+
+msgctxt "#1448"
+msgid "Precipitation"
+msgstr "Précipitation"
+
+msgctxt "#1449"
+msgid "Partial"
+msgstr "Partiel"
+
+msgctxt "#1450"
+msgid "Put display to sleep when idle"
+msgstr "Mettre l'écran en veille en cas d'inactivité"
+
+msgctxt "#2050"
+msgid "Runtime"
+msgstr "Durée"
+
+msgctxt "#2080"
+msgid "Empty list"
+msgstr "Liste vide"
+
+msgctxt "#2081"
+msgid "Went back to parent list because the active list has been emptied"
+msgstr "Retour à la liste parente car la liste active a été vidée"
+
+msgctxt "#2100"
+msgid "Script failed! : %s"
+msgstr "Échec du script! : %s"
+
+msgctxt "#2101"
+msgid "Newer version needed - See log"
+msgstr "Nouvelle version requise - Voir le journal"
+
+msgctxt "#10000"
+msgid "Home"
+msgstr "Accueil"
+
+msgctxt "#10001"
+msgid "Programs"
+msgstr "Programmes"
+
+msgctxt "#10002"
+msgid "Pictures"
+msgstr "Images"
+
+msgctxt "#10003"
+msgid "File manager"
+msgstr "Fichiers"
+
+msgctxt "#10004"
+msgid "Settings"
+msgstr "Paramètres"
+
+msgctxt "#10005"
+msgid "Music"
+msgstr "Musique"
+
+msgctxt "#10006"
+msgid "Videos"
+msgstr "Vidéos"
+
+msgctxt "#10007"
+msgid "System information"
+msgstr "Informations du système"
+
+msgctxt "#10008"
+msgid "Settings - General"
+msgstr "Paramètres - Général"
+
+msgctxt "#10009"
+msgid "Settings - Screen"
+msgstr "Paramètres - Écran"
+
+msgctxt "#10010"
+msgid "Settings - Appearance - GUI Calibration"
+msgstr "Paramètres - Apparence - Calibration de l'interface utilsateur"
+
+msgctxt "#10011"
+msgid "Settings - Videos - Screen Calibration"
+msgstr "Paramètres - Vidéos - Calibration de l'écran"
+
+msgctxt "#10012"
+msgid "Settings - Pictures"
+msgstr "Paramètres - Images"
+
+msgctxt "#10013"
+msgid "Settings - Programs"
+msgstr "Paramètres - Programmes"
+
+msgctxt "#10014"
+msgid "Settings - Weather"
+msgstr "Paramètres - Météo"
+
+msgctxt "#10015"
+msgid "Settings - Music"
+msgstr "Paramètres - Musique"
+
+msgctxt "#10016"
+msgid "Settings - System"
+msgstr "Paramètres - Système"
+
+msgctxt "#10017"
+msgid "Settings - Videos"
+msgstr "Paramètres - Vidéos"
+
+msgctxt "#10018"
+msgid "Settings - Network"
+msgstr "Paramètres - Réseau"
+
+msgctxt "#10019"
+msgid "Settings - Appearance"
+msgstr "Paramètres - Apparence"
+
+msgctxt "#10020"
+msgid "Scripts"
+msgstr "Scripts"
+
+msgctxt "#10021"
+msgid "Web Browser"
+msgstr "Navigateur Web"
+
+msgctxt "#10025"
+msgid "Videos"
+msgstr "Vidéos"
+
+msgctxt "#10028"
+msgid "Videos/Playlist"
+msgstr "Vidéos/Liste de lecture"
+
+msgctxt "#10029"
+msgid "Login screen"
+msgstr "Écran de connexion"
+
+msgctxt "#10034"
+msgid "Settings - Profiles"
+msgstr "Paramètres - Profils"
+
+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?"
+
+msgctxt "#10043"
+msgid "Help"
+msgstr "Aide"
+
+msgctxt "#10044"
+msgid "No help available"
+msgstr "Aucune 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"
+
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "Boîte de dialogue Progression"
+
+msgctxt "#10126"
+msgid "File browser"
+msgstr "Gestionnaire de fichiers"
+
+msgctxt "#10128"
+msgid "Network setup"
+msgstr "Configuration du réseau"
+
+msgctxt "#10129"
+msgid "Media source"
+msgstr "Source des médias"
+
+msgctxt "#10130"
+msgid "Profile settings"
+msgstr "Paramètres du profil"
+
+msgctxt "#10131"
+msgid "Lock settings"
+msgstr "Paramètres de verrouillage"
+
+msgctxt "#10132"
+msgid "Content settings"
+msgstr "Paramètres du contenu"
+
+msgctxt "#10134"
+msgid "Favourites"
+msgstr "Favoris"
+
+msgctxt "#10135"
+msgid "Songs/Info"
+msgstr "MorceauX/info"
+
+msgctxt "#10136"
+msgid "Smart playlist editor"
+msgstr "Éditeur de listes de lecture intelligentes"
+
+msgctxt "#10137"
+msgid "Smart playlist rule editor"
+msgstr "Éditeur de règles de listes de lecture intelligentes"
+
+msgctxt "#10139"
+msgid "Pictures/Info"
+msgstr "Images/info"
+
+msgctxt "#10140"
+msgid "Add-on settings"
+msgstr "Paramètres de l'extension"
+
+msgctxt "#10146"
+msgid "Add-ons/Info"
+msgstr "Extensions/info"
+
+msgctxt "#10210"
+msgid "Looking for subtitles..."
+msgstr "Recherche de sous-titres..."
+
+msgctxt "#10211"
+msgid "Looking for or caching subtitles..."
+msgstr "Recherche ou mise en cache de sous-titres..."
+
+msgctxt "#10212"
+msgid "terminating"
+msgstr "finalisation"
+
+msgctxt "#10213"
+msgid "buffering"
+msgstr "tamponnage"
+
+msgctxt "#10214"
+msgid "Opening stream"
+msgstr "Ouverture du flux"
+
+msgctxt "#10500"
+msgid "Music/Playlist"
+msgstr "Musique/Liste de lecture"
+
+msgctxt "#10501"
+msgid "Music/Files"
+msgstr "Musique/Fichiers"
+
+msgctxt "#10502"
+msgid "Music/Library"
+msgstr "Musique/Médiathèque"
+
+msgctxt "#10503"
+msgid "Playlist editor"
+msgstr "Éditeur de liste de lecture"
+
+msgctxt "#10504"
+msgid "Top 100 songs"
+msgstr "Les 100 1ers morceaux"
+
+msgctxt "#10505"
+msgid "Top 100 albums"
+msgstr "Les 100 1ers albums"
+
+msgctxt "#10506"
+msgid "Programs"
+msgstr "Programmes"
+
+msgctxt "#10507"
+msgid "Configuration"
+msgstr "Configuration"
+
+msgctxt "#10508"
+msgid "Weather forecast"
+msgstr "Prévisions météo"
+
+msgctxt "#10509"
+msgid "Network gaming"
+msgstr "Jeux en réseau"
+
+msgctxt "#10510"
+msgid "Extensions"
+msgstr "Extensions"
+
+msgctxt "#10511"
+msgid "System info"
+msgstr "Informations du système"
+
+msgctxt "#10516"
+msgid "Music - Library"
+msgstr "Musique - Médiathèque"
+
+msgctxt "#10517"
+msgid "Now Playing - Music"
+msgstr "Lecture en cours - Musique"
+
+msgctxt "#10522"
+msgid "Now Playing - Videos"
+msgstr "Lecture en cours - Vidéos"
+
+msgctxt "#10523"
+msgid "Album info"
+msgstr "Informations de l'album"
+
+msgctxt "#10524"
+msgid "Movie info"
+msgstr "Informations du film"
+
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "Boîte de dialogue Sélection"
+
+msgctxt "#12001"
+msgid "Music/Info"
+msgstr "Musique/info"
+
+msgctxt "#12002"
+msgid "Dialogue OK"
+msgstr "Boîte de dialogue OK"
+
+msgctxt "#12003"
+msgid "Videos/Info"
+msgstr "Vidéos/Info"
+
+msgctxt "#12004"
+msgid "Scripts/Info"
+msgstr "Scripts/Info"
+
+msgctxt "#12005"
+msgid "Fullscreen video"
+msgstr "Vidéo plein écran"
+
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "Visualisation audio"
+
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr "Boîte de dialogue Empilement des fichiers"
+
+msgctxt "#12009"
+msgid "Rebuild index..."
+msgstr "Reconstruire l'index..."
+
+msgctxt "#12010"
+msgid "Return to music window"
+msgstr "Revenir à la fenêtre musique"
+
+msgctxt "#12011"
+msgid "Return to videos window"
+msgstr "Revenir à la fenêtre vidéos"
+
+msgctxt "#12021"
+msgid "Start from beginning"
+msgstr "Commencer depuis le début"
+
+msgctxt "#12022"
+msgid "Resume from %s"
+msgstr "Reprendre depuis %s"
+
+msgctxt "#12310"
+msgid "0"
+msgstr "0"
+
+msgctxt "#12311"
+msgid "1"
+msgstr "1"
+
+msgctxt "#12312"
+msgid "2"
+msgstr "2"
+
+msgctxt "#12313"
+msgid "3"
+msgstr "3"
+
+msgctxt "#12314"
+msgid "4"
+msgstr "4"
+
+msgctxt "#12315"
+msgid "5"
+msgstr "5"
+
+msgctxt "#12316"
+msgid "6"
+msgstr "6"
+
+msgctxt "#12317"
+msgid "7"
+msgstr "7"
+
+msgctxt "#12318"
+msgid "8"
+msgstr "8"
+
+msgctxt "#12319"
+msgid "9"
+msgstr "9"
+
+msgctxt "#12320"
+msgid "c"
+msgstr "c"
+
+msgctxt "#12321"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "#12322"
+msgid "*"
+msgstr "*"
+
+msgctxt "#12325"
+msgid "Locked! Enter code..."
+msgstr "Verrouillé! Sasir le code..."
+
+msgctxt "#12326"
+msgid "Enter password"
+msgstr "Sasir le mot de passe"
+
+msgctxt "#12327"
+msgid "Enter master code"
+msgstr "Saisir le code maître"
+
+msgctxt "#12328"
+msgid "Enter unlock code"
+msgstr "Saisir le code de déverrouillage"
+
+msgctxt "#12329"
+msgid "or press C to cancel"
+msgstr "ou appuyez sur C pour annuler"
+
+msgctxt "#12330"
+msgid "Enter gamepad button combo and"
+msgstr "Sasir la combinaison de boutons de la manette de jeu et"
+
+msgctxt "#12331"
+msgid "press OK, or Back to cancel"
+msgstr "appuyer sur OK, ou Retour pour annuler"
+
+msgctxt "#12332"
+msgid "Set lock"
+msgstr "Verrouiller"
+
+msgctxt "#12333"
+msgid "Unlock"
+msgstr "Déverrouiller"
+
+msgctxt "#12334"
+msgid "Reset lock"
+msgstr "Réinitialiser le verrouillage"
+
+msgctxt "#12335"
+msgid "Remove lock"
+msgstr "Désactiver le verrouillage"
+
+msgctxt "#12337"
+msgid "Numeric password"
+msgstr "Mot de passe numérique"
+
+msgctxt "#12338"
+msgid "Gamepad button combo"
+msgstr "Combinaison de boutons de la manette de jeu"
+
+msgctxt "#12339"
+msgid "Full-text password"
+msgstr "Mot de passe en texte intégral"
+
+msgctxt "#12340"
+msgid "Enter new password"
+msgstr "Saisir un nouveau mot de passe"
+
+msgctxt "#12341"
+msgid "Re-Enter new password"
+msgstr "Saisir à nouveau le mot de passe"
+
+msgctxt "#12342"
+msgid "Incorrect password,"
+msgstr "Mot de passe erroné,"
+
+msgctxt "#12343"
+msgid "retries left "
+msgstr "essais restants"
+
+msgctxt "#12344"
+msgid "Passwords entered did not match."
+msgstr "Les mots de passe saisis ne correspondent pas."
+
+msgctxt "#12345"
+msgid "Access denied"
+msgstr "Accès refusé"
+
+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 "Élément verrouillé"
+
+msgctxt "#12349"
+msgid "Updating video library art"
+msgstr "Mise à jour des illustrations de la médiathèque vidéo"
+
+msgctxt "#12350"
+msgid "Processing %s"
+msgstr "Traitement de %s"
+
+msgctxt "#12351"
+msgid "The art cache in your video library needs updating."
+msgstr "Besoin de mise à jour du cache des illustrations de la médiathèque vidéo."
+
+msgctxt "#12352"
+msgid "No downloading is needed."
+msgstr "Aucun téléchargement nécessaire"
+
+msgctxt "#12353"
+msgid "Reactivate lock"
+msgstr "Ré-activer le verrouillage"
+
+msgctxt "#12354"
+msgid "Would you like to update it now?"
+msgstr "Voulez-vous mettre à jour maintenant?"
+
+msgctxt "#12356"
+msgid "Change lock"
+msgstr "Changer le verrouillage"
+
+msgctxt "#12357"
+msgid "Source lock"
+msgstr "Verrouillage source"
+
+msgctxt "#12358"
+msgid "Password entry was blank. Try again."
+msgstr "Le mot de passe était vide. Ressayer."
+
+msgctxt "#12360"
+msgid "Master lock"
+msgstr "Verrouillage maître"
+
+msgctxt "#12362"
+msgid "Shutdown system if Master Lock retries exceeded"
+msgstr "Éteindre le système après trop de tentatives de verrouillage maître"
+
+msgctxt "#12367"
+msgid "Master code is not valid"
+msgstr "Le code maître est invalide"
+
+msgctxt "#12368"
+msgid "Please enter a valid master code"
+msgstr "Veuilez sasisr un code maître valide"
+
+msgctxt "#12373"
+msgid "Settings & file manager"
+msgstr "Paramètres & gestionnaire de fichiers"
+
+msgctxt "#12376"
+msgid "Set as default for all videos"
+msgstr "Définir par défaut pour toutes les vidéos"
+
+msgctxt "#12377"
+msgid "This will reset any previously saved values"
+msgstr "Ceci réinitialisera toute valeur précedente sauvegardée"
+
+msgctxt "#12378"
+msgid "Amount of time to display each image"
+msgstr "Durée d'affichage de chaque image"
+
+msgctxt "#12379"
+msgid "Use pan and zoom effects"
+msgstr "Utiliser les effets panoramique et zoom"
+
+msgctxt "#12383"
+msgid "12 hour clock"
+msgstr "Horloge 12 heures"
+
+msgctxt "#12384"
+msgid "24 hour clock"
+msgstr "Horloge 24 heures"
+
+msgctxt "#12385"
+msgid "Day/Month"
+msgstr "Jour/Mois"
+
+msgctxt "#12386"
+msgid "Month/Day"
+msgstr "Mois/Jour"
+
+msgctxt "#12390"
+msgid "System uptime"
+msgstr "Durée de fonctionnement du système"
+
+msgctxt "#12391"
+msgid "Minutes"
+msgstr "Minutes"
+
+msgctxt "#12392"
+msgid "Hours"
+msgstr "Heures"
+
+msgctxt "#12393"
+msgid "Days"
+msgstr "Jours"
+
+msgctxt "#12394"
+msgid "Total uptime"
+msgstr "Durée de fonctionnement totale "
+
+msgctxt "#12395"
+msgid "Battery level"
+msgstr "Niveau de batterie"
+
+msgctxt "#12600"
+msgid "Weather"
+msgstr "Météo"
+
+msgctxt "#12900"
+msgid "Screensaver"
+msgstr "Économiseur d'écran"
+
+msgctxt "#12901"
+msgid "Fullscreen OSD"
+msgstr "Affichage à l'écran en plein écran"
+
+msgctxt "#13000"
+msgid "System"
+msgstr "Système"
+
+msgctxt "#13001"
+msgid "Immediate HD spindown"
+msgstr "Arrêt immédiat du DD"
+
+msgctxt "#13002"
+msgid "Video only"
+msgstr "Vidéo seulement"
+
+msgctxt "#13003"
+msgid "- Delay"
+msgstr "- Délai"
+
+msgctxt "#13004"
+msgid "- Minimum file duration"
+msgstr "- Durée minimale du fichier"
+
+msgctxt "#13005"
+msgid "Shutdown"
+msgstr "Éteindre"
+
+msgctxt "#13008"
+msgid "Shutdown function"
+msgstr "Fonction d'extinction"
+
+msgctxt "#13009"
+msgid "Quit"
+msgstr "Quitter"
+
+msgctxt "#13010"
+msgid "Hibernate"
+msgstr "Mettre en veille"
+
+msgctxt "#13011"
+msgid "Suspend"
+msgstr "Suspendre"
+
+msgctxt "#13012"
+msgid "Exit"
+msgstr "Quitter"
+
+msgctxt "#13013"
+msgid "Reboot"
+msgstr "Redémarrer"
+
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "Minimiser"
+
+msgctxt "#13015"
+msgid "Power button action"
+msgstr "Action du bouton Marche/Arrêt"
+
+msgctxt "#13016"
+msgid "Power off System"
+msgstr "Arrêt du système"
+
+msgctxt "#13017"
+msgid "Inhibit idle shutdown"
+msgstr "Désactiver l'arrêt sur inactivité"
+
+msgctxt "#13018"
+msgid "Allow idle shutdown"
+msgstr "Autoriser l'arrêt sur inactivité"
+
+msgctxt "#13020"
+msgid "Is another session active, perhaps over ssh?"
+msgstr "Autre session en cours, peut être en ssh?"
+
+msgctxt "#13021"
+msgid "Mounted removable harddrive"
+msgstr "Disque dur amovible monté"
+
+msgctxt "#13022"
+msgid "Unsafe device removal"
+msgstr "Déconnexion non sécurisée du périphérique"
+
+msgctxt "#13023"
+msgid "Successfully removed device"
+msgstr "Périphérique déconnecté avec succès"
+
+msgctxt "#13024"
+msgid "Joystick plugged"
+msgstr "Manche à balai connecté"
+
+msgctxt "#13025"
+msgid "Joystick unplugged"
+msgstr "Manche à balai déconnecté"
+
+msgctxt "#13026"
+msgid "Try to wake remote servers on access"
+msgstr "Essayer de réveiller les serveurs distants lors de l'accès"
+
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Réveiller à partir du réseau LAN (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "En attente de la connexion au réseau..."
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Échec de Réveiller à partir du réseau LAN! "
+
+msgctxt "#13030"
+msgid "Waiting for server to wake up..."
+msgstr "Attente du réveil du serveur..."
+
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Attente prolongée du réveil du serveur..."
+
+msgctxt "#13032"
+msgid "Waiting for services to launch..."
+msgstr "Attente du lancement des services..."
+
+msgctxt "#13033"
+msgid "MAC Discovery"
+msgstr "Découverte MAC"
+
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Mis à jour pour %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Trouvé pour %s"
+
+msgctxt "#13036"
+msgid "Failed for %s"
+msgstr "Échec pour %s"
+
+msgctxt "#13050"
+msgid "Running low on battery"
+msgstr "Batterie faible"
+
+msgctxt "#13100"
+msgid "Flicker filter"
+msgstr "Filtre de scintillement"
+
+msgctxt "#13101"
+msgid "Let driver choose (requires restart)"
+msgstr "Laisser le pilote choisir (redémarrage nécessaire)"
+
+msgctxt "#13105"
+msgid "Vertical blank sync"
+msgstr "Synchronisation verticale VBL"
+
+msgctxt "#13106"
+msgid "Disabled"
+msgstr "Désactivée"
+
+msgctxt "#13107"
+msgid "Enabled during video playback"
+msgstr "Activée pendant la lecture vidéo"
+
+msgctxt "#13108"
+msgid "Always enabled"
+msgstr "Toujours activée"
+
+msgctxt "#13109"
+msgid "Test & apply resolution"
+msgstr "Tester & appliquer la résolution"
+
+msgctxt "#13110"
+msgid "Save resolution?"
+msgstr "Sauvagarder la 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 ascendante de haute qualité"
+
+msgctxt "#13113"
+msgid "Disabled"
+msgstr "Désactivée"
+
+msgctxt "#13114"
+msgid "Enabled for SD content"
+msgstr "Activée pour contenu qualité standard QS"
+
+msgctxt "#13115"
+msgid "Always enabled"
+msgstr "Toujours activée"
+
+msgctxt "#13116"
+msgid "Upscaling method"
+msgstr "Méthode de conversion ascendante"
+
+msgctxt "#13117"
+msgid "Bicubic"
+msgstr "Bicubique"
+
+msgctxt "#13118"
+msgid "Lanczos"
+msgstr "Lanczos"
+
+msgctxt "#13119"
+msgid "Sinc"
+msgstr "Sinc"
+
+msgctxt "#13120"
+msgid "VDPAU"
+msgstr "VDPAU"
+
+msgctxt "#13121"
+msgid "VDPAU HQ Upscaling level"
+msgstr "VDPAU niveau de conversion ascendante HQ"
+
+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"
+
+msgctxt "#13131"
+msgid "Disabled"
+msgstr "Désactivé"
+
+msgctxt "#13132"
+msgid "Blank displays"
+msgstr "Vider les écrans"
+
+msgctxt "#13140"
+msgid "Active connections detected!"
+msgstr "Connexions actives détectées!"
+
+msgctxt "#13141"
+msgid "If you proceed, you might not be able to control XBMC"
+msgstr "En continuant, vous perdrez peut-être le contrôle de"
+
+msgctxt "#13142"
+msgid "any longer. Are you sure you want to stop the Event server?"
+msgstr "XBMC. Êtes-vous sûr de vouloir arrêter le serveur d'événements?"
+
+msgctxt "#13144"
+msgid "Change Apple Remote mode?"
+msgstr "Changer le mode de la télécommande Apple?"
+
+msgctxt "#13145"
+msgid "If you are currently using the Apple Remote to control"
+msgstr "Si vous utilisez actuellement la télécommande Apple pour"
+
+msgctxt "#13146"
+msgid "XBMC, changing this setting might affect your ability"
+msgstr "contrôler XBMC, changer ce paramètre peut affecter"
+
+msgctxt "#13147"
+msgid "to continue controlling it. Do you want to proceed?"
+msgstr "ce contrôle. Voulez-vous continuer?"
+
+msgctxt "#13159"
+msgid "Subnet mask"
+msgstr "Masque de sous-réseau "
+
+msgctxt "#13160"
+msgid "Gateway"
+msgstr "Passerelle"
+
+msgctxt "#13161"
+msgid "Primary DNS"
+msgstr "DNS primaire"
+
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "L'initialisation a échoué"
+
+msgctxt "#13170"
+msgid "Never"
+msgstr "Jamais"
+
+msgctxt "#13171"
+msgid "Immediately"
+msgstr "Immédiatement"
+
+msgctxt "#13172"
+msgid "After %i secs"
+msgstr "Après %i s"
+
+msgctxt "#13173"
+msgid "HDD install date:"
+msgstr "DD installé le :"
+
+msgctxt "#13174"
+msgid "HDD power cycle count:"
+msgstr "Nbre de cycles marche/arrêt du DD :"
+
+msgctxt "#13200"
+msgid "Profiles"
+msgstr "Profils"
+
+msgctxt "#13201"
+msgid "Delete profile '%s'?"
+msgstr "Supprimer le profil « %s »?"
+
+msgctxt "#13204"
+msgid "Last loaded profile:"
+msgstr "Dernier profil chargé :"
+
+msgctxt "#13205"
+msgid "Unknown"
+msgstr "Inconnu"
+
+msgctxt "#13206"
+msgid "Overwrite"
+msgstr "Écraser"
+
+msgctxt "#13208"
+msgid "Alarm clock"
+msgstr "Alarme"
+
+msgctxt "#13209"
+msgid "Alarm clock interval (in minutes)"
+msgstr "Intervalle d'alarme (en minutes)"
+
+msgctxt "#13210"
+msgid "Started, alarm in %im"
+msgstr "Démarré, alarme dans %i min"
+
+msgctxt "#13211"
+msgid "Alarm!"
+msgstr "Alarme!"
+
+msgctxt "#13212"
+msgid "Cancelled with %im%is left"
+msgstr "Annulé avec %i min %i s restantes"
+
+msgctxt "#13213"
+msgid "%2.0fm"
+msgstr "%2.0f min"
+
+msgctxt "#13214"
+msgid "%2.0fs"
+msgstr "%2.0f s"
+
+msgctxt "#13249"
+msgid "Search for subtitles in RARs"
+msgstr "Recherche de sous-titres dans des RAR"
+
+msgctxt "#13250"
+msgid "Browse for subtitle..."
+msgstr "Recherche d'un sous-titre..."
+
+msgctxt "#13251"
+msgid "Move item"
+msgstr "Déplacer l'élément"
+
+msgctxt "#13252"
+msgid "Move item here"
+msgstr "Déplacer l'élément ici"
+
+msgctxt "#13253"
+msgid "Cancel move"
+msgstr "Annuler le déplacement"
+
+msgctxt "#13270"
+msgid "Hardware:"
+msgstr "Matériel :"
+
+msgctxt "#13271"
+msgid "CPU Usage:"
+msgstr "Utilisation UCT :"
+
+msgctxt "#13274"
+msgid "Connected, but no DNS is available."
+msgstr "Connecté, mais aucun DNS n'est disponible."
+
+msgctxt "#13275"
+msgid "Hard Disk"
+msgstr "Disque dur"
+
+msgctxt "#13276"
+msgid "DVD-ROM"
+msgstr "DVD-ROM"
+
+msgctxt "#13277"
+msgid "Storage"
+msgstr "Stockage"
+
+msgctxt "#13278"
+msgid "Default"
+msgstr "Par Défaut"
+
+msgctxt "#13279"
+msgid "Network"
+msgstr "Réseau"
+
+msgctxt "#13280"
+msgid "Video"
+msgstr "Vidéo"
+
+msgctxt "#13281"
+msgid "Hardware"
+msgstr "Matériel"
+
+msgctxt "#13283"
+msgid "Operating system:"
+msgstr "Système d'exploitation :"
+
+msgctxt "#13284"
+msgid "CPU speed:"
+msgstr "Vitesse du UCT :"
+
+msgctxt "#13286"
+msgid "Video encoder:"
+msgstr "Encodeur vidéo :"
+
+msgctxt "#13287"
+msgid "Screen resolution:"
+msgstr "Résolution de l'écran :"
+
+msgctxt "#13292"
+msgid "A/V cable:"
+msgstr "Câble A/V :"
+
+msgctxt "#13294"
+msgid "DVD region:"
+msgstr "Région DVD :"
+
+msgctxt "#13295"
+msgid "Internet:"
+msgstr "Internet :"
+
+msgctxt "#13296"
+msgid "Connected"
+msgstr "connecté"
+
+msgctxt "#13297"
+msgid "Not connected. Check network settings."
+msgstr "non connecté. Vérifiez vos paramètres réseau."
+
+msgctxt "#13299"
+msgid "Target temperature"
+msgstr "Température de la cible"
+
+msgctxt "#13300"
+msgid "Fan speed"
+msgstr "Vitesse du ventilateur"
+
+msgctxt "#13301"
+msgid "Auto temperature control"
+msgstr "Contrôle automatique de la température"
+
+msgctxt "#13302"
+msgid "Fan speed override"
+msgstr "Contrôle prioritaire de la vitesse du ventilateur"
+
+msgctxt "#13303"
+msgid "Fonts"
+msgstr "Polices"
+
+msgctxt "#13304"
+msgid "Enable flipping bi-directional strings"
+msgstr "Activer l'inversement bidirectionnel des textes"
+
+msgctxt "#13305"
+msgid "Show RSS news feeds"
+msgstr "Afficher les fils d'actualité  RSS"
+
+msgctxt "#13306"
+msgid "Show parent folder items"
+msgstr "Afficher les éléments du répertoire parent"
+
+msgctxt "#13307"
+msgid "Track naming template"
+msgstr "Modèle de nommage des pistes"
+
+msgctxt "#13308"
+msgid "Do you wish to reboot your system"
+msgstr "Voulez-vous redémarrer votre système"
+
+msgctxt "#13309"
+msgid "instead of just XBMC?"
+msgstr "au lieu de juste redémarrer XBMC?"
+
+msgctxt "#13310"
+msgid "Zoom effect"
+msgstr "Effet de zoom"
+
+msgctxt "#13311"
+msgid "Float effect"
+msgstr "Effet de flottement"
+
+msgctxt "#13312"
+msgid "Black bar reduction"
+msgstr "Réduction des barres noires"
+
+msgctxt "#13313"
+msgid "Restart"
+msgstr "Redémarrer"
+
+msgctxt "#13314"
+msgid "Crossfade between songs"
+msgstr "Fondu enchaîné entre les morceaux"
+
+msgctxt "#13315"
+msgid "Regenerate thumbnails"
+msgstr "Régénérer les imagettes"
+
+msgctxt "#13316"
+msgid "Recursive thumbnails"
+msgstr "Imagettes récursives"
+
+msgctxt "#13317"
+msgid "View slideshow"
+msgstr "Voir le diaporama"
+
+msgctxt "#13318"
+msgid "Recursive slideshow"
+msgstr "Diaporama récursif"
+
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "Aléatoire"
+
+msgctxt "#13320"
+msgid "Stereo"
+msgstr "Stéréo"
+
+msgctxt "#13321"
+msgid "Left only"
+msgstr "Gauche seulement"
+
+msgctxt "#13322"
+msgid "Right only"
+msgstr "Droite seulement"
+
+msgctxt "#13323"
+msgid "Enable karaoke support"
+msgstr "Activer la prise en charge du karaoké"
+
+msgctxt "#13324"
+msgid "Background transparency"
+msgstr "Transparence de l'arrière-plan"
+
+msgctxt "#13325"
+msgid "Foreground transparency"
+msgstr "Transparence de l'avant-plan"
+
+msgctxt "#13326"
+msgid "A/V delay"
+msgstr "Délai A/V"
+
+msgctxt "#13327"
+msgid "Karaoke"
+msgstr "Karaoké"
+
+msgctxt "#13328"
+msgid "%s not found"
+msgstr "%s introuvable"
+
+msgctxt "#13329"
+msgid "Error opening %s"
+msgstr "Erreur lors de l'ouverture de %s"
+
+msgctxt "#13330"
+msgid "Unable to load %s"
+msgstr "N'a pu charger %s"
+
+msgctxt "#13331"
+msgid "Error: Out of memory"
+msgstr "Erreur : mémoire insuffisante"
+
+msgctxt "#13332"
+msgid "Move up"
+msgstr "Monter"
+
+msgctxt "#13333"
+msgid "Move down"
+msgstr "Descendre"
+
+msgctxt "#13334"
+msgid "Edit label"
+msgstr "Modifier l'étiquette"
+
+msgctxt "#13335"
+msgid "Make default"
+msgstr "Définir par défaut"
+
+msgctxt "#13336"
+msgid "Remove button"
+msgstr "Enlever le bouton"
+
+msgctxt "#13340"
+msgid "Leave as is"
+msgstr "Laisser tel quel"
+
+msgctxt "#13341"
+msgid "Green"
+msgstr "Verte"
+
+msgctxt "#13342"
+msgid "Orange"
+msgstr "Orange"
+
+msgctxt "#13343"
+msgid "Red"
+msgstr "Rouge"
+
+msgctxt "#13344"
+msgid "Cycle"
+msgstr "Cyclique"
+
+msgctxt "#13345"
+msgid "Switch LED off on playback"
+msgstr "Éteindre la DEL pendant la lecture"
+
+msgctxt "#13346"
+msgid "Movie information"
+msgstr "Information sur le film"
+
+msgctxt "#13347"
+msgid "Queue item"
+msgstr "Ajouter à la file d'attente"
+
+msgctxt "#13348"
+msgid "Search IMDb..."
+msgstr "Rechercher sur IMDb..."
+
+msgctxt "#13349"
+msgid "Scan for new content"
+msgstr "Balayer pour du nouveau contenu"
+
+msgctxt "#13350"
+msgid "Now playing..."
+msgstr "Lecture en cours..."
+
+msgctxt "#13351"
+msgid "Album information"
+msgstr "Information sur l'album"
+
+msgctxt "#13352"
+msgid "Scan item to library"
+msgstr "Balayer les éléments vers la médiathèque"
+
+msgctxt "#13353"
+msgid "Stop scanning"
+msgstr "Arrêter le balayage"
+
+msgctxt "#13354"
+msgid "Render method"
+msgstr "Méthode de rendu"
+
+msgctxt "#13355"
+msgid "Low quality pixel shader"
+msgstr "Nuanceur de pixels basse qualité"
+
+msgctxt "#13356"
+msgid "Hardware overlays"
+msgstr "Traitement matériel"
+
+msgctxt "#13357"
+msgid "High quality pixel shader"
+msgstr "Nuanceur de pixels haute qualité"
+
+msgctxt "#13358"
+msgid "Play item"
+msgstr "Lire l'élément"
+
+msgctxt "#13359"
+msgid "Set artist thumb"
+msgstr "Définir l'magette de l'artiste"
+
+msgctxt "#13360"
+msgid "Automatically generate thumbnails"
+msgstr "Générer automatiquement les imagettes"
+
+msgctxt "#13361"
+msgid "Enable voice"
+msgstr "Activer la voix"
+
+msgctxt "#13375"
+msgid "Enable device"
+msgstr "Activer le périphérique"
+
+msgctxt "#13376"
+msgid "Volume"
+msgstr "Volume"
+
+msgctxt "#13377"
+msgid "Default view mode"
+msgstr "Mode de visualisation par défaut"
+
+msgctxt "#13378"
+msgid "Default brightness"
+msgstr "Luminosité par défaut"
+
+msgctxt "#13379"
+msgid "Default contrast"
+msgstr "Contraste par défaut"
+
+msgctxt "#13380"
+msgid "Default gamma"
+msgstr "Gamma par défaut"
+
+msgctxt "#13381"
+msgid "Resume video"
+msgstr "Reprendre la vidéo"
+
+msgctxt "#13382"
+msgid "Voice mask - Port 1"
+msgstr "Masque voix - Port 1"
+
+msgctxt "#13383"
+msgid "Voice mask - Port 2"
+msgstr "Masque voix - Port 2"
+
+msgctxt "#13384"
+msgid "Voice mask - Port 3"
+msgstr "Masque voix - Port 3"
+
+msgctxt "#13385"
+msgid "Voice mask - Port 4"
+msgstr "Masque voix - Port 4"
+
+msgctxt "#13386"
+msgid "Use time based seeking"
+msgstr "Utiliser le déplacement basé sur le minutage"
+
+msgctxt "#13387"
+msgid "Track naming template - right"
+msgstr "Modèle de nommage de pistes -droite"
+
+msgctxt "#13388"
+msgid "Preset"
+msgstr "Préréglage"
+
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "Il n'y a pas de préréglages disponibles\npour cette visualisation"
+
+msgctxt "#13390"
+msgid "There are no settings available\nfor this visualisation"
+msgstr "Il n'y a pas de réglages disponibles\npour cette visualisation"
+
+msgctxt "#13391"
+msgid "Eject/Load"
+msgstr "Éjecter/Charger"
+
+msgctxt "#13392"
+msgid "Use visualisation if playing audio"
+msgstr "Activer la visualisation en lecture audio"
+
+msgctxt "#13393"
+msgid "Calculate size"
+msgstr "Calculer la taille"
+
+msgctxt "#13394"
+msgid "Calculating folder size"
+msgstr "Calcul de la taille du dossier"
+
+msgctxt "#13395"
+msgid "Video settings"
+msgstr "Paramètres vidéo"
+
+msgctxt "#13396"
+msgid "Audio and subtitle settings"
+msgstr "Paramètres audio et de sous-titres"
+
+msgctxt "#13397"
+msgid "Enable subtitles"
+msgstr "Activer les sous-titres"
+
+msgctxt "#13398"
+msgid "Shortcuts"
+msgstr "Raccourcis"
+
+msgctxt "#13399"
+msgid "Ignore articles when sorting (e.g. \"the\")"
+msgstr "Ignorer les articles lors du tri (ex : « le »)"
+
+msgctxt "#13400"
+msgid "Crossfade between songs on the same album"
+msgstr "Fondu enchaîné des morceaux d'un même album"
+
+msgctxt "#13401"
+msgid "Browse for %s"
+msgstr "Recherche de %s"
+
+msgctxt "#13402"
+msgid "Show track position"
+msgstr "Montrer la position de la piste"
+
+msgctxt "#13403"
+msgid "Clear default"
+msgstr "Effacer la source par défaut"
+
+msgctxt "#13404"
+msgid "Resume"
+msgstr "Reprendre"
+
+msgctxt "#13405"
+msgid "Get thumb"
+msgstr "Obtenir l'imagette"
+
+msgctxt "#13406"
+msgid "Picture information"
+msgstr "Information sur l'image"
+
+msgctxt "#13407"
+msgid "%s presets"
+msgstr "%s préréglages"
+
+msgctxt "#13408"
+msgid "(IMDb user rating)"
+msgstr "(Évaluation des utilisateurs d'IMDb)"
+
+msgctxt "#13409"
+msgid "Top 250"
+msgstr "Les 1ers 250 :"
+
+msgctxt "#13410"
+msgid "Tune in on Last.fm"
+msgstr "Envoyer sur Last.fm"
+
+msgctxt "#13411"
+msgid "Minimum fan speed"
+msgstr "Vitesse minimum du ventilateur"
+
+msgctxt "#13412"
+msgid "Play from here"
+msgstr "Lire à partir d'ici"
+
+msgctxt "#13413"
+msgid "Downloading"
+msgstr "Téléchargement"
+
+msgctxt "#13414"
+msgid "Include artists who appear only on compilations"
+msgstr "Inclure les artistes apparaissant uniquement sur les compilations"
+
+msgctxt "#13415"
+msgid "Render method"
+msgstr "Méthode de rendu"
+
+msgctxt "#13416"
+msgid "Auto detect"
+msgstr "Autodétection"
+
+msgctxt "#13417"
+msgid "Basic shaders (ARB)"
+msgstr "Nuanceurs de base (ARB)"
+
+msgctxt "#13418"
+msgid "Advanced shaders (GLSL)"
+msgstr "Nuanceurs évolués (GLSL)"
+
+msgctxt "#13419"
+msgid "Software"
+msgstr "Logiciel"
+
+msgctxt "#13420"
+msgid "Remove safely"
+msgstr "Retirer en toute sécurité"
+
+msgctxt "#13421"
+msgid "VDPAU"
+msgstr "VDPAU"
+
+msgctxt "#13422"
+msgid "Start slideshow here"
+msgstr "Démarrer le diaporama ici"
+
+msgctxt "#13423"
+msgid "Remember for this path"
+msgstr "Retenir pour ce chemin"
+
+msgctxt "#13424"
+msgid "Use pixel buffer objects"
+msgstr "Utiliser le tampon de pixels"
+
+msgctxt "#13425"
+msgid "Allow hardware acceleration (VDPAU)"
+msgstr "Permettre l'accélération matérielle (VDPAU)"
+
+msgctxt "#13426"
+msgid "Allow hardware acceleration (VAAPI)"
+msgstr "Permettre l'accélération matérielle (VAAPI)"
+
+msgctxt "#13427"
+msgid "Allow hardware acceleration (DXVA2)"
+msgstr "Permettre l'accélération matérielle (DXVA2)"
+
+msgctxt "#13428"
+msgid "Allow hardware acceleration (CrystalHD)"
+msgstr "Permettre l'accélération matérielle (CrystalHD)"
+
+msgctxt "#13429"
+msgid "Allow hardware acceleration (VDADecoder)"
+msgstr "Permettre l'accélération matérielle (VDADecoder)"
+
+msgctxt "#13430"
+msgid "Allow hardware acceleration (OpenMax)"
+msgstr "Permettre l'accélération matérielle (OpenMax)"
+
+msgctxt "#13431"
+msgid "Pixel Shaders"
+msgstr "Nuanceurs de pixels"
+
+msgctxt "#13432"
+msgid "Allow hardware acceleration (VideoToolbox)"
+msgstr "Permettre l'accélération matérielle (VideoToolbox)"
+
+msgctxt "#13433"
+msgid "Play the next video automatically"
+msgstr "Lire automatiquement la prochaine vidéo"
+
+msgctxt "#13434"
+msgid "Play only this"
+msgstr "Lire uniquement ceci"
+
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Activer la mise à l'échelle HQ pour les agrandissements ci-dessus"
+
+msgctxt "#13436"
+msgid "Allow hardware acceleration (libstagefright)"
+msgstr "Autoriser l'accélération matérielle (libstagefright)"
+
+msgctxt "#13437"
+msgid "Prefer VDPAU Video Mixer"
+msgstr "Préférer le mixer vidéo VDPAU"
+
+msgctxt "#13438"
+msgid "Allow hardware acceleration (amcodec)"
+msgstr "Autoriser l'accélération matérielle (amcodec)"
+
+msgctxt "#13439"
+msgid "Allow hardware acceleration (MediaCodec)"
+msgstr "Autoriser l'accélération matérielle (MediaCodec)"
+
+msgctxt "#13500"
+msgid "A/V sync method"
+msgstr "Méthode de synchro. A/V"
+
+msgctxt "#13501"
+msgid "Audio clock"
+msgstr "Horloge audio"
+
+msgctxt "#13502"
+msgid "Video clock (Drop/Dupe audio)"
+msgstr "Horloge vidéo (Drop/Dupe audio)"
+
+msgctxt "#13503"
+msgid "Video clock (Resample audio)"
+msgstr "Horloge vidéo (rééchantillonage audio)"
+
+msgctxt "#13504"
+msgid "Maximum speedup/slowdown amount (%)"
+msgstr "Accélération/ralentissement maximum (%)"
+
+msgctxt "#13505"
+msgid "Resample quality"
+msgstr "Qualité du rééchantillonnage"
+
+msgctxt "#13506"
+msgid "Low(fast)"
+msgstr "Basse (rapide)"
+
+msgctxt "#13507"
+msgid "Medium"
+msgstr "Moyenne"
+
+msgctxt "#13508"
+msgid "High"
+msgstr "Haute"
+
+msgctxt "#13509"
+msgid "Really high(slow!)"
+msgstr "Vraiment élevée (lent!)"
+
+msgctxt "#13510"
+msgid "Sync playback to display"
+msgstr "Synchronisation de la lecture avec l'affichage"
+
+msgctxt "#13511"
+msgid "Choose art"
+msgstr "Choisir l'illustration"
+
+msgctxt "#13512"
+msgid "Current art"
+msgstr "Illustration actuelle"
+
+msgctxt "#13513"
+msgid "Remote art"
+msgstr "Illustration distante"
+
+msgctxt "#13514"
+msgid "Local art"
+msgstr "Illustration locale"
+
+msgctxt "#13515"
+msgid "No art"
+msgstr "Aucune illustration"
+
+msgctxt "#13516"
+msgid "Add art"
+msgstr "Ajouter des illustrations"
+
+msgctxt "#13550"
+msgid "Pause during refresh rate change"
+msgstr "Pause pendant le changement de fréquence de rafraichissement"
+
+msgctxt "#13551"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#13552"
+msgid "%.1f Second"
+msgstr "%.1f seconde"
+
+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"
+
+msgctxt "#13602"
+msgid "Allow start of XBMC using the remote"
+msgstr "Permettre le démarrage de XBMC avec la télécommande"
+
+msgctxt "#13603"
+msgid "Sequence delay time"
+msgstr "Délai de la séquence"
+
+msgctxt "#13610"
+msgid "Disabled"
+msgstr "Désactivé"
+
+msgctxt "#13611"
+msgid "Standard"
+msgstr "Standard"
+
+msgctxt "#13612"
+msgid "Universal Remote"
+msgstr "Télécommande universelle"
+
+msgctxt "#13613"
+msgid "Multi Remote (Harmony)"
+msgstr "Télécommande multiple (Harmony)"
+
+msgctxt "#13620"
+msgid "Apple Remote Error"
+msgstr "Erreur de la télécommande Apple"
+
+msgctxt "#13621"
+msgid "Apple Remote support could be enabled."
+msgstr "Activation possible de la prise en charge de la télécommande Apple."
+
+msgctxt "#14000"
+msgid "Stack"
+msgstr "Empiler"
+
+msgctxt "#14001"
+msgid "Unstack"
+msgstr "Désempiler"
+
+msgctxt "#14003"
+msgid "Downloading playlist file..."
+msgstr "Téléchargement du ficher de piste de lecture..."
+
+msgctxt "#14004"
+msgid "Downloading streams list..."
+msgstr "Téléchargement de la liste des flux..."
+
+msgctxt "#14005"
+msgid "Parsing streams list..."
+msgstr "Analyse de la liste des flux..."
+
+msgctxt "#14006"
+msgid "Downloading streams list failed"
+msgstr "Échec du téléchargement de la liste des flux"
+
+msgctxt "#14007"
+msgid "Downloading playlist file failed"
+msgstr "Échec du téléchargement de la liste de lecture"
+
+msgctxt "#14009"
+msgid "Games directory"
+msgstr "Répertoire des jeux"
+
+msgctxt "#14010"
+msgid "Auto switch to thumbs based on"
+msgstr "Activation auto : basé sur les imagettes"
+
+msgctxt "#14011"
+msgid "Enable auto switching to thumbs view"
+msgstr "Basculement automatique vers la vue en imagettes"
+
+msgctxt "#14012"
+msgid "- Use large icons"
+msgstr "- Utiliser les grandes icônes"
+
+msgctxt "#14013"
+msgid "- Switch based on"
+msgstr "- Basculement basé sur"
+
+msgctxt "#14014"
+msgid "- Percentage"
+msgstr "- Pourcentage"
+
+msgctxt "#14015"
+msgid "No files and at least one thumb"
+msgstr "Aucun fichier et au moins une imagette"
+
+msgctxt "#14016"
+msgid "At least one file and thumb"
+msgstr "Au moins un fichier et une imagette"
+
+msgctxt "#14017"
+msgid "Percentage of thumbs"
+msgstr "Pourcentage d'imagettes"
+
+msgctxt "#14018"
+msgid "View options"
+msgstr "Options de visualisation"
+
+msgctxt "#14019"
+msgid "Change area code 1"
+msgstr "Changer le code de zone 1"
+
+msgctxt "#14020"
+msgid "Change area code 2"
+msgstr "Changer le code de zone 2"
+
+msgctxt "#14021"
+msgid "Change area code 3"
+msgstr "Changer le code de zone 3"
+
+msgctxt "#14022"
+msgid "Library"
+msgstr "Médiathèque"
+
+msgctxt "#14023"
+msgid "No TV"
+msgstr "Sans TV"
+
+msgctxt "#14024"
+msgid "Enter the nearest large town"
+msgstr "Indiquer la ville la plus proche"
+
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "Cache Vidéo/Audio/DVD - Disque Dur"
+
+msgctxt "#14026"
+msgid "Video cache - DVD-ROM"
+msgstr "Cache vidéo - DVD-ROM"
+
+msgctxt "#14027"
+msgid "Local Network"
+msgstr "Réseau local"
+
+msgctxt "#14028"
+msgid "Internet"
+msgstr "Internet"
+
+msgctxt "#14030"
+msgid "Audio cache - DVD-ROM"
+msgstr "Cache audio - DVD-ROM"
+
+msgctxt "#14031"
+msgid "Local Network"
+msgstr "Réseau local"
+
+msgctxt "#14032"
+msgid "Internet"
+msgstr "Internet"
+
+msgctxt "#14034"
+msgid "DVD cache - DVD-ROM"
+msgstr "Cache DVD - DVD-ROM"
+
+msgctxt "#14035"
+msgid "Local Network"
+msgstr "Réseau local"
+
+msgctxt "#14036"
+msgid "Services"
+msgstr "Services"
+
+msgctxt "#14038"
+msgid "Network settings changed"
+msgstr "Les paramètres réseau ont été modifiés"
+
+msgctxt "#14039"
+msgid "XBMC requires to restart to change your"
+msgstr "XBMC doit redémarrer pour changer vos paramètres"
+
+msgctxt "#14040"
+msgid "network setup.  Would you like to restart now?"
+msgstr "réseau. Voudriez-vous redémarrer maintenant?"
+
+msgctxt "#14041"
+msgid "Internet connection bandwidth limitation"
+msgstr "Limite de la bande passante de la connexion Internet"
+
+msgctxt "#14043"
+msgid "- Shutdown while playing"
+msgstr "- Éteindre pendant la lecture"
+
+msgctxt "#14044"
+msgid "%i min"
+msgstr "%i min"
+
+msgctxt "#14045"
+msgid "%i sec"
+msgstr "%i s"
+
+msgctxt "#14046"
+msgid "%i ms"
+msgstr "%i ms"
+
+msgctxt "#14047"
+msgid "%i %%"
+msgstr "%i %%"
+
+msgctxt "#14048"
+msgid "%i kbps"
+msgstr "%i kbps"
+
+msgctxt "#14049"
+msgid "%i kb"
+msgstr "%i kb"
+
+msgctxt "#14050"
+msgid "%i.0 dB"
+msgstr "%i.0 dB"
+
+msgctxt "#14051"
+msgid "Time format"
+msgstr "Format de l'heure"
+
+msgctxt "#14052"
+msgid "Date format"
+msgstr "Format de la date"
+
+msgctxt "#14053"
+msgid "GUI filters"
+msgstr "Filtres d'interface utilisateur"
+
+msgctxt "#14055"
+msgid "Use background scanning"
+msgstr "Utiliser le balayage en arrière-plan"
+
+msgctxt "#14056"
+msgid "Stop scan"
+msgstr "Stopper le balayage"
+
+msgctxt "#14057"
+msgid "Not possible while scanning for media info"
+msgstr "Impossible durant le balayage des informations de médias"
+
+msgctxt "#14058"
+msgid "Film grain effect"
+msgstr "Effet de grain sur les films"
+
+msgctxt "#14059"
+msgid "Search for thumbnails on remote shares"
+msgstr "Rechercher des imagettes sur les partages distants"
+
+msgctxt "#14060"
+msgid "Unknown type cache - Internet"
+msgstr "Cache de type inconnu - Internet"
+
+msgctxt "#14061"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#14062"
+msgid "Enter username for"
+msgstr "Saisir le nom d'utilisateur pour"
+
+msgctxt "#14063"
+msgid "Date & time"
+msgstr "Date & heure"
+
+msgctxt "#14064"
+msgid "Set date"
+msgstr "Définir la date"
+
+msgctxt "#14065"
+msgid "Set time"
+msgstr "Définir l'heure"
+
+msgctxt "#14066"
+msgid "Enter the time in 24 hour HH:MM format"
+msgstr "Saisir l'heure (24 h) HH:MM"
+
+msgctxt "#14067"
+msgid "Enter the date in DD/MM/YYYY format"
+msgstr "Saisir la date au format JJ/MM/AAAA"
+
+msgctxt "#14068"
+msgid "Enter the IP address"
+msgstr "Saisir l'adresse IP"
+
+msgctxt "#14069"
+msgid "Apply these settings now?"
+msgstr "Appliquer ces paramètres maintenant?"
+
+msgctxt "#14070"
+msgid "Apply changes now"
+msgstr "Appliquer les changements maintenant"
+
+msgctxt "#14071"
+msgid "Allow file renaming and deletion"
+msgstr "Permettre le renommage et la suppression de fichier"
+
+msgctxt "#14074"
+msgid "Set timezone"
+msgstr "Définir le fuseau horaire"
+
+msgctxt "#14075"
+msgid "Use daylight saving time"
+msgstr "Utiliser l'heure avancée"
+
+msgctxt "#14076"
+msgid "Add to favourites"
+msgstr "Ajouter aux favoris"
+
+msgctxt "#14077"
+msgid "Remove from favourites"
+msgstr "Retirer des favoris"
+
+msgctxt "#14078"
+msgid "Colours"
+msgstr "Couleurs"
+
+msgctxt "#14079"
+msgid "Timezone country"
+msgstr "Pays"
+
+msgctxt "#14080"
+msgid "Timezone"
+msgstr "Fuseau horaire"
+
+msgctxt "#14081"
+msgid "File lists"
+msgstr "Listes de fichiers"
+
+msgctxt "#14082"
+msgid "Show EXIF picture information"
+msgstr "Afficher les informations EXIF des images"
+
+msgctxt "#14083"
+msgid "Use a fullscreen window rather than true fullscreen"
+msgstr "Utiliser une fenêtre maximisée plutôt que le plein écran"
+
+msgctxt "#14084"
+msgid "Queue songs on selection"
+msgstr "Mettre en file d'attente les morceaux choisies"
+
+msgctxt "#14086"
+msgid "Playback"
+msgstr "Lecture"
+
+msgctxt "#14087"
+msgid "DVDs"
+msgstr "DVD"
+
+msgctxt "#14088"
+msgid "Play DVDs automatically"
+msgstr "Lire les DVD automatiquement"
+
+msgctxt "#14089"
+msgid "Font to use for text subtitles"
+msgstr "Police pour les sous-titres"
+
+msgctxt "#14090"
+msgid "International"
+msgstr "International"
+
+msgctxt "#14091"
+msgid "Character set"
+msgstr "Jeu de caractères"
+
+msgctxt "#14092"
+msgid "Debugging"
+msgstr "Debogage"
+
+msgctxt "#14093"
+msgid "Security"
+msgstr "Sécurité"
+
+msgctxt "#14094"
+msgid "Input devices"
+msgstr "Périphériques d'entrée"
+
+msgctxt "#14095"
+msgid "Power saving"
+msgstr "Économie d'énergie"
+
+msgctxt "#14096"
+msgid "Rip"
+msgstr "Extraire"
+
+msgctxt "#14097"
+msgid "Audio CD Insert Action"
+msgstr "Réaction à l'insertion de CD audio"
+
+msgctxt "#14098"
+msgid "Play"
+msgstr "Lire"
+
+msgctxt "#14099"
+msgid "Eject disc when CD ripping is complete"
+msgstr "Éjecter le CD à la fin de l'extraction"
+
+msgctxt "#14100"
+msgid "Stop ripping CD"
+msgstr "Arrêter l'extraction du CD"
+
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Source non disponible"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Que souhaitez-vous faire avec les éléments media de %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Garder"
+
+msgctxt "#15015"
+msgid "Remove"
+msgstr "Enlever"
+
+msgctxt "#15016"
+msgid "Games"
+msgstr "Jeux"
+
+msgctxt "#15019"
+msgid "Add"
+msgstr "Ajouter"
+
+msgctxt "#15052"
+msgid "Password"
+msgstr "Mot de passe"
+
+msgctxt "#15100"
+msgid "Library"
+msgstr "Médiathèque"
+
+msgctxt "#15101"
+msgid "Database"
+msgstr "Base de données"
+
+msgctxt "#15102"
+msgid "* All albums"
+msgstr "* Tous les albums"
+
+msgctxt "#15103"
+msgid "* All artists"
+msgstr "* Tous les artistes"
+
+msgctxt "#15104"
+msgid "* All songs"
+msgstr "* Tous les morceaux"
+
+msgctxt "#15105"
+msgid "* All genres"
+msgstr "* Tous les genres"
+
+msgctxt "#15107"
+msgid "Buffering..."
+msgstr "Mise en mémoire-tampon..."
+
+msgctxt "#15108"
+msgid "Navigation sounds"
+msgstr "Sons de navigation"
+
+msgctxt "#15109"
+msgid "Skin default"
+msgstr "Habillage par défaut"
+
+msgctxt "#15111"
+msgid "Theme"
+msgstr "Thème"
+
+msgctxt "#15112"
+msgid "Default theme"
+msgstr "Thème par défaut"
+
+msgctxt "#15200"
+msgid "Last.fm"
+msgstr "Last.fm"
+
+msgctxt "#15207"
+msgid "Connected"
+msgstr "connecté"
+
+msgctxt "#15208"
+msgid "Not connected"
+msgstr "non connecté"
+
+msgctxt "#15213"
+msgid "Play using..."
+msgstr "Lire avec..."
+
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "Utiliser la synchronisation A/V la plus fluide"
+
+msgctxt "#15215"
+msgid "Hide file names in thumbs view"
+msgstr "Masquer le nom des fichiers en vue imagettes"
+
+msgctxt "#15216"
+msgid "Play in party mode"
+msgstr "Lire en mode fête"
+
+msgctxt "#15300"
+msgid "Path not found or invalid"
+msgstr "Chemin introuvable ou invalide"
+
+msgctxt "#15301"
+msgid "Could not connect to network server"
+msgstr "Impossible de se connecter au serveur réseau"
+
+msgctxt "#15302"
+msgid "No servers found"
+msgstr "Aucun serveur trouvé"
+
+msgctxt "#15303"
+msgid "Workgroup not found"
+msgstr "Aucun groupe de travail trouvé"
+
+msgctxt "#15310"
+msgid "Opening multi-path source"
+msgstr "Ouverture d'une source multi-chemins"
+
+msgctxt "#15311"
+msgid "Path:"
+msgstr "Chemin :"
+
+msgctxt "#16000"
+msgid "General"
+msgstr "Général"
+
+msgctxt "#16002"
+msgid "Internet lookup"
+msgstr "Recherche internet"
+
+msgctxt "#16003"
+msgid "Player"
+msgstr "Lecteur"
+
+msgctxt "#16004"
+msgid "Play media from disc"
+msgstr "Lire les médias depuis le disque"
+
+msgctxt "#16008"
+msgid "Enter new title"
+msgstr "Saisir un nouveau titre"
+
+msgctxt "#16009"
+msgid "Enter the movie name"
+msgstr "Saisir le nom du film"
+
+msgctxt "#16010"
+msgid "Enter the profile name"
+msgstr "Saisir le nom du profil"
+
+msgctxt "#16011"
+msgid "Enter the album name"
+msgstr "Saisir le nom de l'album"
+
+msgctxt "#16012"
+msgid "Enter the playlist name"
+msgstr "Saisir le nom de la liste de lecture"
+
+msgctxt "#16013"
+msgid "Enter new filename"
+msgstr "Saisir le nouveau nom de fichier"
+
+msgctxt "#16014"
+msgid "Enter folder name"
+msgstr "Saisir le nom du dossier"
+
+msgctxt "#16015"
+msgid "Enter directory"
+msgstr "Saisir le répertoire"
+
+msgctxt "#16016"
+msgid "Available options: %A, %T, %N, %B, %D, %G, %Y, %F, %S"
+msgstr "Options disponibles : %A, %T, %N, %B, %D, %G, %Y, %F, %S"
+
+msgctxt "#16017"
+msgid "Enter search string"
+msgstr "Saisir la chaîne de recherche"
+
+msgctxt "#16018"
+msgid "None"
+msgstr "Aucun"
+
+msgctxt "#16019"
+msgid "Auto select"
+msgstr "Sélection automatique"
+
+msgctxt "#16020"
+msgid "De-interlace"
+msgstr "Désentrelacement"
+
+msgctxt "#16021"
+msgid "Bob"
+msgstr "Bob"
+
+msgctxt "#16022"
+msgid "Bob (inverted)"
+msgstr "Bob (inversé)"
+
+msgctxt "#16024"
+msgid "Cancelling..."
+msgstr "Annulation..."
+
+msgctxt "#16025"
+msgid "Enter the artist name"
+msgstr "Saisir le nom de l'artiste"
+
+msgctxt "#16026"
+msgid "Playback failed"
+msgstr "Échec de la lecture"
+
+msgctxt "#16027"
+msgid "One or more items failed to play."
+msgstr "Échec de la lecture d'un ou plusieurs éléments."
+
+msgctxt "#16028"
+msgid "Enter value"
+msgstr "Saisir une valeur"
+
+msgctxt "#16029"
+msgid "Check the log file for details."
+msgstr "Consulter le fichier journal pour plus de détails."
+
+msgctxt "#16030"
+msgid "Party mode aborted."
+msgstr "Mode fête interrompu."
+
+msgctxt "#16031"
+msgid "No matching songs in the library."
+msgstr "Aucun morceau correspondant dans la médiathèque."
+
+msgctxt "#16032"
+msgid "Could not initialise database."
+msgstr "Ne peut pas initialiser la base de données."
+
+msgctxt "#16033"
+msgid "Could not open database."
+msgstr "Impossible d'ouvrir la base de données."
+
+msgctxt "#16034"
+msgid "Could not get songs from database."
+msgstr "Impossible de récupérer les morceaux depuis la base de données."
+
+msgctxt "#16035"
+msgid "Party mode playlist"
+msgstr "Liste de lecture du mode fête"
+
+msgctxt "#16036"
+msgid "De-interlace (Half)"
+msgstr "Désentrelacement (moitié)"
+
+msgctxt "#16037"
+msgid "Deinterlace video"
+msgstr "Désentrelacement vidéo"
+
+msgctxt "#16038"
+msgid "Deinterlace method"
+msgstr "Méthode de désentrelacement"
+
+msgctxt "#16039"
+msgid "Off"
+msgstr "Arrêt"
+
+msgctxt "#16040"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#16041"
+msgid "On"
+msgstr "Marche"
+
+msgctxt "#16100"
+msgid "All Videos"
+msgstr "Toutes les vidéos"
+
+msgctxt "#16101"
+msgid "Unwatched"
+msgstr "Non vues"
+
+msgctxt "#16102"
+msgid "Watched"
+msgstr "Vues"
+
+msgctxt "#16103"
+msgid "Mark as watched"
+msgstr "Marquer comme vue"
+
+msgctxt "#16104"
+msgid "Mark as unwatched"
+msgstr "Marquer comme non vue"
+
+msgctxt "#16105"
+msgid "Edit title"
+msgstr "Modifier le titre"
+
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gérer..."
+
+msgctxt "#16107"
+msgid "Edit sort title"
+msgstr "Editer le tri sur le titre"
+
+msgctxt "#16200"
+msgid "Operation was aborted"
+msgstr "L'opération a été interrompue"
+
+msgctxt "#16201"
+msgid "Copy failed"
+msgstr "Échec de la copie"
+
+msgctxt "#16202"
+msgid "Failed to copy at least one file"
+msgstr "Échec de la copie d'un ou plusieurs fichiers"
+
+msgctxt "#16203"
+msgid "Move failed"
+msgstr "Échec du déplacement"
+
+msgctxt "#16204"
+msgid "Failed to move at least one file"
+msgstr "Échec du déplacement d'un ou plusieurs fichiers"
+
+msgctxt "#16205"
+msgid "Delete failed"
+msgstr "Échec de la suppression"
+
+msgctxt "#16206"
+msgid "Failed to delete at least one file"
+msgstr "Échec de la suppression d'un ou plusieurs fichiers"
+
+msgctxt "#16300"
+msgid "Video scaling method"
+msgstr "Méthode de mise à l'échelle vidéo"
+
+msgctxt "#16301"
+msgid "Nearest neighbour"
+msgstr "La plus proche"
+
+msgctxt "#16302"
+msgid "Bilinear"
+msgstr "Bilinéaire"
+
+msgctxt "#16303"
+msgid "Bicubic"
+msgstr "Bicubique"
+
+msgctxt "#16304"
+msgid "Lanczos2"
+msgstr "Lanczos2"
+
+msgctxt "#16305"
+msgid "Lanczos3"
+msgstr "Lanczos3"
+
+msgctxt "#16306"
+msgid "Sinc8"
+msgstr "Sinc8"
+
+msgctxt "#16307"
+msgid "Bicubic (software)"
+msgstr "Bicubique (logiciel)"
+
+msgctxt "#16308"
+msgid "Lanczos (software)"
+msgstr "Lanczos (logiciel)"
+
+msgctxt "#16309"
+msgid "Sinc (software)"
+msgstr "Sinc (logiciel)"
+
+msgctxt "#16310"
+msgid "Temporal"
+msgstr "Temporelle"
+
+msgctxt "#16311"
+msgid "Temporal/Spatial"
+msgstr "Temporelle/Spatiale"
+
+msgctxt "#16312"
+msgid "(VDPAU)Noise Reduction"
+msgstr "(VDPAU) Réduction de bruit"
+
+msgctxt "#16313"
+msgid "(VDPAU)Sharpness"
+msgstr "(VDPAU) Netteté"
+
+msgctxt "#16314"
+msgid "Inverse Telecine"
+msgstr "Téléciné inversé"
+
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Optimisation Lanczos3"
+
+msgctxt "#16316"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#16317"
+msgid "Temporal (Half)"
+msgstr "Temporelle (demie)"
+
+msgctxt "#16318"
+msgid "Temporal/Spatial (Half)"
+msgstr "Temporelle/Spatiale (demie)"
+
+msgctxt "#16319"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "#16320"
+msgid "DXVA Bob"
+msgstr "DXVA Bob"
+
+msgctxt "#16321"
+msgid "DXVA Best"
+msgstr "La meilleure DXVA"
+
+msgctxt "#16322"
+msgid "Spline36"
+msgstr "Spline36"
+
+msgctxt "#16323"
+msgid "Spline36 optimised"
+msgstr "Optimisation Spline36"
+
+msgctxt "#16324"
+msgid "Software Blend"
+msgstr "Mélange logiciel"
+
+msgctxt "#16325"
+msgid "VDPAU - Bob"
+msgstr "VDPAU - Bob"
+
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
+msgctxt "#16400"
+msgid "Post-processing"
+msgstr "Post-traitement"
+
+msgctxt "#17500"
+msgid "Display sleep timeout"
+msgstr "Afficher le délai de mise en veille"
+
+msgctxt "#17997"
+msgid "%i MByte"
+msgstr "%i Mo"
+
+msgctxt "#17998"
+msgid "%i hours"
+msgstr "%i heures"
+
+msgctxt "#17999"
+msgid "%i days"
+msgstr "%i jours"
+
+msgctxt "#19000"
+msgid "Switch to channel"
+msgstr "Changer de chaîne"
+
+msgctxt "#19001"
+msgid "Separate the search words by using AND, OR and/or NOT."
+msgstr "Séparer les mots recherchés par ET, OU et/ou PAS"
+
+msgctxt "#19002"
+msgid "or use phrases to find an exact match, like \"The wizard of Oz\"."
+msgstr "ou utiliser des phrases pour trouver une correspondance précise, comme « Le magicien d'Oz »."
+
+msgctxt "#19003"
+msgid "Find similar programs"
+msgstr "Trouver des programmes similaires"
+
+msgctxt "#19004"
+msgid "Importing EPG from clients"
+msgstr "Importation du GEP depuis les clients"
+
+msgctxt "#19005"
+msgid "PVR stream information"
+msgstr "Information du flux du magnétoscope numérique"
+
+msgctxt "#19006"
+msgid "Receiving device"
+msgstr "Périphérique de réception"
+
+msgctxt "#19007"
+msgid "Device status"
+msgstr "État du périphérique"
+
+msgctxt "#19008"
+msgid "Signal quality"
+msgstr "Qualité du signal"
+
+msgctxt "#19009"
+msgid "SNR"
+msgstr "Rapport signal bruit"
+
+msgctxt "#19010"
+msgid "BER"
+msgstr "Taux d'erreurs binaires"
+
+msgctxt "#19011"
+msgid "UNC"
+msgstr "UNC"
+
+msgctxt "#19012"
+msgid "PVR Backend"
+msgstr "Arrière-plan du magnétoscope numérique"
+
+msgctxt "#19013"
+msgid "Free to air"
+msgstr "À accès gratuit"
+
+msgctxt "#19014"
+msgid "Fixed"
+msgstr "Fixe"
+
+msgctxt "#19015"
+msgid "Encryption"
+msgstr "Chiffrement"
+
+msgctxt "#19016"
+msgid "PVR Backend %i - %s"
+msgstr "Arrière-plan du magnétoscope numérique %i - %s"
+
+msgctxt "#19017"
+msgid "TV recordings"
+msgstr "Enregistrements TV"
+
+msgctxt "#19019"
+msgid "Channels"
+msgstr "Chaînes"
+
+msgctxt "#19020"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19021"
+msgid "Radio"
+msgstr "Radio"
+
+msgctxt "#19022"
+msgid "Hidden"
+msgstr "Masqué"
+
+msgctxt "#19023"
+msgid "TV channels"
+msgstr "Chaînes TV"
+
+msgctxt "#19024"
+msgid "Radio channels"
+msgstr "Canaux radio"
+
+msgctxt "#19025"
+msgid "Upcoming recordings"
+msgstr "Enregistrements à venir"
+
+msgctxt "#19026"
+msgid "Add timer..."
+msgstr "Ajouter une minuterie..."
+
+msgctxt "#19027"
+msgid "No search results"
+msgstr "Aucun résultat de recherche"
+
+msgctxt "#19028"
+msgid "No EPG entries"
+msgstr "Aucune entrée dans le GEP"
+
+msgctxt "#19029"
+msgid "Channel"
+msgstr "Chaîne"
+
+msgctxt "#19030"
+msgid "Now"
+msgstr "Maintenant"
+
+msgctxt "#19031"
+msgid "Next"
+msgstr "Suivant"
+
+msgctxt "#19032"
+msgid "Timeline"
+msgstr "Chronologie"
+
+msgctxt "#19033"
+msgid "Information"
+msgstr "Informations"
+
+msgctxt "#19034"
+msgid "Already started recording on this channel"
+msgstr "Chaîne déjà en cours d'enregistrement"
+
+msgctxt "#19035"
+msgid "%s could not be played. Check the log for details."
+msgstr "%s n'a pas pu être joué. Consulter le journal pour plus de détails."
+
+msgctxt "#19036"
+msgid "This recording cannot be played. Check the log for details."
+msgstr "Cet enregistrement ne peut être lu. Consulter le journal pour plus de détails."
+
+msgctxt "#19037"
+msgid "Show signal quality"
+msgstr "Afficher la qualité du signal"
+
+msgctxt "#19038"
+msgid "Not supported by the PVR backend."
+msgstr "N'est pas pris en charge par l'arrière-plan du magnétoscope numérique."
+
+msgctxt "#19039"
+msgid "Are you sure you want to hide this channel?"
+msgstr "Êtes-vous sûr de vouloir masquer cette chaîne?"
+
+msgctxt "#19040"
+msgid "Timer"
+msgstr "Minuterie"
+
+msgctxt "#19041"
+msgid "Are you sure you want to rename this recording?"
+msgstr "Êtes-vous sûr de vouloir renommer cet enregistrement?"
+
+msgctxt "#19042"
+msgid "Are you sure you want to rename this timer?"
+msgstr "Voulez-vous vraiment renommer cette minuterie?"
+
+msgctxt "#19043"
+msgid "Recording"
+msgstr "Enregistrement"
+
+msgctxt "#19044"
+msgid "Please check your configuration or check the log for details."
+msgstr "Veuillez vérifier votre configuration ou consulter le journal pour plus de détails."
+
+msgctxt "#19045"
+msgid "No PVR clients have been started yet. Wait for the PVR clients to start up or check the log for details."
+msgstr "Aucun client de magnétoscope numérique n'a été démarré. Attendre le démarrage d'un client de magnétoscope numérique ou consulter le journal pour plus de détails."
+
+msgctxt "#19046"
+msgid "New channel"
+msgstr "Nouvelle chaîne"
+
+msgctxt "#19047"
+msgid "Programme info"
+msgstr "Informations du programme"
+
+msgctxt "#19048"
+msgid "Group management"
+msgstr "Gestion des groupes"
+
+msgctxt "#19049"
+msgid "Show channel"
+msgstr "Afficher la chaîne"
+
+msgctxt "#19050"
+msgid "Show visible channels"
+msgstr "Afficher les chaînes disponibles"
+
+msgctxt "#19051"
+msgid "Show hidden channels"
+msgstr "Afficher les chaînes masquées"
+
+msgctxt "#19052"
+msgid "Move channel to:"
+msgstr "Déplacer la chaîne vers :"
+
+msgctxt "#19053"
+msgid "Recording information"
+msgstr "Informations d'enregistrement"
+
+msgctxt "#19054"
+msgid "Hide channel"
+msgstr "Masquer la chaîne"
+
+msgctxt "#19055"
+msgid "No information available"
+msgstr "Aucune information disponible"
+
+msgctxt "#19056"
+msgid "New timer"
+msgstr "Nouvelle minuterie"
+
+msgctxt "#19057"
+msgid "Edit timer"
+msgstr "Modifier la minuterie"
+
+msgctxt "#19058"
+msgid "Timer enabled"
+msgstr "Minuterie activée"
+
+msgctxt "#19059"
+msgid "Stop recording"
+msgstr "Arrêter l'enregistrement"
+
+msgctxt "#19060"
+msgid "Delete timer"
+msgstr "Supprimer la minuterie"
+
+msgctxt "#19061"
+msgid "Add timer"
+msgstr "Ajouter une minuterie"
+
+msgctxt "#19062"
+msgid "Sort by: Channel"
+msgstr "Trier par : chaîne"
+
+msgctxt "#19063"
+msgid "Go to begin"
+msgstr "Aller au début"
+
+msgctxt "#19064"
+msgid "Go to end"
+msgstr "Aller à la fin"
+
+msgctxt "#19065"
+msgid "Default EPG window"
+msgstr "Fenêtre du GEP par défaut"
+
+msgctxt "#19067"
+msgid "This event is already being recorded."
+msgstr "Cet événement est déjà en cours d'enregistrement"
+
+msgctxt "#19068"
+msgid "This recording could not be deleted. Check the log for details."
+msgstr "Cet enregistrement ne peut pas être supprimé. Consulter le journal pour plus de détails."
+
+msgctxt "#19069"
+msgid "EPG"
+msgstr "Guide électronique des programmes"
+
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Aller maintenant"
+
+msgctxt "#19071"
+msgid "EPG update interval"
+msgstr "Intervalle de mise à jour du GEP"
+
+msgctxt "#19072"
+msgid "Do not store the EPG in the database"
+msgstr "Ne pas stocker le GEP dans la base de données"
+
+msgctxt "#19073"
+msgid "Delay channel switch"
+msgstr "Délai de changement de chaîne"
+
+msgctxt "#19074"
+msgid "Active:"
+msgstr "Actif :"
+
+msgctxt "#19075"
+msgid "Name:"
+msgstr "Nom :"
+
+msgctxt "#19076"
+msgid "Folder:"
+msgstr "Dossier :"
+
+msgctxt "#19077"
+msgid "Radio:"
+msgstr "Radio :"
+
+msgctxt "#19078"
+msgid "Channel:"
+msgstr "Chaîne :"
+
+msgctxt "#19079"
+msgid "Day:"
+msgstr "Jour :"
+
+msgctxt "#19080"
+msgid "Begin:"
+msgstr "Début :"
+
+msgctxt "#19081"
+msgid "End:"
+msgstr "Fin :"
+
+msgctxt "#19082"
+msgid "Priority:"
+msgstr "Priorité :"
+
+msgctxt "#19083"
+msgid "Lifetime (days):"
+msgstr "Durée de vie (jours) :"
+
+msgctxt "#19084"
+msgid "First day:"
+msgstr "Premier jour :"
+
+msgctxt "#19085"
+msgid "Unknown channel %u"
+msgstr "Chaîne inconnue %u"
+
+msgctxt "#19086"
+msgid "Mo-__-__-__-__-__-__"
+msgstr "Lun-___-___-___-___-___-___"
+
+msgctxt "#19087"
+msgid "__-Tu-__-__-__-__-__"
+msgstr "___-Mar-___-___-___-___-___"
+
+msgctxt "#19088"
+msgid "__-__-We-__-__-__-__"
+msgstr "___-___-Mer-___-___-___-___"
+
+msgctxt "#19089"
+msgid "__-__-__-Th-__-__-__"
+msgstr "___-___-___-Jeu-___-___-___"
+
+msgctxt "#19090"
+msgid "__-__-__-__-Fr-__-__"
+msgstr "___-___-___-___-Ven-___-___"
+
+msgctxt "#19091"
+msgid "__-__-__-__-__-Sa-__"
+msgstr "___-___-___-___-___-Sam-___"
+
+msgctxt "#19092"
+msgid "__-__-__-__-__-__-Su"
+msgstr "___-___-___-___-___-___-Dim"
+
+msgctxt "#19093"
+msgid "Mo-Tu-We-Th-Fr-__-__"
+msgstr "Lun-Mar-Mer-Jeu-Ven-___-___"
+
+msgctxt "#19094"
+msgid "Mo-Tu-We-Th-Fr-Sa-__"
+msgstr "Lun-Mar-Mer-Jeu-Ven-Sam-___"
+
+msgctxt "#19095"
+msgid "Mo-Tu-We-Th-Fr-Sa-Su"
+msgstr "Lun-Mar-Mer-Jeu-Ven-Sam-Dim"
+
+msgctxt "#19096"
+msgid "__-__-__-__-__-Sa-Su"
+msgstr "___-___-___-___-___-Sam-Dim"
+
+msgctxt "#19097"
+msgid "Enter the name for the recording"
+msgstr "Saisir le nom de l'enregistrement"
+
+msgctxt "#19098"
+msgid "Warning"
+msgstr "Avertissement"
+
+msgctxt "#19099"
+msgid "Service"
+msgstr "Service"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Fournisseur"
+
+msgctxt "#19102"
+msgid "Please switch to another channel."
+msgstr "Veuillez changer de chaîne."
+
+msgctxt "#19104"
+msgid "Enter the name of the folder for the recording"
+msgstr "Saisir le nom du dossier pour l'enregistrement"
+
+msgctxt "#19106"
+msgid "Next timer on"
+msgstr "Prochaine minuterie"
+
+msgctxt "#19107"
+msgid "at"
+msgstr "à"
+
+msgctxt "#19109"
+msgid "Couldn't save timer. Check the log for details."
+msgstr "Sauvegarde de la minuterie impossible. Consulter le journal pour plus de détails."
+
+msgctxt "#19110"
+msgid "An unexpected error occurred. Try again later or check the log for details."
+msgstr "Erreur inattendue inconnue. Ressayer ou consulter le journal pour plus de détails."
+
+msgctxt "#19111"
+msgid "PVR backend error. Check the log for details."
+msgstr "Erreur de l'arrière-plan du magnétoscope numérique Consulter le journal pour plus de détails."
+
+msgctxt "#19114"
+msgid "Version"
+msgstr "Version"
+
+msgctxt "#19115"
+msgid "Address"
+msgstr "Adresse"
+
+msgctxt "#19116"
+msgid "Disksize"
+msgstr "Taille du disque"
+
+msgctxt "#19117"
+msgid "Search for channels"
+msgstr "Rechercher des chaînes"
+
+msgctxt "#19118"
+msgid "Cannot use PVR functions while searching."
+msgstr "Impossible d'utiliser les fonctions du magnétoscope numérique pendant une recherche."
+
+msgctxt "#19119"
+msgid "On which server you want to search?"
+msgstr "Sur quel serveur voulez-vous chercher?"
+
+msgctxt "#19120"
+msgid "Client number"
+msgstr "Numéro client"
+
+msgctxt "#19121"
+msgid "Avoid repeats"
+msgstr "Éviter les répétitions"
+
+msgctxt "#19122"
+msgid "This timer is still recording. Are you sure you want to delete this timer?"
+msgstr "Cette minuterie enregistre encore. Êtes-vous sur de vouloir la supprimer?"
+
+msgctxt "#19123"
+msgid "Free to air channels only"
+msgstr "Chaînes à accès gratuit uniquement"
+
+msgctxt "#19124"
+msgid "Ignore present timers"
+msgstr "Ignorer les minuteries actuelles"
+
+msgctxt "#19125"
+msgid "Ignore present recordings"
+msgstr "Ignorer les enregistrements actuels"
+
+msgctxt "#19126"
+msgid "Start time"
+msgstr "Heure de début"
+
+msgctxt "#19127"
+msgid "End time"
+msgstr "Heure de fin"
+
+msgctxt "#19128"
+msgid "Start date"
+msgstr "Date de début"
+
+msgctxt "#19129"
+msgid "End date"
+msgstr "Date de fin"
+
+msgctxt "#19130"
+msgid "Minimum duration"
+msgstr "Durée minimum"
+
+msgctxt "#19131"
+msgid "Maximum duration"
+msgstr "Durée maximum"
+
+msgctxt "#19132"
+msgid "Include unknown genres"
+msgstr "Inclure les genres inconnus"
+
+msgctxt "#19133"
+msgid "Search string"
+msgstr "Chaîne de recherche"
+
+msgctxt "#19134"
+msgid "Include description"
+msgstr "Inclure la description"
+
+msgctxt "#19135"
+msgid "Case sensitive"
+msgstr "Sensible à la casse"
+
+msgctxt "#19136"
+msgid "Channel unavailable"
+msgstr "Chaîne non disponible"
+
+msgctxt "#19137"
+msgid "No groups defined"
+msgstr "Aucun groupe défini"
+
+msgctxt "#19138"
+msgid "Please create a group first"
+msgstr "Veuillez créer un groupe en premier"
+
+msgctxt "#19139"
+msgid "Name of the new group"
+msgstr "Nom du nouveau groupe"
+
+msgctxt "#19141"
+msgid "Group"
+msgstr "Groupe"
+
+msgctxt "#19142"
+msgid "Search guide"
+msgstr "Rechercher dans le guide"
+
+msgctxt "#19143"
+msgid "Group management"
+msgstr "Gestion des groupes"
+
+msgctxt "#19144"
+msgid "No groups defined"
+msgstr "Aucun groupe défini"
+
+msgctxt "#19145"
+msgid "Grouped"
+msgstr "Groupé"
+
+msgctxt "#19146"
+msgid "Groups"
+msgstr "Groupes"
+
+msgctxt "#19147"
+msgid "The PVR backend does not support this action. Check the log for details."
+msgstr "L'arrière-plan du magnétoscope numérique ne prend pas en charge cette action. Consulter le journal pour plus de détails."
+
+msgctxt "#19148"
+msgid "Channel"
+msgstr "Chaîne"
+
+msgctxt "#19149"
+msgid "Mo"
+msgstr "Lun"
+
+msgctxt "#19150"
+msgid "Tu"
+msgstr "Mar"
+
+msgctxt "#19151"
+msgid "We"
+msgstr "Mer"
+
+msgctxt "#19152"
+msgid "Th"
+msgstr "Jeu"
+
+msgctxt "#19153"
+msgid "Fr"
+msgstr "Ven"
+
+msgctxt "#19154"
+msgid "Sa"
+msgstr "Sam"
+
+msgctxt "#19155"
+msgid "Su"
+msgstr "Dim"
+
+msgctxt "#19156"
+msgid "from"
+msgstr "de"
+
+msgctxt "#19157"
+msgid "Next recording"
+msgstr "Enregistrement suivant"
+
+msgctxt "#19158"
+msgid "Currently recording"
+msgstr "Enregistre actuellement"
+
+msgctxt "#19159"
+msgid "from"
+msgstr "de"
+
+msgctxt "#19160"
+msgid "to"
+msgstr "vers"
+
+msgctxt "#19162"
+msgid "Recording active"
+msgstr "Enregistrement activé"
+
+msgctxt "#19163"
+msgid "Recordings"
+msgstr "Enregistrements"
+
+msgctxt "#19164"
+msgid "Cannot start recording. Check the log for details."
+msgstr "Impossible de commencer l'enregistrement. Consulter le journal pour plus de détails."
+
+msgctxt "#19165"
+msgid "Switch"
+msgstr "Changer"
+
+msgctxt "#19166"
+msgid "PVR information"
+msgstr "Informations du magnétoscope numérique"
+
+msgctxt "#19167"
+msgid "Scan for missing icons"
+msgstr "Rechercher des icônes manquantes"
+
+msgctxt "#19169"
+msgid "Hide video information box"
+msgstr "Cacher la boite d'information vidéo"
+
+msgctxt "#19170"
+msgid "Timeout when starting playback"
+msgstr "Délai au démarrage de la lecture"
+
+msgctxt "#19171"
+msgid "Start playback minimised"
+msgstr "Démarrer la lecture minimisé"
+
+msgctxt "#19172"
+msgid "Instant recording duration"
+msgstr "Durée d'enregistrement instantané"
+
+msgctxt "#19173"
+msgid "Default recording priority"
+msgstr "Priorité d'enregistrement par défaut"
+
+msgctxt "#19174"
+msgid "Default recording lifetime"
+msgstr "Durée de vie par défaut des enregistrements "
+
+msgctxt "#19175"
+msgid "Margin at the start of a recording"
+msgstr "Blanc en début d'enregistrement"
+
+msgctxt "#19176"
+msgid "Margin at the end of a recording"
+msgstr "Blanc en fin d'enregistrement"
+
+msgctxt "#19177"
+msgid "Playback"
+msgstr "Lecture"
+
+msgctxt "#19178"
+msgid "Show channel information when switching channels"
+msgstr "Afficher les informations sur la chaîne lors d'un changement"
+
+msgctxt "#19179"
+msgid "Automatically hide channel information"
+msgstr "Masquer automatiquement les informations sur la chaîne"
+
+msgctxt "#19180"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19181"
+msgid "Menu/OSD"
+msgstr "Menu/Affichage à l'écran"
+
+msgctxt "#19182"
+msgid "Days to display in the EPG"
+msgstr "Jours à afficher dans le GEP"
+
+msgctxt "#19184"
+msgid "Channel information duration"
+msgstr "Durée d'affichage des informations sur la chaîne"
+
+msgctxt "#19185"
+msgid "Reset the PVR database"
+msgstr "Réinitialisation de la base de données du magnétoscope numérique"
+
+msgctxt "#19186"
+msgid "All data in the PVR database is being erased"
+msgstr "Effacement en cours de la base de données de l'Enregistreur vidéo"
+
+msgctxt "#19187"
+msgid "Reset the EPG database"
+msgstr "Réinitialiser la base de données du GEP"
+
+msgctxt "#19188"
+msgid "EPG is being reset"
+msgstr "Réinitialisation du GEP"
+
+msgctxt "#19189"
+msgid "Continue last channel on startup"
+msgstr "Reprendre la dernière chaîne au démarrage"
+
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "Minimisé"
+
+msgctxt "#19191"
+msgid "PVR service"
+msgstr "Magnétoscope numérique"
+
+msgctxt "#19192"
+msgid "None of the connected PVR backends supports scanning for channels."
+msgstr "Aucun magnétoscope numérique connecté ne prend en charge le balayage des chaînes."
+
+msgctxt "#19193"
+msgid "The channel scan cannot be started. Check the log for details."
+msgstr "Impossible de démarrer le balayage des chaînes. Consulter le journal pour plus de détails."
+
+msgctxt "#19194"
+msgid "Continue?"
+msgstr "Continuer?"
+
+msgctxt "#19195"
+msgid "Client actions"
+msgstr "Actions du client"
+
+msgctxt "#19196"
+msgid "PVR client specific actions"
+msgstr "Actions spécifiques du client de magnétoscope numérique"
+
+msgctxt "#19197"
+msgid "Recording started on: %s"
+msgstr "Enregistrement démarré à : %s"
+
+msgctxt "#19198"
+msgid "Recording finished on: %s"
+msgstr "Enregistrement terminé à : %s"
+
+msgctxt "#19199"
+msgid "Channel manager"
+msgstr "Gestionnaire de chaînes"
+
+msgctxt "#19200"
+msgid "EPG source:"
+msgstr "Source du GEP :"
+
+msgctxt "#19201"
+msgid "Channel name:"
+msgstr "Nom de la chaîne :"
+
+msgctxt "#19202"
+msgid "Channel icon:"
+msgstr "Icône de la chaîne :"
+
+msgctxt "#19203"
+msgid "Edit channel"
+msgstr "Modifier la chaîne"
+
+msgctxt "#19204"
+msgid "New channel"
+msgstr "Nouvelle chaîne"
+
+msgctxt "#19205"
+msgid "Group management"
+msgstr "Gestion des groupes"
+
+msgctxt "#19206"
+msgid "Activate EPG:"
+msgstr "Activer le GEP :"
+
+msgctxt "#19207"
+msgid "Group:"
+msgstr "Groupe :"
+
+msgctxt "#19208"
+msgid "Enter the name of the new channel"
+msgstr "Saisir le nom de la nouvelle chaîne"
+
+msgctxt "#19209"
+msgid "XBMC virtual backend"
+msgstr "Arrière-plan virtuel XBMC"
+
+msgctxt "#19210"
+msgid "Client"
+msgstr "Client"
+
+msgctxt "#19211"
+msgid "Delete channel"
+msgstr "Supprimer la chaîne"
+
+msgctxt "#19212"
+msgid "This list contains changes"
+msgstr "Cette liste contient des changements"
+
+msgctxt "#19213"
+msgid "Select backend"
+msgstr "Choisir l'arrière-plan"
+
+msgctxt "#19214"
+msgid "Enter a valid URL for the new channel"
+msgstr "Saisir une URL valide pour la nouvelle chaîne"
+
+msgctxt "#19215"
+msgid "The PVR backend does not support timers."
+msgstr "L'arrière-plan du magnétoscope numérique ne gère pas les minuteries."
+
+msgctxt "#19216"
+msgid "All radio channels"
+msgstr "Toutes les chaînes radios"
+
+msgctxt "#19217"
+msgid "All TV channels"
+msgstr "Toutes les chaînes TV"
+
+msgctxt "#19218"
+msgid "Visible"
+msgstr "Visible"
+
+msgctxt "#19219"
+msgid "Ungrouped channels"
+msgstr "Chaînes non groupées"
+
+msgctxt "#19220"
+msgid "Channels in"
+msgstr "Chaînes dans"
+
+msgctxt "#19221"
+msgid "Synchronise channel groups with backends"
+msgstr "Synchroniser les groupes de chaînes avec les arrières-plan"
+
+msgctxt "#19222"
+msgid "EPG"
+msgstr "Guide électronique 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 interrompu"
+
+msgctxt "#19225"
+msgid "Recording scheduled"
+msgstr "Enregistrement programmé"
+
+msgctxt "#19226"
+msgid "Recording started"
+msgstr "Enregistrement démarré"
+
+msgctxt "#19227"
+msgid "Recording completed"
+msgstr "Enregistrement terminé"
+
+msgctxt "#19228"
+msgid "Recording deleted"
+msgstr "Enregistrement supprimé"
+
+msgctxt "#19229"
+msgid "Close channel OSD after switching channels"
+msgstr "Fermer l'affichage à l'écran de la chaîne après un changement"
+
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "Empêche les mises à jour du GEP durant la lecture"
+
+msgctxt "#19231"
+msgid "Always use the channel order from the backend(s)"
+msgstr "Toujours utiliser l'ordre des chaînes programmées à partir de l'arrière-plan"
+
+msgctxt "#19232"
+msgid "Clear search results"
+msgstr "Effacer les résultats de recherche"
+
+msgctxt "#19233"
+msgid "Display a notification on timer updates"
+msgstr "Afficher une notification lors de 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 de magnétoscope numériques"
+
+msgctxt "#19236"
+msgid "Loading channels from clients"
+msgstr "Chargement des chaînes depuis les clients"
+
+msgctxt "#19237"
+msgid "Loading timers from clients"
+msgstr "Chargement des minuteries depuis les clients"
+
+msgctxt "#19238"
+msgid "Loading recordings from clients"
+msgstr "Chargement des enregistrements depuis les clients"
+
+msgctxt "#19239"
+msgid "Starting background threads"
+msgstr "Démarrage des exétrons 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 de magnétoscope numérique 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 "afin d'utiliser la fonction de magnétoscope numérique."
+
+msgctxt "#19244"
+msgid "Backend idle time"
+msgstr "Délai d'inactivité de l'arrière-plan"
+
+msgctxt "#19245"
+msgid "Set wakeup command (cmd [timestamp])"
+msgstr "Définir la commande de réveil (cmd [timestamp])"
+
+msgctxt "#19246"
+msgid "Wakeup before recording"
+msgstr "Réveiller avant l'enregistrement"
+
+msgctxt "#19247"
+msgid "Daily wakeup"
+msgstr "Réveil journalier"
+
+msgctxt "#19248"
+msgid "Daily wakeup time (HH:MM:SS)"
+msgstr "Heure de réveil journalier (HH:MM:SS)"
+
+msgctxt "#19249"
+msgid "Filter channels"
+msgstr "Filtrer les chaînes"
+
+msgctxt "#19250"
+msgid "Loading EPG from database"
+msgstr "Chargement du GEP depuis la base de données"
+
+msgctxt "#19251"
+msgid "Update EPG information"
+msgstr "Mise à jour des informations du GEP"
+
+msgctxt "#19252"
+msgid "Schedule EPG update for this channel?"
+msgstr "Programmer la mise à jour du GEP pour cette chaîne?"
+
+msgctxt "#19253"
+msgid "EPG update scheduled for channel"
+msgstr "Mise à jour du GEP programmée pour cette chaîne"
+
+msgctxt "#19254"
+msgid "EPG update failed for channel"
+msgstr "Échec de la mise à jour du GEP pour cette chaîne"
+
+msgctxt "#19255"
+msgid "Start recording"
+msgstr "Démarrer l'enregistrement"
+
+msgctxt "#19256"
+msgid "Stop recording"
+msgstr "Arrêter d'enregistrer"
+
+msgctxt "#19257"
+msgid "Lock channel"
+msgstr "Verrouiller la chaîne"
+
+msgctxt "#19258"
+msgid "Unlock channel"
+msgstr "Déverrouiller la chaîne"
+
+msgctxt "#19259"
+msgid "Parental control"
+msgstr "Contrôle parental"
+
+msgctxt "#19260"
+msgid "Unlock duration"
+msgstr "Durée de verrouillage"
+
+msgctxt "#19261"
+msgid "Change PIN"
+msgstr "Changer le NIP"
+
+msgctxt "#19262"
+msgid "Parental control. Enter PIN:"
+msgstr "Contrôle parental. Saisir le NIP :"
+
+msgctxt "#19263"
+msgid "Locked channel. Enter PIN:"
+msgstr "Chaîne verrouillée. Saisir le NIP :"
+
+msgctxt "#19264"
+msgid "Incorrect PIN"
+msgstr "NIP Incorrect"
+
+msgctxt "#19265"
+msgid "The entered PIN number was incorrect."
+msgstr "Le NIP saisi était incorrect."
+
+msgctxt "#19266"
+msgid "Parental locked"
+msgstr "Verrouillage parental actif"
+
+msgctxt "#19267"
+msgid "Parental locked:"
+msgstr "Verrouillage parental actif :"
+
+msgctxt "#19268"
+msgid "Do not show 'no information available' labels"
+msgstr "Ne pas afficher les étiquettes « pas d'information disponible »"
+
+msgctxt "#19269"
+msgid "Do not show 'connection lost' warnings"
+msgstr "Ne pas afficher les avertissements « connexion perdue »"
+
+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 syntoniseur, d'un logiciel d'arrière-plan 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 "Veuillez visitez xbmc.org/pvr pour en savoir plus."
+
+msgctxt "#19275"
+msgid "Conflict warning"
+msgstr "Avertissement de conflit"
+
+msgctxt "#19276"
+msgid "Conflict error"
+msgstr "Erreur de conflit"
+
+msgctxt "#19277"
+msgid "Recording conflict"
+msgstr "Conflit d'enregistrement"
+
+msgctxt "#19278"
+msgid "Recording error"
+msgstr "Erreur d'enregistrement"
+
+msgctxt "#19279"
+msgid "Client specific"
+msgstr "Spécifique au client"
+
+msgctxt "#19280"
+msgid "Client specific settings"
+msgstr "Paramètres spécifiques au client"
+
+msgctxt "#19281"
+msgid "Confirm channel switches by pressing OK"
+msgstr "Confirmer le changement de chaîne en appuyant sur OK"
+
+msgctxt "#19499"
+msgid "Other/Unknown"
+msgstr "Autre/Inconnu"
+
+msgctxt "#19500"
+msgid "Movie/Drama"
+msgstr "Film/Drame"
+
+msgctxt "#19501"
+msgid "Detective/Thriller"
+msgstr "Policier/Film à sensation"
+
+msgctxt "#19502"
+msgid "Adventure/Western/War"
+msgstr "Aventure/Western/Guerre"
+
+msgctxt "#19503"
+msgid "Science Fiction/Fantasy/Horror"
+msgstr "Science Fiction/Fantastique/Horreur"
+
+msgctxt "#19504"
+msgid "Comedy"
+msgstr "Comédie"
+
+msgctxt "#19505"
+msgid "Soap/Melodrama/Folkloric"
+msgstr "Téléroman/Mélodrame/Folklore"
+
+msgctxt "#19506"
+msgid "Romance"
+msgstr "Romance"
+
+msgctxt "#19507"
+msgid "Serious/Classical/Religious/Historical Movie/Drama"
+msgstr "Sérieux/Classique/Religieux/Film historique/Drame"
+
+msgctxt "#19508"
+msgid "Adult Movie/Drama"
+msgstr "Film pour adulte/Drame"
+
+msgctxt "#19516"
+msgid "News/Current Affairs"
+msgstr "Actualités/Affaires courantes"
+
+msgctxt "#19517"
+msgid "News/Weather Report"
+msgstr "Actualités/Météo"
+
+msgctxt "#19518"
+msgid "News Magazine"
+msgstr "Magazine d'actualités"
+
+msgctxt "#19519"
+msgid "Documentary"
+msgstr "Documentaire"
+
+msgctxt "#19520"
+msgid "Discussion/Interview/Debate"
+msgstr "Discussion/Entrevue/Débat"
+
+msgctxt "#19532"
+msgid "Show/Game Show"
+msgstr "Spectacle/Jeu télévisé"
+
+msgctxt "#19533"
+msgid "Game Show/Quiz/Contest"
+msgstr "Jeu télévisé/Jeu-questionnaire/Concours"
+
+msgctxt "#19534"
+msgid "Variety Show"
+msgstr "Émission de variétés"
+
+msgctxt "#19535"
+msgid "Talk Show"
+msgstr "Émission-débat"
+
+msgctxt "#19548"
+msgid "Sports"
+msgstr "Sports"
+
+msgctxt "#19549"
+msgid "Special Event"
+msgstr "Événement spécial"
+
+msgctxt "#19550"
+msgid "Sport Magazine"
+msgstr "Magazine sportif"
+
+msgctxt "#19551"
+msgid "Football"
+msgstr "Soccer"
+
+msgctxt "#19552"
+msgid "Tennis/Squash"
+msgstr "Tennis/Squash"
+
+msgctxt "#19553"
+msgid "Team Sports"
+msgstr "Sports d'équipe"
+
+msgctxt "#19554"
+msgid "Athletics"
+msgstr "Athlétisme"
+
+msgctxt "#19555"
+msgid "Motor Sport"
+msgstr "Sport motorisé"
+
+msgctxt "#19556"
+msgid "Water Sport"
+msgstr "Sport nautique"
+
+msgctxt "#19557"
+msgid "Winter Sports"
+msgstr "Sport d'hiver"
+
+msgctxt "#19558"
+msgid "Equestrian"
+msgstr "Sport équestre"
+
+msgctxt "#19559"
+msgid "Martial Sports"
+msgstr "Arts martiaux"
+
+msgctxt "#19564"
+msgid "Children's/Youth Programmes"
+msgstr "Programmes jeunesse"
+
+msgctxt "#19565"
+msgid "Pre-school Children's Programmes"
+msgstr "Programmes préscolaires"
+
+msgctxt "#19566"
+msgid "Entertainment Programmes for 6 to 14"
+msgstr "Divertissements 6 à 14 ans"
+
+msgctxt "#19567"
+msgid "Entertainment Programmes for 10 to 16"
+msgstr "Divertissements 10 à 16 ans"
+
+msgctxt "#19568"
+msgid "Informational/Educational/School Programme"
+msgstr "Information/Éducation/Programmes éducatifs"
+
+msgctxt "#19569"
+msgid "Cartoons/Puppets"
+msgstr "Films d'animation/Marionnettes"
+
+msgctxt "#19580"
+msgid "Music/Ballet/Dance"
+msgstr "Musique/Ballet/Danse"
+
+msgctxt "#19581"
+msgid "Rock/Pop"
+msgstr "Rock/Pop"
+
+msgctxt "#19582"
+msgid "Serious/Classical Music"
+msgstr "Sérieux/Musique classique"
+
+msgctxt "#19583"
+msgid "Folk/Traditional Music"
+msgstr "Folk/Musique traditionnelle"
+
+msgctxt "#19584"
+msgid "Musical/Opera"
+msgstr "Comédie musicale/Opéra"
+
+msgctxt "#19585"
+msgid "Ballet"
+msgstr "Ballet"
+
+msgctxt "#19596"
+msgid "Arts/Culture"
+msgstr "Arts/Culture"
+
+msgctxt "#19597"
+msgid "Performing Arts"
+msgstr "Arts du spectacle"
+
+msgctxt "#19598"
+msgid "Fine Arts"
+msgstr "Beaux-arts"
+
+msgctxt "#19599"
+msgid "Religion"
+msgstr "Religion"
+
+msgctxt "#19600"
+msgid "Popular Culture/Traditional Arts"
+msgstr "Culture populaire/Arts traditionnels"
+
+msgctxt "#19601"
+msgid "Literature"
+msgstr "Littérature"
+
+msgctxt "#19602"
+msgid "Film/Cinema"
+msgstr "Film/Cinéma"
+
+msgctxt "#19603"
+msgid "Experimental Film/Video"
+msgstr "Film expérimental/Vidéo"
+
+msgctxt "#19604"
+msgid "Broadcasting/Press"
+msgstr "Télédiffusion/Presse"
+
+msgctxt "#19605"
+msgid "New Media"
+msgstr "Nouveau média"
+
+msgctxt "#19606"
+msgid "Arts/Culture Magazines"
+msgstr "Arts/Magazines culturels"
+
+msgctxt "#19607"
+msgid "Fashion"
+msgstr "Mode"
+
+msgctxt "#19612"
+msgid "Social/Political/Economics"
+msgstr "Social/Politique/Économie"
+
+msgctxt "#19613"
+msgid "Magazines/Reports/Documentary"
+msgstr "Magazines/Reportages/Documentaires"
+
+msgctxt "#19614"
+msgid "Economics/Social Advisory"
+msgstr "Économie/Conseils sociaux"
+
+msgctxt "#19615"
+msgid "Remarkable People"
+msgstr "Personnes remarquables"
+
+msgctxt "#19628"
+msgid "Education/Science/Factual"
+msgstr "Éducation/Science/Factuel"
+
+msgctxt "#19629"
+msgid "Nature/Animals/Environment"
+msgstr "Nature/Animaux/Environnement"
+
+msgctxt "#19630"
+msgid "Technology/Natural Sciences"
+msgstr "Technologie/Sciences naturelles"
+
+msgctxt "#19631"
+msgid "Medicine/Physiology/Psychology"
+msgstr "Médecine/Physiologie/Psychologie"
+
+msgctxt "#19632"
+msgid "Foreign Countries/Expeditions"
+msgstr "Pays Étrangers/Expéditions"
+
+msgctxt "#19633"
+msgid "Social/Spiritual Sciences"
+msgstr "Social/Sciences spirituelles"
+
+msgctxt "#19634"
+msgid "Further Education"
+msgstr "Formation continue"
+
+msgctxt "#19635"
+msgid "Languages"
+msgstr "Langues"
+
+msgctxt "#19644"
+msgid "Leisure/Hobbies"
+msgstr "Loisirs/Passe-temps"
+
+msgctxt "#19645"
+msgid "Tourism/Travel"
+msgstr "Tourisme/Voyage"
+
+msgctxt "#19646"
+msgid "Handicraft"
+msgstr "Bricolage"
+
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Automobile"
+
+msgctxt "#19648"
+msgid "Fitness &amp; Health"
+msgstr "Conditionnement physique et santé"
+
+msgctxt "#19649"
+msgid "Cooking"
+msgstr "Cuisine"
+
+msgctxt "#19650"
+msgid "Advertisement/Shopping"
+msgstr "Publicité/Magasinage"
+
+msgctxt "#19651"
+msgid "Gardening"
+msgstr "Jardinage"
+
+msgctxt "#19660"
+msgid "Special Characteristics"
+msgstr "Caractéristiques spéciales"
+
+msgctxt "#19661"
+msgid "Original Language"
+msgstr "Langue d'origine"
+
+msgctxt "#19662"
+msgid "Black &amp; White"
+msgstr "Noir et blanc"
+
+msgctxt "#19663"
+msgid "Unpublished"
+msgstr "Non publié"
+
+msgctxt "#19664"
+msgid "Live Broadcast"
+msgstr "Diffusion en direct"
+
+msgctxt "#19676"
+msgid "Drama"
+msgstr "Drame"
+
+msgctxt "#19677"
+msgid "Detective/Thriller"
+msgstr "Policier/Film à sensations"
+
+msgctxt "#19678"
+msgid "Adventure/Western/War"
+msgstr "Aventure/Western/Guerre"
+
+msgctxt "#19679"
+msgid "Science Fiction/Fantasy/Horror"
+msgstr "Science Fiction/Fantastique/Horreur"
+
+msgctxt "#19680"
+msgid "Comedy"
+msgstr "Comédie"
+
+msgctxt "#19681"
+msgid "Soap/Melodrama/Folkloric"
+msgstr "Téléroman/Mélodrame/Folklore"
+
+msgctxt "#19682"
+msgid "Romance"
+msgstr "Romance"
+
+msgctxt "#19683"
+msgid "Serious/ClassicalReligion/Historical"
+msgstr "Sérieux/Religieux/Histoire"
+
+msgctxt "#19684"
+msgid "Adult"
+msgstr "Adulte"
+
+msgctxt "#20000"
+msgid "Saved music folder"
+msgstr "Dossier des enregistrements musicaux"
+
+msgctxt "#20001"
+msgid "Use external DVD player"
+msgstr "Utiliser un lecteur DVD externe"
+
+msgctxt "#20002"
+msgid "External DVD player"
+msgstr "Lecteur DVD externe"
+
+msgctxt "#20003"
+msgid "Trainers folder"
+msgstr "Dossier des trainers"
+
+msgctxt "#20004"
+msgid "Screenshot folder"
+msgstr "Dossier des captures d'écran"
+
+msgctxt "#20006"
+msgid "Playlists folder"
+msgstr "Dossier des listes de lecture"
+
+msgctxt "#20007"
+msgid "Recordings"
+msgstr "Enregistrements"
+
+msgctxt "#20008"
+msgid "Screenshots"
+msgstr "Captures d'écran"
+
+msgctxt "#20009"
+msgid "Use XBMC"
+msgstr "Utiliser XBMC"
+
+msgctxt "#20011"
+msgid "Music playlists"
+msgstr "Liste de lectures musicales"
+
+msgctxt "#20012"
+msgid "Video playlists"
+msgstr "Liste de lectures vidéo"
+
+msgctxt "#20013"
+msgid "Do you wish to launch the game?"
+msgstr "Voulez-vous exécuter le jeu?"
+
+msgctxt "#20014"
+msgid "Sort by: Playlist"
+msgstr "Trier par : liste de lecture"
+
+msgctxt "#20015"
+msgid "Remote thumb"
+msgstr "Distante"
+
+msgctxt "#20016"
+msgid "Current thumb"
+msgstr "Actuelle"
+
+msgctxt "#20017"
+msgid "Local thumb"
+msgstr "Locale"
+
+msgctxt "#20018"
+msgid "No thumb"
+msgstr "Aucune"
+
+msgctxt "#20019"
+msgid "Choose thumbnail"
+msgstr "Choisir une imagette"
+
+msgctxt "#20023"
+msgid "Conflict"
+msgstr "Conflit"
+
+msgctxt "#20024"
+msgid "Scan new"
+msgstr "Balayer les nouveaux"
+
+msgctxt "#20025"
+msgid "Scan all"
+msgstr "Tout balayer"
+
+msgctxt "#20026"
+msgid "Region"
+msgstr "Région"
+
+msgctxt "#20037"
+msgid "Summary"
+msgstr "Sommaire"
+
+msgctxt "#20038"
+msgid "Lock music window"
+msgstr "Verrouiller la fenêtre Musique"
+
+msgctxt "#20039"
+msgid "Lock videos window"
+msgstr "Verrouiller la fenêtre Vidéos"
+
+msgctxt "#20040"
+msgid "Lock pictures window"
+msgstr "Verrouiller la fenêtre Images"
+
+msgctxt "#20041"
+msgid "Lock programs & scripts windows"
+msgstr "Verrouiller la fenêtre Programmes & Scripts"
+
+msgctxt "#20042"
+msgid "Lock file manager"
+msgstr "Verrouiller le gestionnaire de fichiers"
+
+msgctxt "#20043"
+msgid "Lock settings"
+msgstr "Verrouiller les paramètres"
+
+msgctxt "#20044"
+msgid "Start fresh"
+msgstr "Nouvelle configuration"
+
+msgctxt "#20045"
+msgid "Enter master mode"
+msgstr "Entrer en mode maître"
+
+msgctxt "#20046"
+msgid "Leave master mode"
+msgstr "Sortir du mode maître"
+
+msgctxt "#20047"
+msgid "Create profile '%s'?"
+msgstr "Créer le profil « %s »?"
+
+msgctxt "#20048"
+msgid "Start with fresh settings"
+msgstr "Démarrer avec de nouveaux paramètres"
+
+msgctxt "#20049"
+msgid "Best available"
+msgstr "La meilleure disponible"
+
+msgctxt "#20050"
+msgid "Auto-switch between 16x9 and 4x3"
+msgstr "Auto-basculer entre 16x9 et 4x3"
+
+msgctxt "#20051"
+msgid "Treat stacked files as single file"
+msgstr "Traiter les fichiers empilés comme un seul fichier"
+
+msgctxt "#20052"
+msgid "Caution"
+msgstr "Attention"
+
+msgctxt "#20053"
+msgid "Left master mode"
+msgstr "Vous avez quittez le mode maître"
+
+msgctxt "#20054"
+msgid "Entered master mode"
+msgstr "Vous êtes entré en mode maître"
+
+msgctxt "#20055"
+msgid "Allmusic.com thumb"
+msgstr "Imagette Allmusic.com"
+
+msgctxt "#20057"
+msgid "Remove thumbnail"
+msgstr "Enlever l'imagette"
+
+msgctxt "#20058"
+msgid "Add profile..."
+msgstr "Ajouter un profil..."
+
+msgctxt "#20059"
+msgid "Query info for all albums"
+msgstr "Demander les Informations pour tous les albums"
+
+msgctxt "#20060"
+msgid "Media info"
+msgstr "Informations du média"
+
+msgctxt "#20061"
+msgid "Separate"
+msgstr "Séparé"
+
+msgctxt "#20062"
+msgid "Shares with default"
+msgstr "Partages par défaut"
+
+msgctxt "#20063"
+msgid "Shares with default (read only)"
+msgstr "Partages par défaut (lect. seule)"
+
+msgctxt "#20064"
+msgid "Copy default"
+msgstr "Copier « par défaut »"
+
+msgctxt "#20065"
+msgid "Profile picture"
+msgstr "Image du profil"
+
+msgctxt "#20066"
+msgid "Lock preferences"
+msgstr "Verrouiller les préférences"
+
+msgctxt "#20067"
+msgid "Edit profile"
+msgstr "Modifier le profil"
+
+msgctxt "#20068"
+msgid "Profile lock"
+msgstr "Verrouiller le profil"
+
+msgctxt "#20069"
+msgid "Could not create folder"
+msgstr "Impossible de créer le dossier"
+
+msgctxt "#20070"
+msgid "Profile directory"
+msgstr "Répertoire du profil"
+
+msgctxt "#20071"
+msgid "Start with fresh media sources"
+msgstr "Démarrer avec de nouvelles sources média"
+
+msgctxt "#20072"
+msgid "Make sure the selected folder is writable"
+msgstr "Vérifier que l'écriture est possible dans le dossier choisi"
+
+msgctxt "#20073"
+msgid "and that the new folder name is valid"
+msgstr "et que le nom du nouveau dossier est valide"
+
+msgctxt "#20074"
+msgid "MPAA rating"
+msgstr "Évaluation MPAA"
+
+msgctxt "#20075"
+msgid "Enter master lock code"
+msgstr "Saisir le code du verrou maître"
+
+msgctxt "#20076"
+msgid "Ask for master lock code on startup"
+msgstr "Demander le code du verrou maître au démarrage"
+
+msgctxt "#20077"
+msgid "Skin settings"
+msgstr "Paramètres d'habillage"
+
+msgctxt "#20078"
+msgid "- no link set -"
+msgstr "- pas de lien -"
+
+msgctxt "#20079"
+msgid "Enable animations"
+msgstr "Activer les animations"
+
+msgctxt "#20080"
+msgid "Disable RSS during music"
+msgstr "Désactiver le flux RSS pendant la musique"
+
+msgctxt "#20081"
+msgid "Enable shortcut buttons"
+msgstr "Activer les boutons de raccourcis"
+
+msgctxt "#20082"
+msgid "Show programs in main menu"
+msgstr "Afficher les programmes dans le menu principal"
+
+msgctxt "#20083"
+msgid "Show music info"
+msgstr "Afficher les Informations sur la musique"
+
+msgctxt "#20084"
+msgid "Show weather info"
+msgstr "Afficher les Informations sur la météo"
+
+msgctxt "#20085"
+msgid "Show system info"
+msgstr "Afficher les Informations sur le système"
+
+msgctxt "#20086"
+msgid "Show available disk space C: E: F:"
+msgstr "Afficher l'espace disque disponible C: E: F:"
+
+msgctxt "#20087"
+msgid "Show available disk space E: F: G:"
+msgstr "Afficher l'espace disque disponible E: F: G:"
+
+msgctxt "#20088"
+msgid "Weather info"
+msgstr "Informations météo"
+
+msgctxt "#20089"
+msgid "Drive space free"
+msgstr "Espace disque libre"
+
+msgctxt "#20090"
+msgid "Enter the name of an existing share"
+msgstr "Saisir le nom d'un partage existant"
+
+msgctxt "#20091"
+msgid "Lock code"
+msgstr "Code de verrouillage"
+
+msgctxt "#20092"
+msgid "Load profile"
+msgstr "Charger un profil"
+
+msgctxt "#20093"
+msgid "Profile name"
+msgstr "Nom du profil"
+
+msgctxt "#20094"
+msgid "Media sources"
+msgstr "Sources des médias"
+
+msgctxt "#20095"
+msgid "Enter profile lock code"
+msgstr "Indiquer le code de verrouillage du profil"
+
+msgctxt "#20096"
+msgid "Login screen"
+msgstr "Écran de connexion"
+
+msgctxt "#20097"
+msgid "Fetching album info"
+msgstr "Récupération des informations de l'album"
+
+msgctxt "#20098"
+msgid "Fetching info for album"
+msgstr "Récupération des informations de l'album"
+
+msgctxt "#20099"
+msgid "Can't rip CD or track while playing from CD"
+msgstr "Impossible d'extraire le CD ou la piste pendant la lecture du CD"
+
+msgctxt "#20100"
+msgid "Master lock code and settings"
+msgstr "Code de verrouillage et paramètres maître"
+
+msgctxt "#20101"
+msgid "Entering master lock code always enables master mode"
+msgstr "Saisir un code de verrouillage maître active toujours le mode maître"
+
+msgctxt "#20102"
+msgid "or copy from default?"
+msgstr "ou copier celle(s) définie(s) par défaut?"
+
+msgctxt "#20103"
+msgid "Save changes to profile?"
+msgstr "Enregistrer les changements du profil?"
+
+msgctxt "#20104"
+msgid "Old settings found."
+msgstr "Anciens paramètres trouvés."
+
+msgctxt "#20105"
+msgid "Do you want to use them?"
+msgstr "Voulez-vous les utiliser?"
+
+msgctxt "#20106"
+msgid "Old media sources found."
+msgstr "Anciennes sources médias trouvées."
+
+msgctxt "#20107"
+msgid "Separate (locked)"
+msgstr "Séparé (verrouillé)"
+
+msgctxt "#20108"
+msgid "Root"
+msgstr "Racine"
+
+msgctxt "#20109"
+msgid "Zoom"
+msgstr "Zoom"
+
+msgctxt "#20110"
+msgid "UPnP settings"
+msgstr "Paramètres UPnP"
+
+msgctxt "#20111"
+msgid "Autostart UPnP client"
+msgstr "Autodémarrage du client UPnP"
+
+msgctxt "#20112"
+msgid "Last login: %s"
+msgstr "Dernière connexion : %s"
+
+msgctxt "#20113"
+msgid "Never logged on"
+msgstr "jamais connecté"
+
+msgctxt "#20114"
+msgid "Profile %i / %i"
+msgstr "Profil %i / %i"
+
+msgctxt "#20115"
+msgid "User login / Select a profile"
+msgstr "Connexion utilisateur / Choisir un profil"
+
+msgctxt "#20116"
+msgid "Use lock on login screen"
+msgstr "Utiliser le verrouillage de l'écran de connexion"
+
+msgctxt "#20117"
+msgid "Invalid lock code."
+msgstr "Code de verrouillage invalide."
+
+msgctxt "#20118"
+msgid "This requires the master lock to be set."
+msgstr "Ceci exige que le code maître soit défini."
+
+msgctxt "#20119"
+msgid "Would you like to set it now?"
+msgstr "Voulez-vous le définir maintenant?"
+
+msgctxt "#20120"
+msgid "Loading program information"
+msgstr "Chargement des informations du programme"
+
+msgctxt "#20121"
+msgid "Party on!"
+msgstr "C'est l'parté!"
+
+msgctxt "#20122"
+msgid "True"
+msgstr "Vrai"
+
+msgctxt "#20123"
+msgid "Mixing drinks"
+msgstr "Mélange des boissons"
+
+msgctxt "#20124"
+msgid "Filling glasses"
+msgstr "Remplissage des verres"
+
+msgctxt "#20125"
+msgid "Logged on as"
+msgstr "Connecté en tant que"
+
+msgctxt "#20126"
+msgid "Log off"
+msgstr "Déconnexion"
+
+msgctxt "#20128"
+msgid "Go to root"
+msgstr "Aller à la racine"
+
+msgctxt "#20129"
+msgid "Weave"
+msgstr "Trame"
+
+msgctxt "#20130"
+msgid "Weave (inverted)"
+msgstr "Trame (inversé)"
+
+msgctxt "#20131"
+msgid "Blend"
+msgstr "Mélange"
+
+msgctxt "#20132"
+msgid "Restart video"
+msgstr "Redémarrer la vidéo"
+
+msgctxt "#20133"
+msgid "Edit network location"
+msgstr "Modifier l'emplacement réseau"
+
+msgctxt "#20134"
+msgid "Remove network location"
+msgstr "Enlever l'emplacement réseau"
+
+msgctxt "#20135"
+msgid "Do you want to scan the folder?"
+msgstr "Voulez-vous balayer le dossier?"
+
+msgctxt "#20136"
+msgid "Memory unit"
+msgstr "Unité mémoire"
+
+msgctxt "#20137"
+msgid "Memory unit mounted"
+msgstr "Unité mémoire montée"
+
+msgctxt "#20138"
+msgid "Unable to mount memory unit"
+msgstr "Impossible de monter l'unité mémoire"
+
+msgctxt "#20139"
+msgid "In port %i, slot %i"
+msgstr "Dans le port %i, emplacement %i"
+
+msgctxt "#20140"
+msgid "Lock screensaver"
+msgstr "Verrouiller l'économiseur d'écran"
+
+msgctxt "#20141"
+msgid "Set"
+msgstr "Choisir"
+
+msgctxt "#20142"
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+msgctxt "#20143"
+msgid "Enter password for"
+msgstr "Saisir le mot de passe pour"
+
+msgctxt "#20144"
+msgid "Shutdown timer"
+msgstr "Minuteur d'extinction"
+
+msgctxt "#20145"
+msgid "Shutdown interval (in minutes)"
+msgstr "Intervalle de fermeture (en minutes)"
+
+msgctxt "#20146"
+msgid "Started, shutdown in %im"
+msgstr "Démarré, extinction dans %im"
+
+msgctxt "#20147"
+msgid "Shutdown in 30 minutes"
+msgstr "Extinction dans 30 minutes"
+
+msgctxt "#20148"
+msgid "Shutdown in 60 minutes"
+msgstr "Extinction dans 60 minutes"
+
+msgctxt "#20149"
+msgid "Shutdown in 120 minutes"
+msgstr "Extinction dans 120 minutes"
+
+msgctxt "#20150"
+msgid "Custom shutdown timer"
+msgstr "Minuteur d'extinction personnalisé"
+
+msgctxt "#20151"
+msgid "Cancel shutdown timer"
+msgstr "Annuler le minuteur d'extinction"
+
+msgctxt "#20152"
+msgid "Lock preferences for %s"
+msgstr "Verrouiller les préférences pour %s"
+
+msgctxt "#20153"
+msgid "Browse..."
+msgstr "Parcourir..."
+
+msgctxt "#20154"
+msgid "Summary information"
+msgstr "informations sommaires"
+
+msgctxt "#20155"
+msgid "Storage information"
+msgstr "Informations de stockage"
+
+msgctxt "#20156"
+msgid "Hard disk information"
+msgstr "Informations du disque dur"
+
+msgctxt "#20157"
+msgid "DVD-ROM information"
+msgstr "Informations du DVD-ROM"
+
+msgctxt "#20158"
+msgid "Network information"
+msgstr "Informations du réseau"
+
+msgctxt "#20159"
+msgid "Video information"
+msgstr "Informations de la vidéo"
+
+msgctxt "#20160"
+msgid "Hardware information"
+msgstr "Informations du matériel"
+
+msgctxt "#20161"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "#20162"
+msgid "Used"
+msgstr "Utilisé"
+
+msgctxt "#20163"
+msgid "of"
+msgstr "sur"
+
+msgctxt "#20164"
+msgid "Locking not supported"
+msgstr "Le verrouillage n'est pas pris en charge"
+
+msgctxt "#20165"
+msgid "Not locked"
+msgstr "Non verrouillé"
+
+msgctxt "#20166"
+msgid "Locked"
+msgstr "Verrouillé"
+
+msgctxt "#20167"
+msgid "Frozen"
+msgstr "Gelé"
+
+msgctxt "#20168"
+msgid "Requires reset"
+msgstr "Nécessite une réinitialisation"
+
+msgctxt "#20169"
+msgid "Week"
+msgstr "Semaine"
+
+msgctxt "#20170"
+msgid "Line"
+msgstr "Ligne"
+
+msgctxt "#20171"
+msgid "Windows network (SMB)"
+msgstr "Réseau Windows (SMB)"
+
+msgctxt "#20172"
+msgid "XBMSP server"
+msgstr "Serveur XBMSP"
+
+msgctxt "#20173"
+msgid "FTP server"
+msgstr "Serveur FTP"
+
+msgctxt "#20174"
+msgid "iTunes music share (DAAP)"
+msgstr "Partage musical iTunes (DAAP)"
+
+msgctxt "#20175"
+msgid "UPnP server"
+msgstr "Serveur UPnP"
+
+msgctxt "#20176"
+msgid "Show video info"
+msgstr "Afficher les infos de la vidéo"
+
+msgctxt "#20177"
+msgid "Done"
+msgstr "Terminé"
+
+msgctxt "#20178"
+msgid "Shift"
+msgstr "Majuscule"
+
+msgctxt "#20179"
+msgid "Caps Lock"
+msgstr "Verrouillage des majuscules"
+
+msgctxt "#20180"
+msgid "Symbols"
+msgstr "Symboles"
+
+msgctxt "#20181"
+msgid "Backspace"
+msgstr "Retour arrière"
+
+msgctxt "#20182"
+msgid "Space"
+msgstr "Espace"
+
+msgctxt "#20183"
+msgid "Reload skin"
+msgstr "Recharger l'habillage"
+
+msgctxt "#20184"
+msgid "Rotate pictures using EXIF information"
+msgstr "Pivoter les images en utilisant les infos EXIF"
+
+msgctxt "#20185"
+msgid "Use poster view styles for TV shows"
+msgstr "Utiliser la vue Affiche pour les émissions de télévision "
+
+msgctxt "#20186"
+msgid "Please wait"
+msgstr "Veuillez patienter"
+
+msgctxt "#20187"
+msgid "UPnP"
+msgstr "UPnP"
+
+msgctxt "#20188"
+msgid "Announce library updates via UPnP"
+msgstr "Annoncer les mises à jour de la médiathèque par UPnP"
+
+msgctxt "#20189"
+msgid "Enable auto scrolling for plot & review"
+msgstr "Activer le défilement automatique des intrigues & critiques"
+
+msgctxt "#20190"
+msgid "Custom"
+msgstr "Personnalisé"
+
+msgctxt "#20191"
+msgid "Enable debug logging"
+msgstr "Activer le mode de débogage"
+
+msgctxt "#20192"
+msgid "Download additional information during updates"
+msgstr "Télécharger des infos supplémentaires lors des mises à jour"
+
+msgctxt "#20193"
+msgid "Default service for album information"
+msgstr "Service d'informations par défaut pour les albums"
+
+msgctxt "#20194"
+msgid "Default service for artist information"
+msgstr "Service d'informations par défaut pour les artistes"
+
+msgctxt "#20195"
+msgid "Change scraper"
+msgstr "Changer le récupérateur"
+
+msgctxt "#20196"
+msgid "Export music library"
+msgstr "Exporter la médiathèque musicale"
+
+msgctxt "#20197"
+msgid "Import music library"
+msgstr "Importer une médiathèque musicale"
+
+msgctxt "#20198"
+msgid "No artist found!"
+msgstr "Aucun artiste trouvé!"
+
+msgctxt "#20199"
+msgid "Downloading artist info failed"
+msgstr "Échec du téléchargement des infos sur l'artiste"
+
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Écraser les balises des pièces par les informations en ligne"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Un fois activé, toute information téléchargée pour les albums et les artistes écrasera tout le contenu des balises, tel que genre, année, artiste, etc... Utile si vous avez des identifiants MusicBrainz dans vos balises."
+
+msgctxt "#20240"
+msgid "Android music"
+msgstr "Musique Android"
+
+msgctxt "#20241"
+msgid "Android videos"
+msgstr "Vidéos Android"
+
+msgctxt "#20242"
+msgid "Android pictures"
+msgstr "Images Android"
+
+msgctxt "#20243"
+msgid "Android photos"
+msgstr "Photos Android"
+
+msgctxt "#20244"
+msgid "Android Apps"
+msgstr "Applis Android"
+
+msgctxt "#20250"
+msgid "Party on! (videos)"
+msgstr "C'est l'parté! (vidéos)"
+
+msgctxt "#20251"
+msgid "Mixing drinks (videos)"
+msgstr "Mélange des boissons (vidéos)"
+
+msgctxt "#20252"
+msgid "Filling glasses (videos)"
+msgstr "Remplissage des verres (vidéos)"
+
+msgctxt "#20253"
+msgid "WebDAV server (HTTP)"
+msgstr "Serveur WebDAV (HTTP)"
+
+msgctxt "#20254"
+msgid "WebDAV server (HTTPS)"
+msgstr "Serveur WebDAV (HTTPS)"
+
+msgctxt "#20255"
+msgid "First logon, edit your profile"
+msgstr "Première connexion, modifier votre profil"
+
+msgctxt "#20256"
+msgid "HTS Tvheadend client"
+msgstr "Client HTS Tvheadend"
+
+msgctxt "#20257"
+msgid "VDR Streamdev client"
+msgstr "Client VDR Streamdev"
+
+msgctxt "#20258"
+msgid "MythTV client"
+msgstr "Client MythTV"
+
+msgctxt "#20259"
+msgid "Network Filesystem (NFS)"
+msgstr "Système de fichiers réseau (NFS)"
+
+msgctxt "#20260"
+msgid "Secure Shell (SSH/SFTP)"
+msgstr "Interface système sécurisée (SSH/SFTP)"
+
+msgctxt "#20261"
+msgid "Apple Filing Protocol (AFP)"
+msgstr "Protocole de fichiers Apple (AFP)"
+
+msgctxt "#20300"
+msgid "Web server directory (HTTP)"
+msgstr "Répertoire du serveur Web (HTTP)"
+
+msgctxt "#20301"
+msgid "Web server directory (HTTPS)"
+msgstr "Répertoire du serveur Web (HTTPS)"
+
+msgctxt "#20302"
+msgid "Unable to write to folder:"
+msgstr "Impossible d'écrire dans le dossier :"
+
+msgctxt "#20303"
+msgid "Do you want to skip and proceed?"
+msgstr "Voulez-vous passer et continuer?"
+
+msgctxt "#20304"
+msgid "RSS Feed"
+msgstr "Flux RSS"
+
+msgctxt "#20307"
+msgid "Secondary DNS"
+msgstr "DNS secondaire"
+
+msgctxt "#20308"
+msgid "DHCP server:"
+msgstr "Serveur DHCP :"
+
+msgctxt "#20309"
+msgid "Make new folder"
+msgstr "Créer un nouveau dossier"
+
+msgctxt "#20311"
+msgid "Unknown or onboard (protected)"
+msgstr "Inconnu ou embarqué (protégé)"
+
+msgctxt "#20314"
+msgid "Videos - Library"
+msgstr "Vidéos - Médiathèque"
+
+msgctxt "#20316"
+msgid "Sort by: ID"
+msgstr "Trier par : ID"
+
+msgctxt "#20317"
+msgid "Scanning movies using %s"
+msgstr "Analyse des films avec %s"
+
+msgctxt "#20318"
+msgid "Scanning music videos using %s"
+msgstr "Analyse des vidéos musicales avec %s"
+
+msgctxt "#20319"
+msgid "Scanning tvshows using %s"
+msgstr "Analyse des émissions avec %s"
+
+msgctxt "#20320"
+msgid "Scanning artists using %s"
+msgstr "Analyse des artistes avec %s"
+
+msgctxt "#20321"
+msgid "Scanning albums using %s"
+msgstr "Analyse des albums avec %s"
+
+msgctxt "#20324"
+msgid "Play part..."
+msgstr "Lecture partie..."
+
+msgctxt "#20325"
+msgid "Calibration reset"
+msgstr "Réinitialisation du calibrage"
+
+msgctxt "#20326"
+msgid "This will reset the calibration values for %s"
+msgstr "Ceci réinitialiasera les valeurs de calibrage pour %s"
+
+msgctxt "#20327"
+msgid "to it's default values."
+msgstr "aux valeurs par défaut."
+
+msgctxt "#20328"
+msgid "Browse for destination"
+msgstr "Parcourir vers la destination"
+
+msgctxt "#20329"
+msgid "Movies are in separate folders that match the movie title"
+msgstr "Chaque film dans un dossier séparé, libellé avec son titre"
+
+msgctxt "#20330"
+msgid "Use folder names for lookups"
+msgstr "Recherche avec les noms des dossiers"
+
+msgctxt "#20331"
+msgid "File"
+msgstr "Fichier"
+
+msgctxt "#20332"
+msgid "Use file or folder names in lookups?"
+msgstr "Utiliser le nom des dossiers ou fichiers pour les recherches?"
+
+msgctxt "#20333"
+msgid "Set content"
+msgstr "Définir le contenu"
+
+msgctxt "#20334"
+msgid "Folder"
+msgstr "Dossier"
+
+msgctxt "#20335"
+msgid "Look for content recursively?"
+msgstr "Rechercher le contenu de façon récursive?"
+
+msgctxt "#20336"
+msgid "Unlock sources"
+msgstr "Déverrouiller les sources"
+
+msgctxt "#20337"
+msgid "Actor"
+msgstr "Acteur"
+
+msgctxt "#20338"
+msgid "Movie"
+msgstr "Film"
+
+msgctxt "#20339"
+msgid "Director"
+msgstr "Réalisateur"
+
+msgctxt "#20340"
+msgid "Do you want to remove all items within"
+msgstr "Voulez-vous enlever tous les éléments dans"
+
+msgctxt "#20341"
+msgid "this path from the XBMC library?"
+msgstr "ce chemin de la médiathèque XBMC?"
+
+msgctxt "#20342"
+msgid "Movies"
+msgstr "Films"
+
+msgctxt "#20343"
+msgid "TV shows"
+msgstr "Émissions de télévision "
+
+msgctxt "#20344"
+msgid "This directory contains"
+msgstr "Ce répertoire contient"
+
+msgctxt "#20345"
+msgid "Run automated scan"
+msgstr "Exécuter le balayage automatiquement"
+
+msgctxt "#20346"
+msgid "Scan recursively"
+msgstr "Balayer les sous-dossiers"
+
+msgctxt "#20347"
+msgid "as"
+msgstr "est"
+
+msgctxt "#20348"
+msgid "Directors"
+msgstr "Réalisateurs"
+
+msgctxt "#20349"
+msgid "No video files found in this path!"
+msgstr "Aucun fichier vidéo de trouvé dans ce chemin!"
+
+msgctxt "#20350"
+msgid "votes"
+msgstr "votes"
+
+msgctxt "#20351"
+msgid "TV show information"
+msgstr "Informations de l'émission"
+
+msgctxt "#20352"
+msgid "Episode information"
+msgstr "Informations de l'épisode"
+
+msgctxt "#20353"
+msgid "Loading TV show details"
+msgstr "Chargement des détails de l'émission"
+
+msgctxt "#20354"
+msgid "Fetching episode guide"
+msgstr "Récupération du guide de l'épisode"
+
+msgctxt "#20355"
+msgid "Loading info for episodes in directory"
+msgstr "Chargement des informations des épisodes dans le répertoire"
+
+msgctxt "#20356"
+msgid "Select TV show:"
+msgstr "Choisir l'émission :"
+
+msgctxt "#20357"
+msgid "Enter the TV show name"
+msgstr "Saisir le nom de l'émission"
+
+msgctxt "#20358"
+msgid "Season %i"
+msgstr "Saison %i"
+
+msgctxt "#20359"
+msgid "Episode"
+msgstr "Épisode"
+
+msgctxt "#20360"
+msgid "Episodes"
+msgstr "Épisodes"
+
+msgctxt "#20361"
+msgid "Loading episode details"
+msgstr "Chargement des détails des épisodes"
+
+msgctxt "#20362"
+msgid "Remove episode from library"
+msgstr "Retirer l'épisode de la médiathèque"
+
+msgctxt "#20363"
+msgid "Remove TV show from library"
+msgstr "Retirer l'émission de la médiathèque"
+
+msgctxt "#20364"
+msgid "TV show"
+msgstr "Émissions de télévision"
+
+msgctxt "#20365"
+msgid "Episode plot"
+msgstr "Intrigue de l'épisode"
+
+msgctxt "#20366"
+msgid "* All seasons"
+msgstr "* Toutes les saisons"
+
+msgctxt "#20367"
+msgid "Hide watched"
+msgstr "Masquer vue(s)"
+
+msgctxt "#20368"
+msgid "Prod code"
+msgstr "Code prod."
+
+msgctxt "#20369"
+msgid "Show plot for unwatched items"
+msgstr "Afficher l'intrigue pour les médias non visionnés"
+
+msgctxt "#20370"
+msgid "* Hidden to prevent spoilers *"
+msgstr "* Caché pour éviter les gâcheurs *"
+
+msgctxt "#20371"
+msgid "Set season thumb"
+msgstr "Définir l'imagette de la saison"
+
+msgctxt "#20372"
+msgid "Season image"
+msgstr "Imagette de la saison"
+
+msgctxt "#20373"
+msgid "Season"
+msgstr "Saison"
+
+msgctxt "#20374"
+msgid "Downloading movie information"
+msgstr "Téléchargement des informations de film"
+
+msgctxt "#20375"
+msgid "Unassign content"
+msgstr "Contenu non assignée"
+
+msgctxt "#20376"
+msgid "Original title"
+msgstr "Titre original"
+
+msgctxt "#20377"
+msgid "Refresh TV show information"
+msgstr "Rafraîchir les infos de l'émission"
+
+msgctxt "#20378"
+msgid "Refresh info for all episodes?"
+msgstr "Rafraichir les informations de tous les épisodes ?"
+
+msgctxt "#20379"
+msgid "Selected folder contains a single TV show"
+msgstr "Le dossier sélectionné contient une seule émission"
+
+msgctxt "#20380"
+msgid "Exclude selected folder from scans"
+msgstr "Exclure le dossier sélectionné du balayage"
+
+msgctxt "#20381"
+msgid "Specials"
+msgstr "Spéciales"
+
+msgctxt "#20382"
+msgid "Automatically grab season thumbs"
+msgstr "Récupérer automatiquement les imagettes de saisons"
+
+msgctxt "#20383"
+msgid "Selected folder contains a single video"
+msgstr "Le dossier sélectionné contient une seule vidéo"
+
+msgctxt "#20384"
+msgid "Link to TV show"
+msgstr "Lien vers une émission"
+
+msgctxt "#20385"
+msgid "Remove link to TV show"
+msgstr "Supprimer le lien vers l'émission"
+
+msgctxt "#20386"
+msgid "Recently added movies"
+msgstr "Films ajoutés récemment"
+
+msgctxt "#20387"
+msgid "Recently added episodes"
+msgstr "Épisodes ajoutés récemment"
+
+msgctxt "#20388"
+msgid "Studios"
+msgstr "Studios"
+
+msgctxt "#20389"
+msgid "Music videos"
+msgstr "Vidéos musicales"
+
+msgctxt "#20390"
+msgid "Recently added music videos"
+msgstr "Vidéos musicales ajoutées récemment"
+
+msgctxt "#20391"
+msgid "Music video"
+msgstr "Vidéos musicales"
+
+msgctxt "#20392"
+msgid "Remove music video from library"
+msgstr "Retirer la vidéo musicale de la médiathèque"
+
+msgctxt "#20393"
+msgid "Music video information"
+msgstr "Informations de la vidéo musicale"
+
+msgctxt "#20394"
+msgid "Loading music video information"
+msgstr "Chargement des informations de la vidéo musicale"
+
+msgctxt "#20395"
+msgid "Mixed"
+msgstr "Mixé"
+
+msgctxt "#20396"
+msgid "Go to albums by artist"
+msgstr "Aller à Albums par artiste"
+
+msgctxt "#20397"
+msgid "Go to album"
+msgstr "Aller à Album"
+
+msgctxt "#20398"
+msgid "Play song"
+msgstr "Lire le morceau"
+
+msgctxt "#20399"
+msgid "Go to music videos from album"
+msgstr "Aller  Vidéos musicales de l'album"
+
+msgctxt "#20400"
+msgid "Go to music videos by artist"
+msgstr "Aller à Vidéos musicales par l'artiste"
+
+msgctxt "#20401"
+msgid "Play music video"
+msgstr "Lire la vidéo musicale"
+
+msgctxt "#20402"
+msgid "Download actor thumbnails when adding to library"
+msgstr "Télécharger les imagettes d'acteur lors de l'ajout à la médiathèque"
+
+msgctxt "#20403"
+msgid "Set actor thumb"
+msgstr "Définir l'imagette d'acteur"
+
+msgctxt "#20404"
+msgid "Remove bookmark"
+msgstr "Retirer le signet"
+
+msgctxt "#20405"
+msgid "Remove episode bookmark"
+msgstr "Retirer le signet d'épisode"
+
+msgctxt "#20406"
+msgid "Set episode bookmark"
+msgstr "Définir un signet d'épisode"
+
+msgctxt "#20407"
+msgid "Scraper settings"
+msgstr "Paramètres du récupérateur"
+
+msgctxt "#20408"
+msgid "Downloading music video information"
+msgstr "Téléchargement des informations de la vidéo musicale"
+
+msgctxt "#20409"
+msgid "Downloading TV show information"
+msgstr "Téléchargement des informations de l'émission"
+
+msgctxt "#20410"
+msgid "Trailer"
+msgstr "Bande-annonce"
+
+msgctxt "#20411"
+msgid "Flatten"
+msgstr "Assembler"
+
+msgctxt "#20412"
+msgid "Flatten TV shows"
+msgstr "Assembler les émissions"
+
+msgctxt "#20413"
+msgid "Get fanart"
+msgstr "Obtenir du fanart"
+
+msgctxt "#20414"
+msgid "Show fanart in video and music libraries"
+msgstr "Afficher les fanarts dans les bibliothèques vidéo et musicale"
+
+msgctxt "#20415"
+msgid "Scanning for new content"
+msgstr "Recherche de nouveau contenu"
+
+msgctxt "#20416"
+msgid "First aired"
+msgstr "Première diffusion"
+
+msgctxt "#20417"
+msgid "Writer"
+msgstr "Scripteur"
+
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Scripteurs"
+
+msgctxt "#20419"
+msgid "Replace file names with library titles"
+msgstr "Remplacer les noms de fichiers par les titres de la médiathèque"
+
+msgctxt "#20420"
+msgid "Never"
+msgstr "Jamais"
+
+msgctxt "#20421"
+msgid "If only one season"
+msgstr "Si une saison seulement"
+
+msgctxt "#20422"
+msgid "Always"
+msgstr "Toujours"
+
+msgctxt "#20423"
+msgid "Has trailer"
+msgstr "A une bande-annonce"
+
+msgctxt "#20424"
+msgid "False"
+msgstr "Faux"
+
+msgctxt "#20425"
+msgid "Fanart slideshow"
+msgstr "Diaporama de fanart"
+
+msgctxt "#20426"
+msgid "Export to a single file or separate"
+msgstr "Exporter vers un seul fichier ou des"
+
+msgctxt "#20427"
+msgid "files per entry?"
+msgstr "fichiers séparés par entrée?"
+
+msgctxt "#20428"
+msgid "Single file"
+msgstr "Fichier unique"
+
+msgctxt "#20429"
+msgid "Separate"
+msgstr "Séparés"
+
+msgctxt "#20430"
+msgid "Export thumbnails and fanart?"
+msgstr "Exporter les imagettes et le fanart?"
+
+msgctxt "#20431"
+msgid "Overwrite old files?"
+msgstr "Écraser les anciens fichiers?"
+
+msgctxt "#20432"
+msgid "Exclude path from library updates"
+msgstr "Exclure ce chemin des mises à jour de la médiathèque"
+
+msgctxt "#20433"
+msgid "Extract thumbnails and video information"
+msgstr "Extraire les imagettes et les informations de la vidéo"
+
+msgctxt "#20434"
+msgid "Sets"
+msgstr "Sagas"
+
+msgctxt "#20435"
+msgid "Combine split video items"
+msgstr "Combiner les éléments vidéos séparés"
+
+msgctxt "#20436"
+msgid "Export actor thumbs?"
+msgstr "Exporter les imagettes d'acteur?"
+
+msgctxt "#20437"
+msgid "Choose fanart"
+msgstr "Choisir un fanart"
+
+msgctxt "#20438"
+msgid "Local fanart"
+msgstr "Fanart local"
+
+msgctxt "#20439"
+msgid "No fanart"
+msgstr "Aucun fanart"
+
+msgctxt "#20440"
+msgid "Current fanart"
+msgstr "Fanart actuel"
+
+msgctxt "#20441"
+msgid "Remote fanart"
+msgstr "Fanart distant"
+
+msgctxt "#20442"
+msgid "Change content"
+msgstr "Changer le contenu"
+
+msgctxt "#20443"
+msgid "Do you want to refresh info for all"
+msgstr "Voulez-vous rafraîchir les infos pour"
+
+msgctxt "#20444"
+msgid "items within this path?"
+msgstr "tous les éléments de ce chemin?"
+
+msgctxt "#20445"
+msgid "Fanart"
+msgstr "Fanart"
+
+msgctxt "#20446"
+msgid "Locally stored information found."
+msgstr "Informations trouvées en local."
+
+msgctxt "#20447"
+msgid "Ignore and refresh from internet?"
+msgstr "Ignorer et rafraîchir depuis Internet?"
+
+msgctxt "#20448"
+msgid "Could not download information"
+msgstr "Impossible de télécharger les informations"
+
+msgctxt "#20449"
+msgid "Unable to connect to remote server"
+msgstr "Impossible de se connecter au serveur distant"
+
+msgctxt "#20450"
+msgid "Would you like to continue scanning?"
+msgstr "Voulez-vous continuer le balayage ?"
+
+msgctxt "#20451"
+msgid "Countries"
+msgstr "Pays"
+
+msgctxt "#20452"
+msgid "episode"
+msgstr "épisode"
+
+msgctxt "#20453"
+msgid "episodes"
+msgstr "épisodes"
+
+msgctxt "#20454"
+msgid "Listener"
+msgstr "Auditeur"
+
+msgctxt "#20455"
+msgid "Listeners"
+msgstr "Auditeurs"
+
+msgctxt "#20456"
+msgid "Flatten library hierarchy"
+msgstr "Aplatir la hiérarchie de la bibliothèque"
+
+msgctxt "#20457"
+msgid "Movie set"
+msgstr "Saga"
+
+msgctxt "#20458"
+msgid "Group movies in sets"
+msgstr "Grouper les films en sagas"
+
+msgctxt "#20459"
+msgid "Tags"
+msgstr "Balises"
+
+msgctxt "#20460"
+msgid "Add %s"
+msgstr "Ajouter %s"
+
+msgctxt "#20461"
+msgid "Remove %s"
+msgstr "Enlever %s"
+
+msgctxt "#20462"
+msgid "New tag..."
+msgstr "Nouvelle balise..."
+
+msgctxt "#20463"
+msgid "A tag with the name '%s' already exists."
+msgstr "Une balise avec le nom « %s » existe déjà."
+
+msgctxt "#20464"
+msgid "Select %s"
+msgstr "Choisir %s"
+
+msgctxt "#20465"
+msgid "Manage movie set"
+msgstr "Gérer la saga"
+
+msgctxt "#20466"
+msgid "Select movie set"
+msgstr "Choisir la saga"
+
+msgctxt "#20467"
+msgid "No set (Remove from %s)"
+msgstr "Pas de saga (retirer de %s)"
+
+msgctxt "#20468"
+msgid "Add movie to a new set"
+msgstr "Ajouter le film à une nouvelle saga"
+
+msgctxt "#20469"
+msgid "Keep current set (%s)"
+msgstr "Conserver la saga actuelle (%s)"
+
+msgctxt "#21330"
+msgid "Show hidden files and directories"
+msgstr "Afficher les dossiers et les fichiers cachés"
+
+msgctxt "#21331"
+msgid "TuxBox client"
+msgstr "Client TuxBox"
+
+msgctxt "#21332"
+msgid "WARNING: Target TuxBox device is in recording-mode!"
+msgstr "AVERTISSEMENT : le dispositif TuxBox cible est en mode d'enregistrement !"
+
+msgctxt "#21333"
+msgid "The stream will be stopped!"
+msgstr "Le flux sera arrêté !"
+
+msgctxt "#21334"
+msgid "Zap to channel: %s failed!"
+msgstr "Le passage vers le canal %s a échoué !"
+
+msgctxt "#21335"
+msgid "Are you sure to start the stream?"
+msgstr "Êtes-vous sûr de commencer le flux ?"
+
+msgctxt "#21336"
+msgid "Connecting to: %s"
+msgstr "Connexion à : %s"
+
+msgctxt "#21337"
+msgid "TuxBox device"
+msgstr "Dispositif TuxBox"
+
+msgctxt "#21359"
+msgid "Add media share..."
+msgstr "Ajouter un partage média..."
+
+msgctxt "#21360"
+msgid "Share video and music libraries through UPnP"
+msgstr "Partager les médiathèques vidéos et musique avec l'UPnP"
+
+msgctxt "#21361"
+msgid "Look for remote UPnP players"
+msgstr "Chercher des lecteurs UPnP distants"
+
+msgctxt "#21362"
+msgid "Bookmark created"
+msgstr "Signet créé"
+
+msgctxt "#21363"
+msgid "Episode Bookmark created"
+msgstr "Signet d'épisode créé"
+
+msgctxt "#21364"
+msgid "Edit media share"
+msgstr "Modifier le partage média"
+
+msgctxt "#21365"
+msgid "Remove media share"
+msgstr "Enlever le partage média"
+
+msgctxt "#21367"
+msgid "Movie & alternate subtitle directory"
+msgstr "Répertoire du film & des sous-titres alternatifs"
+
+msgctxt "#21368"
+msgid "Override ASS/SSA subtitles fonts"
+msgstr "Remplacer les polices de sous-titres ASS/SSA"
+
+msgctxt "#21369"
+msgid "Enable mouse and Touch Screen support"
+msgstr "Activer la prise en charge de la souris et de l'écran tactile"
+
+msgctxt "#21370"
+msgid "Play navigation sounds during media playback"
+msgstr "Jouer les sons de navigation lors de la lecture des médias"
+
+msgctxt "#21371"
+msgid "Thumbnail"
+msgstr "Imagette"
+
+msgctxt "#21372"
+msgid "Forced DVD player region"
+msgstr "Région du lecteur DVD forcée"
+
+msgctxt "#21373"
+msgid "Video output"
+msgstr "Sortie vidéo"
+
+msgctxt "#21374"
+msgid "Video aspect"
+msgstr "Aspect vidéo"
+
+msgctxt "#21375"
+msgid "Normal"
+msgstr "Normal"
+
+msgctxt "#21376"
+msgid "Letterbox"
+msgstr "Boite à lettres"
+
+msgctxt "#21377"
+msgid "Widescreen"
+msgstr "Panoramique"
+
+msgctxt "#21378"
+msgid "Enable 480p"
+msgstr "Activer 480p"
+
+msgctxt "#21379"
+msgid "Enable 720p"
+msgstr "Activer 720p"
+
+msgctxt "#21380"
+msgid "Enable 1080i"
+msgstr "Activer 1080i"
+
+msgctxt "#21381"
+msgid "Enter name of new playlist"
+msgstr "Indiquer le nom de la nouvelle liste de lecture"
+
+msgctxt "#21382"
+msgid "Show \"Add source\" buttons in file lists"
+msgstr "Afficher le bouton « Ajouter une source » dans les listes de fichiers"
+
+msgctxt "#21383"
+msgid "Enable scrollbars"
+msgstr "Activer les barres de défilement"
+
+msgctxt "#21384"
+msgid "Make watched filtering a toggle in video library"
+msgstr "Activer le filtre Masquer vue dans la médiathèque"
+
+msgctxt "#21385"
+msgid "Open"
+msgstr "Ouvrir"
+
+msgctxt "#21386"
+msgid "Acoustic management level"
+msgstr "Gestion du niveau acoustique"
+
+msgctxt "#21387"
+msgid "Fast"
+msgstr "Rapide"
+
+msgctxt "#21388"
+msgid "Quiet"
+msgstr "Silencieux"
+
+msgctxt "#21389"
+msgid "Enable custom background"
+msgstr "Activer l'arrière-plan personnalisé"
+
+msgctxt "#21390"
+msgid "Power management level"
+msgstr "Niveau de gestion de l'énergie"
+
+msgctxt "#21391"
+msgid "High power"
+msgstr "Puissance élevée"
+
+msgctxt "#21392"
+msgid "Low power"
+msgstr "Faible puissance"
+
+msgctxt "#21393"
+msgid "High standby"
+msgstr "Mise en veille élevé"
+
+msgctxt "#21394"
+msgid "Low standby"
+msgstr "Mise en veille bas"
+
+msgctxt "#21395"
+msgid "Unable to cache files bigger than 4GB"
+msgstr "Impossible de mettre en cache des fichiers supérieurs à 4 Go"
+
+msgctxt "#21396"
+msgid "Chapter"
+msgstr "Chapitre"
+
+msgctxt "#21397"
+msgid "High quality pixel shader v2"
+msgstr "Nuanceur de pixels haute qualité V2"
+
+msgctxt "#21398"
+msgid "Enable playlist at startup"
+msgstr "Activer une liste de lecture au démarrage"
+
+msgctxt "#21399"
+msgid "Use tween animations"
+msgstr "Utiliser des animations dans l'intervalle"
+
+msgctxt "#21400"
+msgid "contains"
+msgstr "contient"
+
+msgctxt "#21401"
+msgid "does not contain"
+msgstr "ne contient pas"
+
+msgctxt "#21402"
+msgid "is"
+msgstr "est"
+
+msgctxt "#21403"
+msgid "is not"
+msgstr "n'est pas"
+
+msgctxt "#21404"
+msgid "starts with"
+msgstr "commence par"
+
+msgctxt "#21405"
+msgid "ends with"
+msgstr "termine par"
+
+msgctxt "#21406"
+msgid "greater than"
+msgstr "supérieur à"
+
+msgctxt "#21407"
+msgid "less than"
+msgstr "inférieur à"
+
+msgctxt "#21408"
+msgid "after"
+msgstr "après"
+
+msgctxt "#21409"
+msgid "before"
+msgstr "avant"
+
+msgctxt "#21410"
+msgid "in the last"
+msgstr "dans le dernier"
+
+msgctxt "#21411"
+msgid "not in the last"
+msgstr "pas dans le dernier"
+
+msgctxt "#21412"
+msgid "Scrapers"
+msgstr "Extracteurs de contenu"
+
+msgctxt "#21413"
+msgid "Default movie scraper"
+msgstr "Extracteur de contenu de films par défaut"
+
+msgctxt "#21414"
+msgid "Default tvshow scraper"
+msgstr "Extracteur de contenu d'émissions par défaut"
+
+msgctxt "#21415"
+msgid "Default music video scraper"
+msgstr "Extracteur de contenu de vidéos musicales par défaut"
+
+msgctxt "#21417"
+msgid "Settings"
+msgstr "Paramètres"
+
+msgctxt "#21418"
+msgid "Multilingual"
+msgstr "Multilingue"
+
+msgctxt "#21419"
+msgid "No scrapers present"
+msgstr "Aucun extracteur de contenu de présent"
+
+msgctxt "#21420"
+msgid "Value to match"
+msgstr "Valeur de concordance"
+
+msgctxt "#21421"
+msgid "Smart playlist rule"
+msgstr "Règle de liste de lecture intelligente"
+
+msgctxt "#21422"
+msgid "Match items where"
+msgstr "Faire concorder les éléments dont"
+
+msgctxt "#21423"
+msgid "New rule..."
+msgstr "Nouvelle règle..."
+
+msgctxt "#21424"
+msgid "Items must match"
+msgstr "Les éléments doivent concorder"
+
+msgctxt "#21425"
+msgid "all of the rules"
+msgstr "avec toutes les règles"
+
+msgctxt "#21426"
+msgid "one or more of the rules"
+msgstr "avec une ou plusieurs règles"
+
+msgctxt "#21427"
+msgid "Limit to"
+msgstr "Limiter à"
+
+msgctxt "#21428"
+msgid "No limit"
+msgstr "Sans limite"
+
+msgctxt "#21429"
+msgid "Order by"
+msgstr "Trier par"
+
+msgctxt "#21430"
+msgid "ascending"
+msgstr "croissant"
+
+msgctxt "#21431"
+msgid "descending"
+msgstr "décroissant"
+
+msgctxt "#21432"
+msgid "Edit smart playlist"
+msgstr "Modifier la liste de lecture intelligente"
+
+msgctxt "#21433"
+msgid "Name of the playlist"
+msgstr "Nom de la liste de lecture"
+
+msgctxt "#21434"
+msgid "Find items where"
+msgstr "Trouver les éléments qui"
+
+msgctxt "#21435"
+msgid "Edit"
+msgstr "Modifier"
+
+msgctxt "#21436"
+msgid "%i items"
+msgstr "%i éléments"
+
+msgctxt "#21437"
+msgid "New smart playlist..."
+msgstr "Nouvelle liste de lecture intelligente..."
+
+msgctxt "#21438"
+msgid "%c Drive"
+msgstr "Lecteur %c"
+
+msgctxt "#21439"
+msgid "Edit party mode rules"
+msgstr "Modifier les règles du mode fête"
+
+msgctxt "#21440"
+msgid "Home folder"
+msgstr "Dossier racine"
+
+msgctxt "#21441"
+msgid "Watched count"
+msgstr "Compteur des vues"
+
+msgctxt "#21442"
+msgid "Episode title"
+msgstr "Titre de l'épisode"
+
+msgctxt "#21443"
+msgid "Video resolution"
+msgstr "Résolution de la vidéo"
+
+msgctxt "#21444"
+msgid "Audio channels"
+msgstr "Canaux audio"
+
+msgctxt "#21445"
+msgid "Video codec"
+msgstr "Codec vidéo"
+
+msgctxt "#21446"
+msgid "Audio codec"
+msgstr "Codec audio"
+
+msgctxt "#21447"
+msgid "Audio language"
+msgstr "Langue audio"
+
+msgctxt "#21448"
+msgid "Subtitle language"
+msgstr "Langue des sous-titres"
+
+msgctxt "#21449"
+msgid "Remote control sends keyboard presses"
+msgstr "Émulation du clavier par la télécommande"
+
+msgctxt "#21450"
+msgid "Edit"
+msgstr "Modifier"
+
+msgctxt "#21451"
+msgid "Internet connection required."
+msgstr "Connexion Internet exigée."
+
+msgctxt "#21452"
+msgid "Get More..."
+msgstr "En obtenir plus..."
+
+msgctxt "#21453"
+msgid "Root filesystem"
+msgstr "Système de fichier racine"
+
+msgctxt "#21454"
+msgid "Cache full"
+msgstr "Le cache est plein"
+
+msgctxt "#21455"
+msgid "Cache filled before reaching required amount for continous playback"
+msgstr "Le cache s'est rempli avant d'avoir atteint le niveau exigé pour une lecture continue"
+
+msgctxt "#21456"
+msgid "External storage"
+msgstr "Stockage externe"
+
+msgctxt "#21457"
+msgid "Watched episode count"
+msgstr "Nombre d'épisodes vus"
+
+msgctxt "#21458"
+msgid "Group by"
+msgstr "Grouper par"
+
+msgctxt "#21459"
+msgid "mixed"
+msgstr "mélangé"
+
+msgctxt "#21461"
+msgid "Fixed"
+msgstr "Fixe"
+
+msgctxt "#21462"
+msgid "Bottom of video"
+msgstr "Au pied de la vidéo"
+
+msgctxt "#21463"
+msgid "Below video"
+msgstr "Sous la vidéo"
+
+msgctxt "#21464"
+msgid "Top of video"
+msgstr "En haut de la vidéo"
+
+msgctxt "#21465"
+msgid "Above video"
+msgstr "Au-dessus de la vidéo"
+
+msgctxt "#21467"
+msgid "%.1f to %.1f"
+msgstr "%.1f à %.1f"
+
+msgctxt "#21468"
+msgid "%d to %d"
+msgstr "%d à %d"
+
+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"
+
+msgctxt "#21801"
+msgid "File path"
+msgstr "Chemin du fichier"
+
+msgctxt "#21802"
+msgid "File size"
+msgstr "Taille du fichier"
+
+msgctxt "#21803"
+msgid "File date/time"
+msgstr "Date/Heure du fichier"
+
+msgctxt "#21804"
+msgid "Slide index"
+msgstr "Index de la diapositive"
+
+msgctxt "#21805"
+msgid "Resolution"
+msgstr "Résolution"
+
+msgctxt "#21806"
+msgid "Comment"
+msgstr "Commentaire"
+
+msgctxt "#21807"
+msgid "Colour/B&W"
+msgstr "Couleur/N&B"
+
+msgctxt "#21808"
+msgid "JPEG process"
+msgstr "Traitement JPEG"
+
+msgctxt "#21820"
+msgid "Date/Time"
+msgstr "Date/Heure"
+
+msgctxt "#21821"
+msgid "Description"
+msgstr "Description"
+
+msgctxt "#21822"
+msgid "Camera make"
+msgstr "Marque de l'appareil-photo"
+
+msgctxt "#21823"
+msgid "Camera model"
+msgstr "Modèle de l'appareil-photo"
+
+msgctxt "#21824"
+msgid "EXIF comment"
+msgstr "Commentaires EXIF"
+
+msgctxt "#21825"
+msgid "Firmware"
+msgstr "Micro logiciel"
+
+msgctxt "#21826"
+msgid "Aperture"
+msgstr "Ouverture"
+
+msgctxt "#21827"
+msgid "Focal length"
+msgstr "Longueur de focale"
+
+msgctxt "#21828"
+msgid "Focus distance"
+msgstr "Distance de la mise au point"
+
+msgctxt "#21829"
+msgid "Exposure"
+msgstr "Exposition"
+
+msgctxt "#21830"
+msgid "Exposure time"
+msgstr "Temps de pose"
+
+msgctxt "#21831"
+msgid "Exposure bias"
+msgstr "Compensation de l'exposition"
+
+msgctxt "#21832"
+msgid "Exposure mode"
+msgstr "Mode d'exposition"
+
+msgctxt "#21833"
+msgid "Flash used"
+msgstr "Flash utilisé"
+
+msgctxt "#21834"
+msgid "White-balance"
+msgstr "Balance des blancs"
+
+msgctxt "#21835"
+msgid "Light source"
+msgstr "Source lumineuse"
+
+msgctxt "#21836"
+msgid "Metering mode"
+msgstr "Mode de mesure"
+
+msgctxt "#21837"
+msgid "ISO"
+msgstr "ISO"
+
+msgctxt "#21838"
+msgid "Digital zoom"
+msgstr "Zoom numérique"
+
+msgctxt "#21839"
+msgid "CCD width"
+msgstr "Largeur CCD"
+
+msgctxt "#21840"
+msgid "GPS latitude"
+msgstr "Latitude GPS"
+
+msgctxt "#21841"
+msgid "GPS longitude"
+msgstr "Longitude GPS"
+
+msgctxt "#21842"
+msgid "GPS altitude"
+msgstr "Altitude GPS"
+
+msgctxt "#21843"
+msgid "Orientation"
+msgstr "Orientation"
+
+msgctxt "#21857"
+msgid "Sub-location"
+msgstr "Sous-localisation"
+
+msgctxt "#21858"
+msgid "Image type"
+msgstr "Type d'image"
+
+msgctxt "#21859"
+msgid "Time created"
+msgstr "Heure de création"
+
+msgctxt "#21860"
+msgid "Supplemental categories"
+msgstr "Catégories supplémentaires"
+
+msgctxt "#21861"
+msgid "Keywords"
+msgstr "Mots-clefs"
+
+msgctxt "#21862"
+msgid "Caption"
+msgstr "Légende"
+
+msgctxt "#21863"
+msgid "Author"
+msgstr "Auteur"
+
+msgctxt "#21864"
+msgid "Headline"
+msgstr "Titre"
+
+msgctxt "#21865"
+msgid "Special instructions"
+msgstr "Instructions spéciales"
+
+msgctxt "#21866"
+msgid "Category"
+msgstr "Catégorie"
+
+msgctxt "#21867"
+msgid "Byline"
+msgstr "Signature"
+
+msgctxt "#21868"
+msgid "Byline title"
+msgstr "Titre de la signature"
+
+msgctxt "#21869"
+msgid "Credit"
+msgstr "Crédit"
+
+msgctxt "#21870"
+msgid "Source"
+msgstr "Source"
+
+msgctxt "#21871"
+msgid "Copyright notice"
+msgstr "Mention du droit d'auteur"
+
+msgctxt "#21872"
+msgid "Object name"
+msgstr "Nom de l'objet"
+
+msgctxt "#21873"
+msgid "City"
+msgstr "Ville"
+
+msgctxt "#21874"
+msgid "State"
+msgstr "État/Province"
+
+msgctxt "#21875"
+msgid "Country"
+msgstr "Pays"
+
+msgctxt "#21876"
+msgid "Original Tx Reference"
+msgstr "Référence Tx originale"
+
+msgctxt "#21877"
+msgid "Date created"
+msgstr "Date de création"
+
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "Priorité"
+
+msgctxt "#21879"
+msgid "Country code"
+msgstr "Code du pays"
+
+msgctxt "#21880"
+msgid "Reference service"
+msgstr "Service de référence"
+
+msgctxt "#21881"
+msgid "Allow control of XBMC via UPnP"
+msgstr "Permettre le contrôle de XBMC via UPnP"
+
+msgctxt "#21882"
+msgid "Attempt to skip introduction before DVD menu"
+msgstr "Tenter de sauter l'intro avant le menu du DVD"
+
+msgctxt "#21883"
+msgid "Saved music"
+msgstr "Musique enregistrée"
+
+msgctxt "#21884"
+msgid "Query info for all artists"
+msgstr "Rechercher les Infos pour tous les artistes"
+
+msgctxt "#21885"
+msgid "Downloading album information"
+msgstr "Téléchargement des informations de l'album"
+
+msgctxt "#21886"
+msgid "Downloading artist information"
+msgstr "Téléchargement des informations de l'artiste"
+
+msgctxt "#21887"
+msgid "Biography"
+msgstr "Biographie"
+
+msgctxt "#21888"
+msgid "Discography"
+msgstr "Discographie"
+
+msgctxt "#21889"
+msgid "Searching artist"
+msgstr "Recherche de l'artiste"
+
+msgctxt "#21890"
+msgid "Select artist"
+msgstr "Choisir l'artiste"
+
+msgctxt "#21891"
+msgid "Artist information"
+msgstr "Informations sur l'artiste"
+
+msgctxt "#21892"
+msgid "Instruments"
+msgstr "Instruments"
+
+msgctxt "#21893"
+msgid "Born"
+msgstr "Naissance"
+
+msgctxt "#21894"
+msgid "Formed"
+msgstr "Créé"
+
+msgctxt "#21895"
+msgid "Themes"
+msgstr "Thèmes"
+
+msgctxt "#21896"
+msgid "Disbanded"
+msgstr "Dissous"
+
+msgctxt "#21897"
+msgid "Died"
+msgstr "Décédé/décédée"
+
+msgctxt "#21898"
+msgid "Years active"
+msgstr "Années d'activité"
+
+msgctxt "#21899"
+msgid "Label"
+msgstr "Label(s)"
+
+msgctxt "#21900"
+msgid "Born/Formed"
+msgstr "Naissance/Création"
+
+msgctxt "#22000"
+msgid "Update library on startup"
+msgstr "Actualiser la médiathèque au démarrage"
+
+msgctxt "#22001"
+msgid "Hide progress of library updates"
+msgstr "Masquer l'avancement des mises à jour de la mediathèque"
+
+msgctxt "#22002"
+msgid "DNS suffix"
+msgstr "Suffixe DNS"
+
+msgctxt "#22003"
+msgid "%2.3fs"
+msgstr "%2.3fs"
+
+msgctxt "#22004"
+msgid "Delayed by: %2.3fs"
+msgstr "Retarder de : %2.3fs"
+
+msgctxt "#22005"
+msgid "Ahead by: %2.3fs"
+msgstr "Avancer de : %2.3fs"
+
+msgctxt "#22006"
+msgid "Subtitle offset"
+msgstr "Décalage des sous-titres"
+
+msgctxt "#22007"
+msgid "OpenGL vendor:"
+msgstr "Fournisseur OpenGL :"
+
+msgctxt "#22008"
+msgid "OpenGL renderer:"
+msgstr "Moteur de rendu OpenGL :"
+
+msgctxt "#22009"
+msgid "OpenGL version:"
+msgstr "Version OpenGL :"
+
+msgctxt "#22010"
+msgid "GPU temperature:"
+msgstr "Température du GPU :"
+
+msgctxt "#22011"
+msgid "CPU temperature:"
+msgstr "Température de l'UCT :"
+
+msgctxt "#22012"
+msgid "Total memory"
+msgstr "Mémoire totale"
+
+msgctxt "#22013"
+msgid "Profile data"
+msgstr "Données du profil"
+
+msgctxt "#22014"
+msgid "Use dim if paused during video playback"
+msgstr "Atténuation quand le lecteur vidéo est en pause"
+
+msgctxt "#22015"
+msgid "All recordings"
+msgstr "Tous les enregistrements"
+
+msgctxt "#22016"
+msgid "By title"
+msgstr "Par titre"
+
+msgctxt "#22017"
+msgid "By group"
+msgstr "Par groupe"
+
+msgctxt "#22018"
+msgid "Live channels"
+msgstr "Chaînes en direct"
+
+msgctxt "#22019"
+msgid "Recordings by title"
+msgstr "Enregistrements par titre"
+
+msgctxt "#22020"
+msgid "Guide"
+msgstr "Guide"
+
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "Autoriser les erreurs d'aspect ratio (minimise les barres noires)"
+
+msgctxt "#22022"
+msgid "Show video files in listings"
+msgstr "Afficher les fichiers vidéo dans les listes"
+
+msgctxt "#22023"
+msgid "DirectX vendor:"
+msgstr "Fournisseur DirectX :"
+
+msgctxt "#22024"
+msgid "Direct3D version:"
+msgstr "Version Direct3D :"
+
+msgctxt "#22030"
+msgid "Font"
+msgstr "Police"
+
+msgctxt "#22031"
+msgid "Size"
+msgstr "Taille"
+
+msgctxt "#22032"
+msgid "Colours"
+msgstr "Couleurs"
+
+msgctxt "#22033"
+msgid "Charset"
+msgstr "Table de caractères"
+
+msgctxt "#22034"
+msgid "Export karaoke titles as HTML"
+msgstr "Exporter les titres karaoké en HTML"
+
+msgctxt "#22035"
+msgid "Export karaoke titles as CSV"
+msgstr "Exporter les titres karaoké en CSV"
+
+msgctxt "#22036"
+msgid "Import karaoke titles..."
+msgstr "Importer les titres karaoké..."
+
+msgctxt "#22037"
+msgid "Show song selector automatically"
+msgstr "Affichage automatique du sélecteur de morceaux"
+
+msgctxt "#22038"
+msgid "Export karaoke titles..."
+msgstr "Exporter les titres karaoké..."
+
+msgctxt "#22039"
+msgid "Enter song number"
+msgstr "Saisir le numéro du morceau"
+
+msgctxt "#22040"
+msgid "white/green"
+msgstr "blanc/vert"
+
+msgctxt "#22041"
+msgid "white/red"
+msgstr "blanc/rouge"
+
+msgctxt "#22042"
+msgid "white/blue"
+msgstr "blanc/bleu"
+
+msgctxt "#22043"
+msgid "black/white"
+msgstr "noir/blanc"
+
+msgctxt "#22079"
+msgid "Default select action"
+msgstr "Action par défaut"
+
+msgctxt "#22080"
+msgid "Choose"
+msgstr "Choisir"
+
+msgctxt "#22081"
+msgid "Show Information"
+msgstr "Afficher les informations"
+
+msgctxt "#22082"
+msgid "More..."
+msgstr "Plus..."
+
+msgctxt "#22083"
+msgid "Play all"
+msgstr "Tout lire"
+
+msgctxt "#23049"
+msgid "Teletext not available"
+msgstr "Télétexte non disponible"
+
+msgctxt "#23050"
+msgid "Activate Teletext"
+msgstr "Activer le télétexte"
+
+msgctxt "#23051"
+msgid "Part %i"
+msgstr "Partie %i"
+
+msgctxt "#23052"
+msgid "Buffering %i bytes"
+msgstr "%i octets mis en tampon"
+
+msgctxt "#23053"
+msgid "Stopping"
+msgstr "Arrêt en cours"
+
+msgctxt "#23054"
+msgid "Running"
+msgstr "Lecture en cours"
+
+msgctxt "#23055"
+msgid "Scale Teletext to 4:3"
+msgstr "Formater le télétexte en 4:3"
+
+msgctxt "#23100"
+msgid "External Player Active"
+msgstr "Lecteur externe actif"
+
+msgctxt "#23101"
+msgid "Click OK to terminate the player"
+msgstr "Cliquez sur OK pour arrêter le lecteur"
+
+msgctxt "#23104"
+msgid "Click OK when playback has ended"
+msgstr "Cliquez OK en fin de lecture"
+
+msgctxt "#24000"
+msgid "Add-on"
+msgstr "Extension"
+
+msgctxt "#24001"
+msgid "Add-ons"
+msgstr "Extensions"
+
+msgctxt "#24002"
+msgid "Add-on options"
+msgstr "Options de l'extension"
+
+msgctxt "#24003"
+msgid "Add-on Information"
+msgstr "Informations de l'extension"
+
+msgctxt "#24005"
+msgid "Media sources"
+msgstr "Sources des médias"
+
+msgctxt "#24007"
+msgid "Movie information"
+msgstr "Informations du film"
+
+msgctxt "#24008"
+msgid "Screensaver"
+msgstr "Économiseur d'écran"
+
+msgctxt "#24009"
+msgid "Script"
+msgstr "Script"
+
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "Visualisation"
+
+msgctxt "#24011"
+msgid "Add-on repository"
+msgstr "Dépôts des extensions"
+
+msgctxt "#24012"
+msgid "Subtitles"
+msgstr "Sous-titres"
+
+msgctxt "#24013"
+msgid "Lyrics"
+msgstr "Paroles"
+
+msgctxt "#24014"
+msgid "TV information"
+msgstr "Informations de la TV"
+
+msgctxt "#24015"
+msgid "Music video information"
+msgstr "Informations de la vidéo musicale"
+
+msgctxt "#24016"
+msgid "Album information"
+msgstr "Informations de l'album"
+
+msgctxt "#24017"
+msgid "Artist information"
+msgstr "Informations de l'artiste"
+
+msgctxt "#24018"
+msgid "Services"
+msgstr "Services"
+
+msgctxt "#24019"
+msgid "PVR clients"
+msgstr "Clients de magnétoscope numérique"
+
+msgctxt "#24020"
+msgid "Configure"
+msgstr "Configurer"
+
+msgctxt "#24021"
+msgid "Disable"
+msgstr "Désactiver"
+
+msgctxt "#24022"
+msgid "Enable"
+msgstr "Activer"
+
+msgctxt "#24023"
+msgid "Add-on disabled"
+msgstr "Extension désactivée"
+
+msgctxt "#24027"
+msgid "Weather"
+msgstr "Météo"
+
+msgctxt "#24028"
+msgid "Weather.com (standard)"
+msgstr "Weather.com (standard)"
+
+msgctxt "#24029"
+msgid "Service for weather information"
+msgstr "Service d'informations météo"
+
+msgctxt "#24030"
+msgid "This Add-on can not be configured"
+msgstr "Cette extension ne peut pas être configurée"
+
+msgctxt "#24031"
+msgid "Error loading settings"
+msgstr "Erreur de chargement des paramètres"
+
+msgctxt "#24032"
+msgid "All Add-ons"
+msgstr "Toutes les extensions"
+
+msgctxt "#24033"
+msgid "Get Add-ons"
+msgstr "Obtenir des extensions"
+
+msgctxt "#24034"
+msgid "Check for updates"
+msgstr "Vérifier les mises à jour"
+
+msgctxt "#24035"
+msgid "Force refresh"
+msgstr "Forcer le rafraîchissement"
+
+msgctxt "#24036"
+msgid "Change log"
+msgstr "Journal des changements"
+
+msgctxt "#24037"
+msgid "Uninstall"
+msgstr "Désinstaller"
+
+msgctxt "#24038"
+msgid "Install"
+msgstr "Installer"
+
+msgctxt "#24039"
+msgid "Disabled Add-ons"
+msgstr "Extensions désactivées"
+
+msgctxt "#24040"
+msgid "(Clear the current setting)"
+msgstr "(Effacer le paramètre actuel)"
+
+msgctxt "#24041"
+msgid "Install from zip file"
+msgstr "Installer depuis un fichier zip"
+
+msgctxt "#24042"
+msgid "Downloading %i%%"
+msgstr "Téléchargement %i%%"
+
+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 "Retour arrière"
+
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatible"
+
+msgctxt "#24050"
+msgid "Available Add-ons"
+msgstr "Extensions disponibles"
+
+msgctxt "#24051"
+msgid "Version:"
+msgstr "Version :"
+
+msgctxt "#24052"
+msgid "Disclaimer"
+msgstr "Avis de non-responsabilité"
+
+msgctxt "#24053"
+msgid "License:"
+msgstr "Licence :"
+
+msgctxt "#24054"
+msgid "Changelog"
+msgstr "Journal des changements"
+
+msgctxt "#24059"
+msgid "Would you like to enable this Add-on?"
+msgstr "Voulez-vous activer cette extension ?"
+
+msgctxt "#24060"
+msgid "Would you like to disable this Add-on?"
+msgstr "Voulez-vous désactiver cette extension ?"
+
+msgctxt "#24061"
+msgid "Add-on update available!"
+msgstr "Mise à jour de l'extension disponible !"
+
+msgctxt "#24062"
+msgid "Enabled Add-ons"
+msgstr "Extensions activées"
+
+msgctxt "#24063"
+msgid "Auto update"
+msgstr "Mise à jour automatique"
+
+msgctxt "#24064"
+msgid "Add-on enabled"
+msgstr "Extension activée"
+
+msgctxt "#24065"
+msgid "Add-on updated"
+msgstr "Extension mise à jour"
+
+msgctxt "#24066"
+msgid "Cancel Add-on download?"
+msgstr "Annuler le téléchargement de l'extension ?"
+
+msgctxt "#24067"
+msgid "Currently downloading Add-ons"
+msgstr "Téléchargements d'extensions en cours"
+
+msgctxt "#24068"
+msgid "Update available"
+msgstr "Mise à jour disponible"
+
+msgctxt "#24069"
+msgid "Update"
+msgstr "Mise à jour"
+
+msgctxt "#24070"
+msgid "Add-on could not be loaded."
+msgstr "L'extension n'a pas pu être chargée."
+
+msgctxt "#24071"
+msgid "An unknown error has occurred."
+msgstr "Une erreur inconnue est survenue."
+
+msgctxt "#24072"
+msgid "Settings required"
+msgstr "Paramètres obligatoires"
+
+msgctxt "#24073"
+msgid "Could not connect"
+msgstr "Connexion impossible"
+
+msgctxt "#24074"
+msgid "Needs to restart"
+msgstr "Redémarrage requis"
+
+msgctxt "#24075"
+msgid "Disable"
+msgstr "Désactiver"
+
+msgctxt "#24076"
+msgid "Add-on Required"
+msgstr "Extension requise"
+
+msgctxt "#24080"
+msgid "Try to reconnect?"
+msgstr "Tenter la reconnexion ?"
+
+msgctxt "#24089"
+msgid "Add-on restarts"
+msgstr "Redémarrage de l'extension"
+
+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)"
+
+msgctxt "#24095"
+msgid "(blacklisted)"
+msgstr "(sur la 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 ?"
+
+msgctxt "#24098"
+msgid "Broken"
+msgstr "Brisée"
+
+msgctxt "#24099"
+msgid "Would you like to switch to this skin?"
+msgstr "Voulez-vous activer cet habillage ?"
+
+msgctxt "#24100"
+msgid "To use this feature you must download an Add-on:"
+msgstr "Pour utiliser cette fonction, vous devez télécharger une extension :"
+
+msgctxt "#24101"
+msgid "Would you like to download this Add-on?"
+msgstr "Voulez-vous télécharger cette extension ?"
+
+msgctxt "#24102"
+msgid "Unable to load skin"
+msgstr "Impossible de charge cet habillage"
+
+msgctxt "#24103"
+msgid "Skin is missing some files"
+msgstr "Des fichiers manquent à cet habillage"
+
+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 "#24116"
+msgid "Default TV Service"
+msgstr "Service TV par défaut"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Choisissez le service qui sera utilisé par défaut pour chercher des sous-titres pour les émissions TV"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Service films par défaut"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Choisissez le service qui sera utilisé par défaut pour chercher des sous-titres pour des films"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Chaîne de recherche manuelle"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Saisissez le nom de votre recherche"
+
+msgctxt "#25000"
+msgid "Notifications"
+msgstr "Notifications"
+
+msgctxt "#25001"
+msgid "Hide foreign"
+msgstr "Masquer les langues étrangères"
+
+msgctxt "#25002"
+msgid "Select from all titles ..."
+msgstr "Choisir parmi tous les titres..."
+
+msgctxt "#25003"
+msgid "Show bluray menus"
+msgstr "Afficher les menus Blu-ray"
+
+msgctxt "#25004"
+msgid "Play main title: %d"
+msgstr "Lire le titre principal : %d"
+
+msgctxt "#25005"
+msgid "Title: %d"
+msgstr "Titre : %d"
+
+msgctxt "#25006"
+msgid "Select playback item"
+msgstr "Choisir l'élément à lire"
+
+msgctxt "#29800"
+msgid "Library Mode"
+msgstr "Mode médiathèque"
+
+msgctxt "#29801"
+msgid "QWERTY keyboard"
+msgstr "Clavier QWERTY"
+
+msgctxt "#29802"
+msgid "Passthrough Audio in use"
+msgstr "Passthrough audio en cours"
+
+msgctxt "#33001"
+msgid "Trailer quality"
+msgstr "Qualité de la bande-annonce"
+
+msgctxt "#33002"
+msgid "Stream"
+msgstr "Flux"
+
+msgctxt "#33003"
+msgid "Download"
+msgstr "Télécharger"
+
+msgctxt "#33004"
+msgid "Download & play"
+msgstr "Télécharger & lire"
+
+msgctxt "#33005"
+msgid "Download & save"
+msgstr "Télécharger & enregistrer"
+
+msgctxt "#33006"
+msgid "Today"
+msgstr "Aujourd'hui"
+
+msgctxt "#33007"
+msgid "Tomorrow"
+msgstr "Demain"
+
+msgctxt "#33008"
+msgid "Saving"
+msgstr "Enregistrement en cours"
+
+msgctxt "#33009"
+msgid "Copying"
+msgstr "Copie en cours"
+
+msgctxt "#33010"
+msgid "Set download directory"
+msgstr "Définir le répertoire de téléchargement"
+
+msgctxt "#33011"
+msgid "Search duration"
+msgstr "Durée de la recherche"
+
+msgctxt "#33012"
+msgid "Short"
+msgstr "Courte"
+
+msgctxt "#33013"
+msgid "Long"
+msgstr "Longue"
+
+msgctxt "#33014"
+msgid "Use DVD player instead of regular player"
+msgstr "Utiliser le lecteur DVD au lieu du lecteur normal"
+
+msgctxt "#33015"
+msgid "Ask for download before playing video"
+msgstr "Demander le téléchargement avant de lire la vidéo"
+
+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"
+
+msgctxt "#33019"
+msgid "Tomorrow Night"
+msgstr "Demain soir"
+
+msgctxt "#33020"
+msgid "Condition"
+msgstr "Condition"
+
+msgctxt "#33021"
+msgid "Precipitation"
+msgstr "Précipitation"
+
+msgctxt "#33022"
+msgid "Precip"
+msgstr "Précipitation"
+
+msgctxt "#33023"
+msgid "Humid"
+msgstr "Humide"
+
+msgctxt "#33024"
+msgid "Feels"
+msgstr "Ressenti"
+
+msgctxt "#33025"
+msgid "Observed"
+msgstr "Observé"
+
+msgctxt "#33026"
+msgid "Departure from normal"
+msgstr "Inhabituel"
+
+msgctxt "#33027"
+msgid "Sunrise"
+msgstr "Levé du soleil"
+
+msgctxt "#33028"
+msgid "Sunset"
+msgstr "Coucher du soleil"
+
+msgctxt "#33029"
+msgid "Details"
+msgstr "Détails"
+
+msgctxt "#33030"
+msgid "Outlook"
+msgstr "Perspective"
+
+msgctxt "#33031"
+msgid "Coverflow"
+msgstr "Cover Flow"
+
+msgctxt "#33032"
+msgid "Translate text"
+msgstr "Traduire le texte"
+
+msgctxt "#33033"
+msgid "Map list %s category"
+msgstr "Liste de carte %s catégorie"
+
+msgctxt "#33034"
+msgid "36 Hour"
+msgstr "36 heures"
+
+msgctxt "#33035"
+msgid "Maps"
+msgstr "Cartes"
+
+msgctxt "#33036"
+msgid "Hourly"
+msgstr "Toutes les heures"
+
+msgctxt "#33037"
+msgid "Weekend"
+msgstr "Fin de semaine"
+
+msgctxt "#33038"
+msgid "%s day"
+msgstr "%s jour"
+
+msgctxt "#33049"
+msgid "Alert"
+msgstr "Alerte"
+
+msgctxt "#33050"
+msgid "Alerts"
+msgstr "Alertes"
+
+msgctxt "#33051"
+msgid "Choose Your"
+msgstr "Choisissez votre"
+
+msgctxt "#33052"
+msgid "Check"
+msgstr "Vérifier"
+
+msgctxt "#33053"
+msgid "Configure the"
+msgstr "Configurer le"
+
+msgctxt "#33054"
+msgid "Seasons"
+msgstr "Saisons"
+
+msgctxt "#33055"
+msgid "Use your"
+msgstr "Utilisez votre"
+
+msgctxt "#33056"
+msgid "Watch your"
+msgstr "Surveillez votre"
+
+msgctxt "#33057"
+msgid "Listen to"
+msgstr "Écouter"
+
+msgctxt "#33058"
+msgid "View your"
+msgstr "Visualisez votre"
+
+msgctxt "#33059"
+msgid "Configure the"
+msgstr "Configurer le"
+
+msgctxt "#33060"
+msgid "Power"
+msgstr "Alimentation"
+
+msgctxt "#33061"
+msgid "Menu"
+msgstr "Menu"
+
+msgctxt "#33062"
+msgid "Play the"
+msgstr "Lire le"
+
+msgctxt "#33063"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "#33065"
+msgid "Editor"
+msgstr "Éditeur"
+
+msgctxt "#33066"
+msgid "About your"
+msgstr "À propos de votre"
+
+msgctxt "#33067"
+msgid "Star rating"
+msgstr "Évaluation"
+
+msgctxt "#33068"
+msgid "Background"
+msgstr "Arrière-plan"
+
+msgctxt "#33069"
+msgid "Backgrounds"
+msgstr "Arrières-plans"
+
+msgctxt "#33070"
+msgid "Custom background"
+msgstr "Arrière-plan personnalisé"
+
+msgctxt "#33071"
+msgid "Custom backgrounds"
+msgstr "Arrières-plans personnalisés"
+
+msgctxt "#33072"
+msgid "View Readme"
+msgstr "Voir le fichier lisez-moi"
+
+msgctxt "#33073"
+msgid "View Changelog"
+msgstr "Voir le journal des changements"
+
+msgctxt "#33074"
+msgid "This version of %s requires an"
+msgstr "Cette version de %s exige XBMC"
+
+msgctxt "#33075"
+msgid "XBMC revision of %s or greater to run."
+msgstr "%s ou ultérieure pour fonctionner."
+
+msgctxt "#33076"
+msgid "Please update XBMC."
+msgstr "Veuillez mettre XBMC à jour."
+
+msgctxt "#33077"
+msgid "No data found!"
+msgstr "Aucune donnée trouvée!"
+
+msgctxt "#33078"
+msgid "Next page"
+msgstr "Page suivante"
+
+msgctxt "#33079"
+msgid "Love"
+msgstr "J'aime"
+
+msgctxt "#33080"
+msgid "Hate"
+msgstr "Je deteste"
+
+msgctxt "#33081"
+msgid "This file is stacked, select the part you want to play from."
+msgstr "Ce fichier est empilé, sélectionnez le point à partir duquel vous souhaitez lire."
+
+msgctxt "#33082"
+msgid "Path to script"
+msgstr "Chemin du script"
+
+msgctxt "#33083"
+msgid "Enable custom script button"
+msgstr "Activer le bouton de script personnalisé"
+
+msgctxt "#33084"
+msgid "Auto login"
+msgstr "Auto-connexion"
+
+msgctxt "#33100"
+msgid "Failed to start"
+msgstr "Échec du lancement"
+
+msgctxt "#33101"
+msgid "Webserver"
+msgstr "Serveur Web"
+
+msgctxt "#33102"
+msgid "Event Server"
+msgstr "Serveur d'évènements"
+
+msgctxt "#33103"
+msgid "Remote communication server"
+msgstr "Serveur de communication distant"
+
+msgctxt "#33200"
+msgid "Detected New Connection"
+msgstr "Nouvelle connexion détectée"
+
+msgctxt "#34000"
+msgid "Lame"
+msgstr "Lame"
+
+msgctxt "#34001"
+msgid "Vorbis"
+msgstr "Vorbis"
+
+msgctxt "#34002"
+msgid "Wav"
+msgstr "Wav"
+
+msgctxt "#34003"
+msgid "DXVA2"
+msgstr "DXVA2"
+
+msgctxt "#34004"
+msgid "VAAPI"
+msgstr "VAAPI"
+
+msgctxt "#34005"
+msgid "Flac"
+msgstr "Flac"
+
+msgctxt "#34006"
+msgid "MPEG-4 Audio (FFmpeg M4A AAC)"
+msgstr "Audio MPEG-4 (FFmpeg M4A AAC)"
+
+msgctxt "#34007"
+msgid "Windows Media Audio 2 (FFmpeg wmav2)"
+msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
+
+msgctxt "#34101"
+msgid "2.0"
+msgstr "2.0"
+
+msgctxt "#34102"
+msgid "2.1"
+msgstr "2.1"
+
+msgctxt "#34103"
+msgid "3.0"
+msgstr "3.0"
+
+msgctxt "#34104"
+msgid "3.1"
+msgstr "3.1"
+
+msgctxt "#34105"
+msgid "4.0"
+msgstr "4.0"
+
+msgctxt "#34106"
+msgid "4.1"
+msgstr "4.1"
+
+msgctxt "#34107"
+msgid "5.0"
+msgstr "5.0"
+
+msgctxt "#34108"
+msgid "5.1"
+msgstr "5.1"
+
+msgctxt "#34109"
+msgid "7.0"
+msgstr "7.0"
+
+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 "Jouer les sons de l'interface utilisateur"
+
+msgctxt "#34121"
+msgid "Only when playback stopped"
+msgstr "Uniquement si la lecture est arrêtée "
+
+msgctxt "#34122"
+msgid "Always"
+msgstr "Toujours"
+
+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 élément suivant à lire"
+
+msgctxt "#34202"
+msgid "Can't find a previous item to play"
+msgstr "Aucun élément précédent à lire"
+
+msgctxt "#34300"
+msgid "Failed to start Zeroconf"
+msgstr "Échec lors du lancement de Zeroconf"
+
+msgctxt "#34301"
+msgid "Is Apple's Bonjour Service installed? See log for more info."
+msgstr "Le service Bonjour d'Apple est-il installé? Consulter le journal pour plus d'informations."
+
+msgctxt "#34302"
+msgid "AirPlay requires Zeroconf to be enabled."
+msgstr "AirPlay exige l'activation de Zeroconf."
+
+msgctxt "#34303"
+msgid "Unable to stop Zeroconf"
+msgstr "Impossible d'arrêter Zeroconf"
+
+msgctxt "#34304"
+msgid "AirPlay and AirTunes depend on Zeroconf running."
+msgstr "AirPlay et AirTunes exigent que Zeroconf tourne."
+
+msgctxt "#34400"
+msgid "Video Rendering"
+msgstr "Rendu vidéo"
+
+msgctxt "#34401"
+msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
+msgstr "Échec lors de l'initialisation des filtres/convertisseurs vidéo, repli vers la mise à l'échelle bilinéaire"
+
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "Echec lors de l'initialisation du périphérique audio"
+
+msgctxt "#34403"
+msgid "Check your audiosettings"
+msgstr "Vérifier vos paramètres audio"
+
+msgctxt "#34404"
+msgid "Use gestures for navigation:"
+msgstr "Activer la navigation gestuelle :"
+
+msgctxt "#34405"
+msgid "1 finger swipe left,right,up,down for cursors"
+msgstr "Glissé d'un doigt à gauche, à droite, en haut ou en bas pour le curseur"
+
+msgctxt "#34406"
+msgid "2 finger swipe left for backspace"
+msgstr "Glisser à 2 doigts vers la gauche pour le retour arrière"
+
+msgctxt "#34407"
+msgid "1 finger single tap for enter"
+msgstr "Toquer simple à 1 doigt pour Entrée"
+
+msgctxt "#34408"
+msgid "2 finger single tap or 1 finger long press for contextmenu"
+msgstr "Toquer simple à 2 doigts ou pression longue À 1 doigt pour le menu contextuel"
+
+msgctxt "#35000"
+msgid "Peripherals"
+msgstr "Périphériques"
+
+msgctxt "#35001"
+msgid "Generic HID device"
+msgstr "Périphérique HID générique"
+
+msgctxt "#35002"
+msgid "Generic network adaptor"
+msgstr "Adaptateur réseau générique"
+
+msgctxt "#35003"
+msgid "Generic disk"
+msgstr "Disque générique"
+
+msgctxt "#35004"
+msgid "There are no settings available\nfor this peripheral."
+msgstr "Aucun paramètre disponible\npour ce périphérique."
+
+msgctxt "#35005"
+msgid "New device configured"
+msgstr "Nouveau dispositif configuré"
+
+msgctxt "#35006"
+msgid "Device removed"
+msgstr "Dispositif retiré"
+
+msgctxt "#35007"
+msgid "Keymap to use for this device"
+msgstr "Mappage clavier à utiliser pour ce dispositif"
+
+msgctxt "#35008"
+msgid "Keymap enabled"
+msgstr "Mappage clavier activé"
+
+msgctxt "#35009"
+msgid "Do not use the custom keymap for this device"
+msgstr "Ne pas utiliser de mappage clavier personnalisé pour ce dispositif"
+
+msgctxt "#35100"
+msgid "Enable joystick and gamepad support"
+msgstr "Activer la prise en charge du manche à balai et de la manette de jeu"
+
+msgctxt "#35102"
+msgid "Disable joystick when this device is present"
+msgstr "Désactiver le manche à balai quand ce dispositif est présent"
+
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Activer les touches systèmes en plein écran"
+
+msgctxt "#35500"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "#35501"
+msgid "Class"
+msgstr "Classe"
+
+msgctxt "#35502"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "#35503"
+msgid "Vendor"
+msgstr "Fournisseur"
+
+msgctxt "#35504"
+msgid "Product ID"
+msgstr "ID du produit"
+
+msgctxt "#36000"
+msgid "Pulse-Eight CEC adaptor"
+msgstr "Adaptateur CEC Pulse-Eight"
+
+msgctxt "#36001"
+msgid "Pulse-Eight Nyxboard"
+msgstr "Nyxboard Pulse-Eight"
+
+msgctxt "#36002"
+msgid "Switch to keyboard side command"
+msgstr "Basculer en contrôle clavier"
+
+msgctxt "#36003"
+msgid "Switch to remote side command"
+msgstr "Basculer en contrôle télécommande"
+
+msgctxt "#36004"
+msgid "Press \"user\" button command"
+msgstr "Appuyer sur le bouton de commande « utilisateur »"
+
+msgctxt "#36005"
+msgid "Enable switch side commands"
+msgstr "Activer les contrôles d’interrupteurs"
+
+msgctxt "#36006"
+msgid "Could not open the adaptor"
+msgstr "Ne peut pas ouvrir l'adaptateur"
+
+msgctxt "#36007"
+msgid "Devices to power on when starting XBMC"
+msgstr "Dispositifs à démarrer avec XBMC"
+
+msgctxt "#36008"
+msgid "Devices to power off when stopping XBMC"
+msgstr "Dispositifs à éteindre avec XBMC"
+
+msgctxt "#36009"
+msgid "Put devices in standby mode when activating screensaver"
+msgstr "Mettre les dispositifs en veille à l'activation  de l'économiseur d'écran"
+
+msgctxt "#36010"
+msgid "Wake devices when deactivating screensaver"
+msgstr "Réveiller les dispositifs lors de la désactivation de l'économiseur d'écran"
+
+msgctxt "#36011"
+msgid "Could not detect the CEC com port. Set it up manually."
+msgstr "Impossible de détecter le port de com CEC. Le paramétrer manuellement."
+
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "Ne peut pas initialiser l'adaptateur CEC. Merci de vérifier vos réglages."
+
+msgctxt "#36015"
+msgid "HDMI port number"
+msgstr "Numéro de port HDMI"
+
+msgctxt "#36016"
+msgid "Connected"
+msgstr "Connecté"
+
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "Ne peut pas initialiser l'adaptateur CEC: libCEC non trouvé sur votre système."
+
+msgctxt "#36018"
+msgid "Use the TV's language setting"
+msgstr "Utiliser le paramètre de langue de la TV."
+
+msgctxt "#36019"
+msgid "Connected to HDMI device"
+msgstr "Connecté au périphérique HDMI"
+
+msgctxt "#36020"
+msgid "Make XBMC the active source when starting"
+msgstr "Rendre XBMC comme la source active lors du démarrage"
+
+msgctxt "#36021"
+msgid "Physical address (overrules HDMI port)"
+msgstr "Adresse physique (remplace le port HDMI)"
+
+msgctxt "#36022"
+msgid "COM port (leave empty unless needed)"
+msgstr "Port COM (laisser vide, sauf si nécessaire)"
+
+msgctxt "#36023"
+msgid "Configuration updated"
+msgstr "Configuration mise à jour"
+
+msgctxt "#36024"
+msgid "Failed to set the new configuration. Please check your settings."
+msgstr "Impossible d'appliquer la nouvelle configuration. Veuillez vérifier vos paramètres."
+
+msgctxt "#36025"
+msgid "Send 'inactive source' command when stopping XBMC"
+msgstr "Envoyer la commande « source inactive » lors de l'arrêt d'XBMC"
+
+msgctxt "#36026"
+msgid "Put devices in standby mode when putting the PC in standby"
+msgstr "Mettre les dispositifs en veille quand le PC l'est"
+
+msgctxt "#36027"
+msgid "This device needs servicing"
+msgstr "Ce périphérique nécessite une maintenance"
+
+msgctxt "#36028"
+msgid "Ignore"
+msgstr "Ignorer"
+
+msgctxt "#36029"
+msgid "When the TV is switched off"
+msgstr "Quand la TV est éteinte"
+
+msgctxt "#36030"
+msgid "Connection lost"
+msgstr "Connexion perdue"
+
+msgctxt "#36031"
+msgid "This user does not have permissions to open the CEC adaptor"
+msgstr "Cet utilisateur n'a pas les permissions pour ouvrir l'adaptateur CEC"
+
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "Le port est occupé. Un seul programme peut accéder à l'adaptateur CEC"
+
+msgctxt "#36033"
+msgid "Pause playback when switching to another source"
+msgstr "Mettre la lecture en pause lors du changement de source"
+
+msgctxt "#36035"
+msgid "Always"
+msgstr "Toujours"
+
+msgctxt "#36036"
+msgid "On start/stop"
+msgstr "Au départ/À l'arrêt"
+
+msgctxt "#36037"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#36038"
+msgid "Amplifier / AVR device"
+msgstr "Amplificateur / Enregistreur numérique"
+
+msgctxt "#36039"
+msgid "TV and AVR device (explicit)"
+msgstr "TV et enregistreur numérique (explicite)"
+
+msgctxt "#36040"
+msgid "Unsupported libCEC interface version. %x is lower than the version XBMC supports (%x)"
+msgstr "La version de libCEC n'est pas prise en charge. %x est inférieur à la version prise en charge par XBMC (%x)"
+
+msgctxt "#36041"
+msgid "* Item folder"
+msgstr "* Dossier de l'élément"
+
+msgctxt "#36042"
+msgid "Use limited colour range (16-235)"
+msgstr "Utiliser l'espace colorimétrique restreint (16-235)"
+
+msgctxt "#36101"
+msgid "Change the look and feel of the User Interface."
+msgstr "Changer l'aspect et la convivialité de l'interface utilisateur."
+
+msgctxt "#36102"
+msgid "No info available yet."
+msgstr "Aucune information encore disponible."
+
+msgctxt "#36103"
+msgid "Select the skin for the User Interface. This will define the look and feel of XBMC."
+msgstr "Choisir l'habillage de l'interface utilisateur. Ceci définira l'aspect et la convivialité d'XBMC."
+
+msgctxt "#36104"
+msgid "Change specific skin settings. The available options are dependent on the skin used."
+msgstr "Changer des paramètres spécifiques de l'habillage. Les options disponibles dépendent de l'habillage employé."
+
+msgctxt "#36105"
+msgid "Change the theme associated with your selected skin."
+msgstr "Changer le thème associé à votre habillage choisi."
+
+msgctxt "#36106"
+msgid "Change the colours of your selected skin."
+msgstr "Changer les couleurs de habillage choisi."
+
+msgctxt "#36107"
+msgid "Choose the fonts displayed in the User Interface. The font sets are configured by your skin."
+msgstr "Choisir les polices affichées dans l'interface utilisateur. Les ensembles de polices sont configurées par votre habillage. "
+
+msgctxt "#36108"
+msgid "Resize the view of the GUI."
+msgstr "Redimensionner la vue de l'interface utilisateur graphique."
+
+msgctxt "#36109"
+msgid "Select the media window that XBMC displays on startup."
+msgstr "Choisir la fenêtre de média qu'XBMC affiche au démarrage."
+
+msgctxt "#36110"
+msgid "Select or disable the sound scheme used in the User Interface."
+msgstr "Choisir ou désactiver le jeu de sons utilisé par l'interface utilisateur."
+
+msgctxt "#36111"
+msgid "Turn this off to remove the scrolling RSS news ticker."
+msgstr "Arrêter ceci pour désactiver le téléscripteur du flux RSS."
+
+msgctxt "#36112"
+msgid "Edit the RSS feeds."
+msgstr "Modifier les flux RSS."
+
+msgctxt "#36113"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36114"
+msgid "Chooses the language of the User Interface."
+msgstr "Choisir la langue de l'interface utilisateur."
+
+msgctxt "#36115"
+msgid "Select the formats for temperature, time and date. The available options depend on the selected language."
+msgstr "Sélectionner le format pour la température, la date et l'heure. Les options disponibles dépendent de la langue sélectionnée."
+
+msgctxt "#36116"
+msgid "Choose which character set is used for displaying text in the GUI."
+msgstr "Choisir quelle table de caractères est utilisée pour afficher du texte dans l'interface utilisateur."
+
+msgctxt "#36117"
+msgid "Select country location."
+msgstr "Sélectionner la localisation de la région."
+
+msgctxt "#36118"
+msgid "Select your current timezone."
+msgstr "Sélectionner le fuseau horaire actuel."
+
+msgctxt "#36119"
+msgid "Select the default audio track when different language tracks are available."
+msgstr "Sélectionner la piste audio par défaut quand plusieurs langues sont disponibles."
+
+msgctxt "#36120"
+msgid "Select the default subtitles when different languages are available."
+msgstr "Sélectionner les sous-titres par défaut quand plusieurs langues sont disponibles."
+
+msgctxt "#36121"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36122"
+msgid "Display the (..) item in lists for visiting the parent folder."
+msgstr "Ajouter l'élément (..) dans les listes pour visiter le dossier parent."
+
+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 "Afficher l'extension sur les fichiers multimédia. Par exemple, 'You Enjoy Myself.mp3' serait simplement affiché en tant que '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 "Ignorer certains symboles lors du tri. Par exemple, 'Les Simpsons' serait simplement trié en tant que 'Simpsons' Pour configurer ces symboles, veuillez consulter 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 "Permet de renommer et d'effacer les fichiers depuis le menu contextuel de l'interface (avec un clavier, la touche C permet d'afficher ce menu)."
+
+msgctxt "#36126"
+msgid "Show the add source button from root sections of the user interface."
+msgstr "Afficher le bouton ajouter une source depuis les menus principaux de l'interface utilisateur."
+
+msgctxt "#36127"
+msgid "Show hidden files and directories."
+msgstr "Afficher les dossiers et les fichiers cachés."
+
+msgctxt "#36128"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36129"
+msgid "Set the amount of idle time required before displaying the screensaver."
+msgstr "Régler la période d'inactivité requise avant d'afficher l'économiseur d'écran."
+
+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 "Choisir l'économiseur d'écran. XBMC va forcer l'atténuation quand une lecture en plein écran est en pause ou une boîte de dialogue est active."
+
+msgctxt "#36131"
+msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
+msgstr "Changer des paramètres spécifiques à l'économiseur d'écran. Les options disponibles dépendent de l'économiseur d'écran utilisé."
+
+msgctxt "#36132"
+msgid "Preview the selected screensaver."
+msgstr "Prévisualiser l'économiseur d'écran sélectionné."
+
+msgctxt "#36133"
+msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver."
+msgstr "Si la musique est en cours de lecture, XBMC va démarrer la visualisation sélectionnée à la place de l'économiseur d'écran."
+
+msgctxt "#36134"
+msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
+msgstr "Adoucir l'affichage quand le média est en pause. Invalide pour l'économiseur d'écran 'Adoucir'."
+
+msgctxt "#36135"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36136"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36137"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36138"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36139"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36140"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36141"
+msgid "Show plot information for unwatched media in the Video Library."
+msgstr "Afficher le résumé pour les média non vus de la bibliothèque Vidéo"
+
+msgctxt "#36142"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36143"
+msgid "Get thumbnails for actors when scanning media."
+msgstr "Obtenir les vignettes des acteurs lors du scan."
+
+msgctxt "#36144"
+msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'."
+msgstr "Supprimer le niveau Saison pour les séries TV, basculer entre 'Seulement si une saison' (défaut), 'Toujours' ou 'Jamais'"
+
+msgctxt "#36145"
+msgid "Group movies into 'Movie sets' when browsing the movie library."
+msgstr "Regrouper les films en 'Sagas' lors du parcours de la bibliothèque de films."
+
+msgctxt "#36146"
+msgid "Check for new media files on XBMC startup."
+msgstr "Rechercher l'existence de nouveaux fichiers médias lors du démarrage de XBMC."
+
+msgctxt "#36147"
+msgid "Hide the library scanning progress bar during scans."
+msgstr "Cacher les barres de progression lors du scan de la bibliothèque."
+
+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 "Retirer les éléments de votre bibliothèque qui n'ont pas pu être trouvés (que ce soit renommés, supprimés, ou bien sur un dispositif de stockage amovible actuellement déconnecté)."
+
+msgctxt "#36149"
+msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Exporter la base de données de la bibliothèque Vidéo au format XML. Cela peut potentiellement écraser les fichiers XML déjà présents."
+
+msgctxt "#36150"
+msgid "Import a XML file into the Video Library database."
+msgstr "Importer un fichier XML vers la base de données de la bibliothèque Vidéo."
+
+msgctxt "#36151"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36152"
+msgid "Enable automatic playback of the next file in the list of the selected item."
+msgstr "Activer la lecture automatique du fichier suivant dans la liste d'éléments sélectionnés."
+
+msgctxt "#36153"
+msgid "Adjust the method used to process and display video."
+msgstr "Ajuster la méthode utilisée pour afficher et effectuer le rendu de la vidéo."
+
+msgctxt "#36154"
+msgid "No info available yet."
+msgstr "Pas d'information disponible pour le moment."
+
+msgctxt "#36155"
+msgid "Enable hardware decoding of video files."
+msgstr "Activer le décodage matériel des fichiers."
+
+msgctxt "#36156"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36157"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36158"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36159"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36160"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36161"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36162"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36163"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36164"
+msgid "Select when the refresh rate adjustments should take place."
+msgstr "Sélectionner quand les ajustements du taux de raffraîchissement doivent s'effectuer."
+
+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 "Pause durant quelques secondes pendant un changement de fréquence de rafraîchissement. Activer pour utiliser automatiquement la fréquence de rafraîchissement qui sera la plus adaptée à la vidéo lue. Cela permet potentiellement d'avoir une lecture vidéo parfaitement fluide, vu que les vidéos peuvent être enregistrées selon un grand nombre de fréquence de rafraîchissement et que la fréquence de l'écran doit correspondre pour avoir un affichage fluide."
+
+msgctxt "#36166"
+msgid "Synchronise the video to the refresh rate of the monitor."
+msgstr "Synchroniser la vidéo sur le taux de rafraîchissement du moniteur."
+
+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 "L'audio doit rester synchronisé, soit en ré-échantillonnant, supprimant/copiant des paquets ou en ajustant l'horloge si la désynchro est trop grande."
+
+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."
+
+msgctxt "#36171"
+msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
+msgstr "Sélectionner le niveau de zoom pour les vidéos 4:3 affichées sur les écrans larges."
+
+msgctxt "#36172"
+msgid "VDPAU studio level conversion provides a way for advanced applications like XBMC to influence the colour space conversion."
+msgstr "La conversion de niveau VDPAU permet aux applications avancées comme XBMC d'influencer sur la conversion de l'espace colorimétrique."
+
+msgctxt "#36173"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36174"
+msgid "Enable Teletext when watching a live TV stream."
+msgstr "Activer le Télétexte durant le visionnage d'une chaîne TV en direct."
+
+msgctxt "#36175"
+msgid "Scale Teletext to 4:3 ratio."
+msgstr "Dimensionner le Télétexte pour le ratio 4:3."
+
+msgctxt "#36176"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36177"
+msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
+msgstr "Basculer entre Choisir, Lire (défaut), Reprendre et Afficher les informations. Choisir va proposer des choix, ex. ouvrir un répertoire en mode Fichier. Reprendre va reprendre la lecture au dernier point d'arrêt, même après avoir redémarrer le système."
+
+msgctxt "#36178"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36179"
+msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
+msgstr "Quand un fichier est scanné dans la bibliothèque, le titre des métadonnées sera affiché au lieu de son nom de fichier."
+
+msgctxt "#36180"
+msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode."
+msgstr "Extraire les vignettes et informations, comme les codecs et aspect ratio, pour affichage en mode Bibliothèque."
+
+msgctxt "#36181"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36182"
+msgid "Enables direct playback of videos that are in folders, without having to open those folders first, as well as displaying multi-part video files as single items in non-library views."
+msgstr "Activer la lecture directe des vidéos qui sont dans les dossiers. sans avoir à ouvrir ces fichiers en premier, ainsi que l'affichage des fichiers vidéo en plusieurs parties comme des éléments en vue non-bibliothèque."
+
+msgctxt "#36183"
+msgid "Removes the title, genre etc nodes from the library view. Selecting a category takes you straight to the title view."
+msgstr "Supprime le titre, genre etc.. de la vue bibliothèque. Choisir une catégorie vous emmène directement à la vue titre. "
+
+msgctxt "#36184"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36185"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36186"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36187"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36188"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36189"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36190"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36191"
+msgid "Set a custom directory for your subtitles. This can be a file share."
+msgstr "Définir un répertoire personnel pour vos sous-titres. Cela peut un partage réseau."
+
+msgctxt "#36192"
+msgid "Location of subtitles on the screen."
+msgstr "Empalement des sous-titres sur l'écran."
+
+msgctxt "#36193"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36194"
+msgid "Autorun DVD video when inserted in drive."
+msgstr "Lire automatiquement le DVD après insertion dans le lecteur."
+
+msgctxt "#36195"
+msgid "Force a region for DVD playback."
+msgstr "Forcer une région pour la lecture d'un DVD."
+
+msgctxt "#36196"
+msgid "Attempt to skip 'unskippable' introductions before DVD menu."
+msgstr "Essai de passer les avertissements légaux avant le menu DVD."
+
+msgctxt "#36197"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36198"
+msgid "Select the default movie information source. See the Add-ons Manager for options."
+msgstr "Sélectionner la source d'information par défaut pour les films. Voir le gestionnaire d'extensions pour les options."
+
+msgctxt "#36199"
+msgid "Select the default TV show information source. See the Add-ons Manager for options."
+msgstr "Sélectionner la source d'information par défaut pour les séries TV. Voir le gestionnaire d'extensions pour les options."
+
+msgctxt "#36200"
+msgid "Default scraper used for adding music videos to your library."
+msgstr "Scraper par défaut utilisé pour ajouter les vidéos musicales dans votre bibliothèque."
+
+msgctxt "#36201"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+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."
+
+msgctxt "#36205"
+msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
+msgstr "Trier les chaînes par numéro de chaîne du serveur mais utiliser la propre numérotation des chaînes XBMC."
+
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "Utiliser la numérotation depuis le serveur, au lieu de les configurer manuellement dans XBMC."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "Ouvrir le gestionnaire de chaînes, qui permet de modifier l'ordre des chaînes, leurs noms, logos, etc."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "Demander au serveur de lancer la recherche des chaînes (si supporté)."
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "Supprimer les base de données de chaînes/GEP et réimporter ensuite les données depuis l'arrière-plan."
+
+msgctxt "#36210"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36211"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36212"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36213"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36214"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36215"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36216"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36217"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36218"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "Fenêtre du GEP à afficher par défaut. Chronologie par défaut."
+
+msgctxt "#36220"
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Nombre de jours de données du GEP à importer depuis l'arrière-plan. 3 jours par défaut."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "Délai entre les importations des données du GEP depuis l'arrière-plan. 120 minutes par défaut."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Ne pas importer les données du GEP pendant le visionnement pour minimiser la charge UCT."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "Par défaut, les données du GEP sont stockées dans une base de données locale pour accélérer l'importation quand XBMC redémarre."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Masquer les étiquettes « Aucune information disponible »  quand aucune donnée du GEP ne peut être trouvée pour une chaîne."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "Supprimer la base de données du GEP dans XBMC et réimporter ensuite les données depuis l'arrière-plan."
+
+msgctxt "#36226"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Afficher le flux de la chaîne sélectionne dans une petite fenêtre plutôt qu'en plein écran."
+
+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."
+
+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 "Appuyer sur une touche numéroté en mode Plein écran affichera automatiquement cette chaîne après 1 seconde."
+
+msgctxt "#36232"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36233"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+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."
+
+msgctxt "#36240"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+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 "Exécuter la \"commande de réveil\" ci-dessous quand XBMC se termine ou part en mode Hibernation. L'horodatage du prochain enregistrement est passé comme argument."
+
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "La commande ne sera pas exécutée quand un enregistrement va démarrer durant ce délai. Par défaut 15 minutes."
+
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "La commande a exécuter. Par défaut '/usr/bin/setwakeup.sh'."
+
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Temps à soustraire de l'heure de démarrage du prochain enregistrement planifié. Par défaut 15 minutes."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Exécuter la commande de réveil tous les jours à une heure donnée."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Quand exécuter la commande de réveil journalière."
+
+msgctxt "#36247"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+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 "Demande un NIP pour accéder aux chaînes protégées par verrouillage parental. Les chaînes peuvent être marquées comme verrouillées dans l'éditeur de chaînes de l'onglet général. Une chaîne verrouillée par le parent ne peut être ni lue ni enregistrée sans saisir le NIP, et les informations du GEP sont masquées pour ces chaînes."
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Entrez un nouveau code pour débloquer les chaines bloquées par le filtre parental."
+
+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 "Demande à nouveau le code PIN pour accéder à une chaîne protégée par verrouillage parental alors que le code n'a pas été demandée pendant cette durée.  Par défaut, 300 secondes. "
+
+msgctxt "#36251"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36252"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36253"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36254"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36255"
+msgid "Determine if artists that appear only on compilations are shown in the library artist view."
+msgstr "Détermine si la liste des artistes qui apparaissent seulement dans une compilation doivent aussi apparaitre dans la bibliothèques des artistes.  "
+
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Récupère automatiquement les informations liées à l'album et l'artiste pendant l'analyse."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Sélectionner la source d'information par défaut pour les albums"
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Sélectionner la source d'information par défaut pour les artistes. Voir le gestionnaire d'extensions pour les options."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Met à jour la liste des médias au démarrage de XBMC."
+
+msgctxt "#36260"
+msgid "No info available yet."
+msgstr "Pas d'info disponible maintenant."
+
+msgctxt "#36261"
+msgid "Path where taken screenshots will be stored."
+msgstr "Chemin de stockage des captures d'écran."
+
+msgctxt "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Exporte la base de données musicale vers un fichier XML. Si un fichier XML existe, celui-ci sera écrasé."
+
+msgctxt "#36263"
+msgid "Import a XML file into the Music Library database."
+msgstr "Importer un fichier XML dans votre base de donnée musicale."
+
+msgctxt "#36264"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36265"
+msgid "XBMC automatically plays the next item in the current folder. For example, in Files View: After a track has been played, XBMC would automatically play the next track in the same folder."
+msgstr "XBMC joue automatiquement l'item suivant dans le dossier actuel. Par exemple, dans la vue par fichiers: Après qu'un morceau ait été lu, XBMC va automatiquement lire la piste suivante dans le même dossier."
+
+msgctxt "#36266"
+msgid "When songs are added to a playlist they are queued instead of playback starting immediately."
+msgstr "Quand des sons sont ajoutés à une liste de lecture ils sont mis en attente au lieu d'être lus immédiatement. "
+
+msgctxt "#36267"
+msgid "XBMC will read the ReplayGain information encoded in your audio files by a program such as MP3Gain and normalise the sound levels accordingly."
+msgstr "XBMC va lire les infos de normalisation encodées dans votre fichier audio via un programme comme MP3Gain et les utiliser pour normaliser les niveaux sonores."
+
+msgctxt "#36268"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "89dB est la valeur standard conseillée par défaut. Attention lors de la modification de cette valeur."
+
+msgctxt "#36269"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "89dB est la valeur standard conseillée par défaut. Attention lors de la modification de cette valeur."
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "Réduit le volume du fichier si des coupures sont susceptibles de se produire."
+
+msgctxt "#36271"
+msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds."
+msgstr "Fondu entre deux pistes audio. Vous pouvez régler le niveau de chevauchement de 1 à 15 secondes."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Permettre le fondu quand deux pistes proviennent d'un même album."
+
+msgctxt "#36273"
+msgid "Select the visualisation that will be displayed while listening to music."
+msgstr "Sélectionner la visualisation qui sera affichée durant l'écoute de musique."
+
+msgctxt "#36274"
+msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
+msgstr "Lis les informations taguées d'une fichier son. Pour un gros dossier cela peut ralentir la vitesse de lecture, en particulier sur un réseau."
+
+msgctxt "#36275"
+msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
+msgstr "Contrôler la manière dont les noms de morceaux sont affichés dans l'Interface Utilisateur. Afin de fonctionner correctement, les étiquettes ID3 doivent être activées."
+
+msgctxt "#36276"
+msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
+msgstr "Utilisé pour les informations de l'interface utilisateur du côté droit. Cela est traditionnellement utilisé pour afficher la durée des pistes."
+
+msgctxt "#36277"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36278"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36279"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36280"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36281"
+msgid "XBMC will search for thumbs on remote shares and optical media. This can often slow down the listing of network folders."
+msgstr "XBMC cherchera les minitatures sur les disques partagés et les supports optiques. Cela peut régulièrement ralentir l'affichage des dossiers réseaux."
+
+msgctxt "#36282"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36283"
+msgid "Autorun CDs when inserted in drive."
+msgstr "Lire automatiquement le CD après insertion dans le lecteur."
+
+msgctxt "#36284"
+msgid "Read the information belonging to an audio CD from an internet database."
+msgstr "Lire les informations appartenant à un CD audio à partir d'une base de données sur internet."
+
+msgctxt "#36285"
+msgid "Select the location on your hard drive where ripped tracks will be saved to."
+msgstr "Sélectionnez l'emplacement de votre disque dur où seront enregistrées les pistes copiées."
+
+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 "Étiquettes: [B]%N[/B]: Numéro de la piste, [B]%S[/B]: Numéro du disque, [B]%A[/B]: Artiste, [B]%T[/B]: Titre, [B]%B[/B]: Album, [B]%G[/B]: Genre, [B]%Y[/B]: Année, [B]%F[/B]: Nom du fichier, [B]%D[/B]: Durée, [B]%J[/B]: Date, [B]%R[/B]: Note, [B]%I[/B]: Taille du fichier."
+
+msgctxt "#36287"
+msgid "Select which audio encoder to use when ripping."
+msgstr "Sélectionner l'encodeur audio que vous voulez utiliser pour l'encodage."
+
+msgctxt "#36288"
+msgid "Select which quality you want to rip your files."
+msgstr "Sélectionner la qualité que vous voulez pour encoder vos fichiers."
+
+msgctxt "#36289"
+msgid "Select which bitrate to use for the specified audio encoder for audio compression."
+msgstr "Sélectionner le taux d'échantillonnage à utiliser pour l'encodeur audio spécifié pour la compression audio."
+
+msgctxt "#36290"
+msgid "For FLAC define compression level, default 5"
+msgstr "Pour le FLAC, définir le niveau de compression (5 par défaut)"
+
+msgctxt "#36291"
+msgid "Auto eject disc after rip is complete."
+msgstr "Éjecte automatiquement le CD à la fin de l'extraction."
+
+msgctxt "#36292"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36293"
+msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
+msgstr "Pendant la lecture d'un fichier musique, XBMC recherchera le fichier .cdg correspondant et affichera ses images."
+
+msgctxt "#36294"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36295"
+msgid "Select the font used during karoake."
+msgstr "Choississez la police pour le karaoké."
+
+msgctxt "#36296"
+msgid "Select the size of the font used during karoake."
+msgstr "Choississez la taille de police pour le karaoké."
+
+msgctxt "#36297"
+msgid "Select the font colour used during karoake."
+msgstr "Définir la couleur de la police utilisée pour le karaoke."
+
+msgctxt "#36298"
+msgid "Select the character set used during karoake."
+msgstr "Sélectionner le jeux de caractères utilisé pendant un karaoké."
+
+msgctxt "#36299"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36300"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36301"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36302"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36303"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36304"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36305"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36306"
+msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
+msgstr "Si les information EXIF existent (date, heure, appareil utilisé, etc.), elles seront affichées."
+
+msgctxt "#36307"
+msgid "Automatically generate picture thumbnails when entering picture folder."
+msgstr "Générer automatiquement les miniatures d'image lors de l'accès à un dossier d'images."
+
+msgctxt "#36308"
+msgid "Pictures will automatically rotate according to information in the EXIF tag, if found."
+msgstr "Les images seront automatiquement retourner en fonction des informations EXIF, s'il y en a."
+
+msgctxt "#36309"
+msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
+msgstr "Montrer les médias vidéos dans la liste des fichiers images, puisque la plupart des appareils photo numériques actuels disposent de l'enregistrement vidéo."
+
+msgctxt "#36310"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36311"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36312"
+msgid "Select the amount of time that each image is displayed in a slideshow."
+msgstr "Sélectionner la durée pendant laquelle chaque image est affichée pendant le diaporama."
+
+msgctxt "#36313"
+msgid "Images in a slideshow will pan and zoom while displayed."
+msgstr "Panoramique et zoom des images pendant le diaporama."
+
+msgctxt "#36314"
+msgid "View slideshow images in a random order."
+msgstr "Regarder les photos du diaporama dans un ordre aléatoire."
+
+msgctxt "#36315"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36316"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36317"
+msgid "Select up to three locations for which the weather can be displayed."
+msgstr "Sélectionner jusqu'à trois endroits pour lesquels la météo sera affichée"
+
+msgctxt "#36318"
+msgid "Specify the default weather information source. See the Add-ons Manager for options."
+msgstr "Spécifier la source d'information météo par défaut. Voir le gestionnaire d'extensions pour les options."
+
+msgctxt "#36319"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36320"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36321"
+msgid "Display name of the XBMC installation when using various network services."
+msgstr "Afficher le nom de l'installation XBMC lors de l'utilisation de plusieurs services réseaux"
+
+msgctxt "#36322"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36323"
+msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
+msgstr "Activer le server UPnP. Cela vous permet de diffuser des médias à n'importe quel client UPnP."
+
+msgctxt "#36324"
+msgid "When a manual or automatical library update occurs, notify UPnP clients."
+msgstr "Lorsque une mise à jour manuelle ou automatique de la bibliothèque a lieu, notifier les clients UPnP."
+
+msgctxt "#36325"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36326"
+msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
+msgstr "Active le client UPnP. Cela permettra de contrôler la diffusion de médias à partir de n'importe quel serveur UPnP avec un point de contrôle et de contrôler la lecture à partir de ce serveur."
+
+msgctxt "#36327"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36328"
+msgid "Enable remote users to control XBMC through the built-in webserver."
+msgstr "Permettre aux utilisateurs distants de contrôler XBMC via le serveur web embarqué."
+
+msgctxt "#36329"
+msgid "Define the webserver port."
+msgstr "Définisser le port du serveur web."
+
+msgctxt "#36330"
+msgid "Define the webserver username."
+msgstr "Définisser le nom d'utilisateur du serveur web."
+
+msgctxt "#36331"
+msgid "Define webserver password."
+msgstr "Définisser le mot de passe du serveur web."
+
+msgctxt "#36332"
+msgid "Select between web interfaces installed via the Add-on Manager."
+msgstr "Sélectionner l'une des interfaces web installées via le gestionnaire d'extensions."
+
+msgctxt "#36333"
+msgid "No info available yet."
+msgstr "Pas d'information disponible pour le moment."
+
+msgctxt "#36334"
+msgid "Allow programs on this computer to control XBMC via the Web Interface or the JSON-RPC interface protocol."
+msgstr "Permettre aux programmes sur cet ordinateur de contrôler XBMC via l'Interface Web ou le protocole d'interface JSON-RPC."
+
+msgctxt "#36335"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36336"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36337"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36338"
+msgid "Allow programs on the network to control XBMC."
+msgstr "Autoriser le contrôle de XBMC par les programmes sur le réseau."
+
+msgctxt "#36339"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36340"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36341"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36342"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36343"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36344"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36345"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36346"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36347"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36348"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36349"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36350"
+msgid "Automatically send 'Wake-On-Lan' to server(s) right before trying to access shared files or services."
+msgstr "Envoyer automatiquement un \"Wake On Lan\" au(x) serveur(s) avant d'accéder aux partages de fichier et services."
+
+msgctxt "#36351"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36352"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36353"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36354"
+msgid "The main benefit is for multi-screen configurations, so XBMC can be used without automatically minimising other applications. Uses a bit more resources and playback may be slightly less smooth."
+msgstr "Le principal avantage est pour les configurations multi-écrans, car XBMC peut être utilisé sans automatiquement minimiser les autres applications. Utilise un peu plus de ressources et la lecture peut être légèrement moins fluide."
+
+msgctxt "#36355"
+msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out."
+msgstr "Dans une configuration multi-écrans, les écrans où XBMC n'est pas affichés seront éteint."
+
+msgctxt "#36356"
+msgid "Eliminate vertical tearing."
+msgstr "Supprime la distorsion verticale."
+
+msgctxt "#36357"
+msgid "Calibrate the User Interface by adjusting the overscan. Use this tool if the image being displayed is too large or small for your display."
+msgstr "Calibre l'interface utilisateur en ajustant le surbalayage. Utiliser cet outil si l'image affichée est trop grande ou trop petite pour votre écran."
+
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Motifs de test pour la calibration du matériel d'affichage."
+
+msgctxt "#36359"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+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 "#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 "#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."
+
+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."
+
+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."
+
+msgctxt "#36374"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36375"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36376"
+msgid "When activated, your keyboard arrows will move the selection on the virtual keyboard. When deactivated, they will move the cursor from your text."
+msgstr "Lorsque cela est activé, les flèches de votre clavier déplaceront la sélection sur le clavier virtuel. Lorsque cela est désactivé, ils déplaceront le curseur de votre texte."
+
+msgctxt "#36377"
+msgid "Use a mouse or touch screen device to control XBMC. Note: disabling will cause you to lose control over XBMC when no keyboard or remote is present."
+msgstr "Utiliser une souris ou un écran tactile pour contrôler XBMC. Note: désactiver ceci vous fera perdre le contrôle de XBMC si aucun clavier ou télécommande n'est présent."
+
+msgctxt "#36378"
+msgid "Use a joystick to control XBMC."
+msgstr "Utiliser une manette pour controler XBMC."
+
+msgctxt "#36379"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36380"
+msgid "If your internet connection uses a proxy, configure it here."
+msgstr "Si votre connexion Internet utilise un proxy, configurez le içi."
+
+msgctxt "#36381"
+msgid "Configure which proxy type is used."
+msgstr "Configurer quel type de proxy est utilisé."
+
+msgctxt "#36382"
+msgid "Configure the proxy server address."
+msgstr "Configurer l'adresse du serveur proxy."
+
+msgctxt "#36383"
+msgid "Configure the proxy server port."
+msgstr "Configurer le port du serveur proxy."
+
+msgctxt "#36384"
+msgid "Configure the proxy server username."
+msgstr "Configurer le nom d'utilisateur du serveur proxy."
+
+msgctxt "#36385"
+msgid "Configure the proxy server password."
+msgstr "Configurer le mot de passe du serveur proxy."
+
+msgctxt "#36386"
+msgid "If you have limited bandwidth available, XBMC will try to keep within these limits."
+msgstr "Si vous avez une bande passante limitée, XBMC va essayer de rester à l'intérieur de ces limites."
+
+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 "Éteindre l'affichage si inactif. Utile pour les téléviseurs qui s'éteignent lorsqu'il n'y a aucun signal d'affichage détecté et que vous ne voulez pas hiberner/éteindre l'ordinateur entièrement."
+
+msgctxt "#36388"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36389"
+msgid "Define how long XBMC should idle before shutting down."
+msgstr "Définissez pendant combien de temps XBMC devra rester en veille avant de s'éteindre."
+
+msgctxt "#36390"
+msgid "Define what action XBMC should do when it has been idle for a long period of time."
+msgstr "Définissez le comportement de XBMC lorsqu'il est resté en veille pendant une longue période de temps."
+
+msgctxt "#36391"
+msgid "Turn debug logging on or off. Useful for troubleshooting."
+msgstr "Active l'enregistrement des informations de débogage. Utile pour identifer les problèmes."
+
+msgctxt "#36392"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36393"
+msgid "Folder used to save screenshots taken within XBMC."
+msgstr "Dossier pour enregistrer les captures d'écran prises avec XBMC."
+
+msgctxt "#36394"
+msgid "Specify additional libraries to be included in the debug log."
+msgstr "Spécifiez des librairies supplémentaires à ajouter aux logs de debug."
+
+msgctxt "#36395"
+msgid "Open the Master Lock dialogue, where you can configure your Master Lock options."
+msgstr "Ouvrir la boîte de dialogue Verrou Administrateur, où vous pouvez configurer vos options de verrouillage."
+
+msgctxt "#36396"
+msgid "Define the PIN code used for the master lock."
+msgstr "Définir le code PIN pour le verrouillage général."
+
+msgctxt "#36397"
+msgid "If enabled, the master lock code is required to unlock XBMC on startup "
+msgstr "S'il est activé, le code verrou principal est nécessaire pour déverrouiller XBMC au démarrage."
+
+msgctxt "#36398"
+msgid "Define the maximum number of retries before XBMC is closed down."
+msgstr "Définit le maximum de fois que XBMC va réessayer avant de se fermer."
+
+msgctxt "#36399"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36400"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36401"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36402"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36403"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36404"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36405"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36406"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36407"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36408"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36409"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36410"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36411"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36412"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36413"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36414"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36415"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36416"
+msgid "Define the Apple remote standard used."
+msgstr "Définit l'usage standard de la télécommande Apple."
+
+msgctxt "#36417"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36418"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36419"
+msgid "Define locations used for retrieving weather information."
+msgstr "Définissez des lieux pour trouver des informations sur la météo."
+
+msgctxt "#36420"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36421"
+msgid "Bypassing VDPAU mixer saves resources on low power systems but slightly reduces picture quality"
+msgstr "Ne pas utiliser le mixer VDPAU libère des ressources sur les petites configurations mais réduit légèrement la qualité de l'image."
+
+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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Choisir ce qu'il se passera quand un élément du GEP est sélectionné : [Afficher le menu contextuel] l'activera vous permettant de choisir d'autres actions; [Changer de chaîne] syntonisera instantanément la chaîne; [Afficher les informations] affichera les informations détaillées avec l'histoire et d'autres options; [Enregistrer] créera une minuterie d'enregistrement pour l'élément choisi."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Afficher le menu contextuel"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Changer de canal"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Afficher les informations"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Enregistrer"
+
+msgctxt "#36500"
+msgid "Stereoscopic mode (current)"
+msgstr "Mode stéréoscopique (actuel)"
+
+msgctxt "#36501"
+msgid "Stereoscopic mode"
+msgstr "Mode stéréoscopique"
+
+msgctxt "#36502"
+msgid "None"
+msgstr "Aucun"
+
+msgctxt "#36503"
+msgid "Over/Under"
+msgstr "Dessus/Dessous"
+
+msgctxt "#36504"
+msgid "Side by side"
+msgstr "Côte à côte"
+
+msgctxt "#36505"
+msgid "Anaglyph Red/Cyan"
+msgstr "Anaglyphe Rouge/Cyan"
+
+msgctxt "#36506"
+msgid "Anaglyph Green/Magenta"
+msgstr "Anaglyphe Vert/Magenta"
+
+msgctxt "#36507"
+msgid "Interlaced"
+msgstr "Entrelacé"
+
+msgctxt "#36508"
+msgid "Hardware Based"
+msgstr "Basé sur le matériel"
+
+msgctxt "#36509"
+msgid "Monoscopic - 2D"
+msgstr "Monoscopique - 2D"
+
+msgctxt "#36520"
+msgid "Playback mode of stereoscopic videos"
+msgstr "Lecture de vidéo en mode stéréoscopique"
+
+msgctxt "#36521"
+msgid "Ask me"
+msgstr "Demandez moi"
+
+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é"
+
+msgctxt "#36525"
+msgid "Same as movie (autodetect)"
+msgstr "Pareil que le film (détecter automatiquement)"
+
+msgctxt "#36526"
+msgid "Disable stereoscopic mode when playback is stopped"
+msgstr "Désactiver le mode stéréoscopique quand la lecture est stoppée"
+
+msgctxt "#36527"
+msgid "This video is stereoscopic. Select playback mode"
+msgstr "La vidéo est stéréoscopique. Choisissez le mode de lecture"
+
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "Choisir le mode stéréoscopique"
+
+msgctxt "#36529"
+msgid "Mono (2D)"
+msgstr "Mono (2D)"
+
+msgctxt "#36530"
+msgid "Preferred mode"
+msgstr "Mode préféré"
+
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "Choisir le mode alternatif..."
+
+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"
+
+msgctxt "#36536"
+msgid "Stereoscopic mode inverted"
+msgstr "Mode stéréoscopique inversé"
+
+msgctxt "#36537"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36538"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36539"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36540"
+msgid "No info available yet."
+msgstr "Pas d'information actuellement disponible."
+
+msgctxt "#36541"
+msgid "Allows volume control from AirPlay clients."
+msgstr "Autoriser le contrôle du volume par les clients AirPlay."
+
+msgctxt "#36542"
+msgid "Output to both analogue (headphones) and HDMI"
+msgstr "Sortie simultanée en analogique (écouteurs) et HDMI"
+
+msgctxt "#36543"
+msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
+msgstr "Activer ceci pour rendre les dialogues plus présent, comparativement aux effets sonores, lors du remixage audio multi-canaux"
+
+msgctxt "#36544"
+msgid "Enable hardware decoding of video files."
+msgstr "Activer le décodage matériel des fichiers."
+
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profondeur stéréoscopique des sous-titres"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Règle la profondeur visuelles des sous-titres pour les vidéos stéréoscopiques. Plus grande sera la valeur, plus proches les sous-titres apparaîtront pour le téléspectateur."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Utiliser des textures de plus grande qualité pour les illustrations (demande plus de mémoire)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limiter la résolution de l'interface utilisateur pour économiser de la mémoire. N'affecte pas la lecture vidéo. 1080 = sans limite. Redémarrage nécessaire."
+
+msgctxt "#37000"
+msgid "(Visually Impaired)"
+msgstr "(Malvoyants)"
+
+msgctxt "#37001"
+msgid "(Directors Comments)"
+msgstr "(Commentaires du réalisateur)"
+
+msgctxt "#37002"
+msgid "(Directors Comments 2)"
+msgstr "(Commentaires du réalisateur 2)"
+
+msgctxt "#37011"
+msgid "(CC)"
+msgstr "(Malentendants)"
+
+msgctxt "#37012"
+msgid "(Forced)"
+msgstr "(Forcé)"
+
+msgctxt "#37013"
+msgid "(Directors Comments)"
+msgstr "(Commentaires du réalisateur)"
+
+msgctxt "#37014"
+msgid "Last used profile"
+msgstr "Dernier profil utilisé"
+
+msgctxt "#37015"
+msgid "Browse Into"
+msgstr "Parcourir"
+
+msgctxt "#37016"
+msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
+msgstr "Activer cette option si votre matériel est capable de décoder les flux E-AC3."
+
+msgctxt "#37017"
+msgid "Dual audio output"
+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"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Activer les illustrations à plus grande profondeur de couleurs"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Définir une limite de résolution de l'interface utilisateur"
index c771e17..6dc7179 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Sélectionnez le répertoire de destination"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Utiliser tous les haut-parleurs en stéréo"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Nombre de canaux"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Crédits"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Désactivé"
@@ -4981,10 +4973,6 @@ 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"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Arrêter l'extraction du CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Source non disponible"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Que souhaitez-vous faire avec les éléments media de %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Garder"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Supprimer"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Après traitement Vidéo"
@@ -5923,7 +5927,7 @@ msgstr "%i jours"
 
 msgctxt "#19000"
 msgid "Switch to channel"
-msgstr "Changer de canal"
+msgstr "Changer de chaîne"
 
 msgctxt "#19001"
 msgid "Separate the search words by using AND, OR and/or NOT."
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Enregistrements TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Répertoire par défaut pour les vignettes d'Enregistreur Vidéo"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Chaînes "
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "Guide des Programmes"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Y aller maintenant"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Intervalle de mise à jour du Guide des Programmes"
@@ -6313,6 +6317,10 @@ msgctxt "#19099"
 msgid "Service"
 msgstr "Service"
 
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
 msgctxt "#19101"
 msgid "Provider"
 msgstr "Fournisseur"
@@ -8089,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Échec du téléchargement des infos Artiste"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Ecraser les tags de la chanson avec les infos en ligne"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Avec cette option d'activée, toutes les informations téléchargées pour les albums et les artistes vont écraser les informations stockées dans les tags de la chansons, tel que les genres, l'année, l'artiste, etc. Utile si vous avez les identifiants MusicBrainz dans les tags de vos chansons."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Musique Android"
@@ -8865,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Effacer le partage média"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Dossier de sous-titres"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film & dossier alternatif de sous-titres"
@@ -9237,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mélangé"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Emplacement du sous-titre"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixe"
@@ -10185,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Sauvegarder les sous-titres dans le répertoire du film"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Service TV par défaut"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Choisissez le service qui sera utilisé par défaut pour chercher des sous-titres pour les émissions TV"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Service films par défaut"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Choisissez le service qui sera utilisé par défaut pour chercher des sous-titres pour des films"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Chaîne de recherche manuelle"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Saisissez le nom de votre recherche"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifications"
@@ -10569,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuration des Haut-Parleurs"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11426,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Fenêtre EPG à afficher par défaut. Par défaut Ligne de temps."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Nombre de jours du GEP à importer du serveur. Par défaut 2 jours."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Nombre de jours à importer depuis le serveur pour les données du Guide Electronique. Par défaut 3 jours."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11993,18 +12021,10 @@ 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."
@@ -12237,9 +12257,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Choisissez ce qui se passe lorsqu'un item du Guide Electronique est sélectionné : [Afficher le menu contextuel] va afficher le menu contextuel à partir duquel vous pourrez choisir d'autres actions ; [Changer de chaîne] va immédiatement zapper vers la chaîne ; [Afficher les informations] va afficher les informations détaillées avec le résumé et autres options ; [Enregistrer] va créer un enregistrement de l'item sélectionné."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Afficher le menu contextuel"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Changer de chaîne"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Afficher les informations"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Enregistrer"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12377,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Activer le décodage matériel des fichiers."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profondeur stéréoscopique des sous-titres"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Règle la profondeur visuelles des sous-titres pour les vidéos stéréoscopiques. Plus grande sera la valeur, plus proches les sous-titres apparaîtront pour le téléspectateur."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Utiliser des textures de plus haute qualité pour les jaquettes et les fanarts (utilise plus de mémoire)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limite la résolution de l'interface pour économiser de la mémoire. Cela n'affecte pas la lecture vidéo. Utiliser 1080 pour lever la limite. Nécessite un redémarrage."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Malvoyants)"
@@ -12424,3 +12476,11 @@ 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"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Autoriser les artworks avec une plus grande profondeur de couleur"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Configurer la résolution limite de l'interface"
index f3f3af5..b5a58f7 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleccionar carpeta destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Saída estéreo a todos os altofalantes"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canles"
@@ -1189,10 +1185,18 @@ msgctxt "#336"
 msgid "Framerate conversion"
 msgstr "Conversión da taxa de cadros"
 
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configuración da saída"
+
 msgctxt "#338"
 msgid "Fixed"
 msgstr "Fixa"
 
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimizado"
+
 msgctxt "#340"
 msgid "Various artists"
 msgstr "Varios artistas"
@@ -1217,6 +1221,10 @@ msgctxt "#345"
 msgid "Year"
 msgstr "Ano"
 
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalizar o nivel ao diminuír as canles"
+
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
 msgstr "Receptor compatíbel con DTS-HD"
@@ -1501,6 +1509,10 @@ msgctxt "#420"
 msgid "Best Match"
 msgstr "Mellor Coincidencia"
 
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Manter o dispositivo de audio activo"
+
 msgctxt "#422"
 msgid "Delete album info"
 msgstr "Eliminar información do álbum"
@@ -1645,6 +1657,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Trocar vista"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limitar a taxa de mostraxe (kHz) "
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Subtítulos"
@@ -1693,10 +1709,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Apagado"
@@ -1963,7 +1975,7 @@ msgstr "Sen biografía para este artista"
 
 msgctxt "#548"
 msgid "Downmix multichannel audio to stereo"
-msgstr "Mesturar audio multicanle a estereo"
+msgstr "Mesturar audio multicanle a estéreo"
 
 msgctxt "#550"
 msgid "Sort by: %s"
@@ -2265,6 +2277,10 @@ msgctxt "#636"
 msgid "Custom"
 msgstr "Personalizado"
 
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "Normalización do volume"
+
 msgctxt "#638"
 msgid "ReplayGain volume adjustments"
 msgstr "Axustes de volume da ganancia de re-reprodución"
@@ -2925,6 +2941,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Engadidos de Programas"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Estabrecer a miniatura do engadido"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Configuración de Engadido"
@@ -3509,6 +3529,10 @@ msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Buscador de engadidos"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Restabelecer a configuración anterior á predefinida"
+
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
 msgstr "Ten a certeza de querer restabelecer a configuración desta categoria?"
@@ -3521,6 +3545,14 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "Sen axuda dispoñíbel"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Restabelecer todos os axustes visíbeis aos seus valores predefinidos."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Sen categorías dispoñíbeis"
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Diálogo Si/Non"
@@ -3667,7 +3699,7 @@ msgstr "Información do Álbum"
 
 msgctxt "#10524"
 msgid "Movie info"
-msgstr "Información da Película"
+msgstr "Info. do filme"
 
 msgctxt "#12000"
 msgid "Select dialogue"
@@ -3857,6 +3889,10 @@ msgctxt "#12346"
 msgid "Password retry limit exceeded."
 msgstr "Límite de reintentos de contrasinal excedido."
 
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "O sistema apagarase agora."
+
 msgctxt "#12348"
 msgid "Item locked"
 msgstr "Elemento bloqueado"
@@ -4607,7 +4643,7 @@ msgstr "Apagar LED durante a reprodución"
 
 msgctxt "#13346"
 msgid "Movie information"
-msgstr "Información da película"
+msgstr "Información do filme"
 
 msgctxt "#13347"
 msgid "Queue item"
@@ -4909,6 +4945,10 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "Reproducir só isto"
 
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Activar o escalado HQ para sobre-escalados"
+
 msgctxt "#13436"
 msgid "Allow hardware acceleration (libstagefright)"
 msgstr "Permitir aceleración hardware (libstagefright)"
@@ -4941,6 +4981,10 @@ msgctxt "#13503"
 msgid "Video clock (Resample audio)"
 msgstr "Vídeo clock (Remostreo de audio)"
 
+msgctxt "#13504"
+msgid "Maximum speedup/slowdown amount (%)"
+msgstr "Máxima cantidade de aceleramento/desaceleramento (%)"
+
 msgctxt "#13505"
 msgid "Resample quality"
 msgstr "Calidade de remostreo"
@@ -5141,6 +5185,10 @@ msgctxt "#14024"
 msgid "Enter the nearest large town"
 msgstr "Introducir a cidade grande máis próxima"
 
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "Caché de Vídeo/Audio/DVD  - Disco duro"
+
 msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "Caché de vídeo - DVD-ROM"
@@ -5409,6 +5457,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Deter a extracción do CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Fonte non dispoñíbel"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Manter"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Borrar"
@@ -5485,6 +5541,10 @@ msgctxt "#15213"
 msgid "Play using..."
 msgstr "Reproducir empregando..."
 
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "Empregar sincronización A/V suavizada"
+
 msgctxt "#15215"
 msgid "Hide file names in thumbs view"
 msgstr "Agochar o nome dos ficheiros na vista de miniaturas"
@@ -5539,7 +5599,7 @@ msgstr "Introducir novo título"
 
 msgctxt "#16009"
 msgid "Enter the movie name"
-msgstr "Introducir nome da película"
+msgstr "Introducir o nome do filme"
 
 msgctxt "#16010"
 msgid "Enter the profile name"
@@ -5829,6 +5889,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-procesamento"
@@ -5921,10 +5985,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Gravacións de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Cartafol predefinido das miniaturas do PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canles"
@@ -6125,6 +6185,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ir a 'agora'"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Intervalo de actualización da Guía"
@@ -6697,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 "Non se puido habilitar o complemento PRV. Verifique os axustes ou o rexistro para máis información."
+
 msgctxt "#19224"
 msgid "Recording aborted"
 msgstr "Gravación cancelada"
@@ -6737,6 +6805,10 @@ msgctxt "#19233"
 msgid "Display a notification on timer updates"
 msgstr "Amosar unha notificación cando se actualice o temporizador"
 
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Usar os números das canles do motor (só funciona 1 complemento PRV habilitado)"
+
 msgctxt "#19235"
 msgid "PVR manager is starting up"
 msgstr "Se está a iniciar o xestor do PVR"
@@ -6757,10 +6829,18 @@ msgctxt "#19239"
 msgid "Starting background threads"
 msgstr "Iniciando fíos en segundo plano"
 
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Non se habilitou ningún engadido de PVR"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
 msgstr "O xestor de PVR foi habilitado sen ningún"
 
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "engadido de PVR habilitado. Activado polo menos un"
+
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "para usar a funcionalidade PRV."
@@ -6873,10 +6953,18 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Todas as gravacións"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Non se puideron atopar complementos PVR"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Necesita dun sintonizador, un software motor, e un"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "complemento para o motor que lle permita usar o PVR."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "Por favor visita xbmc.org/pvr para saber máis."
@@ -7545,6 +7633,14 @@ msgctxt "#20085"
 msgid "Show system info"
 msgstr "Amosar información do sistema"
 
+msgctxt "#20086"
+msgid "Show available disk space C: E: F:"
+msgstr "Amosar espazo de disco dispoñíbel C: E: F:"
+
+msgctxt "#20087"
+msgid "Show available disk space E: F: G:"
+msgstr "Amosar espazo de disco dispoñíbel E: F: G:"
+
 msgctxt "#20088"
 msgid "Weather info"
 msgstr "Información meteorolóxica"
@@ -8143,7 +8239,7 @@ msgstr "Buscar destino"
 
 msgctxt "#20329"
 msgid "Movies are in separate folders that match the movie title"
-msgstr "As películas están en cartafois separados que concordan co seu título"
+msgstr "Os filmes están en cartafoles separados que concordan co seu título"
 
 msgctxt "#20330"
 msgid "Use folder names for lookups"
@@ -8179,7 +8275,7 @@ msgstr "Actor"
 
 msgctxt "#20338"
 msgid "Movie"
-msgstr "Película"
+msgstr "Filme"
 
 msgctxt "#20339"
 msgid "Director"
@@ -8195,7 +8291,7 @@ msgstr "desta ruta da bibloteca de XBMC?"
 
 msgctxt "#20342"
 msgid "Movies"
-msgstr "Películas"
+msgstr "Filmes"
 
 msgctxt "#20343"
 msgid "TV shows"
@@ -8323,7 +8419,7 @@ msgstr "Tempada"
 
 msgctxt "#20374"
 msgid "Downloading movie information"
-msgstr "Descargando información da película"
+msgstr "Descargando información do filme"
 
 msgctxt "#20375"
 msgid "Unassign content"
@@ -8371,7 +8467,7 @@ msgstr "Borrar enlace á serie de TV"
 
 msgctxt "#20386"
 msgid "Recently added movies"
-msgstr "Películas engadidas recentemente"
+msgstr "Filmes engadidas recentemente"
 
 msgctxt "#20387"
 msgid "Recently added episodes"
@@ -8481,6 +8577,10 @@ msgctxt "#20413"
 msgid "Get fanart"
 msgstr "Obter cartel"
 
+msgctxt "#20414"
+msgid "Show fanart in video and music libraries"
+msgstr "Amosar cartel nas biblotecas de video e música"
+
 msgctxt "#20415"
 msgid "Scanning for new content"
 msgstr "Escaneando novos contidos"
@@ -8651,11 +8751,11 @@ msgstr "Nivelar a xerarquía da biblioteca"
 
 msgctxt "#20457"
 msgid "Movie set"
-msgstr "Conxunto de Películas"
+msgstr "Conxunto de filmes"
 
 msgctxt "#20458"
 msgid "Group movies in sets"
-msgstr "Agrupar películas en conxuntos"
+msgstr "Agrupar filmes en conxuntos"
 
 msgctxt "#20459"
 msgid "Tags"
@@ -8761,13 +8861,9 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Borrar recurso compartido"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Cartafol de subtítulos"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
-msgstr "Cartafol de Película e subtítulos alternativos"
+msgstr "Cartafol de filme e subtítulos alternativos"
 
 msgctxt "#21368"
 msgid "Override ASS/SSA subtitles fonts"
@@ -8951,7 +9047,7 @@ msgstr "Scrapers"
 
 msgctxt "#21413"
 msgid "Default movie scraper"
-msgstr "Scraper predefinido para películas "
+msgstr "Scraper predefinido para filmes "
 
 msgctxt "#21414"
 msgid "Default tvshow scraper"
@@ -9133,10 +9229,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mesturado"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Localización dos subtítulos"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixa"
@@ -9169,6 +9261,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 "Preferior os subtítulos externos aos internos"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externo)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Nome do ficheiro"
@@ -9561,6 +9665,10 @@ msgctxt "#22020"
 msgid "Guide"
 msgstr "Guía"
 
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "Permitir erros no ratio de aspecto para minimizar as barras negras"
+
 msgctxt "#22022"
 msgid "Show video files in listings"
 msgstr "Amosar ficheiros de vídeo nas listaxes"
@@ -9711,7 +9819,7 @@ msgstr "Fontes dos medios"
 
 msgctxt "#24007"
 msgid "Movie information"
-msgstr "Información das Películas"
+msgstr "Información dos filmes"
 
 msgctxt "#24008"
 msgid "Screensaver"
@@ -9845,14 +9953,30 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Actualizacións Dispoñibles"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "As dependencias non coinciden, por favor contacte co autor do Engadido."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "O Engadido non ten a estrutura correcta"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s está a ser empregado polo seguintes Engadidos instalados"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Este Engadido non pode ser desinstalado"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Voltar atrás"
 
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Incompatíbel"
+
 msgctxt "#24050"
 msgid "Available Add-ons"
 msgstr "Engadidos dispoñibles"
@@ -9957,6 +10081,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "Bloquear o xestor de Engadidos"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "O Engadido non pode estar desactivado"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "(actual)"
@@ -9965,6 +10093,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 Engadido non é compatíbel ou marcouse como roto no repositorio."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Quere desactivalo no seu sistema?"
@@ -9993,6 +10125,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Faltan algúns ficheiros da pel"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "O Engadido no é compatíbel debido a dependencias non atopadas."
+
 msgctxt "#24105"
 msgid "Pause when searching for subtitles"
 msgstr "Pausar ao buscar subtítulos"
@@ -10037,6 +10173,26 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Gardar o subtítulo no cartafol do filme"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Servizo de TV Predefinido"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Escolla o servizo a empregar de xeito predefinido para buscar os subtítulos das Series de TV"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Servizo de Filmes Predefinido"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Escolla o servizo a empregar de xeito predefinido para buscar os subtítulos dos Filmes"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introducir cadea de búsqueda"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificacións"
@@ -10421,10 +10577,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuración do altofalante"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11233,10 +11385,6 @@ msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Estabelecer a xanela da Guía a amosar, a predefinida é a Liña de Tempo."
 
-msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Número de días da Guía a importar dende o motor. Pedefinidos 2 días."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Intervalo de tempo na importación de datos na Guía dende o motor. Predefinidos 120 minutos."
@@ -11297,10 +11445,22 @@ msgctxt "#36240"
 msgid "No info available yet."
 msgstr "Aínda non hai info. dispoñíbel."
 
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "O comando non se executará cando se inicie unha gravación dentro deste tempo limite. Predefinido 15 minutos."
+
 msgctxt "#36243"
 msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
 msgstr "O comando a executar. O predefinido é '/usr/bin/setwakeup.sh'"
 
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Tempo a restar do tempo inicial da próxima gravación programada. Predefinido 15 minutos."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Executar o comando espertar cada día a unha certa hora."
+
 msgctxt "#36246"
 msgid "When to execute the daily wakeup command."
 msgstr "Hora na que o comando espertar ten que ser executado."
@@ -11485,6 +11645,10 @@ msgctxt "#36305"
 msgid "No info available yet."
 msgstr "Aínda non hai info. dispoñíbel."
 
+msgctxt "#36306"
+msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
+msgstr "Se existe a información EXIF (data, hora, camara empregada, etc), amosarase."
+
 msgctxt "#36307"
 msgid "Automatically generate picture thumbnails when entering picture folder."
 msgstr "Xerar automaticamente miniaturas das imaxes ao entrar no cartafol de imaxes."
@@ -11717,6 +11881,14 @@ msgctxt "#36370"
 msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
 msgstr "Escolla esta opción se o seu receptor pode decodificar fluxos DTS-HD."
 
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Escolla o dispositivo a empregar para reproducir audio 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 "Escolla o dispositivo a empregar para reproducir formatos codificados, estes son calquera dos indicados enriba, nas opcións de 'receptor compatíbel con'."
+
 msgctxt "#36373"
 msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
 msgstr "Configurar o uso dos sons da interface, como os da navegación nos menús e notificacións importantes."
@@ -11901,6 +12073,26 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Aínda non hai info. dispoñíbel."
 
+msgctxt "#36422"
+msgid "Enable hardware video decode using AMLogic decoder"
+msgstr "Activar a decodificación de vídeo por hardware empregando AMLogic"
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Amosar menú contextual"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Trocar á canle"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Amosar información"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Gravar"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Modo estereoscópico (actual)"
@@ -12017,6 +12209,14 @@ msgctxt "#36541"
 msgid "Allows volume control from AirPlay clients."
 msgstr "Permitir controlar o volume dende os clientes de AirPlay."
 
+msgctxt "#36542"
+msgid "Output to both analogue (headphones) and HDMI"
+msgstr "Saída tanto por analóxico (auriculares) como por HDMI"
+
+msgctxt "#36543"
+msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
+msgstr "Actíveo para potenciar os diálogos a diferenza dos sons de fondo cando se reduce o número de canles de audio"
+
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Activar a decodificación por hardware dos ficheiros de vídeo."
@@ -12052,3 +12252,15 @@ msgstr "Último perfil usado"
 msgctxt "#37015"
 msgid "Browse Into"
 msgstr "Buscar en"
+
+msgctxt "#37016"
+msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
+msgstr "Escolla esta opción se o seu receptor pode decodificar fluxos E-AC3."
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "Saída de audio dual"
+
+msgctxt "#37018"
+msgid "Boost centre channel when downmixing"
+msgstr "Potenciar a canle central ao diminuír o número de canles"
index a435461..5454a1e 100644 (file)
@@ -587,7 +587,7 @@ msgstr "Bildwiederholfrequenz automatisch an Video anpassen"
 
 msgctxt "#171"
 msgid "Sort title"
-msgstr "Sortiere Titel"
+msgstr "Sortierungstitel"
 
 msgctxt "#172"
 msgid "Release date"
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Zielordner wählen"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo auf allen Lautsprechern ausgeben"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Anzahl der Kanäle"
@@ -1467,7 +1463,7 @@ msgstr "Taupunkt"
 
 msgctxt "#406"
 msgid "Humidity"
-msgstr "Feuchtigkeit"
+msgstr "Luftfeuchtigkeit"
 
 msgctxt "#409"
 msgid "Defaults"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Anerkennung"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Aus"
@@ -1795,7 +1787,7 @@ msgstr "Übersteuerungsreserve"
 
 msgctxt "#495"
 msgid "Upsample videos to GUI resolution"
-msgstr "Videos in GUI-Auflösung abspielen"
+msgstr "Videos in Auflösung der Benutzeroberfläche abspielen"
 
 msgctxt "#496"
 msgid "Calibration"
@@ -2255,7 +2247,7 @@ msgstr "Alle Titel von"
 
 msgctxt "#626"
 msgid "In progress TV shows"
-msgstr "Begonnene Serien"
+msgstr "Begonnene TV-Serien"
 
 msgctxt "#629"
 msgid "View mode"
@@ -2875,7 +2867,7 @@ msgstr "Nach einer neuen Quelle suchen"
 
 msgctxt "#1024"
 msgid "Browse"
-msgstr "Suchen"
+msgstr "Durchsuchen"
 
 msgctxt "#1025"
 msgid "Could not retrieve directory information."
@@ -3455,7 +3447,7 @@ msgstr "Einstellungen->Bildschirm"
 
 msgctxt "#10010"
 msgid "Settings - Appearance - GUI Calibration"
-msgstr "Einstellungen->Darstellung->GUI-Kalibrierung"
+msgstr "Einstellungen->Darstellung->Benutzeroberflächen-Kalibrierung"
 
 msgctxt "#10011"
 msgid "Settings - Videos - Screen Calibration"
@@ -3523,7 +3515,7 @@ msgstr "Zurücksetzen"
 
 msgctxt "#10036"
 msgid "Basic"
-msgstr "Standard"
+msgstr "Einfach"
 
 msgctxt "#10037"
 msgid "Standard"
@@ -4981,10 +4973,6 @@ msgctxt "#13439"
 msgid "Allow hardware acceleration (MediaCodec)"
 msgstr "Hardwarebeschleunigung erlauben (MediaCodec)"
 
-msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
-msgstr "Multi-Prozessor-Dekodierung  (unzuverlässig)"
-
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "A/V Sync Methode"
@@ -5303,7 +5291,7 @@ msgstr "Datumsformat"
 
 msgctxt "#14053"
 msgid "GUI filters"
-msgstr "GUI-Filter"
+msgstr "Benutzeroberflächen-Filter"
 
 msgctxt "#14055"
 msgid "Use background scanning"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Rippen der CD stoppen"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Quelle nicht verfügbar"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Was soll mit den Medien-Inhalten aus %s geschehen?"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Behalten"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Entfernen"
@@ -5607,7 +5607,7 @@ msgstr "Inhalt der CD/DVD abspielen"
 
 msgctxt "#16008"
 msgid "Enter new title"
-msgstr "Bitte einen neuen Titel eingeben"
+msgstr "Neuen Titel eingeben"
 
 msgctxt "#16009"
 msgid "Enter the movie name"
@@ -5767,7 +5767,7 @@ msgstr "Verwalte..."
 
 msgctxt "#16107"
 msgid "Edit sort title"
-msgstr "Titel umbenennen"
+msgstr "Sortierungstitel umbenennen"
 
 msgctxt "#16200"
 msgid "Operation was aborted"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Video Nachbearbeitung"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV Aufnahmen"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Standard-Ordner für PVR Thumbnails"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanäle"
@@ -6187,7 +6187,7 @@ msgstr "Standard EPG-Fenster"
 
 msgctxt "#19067"
 msgid "This event is already being recorded."
-msgstr "Dieses Ereignis ist bereits aufgenommen"
+msgstr "Dieses Ereignis wird bereits aufgenommen."
 
 msgctxt "#19068"
 msgid "This recording could not be deleted. Check the log for details."
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Gehe zur aktuellen Zeit"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "EPG Aktualisierungsintervall"
@@ -6391,11 +6395,11 @@ msgstr "Nur freie Kanäle"
 
 msgctxt "#19124"
 msgid "Ignore present timers"
-msgstr "Ignore present timers"
+msgstr "vorhandene Timer ignorieren"
 
 msgctxt "#19125"
 msgid "Ignore present recordings"
-msgstr "Ignore present recordings"
+msgstr "vorhandene Aufnahmen ignorieren"
 
 msgctxt "#19126"
 msgid "Start time"
@@ -6543,7 +6547,7 @@ msgstr "Aufnahmen"
 
 msgctxt "#19164"
 msgid "Cannot start recording. Check the log for details."
-msgstr "Kann Aufnahme nicht starten. Für mehr Details Log einsehen."
+msgstr "Aufnahme kann nicht gestartet werden. Für mehr Details Log einsehen."
 
 msgctxt "#19165"
 msgid "Switch"
@@ -6571,7 +6575,7 @@ msgstr "Wiedergabe minimiert starten"
 
 msgctxt "#19172"
 msgid "Instant recording duration"
-msgstr "Aufzeichnungsdauer"
+msgstr "Aufzeichnungsdauer von Sofortaufnahmen"
 
 msgctxt "#19173"
 msgid "Default recording priority"
@@ -6815,7 +6819,7 @@ msgstr "Zeige Hinweis bei Timer Aktualisierungen"
 
 msgctxt "#19234"
 msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
-msgstr "Verwende Kanalreihenfolge des Backends (nur mit 1 PVR Add-on möglich)"
+msgstr "Verwende Kanalnummerierung des Backends (nur mit 1 PVR Add-on möglich)"
 
 msgctxt "#19235"
 msgid "PVR manager is starting up"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Herunterladen der Interpreten Info fehlgeschlagen"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Titelinformationen aus dem Internet bevorzugen"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Ist dies aktiviert, so werden heruntergeladene Informationen von Alben und Interpreten (wie Genre, Jahr, Lied-Interpret usw.) denen der Tags Ihrer Titel bevorzugt. Dies ist nützlich wenn die Titel über einen Tag mit MusicBrainz Kennung verfügen."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android Musik"
@@ -8215,7 +8227,7 @@ msgstr "Durchsuche Musikvideos mit %s"
 
 msgctxt "#20319"
 msgid "Scanning tvshows using %s"
-msgstr "Durchsuche Serien mit %s"
+msgstr "Durchsuche TV-Serien mit %s"
 
 msgctxt "#20320"
 msgid "Scanning artists using %s"
@@ -8247,7 +8259,7 @@ msgstr "Nach einem Speicherort durchsuchen..."
 
 msgctxt "#20329"
 msgid "Movies are in separate folders that match the movie title"
-msgstr "Filme sind in separaten Ordnern, welche Filmtitel entsprechen"
+msgstr "Filme liegen in getrennten Ordnern, die dem Filmtitel entsprechen"
 
 msgctxt "#20330"
 msgid "Use folder names for lookups"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Quelle entfernen"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Alternatives Untertitel-Verzeichnis"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Video- & alternatives Untertitel-Verzeichnis"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "gemischt"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Position der Untertitel"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fest eingestellt"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Speichere Untertitel ins Film-Verzeichnis"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Standard Dienst für TV-Serien"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Wählen Sie den Dienst der standardmäßig für die Suche nach Untertiteln von TV-Serien verwendet werden soll"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Standard Dienst für Filme"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Wählen Sie den Dienst der standardmäßig für die Suche nach Untertiteln von Filmen verwendet werden soll"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Suchbegriff"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Suchbegriff eingeben"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Benachrichtigungen"
@@ -10315,7 +10343,7 @@ msgstr "Niederschlag"
 
 msgctxt "#33022"
 msgid "Precip"
-msgstr "regnen"
+msgstr "Niederschlag"
 
 msgctxt "#33023"
 msgid "Humid"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Lautsprecherkonfiguration"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10623,7 +10647,7 @@ msgstr "Wählen Sie das gewünschte Verhalten wenn gerade kein Ton wiedergegeben
 
 msgctxt "#34120"
 msgid "Play GUI sounds"
-msgstr "GUI Sounds abspielen"
+msgstr "Sounds der Benutzeroberfläche abspielen"
 
 msgctxt "#34121"
 msgid "Only when playback stopped"
@@ -11375,7 +11399,7 @@ msgstr "Sortiere Kanäle nach Kanalnummer auf dem Server, aber benutze XBMC´s e
 
 msgctxt "#36206"
 msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
-msgstr "Benutze Numerierung vom backend, anstelle sie manuell über XBMC zu konfigurieren."
+msgstr "Benutze Numerierung vom Backend, anstelle sie manuell über XBMC zu konfigurieren."
 
 msgctxt "#36207"
 msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Standard EPG-Anzeigefenster. Standard: Zeitleiste"
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Anzahl der Tage um Daten vom Backend zu importieren. Standard: 2 Tage."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Anzahl der Tage für die EPG Daten vom Backend importiert werden sollen. Standard ist 3 Tage."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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 "Legen Sie das Verhalten der Ton-Ausgabe fest: [Fest eingestellt] - Ausgabe verwendet stets die festgelegte Sampling-Rate und Lautsprecherkonfiguration; [Beste Übereinstimmung] - Ausgabe wird stets so gut wie möglich an das Quell-Format angepasst; [Optimiert] - Ausgabe wird einmalig zu Beginn der Wiedergabe konfiguriert und gleicht sich während dieser nicht mehr einem geänderten Quell-Format an."
 
-msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
-msgstr "Wählen Sie die maximale Anzahl an Audio-Kanälen/Lautsprechern die für dekodierten Ton zur Verfügung stehen."
-
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
 msgstr "Verstärke AC3-Spuren die auf 2-Kanäle reduziert wurden."
 
-msgctxt "#36364"
-msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
-msgstr "Konvertiere 2-Kanal Stereo-Ton in die Anzahl an Audio-Kanälen, die in der Lautsprecher-Konfiguration festgelegt ist."
-
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
 msgstr "Wählen Sie diese Option, wenn Ihr Receiver die Dekodierung von AC3-Streams unterstützt."
@@ -12115,7 +12131,7 @@ msgstr "Wähle eine Aktion die XBMC ausführen soll wenn es länger inaktiv ist.
 
 msgctxt "#36391"
 msgid "Turn debug logging on or off. Useful for troubleshooting."
-msgstr "Schalten Sie Debugprotokollierung ein oder aus. Nützliches für die Fehlersuche."
+msgstr "Schalten Sie die Debug-Protokollierung ein oder aus. Nützlich für die Fehlersuche."
 
 msgctxt "#36392"
 msgid "No info available yet."
@@ -12241,9 +12257,25 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Hardware Videodecodierung mit AMLogic Decoder aktivieren"
 
-msgctxt "#36423"
-msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
-msgstr "Verwende die Multi-Prozessor-Dekodierung von ffmpeg für Fälle bei denen die Hardware-Dekodierung fehlschlägt oder deaktiviert wurde. (weniger zuverlässig als standard Single-Prozessor-Methode)"
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Wähle was geschehen soll wenn ein EPG-Eintrag ausgewählt wird: [Kontext-Menü anzeigen] öffnet das kontextabhängige Menü von welchem aus weitere Aktionen gewählt werden können; [Zum Kanal wechseln] wechselt unverzüglich zum entsprechenden Kanal; [Informationen anzeigen] zeigt detaillierte Informationen wie die Inhaltsangabe sowie weitere Optionen; [Aufnehmen] erstellt einen Aufnahme-Timer für den gewählten Eintrag."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Kontext-Menü anzeigen"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Zum Kanal wechseln"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Informationen anzeigen"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Aufnehmen"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Hardware Decoding bei Videodateien aktivieren."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Stereoskopische Tiefe der Untertitel"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Legt die visuelle Tiefe der Untertitel für stereoskopische Videos fest. Je höher der Wert, desto näher wirken die Untertitel."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Cover und Fanarts mit höherer Qualität benutzen (benötigt mehr Speicher)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Begrenzt die Auflösung der Benutzeroberfläche um Arbeitsspeicher zu sparen. Dies betrifft nicht die Wiedergabe von Videos. Verwende 1080 für unbegrenzt. Benötigt Neustart. "
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Sehbehinderte)"
@@ -12428,3 +12476,11 @@ msgstr "Center-Lautsprecher beim Heruntermischen verstärken"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Ermöglicht die Verwendung von System-Tasten wie Drucken, Alt-Tabulator oder Lautstärke im Vollbild-Modus"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Höhere Farbtiefe in Grafiken verwenden"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Maximale Auflösung der Benutzeroberfläche"
index 74dfe51..650a090 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Επιλογή φακέλου προορισμού"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Στέρεο έξοδος σε όλα τα ηχεία"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Αριθμός καναλιών"
@@ -1227,12 +1223,16 @@ msgstr "Έτος"
 
 msgctxt "#346"
 msgid "Normalize levels on downmix"
-msgstr "Εξισορρόπηση των επιπέδων κατά το χειρισμό 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"
@@ -1509,6 +1509,10 @@ msgctxt "#419"
 msgid "High"
 msgstr "Μεγ."
 
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Καλύτερη Αντιστοιχία"
+
 msgctxt "#421"
 msgid "Keep audio device alive"
 msgstr "Διατήρηση της συσκευής ήχου ενεργής"
@@ -1657,6 +1661,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Αλλαγή προβολής"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Όριο ρυθμού δειγματοληψίας (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Υπότιτλοι"
@@ -1705,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Συντελεστές"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Τσιπάκι"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Ανενεργό/ή"
@@ -1975,7 +1979,7 @@ msgstr "Δεν υπάρχει βιογραφία γι' αυτόν τον καλ
 
 msgctxt "#548"
 msgid "Downmix multichannel audio to stereo"
-msgstr "Downmix πολυκάναλου ήχου σε στερεοφωνικό"
+msgstr "Υποβιβασμός πολυκάναλου ήχου σε στερεοφωνικό"
 
 msgctxt "#550"
 msgid "Sort by: %s"
@@ -2941,6 +2945,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Πρόσθετες Εφαρμογές"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Ορισμός μικρογραφίας plug-in"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Ρυθμίσεις πρόσθετου"
@@ -5457,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Διακοπή αντιγραφής CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Μη διαθέσιμη πηγή"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Τι επιθυμείτε να κάνετε με πολυμέσα από το %s ;"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Διατήρηση"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Αφαίρεση"
@@ -5881,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Μετα-επεξεργασία"
@@ -5973,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Τηλεοπτικές εγγραφές"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Προεπιλεγμένος φάκελος για μικρογραφίες PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Κανάλια"
@@ -6177,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Μετάβαση τώρα"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Χρονικό διάστημα ενημέρωσης EPG"
@@ -6749,6 +6773,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 "Η εγγραφή ακυρώθηκε"
@@ -6789,6 +6817,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 "Χρήση αριθμών καναλιών του backend (δουλεύει μόνο για 1 ενεργοποιημένο Πρόσθετο PVR)"
+
 msgctxt "#19235"
 msgid "PVR manager is starting up"
 msgstr "Ξεκινά η διαχείριση PVR"
@@ -6941,6 +6973,10 @@ msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Χρειάζεστε ένα δέκτη (tuner), ένα backend, και ένα"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Πρόσθετο για το backend προκειμένου να μπορεί να κάνει χρήση του PVR."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "Επισκεφθείτε το xbmc.org/pvr για να μάθετε περισσότερα."
@@ -8061,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Αποτυχία λήψης πληροφοριών καλλιτέχνη"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Παράκαμψη ετικετών τραγουδιών με πληροφορίες από το διαδίκτυο"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Αν το ενεργοποιήσετε, κάθε πληροφορία που θα ληφθεί από το διαδίκτυο σχετικά με άλμπουμ και καλλιτέχνες θα παρακάμψει ό,τι έχετε ορίσει στις ετικέτες των τραγουδιών σας, όπως είναι το είδος, το έτος, τα ονόματα καλλιτεχνών, κτλ. Χρήσιμο όταν έχετε τα αναγνωριστικά MusicBrainz στις ετικέτες των τραγουδιών σας."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Μουσική Android"
@@ -8837,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Αφαίρεση κοινόχρηστων πολυμέσων"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Φάκελος υποτίτλων"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Ταινία & εναλλακτικός φάκελος υποτίτλων"
@@ -9209,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "ανάμικτα"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Θέση υποτίτλου"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Σταθερή"
@@ -10157,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Αποθήκευση υποτίτλων στο φάκελο της ταινίας"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Προεπιλεγμένη Υπηρεσία Τηλεόρασης"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Επιλογή της υπηρεσίας που θα είναι η προεπιλογή για αναζήτηση υποτίτλων Τηλ. Σειρών"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Προεπιλεγμένη Υπηρεσία Ταινιών"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Επιλογή της υπηρεσίας που θα είναι η προεπιλογή για αναζήτηση υποτίτλων Ταινιών"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Κείμενο χειροκίνητης αναζήτησης"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Εισαγωγή κειμένου αναζήτησης"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Ειδοποιήσεις"
@@ -10541,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Ήχος Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Διάταξη ηχείων"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11193,6 +11249,10 @@ 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 "Επιλογή της ποιότητας επανάληψης της δειγματοληψίας για περιπτώσεις όπου η έξοδος ήχου επιβάλλεται να οριστεί σε διαφορετικό ρυθμό δειγματοληψίας από αυτόν που χρησιμοποιείται από την πηγή. Η [Ελάχιστη] είναι γρήγορη, και θα έχει μηδαμινή επίδραση στους πόρους του συστήματος όπως είναι η χρήση του επεξεργαστή. Η [Μεσαία] και η [Υψηλή] θα χρησιμοποιούν ολοένα και περισσότερους πόρους συστήματος."
+
 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 "Να επιτρέπεται στην αναπαραγωγή βίντεο να αγνοούνται οι αναλογίες εικόνας κατά ένα συγκεκριμένο ποσό προκειμένου να συμπληρώνεται με βίντεο μεγαλύτερο μέρος της οθόνης."
@@ -11325,6 +11385,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 "Να γίνει εισαγωγή των γκρουπ καναλιών από το backend του PVR (αν υποστηρίζεται). Θα διαγραφούν τα γκρουπ καναλιών του χρήστη αν δε βρεθούν στο backend."
@@ -11390,8 +11454,8 @@ 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 για τις οποίες θα γίνει εισαγωγή από τα backend. Προεπιλογή είναι οι 2 ημέρες."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Πλήθος ημερών δεδομένων EPG για τις οποίες θα γίνει εισαγωγή από τα backend. Προεπιλογή είναι οι 3 ημέρες."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11425,6 +11489,10 @@ msgctxt "#36228"
 msgid "Show the last viewed channel if switching to live tv."
 msgstr "Εμφάνιση του τελευταίου καναλιού αν αλλάζετε σε live tv."
 
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Εμφάνιση πληροφοριών ποιότητας σήματος στο παράθυρο πληροφοριών κωδικοποίησης (αν υποστηρίζεται από το Πρόσθετο και το backend)."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Μη διαθέσιμες πληροφορίες."
@@ -11449,6 +11517,18 @@ 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. Δεν υποστηρίζεται από όλα τα Πρόσθετα και τα backend."
 
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Διαγραφή της εγγραφής μετά από αυτό το χρόνο. Προεπιλογή είναι οι 99 ημέρες. Δεν υποστηρίζεται από όλα τα Πρόσθετα και τα backend."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Έναρξη εγγραφών πριν από την ακριβή ώρα. Προεπιλογή είναι τα 2 λεπτά. Δεν υποστηρίζεται από όλα τα Πρόσθετα και τα backend."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Διακοπή εγγραφών μετά από την ακριβή ώρα. Προεπιλογή είναι τα 10 λεπτά. Δεν υποστηρίζεται από όλα τα Πρόσθετα και τα backend."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
 msgstr "Εμφάνιση ειδοποίησης κατά την προσθήκη, ολοκλήρωση ή αφαίρεση χρονοδιακοπτών από το backend."
@@ -11937,9 +12017,13 @@ 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 "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
-msgstr "Ενίσχυση των ροών AC3 που έχουν υποστεί downmix σε 2 κανάλια."
+msgstr "Ενίσχυση των ροών AC3 που έχουν υποστεί υποβιβαστεί σε 2 κανάλια."
 
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
@@ -11953,6 +12037,10 @@ 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 "Επιλέξτε το μέγιστο αριθμό ηχητικών καναλιών/ηχείων διαθέσιμων για την ηχητική αποκωδικοποίηση. Εάν χρησιμοποιούνται οπτικές/coax έξοδοι αυτό θα πρέπει να οριστεί ως 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."
@@ -12169,6 +12257,26 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Ενεργοποίηση αποκωδικοποίησης υλικού AMLogic των αρχείων βίντεο"
 
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Ορισμός της ενέργειας όταν έχει επιλεγεί ένα αντικείμενο EPG: Η [Εμφάνιση μενού επιλογών] θα ενεργοποιήσει το αντίστοιχο μενού από όπου μπορείτε να επιλέξετε περαιτέρω ενέργειες. Η [Μετάβαση σε κανάλι] θα αλλάξει άμεσα το κανάλι σε αυτό που θέλετε. Η [Προβολή πληροφοριών] θα εμφανίσει αναλυτικές πληροφορίες, συμπεριλαμβανομένης της πλοκής και επιπλέον επιλογών. Η [Εγγραφή] θα ενεργοποιήσει ένα χρονοδιακόπτη εγγραφής για το επιλεγμένο αντικείμενο."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Εμφάνιση μενού επιλογών"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Μετάβαση στο κανάλι"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Εμφάνιση πληροφοριών"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Εγγραφή"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Στερεοσκοπική προβολή (τρέχουσα)"
@@ -12221,6 +12329,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 "Προτιμώμενη λειτουργία"
@@ -12257,6 +12369,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 "Στερεοσκοπική προβολή του βίντεο"
@@ -12291,12 +12407,28 @@ msgstr "Έξοδος ήχου και στην αναλογική (ακουστι
 
 msgctxt "#36543"
 msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
-msgstr "Ενεργοποιήστε το για αύξηση της έντασης του διαλόγου σε σχέση με τους ήχους υποβάθρου κατά το χειρισμό downmix πολυκάναλου ήχου"
+msgstr "Ενεργοποιήστε το για αύξηση της έντασης του διαλόγου σε σχέση με τους ήχους υποβάθρου κατά τον υποβιβασμό πολυκάναλου ήχου"
 
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Ενεργοποίηση αποκωδικοποίησης υλικού των αρχείων βίντεο."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Στερεοσκοπικό βάθος υποτίτλων"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Ορισμός του οπτικού βάθους υποτίτλων σε στερεοσκοπικά βίντεο. Όσο υψηλότερη είναι η τιμή, τόσο πιο κοντά στο θεατή θα φαίνονται οι υπότιτλοι."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Χρήση εικόνων υψηλότερης ανάλυσης για εξώφυλλα και fanart (απαιτεί περισσότερη μνήμη)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Περιορισμός της ανάλυσης του Περιβάλλοντος Εργασίας για χρήση λιγότερης μνήμης. Δεν επηρεάζεται η αναπαραγωγή βίντεο. Η τιμή 1080 αντιστοιχεί σε απεριόριστη χρήση μνήμης. Απαιτεί επανεκκίνηση."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Για Άτομα με Προβλήματα Όρασης)"
@@ -12339,4 +12471,16 @@ msgstr "Διπλή έξοδος ήχου"
 
 msgctxt "#37018"
 msgid "Boost centre channel when downmixing"
-msgstr "Ενίσχυση του κεντρικού καναλιού κατά το χειρισμό downmix"
+msgstr "Ενίσχυση του κεντρικού καναλιού κατά τον υποβιβασμό καναλιών"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Ενεργοποίηση πλήκτρων συστήματος όπως το printscreen, το alt-tab και των πλήκτρων ήχου κατά την πλήρη οθόνη"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Ενεργοποίηση εικόνων υψηλότερου χρωματικού βάθους"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Ορισμός ορίου ανάλυσης του Περιβάλλοντος Εργασίας"
index 2d0638b..02025e3 100644 (file)
@@ -31,7 +31,7 @@ msgstr "וידאו"
 
 msgctxt "#4"
 msgid "TV-Guide"
-msgstr "×\9e×\93ר×\99×\9a ×ª×\9b× ×\99×\95ת"
+msgstr "×\9e×\93ר×\99×\9a ×\98×\9c×\95×\95×\99×\96×\99×\94"
 
 msgctxt "#5"
 msgid "Settings"
@@ -857,14 +857,14 @@ msgctxt "#249"
 msgid "Music"
 msgstr "מוסיקה"
 
+msgctxt "#250"
+msgid "Visualisation"
+msgstr "חיזוי"
+
 msgctxt "#251"
 msgid "Select destination directory"
 msgstr "בחר ספרית יעד"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "- פלט סטריאו לכל הרמקולים"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "מספר ערוצים"
@@ -1181,10 +1181,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 "אמנים שונים"
@@ -1489,6 +1497,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 "מחק פרטי אלבום"
@@ -1561,6 +1577,10 @@ msgctxt "#439"
 msgid "Cache"
 msgstr "זכרון מטמון"
 
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "דיסק קשיח"
+
 msgctxt "#441"
 msgid "UDF"
 msgstr "UDF"
@@ -1625,6 +1645,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "החלף תצוגה"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "הגבל קצב דגימה (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "כתוביות"
@@ -1673,10 +1697,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "תודות"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "כבוי"
@@ -2177,6 +2197,10 @@ msgctxt "#613"
 msgid "Sample rate"
 msgstr "קצב דגימה"
 
+msgctxt "#614"
+msgid "Virtual folder"
+msgstr "תיקיה וירטואלית"
+
 msgctxt "#620"
 msgid "Audio CDs"
 msgstr "דיסק אודיו"
@@ -2203,7 +2227,7 @@ msgstr "כל השירים של"
 
 msgctxt "#626"
 msgid "In progress TV shows"
-msgstr "ת×\95×\9b× ×\99ות בהתקדמות"
+msgstr "ס×\93רות בהתקדמות"
 
 msgctxt "#629"
 msgid "View mode"
@@ -3061,6 +3085,10 @@ msgctxt "#1260"
 msgid "Announce these services to other systems via Zeroconf"
 msgstr "הכרז על שירותים אלו למערכות אחרות דרך Zeroconf"
 
+msgctxt "#1269"
+msgid "Allow volume control"
+msgstr "אפשר שליטת עוצמת קול"
+
 msgctxt "#1270"
 msgid "Allow XBMC to receive AirPlay content"
 msgstr "אפשר ל-XBMC לקבל תכני AirPlay"
@@ -3441,10 +3469,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 "האם לאפס את ההגדרות בקטגוריה זו?"
@@ -3457,6 +3501,10 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "אין עזרה זמינה"
 
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "אין קטגוריות זמינות"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "סייר הקבצים"
@@ -3613,6 +3661,10 @@ msgctxt "#12005"
 msgid "Fullscreen video"
 msgstr "וידאו במסך מלא"
 
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "חיזוי אודיו"
+
 msgctxt "#12009"
 msgid "Rebuild index..."
 msgstr "בונה אינדקס..."
@@ -3769,6 +3821,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 "פריט נעול"
@@ -3945,6 +4001,10 @@ msgctxt "#13013"
 msgid "Reboot"
 msgstr "הפעלה מחדש"
 
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "מזער"
+
 msgctxt "#13015"
 msgid "Power button action"
 msgstr "פעולת כפתור הכיבוי"
@@ -4065,6 +4125,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 "High quality upscaling"
@@ -4105,6 +4169,10 @@ msgctxt "#13121"
 msgid "VDPAU HQ Upscaling level"
 msgstr "VDPAU HQ Upscaling level"
 
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "להישאר עם המעטפת ?"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "החשך צגים אחרים"
@@ -4785,10 +4853,22 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "נגן רק את זה"
 
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "הפעל סרגלי מידה HQ עבור השינויים למעלה"
+
 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 "שיטת סינכרון ניגון למסך"
@@ -5265,6 +5345,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "עצור העתקת דיסק"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "מקור לא זמין"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "שמור"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "הסר"
@@ -5541,6 +5629,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "ערוך כותרת"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "נהל..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "ערוך כותרת מיון"
@@ -5665,6 +5757,14 @@ msgctxt "#16324"
 msgid "Software Blend"
 msgstr "Software Blend"
 
+msgctxt "#16325"
+msgid "VDPAU - Bob"
+msgstr "VDPAU - Bob"
+
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-processing"
@@ -5703,7 +5803,7 @@ msgstr "מצא תכנות דומות"
 
 msgctxt "#19004"
 msgid "Importing EPG from clients"
-msgstr "מייבא EPG מקליינטים"
+msgstr "מייבא לוח שידורים מקליינטים"
 
 msgctxt "#19005"
 msgid "PVR stream information"
@@ -5757,10 +5857,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "הקלטת טלוויזיה"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "תיקית ברירת מחדל עבור תמונות ממוזערות PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "ערוצים"
@@ -5799,7 +5895,7 @@ msgstr "אין תוצאות חיפוש"
 
 msgctxt "#19028"
 msgid "No EPG entries"
-msgstr "אין ערכי EPG"
+msgstr "אין ערכי לוח שידורים"
 
 msgctxt "#19029"
 msgid "Channel"
@@ -5947,7 +6043,7 @@ msgstr "עבור לסיום"
 
 msgctxt "#19065"
 msgid "Default EPG window"
-msgstr "חלון EPG ברירת מחדל"
+msgstr "חלון לוח שידורים ברירת מחדל"
 
 msgctxt "#19067"
 msgid "This event is already being recorded."
@@ -5959,15 +6055,19 @@ msgstr "ההקלטה אינה ניתנת למחיקה.אנא בדוק יומן 
 
 msgctxt "#19069"
 msgid "EPG"
-msgstr "EPG"
+msgstr "לוח שידורים EPG"
+
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "גש עכשיו אל"
 
 msgctxt "#19071"
 msgid "EPG update interval"
-msgstr "השהיית עדכון EPG"
+msgstr "השהיית עדכון לוח שידורים"
 
 msgctxt "#19072"
 msgid "Do not store the EPG in the database"
-msgstr "אל תאחסן את ה- EPG במסד הנתונים"
+msgstr "אל תאחסן את הלוח שידורים במסד הנתונים"
 
 msgctxt "#19073"
 msgid "Delay channel switch"
@@ -6073,6 +6173,10 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "אזהרה"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "שירות"
+
 msgctxt "#19102"
 msgid "Please switch to another channel."
 msgstr "אנא החלף לערוץ אחר."
@@ -6375,16 +6479,20 @@ msgstr "כל המידע בבסיס הנתונים של PVR נמחק"
 
 msgctxt "#19187"
 msgid "Reset the EPG database"
-msgstr "×\90פס ×\90ת ×\9eס×\93 ×\94נת×\95× ×\99×\9d ×©×\9c ×\9e×\93ר×\99×\9a ×\94שידורים"
+msgstr "×\90פס ×\90ת ×\9eס×\93 ×\94נת×\95× ×\99×\9d ×©×\9c ×\9c×\95×\97 שידורים"
 
 msgctxt "#19188"
 msgid "EPG is being reset"
-msgstr "×\9e×\93ר×\99×\9a שידורים מתאפס"
+msgstr "×\9c×\95×\97 שידורים מתאפס"
 
 msgctxt "#19189"
 msgid "Continue last channel on startup"
 msgstr "בהפעלה מחדש התחל בערוץ אחרון שנצפה"
 
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "ממוזער"
+
 msgctxt "#19191"
 msgid "PVR service"
 msgstr "שירות PVR"
@@ -6423,7 +6531,7 @@ msgstr "מנהל ערוצים"
 
 msgctxt "#19200"
 msgid "EPG source:"
-msgstr "×\9eק×\95ר ×\9e×\93ר×\99×\9a שידורים"
+msgstr "×\9eק×\95ר ×\9c×\95×\97 שידורים"
 
 msgctxt "#19201"
 msgid "Channel name:"
@@ -6447,7 +6555,7 @@ msgstr "ניהול קבוצות"
 
 msgctxt "#19206"
 msgid "Activate EPG:"
-msgstr "×\94פע×\9c ×\9e×\93ר×\99×\9a שידורים:"
+msgstr "×\94פע×\9c ×\9c×\95×\97 שידורים:"
 
 msgctxt "#19207"
 msgid "Group:"
@@ -6511,7 +6619,7 @@ msgstr "סנכרן קבוצות ערוצים עם ממשק אחורי"
 
 msgctxt "#19222"
 msgid "EPG"
-msgstr "EPG"
+msgstr "לוח שידורים EPG"
 
 msgctxt "#19224"
 msgid "Recording aborted"
@@ -6537,6 +6645,10 @@ msgctxt "#19229"
 msgid "Close channel OSD after switching channels"
 msgstr "סגור מידע ערוץ על מסך אחרי מעבר ערוץ"
 
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "המנע מעדכון לוח שידורים בעת ניגון"
+
 msgctxt "#19231"
 msgid "Always use the channel order from the backend(s)"
 msgstr "תמיד השתמש הסידור ערוצים של שרת(ים) אחורי(ים)"
@@ -6685,6 +6797,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 "אתה צריך כרטיס טלוויזיה,תוכנת ממשק אחורי, ובנוסף"
@@ -7743,7 +7859,7 @@ msgstr "סובב תמונות בעזרת פרטי EXIF"
 
 msgctxt "#20185"
 msgid "Use poster view styles for TV shows"
-msgstr "×\94שת×\9eש ×\91פ×\95ס×\98ר×\99×\9d ×\9cת×\95×\9b× ×\99×\95ת ×\98×\9c×\95×\99×\96×\99×\94"
+msgstr "×\94שת×\9eש ×\91פ×\95ס×\98ר×\99×\9d ×\9cס×\93ר×\95ת"
 
 msgctxt "#20186"
 msgid "Please wait"
@@ -7923,7 +8039,7 @@ msgstr "סורק מוסיקה תוך שימוש ב %s"
 
 msgctxt "#20319"
 msgid "Scanning tvshows using %s"
-msgstr "ס×\95רק ×ª×\95×\9b× ×\99×\95ת ×\98×\9c×\95×\99×\96×\99×\94 תוך שימוש ב %s"
+msgstr "ס×\95רק ×¡×\93ר×\95ת תוך שימוש ב %s"
 
 msgctxt "#20320"
 msgid "Scanning artists using %s"
@@ -8011,7 +8127,7 @@ msgstr "סרטים"
 
 msgctxt "#20343"
 msgid "TV shows"
-msgstr "ת×\95×\9b× ×\99×\95ת ×\98×\9c×\95×\95×\99×\96×\99×\94"
+msgstr "ס×\93ר×\95ת"
 
 msgctxt "#20344"
 msgid "This directory contains"
@@ -8043,7 +8159,7 @@ msgstr "הצבעות"
 
 msgctxt "#20351"
 msgid "TV show information"
-msgstr "פר×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99ה"
+msgstr "פר×\98×\99 ×¡×\93רה"
 
 msgctxt "#20352"
 msgid "Episode information"
@@ -8051,7 +8167,7 @@ msgstr "פרטי פרק"
 
 msgctxt "#20353"
 msgid "Loading TV show details"
-msgstr "×\98×\95×¢×\9f ×¤×¨×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99ה"
+msgstr "×\98×\95×¢×\9f ×¤×¨×\98×\99 ×¡×\93רה"
 
 msgctxt "#20354"
 msgid "Fetching episode guide"
@@ -8063,11 +8179,11 @@ msgstr "טוען פרטים עבור פרקים בתיקייה"
 
 msgctxt "#20356"
 msgid "Select TV show:"
-msgstr "×\91×\97ר ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\95×\99×\96×\99ה:"
+msgstr "×\91×\97ר ×¡×\93רה:"
 
 msgctxt "#20357"
 msgid "Enter the TV show name"
-msgstr "×\94×\96×\9f ×©×\9d ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "×\94×\96×\9f ×©×\9d ×¡×\93רה"
 
 msgctxt "#20358"
 msgid "Season %i"
@@ -8091,11 +8207,11 @@ msgstr "הסר פרק מספריה"
 
 msgctxt "#20363"
 msgid "Remove TV show from library"
-msgstr "×\94סר ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה מספריה"
+msgstr "×\94סר ×¡×\93רה מספריה"
 
 msgctxt "#20364"
 msgid "TV show"
-msgstr "ת×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "ס×\93רה"
 
 msgctxt "#20365"
 msgid "Episode plot"
@@ -8147,7 +8263,7 @@ msgstr "כותרת מקורית"
 
 msgctxt "#20377"
 msgid "Refresh TV show information"
-msgstr "רענ×\9f ×¤×¨×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "רענ×\9f ×¤×¨×\98×\99 ×¡×\93רה"
 
 msgctxt "#20378"
 msgid "Refresh info for all episodes?"
@@ -8155,7 +8271,7 @@ msgstr "רענן פרטים לכל הפרקים?"
 
 msgctxt "#20379"
 msgid "Selected folder contains a single TV show"
-msgstr "ת×\99ק×\99×\94 ×\9e×\9b×\99×\9c×\94 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה בודדת"
+msgstr "ת×\99ק×\99×\94 ×\9e×\9b×\99×\9c×\94 ×¡×\93רה בודדת"
 
 msgctxt "#20380"
 msgid "Exclude selected folder from scans"
@@ -8175,11 +8291,11 @@ msgstr "תיקייה מכילה וידאו בודד"
 
 msgctxt "#20384"
 msgid "Link to TV show"
-msgstr "קשר ×\9cת×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "קשר ×\9cס×\93רה"
 
 msgctxt "#20385"
 msgid "Remove link to TV show"
-msgstr "×\94סר ×§×\99ש×\95ר ×\9cת×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "×\94סר ×§×\99ש×\95ר ×\9cס×\93רה"
 
 msgctxt "#20386"
 msgid "Recently added movies"
@@ -8275,7 +8391,7 @@ msgstr "מוריד פרטי קליפ"
 
 msgctxt "#20409"
 msgid "Downloading TV show information"
-msgstr "×\9e×\95ר×\99×\93 ×¤×¨×\98×\99 ×ª×\95×\9b× ×\99ת ×\98×\9c×\95×\99×\96×\99ה"
+msgstr "×\9e×\95ר×\99×\93 ×¤×¨×\98×\99 ×¡×\93רה"
 
 msgctxt "#20410"
 msgid "Trailer"
@@ -8287,7 +8403,7 @@ msgstr "שטח"
 
 msgctxt "#20412"
 msgid "Flatten TV shows"
-msgstr "ש×\98×\97 ×ª×\95×\9b× ×\99×\95ת ×\98×\9c×\95×\99×\96×\99×\94"
+msgstr "ש×\98×\97 ×¡×\93ר×\95ת"
 
 msgctxt "#20413"
 msgid "Get fanart"
@@ -8569,10 +8685,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "הסר סיתוף מדיה"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "תיקיית כתוביות"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "ספריית סרט ותרגום חלופי"
@@ -8763,7 +8875,7 @@ msgstr "סקרייפר ברירת מחדל לסרטים"
 
 msgctxt "#21414"
 msgid "Default tvshow scraper"
-msgstr "סקר×\99×\99פר ×\91ר×\99רת ×\9e×\97×\93×\9c ×\9cת×\95×\9b× ×\99ות"
+msgstr "סקר×\99×\99פר ×\91ר×\99רת ×\9e×\97×\93×\9c ×\9cס×\93רות"
 
 msgctxt "#21415"
 msgid "Default music video scraper"
@@ -8941,10 +9053,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "מעורבב"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "מיקום הכתובית"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "מקובע"
@@ -9529,6 +9637,10 @@ msgctxt "#24009"
 msgid "Script"
 msgstr "סקריפט"
 
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "חיזוי"
+
 msgctxt "#24011"
 msgid "Add-on repository"
 msgstr "מאגר הרחבות"
@@ -9563,7 +9675,7 @@ msgstr "שירותים"
 
 msgctxt "#24019"
 msgid "PVR clients"
-msgstr "ק×\9c×\99×\99× ×\98 PVR"
+msgstr "×\9cק×\95×\97×\95ת PVR"
 
 msgctxt "#24020"
 msgid "Configure"
@@ -9649,10 +9761,18 @@ 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 "חזור לאחור"
@@ -9761,6 +9881,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "נעל מנהל הרחבות"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "לא ניתן לנטרל הרחבה זו"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "(נוכחי)"
@@ -9797,6 +9921,58 @@ 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 "#24116"
+msgid "Default TV Service"
+msgstr "שירות טלוויזיה ברירת מחדל"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "שירות סרטים ברירת מחדל"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "חיפוש מחרוזת ידנית"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "הזן מחרוזת חיפוש"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "הודעות"
@@ -10177,10 +10353,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "תצורת רמקול"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10237,6 +10409,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 "לא נמצא פריט הבא לניגון"
@@ -10273,6 +10465,10 @@ msgctxt "#34401"
 msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
 msgstr "Failed to init video filters/scalers, falling back to bilinear scaling"
 
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "נכשל באתחול התקן אודיו"
+
 msgctxt "#34403"
 msgid "Check your audiosettings"
 msgstr "בדוק הגדרות אודיו"
@@ -10493,6 +10689,10 @@ 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 "החלפת המראה והתחושה של מנשק המשתמש."
@@ -10509,6 +10709,10 @@ 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 "שנה את הצבעים של המעטפת שבחרת."
@@ -10521,6 +10725,10 @@ 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 "בחר או השבת את ערכת הצלילים בממשק המשתמש"
@@ -10577,10 +10785,22 @@ msgctxt "#36128"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36129"
+msgid "Set the amount of idle time required before displaying the screensaver."
+msgstr "זמן המתנה להפעלת שומר מסך  "
+
+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 "#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 "אין מידע זמין כעת."
@@ -10613,10 +10833,34 @@ 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 "
+
 msgctxt "#36150"
 msgid "Import a XML file into the Video Library database."
 msgstr "ייבא קובץ XML אל ספריית הוידאו."
@@ -10625,6 +10869,10 @@ 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 "#36154"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10671,7 +10919,7 @@ msgstr "אין מידע זמין כעת."
 
 msgctxt "#36174"
 msgid "Enable Teletext when watching a live TV stream."
-msgstr "הפעלת טלטקסט בעת צפייה בתזרים טלוויזיה חי."
+msgstr "הפעלת טלטקסט בעת צפייה בתזרים טלוויזיה."
 
 msgctxt "#36175"
 msgid "Scale Teletext to 4:3 ratio."
@@ -10689,6 +10937,10 @@ msgctxt "#36181"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36183"
+msgid "Removes the title, genre etc nodes from the library view. Selecting a category takes you straight to the title view."
+msgstr "מסיר את קישור הכותרת, סגנון וכו' מתצוגת הספריה. בחירת קטגוריה מעבירה אותך ישר לתצוגת כותרת."
+
 msgctxt "#36184"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10737,6 +10989,10 @@ msgctxt "#36197"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36199"
+msgid "Select the default TV show information source. See the Add-ons Manager for options."
+msgstr "בחר מקור מידע ברירת המחדל עבור סדרה. ראה מנהל הרחבות עבור אפשרויות."
+
 msgctxt "#36201"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10781,6 +11037,10 @@ msgctxt "#36218"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "אל תייבא לוח שידורים בעת צפייה בטלוויזיה כדי למזער שימוש במעבד."
+
 msgctxt "#36226"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10789,6 +11049,10 @@ 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 "#36230"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10817,6 +11081,14 @@ 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 "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "שנה את הסיסמא  לבקרת הורים עבור ערוצים נעולים"
+
 msgctxt "#36251"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10961,6 +11233,10 @@ msgctxt "#36311"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36314"
+msgid "View slideshow images in a random order."
+msgstr "צפה במצגת תמונות בסדר אקראי."
+
 msgctxt "#36315"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -10981,6 +11257,14 @@ 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 "#36324"
+msgid "When a manual or automatical library update occurs, notify UPnP clients."
+msgstr "כאשר יש עדכוני ספריה עדכן את כל המכשירים."
+
 msgctxt "#36325"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -11257,6 +11541,46 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
 
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "הצג תפריט משני"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "החלף לערוץ"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "הצג מידע"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "הקלט"
+
+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 "#36507"
+msgid "Interlaced"
+msgstr "שזור"
+
 msgctxt "#36508"
 msgid "Hardware Based"
 msgstr "מבוסס חומרה"
@@ -11273,6 +11597,10 @@ msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "מצב מועדף"
 
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "בחר מצב סטריאוסקופי"
+
 msgctxt "#36529"
 msgid "Mono (2D)"
 msgstr "מונו (2D)"
@@ -11281,6 +11609,18 @@ msgctxt "#36530"
 msgid "Preferred mode"
 msgstr "מצב מועדף"
 
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "בחר מצב חלופי..."
+
+msgctxt "#36535"
+msgid "Stereoscopic mode of video"
+msgstr "מצב סטריאוסקופי של וידאו"
+
+msgctxt "#36536"
+msgid "Stereoscopic mode inverted"
+msgstr "מצב סטיראוסקופי הפוך"
+
 msgctxt "#36537"
 msgid "No info available yet."
 msgstr "אין מידע זמין כעת."
@@ -11301,6 +11641,10 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "אפשר פענוח חומרה של קבצי וידאו."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "עומק כתוביות סטיראוסקופי"
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(לקצרי ראייה)"
@@ -11332,3 +11676,11 @@ msgstr "הפרופיל האחרון שהיה בשימוש"
 msgctxt "#37015"
 msgid "Browse Into"
 msgstr "לעיין בתוך"
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "פלט אודיו כפול"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "הגדר הגבלת רזולוצית GUI"
index 0249507..f65a543 100644 (file)
@@ -689,10 +689,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "चुन्लेना अभिप्राय की निदेशिका"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ओउत्पुत सभी वक्तों करने के लिए स्तेरेओ"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "मर्गें की संख्या"
@@ -3053,10 +3049,6 @@ msgctxt "#21360"
 msgid "Share video and music libraries through UPnP"
 msgstr "शेयर और UPnP के माध्यम से वीडियो संगीत पुस्तकालयों"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "उपशीर्षक फ़ोल्डर"
-
 msgctxt "#21369"
 msgid "Enable mouse and Touch Screen support"
 msgstr "माउस सक्षम"
@@ -3241,10 +3233,10 @@ msgctxt "#33068"
 msgid "Background"
 msgstr "पृष्ठभूमि"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "वक्ता विन्यास"
-
 msgctxt "#35502"
 msgid "Name"
 msgstr "नाम"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "लिखना"
index e9c0cbb..a9e9470 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Célkönyvtár választása"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "A sztereó hangforrás szóljon mindegyik hangszórón"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Csatornák száma"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Készítők"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Ki"
@@ -3543,11 +3535,11 @@ msgstr "Kiegészítő böngésző"
 
 msgctxt "#10041"
 msgid "Reset above settings to default"
-msgstr "Fenti beállítások nullázása"
+msgstr "Alapértelmezett beállítások visszaállítása"
 
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
-msgstr "Biztosan nullázni akarja a kategória beállításait?"
+msgstr "Biztosan visszaállítja a kategória beállításait?"
 
 msgctxt "#10043"
 msgid "Help"
@@ -3559,7 +3551,7 @@ msgstr "Nem áll rendelkezésre súgó"
 
 msgctxt "#10045"
 msgid "Resets all the visible settings to their default values."
-msgstr "Az összes látható beállítás alapértelmezettre visszaállítása."
+msgstr "Az összes látható beállítás visszaállítása alapértelmezettre."
 
 msgctxt "#10046"
 msgid "No categories available"
@@ -4981,10 +4973,6 @@ msgctxt "#13439"
 msgid "Allow hardware acceleration (MediaCodec)"
 msgstr "Hardvergyorsítás engedélyezése (MediaCodec)"
 
-msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
-msgstr "Többszálú képkocka dekódolás (kevésbé megbízható)"
-
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "Hang/Kép szinkron ehhez"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "CD bemásolás megszakítása"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Nem elérhető forrás"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Mit tegyünk a(z) \"%s\" forrásból szármázó médiával?"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Megtart"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Törlés"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Videó minőségjavítás (post processing)"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV felvételek"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR miniképek alapértelmezett mappája"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Csatornák"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ugrás a jelenre"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "EPG frissítési időköz"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Előadóinformáció letöltése sikertelen"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Tárolt zenei adatok felülbírálása online adatokkal"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Ezzel a funkcióval bármely információ ami letöltésre kerül felülbírálja a zene helyi adataiban az információkat úgymint műfaj, év, előadó stb. Akkor hasznos ha a MusicBrainz azonosító szerepel a tag-ekben."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android zene"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Médiamegosztás eltávolítása"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Felirat mappa"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film és alternatív felirat mappa"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "kevert"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Felirat helye"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Rögzített"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Feliratok mentése a film mappába"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Alapértelmezett TV Szolgáltatás"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Alapértelmezett szolgáltatás kiválasztása a Sorozat felirat kereséshez"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Alapértelmezett Film Szolgáltatás"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Alapértelmezett szolgáltatás kiválasztása a Film felirat kereséshez"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Keresendő szöveg kézi megadása"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Keresőszó"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Értesítések"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Hangfalkiépítés"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Alapértelmezeten mutatott EPG ablak. Alapértelmezett az Idővonal."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Hány nap EPG adat kerüljön beimportálásra a háttérszolgáltatásból. Alapértelmezett érték 2 nap."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Hány nap EPG adat kerüljön beimportálásra a háttérszolgáltatásból. Alapértelmezett érték 3 nap."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11843,7 +11867,7 @@ msgstr "Nincs még információ"
 
 msgctxt "#36323"
 msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
-msgstr "UPnP szerver engedélyezése. Ez lehetővé teszi az anyagok sugárzását bármely UPnP kliens részére."
+msgstr "UPnP szerver engedélyezése. Ez lehetővé teszi műsorok sugárzását bármely UPnP kliens részére."
 
 msgctxt "#36324"
 msgid "When a manual or automatical library update occurs, notify UPnP clients."
@@ -11855,7 +11879,7 @@ msgstr "Nincs még információ"
 
 msgctxt "#36326"
 msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
-msgstr "UPnP kliens engedélyezése. Ez lehetővé teszi bármely UPnP szerverről a lejátszást, és a lejátszás vezérlését a kiválasztott szerverről."
+msgstr "UPnP kliens engedélyezése. Ez lehetővé teszi bármely UPnP kiszolgálóról a lejátszást, és a lejátszás vezérlését."
 
 msgctxt "#36327"
 msgid "No info available yet."
@@ -11997,18 +12021,10 @@ 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 "Hangkimenet tulajdonságainak kiválasztása: [Rögzített] - kimenet beállítása egy megadott bitrátára és hangszóró konfigurációra minden esetben; [Legjobb Egyezés] - kimenet tulajdonságai mindig a lehető legközelebbi beállítást használja a forráshoz képest; [Optimális] - a kimeneti beállítások a lejátszás megkezdésekor kerülnek beállításra és nem változik ha forrás tulajdonságai megváltoznak."
 
-msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
-msgstr "Maximálisan használandó csatornák száma a dekódolt hanganyagokban."
-
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
 msgstr "A 2 csatornára lekevert AC3 hangfolyamok erősítése."
 
-msgctxt "#36364"
-msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
-msgstr "Felkonvertálás engedélyezése a 2 csatornás sztereó forrásokhoz a hangfal beállíításoknál megadott többcsatornás hangfalkonfigurációra."
-
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
 msgstr "Válassza ki ezt az opciót ha az erősítője képes az AC3 hangsáv dekódolására."
@@ -12241,9 +12257,25 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Engedélyezi az AMLogic hardvergyorsítást"
 
-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 többszálas dekódolás használata nem működő vagy letiltott hardveres dekódolás esetén. (kevésbé megbízható mint az alap egyszálú üzemmód)"
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Válassza ki mi történjen ha egy EPG elem kiválasztásra kerül: [Tartalom menü mutatása] megnyitja a tatalom menüt ahonnan további műveletek hajthatóak végre; [Váltás csatornára] azonnal átvált a hivatkozott csatornára; [Infó mutatása] megjeleníti a tartalominfókat és egyéb opciókat; [Felvétel] létrehoz egy felvételidőzítőt a kiválasztott elemre."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Helyi menü mutatása"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Csatornára váltás"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Információ mutatása"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Felvétel"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Videófájlok hardveres dekódolásának engedélyezése."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Felirat 3D mélység"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Beállítja a feliratok 3D videóknál látható térbeli mélységét. Minél magasabb az érték, a felirat annál közelebbinek fog látszani a nézőhöz."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Nagyobb felbontású képek használata a borítókhoz és a fanartokhoz (magasabb memóriahasználat)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "GUI felbontásának limitálása memória megtakarításhoz. Nem érvényes a videólejátszásra. 1080 a végtelen. Újraindítás szükséges."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Látássérült)"
@@ -12428,3 +12476,11 @@ msgstr "Középcsatorna erősítése lekeverés esetén"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Rendszerbillentyűk engedélyezése teljesképernyős üzemmódban úgymint alt-tab, printscreen, hangerőgombok"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Nagyobb színmélységű képek használata"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "GUI felbontás limitálása"
index 9e2626a..7e0e3d5 100644 (file)
@@ -43,7 +43,7 @@ msgstr "XBMC SVN"
 
 msgctxt "#7"
 msgid "File manager"
-msgstr "Skráarsýsl"
+msgstr "Skráasýsl"
 
 msgctxt "#8"
 msgid "Weather"
@@ -55,31 +55,31 @@ msgstr "xbmc media center"
 
 msgctxt "#11"
 msgid "Monday"
-msgstr "Mánudagur"
+msgstr "mánudagur"
 
 msgctxt "#12"
 msgid "Tuesday"
-msgstr "Ã\9eriðjudagur"
+msgstr "þriðjudagur"
 
 msgctxt "#13"
 msgid "Wednesday"
-msgstr "Miðvikudagur"
+msgstr "miðvikudagur"
 
 msgctxt "#14"
 msgid "Thursday"
-msgstr "Fimmtudagur"
+msgstr "fimmtudagur"
 
 msgctxt "#15"
 msgid "Friday"
-msgstr "Föstudagur"
+msgstr "föstudagur"
 
 msgctxt "#16"
 msgid "Saturday"
-msgstr "Laugardagur"
+msgstr "laugardagur"
 
 msgctxt "#17"
 msgid "Sunday"
-msgstr "Sunnudagur"
+msgstr "sunnudagur"
 
 msgctxt "#21"
 msgid "January"
@@ -131,31 +131,31 @@ msgstr "desember"
 
 msgctxt "#41"
 msgid "Mon"
-msgstr "Mán"
+msgstr "mán"
 
 msgctxt "#42"
 msgid "Tue"
-msgstr "Ã\9eri"
+msgstr "þri"
 
 msgctxt "#43"
 msgid "Wed"
-msgstr "Mið"
+msgstr "mið"
 
 msgctxt "#44"
 msgid "Thu"
-msgstr "Fim"
+msgstr "fim"
 
 msgctxt "#45"
 msgid "Fri"
-msgstr "Fös"
+msgstr "fös"
 
 msgctxt "#46"
 msgid "Sat"
-msgstr "Lau"
+msgstr "lau"
 
 msgctxt "#47"
 msgid "Sun"
-msgstr "Sun"
+msgstr "sun"
 
 msgctxt "#51"
 msgid "Jan"
@@ -731,7 +731,7 @@ msgstr "Stækka"
 
 msgctxt "#217"
 msgid "Pixel ratio"
-msgstr "Teygja"
+msgstr "Skjápunktshlutfall"
 
 msgctxt "#218"
 msgid "DVD drive"
@@ -857,14 +857,14 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Veldu ákvörðunarstað"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Senda í alla hátalara"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Fjöldi rása"
 
+msgctxt "#254"
+msgid "DTS capable receiver"
+msgstr "Móttakari styður DTS"
+
 msgctxt "#255"
 msgid "CDDB"
 msgstr "CDDB"
@@ -1641,10 +1641,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Þakkir"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod kubbur"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Af"
@@ -1739,7 +1735,7 @@ msgstr "Get ekki tengst upplýsingaþjónustu"
 
 msgctxt "#500"
 msgid "Downloading album information failed"
-msgstr "Niðurhal hljómplötuupplýsinga brást"
+msgstr "Gat ekki sótt upplýsingar um hljómplötu"
 
 msgctxt "#501"
 msgid "Looking for album names..."
@@ -3667,7 +3663,7 @@ msgstr "Atriði læst"
 
 msgctxt "#12352"
 msgid "No downloading is needed."
-msgstr "Ekki er þörf á niðurhali."
+msgstr "Ekki er þörf á að sækja gögn."
 
 msgctxt "#12353"
 msgid "Reactivate lock"
@@ -4519,7 +4515,7 @@ msgstr "Spila hér"
 
 msgctxt "#13413"
 msgid "Downloading"
-msgstr "Niðurhala"
+msgstr "Sæki"
 
 msgctxt "#13414"
 msgid "Include artists who appear only on compilations"
@@ -4699,11 +4695,11 @@ msgstr "Ekki stafla"
 
 msgctxt "#14003"
 msgid "Downloading playlist file..."
-msgstr "Hala niður spilunarlista..."
+msgstr "Sæki spilunarlista..."
 
 msgctxt "#14004"
 msgid "Downloading streams list..."
-msgstr "Hala niður streymi lista..."
+msgstr "Sæki streymi lista..."
 
 msgctxt "#14005"
 msgid "Parsing streams list..."
@@ -4711,11 +4707,11 @@ msgstr "Þátta streymi lista..."
 
 msgctxt "#14006"
 msgid "Downloading streams list failed"
-msgstr "Niðurhölun streymilista mistókst"
+msgstr "Mistókst að sækja streymilista"
 
 msgctxt "#14007"
 msgid "Downloading playlist file failed"
-msgstr "Niðurhölun spilunarlista mistókst"
+msgstr "Mistókst að sækja spilunarlista"
 
 msgctxt "#14009"
 msgid "Games directory"
@@ -5581,6 +5577,10 @@ msgctxt "#19080"
 msgid "Begin:"
 msgstr "Byrja:"
 
+msgctxt "#19083"
+msgid "Lifetime (days):"
+msgstr "Líftími (dagar):"
+
 msgctxt "#19097"
 msgid "Enter the name for the recording"
 msgstr "Gefðu upptökunni nafn"
@@ -5589,6 +5589,14 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "Athugið"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "Þjónusta"
+
+msgctxt "#19102"
+msgid "Please switch to another channel."
+msgstr "Vinsamlegast skiptu yfir á aðra stöð."
+
 msgctxt "#19114"
 msgid "Version"
 msgstr "Útgáfa"
@@ -6435,7 +6443,7 @@ msgstr "Fann engan listamann!"
 
 msgctxt "#20199"
 msgid "Downloading artist info failed"
-msgstr "Niðurhal á upplýsingum um listamann mistókst"
+msgstr "Misstókst að sækja upplýsingar um listamann"
 
 msgctxt "#20250"
 msgid "Party on! (videos)"
@@ -6843,7 +6851,7 @@ msgstr "Spila tónlistarmyndband"
 
 msgctxt "#20402"
 msgid "Download actor thumbnails when adding to library"
-msgstr "Hlaða niður smámyndum fyrir leikara þegar bætt er við í safn"
+msgstr "Sækja smámyndir leikara þegar bætt er við í safn"
 
 msgctxt "#20403"
 msgid "Set actor thumb"
@@ -6863,11 +6871,11 @@ msgstr "Stillingar skrapara"
 
 msgctxt "#20408"
 msgid "Downloading music video information"
-msgstr "Sæki upplýsingar fyrir tónlistarmyndband"
+msgstr "Sæki upplýsingar um tónlistarmyndband"
 
 msgctxt "#20409"
 msgid "Downloading TV show information"
-msgstr "Sæki upplýsingar fyrir sjónvarpsþáttaröð"
+msgstr "Sæki upplýsingar um sjónvarpsþáttaröð"
 
 msgctxt "#20410"
 msgid "Trailer"
@@ -7011,7 +7019,7 @@ msgstr "Hunsa og endurnýja frá Internetinu?"
 
 msgctxt "#20448"
 msgid "Could not download information"
-msgstr "Gat ekki niðurhalið upplýsingum"
+msgstr "Gat ekki sótt upplýsingar"
 
 msgctxt "#20449"
 msgid "Unable to connect to remote server"
@@ -7097,10 +7105,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Fjarlægja samnýtingu"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mappa fyrir þýðingartexta"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Kvikmynda og auka mappa fyrir þýðingartexta"
@@ -7453,10 +7457,6 @@ msgctxt "#21455"
 msgid "Cache filled before reaching required amount for continous playback"
 msgstr "Skyndiminni fylltist áður en tókst að ná í nauðsynlegt magn fyrir áframhaldandi spilun"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Staðsetning þýðingartexta"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fastur"
@@ -7707,11 +7707,11 @@ msgstr "Leita að upplýsingum fyrir alla tónlistarmenn"
 
 msgctxt "#21885"
 msgid "Downloading album information"
-msgstr "Hleð niður upplýsingum um hljómplötu"
+msgstr "Sæki upplýsingar um hljómplötu"
 
 msgctxt "#21886"
 msgid "Downloading artist information"
-msgstr "Hleð niður upplýsingum um listamann"
+msgstr "Sæki upplýsingar um listamann"
 
 msgctxt "#21887"
 msgid "Biography"
@@ -8107,7 +8107,7 @@ msgstr "Setja inn frá zip skrá"
 
 msgctxt "#24042"
 msgid "Downloading %i%%"
-msgstr "Niðurhaa %i%%"
+msgstr "Sæki %i%%"
 
 msgctxt "#24043"
 msgid "Available Updates"
@@ -8171,11 +8171,11 @@ msgstr "Viðbót uppfærð"
 
 msgctxt "#24066"
 msgid "Cancel Add-on download?"
-msgstr "Hætta við að niðurhala viðbót?"
+msgstr "Hætta við að sækja viðbót?"
 
 msgctxt "#24067"
 msgid "Currently downloading Add-ons"
-msgstr "Er að niðurhala viðbótum"
+msgstr "Er að sækja viðbætur"
 
 msgctxt "#24068"
 msgid "Update available"
@@ -8247,11 +8247,31 @@ msgstr "Viltu skipta yfir á þetta útlit?"
 
 msgctxt "#24100"
 msgid "To use this feature you must download an Add-on:"
-msgstr "Til að nota þetta þarftu að hala niður viðbót:"
+msgstr "Til að nota þetta þarftu að sækja viðbót:"
 
 msgctxt "#24101"
 msgid "Would you like to download this Add-on?"
-msgstr "Viltu hala niður þessari viðbót?"
+msgstr "Viltu sækja þessa viðbót?"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Ef þýðingartextar eru ekki settir í möppu myndar, þá verða þeir settir í sérsniðna þýðingartexta-möppu"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Sæki þýðingartexta ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Sækja þýðingartexta fyrir tungumál"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Gat ekki sótt þýðingartexta"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Sláðu inn leitarstreng"
 
 msgctxt "#25000"
 msgid "Notifications"
@@ -8303,15 +8323,15 @@ msgstr "Straumur"
 
 msgctxt "#33003"
 msgid "Download"
-msgstr "Hala niður"
+msgstr "Sækja"
 
 msgctxt "#33004"
 msgid "Download & play"
-msgstr "Niðurhala og spila"
+msgstr "Sækja og spila"
 
 msgctxt "#33005"
 msgid "Download & save"
-msgstr "Niðurhala og vista"
+msgstr "Sækja og vista"
 
 msgctxt "#33006"
 msgid "Today"
@@ -8331,7 +8351,7 @@ msgstr "Afritun"
 
 msgctxt "#33010"
 msgid "Set download directory"
-msgstr "Velja niðurhalsmöppu"
+msgstr "Velja möppu fyrir sótt gögn"
 
 msgctxt "#33011"
 msgid "Search duration"
@@ -8621,10 +8641,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Stillingar hátalara"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -8832,3 +8848,11 @@ msgstr "Sjónvarp"
 msgctxt "#36393"
 msgid "Folder used to save screenshots taken within XBMC."
 msgstr "Mappa sem notuð er til þess að vista skjáskot sem tekin eru í XBMC."
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Skipta yfir á rás"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Taka upp"
index 02c8d28..d23b03c 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Pilih direktori tujuan"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Keluaran Stereo ke semua Speaker"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Jumlah saluran"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Kredit"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Matikan"
@@ -5753,10 +5745,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Rekaman TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Folder Default untuk thumbnail PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Saluran"
@@ -8561,10 +8549,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Hapus media kongsi"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Folder Teks Film"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film & direktori teks film alternatif"
@@ -8933,10 +8917,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "tercampur"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokasi Terjemahan"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Sudah tetap"
@@ -9789,6 +9769,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Kulit kehilangan beberapa berkas"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Masukkan Pencarian"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifikasi"
@@ -10161,10 +10145,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfigurasi Speaker"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11145,6 +11125,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Belum ada info tersedia."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Pindah ke saluran"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Rekam"
+
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Fungsikan pendekodean perangkat keras atas berkas video."
index 6fd203e..ab8e971 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleziona la cartella di destinazione"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Uscita stereo su tutte le casse"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Numero di canali"
@@ -1189,10 +1185,18 @@ msgctxt "#336"
 msgid "Framerate conversion"
 msgstr "Conversione framerate"
 
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Configurazione output"
+
 msgctxt "#338"
 msgid "Fixed"
 msgstr "Fissa"
 
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Ottimizzato"
+
 msgctxt "#340"
 msgid "Various artists"
 msgstr "Artisti vari"
@@ -1225,6 +1229,10 @@ msgctxt "#347"
 msgid "DTS-HD capable receiver"
 msgstr "Ricevitore compatibile DTS-HD"
 
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Abilita passthrough"
+
 msgctxt "#349"
 msgid "TrueHD capable receiver"
 msgstr "Ricevitore compatibile TrueHD"
@@ -1501,6 +1509,14 @@ msgctxt "#419"
 msgid "High"
 msgstr "Alto"
 
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Miglior corrispondenza"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Mantieni attivo il dispositivo audio"
+
 msgctxt "#422"
 msgid "Delete album info"
 msgstr "Elimina le info sull'album"
@@ -1645,6 +1661,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Cambia vista"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limite frequenza di campionamento (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Subs"
@@ -1693,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Riconoscimenti"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Spento"
@@ -2929,6 +2945,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Addon Programmi"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Imposta icona plugin"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Impostazioni Add-on"
@@ -3513,6 +3533,10 @@ msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Esplora addon"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Ripristina le precedenti impostazioni a predefinite"
+
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
 msgstr "Sai sicuro di voler resettare le impostazioni in questa categoria"
@@ -3525,10 +3549,26 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "Nessun aiuto disponibile"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Ripristina tutte le impostazioni visibili ai valori predefiniti"
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Nessuna categoria disponibile"
+
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Provare a cambiare il livello di impostazione per vedere ulteriori categorie e impostazioni."
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Casella di dialogo si/no"
 
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "Casella di Progresso"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "File browser"
@@ -3669,6 +3709,10 @@ msgctxt "#10524"
 msgid "Movie info"
 msgstr "Info film"
 
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "Casella di selezione"
+
 msgctxt "#12001"
 msgid "Music/Info"
 msgstr "Musica/Info"
@@ -3689,6 +3733,10 @@ msgctxt "#12006"
 msgid "Audio visualisation"
 msgstr "Effetto Grafico"
 
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr "Casella di unione file"
+
 msgctxt "#12009"
 msgid "Rebuild index..."
 msgstr "Ricostruzione indice..."
@@ -3845,6 +3893,10 @@ msgctxt "#12346"
 msgid "Password retry limit exceeded."
 msgstr "Limite di tentativi superato."
 
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Il sistema ora si spegnerà."
+
 msgctxt "#12348"
 msgid "Item locked"
 msgstr "Elemento bloccato"
@@ -4145,6 +4197,10 @@ msgctxt "#13110"
 msgid "Save resolution?"
 msgstr "Salva risoluzione?"
 
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Vuoi mantenere questi cambiamenti?"
+
 msgctxt "#13112"
 msgid "High quality upscaling"
 msgstr "Ridimensionamento ad alta qualità"
@@ -4493,6 +4549,10 @@ msgctxt "#13318"
 msgid "Recursive slideshow"
 msgstr "Presentazione ricorsiva"
 
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "Mescola "
+
 msgctxt "#13320"
 msgid "Stereo"
 msgstr "Stereo"
@@ -4897,6 +4957,10 @@ msgctxt "#13436"
 msgid "Allow hardware acceleration (libstagefright)"
 msgstr "Consenti accelerazione hardware (libstagefright)"
 
+msgctxt "#13437"
+msgid "Prefer VDPAU Video Mixer"
+msgstr "Preferisci VDPAU Video Mixer"
+
 msgctxt "#13438"
 msgid "Allow hardware acceleration (amcodec)"
 msgstr "Abilita accelerazione hardware (amcodec)"
@@ -4921,6 +4985,10 @@ msgctxt "#13503"
 msgid "Video clock (Resample audio)"
 msgstr "Clock video (Ricampiona audio)"
 
+msgctxt "#13504"
+msgid "Maximum speedup/slowdown amount (%)"
+msgstr "Massima accelerazione/rallentamento (%)"
+
 msgctxt "#13505"
 msgid "Resample quality"
 msgstr "Qualità ricampionamento"
@@ -5121,6 +5189,10 @@ msgctxt "#14024"
 msgid "Enter the nearest large town"
 msgstr "Inserisci la città più grande vicina a te"
 
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "Video/Audio/DVD cache - HardDisk"
+
 msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "cache Video - DVD-ROM"
@@ -5389,6 +5461,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Interrompi rip del CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Sorgente non disponibile"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Mantieni"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Rimuovi"
@@ -5673,6 +5753,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "Modifica titolo"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gestione..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "Modifica titolo per Ordinamento"
@@ -5809,6 +5893,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Video post-processing"
@@ -5901,10 +5989,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Registrazioni TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Cartella predefinita per le miniature del PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canali"
@@ -6105,6 +6189,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Vai a oggi"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Intervallo di aggiornamento dell' EPG"
@@ -6217,6 +6305,18 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "Attenzione"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "Servizio"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Provider"
+
 msgctxt "#19102"
 msgid "Please switch to another channel."
 msgstr "Per favore cambia in un altro canale"
@@ -6665,6 +6765,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 "Nessun add-on PVR può essere attivato. Controlla le impostazioni o il log per maggiori informazioni"
+
 msgctxt "#19224"
 msgid "Recording aborted"
 msgstr "Registrazione interrotta"
@@ -6689,6 +6793,10 @@ msgctxt "#19229"
 msgid "Close channel OSD after switching channels"
 msgstr "Chiudi il canale OSD dopo aver cambiato canale"
 
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "Non consentire gli aggiornamenti EPG durante la riproduzione"
+
 msgctxt "#19231"
 msgid "Always use the channel order from the backend(s)"
 msgstr "Usa sempre l'ordine dei canali del backend"
@@ -6701,6 +6809,10 @@ msgctxt "#19233"
 msgid "Display a notification on timer updates"
 msgstr "Mostra un avviso all'aggiornamento del timer"
 
+msgctxt "#19234"
+msgid "Use backend channels numbers (only works with 1 enabled PVR Add-on)"
+msgstr "Usa i numeri dei canali del backend (funziona solo con 1 add-on PVR abilitato)"
+
 msgctxt "#19235"
 msgid "PVR manager is starting up"
 msgstr "Il gestore PVR si sta avviando"
@@ -6721,10 +6833,18 @@ msgctxt "#19239"
 msgid "Starting background threads"
 msgstr "Inizializzazione thread in background"
 
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Nessun componente PVR attivo"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
 msgstr "Il manager PVR è stato abilitato senza alcun"
 
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "Add-on PVR abilitato. Abilita almeno un add-on"
+
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "per poter utilizzare le funzionalità PVR."
@@ -6837,10 +6957,18 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Tutte le registrazioni"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Nessun componente PVR è stato trovato"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "TI serve un sintonizzatore, un software di backend e un"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "add-on per il backend per poter usare PVR."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "Visitare xbmc.org/pvr per saperne di più."
@@ -8621,6 +8749,10 @@ msgctxt "#20455"
 msgid "Listeners"
 msgstr "In Ascolto"
 
+msgctxt "#20456"
+msgid "Flatten library hierarchy"
+msgstr "Spiana la gerarchia della libreria."
+
 msgctxt "#20457"
 msgid "Movie set"
 msgstr "imposta filmato"
@@ -8733,10 +8865,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Rimuovi condivisioni media"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Cartella sottotitoli"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film & cartella sottotitoli alternativa"
@@ -9105,10 +9233,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mixed"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Cartella dei sottotitoli"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fissa"
@@ -9141,6 +9265,18 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s a %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Dai priorità ai sottotitoli esterni"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferisci i sottotitoli esterni agli interni"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Esterno)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Nome file"
@@ -9821,10 +9957,22 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Aggiornamenti Disponibili"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Dipendenze non soddisfatte. Si prega di contattare l'autore dell'Add-on."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "L'Add-on non ha una struttura corretta"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s è usato al momento dai seguenti add-on(s)"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Questo add-on non può essere rimosso"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Regredire versione"
@@ -9949,6 +10097,10 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(in blacklist)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Questo Add-on è incompatibile o è stato segnalato non funzionante nel repository."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Vuoi disabilitarlo nel tuo sistema?"
@@ -9977,10 +10129,18 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Mancano alcuni file della skin"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "L'Add-on è incompatibile a causa di dipendenze non soddisfatte."
+
 msgctxt "#24105"
 msgid "Pause when searching for subtitles"
 msgstr "Metti in pausa durante la ricerca dei sottotitoli"
 
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Se non salvati nella cartella del film i sottotitoli verranno scaricati in una cartella per i sottotitoli personalizzata"
+
 msgctxt "#24107"
 msgid "Searching for subtitles ..."
 msgstr "Ricerca sottotitoli in corso..."
@@ -10001,10 +10161,42 @@ msgctxt "#24111"
 msgid "Languages to download subtitles for"
 msgstr "Lingue per cui scaricare i sottotitoli"
 
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Imposta le lingue da utilizzare per la ricerca dei sottotitoli. Non tutti i servizi per i sottotitoli dispongono di tutte le lingue."
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Download dei sottotitoli fallito"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Non è installato alcun servizio per i sottotitoli "
+
 msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Salva i sottotitoli nella cartella del film"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Servizio TV predefinito"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Seleziona il servizio predefinito per la ricerca dei sottotitoli delle serie TV"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Servizio predefinito per i film"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Seleziona il servizio predefinito per la ricerca dei sottotitoli dei film"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Inserire stringa da cercare"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifiche"
@@ -10109,6 +10301,10 @@ msgctxt "#33016"
 msgid "Clips"
 msgstr "Clip"
 
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Riavvia il plugin per abilitarlo"
+
 msgctxt "#33018"
 msgid "Tonight"
 msgstr "Stasera"
@@ -10385,10 +10581,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configurazione altoparlanti"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10429,6 +10621,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 "Seleziona il comportamento quando non sono richiesti suoni né dalla riproduzione né dall'interfaccia. [Sempre] - riproduce un suono inudibile continuo, questo mantiene attivo il dispositivo audio per eventuali nuovi suoni, ma questo potrebbe anche bloccare suoni di altre applicazioni. [1-10 Minuti] - come Sempre tranne per il fatto che l'audio si disabilita dopo il periodo di tempo selezionato. [Off] - l'uscita audio entra in uno stato di sospensione. Nota - si possono perdere alcuni suoni se l'audio entra in stato di sospensione."
+
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "Riproduci suoni"
@@ -10577,6 +10773,10 @@ msgctxt "#35102"
 msgid "Disable joystick when this device is present"
 msgstr "Disabilita joystick quando questo dispositivo è presente"
 
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Abilita i tasti di sistema in modalità a schermo intero"
+
 msgctxt "#35500"
 msgid "Location"
 msgstr "Posizione"
@@ -10645,6 +10845,10 @@ msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
 msgstr "Impossibile trovare la porta CEC. Impostala manualmente."
 
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "Impossibile connettersi all'adattatore CEC. Controlla le impostazioni."
+
 msgctxt "#36015"
 msgid "HDMI port number"
 msgstr "Numero porta HDMI"
@@ -10653,6 +10857,10 @@ msgctxt "#36016"
 msgid "Connected"
 msgstr "Connesso"
 
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "Impossibile inizializzare l'adattatore CEC: il libCEC non è stato trovato nel tuo sistema."
+
 msgctxt "#36018"
 msgid "Use the TV's language setting"
 msgstr "Usa il linguaggio impostato sulla TV"
@@ -10705,6 +10913,14 @@ msgctxt "#36030"
 msgid "Connection lost"
 msgstr "Connessione persa"
 
+msgctxt "#36031"
+msgid "This user does not have permissions to open the CEC adaptor"
+msgstr "L'utente non ha i permessi per aprire l'adattatore CEC"
+
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "La porta è occupata. Solo un programma alla volta può accedere all'adattatore CEC"
+
 msgctxt "#36033"
 msgid "Pause playback when switching to another source"
 msgstr "Interrompi la riproduzione al cambio di sorgente"
@@ -10857,6 +11073,10 @@ msgctxt "#36129"
 msgid "Set the amount of idle time required before displaying the screensaver."
 msgstr "Stabilisci il tempo di inattività oltre il quale mostrare il salvaschermo."
 
+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 "Seleziona lo screensaver. XBMC forzerà lo screensaver \"Dim\" quando la riproduzione video a schermo intero è in pausa o è aperta una finestra di dialogo."
+
 msgctxt "#36131"
 msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
 msgstr "Cambia impostazioni del salvaschermo specifiche. Le opzioni disponibili dipendono dal salvaschermo utilizzato."
@@ -10865,6 +11085,10 @@ msgctxt "#36132"
 msgid "Preview the selected screensaver."
 msgstr "Mostra anteprima del salvaschermo selezionato."
 
+msgctxt "#36133"
+msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver."
+msgstr "Mentre la musica è in esecuzione, XBMC avvierà la visualizzazione selezionata invece dello screensaver."
+
 msgctxt "#36134"
 msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
 msgstr "Offusca il display quando la riproduzione è in pausa. Non valido per la modalità screensaver \"Dim\"."
@@ -11001,6 +11225,14 @@ 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 "L'audio deve essere sincronizzato: ciò può essere fatto attraverso il ricampionamento, il salto/duplicazione dei pacchetti o la correzione dell'orologio se risulta troppo fuori sincrono."
 
+msgctxt "#36168"
+msgid "Maximum video speed adjust to match actual screen refresh rate."
+msgstr "Modifica massima della velocità del video in modo che corrisponda all'effettiva frequenza di aggiornamento dello schermo."
+
+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 "Selezionare la qualità di ricampionamento per i casi in cui l'uscita audio deve essere a una frequenza di campionamento diversa da quella utilizzata dalla sorgente. [Basso] è veloce e avrà un impatto minimo sulle risorse di sistema, come l'uso della CPU, [Medio] e [Alto] useranno progressivamente più risorse di 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 "Permetti al player video di ignorare il rapporto aspetto di un certo ammontare, in modo da riempire una più larga parte dello schermo con il video."
@@ -11009,6 +11241,10 @@ msgctxt "#36171"
 msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
 msgstr "Seleziona il livello di zoom per i video in 4:3 su display widescreen."
 
+msgctxt "#36172"
+msgid "VDPAU studio level conversion provides a way for advanced applications like XBMC to influence the colour space conversion."
+msgstr "La conversione VDPAU fornisce la possibilità di influenzare la conversione dello spazio dei colori per applicazioni avanzate come XBMC."
+
 msgctxt "#36173"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11025,6 +11261,10 @@ msgctxt "#36176"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36177"
+msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
+msgstr "Scambia tra Scegli, Riproduci (predefinito), Riprendi e Mostra Informazioni. Scegli selezionerà un elemento, ad esempio apre una cartella nella modalità file. Riprendi ripristinerà automaticamente i video dall'ultima posizione in cui lo stavi guardando, anche dopo aver riavviato il sistema."
+
 msgctxt "#36178"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11125,6 +11365,10 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Abilita la funzionalità Personal Video Recorder (PVR) in XBMC. Questo richiede che sia installato almeno un add-on 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 "Importa gruppi di canali dal backend PVR (se supportato). Questo provoca la cancellazione dei gruppi creati dall'utente se questi non sono presenti nel backend."
@@ -11189,10 +11433,6 @@ msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Finestra EOG predefinita da mostrato. Quella predefinita è la Timeline."
 
-msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Numero di giorni di dati EPG da importare dal backend. Il valore predefinito è di 2 giorni."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Intervallo tra le importazioni dal backend dei dati EPG. Il valore predefinito è di 120 minuti."
@@ -11225,6 +11465,10 @@ msgctxt "#36228"
 msgid "Show the last viewed channel if switching to live tv."
 msgstr "Mostra l'ultimo canale visualizzato se passi alla tv in diretta."
 
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Mostra informazioni sulla qualità del segnale nella finestra di informazioni sul codec (se supportato sia dall'addon che dal backend)"
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11245,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 "La durata della registrazione quando si preme il pulsante di registrazione, o quando si crea un nuovo timer in manuale. Il valore predefinito è di 180 minuti."
 
+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à della registrazione. Valori più altri significano maggiore priorità. Il valore predefinito è 50. Non supportato da tutti gli addon ed i backend."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Cancella registrazione trascorso questo periodo. Il valore predefinito è di 99 giorni. Non supportato da tutti gli addon ed i backend."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Inizia registrazione in anticipo di questo periodo. Il valore predefinito è di 2 minuti. Non supportato da tutti gli addon ed i backend."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Termina la registrazione in ritardo di questo periodo. Il valore predefinito è di 10 minuti. Non supportato da tutti gli addon ed i backend."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
 msgstr "Mostra una notifica quando dei timer vengono aggiunti, finiscono o vengono rimossi dal backend."
@@ -11265,6 +11525,10 @@ msgctxt "#36243"
 msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
 msgstr "Il comando da eseguire. Il valore predefinito è '/usr/bin/setwakeup.sh'."
 
+msgctxt "#36244"
+msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes."
+msgstr "Tempo da sottrarre dall'inizio della prossima registrazione pianificata. Predefinito 15 minuti."
+
 msgctxt "#36245"
 msgid "Execute the wakeup command every day at the given time."
 msgstr "Esegui il comando di risveglio ogni giorno ad una data ora."
@@ -11277,6 +11541,10 @@ msgctxt "#36247"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+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 "Chiede un codice pin per accedere a canali con blocco genitori. I canali possono essere selezionati come bloccati nell'editor dei canali nella scheda generale. I canali con blocco genitori non possono essere riprodotti o registrati senza immettere un codice pin, e le informazioni EPG sono nascoste per questi canali."
+
 msgctxt "#36249"
 msgid "Enter a new pin code to unlock parental locked channels."
 msgstr "Inserisci un nuovo codice pin per sbloccate i canali protetti dal controllo genitori"
@@ -11349,6 +11617,10 @@ msgctxt "#36266"
 msgid "When songs are added to a playlist they are queued instead of playback starting immediately."
 msgstr "Quando le canzoni vengono aggiunte ad una playlist vengono accodate invece che eseguite immediatamente."
 
+msgctxt "#36267"
+msgid "XBMC will read the ReplayGain information encoded in your audio files by a program such as MP3Gain and normalise the sound levels accordingly."
+msgstr "XBMC leggera l'informazione sul Replay Gain codificata nei tuoi file audio da programmi come MP3Gain e normalizza il livello del suono di conseguenza."
+
 msgctxt "#36268"
 msgid "Default is 89dB per standard. Change with caution."
 msgstr "Di default è 89dB. Cambiare con cautela."
@@ -11369,6 +11641,10 @@ msgctxt "#36272"
 msgid "Allow crassfading to occur when both tracks are from the same album."
 msgstr "Abilita la sfumatura quando entrambe le traccie sono dello stesso album."
 
+msgctxt "#36273"
+msgid "Select the visualisation that will be displayed while listening to music."
+msgstr "Seleziona la visualizzazione che verrà mostrata durante l'ascolto della musica."
+
 msgctxt "#36274"
 msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
 msgstr "Leggi i tag informativi dai file musicali. Per cartelle voluminose questo può rallenteare il tempo di lettura, specie in rete."
@@ -11525,6 +11801,10 @@ msgctxt "#36312"
 msgid "Select the amount of time that each image is displayed in a slideshow."
 msgstr "Imposta per quanto tempo ciascuna immagine è visualizzata durante una presentazione."
 
+msgctxt "#36313"
+msgid "Images in a slideshow will pan and zoom while displayed."
+msgstr "Le immagini in una presentazione scorreranno e si ingrandiranno quando visualizzate."
+
 msgctxt "#36314"
 msgid "View slideshow images in a random order."
 msgstr "Visualizza uno slideshow delle immagini in ordine casuale."
@@ -11685,6 +11965,10 @@ msgctxt "#36353"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36354"
+msgid "The main benefit is for multi-screen configurations, so XBMC can be used without automatically minimising other applications. Uses a bit more resources and playback may be slightly less smooth."
+msgstr "Il vantaggio principale è per configurazioni multi-schermo, così XBMC può essere utilizzato senza minimizzare automaticamente altre applicazioni. Utilizza un po' più risorse e la riproduzione potrebbe essere leggermente meno fluida."
+
 msgctxt "#36355"
 msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out."
 msgstr "In configurazioni muilti-schermo, gli schermi dove XBMC non viene visualizzato vengono oscurati."
@@ -11697,6 +11981,10 @@ msgctxt "#36357"
 msgid "Calibrate the User Interface by adjusting the overscan. Use this tool if the image being displayed is too large or small for your display."
 msgstr "Calibra l'interfaccia utente aggiustando la scansione. Usare questo strumento se l'immagine risulta troppo grande o troppo piccola per il display"
 
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Verifica modelli per la calibrazione dell'hardware dello schermo."
+
 msgctxt "#36359"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11705,6 +11993,10 @@ msgctxt "#36360"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+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 "Seleziona come impostare le proprietà dell'output audio: [Fixed] - le proprietà vengono impostate ogni volta su specifici valori di campionamento e configurazione degli altoparlanti; [Best Match] - le proprietà vengono impostate per combaciare il più possibile con le proprietà della sorgente; [Optimized] - le proprietà vengono impostate all'inizio della riproduzione e non cambieranno al cambiare delle proprietà della sorgente."
+
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
 msgstr "Amplifica le tracce AC3 ridotte a 2 canali."
@@ -11717,6 +12009,14 @@ msgctxt "#36366"
 msgid "Select this option if your receiver is capable of decoding DTS streams."
 msgstr "Scegli questa opzione se il tuo ricevitore è in grado di decodificare i flussi 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 "Selezionare il numero massimo di canali audio / altoparlanti disponibili per l'audio decodificato. Se si utilizzano le uscite digitali ottiche / coassiali questo deve essere impostato a 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Selezionare per abilitare le opzioni audio passthrough per la riproduzione di audio codificato come Dolby Digital."
+
 msgctxt "#36369"
 msgid "Select this option if your receiver is capable of decoding TrueHD streams."
 msgstr "Scegli questa opzione se il tuo ricevitore è in grado di decodificare i flussi TrueHD"
@@ -11725,6 +12025,18 @@ msgctxt "#36370"
 msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
 msgstr "Scegli questa opzione se il tuo ricevitore è in grado di decodificare i flussi DTS-HD."
 
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Selezionare il dispositivo da utilizzare per la riproduzione di audio che è stato decodificato come 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 "Seleziona il dispositivo da usare per la riproduzione dei formati codificati indicati sotto, tra le opzioni dei 'ricevitori capaci'."
+
+msgctxt "#36373"
+msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
+msgstr "Configura come i suoni di interfaccia sono gestiti, come navigazione del menu e notifiche importanti."
+
 msgctxt "#36374"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11733,6 +12045,14 @@ msgctxt "#36375"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36376"
+msgid "When activated, your keyboard arrows will move the selection on the virtual keyboard. When deactivated, they will move the cursor from your text."
+msgstr "Quando attivato, le frecce della tastiera sposteranno la selezione sulla tastiera virtuale. Quando disattivato, sposteranno il cursore dal testo."
+
+msgctxt "#36377"
+msgid "Use a mouse or touch screen device to control XBMC. Note: disabling will cause you to lose control over XBMC when no keyboard or remote is present."
+msgstr "Usa un mouse o un dispositivo touch screen per controllare XBMC. Nota: se disabilitato non avrai il controllo di XBMC quando tastiera o telecomando non sono collegati."
+
 msgctxt "#36378"
 msgid "Use a joystick to control XBMC."
 msgstr "Usa un joystick per controllare XBMC."
@@ -11801,13 +12121,17 @@ msgctxt "#36394"
 msgid "Specify additional libraries to be included in the debug log."
 msgstr "Specifica le librerie aggiuntive che dovranno essere inserite nel registro di debug."
 
+msgctxt "#36395"
+msgid "Open the Master Lock dialogue, where you can configure your Master Lock options."
+msgstr "Apre pannello Master Lock, dove puoi configurare le opzioni di Master Lock."
+
 msgctxt "#36396"
 msgid "Define the PIN code used for the master lock."
 msgstr "Imposta il codice PIN usato come master lock."
 
 msgctxt "#36397"
 msgid "If enabled, the master lock code is required to unlock XBMC on startup "
-msgstr "Se abilitato, verrà richiesto il master lock code sbloccare XMBC all'avvio"
+msgstr "Se abilitato, verrà richiesto il master lock code sbloccare XBMC all'avvio"
 
 msgctxt "#36398"
 msgid "Define the maximum number of retries before XBMC is closed down."
@@ -11881,6 +12205,10 @@ msgctxt "#36415"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36416"
+msgid "Define the Apple remote standard used."
+msgstr "Definisci lo standard usato dal telecomando Apple."
+
 msgctxt "#36417"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
@@ -11897,6 +12225,22 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Nessuna informazione disponibile."
 
+msgctxt "#36421"
+msgid "Bypassing VDPAU mixer saves resources on low power systems but slightly reduces picture quality"
+msgstr "L'esclusione del mixer VDPAU risparmia risorse di sistema, ma riduce leggermente la qualità dell'immagine"
+
+msgctxt "#36422"
+msgid "Enable hardware video decode using AMLogic decoder"
+msgstr "Abilita la decodifica hardware per il video utilizzando il decoder AMLogic"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Cambia al canale"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Registra"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Modalità stereoscopica (attuale)"
@@ -11949,6 +12293,10 @@ msgctxt "#36522"
 msgid "Use preferred mode"
 msgstr "Utilizza modalità preferita"
 
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Massima frequenza di campionamento per l'SPDIF o frequenza di campionamento fissa per configurazioni con output a frequenza fissa"
+
 msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "Modalità preferita"
@@ -11985,6 +12333,10 @@ msgctxt "#36532"
 msgid "Same as movie"
 msgstr "La stessa del video"
 
+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 "Seleziona come l'audio viene scalato, ad esempio da 5.1 a 2.0: [Enabled] mantieni il range dinamico della sorgente audio originale, abbassando il volume [Disabled] mantieni il livello del volume della sorgente audio originale comprimendo il range dinamico. Nota - Il range dinamico è la differenza tra i suoni più deboli ed i più forti in una sorgente audio."
+
 msgctxt "#36535"
 msgid "Stereoscopic mode of video"
 msgstr "Modalità stereoscopia"
@@ -12013,10 +12365,26 @@ msgctxt "#36541"
 msgid "Allows volume control from AirPlay clients."
 msgstr "Consenti di controllare il volume dai client AirPlay."
 
+msgctxt "#36542"
+msgid "Output to both analogue (headphones) and HDMI"
+msgstr "Output sia analogici (cuffie) che HDMI"
+
+msgctxt "#36543"
+msgid "Enable this to make dialogue louder compared to background sounds when downmixing multichannel audio"
+msgstr "Attivare questa opzione per rendere il dialogo più forte rispetto a suoni di sottofondo quando si esegue il downmix di audio multicanale"
+
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Abilita la decodifica hardware dei file video."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profondità stereoscopica dei sottotitoli"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Imposta la profondità dei sottotitoli per video stereoscopici. Più alto il valore, più i sottotitoli appariranno vicini."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Ipovedenti)"
@@ -12049,6 +12417,18 @@ msgctxt "#37015"
 msgid "Browse Into"
 msgstr "Sfoglia contenuto"
 
+msgctxt "#37016"
+msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
+msgstr "Scegli questa opzione se il tuo ricevitore è in grado di decodificare i flussi E-AC3."
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "Uscita audio duale"
+
 msgctxt "#37018"
 msgid "Boost centre channel when downmixing"
 msgstr "Amplifica il canale centrale nella riduzione stereo"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Abilita, in modalità schermo intero, i tasti di sistema come Stampa, Alt-Tab ed i tasti del volume"
index 72b7802..5ff4ac0 100644 (file)
@@ -865,10 +865,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "ディレクトリの選択"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ステレオ音声を全スピーカーから出力"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "チャンネル数"
@@ -1677,10 +1673,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "クレジット"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "MODチップ"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "オフ"
@@ -5745,10 +5737,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV録画"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR サムネールのデフォルトフォルダー"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "チャンネル"
@@ -8537,10 +8525,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "メディア共有を削除"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "字幕フォルダー設定"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Movie & Alternate Subtitle Directory"
@@ -8901,10 +8885,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "視聴したエピソードの回数"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕の場所"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixed"
@@ -9745,6 +9725,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "スキンはいくつかのファイルをなくしています。"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "検索文字列を入力"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "通知"
@@ -10125,10 +10109,6 @@ 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"
@@ -11057,6 +11037,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "情報がまだありません。"
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "チャンネル切り替え"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "録音"
+
 msgctxt "#36537"
 msgid "No info available yet."
 msgstr "情報がまだありません。"
index 91e9cc9..847323f 100644 (file)
@@ -391,7 +391,7 @@ msgstr "파일 이동 확인"
 
 msgctxt "#122"
 msgid "Confirm file delete?"
-msgstr "파일 삭제 확인?"
+msgstr "파일 삭제 확인"
 
 msgctxt "#123"
 msgid "Copy these files?"
@@ -403,7 +403,7 @@ msgstr "이 파일을 이동 하겠습니까?"
 
 msgctxt "#125"
 msgid "Delete these files? - Deleting files cannot be undone!"
-msgstr "파일을 삭제 하겠습니까? 삭제하면 되돌릴 수 없습니다!"
+msgstr "파일을 삭제하겠습니까? 삭제하면 되돌릴 수 없습니다!"
 
 msgctxt "#126"
 msgid "Status"
@@ -683,7 +683,7 @@ msgstr "%s 정보 요청"
 
 msgctxt "#198"
 msgid "Loading movie details"
-msgstr "영화 상세정보 읽기"
+msgstr "영화 상세정보 가져오는 중"
 
 msgctxt "#199"
 msgid "Web interface"
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "대상 디렉터리 선택"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "모든 스피커에 스테레오 출력"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "채널수"
@@ -1227,7 +1223,7 @@ msgstr "연도"
 
 msgctxt "#346"
 msgid "Normalize levels on downmix"
-msgstr "다운믹스 노멀라이즈 레벨"
+msgstr "다운믹스 노멀라이즈"
 
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
@@ -1247,7 +1243,7 @@ msgstr "프로그램"
 
 msgctxt "#351"
 msgid "Off"
-msgstr "사용 안 함"
+msgstr ""
 
 msgctxt "#352"
 msgid "Dim"
@@ -1519,7 +1515,7 @@ msgstr "소스에 맞춤"
 
 msgctxt "#421"
 msgid "Keep audio device alive"
-msgstr "오디오 장 대기상태 방지"
+msgstr "오디오 장 대기상태 방지"
 
 msgctxt "#422"
 msgid "Delete album info"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "만든 사람들"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "모드칩"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "끔"
@@ -2711,7 +2703,7 @@ msgstr "무선 네트워크 이름 (ESSID)"
 
 msgctxt "#790"
 msgid "Remote control"
-msgstr "리모트 컨트롤"
+msgstr "원격 제어"
 
 msgctxt "#791"
 msgid "Allow programs on this system to control XBMC"
@@ -2953,6 +2945,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "프로그램 추가기능"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "플러그인 썸네일 설정"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "추가기능 설정"
@@ -3557,6 +3553,14 @@ msgctxt "#10047"
 msgid "Try changing the setting level to see additional categories and settings."
 msgstr "더 많은 카테고리와 설정을 보려면 설정 수준을 변경하세요."
 
+msgctxt "#10100"
+msgid "Yes/No dialogue"
+msgstr "예/아니오 대화창"
+
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "진행 대화창"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "파일 탐색기"
@@ -3697,10 +3701,18 @@ msgctxt "#10524"
 msgid "Movie info"
 msgstr "영화 정보"
 
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "선택 대화창"
+
 msgctxt "#12001"
 msgid "Music/Info"
 msgstr "음악/정보"
 
+msgctxt "#12002"
+msgid "Dialogue OK"
+msgstr "확인 대화창"
+
 msgctxt "#12003"
 msgid "Videos/Info"
 msgstr "비디오/정보"
@@ -4259,7 +4271,7 @@ msgstr "애플 리모트 모드를 변경 하시겠습니까?"
 
 msgctxt "#13145"
 msgid "If you are currently using the Apple Remote to control"
-msgstr "만약 현재 XMBC 를 제어하는데 애플 리모트를"
+msgstr "만약 현재 XBMC 를 제어하는데 애플 리모트를"
 
 msgctxt "#13146"
 msgid "XBMC, changing this setting might affect your ability"
@@ -4631,7 +4643,7 @@ msgstr "영화 정보"
 
 msgctxt "#13347"
 msgid "Queue item"
-msgstr "항목 추가"
+msgstr "대기열에 추가"
 
 msgctxt "#13348"
 msgid "Search IMDb..."
@@ -4945,10 +4957,6 @@ 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 동기 방식"
@@ -5063,7 +5071,7 @@ msgstr "표준"
 
 msgctxt "#13612"
 msgid "Universal Remote"
-msgstr "ì\9c ë\8b\88ë²\84ì\85\9c 리모트"
+msgstr "ì\9c ë\8b\88ë²\84ì\84¤ 리모트"
 
 msgctxt "#13613"
 msgid "Multi Remote (Harmony)"
@@ -5441,6 +5449,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "CD 리핑 중지"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "사용할 수 없는 소스"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "%s 의 미디어 항목을 어떻게 처리하시겠습니까?"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "유지"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "제거"
@@ -5865,6 +5885,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "후처리"
@@ -5957,10 +5981,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV 녹화"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 썸네일 기본 폴더"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "채널"
@@ -6277,6 +6297,10 @@ msgctxt "#19099"
 msgid "Service"
 msgstr "서비스"
 
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
 msgctxt "#19101"
 msgid "Provider"
 msgstr "제공자"
@@ -7711,7 +7735,7 @@ msgstr "마지막 로그인: %s"
 
 msgctxt "#20113"
 msgid "Never logged on"
-msgstr "로그인한적 없음"
+msgstr "로그인한 적 없음"
 
 msgctxt "#20114"
 msgid "Profile %i / %i"
@@ -8053,6 +8077,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "아티스트 정보 다운로드 실패"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "노래 태그를 온라인 정보로 덮어쓰기"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "온라인에서 가져온 아티스트/앨범 정보를 기존 노래 태그(장르, 연도, 아티스트 등)에 덮어씁니다.  기존 노래 태그에 MusicBrainz 식별자가 포함되어 있는 경우 유용합니다."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "안드로이드 음악"
@@ -8303,7 +8335,7 @@ msgstr "에피소드 정보"
 
 msgctxt "#20353"
 msgid "Loading TV show details"
-msgstr "TV 쇼 상세정보 읽기"
+msgstr "TV 쇼 상세정보 가져오는 중"
 
 msgctxt "#20354"
 msgid "Fetching episode guide"
@@ -8311,7 +8343,7 @@ msgstr "에피소드 가이드 가져오기"
 
 msgctxt "#20355"
 msgid "Loading info for episodes in directory"
-msgstr "디렉터리의 에피소드 정보 읽기"
+msgstr "디렉터리의 에피소드 정보 가져오는 중"
 
 msgctxt "#20356"
 msgid "Select TV show:"
@@ -8335,7 +8367,7 @@ msgstr "에피소드"
 
 msgctxt "#20361"
 msgid "Loading episode details"
-msgstr "에피소드 상세정보 읽기"
+msgstr "에피소드 상세정보 가져오는 중"
 
 msgctxt "#20362"
 msgid "Remove episode from library"
@@ -8467,7 +8499,7 @@ msgstr "뮤직비디오 정보"
 
 msgctxt "#20394"
 msgid "Loading music video information"
-msgstr "뮤직비디오 정보 읽기"
+msgstr "뮤직비디오 정보 가져오는 중"
 
 msgctxt "#20395"
 msgid "Mixed"
@@ -8595,7 +8627,7 @@ msgstr "팬아트 슬라이드쇼"
 
 msgctxt "#20426"
 msgid "Export to a single file or separate"
-msgstr "항목당 단일 파일로 내보낼까요 분리"
+msgstr "단일 파일로 내보낼까요 항목별 분리"
 
 msgctxt "#20427"
 msgid "files per entry?"
@@ -8829,10 +8861,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "미디어 공유 제거"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "자막 폴더"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "영화 & 추가 자막 디렉터리"
@@ -9201,10 +9229,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "섞기"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "자막 위치"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "고정"
@@ -9923,7 +9947,7 @@ msgstr "압축 파일에서 설치"
 
 msgctxt "#24042"
 msgid "Downloading %i%%"
-msgstr "%i%% 다운로드중"
+msgstr "%i%% 다운로드 중"
 
 msgctxt "#24043"
 msgid "Available Updates"
@@ -10149,6 +10173,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "자막을 영화 폴더에 저장"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "TV 자막 기본 서비스"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "TV 쇼 자막 찾기에 사용할 기본 서비스를 선택합니다."
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "영화 자막 기본 서비스"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "영화 자막 찾기에 사용할 기본 서비스를 선택합니다."
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "직접 찾기 검색어"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "검색어 입력"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "알림"
@@ -10533,10 +10581,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "윈도우 미디어 오디오 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "스피커 설정"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10579,7 +10623,7 @@ 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분] - '항상'과 같지만 선택한 시간이 지나면 오디오가 유휴 상태로 들어갑니다. [끔] - 오디오 출력이 유휴 상태로 들어갑니다. 주의 - 오디오가 대기 상태로 들어가면 일부 사운드가 들리지 않을 수 있습니다."
+msgstr "재생 또는 GUI 음향이 필요하지 않을 때의 동작을 선택합니다. [항상] - 들리지 않는 음향 신호를 지속적으로 출력하여 오디오 장치가 대기 상태로 진입하지 않고 신호를 받게 해 주지만 다른 애플리케이션의 사운드도 막을 수 있습니다. [1- 10분] - '항상'과 같지만 선택한 시간이 지나면 오디오가 대기 상태로 들어갑니다. [끔] - 오디오 출력이 대기 상태로 들어갑니다. 주의 - 오디오가 대기 상태로 들어가면 일부 사운드가 들리지 않을 수 있습니다."
 
 msgctxt "#34120"
 msgid "Play GUI sounds"
@@ -11047,7 +11091,7 @@ msgstr "음악이 재생중인 경우 XBMC는 화면보호기 대신, 선택한
 
 msgctxt "#36134"
 msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
-msgstr "미디어 재생 일시 정지 중에 화면을 흐리게 합니다. 'Dim' 화면 보호 선택시는 옵션을 사용할 수 없습니다."
+msgstr "미디어 재생 일시 정지 중에 화면을 흐리게 합니다. 'Dim' 화면 보호 선택시는 옵션을 사용할 수 없습니다."
 
 msgctxt "#36135"
 msgid "No info available yet."
@@ -11189,6 +11233,10 @@ 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 "#36170"
+msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
+msgstr "화면의 검은 여백을 영상으로 채울 때 비디오 재생기가 허용할 수 있는 화면비 오차의 최대값입니다. "
+
 msgctxt "#36171"
 msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
 msgstr "와이드스크린 디스플레이에 4:3 동영상 재생시 확대 방법을 선택합니다."
@@ -11211,7 +11259,7 @@ msgstr "아직 사용 가능한 정보가 없습니다."
 
 msgctxt "#36177"
 msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
-msgstr "'선택', '재생' (기본값), '되시작', '정보 보기' 의 옵션이 있습니다. '선택'은 항목을 선택합니다. 예, 파일모드에서 디렉터리를 엽니다. '되시작'은 마지막으로 재생이 중단된 지점부터 자동으로 이어서 재생되며 시스템을 재시작한 경우에도 작동됩니다."
+msgstr "'선택', '재생' (기본값), '되시작', '정보 보기' 의 옵션이 있습니다. '선택'은 항목을 선택합니다(ex. 파일모드에서 디렉터리를 엽니다). '되시작'은 마지막으로 재생이 중단된 지점부터 자동으로 이어서 재생되며 시스템을 재시작한 경우에도 작동됩니다."
 
 msgctxt "#36178"
 msgid "No info available yet."
@@ -11382,8 +11430,8 @@ 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일."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "백엔드에서 몇 일분의 EPG 데이터를 가져올 것인지를 설정합니다. 기본값은 3일."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11567,7 +11615,7 @@ msgstr "음악을 듣는 동안 표시될 시각화를 선택합니다."
 
 msgctxt "#36274"
 msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
-msgstr "노래 파일에서 태그 정보를 읽습니다. 큰 디렉터리를 네트워크 통해 읽어오는 경우 특히 많은 시간이 걸릴 수 있습니다."
+msgstr "노래 파일에서 태그 정보를 읽습니다. 큰 디렉터리를 네트워크 통해 읽어오는 경우 특히 많은 시간이 걸릴 수 있습니다."
 
 msgctxt "#36275"
 msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
@@ -11575,7 +11623,7 @@ msgstr "노래 목록에서 노래 제목이 표시되는 형식을 설정합니
 
 msgctxt "#36276"
 msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
-msgstr "노래 목록의 오른쪽에 표시될 정보입니다. 통상 트랙의 길이를 표시합니다."
+msgstr "노래 목록의 오른쪽에 표시될 정보입니다. 보통 트랙의 길이를 표시합니다."
 
 msgctxt "#36277"
 msgid "No info available yet."
@@ -11615,15 +11663,15 @@ 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 "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 "카피 백업에 사용할 오디오 인코더를 선택합니다."
+msgstr "복사 백업에 사용할 오디오 인코더를 선택합니다."
 
 msgctxt "#36288"
 msgid "Select which quality you want to rip your files."
-msgstr "ë°±ì\97\85 ì¹´í\94¼ 파일의 품질을 선택합니다."
+msgstr "ë³µì\82¬ ë°±ì\97\85 파일의 품질을 선택합니다."
 
 msgctxt "#36289"
 msgid "Select which bitrate to use for the specified audio encoder for audio compression."
@@ -11643,7 +11691,7 @@ msgstr "아직 사용 가능한 정보가 없습니다."
 
 msgctxt "#36293"
 msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
-msgstr "음악을 재생할 때, 그 음악의 .cdg 파일을 찾아서 보여줍니다."
+msgstr "음악을 재생할 때 음악의 .cdg 파일을 찾아서 보여줍니다."
 
 msgctxt "#36294"
 msgid "No info available yet."
@@ -11707,7 +11755,7 @@ msgstr "해당되는 정보가 포함되어 있는 경우, EXIF 정보에 따라
 
 msgctxt "#36309"
 msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
-msgstr "대부분의 카메라에 비디오 촬영 기능이 있기 때문에, 사진 파일 목록에서 비디오 미디어를 보여줍니다."
+msgstr "대부분의 카메라에 비디오 촬영 기능이 있기 때문에 사진 파일 목록에서 비디오 미디어를 보여줍니다."
 
 msgctxt "#36310"
 msgid "No info available yet."
@@ -11807,7 +11855,7 @@ msgstr "아직 사용 가능한 정보가 없습니다."
 
 msgctxt "#36334"
 msgid "Allow programs on this computer to control XBMC via the Web Interface or the JSON-RPC interface protocol."
-msgstr "이 시스템의 프로그램이, 웹 인터페이스 또는 JSON-RPC 인터페이스 프로토콜을 통해 XBMC를 제어하는 것을 허용합니다."
+msgstr "이 시스템의 프로그램이 웹 인터페이스 또는 JSON-RPC 인터페이스 프로토콜을 통해 XBMC를 제어하는 것을 허용합니다."
 
 msgctxt "#36335"
 msgid "No info available yet."
@@ -11917,18 +11965,10 @@ 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 디코딩을 지원하면 선택합니다."
@@ -12157,9 +12197,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "EPG 항목을 선택했을 때의 동작입니다: [컨텍스트 메뉴 표시] 는 해당 항목에서 선택할 수 있는 추가 동작을 컨텍스트 메뉴로 보여줍니다; [채널로  변경] 관련 채널로 이동하여 시청합니다; [정보 보기] 줄거리와 추가 옵션을 포함하는 상세 정보를 보여줍니다; [녹화] 선택한 항목을 예약 녹화합니다."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "컨텍스트 메뉴 표시"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "채널로 변경"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "정보 보기"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "녹화"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12245,13 +12301,17 @@ msgctxt "#36530"
 msgid "Preferred mode"
 msgstr "우선 모드"
 
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "다른 모드 선택..."
+
 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 채널: [사용함] 소스의 다이내믹 레인지를 유지하지만 음량은 낮아집니다. [사용 안 함] 소스의 음량 수준을 유지하지만 다이내믹 레인지는 좁아집니다. 주 - 다이내믹 레인지는 특정 오디오 소스에서 가장 시끄러운 소리와 가장 조용한 소리의 범위입니다."
+msgstr "다운믹스(Ex. 5.1 채널을 2.0 채널로 출력) 방식을 선택합니다: [사용함] 원 소스의 다이내믹 레인지를 유지하지만 음량은 낮아집니다. [사용 안 함] 원 소스의 음량 수준을 유지하지만 다이내믹 레인지는 좁아집니다. 참고 - 다이내믹 레인지는 특정 오디오 소스에서 가장 큰 소리와 가장 작은 소리 사이의 범위입니다."
 
 msgctxt "#36535"
 msgid "Stereoscopic mode of video"
@@ -12293,6 +12353,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "비디오 하드웨어 디코딩을 사용합니다."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "3D 자막 심도"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "3D 비디오 자막의 심도를 설정합니다. 설정값이 높을수록 시청자에 가깝게 보입니다"
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "커버와 팬아트에서 고품질의 텍스처를 사용합니다 (더 많은 메모리를 사용함)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "메모리 절약을 위하여 GUI 해상도를 제한합니다. 비디오 재생에는 영향을 주지 않습니다. 1080으로 설정하면 제한을 두지 않습니다. 설정 후 다시 시작하여야 합니다."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(시각 장애인)"
@@ -12340,3 +12416,11 @@ msgstr "다운믹스할 때 센터 채널 증폭"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "전체화면에서 프린트스크린, alt-tab, 음량 등의 시스템 키를 사용합니다"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "고품질 아트워크 사용"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "GUI 해상도 제한 설정"
index 7b3e55c..829231e 100644 (file)
@@ -685,6 +685,14 @@ msgctxt "#199"
 msgid "Web interface"
 msgstr "Pārlūka saskarne"
 
+msgctxt "#202"
+msgid "Tagline"
+msgstr "Devīze"
+
+msgctxt "#203"
+msgid "Plot outline"
+msgstr "Sižeta izklāsts"
+
 msgctxt "#205"
 msgid "Votes"
 msgstr "Balsis"
@@ -761,6 +769,18 @@ msgctxt "#226"
 msgid "Test patterns..."
 msgstr "Testa šablons..."
 
+msgctxt "#227"
+msgid "Lookup audio CD track names from freedb.org"
+msgstr "Meklēt Audio CD dziesmu nosaukumus no freedb.org"
+
+msgctxt "#228"
+msgid "Shuffle playlist on load"
+msgstr "Jaukt atskaņošanas sarakstu pēc ielādes"
+
+msgctxt "#229"
+msgid "HDD spindown time"
+msgstr "HDD apturēšanas laiks"
+
 msgctxt "#230"
 msgid "Video filters"
 msgstr "Video filtri"
@@ -773,10 +793,46 @@ msgctxt "#232"
 msgid "Point"
 msgstr "Punkts"
 
+msgctxt "#233"
+msgid "Linear"
+msgstr "Lineārais"
+
+msgctxt "#234"
+msgid "Anisotropic"
+msgstr "Anizotrops"
+
+msgctxt "#235"
+msgid "Quincunx"
+msgstr "Kvinkunces"
+
+msgctxt "#236"
+msgid "Gaussian cubic"
+msgstr "Gausa kubiskais"
+
+msgctxt "#237"
+msgid "Minification"
+msgstr "Samazinošais"
+
 msgctxt "#238"
 msgid "Magnification"
 msgstr "Palielinājums"
 
+msgctxt "#239"
+msgid "Clear playlist on finish"
+msgstr "Notīrīt spēļsarakstu pie finiša"
+
+msgctxt "#240"
+msgid "Display Mode"
+msgstr "Attēlojuma režīms"
+
+msgctxt "#241"
+msgid "Full Screen #%d"
+msgstr "Pilnekrāns #%d"
+
+msgctxt "#242"
+msgid "Windowed"
+msgstr "Logs"
+
 msgctxt "#243"
 msgid "Refresh Rate"
 msgstr "Atsvaidzes Intensitāte"
@@ -785,6 +841,10 @@ msgctxt "#244"
 msgid "Full screen"
 msgstr "Pilnekrāns"
 
+msgctxt "#245"
+msgid "Sizing: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pixels: %2.2f:1) (VShift: %2.2f)"
+msgstr "Mērogošana: (%i,%i)->(%i,%i) (Zoom x%2.2f) AR:%2.2f:1 (Pikseļi: %2.2f:1) (VShift: %2.2f)"
+
 msgctxt "#247"
 msgid "Scripts"
 msgstr "Skripti"
@@ -797,18 +857,54 @@ msgctxt "#249"
 msgid "Music"
 msgstr "Mūzika"
 
+msgctxt "#251"
+msgid "Select destination directory"
+msgstr "Izvēlēties gala direktoriju"
+
+msgctxt "#253"
+msgid "Number of channels"
+msgstr "Kanālu skaits"
+
+msgctxt "#254"
+msgid "DTS capable receiver"
+msgstr "DTS spējīgs uztvērējs"
+
+msgctxt "#255"
+msgid "CDDB"
+msgstr "CDDB"
+
+msgctxt "#256"
+msgid "Fetching CD information"
+msgstr "Nolasa CD informāciju"
+
 msgctxt "#257"
 msgid "Error"
 msgstr "Kļūda"
 
+msgctxt "#258"
+msgid "Enable tag reading"
+msgstr "Ieslēgt tagu lasīšanu"
+
 msgctxt "#259"
 msgid "Opening"
 msgstr "Atver"
 
+msgctxt "#260"
+msgid "Shoutcast"
+msgstr "Shoutcast"
+
 msgctxt "#261"
 msgid "Waiting for start..."
 msgstr "Gaida sākumu..."
 
+msgctxt "#262"
+msgid "Scripts output"
+msgstr "Skriptu izvade"
+
+msgctxt "#263"
+msgid "Allow control of XBMC via HTTP"
+msgstr "Atļaut XBMC kontroli no HTTP"
+
 msgctxt "#264"
 msgid "Record"
 msgstr "Ierakstīt"
@@ -841,22 +937,82 @@ msgctxt "#271"
 msgid "Top 100"
 msgstr "Top 100"
 
+msgctxt "#272"
+msgid "Top-Left overscan compensation"
+msgstr "Augšējā-kreisā pārskenēšanas kompensācija"
+
+msgctxt "#273"
+msgid "Bottom-Right overscan compensation"
+msgstr "Apakšējā-labējā pārskenēšanas kompensācija"
+
+msgctxt "#274"
+msgid "Subtitle positioning"
+msgstr "Subtitru novietošana"
+
 msgctxt "#275"
 msgid "Pixel ratio adjustment"
 msgstr "Pikseļu attiecības pielāgošana"
 
+msgctxt "#276"
+msgid "Adjust the arrow to change the amount of overscan"
+msgstr "Pielāgo bultu, lai izmainītu pārskenēšanas daudzumu"
+
+msgctxt "#277"
+msgid "Adjust the bar to change the subtitles position"
+msgstr "Pielāgo joslu, lai izmainītu subtitru novietojumu"
+
+msgctxt "#278"
+msgid "Adjust the rectangle so it is perfectly square"
+msgstr "Pielāgo taisnstūri, lai tas ir perfekts kvadrāts"
+
+msgctxt "#279"
+msgid "Unable to load settings"
+msgstr "Nespēj ielādēt iestatījumus"
+
+msgctxt "#280"
+msgid "Using default settings"
+msgstr "Izmanto noklusētos iestatījumus"
+
 msgctxt "#281"
 msgid "Please check the XML files"
 msgstr "Lūdzu pārbaudi XML failus"
 
+msgctxt "#282"
+msgid "Found %i items"
+msgstr "Atrasti %i ieraksti"
+
+msgctxt "#283"
+msgid "Search results"
+msgstr "Meklēšanas rezultāti"
+
 msgctxt "#284"
 msgid "No results found"
 msgstr "Nekas netika atrasts"
 
+msgctxt "#285"
+msgid "Preferred audio language"
+msgstr "Vēlamā audio valoda"
+
+msgctxt "#286"
+msgid "Preferred subtitle language"
+msgstr "Vēlamā subtitru valoda"
+
+msgctxt "#287"
+msgid "Subtitles"
+msgstr "Subtitri"
+
 msgctxt "#288"
 msgid "Font"
 msgstr "Fonts"
 
+msgctxt "#289"
+msgid "Size"
+msgstr "Izmērs"
+
+msgctxt "#290"
+msgid "Dynamic range compression"
+msgstr "Dinamiskā diapazona kompresija"
+
 msgctxt "#291"
 msgid "Video"
 msgstr "Video"
@@ -865,6 +1021,42 @@ msgctxt "#292"
 msgid "Audio"
 msgstr "Audio"
 
+msgctxt "#293"
+msgid "Browse for subtitles"
+msgstr "Pārlūkot subtitrus"
+
+msgctxt "#294"
+msgid "Create bookmark"
+msgstr "Izveidot grāmatzīmi"
+
+msgctxt "#296"
+msgid "Clear bookmarks"
+msgstr "Notīrīt grāmatzīmes"
+
+msgctxt "#297"
+msgid "Audio offset"
+msgstr "Audio nobīde"
+
+msgctxt "#298"
+msgid "Bookmarks"
+msgstr "Grāmatzīmes"
+
+msgctxt "#300"
+msgid "MP1 capable receiver"
+msgstr "MP1 spējīgs uztvērējs"
+
+msgctxt "#301"
+msgid "MP2 capable receiver"
+msgstr "MP2 spējīgs uztvērējs"
+
+msgctxt "#302"
+msgid "MP3 capable receiver"
+msgstr "MP3 spējīgs uztvērējs"
+
+msgctxt "#303"
+msgid "Delay"
+msgstr "Aizkave"
+
 msgctxt "#304"
 msgid "Language"
 msgstr "Valoda"
@@ -873,6 +1065,18 @@ msgctxt "#305"
 msgid "Enabled"
 msgstr "Ieslēgts"
 
+msgctxt "#306"
+msgid "Non-interleaved"
+msgstr "Ne-mijkārtots"
+
+msgctxt "#308"
+msgid "Original stream's language"
+msgstr "Sākotnējā straumes valoda"
+
+msgctxt "#309"
+msgid "User Interface language"
+msgstr "Lietotāja saskarnes valoda"
+
 msgctxt "#312"
 msgid "(0=auto)"
 msgstr "(0=auto)"
@@ -913,6 +1117,22 @@ msgctxt "#321"
 msgid "Error cleaning artists"
 msgstr "Kļūda tīrot izpildītājus"
 
+msgctxt "#322"
+msgid "Cleaning genres..."
+msgstr "Tīra žanrus..."
+
+msgctxt "#323"
+msgid "Error cleaning genres"
+msgstr "Kļūda, tīrot žanrus"
+
+msgctxt "#324"
+msgid "Cleaning paths..."
+msgstr "Tīra ceļus..."
+
+msgctxt "#325"
+msgid "Error cleaning paths"
+msgstr "Kļūda, tīrot ceļus"
+
 msgctxt "#326"
 msgid "Cleaning albums..."
 msgstr "Tīra albumus..."
@@ -941,10 +1161,30 @@ msgctxt "#332"
 msgid "Error compressing database"
 msgstr "Kļūda saspiežot datubāzi"
 
+msgctxt "#333"
+msgid "Do you want to clean the library?"
+msgstr "Vai vēlaties iztīrīt bibliotēku?"
+
+msgctxt "#334"
+msgid "Clean library..."
+msgstr "Tīra bibliotēku..."
+
 msgctxt "#335"
 msgid "Start"
 msgstr "Sākt"
 
+msgctxt "#336"
+msgid "Framerate conversion"
+msgstr "Kadru biežuma konversija"
+
+msgctxt "#338"
+msgid "Fixed"
+msgstr "Fiksēts"
+
+msgctxt "#340"
+msgid "Various artists"
+msgstr "Dažādi izpildītāji"
+
 msgctxt "#341"
 msgid "Play disc"
 msgstr "Atskaņot disku"
@@ -953,6 +1193,10 @@ msgctxt "#342"
 msgid "Movies"
 msgstr "Filmas"
 
+msgctxt "#343"
+msgid "Adjust framerate"
+msgstr "Pielāgot kadru biežumu"
+
 msgctxt "#344"
 msgid "Actors"
 msgstr "Aktieri"
@@ -961,14 +1205,34 @@ msgctxt "#345"
 msgid "Year"
 msgstr "Gads"
 
+msgctxt "#347"
+msgid "DTS-HD capable receiver"
+msgstr "DTS-HD spējīgs uztvērējs"
+
+msgctxt "#349"
+msgid "TrueHD capable receiver"
+msgstr "TrueHD spējīgs uztvērējs"
+
 msgctxt "#350"
 msgid "Programs"
 msgstr "Programmas"
 
+msgctxt "#351"
+msgid "Off"
+msgstr "Izslēgts"
+
+msgctxt "#352"
+msgid "Dim"
+msgstr "Izdzist"
+
 msgctxt "#353"
 msgid "Black"
 msgstr "Melns"
 
+msgctxt "#354"
+msgid "Matrix trails"
+msgstr "Matricas celiņi"
+
 msgctxt "#355"
 msgid "Screensaver time"
 msgstr "Ekrānsaudzētāja laiks"
@@ -977,6 +1241,10 @@ msgctxt "#356"
 msgid "Screensaver mode"
 msgstr "Ekrānsaudzētāja veids"
 
+msgctxt "#357"
+msgid "Shutdown function timer"
+msgstr "Izslēgšanas funkcijas taimeris"
+
 msgctxt "#358"
 msgid "All albums"
 msgstr "Visi albumi"
@@ -989,10 +1257,22 @@ msgctxt "#360"
 msgid "Screensaver"
 msgstr "Ekrānsaudzētājs"
 
+msgctxt "#361"
+msgid "R. Slideshow"
+msgstr "Rekurs. slīdīte"
+
+msgctxt "#362"
+msgid "Screensaver dim level"
+msgstr "Ekrānsaudzētāja izdzišanas līmenis"
+
 msgctxt "#363"
 msgid "Sort by: File"
 msgstr "Kārtot pēc: Faila"
 
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Dolby Digital (AC3) spējīgs uztvērējs"
+
 msgctxt "#365"
 msgid "Sort by: Name"
 msgstr "Kārtot pēc: Vārda"
@@ -1013,6 +1293,10 @@ msgctxt "#369"
 msgid "Title"
 msgstr "Nosaukums"
 
+msgctxt "#370"
+msgid "Thunderstorms"
+msgstr "pērkona negaisi"
+
 msgctxt "#371"
 msgid "Partly"
 msgstr "Daļēji"
@@ -1037,6 +1321,10 @@ msgctxt "#376"
 msgid "Rain"
 msgstr "Lietus"
 
+msgctxt "#377"
+msgid "Light"
+msgstr "viegls"
+
 msgctxt "#378"
 msgid "AM"
 msgstr "AM"
@@ -1157,6 +1445,38 @@ msgctxt "#409"
 msgid "Defaults"
 msgstr "Noklusējums"
 
+msgctxt "#410"
+msgid "Accessing weather service"
+msgstr "Piekļūst laikapstākļu servisam"
+
+msgctxt "#411"
+msgid "Getting weather for:"
+msgstr "Saņem laikapstākļus par:"
+
+msgctxt "#412"
+msgid "Unable to get weather data"
+msgstr "Nevar saņemt laikapstākļu datus"
+
+msgctxt "#413"
+msgid "Manual"
+msgstr "Pašrocīgi"
+
+msgctxt "#414"
+msgid "No review for this album"
+msgstr "Šim albumam nav pārskats"
+
+msgctxt "#415"
+msgid "Downloading thumbnail..."
+msgstr "Lejupielādēju sīktēlu..."
+
+msgctxt "#416"
+msgid "Not available"
+msgstr "Nav pieejams"
+
+msgctxt "#417"
+msgid "View: Big icons"
+msgstr "Skats: lielas ikonas"
+
 msgctxt "#418"
 msgid "Low"
 msgstr "Zems"
@@ -1165,10 +1485,26 @@ msgctxt "#419"
 msgid "High"
 msgstr "Augsts"
 
+msgctxt "#422"
+msgid "Delete album info"
+msgstr "Dzēst albuma info"
+
+msgctxt "#423"
+msgid "Delete CD information"
+msgstr "Dzēst CD informāciju"
+
 msgctxt "#424"
 msgid "Select"
 msgstr "Izvēlēties"
 
+msgctxt "#425"
+msgid "No album information found"
+msgstr "Albuma informācija nav atrasta"
+
+msgctxt "#426"
+msgid "No CD information found"
+msgstr "CD informācija nav atrasta"
+
 msgctxt "#427"
 msgid "Disc"
 msgstr "Disks"
@@ -1177,10 +1513,58 @@ msgctxt "#428"
 msgid "Insert correct CD/DVD"
 msgstr "Ievietojiet pareizu CD/DVD"
 
+msgctxt "#429"
+msgid "Please insert the following disc:"
+msgstr "Lūdzu, ievietojiet šādu disku:"
+
+msgctxt "#430"
+msgid "Sort by: DVD#"
+msgstr "Kārtot pēc: DVD#"
+
+msgctxt "#431"
+msgid "No cache"
+msgstr "Bez kešatmiņas"
+
+msgctxt "#432"
+msgid "Remove movie from library"
+msgstr "Izņemt filmu no bibliotēkas"
+
+msgctxt "#433"
+msgid "Really remove '%s'?"
+msgstr "Tiešām noņemt '%s'?"
+
+msgctxt "#434"
+msgid "From %s at %i %s"
+msgstr "No %s ar %i %s"
+
+msgctxt "#435"
+msgid "No optical disc drive detected"
+msgstr "Nav atrasts optisko disku dzinis"
+
+msgctxt "#436"
+msgid "You need an optical disc drive to play this video"
+msgstr "Lai spēlētu šo video, nepieciešams optisko disku dzinis"
+
+msgctxt "#437"
+msgid "Removable disk"
+msgstr "Noņemams disks"
+
 msgctxt "#438"
 msgid "Opening file"
 msgstr "Atver failu"
 
+msgctxt "#439"
+msgid "Cache"
+msgstr "Kešatmiņa"
+
+msgctxt "#441"
+msgid "UDF"
+msgstr "UDF"
+
+msgctxt "#442"
+msgid "Local network"
+msgstr "Lokālais tīkls"
+
 msgctxt "#443"
 msgid "Internet"
 msgstr "Internets"
@@ -1197,14 +1581,74 @@ msgctxt "#446"
 msgid "DVD"
 msgstr "DVD"
 
+msgctxt "#447"
+msgid "Autorun media"
+msgstr "Pašspēlējošs medijs"
+
 msgctxt "#449"
 msgid "Enabled"
 msgstr "Ieslēgts"
 
+msgctxt "#450"
+msgid "Columns"
+msgstr "Ailes"
+
+msgctxt "#451"
+msgid "Row 1 address"
+msgstr "1. rindas adrese"
+
+msgctxt "#452"
+msgid "Row 2 address"
+msgstr "2. rindas adrese"
+
+msgctxt "#453"
+msgid "Row 3 address"
+msgstr "3. rindas adrese"
+
+msgctxt "#454"
+msgid "Row 4 address"
+msgstr "4. rindas adrese"
+
+msgctxt "#455"
+msgid "Rows"
+msgstr "Rindas"
+
 msgctxt "#456"
 msgid "Mode"
 msgstr "Veids"
 
+msgctxt "#457"
+msgid "Switch view"
+msgstr "Pārslēgt skatu"
+
+msgctxt "#459"
+msgid "Subs"
+msgstr "Subi"
+
+msgctxt "#460"
+msgid "Audio stream"
+msgstr "Audio straume"
+
+msgctxt "#461"
+msgid "[active]"
+msgstr "[aktīvs]"
+
+msgctxt "#462"
+msgid "Subtitle"
+msgstr "Subtitri"
+
+msgctxt "#463"
+msgid "Backlight"
+msgstr "Izgaismojums"
+
+msgctxt "#464"
+msgid "Brightness"
+msgstr "Spilgtums"
+
+msgctxt "#465"
+msgid "Contrast"
+msgstr "Kontrasts"
+
 msgctxt "#466"
 msgid "Gamma"
 msgstr "Gamma"
@@ -1213,14 +1657,326 @@ msgctxt "#467"
 msgid "Type"
 msgstr "Tips"
 
+msgctxt "#468"
+msgid "Move the bar to change the OSD position"
+msgstr "Pārvieto joslu, lai izmainītu OSD novietojumu"
+
+msgctxt "#469"
+msgid "OSD position"
+msgstr "OSD novietojums"
+
+msgctxt "#470"
+msgid "Credits"
+msgstr "Titri"
+
+msgctxt "#474"
+msgid "Off"
+msgstr "Izslēgts"
+
+msgctxt "#475"
+msgid "Music only"
+msgstr "Tikai mūzika"
+
+msgctxt "#476"
+msgid "Music & video"
+msgstr "Mūzika & video"
+
+msgctxt "#477"
+msgid "Unable to load playlist"
+msgstr "Nevar ielādēt spēļsarakstu"
+
+msgctxt "#478"
+msgid "OSD"
+msgstr "OSD"
+
+msgctxt "#479"
+msgid "Skin & language"
+msgstr "Apvalks & valoda"
+
+msgctxt "#480"
+msgid "Appearance"
+msgstr "Izskats"
+
+msgctxt "#481"
+msgid "Audio options"
+msgstr "Audio opcijas"
+
+msgctxt "#482"
+msgid "About XBMC"
+msgstr "Par XBMC"
+
+msgctxt "#485"
+msgid "Delete album"
+msgstr "Dzēst albumu"
+
+msgctxt "#486"
+msgid "Repeat"
+msgstr "Atkārtot"
+
+msgctxt "#487"
+msgid "Repeat one"
+msgstr "Atkārtot vienu"
+
+msgctxt "#488"
+msgid "Repeat folder"
+msgstr "Atkārtot mapi"
+
+msgctxt "#489"
+msgid "Play the next song automatically"
+msgstr "Spēlēt nākamo dziesmu automātiski"
+
+msgctxt "#491"
+msgid "- Use big icons"
+msgstr "- Izmantot lielas ikonas"
+
+msgctxt "#492"
+msgid "Resize VobSubs"
+msgstr "Mainīt VobSubu izmēru"
+
+msgctxt "#493"
+msgid "Advanced options (Experts Only!)"
+msgstr "Papildus opcijas (Tikai ekspertiem!)"
+
+msgctxt "#494"
+msgid "Overall audio headroom"
+msgstr "Kopējais audiospējas līmenis"
+
+msgctxt "#495"
+msgid "Upsample videos to GUI resolution"
+msgstr "Pārsemplo video līdz GUI izšķirstpējai"
+
+msgctxt "#496"
+msgid "Calibration"
+msgstr "Kalibrēšana"
+
+msgctxt "#497"
+msgid "Show file extensions"
+msgstr "Rādīt failu paplašinājumus"
+
+msgctxt "#498"
+msgid "Sort by: Type"
+msgstr "Kārtot pēc: tipa"
+
+msgctxt "#499"
+msgid "Unable to connect to online lookup service"
+msgstr "Nevar savienoties ar tiešaistes uzmeklēšanas servisu"
+
+msgctxt "#500"
+msgid "Downloading album information failed"
+msgstr "Albuma informācijas lejupielāde neizdevās"
+
+msgctxt "#501"
+msgid "Looking for album names..."
+msgstr "Uzmeklēju albuma nosaukumus..."
+
+msgctxt "#502"
+msgid "Open"
+msgstr "Atvērt"
+
+msgctxt "#503"
+msgid "Busy"
+msgstr "Aizņemts"
+
+msgctxt "#504"
+msgid "Empty"
+msgstr "Tukšs"
+
+msgctxt "#505"
+msgid "Loading media info from files..."
+msgstr "Ielādēju mediju info no failiem..."
+
+msgctxt "#507"
+msgid "Sort by: Usage"
+msgstr "Kārtot pēc: lietojuma"
+
+msgctxt "#511"
+msgid "Enable video mode switching"
+msgstr "Ieslēgt video režīma pārslēgšanu"
+
+msgctxt "#512"
+msgid "Startup window"
+msgstr "Uzsākšanas logs"
+
+msgctxt "#513"
+msgid "Home window"
+msgstr "Sākuma logs"
+
+msgctxt "#514"
+msgid "Manual settings"
+msgstr "Pašrocīgi iestatījumi"
+
+msgctxt "#515"
+msgid "Genre"
+msgstr "Žanrs"
+
+msgctxt "#517"
+msgid "Recently played albums"
+msgstr "Nesen spēlētie albumi"
+
+msgctxt "#518"
+msgid "Launch"
+msgstr "Palaist"
+
+msgctxt "#519"
+msgid "Launch in..."
+msgstr "Palaiž pēc..."
+
+msgctxt "#521"
+msgid "Compilations"
+msgstr "Kompilācijas"
+
+msgctxt "#522"
+msgid "Remove source"
+msgstr "Noņemt avotu"
+
+msgctxt "#523"
+msgid "Switch media"
+msgstr "Pārslēgt mediju"
+
+msgctxt "#524"
+msgid "Select playlist"
+msgstr "Izvēlēties spēļsarakstu"
+
+msgctxt "#525"
+msgid "New playlist..."
+msgstr "Jauns spēļsaraksts..."
+
+msgctxt "#526"
+msgid "Add to playlist"
+msgstr "Pievienot spēļsarakstam"
+
+msgctxt "#527"
+msgid "Manually add to library"
+msgstr "Pašrocīgi pievienot bibliotēkai"
+
+msgctxt "#528"
+msgid "Enter title"
+msgstr "Ievadīt nosaukumu"
+
+msgctxt "#529"
+msgid "Error: Duplicate title"
+msgstr "Kļūda: nosaukums dublējas"
+
+msgctxt "#530"
+msgid "Select genre"
+msgstr "Izvēlēties žanru"
+
+msgctxt "#531"
+msgid "New genre"
+msgstr "Jauns žanrs"
+
+msgctxt "#532"
+msgid "Manual addition"
+msgstr "Pašrocīga pievienošana"
+
+msgctxt "#533"
+msgid "Enter genre"
+msgstr "Ievadīt žanru"
+
+msgctxt "#534"
+msgid "View: %s"
+msgstr "Skats: %s"
+
+msgctxt "#535"
+msgid "List"
+msgstr "Saraksts"
+
+msgctxt "#536"
+msgid "Icons"
+msgstr "Ikonas"
+
+msgctxt "#537"
+msgid "Big list"
+msgstr "Liels saraksts"
+
+msgctxt "#538"
+msgid "Big icons"
+msgstr "Lielas ikonas"
+
+msgctxt "#539"
+msgid "Wide"
+msgstr "Plats"
+
+msgctxt "#540"
+msgid "Big wide"
+msgstr "Liels plats"
+
+msgctxt "#541"
+msgid "Album icons"
+msgstr "Albuma ikonas"
+
+msgctxt "#542"
+msgid "DVD icons"
+msgstr "DVD ikonas"
+
 msgctxt "#543"
 msgid "DVD"
 msgstr "DVD"
 
+msgctxt "#544"
+msgid "Media info"
+msgstr "Mediju info"
+
+msgctxt "#545"
+msgid "Audio output device"
+msgstr "Audio izvades ierīce"
+
+msgctxt "#546"
+msgid "Passthrough output device"
+msgstr "Tranzīta izvades ierīce"
+
+msgctxt "#547"
+msgid "No biography for this artist"
+msgstr "Šim izpldītājam nav biogrāfija"
+
+msgctxt "#548"
+msgid "Downmix multichannel audio to stereo"
+msgstr "Samiksēt daudzkanālu audio uz stereo"
+
+msgctxt "#550"
+msgid "Sort by: %s"
+msgstr "Kārtot pēc: %s"
+
+msgctxt "#551"
+msgid "Name"
+msgstr "Vārds"
+
+msgctxt "#552"
+msgid "Date"
+msgstr "Datums"
+
+msgctxt "#553"
+msgid "Size"
+msgstr "Izmērs"
+
+msgctxt "#554"
+msgid "Track"
+msgstr "Celiņš"
+
+msgctxt "#555"
+msgid "Time"
+msgstr "Laiks"
+
 msgctxt "#556"
 msgid "Title"
 msgstr "Nosaukums"
 
+msgctxt "#557"
+msgid "Artist"
+msgstr "Izpildītājs"
+
+msgctxt "#558"
+msgid "Album"
+msgstr "Albums"
+
+msgctxt "#559"
+msgid "Playlist"
+msgstr "Spēļsaraksts"
+
+msgctxt "#560"
+msgid "ID"
+msgstr "ID"
+
 msgctxt "#561"
 msgid "File"
 msgstr "Fails"
@@ -1229,14 +1985,46 @@ msgctxt "#562"
 msgid "Year"
 msgstr "Gads"
 
+msgctxt "#563"
+msgid "Rating"
+msgstr "Vērtējums"
+
 msgctxt "#564"
 msgid "Type"
 msgstr "Tips"
 
+msgctxt "#565"
+msgid "Usage"
+msgstr "Lietojums"
+
+msgctxt "#566"
+msgid "Album artist"
+msgstr "Albuma izpildītājs"
+
+msgctxt "#567"
+msgid "Play count"
+msgstr "Atskaņošanas skaits"
+
+msgctxt "#568"
+msgid "Last played"
+msgstr "Pēdējie atskaņotie"
+
+msgctxt "#569"
+msgid "Comment"
+msgstr "Komentārs"
+
+msgctxt "#570"
+msgid "Date added"
+msgstr "Pievienošanas datums"
+
 msgctxt "#571"
 msgid "Default"
 msgstr "Noklusētais"
 
+msgctxt "#572"
+msgid "Studio"
+msgstr "Studija"
+
 msgctxt "#573"
 msgid "Path"
 msgstr "Ceļš"
@@ -1245,94 +2033,874 @@ msgctxt "#574"
 msgid "Country"
 msgstr "Valsts"
 
-msgctxt "#601"
-msgid "Medium"
-msgstr "Vidējs"
+msgctxt "#575"
+msgid "In progress"
+msgstr "Progress"
 
-msgctxt "#652"
-msgid "Years"
-msgstr "Gadi"
+msgctxt "#576"
+msgid "Times played"
+msgstr "Atskaņošanas reizes"
 
-msgctxt "#706"
-msgid "Server"
-msgstr "Serveris"
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Uzņemšanas datums"
 
-msgctxt "#713"
-msgid "HTTP proxy"
-msgstr "HTTP proxy"
+msgctxt "#580"
+msgid "Sort direction"
+msgstr "Kārtošanas virziens"
 
-msgctxt "#719"
-msgid "IP address"
-msgstr "IP adrese"
+msgctxt "#581"
+msgid "Sort method"
+msgstr "Kartošanas metode"
 
-msgctxt "#722"
-msgid "DNS server"
-msgstr "DNS serveris"
+msgctxt "#582"
+msgid "View mode"
+msgstr "Skata režīms"
 
-msgctxt "#728"
-msgid "FTP server"
-msgstr "FTP serveris"
+msgctxt "#583"
+msgid "Remember views for different folders"
+msgstr "Atcerēties dažādu mapju skatus"
 
-msgctxt "#730"
-msgid "Port"
-msgstr "Ports"
+msgctxt "#584"
+msgid "Ascending"
+msgstr "Augošā secībā"
 
-msgctxt "#742"
-msgid "White"
-msgstr "Balts"
+msgctxt "#585"
+msgid "Descending"
+msgstr "Dilstošā secībā"
 
-msgctxt "#743"
-msgid "Yellow"
-msgstr "Dzeltens"
+msgctxt "#586"
+msgid "Edit playlist"
+msgstr "Labot spēļsarakstu"
 
-msgctxt "#744"
-msgid "Files"
-msgstr "Faili"
+msgctxt "#587"
+msgid "Filter"
+msgstr "Filtrs"
 
-msgctxt "#760"
-msgid "Yellow"
-msgstr "Dzeltens"
+msgctxt "#588"
+msgid "Cancel party mode"
+msgstr "Atcelt ballītes režīmu"
 
-msgctxt "#761"
-msgid "White"
-msgstr "Balts"
+msgctxt "#589"
+msgid "Party mode"
+msgstr "Ballītes režīms"
 
-msgctxt "#762"
-msgid "Blue"
-msgstr "Zils"
+msgctxt "#590"
+msgid "Random"
+msgstr "Nejaušs"
 
-msgctxt "#781"
-msgid "WEP"
-msgstr "WEP"
+msgctxt "#591"
+msgid "Off"
+msgstr "Izslēgts"
 
-msgctxt "#782"
-msgid "WPA"
-msgstr "WPA"
+msgctxt "#592"
+msgid "One"
+msgstr "Viens"
 
-msgctxt "#783"
-msgid "WPA2"
-msgstr "WPA2"
+msgctxt "#593"
+msgid "All"
+msgstr "Visi"
 
-msgctxt "#792"
-msgid "Port"
-msgstr "Ports"
+msgctxt "#594"
+msgid "Off"
+msgstr "Izslēgts"
 
-msgctxt "#1006"
-msgid "IP address"
-msgstr "IP adrese"
+msgctxt "#595"
+msgid "Repeat: Off"
+msgstr "Atkārtot: izslēgts"
 
-msgctxt "#1008"
+msgctxt "#596"
+msgid "Repeat: One"
+msgstr "Atkārtot: viens"
+
+msgctxt "#597"
+msgid "Repeat: All"
+msgstr "Atkārtot: visi"
+
+msgctxt "#600"
+msgid "Rip audio CD"
+msgstr "Izvilkt audio no CD"
+
+msgctxt "#601"
+msgid "Medium"
+msgstr "Vidējs"
+
+msgctxt "#602"
+msgid "Standard"
+msgstr "Standarta"
+
+msgctxt "#603"
+msgid "Extreme"
+msgstr "Ekstrēms"
+
+msgctxt "#604"
+msgid "Constant bitrate"
+msgstr "Konstants bitu ātrums"
+
+msgctxt "#605"
+msgid "Ripping..."
+msgstr "Izvelku..."
+
+msgctxt "#607"
+msgid "To:"
+msgstr "Uz:"
+
+msgctxt "#608"
+msgid "Could not rip CD or track"
+msgstr "Nevar izvilkt no CD vai celiņa"
+
+msgctxt "#609"
+msgid "CDDARipPath is not set."
+msgstr "CDDARipPath nav norādīts."
+
+msgctxt "#610"
+msgid "Rip audio track"
+msgstr "Izvilkt audio celiņu"
+
+msgctxt "#611"
+msgid "Enter number"
+msgstr "Ievadīt numuru"
+
+msgctxt "#612"
+msgid "Bits/sample"
+msgstr "Biti/sempls"
+
+msgctxt "#613"
+msgid "Sample rate"
+msgstr "Sempla ātrums"
+
+msgctxt "#620"
+msgid "Audio CDs"
+msgstr "Audio diski"
+
+msgctxt "#621"
+msgid "Encoder"
+msgstr "Kodētājs"
+
+msgctxt "#622"
+msgid "Quality"
+msgstr "Kvalitāte"
+
+msgctxt "#623"
+msgid "Bitrate"
+msgstr "Bitu ātrums"
+
+msgctxt "#624"
+msgid "Include track number"
+msgstr "Iekļaut celiņa numuru"
+
+msgctxt "#625"
+msgid "All songs of"
+msgstr "Visas dziesmas no"
+
+msgctxt "#626"
+msgid "In progress TV shows"
+msgstr "Notiek TV pārraides"
+
+msgctxt "#629"
+msgid "View mode"
+msgstr "Skata režīms"
+
+msgctxt "#630"
+msgid "Normal"
+msgstr "Normāls"
+
+msgctxt "#631"
+msgid "Zoom"
+msgstr "Zooms"
+
+msgctxt "#632"
+msgid "Stretch 4:3"
+msgstr "Stiepts 4:3"
+
+msgctxt "#633"
+msgid "Wide Zoom"
+msgstr "Plats zooms"
+
+msgctxt "#634"
+msgid "Stretch 16:9"
+msgstr "Stiepts 16:9"
+
+msgctxt "#635"
+msgid "Original Size"
+msgstr "Sākotnējais lielums"
+
+msgctxt "#636"
+msgid "Custom"
+msgstr "Pielāgots"
+
+msgctxt "#639"
+msgid "Use track levels"
+msgstr "No celiņu līmeņa"
+
+msgctxt "#640"
+msgid "Use album levels"
+msgstr "No albuma līmeņa"
+
+msgctxt "#644"
+msgid "Crop black bars"
+msgstr "Nogriezt malnās malas"
+
+msgctxt "#645"
+msgid "Need to unpack a big file. Continue?"
+msgstr "Jāatpako liels fails. Turpināt?"
+
+msgctxt "#646"
+msgid "Remove from library"
+msgstr "Izņemt no bibliotēkas"
+
+msgctxt "#647"
+msgid "Export video library"
+msgstr "Eksportēt video bibliotēku"
+
+msgctxt "#648"
+msgid "Import video library"
+msgstr "Importēt video bibliotēku"
+
+msgctxt "#649"
+msgid "Importing"
+msgstr "Importē"
+
+msgctxt "#650"
+msgid "Exporting"
+msgstr "Eksportē"
+
+msgctxt "#651"
+msgid "Browse for library"
+msgstr "Pārlūko bibliotēku"
+
+msgctxt "#652"
+msgid "Years"
+msgstr "Gadi"
+
+msgctxt "#653"
+msgid "Update library"
+msgstr "Atjaunināt bibliotēku"
+
+msgctxt "#654"
+msgid "Show debug info"
+msgstr "Rādīt atkļūdošanas info"
+
+msgctxt "#655"
+msgid "Browse for executable"
+msgstr "Pārlūko izpildāmu failu"
+
+msgctxt "#656"
+msgid "Browse for playlist"
+msgstr "Pārlūkot spēļsarakstu"
+
+msgctxt "#657"
+msgid "Browse for folder"
+msgstr "Pārlūko mapi"
+
+msgctxt "#658"
+msgid "Song information"
+msgstr "Dziesmas informācija"
+
+msgctxt "#659"
+msgid "Non-linear stretch"
+msgstr "Nelineāra izstiepšana"
+
+msgctxt "#660"
+msgid "Volume amplification"
+msgstr "Skaļuma pastiprināšana"
+
+msgctxt "#661"
+msgid "Choose export folder"
+msgstr "Izvēlēties eksportēšanas mapi"
+
+msgctxt "#662"
+msgid "This file is no longer available."
+msgstr "Šis fails vairs nav pieejams."
+
+msgctxt "#663"
+msgid "Would you like to remove it from the library?"
+msgstr "Vai vēlaties to izņemt no bibliotēkas?"
+
+msgctxt "#664"
+msgid "Browse for Script"
+msgstr "Pārlūko skriptu"
+
+msgctxt "#665"
+msgid "Compression level"
+msgstr "Saspiešanas līmenis"
+
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Izvērsta reģistrēšana..."
+
+msgctxt "#700"
+msgid "Cleaning up library"
+msgstr "Uzkopj bibliotēku"
+
+msgctxt "#701"
+msgid "Removing old songs from the library"
+msgstr "Izņem vecas dziesmas no bibliotēkas"
+
+msgctxt "#702"
+msgid "This path has been scanned before"
+msgstr "Šis ceļš jau ir skenēts"
+
+msgctxt "#705"
+msgid "Network"
+msgstr "Tīkls"
+
+msgctxt "#706"
+msgid "Server"
+msgstr "Serveris"
+
+msgctxt "#708"
+msgid "Use an HTTP proxy server to access the internet"
+msgstr "Interneta piekļuvei izmantot HTTP starpniekserveri"
+
+msgctxt "#711"
+msgid "Internet Protocol (IP)"
+msgstr "Interneta protokols (IP)"
+
+msgctxt "#712"
+msgid "Invalid port specified. Value must be between 1 and 65535."
+msgstr "Norādīts nederīgs ports. Vērtībai jābūt no 1 līdz 65535."
+
+msgctxt "#713"
+msgid "HTTP proxy"
+msgstr "HTTP proxy"
+
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Piešķiršana"
+
+msgctxt "#716"
+msgid "Automatic (DHCP)"
+msgstr "Automatiski (DHCP)"
+
+msgctxt "#717"
+msgid "Manual (Static)"
+msgstr "Pašrocīgi (statiski)"
+
+msgctxt "#719"
+msgid "IP address"
+msgstr "IP adrese"
+
+msgctxt "#720"
+msgid "Netmask"
+msgstr "Tīkla maska"
+
+msgctxt "#721"
+msgid "Default gateway"
+msgstr "Noklusētā vārteja"
+
+msgctxt "#722"
+msgid "DNS server"
+msgstr "DNS serveris"
+
+msgctxt "#723"
+msgid "Save & restart"
+msgstr "Saglabāt & pārstartēt"
+
+msgctxt "#724"
+msgid "Invalid address specified. Value must be AAA.BBB.CCC.DDD"
+msgstr "Norādīta nederīga adrese. Vērtībai jābūt AAA.BBB.CCC.DDD"
+
+msgctxt "#725"
+msgid "with numbers between 0 and 255."
+msgstr "ar numuriem no 0 līdz 255."
+
+msgctxt "#726"
+msgid "Changes not saved. Continue without saving?"
+msgstr "Izmaiņas nav saglabātas. Turpināt nesaglabājot?"
+
+msgctxt "#727"
+msgid "Web server"
+msgstr "Tīmekļa serveris"
+
+msgctxt "#728"
+msgid "FTP server"
+msgstr "FTP serveris"
+
+msgctxt "#730"
+msgid "Port"
+msgstr "Ports"
+
+msgctxt "#732"
+msgid "Save & apply"
+msgstr "Saglabāt & pielietot"
+
+msgctxt "#733"
+msgid "Password"
+msgstr "Parole"
+
+msgctxt "#734"
+msgid "No pass"
+msgstr "Nav parole"
+
+msgctxt "#735"
+msgid "Character set"
+msgstr "Rakstzīmju kopa"
+
+msgctxt "#736"
+msgid "Style"
+msgstr "Stils"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "Krāsa"
+
+msgctxt "#738"
+msgid "Normal"
+msgstr "Normāls"
+
+msgctxt "#739"
+msgid "Bold"
+msgstr "Treknraksts"
+
+msgctxt "#740"
+msgid "Italics"
+msgstr "Slīpraksts"
+
+msgctxt "#741"
+msgid "Bold italics"
+msgstr "Treknraksts slīpraksts"
+
+msgctxt "#742"
+msgid "White"
+msgstr "Balts"
+
+msgctxt "#743"
+msgid "Yellow"
+msgstr "Dzeltens"
+
+msgctxt "#744"
+msgid "Files"
+msgstr "Faili"
+
+msgctxt "#745"
+msgid "No scanned information for this view"
+msgstr "Nav skenēta informācija šim skatam"
+
+msgctxt "#746"
+msgid "Please turn off library mode"
+msgstr "Lūdzu, izslēdziet bibliotēkas režīmu"
+
+msgctxt "#747"
+msgid "Error loading image"
+msgstr "Kļūda ielādējot attēlu"
+
+msgctxt "#748"
+msgid "Edit path"
+msgstr "Labot ceļu"
+
+msgctxt "#749"
+msgid "Mirror image"
+msgstr "Spoguļattēls"
+
+msgctxt "#750"
+msgid "Are you sure?"
+msgstr "Vai esat pārliecināts?"
+
+msgctxt "#751"
+msgid "Removing source"
+msgstr "Noņem avotu"
+
+msgctxt "#754"
+msgid "Add program link"
+msgstr "Pievienot programmas saiti"
+
+msgctxt "#755"
+msgid "Edit program path"
+msgstr "Labot programmas ceļu"
+
+msgctxt "#756"
+msgid "Edit program name"
+msgstr "Labot programmas nosaukumu"
+
+msgctxt "#757"
+msgid "Edit path depth"
+msgstr "Labot ceļa dziļumu"
+
+msgctxt "#759"
+msgid "View: Big list"
+msgstr "Skats: liels saraksts"
+
+msgctxt "#760"
+msgid "Yellow"
+msgstr "Dzeltens"
+
+msgctxt "#761"
+msgid "White"
+msgstr "Balts"
+
+msgctxt "#762"
+msgid "Blue"
+msgstr "Zils"
+
+msgctxt "#763"
+msgid "Bright green"
+msgstr "Gaišzaļš"
+
+msgctxt "#764"
+msgid "Yellow green"
+msgstr "Dzeltenzaļš"
+
+msgctxt "#765"
+msgid "Cyan"
+msgstr "Ciāna"
+
+msgctxt "#766"
+msgid "Light grey"
+msgstr "Gaišpelēks"
+
+msgctxt "#767"
+msgid "Grey"
+msgstr "Pelēks"
+
+msgctxt "#770"
+msgid "Error %i: share not available"
+msgstr "Kļūda %i: šāre nav pieejama"
+
+msgctxt "#772"
+msgid "Audio output"
+msgstr "Audio izvade"
+
+msgctxt "#773"
+msgid "Seeking"
+msgstr "Novietošana"
+
+msgctxt "#774"
+msgid "Slideshow folder"
+msgstr "Slīdītes mape"
+
+msgctxt "#775"
+msgid "Network interface"
+msgstr "Tīkla saskarne"
+
+msgctxt "#776"
+msgid "Wireless network name (ESSID)"
+msgstr "Bezvadu tīkla nosaukums (ESSID)"
+
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Bezvadu parole"
+
+msgctxt "#778"
+msgid "Wireless security"
+msgstr "Bezvadu drošība"
+
+msgctxt "#779"
+msgid "Save and apply network interface settings"
+msgstr "Saglabāt un pielietot tīkla saskarnes iestatījumus"
+
+msgctxt "#780"
+msgid "No encryption"
+msgstr "Nav šifrēšanas"
+
+msgctxt "#781"
+msgid "WEP"
+msgstr "WEP"
+
+msgctxt "#782"
+msgid "WPA"
+msgstr "WPA"
+
+msgctxt "#783"
+msgid "WPA2"
+msgstr "WPA2"
+
+msgctxt "#784"
+msgid "Applying network interface settings. Please wait."
+msgstr "Pielieto tīkla saskarnes iestatījumus. Lūdzu, uzgaidiet."
+
+msgctxt "#785"
+msgid "Network interface restarted successfully."
+msgstr "Tīkla saskarne veiksmīgi pārstartēta."
+
+msgctxt "#786"
+msgid "Network interface did not start successfully."
+msgstr "Tīkla saskarne nevarēja iestartēties."
+
+msgctxt "#787"
+msgid "Interface disabled"
+msgstr "Saskarne atslēgta"
+
+msgctxt "#788"
+msgid "Network interface disabled successfully."
+msgstr "Tīkla saskarne veiksmīgi atslēgta."
+
+msgctxt "#789"
+msgid "Wireless network name (ESSID)"
+msgstr "Bezvadu tīkla nosaukums (ESSID)"
+
+msgctxt "#790"
+msgid "Remote control"
+msgstr "Tālvadības pults"
+
+msgctxt "#791"
+msgid "Allow programs on this system to control XBMC"
+msgstr "Atļaut citām šīs sistēmas programmām kontrolēt XBMC"
+
+msgctxt "#792"
+msgid "Port"
+msgstr "Ports"
+
+msgctxt "#793"
+msgid "Port range"
+msgstr "Porta apgabals"
+
+msgctxt "#794"
+msgid "Allow programs on other systems to control XBMC"
+msgstr "Atļaut citu sistēmu programmām kontrolēt XBMC"
+
+msgctxt "#795"
+msgid "Initial repeat delay (ms)"
+msgstr "Sākotnējā atkārtošanas aizkave (ms)"
+
+msgctxt "#796"
+msgid "Continuous repeat delay (ms)"
+msgstr "Tālākā atkārtošanas aizkave (ms)"
+
+msgctxt "#797"
+msgid "Maximum number of clients"
+msgstr "Maksimālais klientu skaits"
+
+msgctxt "#798"
+msgid "Internet access"
+msgstr "Interneta piekļuve"
+
+msgctxt "#799"
+msgid "Library Update"
+msgstr "Bibliotēkas atjauninājums"
+
+msgctxt "#800"
+msgid "Music library needs to rescan tags from files."
+msgstr "Mūzikas bibliotēkā nepieciešams pārskenēt tagus no failiem."
+
+msgctxt "#801"
+msgid "Would you like to scan now?"
+msgstr "Vai vēlaties skenēt tagad?"
+
+msgctxt "#850"
+msgid "Invalid port number entered"
+msgstr "Ievadīts nederīgs porta numurs"
+
+msgctxt "#851"
+msgid "Valid port range is 1-65535"
+msgstr "Derīgais porta apgabals ir 1-65535"
+
+msgctxt "#852"
+msgid "Valid port range is 1024-65535"
+msgstr "Derīgais porta apgabals ir 1024-65535"
+
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "Pievieno attēlus..."
+
+msgctxt "#998"
+msgid "Add Music..."
+msgstr "Pievieno mūziku..."
+
+msgctxt "#999"
+msgid "Add Videos..."
+msgstr "Pievieno video..."
+
+msgctxt "#1000"
+msgid "Preview"
+msgstr "Priekšskatīt"
+
+msgctxt "#1001"
+msgid "Unable to connect"
+msgstr "Nevar savienoties"
+
+msgctxt "#1002"
+msgid "XBMC was unable to connect to the network location."
+msgstr "XBMC nevarēja savienoties ar tīkla vietu."
+
+msgctxt "#1003"
+msgid "This could be due to the network not being connected."
+msgstr "Tas varētu būt tāpēc, ka tīkls nav pievienots."
+
+msgctxt "#1004"
+msgid "Would you like to add it anyway?"
+msgstr "Vai tomēr vēlaties to pievienot?"
+
+msgctxt "#1006"
+msgid "IP address"
+msgstr "IP adrese"
+
+msgctxt "#1007"
+msgid "Add network location"
+msgstr "Pievienot tīkla vietu"
+
+msgctxt "#1008"
 msgid "Protocol"
 msgstr "Protocols"
 
+msgctxt "#1009"
+msgid "Server address"
+msgstr "Servera adrese"
+
+msgctxt "#1010"
+msgid "Server name"
+msgstr "Servera nosaukums"
+
+msgctxt "#1011"
+msgid "Remote path"
+msgstr "Attālais ceļš"
+
+msgctxt "#1012"
+msgid "Shared folder"
+msgstr "Koplietota mape"
+
 msgctxt "#1013"
 msgid "Port"
 msgstr "Ports"
 
+msgctxt "#1014"
+msgid "Username"
+msgstr "Lietotājvārds"
+
+msgctxt "#1015"
+msgid "Browse for network server"
+msgstr "Pārlūkot tīkla serveri"
+
+msgctxt "#1016"
+msgid "Enter the network address of the server"
+msgstr "Ievadīt servera tīkla adresi"
+
+msgctxt "#1017"
+msgid "Enter the path on the server"
+msgstr "Ievadīt ceļu uz servera"
+
+msgctxt "#1018"
+msgid "Enter the port number"
+msgstr "Ievadīt porta numuru"
+
+msgctxt "#1019"
+msgid "Enter the username"
+msgstr "Ievadīt lietotājvārdu"
+
+msgctxt "#1020"
+msgid "Add %s source"
+msgstr "Pievienot %s avotu"
+
+msgctxt "#1021"
+msgid "Enter the paths or browse for the media locations."
+msgstr "Ievadiet ceļus vai pārlūkojiet mediju vietas."
+
+msgctxt "#1022"
+msgid "Enter a name for this media Source."
+msgstr "Ievadiet nosaukumu šim mediju avotam."
+
+msgctxt "#1023"
+msgid "Browse for new share"
+msgstr "Pārlūkot jaunu koplietojumu"
+
+msgctxt "#1024"
+msgid "Browse"
+msgstr "Pārlūkot"
+
+msgctxt "#1025"
+msgid "Could not retrieve directory information."
+msgstr "Nevarēja izgūt direktorijas informāciju."
+
+msgctxt "#1026"
+msgid "Add source"
+msgstr "Pievienotu avotu"
+
+msgctxt "#1027"
+msgid "Edit source"
+msgstr "Labot avotu"
+
+msgctxt "#1028"
+msgid "Edit %s source"
+msgstr "Labot %s avotu"
+
+msgctxt "#1029"
+msgid "Enter the new label"
+msgstr "Ievadīt jaunu etiķeti"
+
+msgctxt "#1030"
+msgid "Browse for image"
+msgstr "Pārlūkot attēlu"
+
+msgctxt "#1031"
+msgid "Browse for image folder"
+msgstr "Pārlūkot attēlu mapi"
+
+msgctxt "#1032"
+msgid "Add network location..."
+msgstr "Pievieno tīkla vietu..."
+
+msgctxt "#1033"
+msgid "Browse for file"
+msgstr "Pārlūkot failu"
+
+msgctxt "#1034"
+msgid "Submenu"
+msgstr "Apakšizvēlne"
+
+msgctxt "#1035"
+msgid "Enable submenu buttons"
+msgstr "Ieslēgt apakšizvēlnes pogas"
+
+msgctxt "#1036"
+msgid "Favourites"
+msgstr "Izlase"
+
+msgctxt "#1037"
+msgid "Video Add-ons"
+msgstr "Video pielikumi"
+
+msgctxt "#1038"
+msgid "Music Add-ons"
+msgstr "Mūzikas pielikumi"
+
+msgctxt "#1039"
+msgid "Picture Add-ons"
+msgstr "Attēlu pielikumi"
+
+msgctxt "#1040"
+msgid "Loading directory"
+msgstr "Ielādē direktoriju"
+
+msgctxt "#1041"
+msgid "Retrieved %i items"
+msgstr "Izgūti %i ieraksti"
+
+msgctxt "#1042"
+msgid "Retrieved %i of %i items"
+msgstr "Izgūti %i no %i ierakstiem"
+
+msgctxt "#1043"
+msgid "Program Add-ons"
+msgstr "Programmu pielikumi"
+
+msgctxt "#1045"
+msgid "Add-on settings"
+msgstr "Pielikuma iestatījumi"
+
+msgctxt "#1046"
+msgid "Access points"
+msgstr "Piekļuves punkti"
+
 msgctxt "#1047"
 msgid "Other..."
 msgstr "Citi..."
 
+msgctxt "#1048"
+msgid "Username"
+msgstr "Lietotājvārds"
+
+msgctxt "#1049"
+msgid "Script settings"
+msgstr "Skripta iestatījumi"
+
+msgctxt "#1050"
+msgid "Singles"
+msgstr "Singli"
+
+msgctxt "#1051"
+msgid "Enter web address"
+msgstr "Ievadiet tīmekļa adresi"
+
 msgctxt "#1180"
 msgid "Proxy type"
 msgstr "Proxy tips"
@@ -1353,9 +2921,41 @@ msgctxt "#1184"
 msgid "SOCKS5"
 msgstr "SOCKS5"
 
-msgctxt "#1211"
-msgid "Music"
-msgstr "Mūzika"
+msgctxt "#1185"
+msgid "SOCKS5 with remote dns resolving"
+msgstr "SOCKS5 ar attālinātu dns atrisināšanu"
+
+msgctxt "#1200"
+msgid "SMB client"
+msgstr "SMB klients"
+
+msgctxt "#1202"
+msgid "Workgroup"
+msgstr "Darbgrupa"
+
+msgctxt "#1203"
+msgid "Default username"
+msgstr "Noklusētais lietotājvārds"
+
+msgctxt "#1204"
+msgid "Default password"
+msgstr "Noklusētā parole"
+
+msgctxt "#1207"
+msgid "WINS server"
+msgstr "WINS serveris"
+
+msgctxt "#1208"
+msgid "Mount SMB shares"
+msgstr "Piemontē SMB koplietojumus"
+
+msgctxt "#1210"
+msgid "Remove"
+msgstr "Noņemt"
+
+msgctxt "#1211"
+msgid "Music"
+msgstr "Mūzika"
 
 msgctxt "#1212"
 msgid "Video"
@@ -1369,6 +2969,102 @@ msgctxt "#1214"
 msgid "Files"
 msgstr "Faili"
 
+msgctxt "#1215"
+msgid "Music & video "
+msgstr "Mūzika & video"
+
+msgctxt "#1216"
+msgid "Music & pictures"
+msgstr "Mūzika & attēli"
+
+msgctxt "#1217"
+msgid "Music & files"
+msgstr "Mūzika & faili"
+
+msgctxt "#1218"
+msgid "Video & pictures"
+msgstr "Video & attēli"
+
+msgctxt "#1219"
+msgid "Video & files"
+msgstr "Video & faili"
+
+msgctxt "#1220"
+msgid "Pictures & files"
+msgstr "Attēli & faili"
+
+msgctxt "#1221"
+msgid "Music & video & pictures"
+msgstr "Mūzika & video & attēli"
+
+msgctxt "#1222"
+msgid "Music & video & pictures & files"
+msgstr "Mūzika & video & attēli & faili"
+
+msgctxt "#1223"
+msgid "Disabled"
+msgstr "Izslēgts"
+
+msgctxt "#1226"
+msgid "Files & music & video"
+msgstr "Faili & mūzika & video"
+
+msgctxt "#1227"
+msgid "Files & pictures & music"
+msgstr "Faili & attēli & mūzika"
+
+msgctxt "#1228"
+msgid "Files & pictures & video"
+msgstr "Faili & attēli & video"
+
+msgctxt "#1229"
+msgid "Music & programs"
+msgstr "Mūzika & programmas"
+
+msgctxt "#1230"
+msgid "Video & programs"
+msgstr "Video & programmas"
+
+msgctxt "#1231"
+msgid "Pictures & programs"
+msgstr "Attēli & programmas"
+
+msgctxt "#1232"
+msgid "Music & video & pictures & programs"
+msgstr "Mūzika & video & attēli & programmas"
+
+msgctxt "#1233"
+msgid "Programs & video & music"
+msgstr "Programmas & video & mūzika"
+
+msgctxt "#1234"
+msgid "Programs & pictures & music"
+msgstr "Programmas & attēli & mūzika"
+
+msgctxt "#1235"
+msgid "Programs & pictures & video"
+msgstr "Programmas & attēli & video"
+
+msgctxt "#1259"
+msgid "Zeroconf"
+msgstr "Zeroconf"
+
+msgctxt "#1260"
+msgid "Announce these services to other systems via Zeroconf"
+msgstr "Paziņot šos servisus citām sistēmām, izmantojot Zeroconf"
+
+msgctxt "#1270"
+msgid "Allow XBMC to receive AirPlay content"
+msgstr "Atļaut XBMC saņemt AirPlay saturu"
+
+msgctxt "#1271"
+msgid "Device name"
+msgstr "Ierīces nosaukums"
+
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Izmantot paroles aizsardzību"
+
 msgctxt "#1273"
 msgid "AirPlay"
 msgstr "AirPlay"
@@ -1377,14 +3073,262 @@ msgctxt "#1274"
 msgid "AirTunes"
 msgstr "AirTunes"
 
+msgctxt "#1275"
+msgid "Filter %s"
+msgstr "Filtrs %s"
+
+msgctxt "#1300"
+msgid "Custom audio device"
+msgstr "Pielāgota audio ierīce"
+
+msgctxt "#1301"
+msgid "Custom passthrough device"
+msgstr "Pielāgota tranzīta ierīce"
+
+msgctxt "#1396"
+msgid "Drifting"
+msgstr "slīdošs"
+
+msgctxt "#1397"
+msgid "and"
+msgstr "un"
+
+msgctxt "#1398"
+msgid "Freezing"
+msgstr "saldējošs"
+
+msgctxt "#1399"
+msgid "Late"
+msgstr "vēlu"
+
+msgctxt "#1400"
+msgid "Isolated"
+msgstr "izolēts"
+
+msgctxt "#1401"
+msgid "Thundershowers"
+msgstr "pērkona lietus"
+
+msgctxt "#1402"
+msgid "Thunder"
+msgstr "pērkons"
+
 msgctxt "#1403"
 msgid "Sun"
 msgstr "Svēt"
 
+msgctxt "#1404"
+msgid "Heavy"
+msgstr "stiprs"
+
+msgctxt "#1405"
+msgid "in"
+msgstr "iekš"
+
+msgctxt "#1406"
+msgid "the"
+msgstr " "
+
+msgctxt "#1407"
+msgid "Vicinity"
+msgstr "apkārtnē"
+
+msgctxt "#1408"
+msgid "Ice"
+msgstr "ledus"
+
+msgctxt "#1409"
+msgid "Crystals"
+msgstr "kristāli"
+
+msgctxt "#1410"
+msgid "Calm"
+msgstr "mierīgs"
+
+msgctxt "#1411"
+msgid "with"
+msgstr "ar"
+
+msgctxt "#1412"
+msgid "windy"
+msgstr "vējains"
+
+msgctxt "#1413"
+msgid "Patches"
+msgstr "vietām"
+
+msgctxt "#1414"
+msgid "Thunderstorm"
+msgstr "pērkona negaiss"
+
+msgctxt "#1415"
+msgid "Drizzle"
+msgstr "smalks lietus"
+
+msgctxt "#1416"
+msgid "Foggy"
+msgstr "miglains"
+
+msgctxt "#1417"
+msgid "Grains"
+msgstr "graudi"
+
+msgctxt "#1418"
+msgid "Thunderstorms"
+msgstr "pērkona negaisi"
+
+msgctxt "#1419"
+msgid "Shallow"
+msgstr "sekls"
+
+msgctxt "#1420"
+msgid "Moderate"
+msgstr "vidējs"
+
+msgctxt "#1421"
+msgid "Very High"
+msgstr "ļoti augsts"
+
+msgctxt "#1422"
+msgid "Windy"
+msgstr "vējains"
+
+msgctxt "#1423"
+msgid "Mist"
+msgstr "migla"
+
+msgctxt "#1424"
+msgid "Overcast"
+msgstr "samācies"
+
+msgctxt "#1425"
+msgid "Pellets"
+msgstr "krusas graudi"
+
+msgctxt "#1426"
+msgid "Hail"
+msgstr "krusa"
+
+msgctxt "#1427"
+msgid "Smoke"
+msgstr "dūmi"
+
+msgctxt "#1428"
+msgid "Volcanic"
+msgstr "vulkāniski"
+
+msgctxt "#1429"
+msgid "Ash"
+msgstr "pelni"
+
+msgctxt "#1430"
+msgid "Widespread"
+msgstr "plaši"
+
+msgctxt "#1431"
+msgid "Dust"
+msgstr "putekļi"
+
+msgctxt "#1432"
+msgid "Sand"
+msgstr "smiltis"
+
+msgctxt "#1433"
+msgid "Spray"
+msgstr "smidzina"
+
+msgctxt "#1434"
+msgid "Whirls"
+msgstr "virpuļi"
+
+msgctxt "#1435"
+msgid "Sandstorm"
+msgstr "smilšu vētra"
+
+msgctxt "#1436"
+msgid "Blowing"
+msgstr "pūš"
+
+msgctxt "#1437"
+msgid "Pellet"
+msgstr "krusa"
+
 msgctxt "#1438"
 msgid "Small"
 msgstr "Mazs"
 
+msgctxt "#1439"
+msgid "and"
+msgstr "un"
+
+msgctxt "#1440"
+msgid "Sleet"
+msgstr "slapjdraņķis"
+
+msgctxt "#1441"
+msgid "with"
+msgstr "ar"
+
+msgctxt "#1442"
+msgid "Chance"
+msgstr "iespējams"
+
+msgctxt "#1443"
+msgid "of"
+msgstr "arī"
+
+msgctxt "#1444"
+msgid "Funnel"
+msgstr "virpulis"
+
+msgctxt "#1445"
+msgid "Cloud"
+msgstr "mākonis"
+
+msgctxt "#1446"
+msgid "Unknown"
+msgstr "nezināms"
+
+msgctxt "#1447"
+msgid "Squals"
+msgstr "brāzmas"
+
+msgctxt "#1448"
+msgid "Precipitation"
+msgstr "nokrišņu daudzums"
+
+msgctxt "#1449"
+msgid "Partial"
+msgstr "daļēji"
+
+msgctxt "#1450"
+msgid "Put display to sleep when idle"
+msgstr "Nelieietošanas laikā aizmidzināt ekrānu"
+
+msgctxt "#2050"
+msgid "Runtime"
+msgstr "Izpildlaiks"
+
+msgctxt "#2080"
+msgid "Empty list"
+msgstr "Tukšs saraksts"
+
+msgctxt "#2081"
+msgid "Went back to parent list because the active list has been emptied"
+msgstr "Devās atpakaļ uz pamatsarakstu, jo aktīvais saraksts ir iztukšots"
+
+msgctxt "#2100"
+msgid "Script failed! : %s"
+msgstr "Skripts neizdevās! : %s"
+
+msgctxt "#2101"
+msgid "Newer version needed - See log"
+msgstr "Vajag jaunāku versiju - skatīt žunrnālu"
+
+msgctxt "#10000"
+msgid "Home"
+msgstr "Sākums"
+
 msgctxt "#10001"
 msgid "Programs"
 msgstr "Programmas"
@@ -1409,278 +3353,4810 @@ msgctxt "#10006"
 msgid "Videos"
 msgstr "Video"
 
-msgctxt "#10020"
-msgid "Scripts"
-msgstr "Skripti"
+msgctxt "#10007"
+msgid "System information"
+msgstr "Sistēmas informācija"
+
+msgctxt "#10008"
+msgid "Settings - General"
+msgstr "Iestatījumi - pamata"
+
+msgctxt "#10009"
+msgid "Settings - Screen"
+msgstr "Iestatījumi - ekrāna"
+
+msgctxt "#10010"
+msgid "Settings - Appearance - GUI Calibration"
+msgstr "Iestatījumi - izskata - GUI kalibrēšana"
+
+msgctxt "#10011"
+msgid "Settings - Videos - Screen Calibration"
+msgstr "Iestatījumi - video - ekrāna kalibrēšana"
+
+msgctxt "#10012"
+msgid "Settings - Pictures"
+msgstr "Iestatījumi - attēli"
+
+msgctxt "#10013"
+msgid "Settings - Programs"
+msgstr "Iestatījumi - programmas"
+
+msgctxt "#10014"
+msgid "Settings - Weather"
+msgstr "Iestatījumi - laikapstākļi"
+
+msgctxt "#10015"
+msgid "Settings - Music"
+msgstr "Iestatījumi - mūzika"
+
+msgctxt "#10016"
+msgid "Settings - System"
+msgstr "Iestatījumi - sistēma"
+
+msgctxt "#10017"
+msgid "Settings - Videos"
+msgstr "Iestatījumi - video"
+
+msgctxt "#10018"
+msgid "Settings - Network"
+msgstr "Iestatījumi - tīkls"
+
+msgctxt "#10019"
+msgid "Settings - Appearance"
+msgstr "Iestatījumi - izskats"
+
+msgctxt "#10020"
+msgid "Scripts"
+msgstr "Skripti"
+
+msgctxt "#10021"
+msgid "Web Browser"
+msgstr "Tīmekļa pārlūks"
+
+msgctxt "#10025"
+msgid "Videos"
+msgstr "Video"
+
+msgctxt "#10028"
+msgid "Videos/Playlist"
+msgstr "Video/Spēļsaraksts"
+
+msgctxt "#10029"
+msgid "Login screen"
+msgstr "Pieteikšanās ekrāns"
+
+msgctxt "#10034"
+msgid "Settings - Profiles"
+msgstr "Iestatījumi - Profili"
+
+msgctxt "#10035"
+msgid "Reset"
+msgstr "Atiestatīt"
+
+msgctxt "#10037"
+msgid "Standard"
+msgstr "Standarta"
+
+msgctxt "#10042"
+msgid "Are you sure you want to reset the settings in this category?"
+msgstr "Vai tiešām vēlaties atiestatīt iestatījumus šajā kategorijā?"
+
+msgctxt "#10043"
+msgid "Help"
+msgstr "Palīdzība"
+
+msgctxt "#10044"
+msgid "No help available"
+msgstr "Palīdzība nav pieejama"
+
+msgctxt "#10126"
+msgid "File browser"
+msgstr "Failu pārlūks"
+
+msgctxt "#10128"
+msgid "Network setup"
+msgstr "Tīkla uzstādīšana"
+
+msgctxt "#10129"
+msgid "Media source"
+msgstr "Mediju avots"
+
+msgctxt "#10130"
+msgid "Profile settings"
+msgstr "Profila iestatījumi"
+
+msgctxt "#10131"
+msgid "Lock settings"
+msgstr "Slēdzenes iestatījumi"
+
+msgctxt "#10132"
+msgid "Content settings"
+msgstr "Satura iestatījumi"
+
+msgctxt "#10134"
+msgid "Favourites"
+msgstr "Izlase"
+
+msgctxt "#10135"
+msgid "Songs/Info"
+msgstr "Dziesmas/Info"
+
+msgctxt "#10136"
+msgid "Smart playlist editor"
+msgstr "Gudrā spēļsaraksta redaktors"
+
+msgctxt "#10137"
+msgid "Smart playlist rule editor"
+msgstr "Gudrā spēļsaraksta noteikumu redaktors"
+
+msgctxt "#10139"
+msgid "Pictures/Info"
+msgstr "Attēli/Info"
+
+msgctxt "#10140"
+msgid "Add-on settings"
+msgstr "Pielikuma iestatījumi"
+
+msgctxt "#10146"
+msgid "Add-ons/Info"
+msgstr "Pielikumi/Info"
+
+msgctxt "#10210"
+msgid "Looking for subtitles..."
+msgstr "Uzmeklēju subtitrus..."
+
+msgctxt "#10211"
+msgid "Looking for or caching subtitles..."
+msgstr "Uzmeklēju vai iekešoju subtitrus..."
+
+msgctxt "#10212"
+msgid "terminating"
+msgstr "izbeigšana"
+
+msgctxt "#10213"
+msgid "buffering"
+msgstr "buferizācija"
+
+msgctxt "#10214"
+msgid "Opening stream"
+msgstr "Atver straumi"
+
+msgctxt "#10500"
+msgid "Music/Playlist"
+msgstr "Mūzika/Spēļsaraksts"
+
+msgctxt "#10501"
+msgid "Music/Files"
+msgstr "Mūzika/Faili"
+
+msgctxt "#10502"
+msgid "Music/Library"
+msgstr "Mūzika/Bibliotēka"
+
+msgctxt "#10503"
+msgid "Playlist editor"
+msgstr "Spēļsaraksta redaktors"
+
+msgctxt "#10504"
+msgid "Top 100 songs"
+msgstr "Top 100 dziesmas"
+
+msgctxt "#10505"
+msgid "Top 100 albums"
+msgstr "Top 100 albumi"
+
+msgctxt "#10506"
+msgid "Programs"
+msgstr "Programmas"
+
+msgctxt "#10507"
+msgid "Configuration"
+msgstr "Konfigurācija"
+
+msgctxt "#10508"
+msgid "Weather forecast"
+msgstr "Laikaprognoze"
+
+msgctxt "#10509"
+msgid "Network gaming"
+msgstr "Tīkla spēles"
+
+msgctxt "#10510"
+msgid "Extensions"
+msgstr "Paplašinājumi"
+
+msgctxt "#10511"
+msgid "System info"
+msgstr "Sistēmas informācija"
+
+msgctxt "#10516"
+msgid "Music - Library"
+msgstr "Mūzika - Bibliotēka"
+
+msgctxt "#10517"
+msgid "Now Playing - Music"
+msgstr "Pašlaik atskaņo - Mūzika"
+
+msgctxt "#10522"
+msgid "Now Playing - Videos"
+msgstr "Pašlaik atskaņo - Video"
+
+msgctxt "#10523"
+msgid "Album info"
+msgstr "Albuma info"
+
+msgctxt "#10524"
+msgid "Movie info"
+msgstr "Filmas info"
+
+msgctxt "#12001"
+msgid "Music/Info"
+msgstr "Mūzika/Info"
+
+msgctxt "#12003"
+msgid "Videos/Info"
+msgstr "Video/Info"
+
+msgctxt "#12004"
+msgid "Scripts/Info"
+msgstr "Skripti/Info"
+
+msgctxt "#12005"
+msgid "Fullscreen video"
+msgstr "Pilnekrāna video"
+
+msgctxt "#12009"
+msgid "Rebuild index..."
+msgstr "Pārbūvē indeksu..."
+
+msgctxt "#12010"
+msgid "Return to music window"
+msgstr "Atpakaļ pie mūzikas loga"
+
+msgctxt "#12011"
+msgid "Return to videos window"
+msgstr "Atpakaļ pie video loga"
+
+msgctxt "#12021"
+msgid "Start from beginning"
+msgstr "Sākt no sākuma"
+
+msgctxt "#12022"
+msgid "Resume from %s"
+msgstr "Atsākt no %s"
+
+msgctxt "#12310"
+msgid "0"
+msgstr "0"
+
+msgctxt "#12311"
+msgid "1"
+msgstr "1"
+
+msgctxt "#12312"
+msgid "2"
+msgstr "2"
+
+msgctxt "#12313"
+msgid "3"
+msgstr "3"
+
+msgctxt "#12314"
+msgid "4"
+msgstr "4"
+
+msgctxt "#12315"
+msgid "5"
+msgstr "5"
+
+msgctxt "#12316"
+msgid "6"
+msgstr "6"
+
+msgctxt "#12317"
+msgid "7"
+msgstr "7"
+
+msgctxt "#12318"
+msgid "8"
+msgstr "8"
+
+msgctxt "#12319"
+msgid "9"
+msgstr "9"
+
+msgctxt "#12320"
+msgid "c"
+msgstr "c"
+
+msgctxt "#12321"
+msgid "Ok"
+msgstr "Labi"
+
+msgctxt "#12322"
+msgid "*"
+msgstr "*"
+
+msgctxt "#12325"
+msgid "Locked! Enter code..."
+msgstr "Slēgts! Ievadiet kodu..."
+
+msgctxt "#12326"
+msgid "Enter password"
+msgstr "Ievadiet paroli"
+
+msgctxt "#12327"
+msgid "Enter master code"
+msgstr "Ievadiet galveno kodu"
+
+msgctxt "#12328"
+msgid "Enter unlock code"
+msgstr "Ievadiet slēdzenes kodu"
+
+msgctxt "#12329"
+msgid "or press C to cancel"
+msgstr "vai spiediet C, lai atceltu"
+
+msgctxt "#12330"
+msgid "Enter gamepad button combo and"
+msgstr "Ievadiet spēļvadnes kombinēto pogu un"
+
+msgctxt "#12331"
+msgid "press OK, or Back to cancel"
+msgstr "nospiediet OK vai Atpakaļ, lai atceltu"
+
+msgctxt "#12332"
+msgid "Set lock"
+msgstr "Iestatīt slēdzeni"
+
+msgctxt "#12333"
+msgid "Unlock"
+msgstr "Atbloķēt"
+
+msgctxt "#12334"
+msgid "Reset lock"
+msgstr "Atiestatīt slēdzeni"
+
+msgctxt "#12335"
+msgid "Remove lock"
+msgstr "Noņemt slēdzeni"
+
+msgctxt "#12337"
+msgid "Numeric password"
+msgstr "Ciparu parole"
+
+msgctxt "#12338"
+msgid "Gamepad button combo"
+msgstr "Spēļvadnes kombinētā poga"
+
+msgctxt "#12339"
+msgid "Full-text password"
+msgstr "Pilna teksta parole"
+
+msgctxt "#12340"
+msgid "Enter new password"
+msgstr "Ievadiet jauno paroli"
+
+msgctxt "#12341"
+msgid "Re-Enter new password"
+msgstr "Ievadiet vēlreiz jauno paroli"
+
+msgctxt "#12342"
+msgid "Incorrect password,"
+msgstr "Nepareiza parole,"
+
+msgctxt "#12343"
+msgid "retries left "
+msgstr "atlikuši mēģinājumi"
+
+msgctxt "#12344"
+msgid "Passwords entered did not match."
+msgstr "Ievadītās paroles nesakrīt."
+
+msgctxt "#12345"
+msgid "Access denied"
+msgstr "Piekļuve liegta"
+
+msgctxt "#12346"
+msgid "Password retry limit exceeded."
+msgstr "Paroles ievades limits ir pārsniegts."
+
+msgctxt "#12348"
+msgid "Item locked"
+msgstr "Ieraksts aizslēgts"
+
+msgctxt "#12349"
+msgid "Updating video library art"
+msgstr "Atjaunina video bibliotēkas mākslu"
+
+msgctxt "#12350"
+msgid "Processing %s"
+msgstr "Apstrāde %s"
+
+msgctxt "#12351"
+msgid "The art cache in your video library needs updating."
+msgstr "Mākslas kešatmiņu video bibliotēkā ir jāatjaunina."
+
+msgctxt "#12352"
+msgid "No downloading is needed."
+msgstr "Lejupielāde nav nepieciešama."
+
+msgctxt "#12353"
+msgid "Reactivate lock"
+msgstr "Atjaunot slēdzeni"
+
+msgctxt "#12354"
+msgid "Would you like to update it now?"
+msgstr "Vai vēlaties tagad to atjaunināt?"
+
+msgctxt "#12356"
+msgid "Change lock"
+msgstr "Mainīt slēdzeni"
+
+msgctxt "#12357"
+msgid "Source lock"
+msgstr "Avota slēdzene"
+
+msgctxt "#12358"
+msgid "Password entry was blank. Try again."
+msgstr "Paroles ievade bija tukša. Mēģiniet vēlreiz."
+
+msgctxt "#12360"
+msgid "Master lock"
+msgstr "Galvenā slēdzene"
+
+msgctxt "#12362"
+msgid "Shutdown system if Master Lock retries exceeded"
+msgstr "Izslēgt sistēmu, ja galvenās atslēgas ievadīšanas reizes izsmeltas"
+
+msgctxt "#12367"
+msgid "Master code is not valid"
+msgstr "Galvenais kods ir nederīgs"
+
+msgctxt "#12368"
+msgid "Please enter a valid master code"
+msgstr "Lūdzu, ievadiet derīgu galveno kodu"
+
+msgctxt "#12373"
+msgid "Settings & file manager"
+msgstr "Iestatījumi & failu pārvaldnieks"
+
+msgctxt "#12376"
+msgid "Set as default for all videos"
+msgstr "Iestatīt kā noklusējumu visiem video"
+
+msgctxt "#12377"
+msgid "This will reset any previously saved values"
+msgstr "Šī darbība atiestatīs visas iepriekš saglabātās vērtības"
+
+msgctxt "#12378"
+msgid "Amount of time to display each image"
+msgstr "Laiks, kurā jāparāda katrs attēls"
+
+msgctxt "#12379"
+msgid "Use pan and zoom effects"
+msgstr "Izmantot bīdīšanas un zooma efektu"
+
+msgctxt "#12383"
+msgid "12 hour clock"
+msgstr "12 stundu pulkstenis"
+
+msgctxt "#12384"
+msgid "24 hour clock"
+msgstr "24 stundu pulkstenis"
+
+msgctxt "#12385"
+msgid "Day/Month"
+msgstr "Diena/Mēnesis"
+
+msgctxt "#12386"
+msgid "Month/Day"
+msgstr "Mēnesis/Diena"
+
+msgctxt "#12390"
+msgid "System uptime"
+msgstr "Sistēmas mašīnlaiks"
+
+msgctxt "#12391"
+msgid "Minutes"
+msgstr "Minūtes"
+
+msgctxt "#12392"
+msgid "Hours"
+msgstr "Stundas"
+
+msgctxt "#12393"
+msgid "Days"
+msgstr "Dienas"
+
+msgctxt "#12394"
+msgid "Total uptime"
+msgstr "Kopējais mašīnlaiks"
+
+msgctxt "#12395"
+msgid "Battery level"
+msgstr "Baterijas līmenis"
+
+msgctxt "#12600"
+msgid "Weather"
+msgstr "Laika apstākļi"
+
+msgctxt "#12900"
+msgid "Screensaver"
+msgstr "Ekrānsaudzētājs"
+
+msgctxt "#12901"
+msgid "Fullscreen OSD"
+msgstr "Pilnekrāna OSD"
+
+msgctxt "#13000"
+msgid "System"
+msgstr "Sistēma"
+
+msgctxt "#13001"
+msgid "Immediate HD spindown"
+msgstr "Tūlītēja HD apstāšanās"
+
+msgctxt "#13002"
+msgid "Video only"
+msgstr "Tikai video"
+
+msgctxt "#13003"
+msgid "- Delay"
+msgstr "- Aizkave"
+
+msgctxt "#13004"
+msgid "- Minimum file duration"
+msgstr "- Minimālais faila ilgums"
+
+msgctxt "#13005"
+msgid "Shutdown"
+msgstr "Izslēgšana"
+
+msgctxt "#13008"
+msgid "Shutdown function"
+msgstr "Izslēgšanas funkcija"
+
+msgctxt "#13009"
+msgid "Quit"
+msgstr "Beigt"
+
+msgctxt "#13010"
+msgid "Hibernate"
+msgstr "Hibernēt"
+
+msgctxt "#13011"
+msgid "Suspend"
+msgstr "Gatavības režīms"
+
+msgctxt "#13012"
+msgid "Exit"
+msgstr "Iziet"
+
+msgctxt "#13013"
+msgid "Reboot"
+msgstr "Atsāknēt"
+
+msgctxt "#13015"
+msgid "Power button action"
+msgstr "Ieslēgšanas pogas darbība"
+
+msgctxt "#13016"
+msgid "Power off System"
+msgstr "Izslēgt datorsistēmu"
+
+msgctxt "#13017"
+msgid "Inhibit idle shutdown"
+msgstr "Kavēt izslēgšanu nelietošanas laikā"
+
+msgctxt "#13018"
+msgid "Allow idle shutdown"
+msgstr "Atļaut izslēgšanu nelietošanas laikā"
+
+msgctxt "#13020"
+msgid "Is another session active, perhaps over ssh?"
+msgstr "Vai darbojas cita sesija, varbūt caur ssh?"
+
+msgctxt "#13021"
+msgid "Mounted removable harddrive"
+msgstr "Noņemamais disks piemontēts"
+
+msgctxt "#13022"
+msgid "Unsafe device removal"
+msgstr "Nedroša ierīces noņemšana"
+
+msgctxt "#13023"
+msgid "Successfully removed device"
+msgstr "Ierīce noņemta veiksmīgi"
+
+msgctxt "#13024"
+msgid "Joystick plugged"
+msgstr "Pievienota kursorsvira"
+
+msgctxt "#13025"
+msgid "Joystick unplugged"
+msgstr "Kursorsvira atvienota"
+
+msgctxt "#13026"
+msgid "Try to wake remote servers on access"
+msgstr "Piekļūstot mēģināt pamodināt attālus serverus"
+
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Wake on Lan (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "Gaidu savienojumu ar tīklu..."
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Neizdevās izpildīt Wake on Lan!"
+
+msgctxt "#13030"
+msgid "Waiting for server to wake up..."
+msgstr "Gaidu servera pamošanos..."
+
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Paplašināti gaida servera pamošanos..."
+
+msgctxt "#13032"
+msgid "Waiting for services to launch..."
+msgstr "Gaidu servisu palaišanos..."
+
+msgctxt "#13033"
+msgid "MAC Discovery"
+msgstr "MAC atklāšana"
+
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Atjaunināts %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Atrada par %s"
+
+msgctxt "#13036"
+msgid "Failed for %s"
+msgstr "Neizdevās par %s"
+
+msgctxt "#13050"
+msgid "Running low on battery"
+msgstr "Baterija iet uz beigām"
+
+msgctxt "#13100"
+msgid "Flicker filter"
+msgstr "Mirgoņas filtrs"
+
+msgctxt "#13101"
+msgid "Let driver choose (requires restart)"
+msgstr "Ļaut dzinim izvēlēties (nepieciešams pārstartēt)"
+
+msgctxt "#13105"
+msgid "Vertical blank sync"
+msgstr "Vertikālā tukšuma sinhronizācija"
+
+msgctxt "#13106"
+msgid "Disabled"
+msgstr "Izslēgts"
+
+msgctxt "#13107"
+msgid "Enabled during video playback"
+msgstr "Ieslēgts, spēlējot video"
+
+msgctxt "#13108"
+msgid "Always enabled"
+msgstr "Vienmēr ieslēgts"
+
+msgctxt "#13109"
+msgid "Test & apply resolution"
+msgstr "Testēt & pielietot izšķirtspēju"
+
+msgctxt "#13110"
+msgid "Save resolution?"
+msgstr "Saglabāt izšķirtspēju?"
+
+msgctxt "#13112"
+msgid "High quality upscaling"
+msgstr "Palielināt ar augstu kvalitāti"
+
+msgctxt "#13113"
+msgid "Disabled"
+msgstr "Izslēgts"
+
+msgctxt "#13114"
+msgid "Enabled for SD content"
+msgstr "Ieslēgts SD saturam"
+
+msgctxt "#13115"
+msgid "Always enabled"
+msgstr "Vienmēr ieslēgts"
+
+msgctxt "#13116"
+msgid "Upscaling method"
+msgstr "Palielināšanas metode"
+
+msgctxt "#13117"
+msgid "Bicubic"
+msgstr "Bikubiska"
+
+msgctxt "#13118"
+msgid "Lanczos"
+msgstr "Lanczos"
+
+msgctxt "#13119"
+msgid "Sinc"
+msgstr "Sinc"
+
+msgctxt "#13120"
+msgid "VDPAU"
+msgstr "VDPAU"
+
+msgctxt "#13121"
+msgid "VDPAU HQ Upscaling level"
+msgstr "VDPAU HQ palielināšanas līmenis"
+
+msgctxt "#13130"
+msgid "Blank other displays"
+msgstr "Aptumšot pārējos ekrānus"
+
+msgctxt "#13131"
+msgid "Disabled"
+msgstr "Izslēgts"
+
+msgctxt "#13132"
+msgid "Blank displays"
+msgstr "Aptumšoti ekrāni"
+
+msgctxt "#13140"
+msgid "Active connections detected!"
+msgstr "Atklāti aktīvi savienojumi!"
+
+msgctxt "#13141"
+msgid "If you proceed, you might not be able to control XBMC"
+msgstr "Ja turpināsit, iespējams, vairs nevarēsit kontrolēt"
+
+msgctxt "#13142"
+msgid "any longer. Are you sure you want to stop the Event server?"
+msgstr "XBMC. Vai tiešām vēlaties apturēt notikumu serveri"
+
+msgctxt "#13144"
+msgid "Change Apple Remote mode?"
+msgstr "Vai mainīt Apple tālvadības režīmu?"
+
+msgctxt "#13145"
+msgid "If you are currently using the Apple Remote to control"
+msgstr "Ja pašlaik lietojat Apple tālvadību, lai kontrolētu"
+
+msgctxt "#13146"
+msgid "XBMC, changing this setting might affect your ability"
+msgstr "XBMC, šī iestatījuma izmaiņa var ietekmēt spēju"
+
+msgctxt "#13147"
+msgid "to continue controlling it. Do you want to proceed?"
+msgstr "turpināt tā kontroli. Vai vēlaties turpināt?"
+
+msgctxt "#13159"
+msgid "Subnet mask"
+msgstr "Apakštīkla maska"
+
+msgctxt "#13160"
+msgid "Gateway"
+msgstr "Vārteja"
+
+msgctxt "#13161"
+msgid "Primary DNS"
+msgstr "Primārais DNS"
+
+msgctxt "#13170"
+msgid "Never"
+msgstr "Nekad"
+
+msgctxt "#13171"
+msgid "Immediately"
+msgstr "Tūlīt"
+
+msgctxt "#13172"
+msgid "After %i secs"
+msgstr "Pēc %i sekundēm"
+
+msgctxt "#13173"
+msgid "HDD install date:"
+msgstr "HDD instalēšanas datums:"
+
+msgctxt "#13174"
+msgid "HDD power cycle count:"
+msgstr "HDD dabības ciklu skaits:"
+
+msgctxt "#13200"
+msgid "Profiles"
+msgstr "Profili"
+
+msgctxt "#13201"
+msgid "Delete profile '%s'?"
+msgstr "Dzēst profilu '%s'?"
+
+msgctxt "#13204"
+msgid "Last loaded profile:"
+msgstr "Pēdējais ielādētais profils:"
+
+msgctxt "#13205"
+msgid "Unknown"
+msgstr "nezināms"
+
+msgctxt "#13206"
+msgid "Overwrite"
+msgstr "Pārrakstīt"
+
+msgctxt "#13208"
+msgid "Alarm clock"
+msgstr "Modinātājs"
+
+msgctxt "#13209"
+msgid "Alarm clock interval (in minutes)"
+msgstr "Modinātāja intervāls (minūtēs)"
+
+msgctxt "#13210"
+msgid "Started, alarm in %im"
+msgstr "Sākts, modinās pēc %im"
+
+msgctxt "#13211"
+msgid "Alarm!"
+msgstr "Modinātājs!"
+
+msgctxt "#13212"
+msgid "Cancelled with %im%is left"
+msgstr "Atcelts ar palikušām %im%"
+
+msgctxt "#13213"
+msgid "%2.0fm"
+msgstr "%2.0fm"
+
+msgctxt "#13214"
+msgid "%2.0fs"
+msgstr "%2.0fs"
+
+msgctxt "#13249"
+msgid "Search for subtitles in RARs"
+msgstr "Meklēt subtitrus RAR failos"
+
+msgctxt "#13250"
+msgid "Browse for subtitle..."
+msgstr "Pārlūkot subtitrus..."
+
+msgctxt "#13251"
+msgid "Move item"
+msgstr "Pārvietot ierakstu"
+
+msgctxt "#13252"
+msgid "Move item here"
+msgstr "Pārvietot ierakstu šeit"
+
+msgctxt "#13253"
+msgid "Cancel move"
+msgstr "Atcelt pārvietošanu"
+
+msgctxt "#13270"
+msgid "Hardware:"
+msgstr "Aparatūra:"
+
+msgctxt "#13271"
+msgid "CPU Usage:"
+msgstr "CPU lietojums:"
+
+msgctxt "#13274"
+msgid "Connected, but no DNS is available."
+msgstr "Savienots, bet neviens DNS nedarbojas."
+
+msgctxt "#13275"
+msgid "Hard Disk"
+msgstr "Cietais disks"
+
+msgctxt "#13276"
+msgid "DVD-ROM"
+msgstr "DVD-ROM"
+
+msgctxt "#13277"
+msgid "Storage"
+msgstr "Glabātuve"
+
+msgctxt "#13278"
+msgid "Default"
+msgstr "Noklusētais"
+
+msgctxt "#13279"
+msgid "Network"
+msgstr "Tīkls"
+
+msgctxt "#13280"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "#13281"
+msgid "Hardware"
+msgstr "Aparatūra"
+
+msgctxt "#13283"
+msgid "Operating system:"
+msgstr "Operētājsistēma:"
+
+msgctxt "#13284"
+msgid "CPU speed:"
+msgstr "CPU ātrums:"
+
+msgctxt "#13286"
+msgid "Video encoder:"
+msgstr "Video kodētājs:"
+
+msgctxt "#13287"
+msgid "Screen resolution:"
+msgstr "Ekrāna izšķirtspēja:"
+
+msgctxt "#13292"
+msgid "A/V cable:"
+msgstr "A/V kabelis:"
+
+msgctxt "#13294"
+msgid "DVD region:"
+msgstr "DVD reģions:"
+
+msgctxt "#13295"
+msgid "Internet:"
+msgstr "Internets:"
+
+msgctxt "#13296"
+msgid "Connected"
+msgstr "Savienots"
+
+msgctxt "#13297"
+msgid "Not connected. Check network settings."
+msgstr "Nav savienots. Pārbaudiet tīkla iestatījumus."
+
+msgctxt "#13299"
+msgid "Target temperature"
+msgstr "Mērķa temperatūra"
+
+msgctxt "#13300"
+msgid "Fan speed"
+msgstr "Ventilatora ātrums"
+
+msgctxt "#13301"
+msgid "Auto temperature control"
+msgstr "Auto temperatūras kontrole"
+
+msgctxt "#13302"
+msgid "Fan speed override"
+msgstr "Ignorēt ventilatora ātrumu"
+
+msgctxt "#13303"
+msgid "Fonts"
+msgstr "Fonti"
+
+msgctxt "#13304"
+msgid "Enable flipping bi-directional strings"
+msgstr "Ieslēgt divvirzienu virkņu apgriešanu"
+
+msgctxt "#13305"
+msgid "Show RSS news feeds"
+msgstr "Rādīt RSS ziņu barotnes"
+
+msgctxt "#13306"
+msgid "Show parent folder items"
+msgstr "Rādīt vecāku mapes ierakstus"
+
+msgctxt "#13307"
+msgid "Track naming template"
+msgstr "Celiņa nosaukšanas veidne"
+
+msgctxt "#13308"
+msgid "Do you wish to reboot your system"
+msgstr "Vai vēlies pārstartēt datorsistēmu"
+
+msgctxt "#13309"
+msgid "instead of just XBMC?"
+msgstr "nevis tikai XBMC?"
+
+msgctxt "#13310"
+msgid "Zoom effect"
+msgstr "Zoom efekts"
+
+msgctxt "#13311"
+msgid "Float effect"
+msgstr "Peldošs efekts"
+
+msgctxt "#13312"
+msgid "Black bar reduction"
+msgstr "Melno malu samazināšana"
+
+msgctxt "#13313"
+msgid "Restart"
+msgstr "Pārstartēt"
+
+msgctxt "#13314"
+msgid "Crossfade between songs"
+msgstr "Pārklāšanās starp dziesmām"
+
+msgctxt "#13315"
+msgid "Regenerate thumbnails"
+msgstr "Pārģenerēt sīktēlus"
+
+msgctxt "#13316"
+msgid "Recursive thumbnails"
+msgstr "Rekursīvi sīktēli"
+
+msgctxt "#13317"
+msgid "View slideshow"
+msgstr "Skatīt slīdīti"
+
+msgctxt "#13318"
+msgid "Recursive slideshow"
+msgstr "Rekursīva slīdīte"
+
+msgctxt "#13320"
+msgid "Stereo"
+msgstr "Stereo"
+
+msgctxt "#13321"
+msgid "Left only"
+msgstr "Tikai pa kreisi"
+
+msgctxt "#13322"
+msgid "Right only"
+msgstr "Tikai pa labi"
+
+msgctxt "#13323"
+msgid "Enable karaoke support"
+msgstr "Ieslēgt karaoke atbalstu"
+
+msgctxt "#13324"
+msgid "Background transparency"
+msgstr "Fona caurspīdīgums"
+
+msgctxt "#13325"
+msgid "Foreground transparency"
+msgstr "Priekšplāna curspīdīgums"
+
+msgctxt "#13326"
+msgid "A/V delay"
+msgstr "A/V aizkave"
+
+msgctxt "#13327"
+msgid "Karaoke"
+msgstr "Karaoke"
+
+msgctxt "#13328"
+msgid "%s not found"
+msgstr "%s nav atrasts"
+
+msgctxt "#13329"
+msgid "Error opening %s"
+msgstr "Kļūda atverot %s"
+
+msgctxt "#13330"
+msgid "Unable to load %s"
+msgstr "Nevar ielādēt %s"
+
+msgctxt "#13331"
+msgid "Error: Out of memory"
+msgstr "Kļūda: atmiņa ir pilna"
+
+msgctxt "#13332"
+msgid "Move up"
+msgstr "Aušup"
+
+msgctxt "#13333"
+msgid "Move down"
+msgstr "Lejup"
+
+msgctxt "#13334"
+msgid "Edit label"
+msgstr "Labot etiķeti"
+
+msgctxt "#13335"
+msgid "Make default"
+msgstr "Padarīt par noklusējumu"
+
+msgctxt "#13336"
+msgid "Remove button"
+msgstr "Noņemt pogu"
+
+msgctxt "#13340"
+msgid "Leave as is"
+msgstr "Atstāt, kā ir"
+
+msgctxt "#13341"
+msgid "Green"
+msgstr "Zaļš"
+
+msgctxt "#13342"
+msgid "Orange"
+msgstr "Oranžs"
+
+msgctxt "#13343"
+msgid "Red"
+msgstr "Sarkans"
+
+msgctxt "#13344"
+msgid "Cycle"
+msgstr "Cikls"
+
+msgctxt "#13345"
+msgid "Switch LED off on playback"
+msgstr "Izslēgt LED, kad atskaņo"
+
+msgctxt "#13346"
+msgid "Movie information"
+msgstr "Informācija par filmu"
+
+msgctxt "#13347"
+msgid "Queue item"
+msgstr "Ierindot ierakstu"
+
+msgctxt "#13348"
+msgid "Search IMDb..."
+msgstr "Meklē IMDb..."
+
+msgctxt "#13349"
+msgid "Scan for new content"
+msgstr "Meklē jaunu saturu"
+
+msgctxt "#13350"
+msgid "Now playing..."
+msgstr "Pašlaik atskaņoju..."
+
+msgctxt "#13351"
+msgid "Album information"
+msgstr "Albuma informācija"
+
+msgctxt "#13352"
+msgid "Scan item to library"
+msgstr "Skenēt ierakstu bibliotēkā"
+
+msgctxt "#13353"
+msgid "Stop scanning"
+msgstr "Apturēt skenēšanu"
+
+msgctxt "#13354"
+msgid "Render method"
+msgstr "Renderēšanas metode"
+
+msgctxt "#13355"
+msgid "Low quality pixel shader"
+msgstr "Zemas kvalitātes pikseļu ēnotājs"
+
+msgctxt "#13356"
+msgid "Hardware overlays"
+msgstr "Aparatūras pārklājumi"
+
+msgctxt "#13357"
+msgid "High quality pixel shader"
+msgstr "Augstas kvalitātes pikseļu ēnotājs"
+
+msgctxt "#13358"
+msgid "Play item"
+msgstr "Atskaņot ierakstu"
+
+msgctxt "#13359"
+msgid "Set artist thumb"
+msgstr "Iestatīt izpildītāja sīktēlu"
+
+msgctxt "#13360"
+msgid "Automatically generate thumbnails"
+msgstr "Automātiski ģenerēt sīktēlus"
+
+msgctxt "#13361"
+msgid "Enable voice"
+msgstr "Ieslēgt balsi"
+
+msgctxt "#13375"
+msgid "Enable device"
+msgstr "Ieslēgt ierīci"
+
+msgctxt "#13376"
+msgid "Volume"
+msgstr "Skaļums"
+
+msgctxt "#13377"
+msgid "Default view mode"
+msgstr "Noklusētais skata režīms"
+
+msgctxt "#13378"
+msgid "Default brightness"
+msgstr "Noklusētais spilgtums"
+
+msgctxt "#13379"
+msgid "Default contrast"
+msgstr "Noklusētais kontrasts"
+
+msgctxt "#13380"
+msgid "Default gamma"
+msgstr "Noklusētā gamma"
+
+msgctxt "#13381"
+msgid "Resume video"
+msgstr "Atsākt video"
+
+msgctxt "#13382"
+msgid "Voice mask - Port 1"
+msgstr "Balss maska - Ports 1"
+
+msgctxt "#13383"
+msgid "Voice mask - Port 2"
+msgstr "Balss maska - Ports 2"
+
+msgctxt "#13384"
+msgid "Voice mask - Port 3"
+msgstr "Balss maska - Ports 3"
+
+msgctxt "#13385"
+msgid "Voice mask - Port 4"
+msgstr "Balss maska - Ports 4"
+
+msgctxt "#13386"
+msgid "Use time based seeking"
+msgstr "Izmantot novietošanu pēc laika"
+
+msgctxt "#13387"
+msgid "Track naming template - right"
+msgstr "Celiņa nosaukšanas veidne - pa labi"
+
+msgctxt "#13388"
+msgid "Preset"
+msgstr "Sagatave"
+
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "Nav pieejamas sagataves\nšai vizualizācijai"
+
+msgctxt "#13391"
+msgid "Eject/Load"
+msgstr "Izstumt/Ievilkt"
+
+msgctxt "#13393"
+msgid "Calculate size"
+msgstr "Izskaitļo izmēru"
+
+msgctxt "#13394"
+msgid "Calculating folder size"
+msgstr "Izskaitļo mapes izmēru"
+
+msgctxt "#13395"
+msgid "Video settings"
+msgstr "Video iestatījumi"
+
+msgctxt "#13396"
+msgid "Audio and subtitle settings"
+msgstr "Audio un subtitru iestatījumi"
+
+msgctxt "#13397"
+msgid "Enable subtitles"
+msgstr "Ieslēgt subtitrus"
+
+msgctxt "#13398"
+msgid "Shortcuts"
+msgstr "Saīsnes"
+
+msgctxt "#13399"
+msgid "Ignore articles when sorting (e.g. \"the\")"
+msgstr "Vārdu ignorēšana kārtojot (piem.,\\\"the\\\")"
+
+msgctxt "#13400"
+msgid "Crossfade between songs on the same album"
+msgstr "Pārklāšanās starp dziesmām vienā albumā"
+
+msgctxt "#13401"
+msgid "Browse for %s"
+msgstr "Pārlūkot %s"
+
+msgctxt "#13402"
+msgid "Show track position"
+msgstr "Rādīt pozīciju celiņā"
+
+msgctxt "#13403"
+msgid "Clear default"
+msgstr "Notīrīt noklusējumu"
+
+msgctxt "#13404"
+msgid "Resume"
+msgstr "Atsākt"
+
+msgctxt "#13405"
+msgid "Get thumb"
+msgstr "Iegūt sīktēlu"
+
+msgctxt "#13406"
+msgid "Picture information"
+msgstr "Attēla informācija"
+
+msgctxt "#13407"
+msgid "%s presets"
+msgstr "%s sagataves"
+
+msgctxt "#13408"
+msgid "(IMDb user rating)"
+msgstr "(IMDb lietotāju vērtējums)"
+
+msgctxt "#13409"
+msgid "Top 250"
+msgstr "Top 250"
+
+msgctxt "#13410"
+msgid "Tune in on Last.fm"
+msgstr "Uzregulēt Last.fm"
+
+msgctxt "#13411"
+msgid "Minimum fan speed"
+msgstr "Minimālais ventilatora ātrums"
+
+msgctxt "#13412"
+msgid "Play from here"
+msgstr "Atskaņot no šīs vietas"
+
+msgctxt "#13413"
+msgid "Downloading"
+msgstr "Lejupielādē"
+
+msgctxt "#13414"
+msgid "Include artists who appear only on compilations"
+msgstr "Iekļaut izpildītājus, kuri parādās tikai kompilācijās"
+
+msgctxt "#13415"
+msgid "Render method"
+msgstr "Renderēšanas metode"
+
+msgctxt "#13416"
+msgid "Auto detect"
+msgstr "Auto noteikšana"
+
+msgctxt "#13417"
+msgid "Basic shaders (ARB)"
+msgstr "Pamata šeideri (ARB)"
+
+msgctxt "#13418"
+msgid "Advanced shaders (GLSL)"
+msgstr "Papildu šeideri (GLSL)"
+
+msgctxt "#13419"
+msgid "Software"
+msgstr "Programmatūra"
+
+msgctxt "#13420"
+msgid "Remove safely"
+msgstr "Droši noņemt"
+
+msgctxt "#13421"
+msgid "VDPAU"
+msgstr "VDPAU"
+
+msgctxt "#13422"
+msgid "Start slideshow here"
+msgstr "Sākt slīdīti šeit"
+
+msgctxt "#13423"
+msgid "Remember for this path"
+msgstr "Atcerieties šo ceļu"
+
+msgctxt "#13424"
+msgid "Use pixel buffer objects"
+msgstr "Izmantot pikseļu bufera objektus"
+
+msgctxt "#13425"
+msgid "Allow hardware acceleration (VDPAU)"
+msgstr "Atļaut aparatūras paātrinājumu (VDPAU)"
+
+msgctxt "#13426"
+msgid "Allow hardware acceleration (VAAPI)"
+msgstr "Atļaut aparatūras paātrinājumu (VAAPI)"
+
+msgctxt "#13427"
+msgid "Allow hardware acceleration (DXVA2)"
+msgstr "Atļaut aparatūras paātrinājumu (DXVA2)"
+
+msgctxt "#13428"
+msgid "Allow hardware acceleration (CrystalHD)"
+msgstr "Atļaut aparatūras paātrinājumu (CrystalHD)"
+
+msgctxt "#13429"
+msgid "Allow hardware acceleration (VDADecoder)"
+msgstr "Atļaut aparatūras paātrinājumu (VDADecoder)"
+
+msgctxt "#13430"
+msgid "Allow hardware acceleration (OpenMax)"
+msgstr "Atļaut aparatūras paātrinājumu (OpenMax)"
+
+msgctxt "#13431"
+msgid "Pixel Shaders"
+msgstr "Pikseļu ēnotāji"
+
+msgctxt "#13432"
+msgid "Allow hardware acceleration (VideoToolbox)"
+msgstr "Atļaut aparatūras paātrinājumu (VideoToolbox)"
+
+msgctxt "#13433"
+msgid "Play the next video automatically"
+msgstr "Atskaņot nākamo video automātiski"
+
+msgctxt "#13434"
+msgid "Play only this"
+msgstr "Atskaņot tikai šo"
+
+msgctxt "#13500"
+msgid "A/V sync method"
+msgstr "A/V sinhr. metode"
+
+msgctxt "#13501"
+msgid "Audio clock"
+msgstr "Audio pulkstenis"
+
+msgctxt "#13502"
+msgid "Video clock (Drop/Dupe audio)"
+msgstr "Video pulkstenis (Nomet/piekāš audio)"
+
+msgctxt "#13503"
+msgid "Video clock (Resample audio)"
+msgstr "Video pulkstenis (pārsemplo audio)"
+
+msgctxt "#13505"
+msgid "Resample quality"
+msgstr "Pārsempla kvalitāte"
+
+msgctxt "#13506"
+msgid "Low(fast)"
+msgstr "Zems(ātrs)"
+
+msgctxt "#13507"
+msgid "Medium"
+msgstr "Vidējs"
+
+msgctxt "#13508"
+msgid "High"
+msgstr "Augsts"
+
+msgctxt "#13509"
+msgid "Really high(slow!)"
+msgstr "Patiešām augsts(lēns!)"
+
+msgctxt "#13510"
+msgid "Sync playback to display"
+msgstr "Sinhr. atskaņošanu ar ekrānu"
+
+msgctxt "#13511"
+msgid "Choose art"
+msgstr "Izvēlēties mākslu"
+
+msgctxt "#13512"
+msgid "Current art"
+msgstr "Pašreizējā māksla"
+
+msgctxt "#13513"
+msgid "Remote art"
+msgstr "Attālā māksla"
+
+msgctxt "#13514"
+msgid "Local art"
+msgstr "Lokālā māksla"
+
+msgctxt "#13515"
+msgid "No art"
+msgstr "Nav māksla"
+
+msgctxt "#13516"
+msgid "Add art"
+msgstr "PIevienot mākslu"
+
+msgctxt "#13550"
+msgid "Pause during refresh rate change"
+msgstr "Pauze, samainot pārzīmēšanas ātrumu"
+
+msgctxt "#13551"
+msgid "Off"
+msgstr "Izslēgts"
+
+msgctxt "#13552"
+msgid "%.1f Second"
+msgstr "%.1f sekunde"
+
+msgctxt "#13553"
+msgid "%.1f Seconds"
+msgstr "%.1f sekundes"
+
+msgctxt "#13600"
+msgid "Apple remote"
+msgstr "Apple tālvadība"
+
+msgctxt "#13602"
+msgid "Allow start of XBMC using the remote"
+msgstr "Atļaut ieslēgt XBMC ar tālvadības pulti"
+
+msgctxt "#13603"
+msgid "Sequence delay time"
+msgstr "Secības aizkaves laiks"
+
+msgctxt "#13610"
+msgid "Disabled"
+msgstr "Izslēgts"
+
+msgctxt "#13611"
+msgid "Standard"
+msgstr "Standarta"
+
+msgctxt "#13612"
+msgid "Universal Remote"
+msgstr "Universālā pults"
+
+msgctxt "#13613"
+msgid "Multi Remote (Harmony)"
+msgstr "Multi tālvadība (Harmony)"
+
+msgctxt "#13620"
+msgid "Apple Remote Error"
+msgstr "Apple tālvadības kļūda"
+
+msgctxt "#13621"
+msgid "Apple Remote support could be enabled."
+msgstr "Apple tālvadības atbalstu var ieslēgt."
+
+msgctxt "#14000"
+msgid "Stack"
+msgstr "Ielikt stekā"
+
+msgctxt "#14001"
+msgid "Unstack"
+msgstr "Izjaukt no steka"
+
+msgctxt "#14003"
+msgid "Downloading playlist file..."
+msgstr "Lejupielādēju spēļsaraksta failu..."
+
+msgctxt "#14004"
+msgid "Downloading streams list..."
+msgstr "Lejupielādēju straumju sarakstu..."
+
+msgctxt "#14005"
+msgid "Parsing streams list..."
+msgstr "Parsēju straumju sarakstu..."
+
+msgctxt "#14006"
+msgid "Downloading streams list failed"
+msgstr "Plūsmu saraksta lejupielāde neizdevās"
+
+msgctxt "#14007"
+msgid "Downloading playlist file failed"
+msgstr "Neizdevās lejupielādēt spēļsaraksta failu"
+
+msgctxt "#14009"
+msgid "Games directory"
+msgstr "Spēļu direktorija"
+
+msgctxt "#14010"
+msgid "Auto switch to thumbs based on"
+msgstr "Auto pārslēgšanās uz sīktēliem, pamatojoties uz"
+
+msgctxt "#14011"
+msgid "Enable auto switching to thumbs view"
+msgstr "Ieslēgt auto pārslēgšanu uz sīktēlu skatu"
+
+msgctxt "#14012"
+msgid "- Use large icons"
+msgstr "- Lietot lielas ikonas"
+
+msgctxt "#14013"
+msgid "- Switch based on"
+msgstr "- Pārslēgt pēc"
+
+msgctxt "#14014"
+msgid "- Percentage"
+msgstr "- Procenti"
+
+msgctxt "#14015"
+msgid "No files and at least one thumb"
+msgstr "Nav failu un vismaz viens sīktēls"
+
+msgctxt "#14016"
+msgid "At least one file and thumb"
+msgstr "Vismaz viens fails un sīktēls"
+
+msgctxt "#14017"
+msgid "Percentage of thumbs"
+msgstr "Sīktēlu procenti"
+
+msgctxt "#14018"
+msgid "View options"
+msgstr "Skata opcijas"
+
+msgctxt "#14019"
+msgid "Change area code 1"
+msgstr "Mainīt apgabala kodu 1"
+
+msgctxt "#14020"
+msgid "Change area code 2"
+msgstr "Mainīt apgabala kodu 2"
+
+msgctxt "#14021"
+msgid "Change area code 3"
+msgstr "Mainīt apgabala kodu 3"
+
+msgctxt "#14022"
+msgid "Library"
+msgstr "Bibliotēka"
+
+msgctxt "#14023"
+msgid "No TV"
+msgstr "Nav TV"
+
+msgctxt "#14024"
+msgid "Enter the nearest large town"
+msgstr "Ievadiet tuvāko lielpilsētu"
+
+msgctxt "#14026"
+msgid "Video cache - DVD-ROM"
+msgstr "Video kešatmiņa - DVD-ROM"
+
+msgctxt "#14027"
+msgid "Local Network"
+msgstr "Lokālais tīkls"
+
+msgctxt "#14028"
+msgid "Internet"
+msgstr "Internets"
+
+msgctxt "#14030"
+msgid "Audio cache - DVD-ROM"
+msgstr "Audio kešatmiņa - DVD-ROM"
+
+msgctxt "#14031"
+msgid "Local Network"
+msgstr "Lokālais tīkls"
+
+msgctxt "#14032"
+msgid "Internet"
+msgstr "Internets"
+
+msgctxt "#14034"
+msgid "DVD cache - DVD-ROM"
+msgstr "DVD kešatmiņa - DVD-ROM"
+
+msgctxt "#14035"
+msgid "Local Network"
+msgstr "Lokālais tīkls"
+
+msgctxt "#14036"
+msgid "Services"
+msgstr "Servisi"
+
+msgctxt "#14038"
+msgid "Network settings changed"
+msgstr "īkla iestatījumi mainījušies"
+
+msgctxt "#14039"
+msgid "XBMC requires to restart to change your"
+msgstr "XBMC pieprasa pārstartēt, lai izmainītu"
+
+msgctxt "#14040"
+msgid "network setup.  Would you like to restart now?"
+msgstr "tīkla uzstādījumus. Vai vēlaties pārstartēt tagad?"
+
+msgctxt "#14041"
+msgid "Internet connection bandwidth limitation"
+msgstr "Interneta savienojuma caurlaidības ierobežošana"
+
+msgctxt "#14043"
+msgid "- Shutdown while playing"
+msgstr "- Izslēgšana, kamēr spēlē"
+
+msgctxt "#14044"
+msgid "%i min"
+msgstr "%i min"
+
+msgctxt "#14045"
+msgid "%i sec"
+msgstr "%i sec"
+
+msgctxt "#14046"
+msgid "%i ms"
+msgstr "%i ms"
+
+msgctxt "#14047"
+msgid "%i %%"
+msgstr "%i %%"
+
+msgctxt "#14048"
+msgid "%i kbps"
+msgstr "%i kbps"
+
+msgctxt "#14049"
+msgid "%i kb"
+msgstr "%i kb"
+
+msgctxt "#14050"
+msgid "%i.0 dB"
+msgstr "%i.0 dB"
+
+msgctxt "#14051"
+msgid "Time format"
+msgstr "Laika formāts"
+
+msgctxt "#14052"
+msgid "Date format"
+msgstr "Datuma formāts"
+
+msgctxt "#14053"
+msgid "GUI filters"
+msgstr "GUI filtri"
+
+msgctxt "#14055"
+msgid "Use background scanning"
+msgstr "Izmantot skenēšanu fonā"
+
+msgctxt "#14056"
+msgid "Stop scan"
+msgstr "Apturēt skenēšanu"
+
+msgctxt "#14057"
+msgid "Not possible while scanning for media info"
+msgstr "Nav iespējams, kamēr skenē medija info"
+
+msgctxt "#14058"
+msgid "Film grain effect"
+msgstr "Filmas graudains efekts"
+
+msgctxt "#14059"
+msgid "Search for thumbnails on remote shares"
+msgstr "Meklēt sīktēlus attālos koplietojumos"
+
+msgctxt "#14060"
+msgid "Unknown type cache - Internet"
+msgstr "Nezināma tipa kešatmiņa - internets"
+
+msgctxt "#14061"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#14062"
+msgid "Enter username for"
+msgstr "Ievadiet lietotājvārdu"
+
+msgctxt "#14063"
+msgid "Date & time"
+msgstr "Datums & laiks"
+
+msgctxt "#14064"
+msgid "Set date"
+msgstr "Iestatīt datumu"
+
+msgctxt "#14065"
+msgid "Set time"
+msgstr "Iestatīt laiku"
+
+msgctxt "#14066"
+msgid "Enter the time in 24 hour HH:MM format"
+msgstr "Ievadiet laiku 24 stundu HH:MM formātā"
+
+msgctxt "#14067"
+msgid "Enter the date in DD/MM/YYYY format"
+msgstr "Ievadiet datumu DD/MM/GGGG formātā"
+
+msgctxt "#14068"
+msgid "Enter the IP address"
+msgstr "Ievadiet IP adresi"
+
+msgctxt "#14069"
+msgid "Apply these settings now?"
+msgstr "Vai pielietot šos iestatījumus?"
+
+msgctxt "#14070"
+msgid "Apply changes now"
+msgstr "Tūlīt pielietot izmaiņas"
+
+msgctxt "#14071"
+msgid "Allow file renaming and deletion"
+msgstr "Atļaut pārdēvēt un dzēst failus"
+
+msgctxt "#14074"
+msgid "Set timezone"
+msgstr "Iestatīt laika joslu"
+
+msgctxt "#14075"
+msgid "Use daylight saving time"
+msgstr "Lietot ziemas/vasaras laiku"
+
+msgctxt "#14076"
+msgid "Add to favourites"
+msgstr "Pievienot izlasei"
+
+msgctxt "#14077"
+msgid "Remove from favourites"
+msgstr "Noņemt no izlases"
+
+msgctxt "#14078"
+msgid "Colours"
+msgstr "Krāsas"
+
+msgctxt "#14079"
+msgid "Timezone country"
+msgstr "Laika joslas valsts"
+
+msgctxt "#14080"
+msgid "Timezone"
+msgstr "Laika josla"
+
+msgctxt "#14081"
+msgid "File lists"
+msgstr "Failu saraksti"
+
+msgctxt "#14082"
+msgid "Show EXIF picture information"
+msgstr "Rādīt attēla EXIF informāciju"
+
+msgctxt "#14083"
+msgid "Use a fullscreen window rather than true fullscreen"
+msgstr "Izmantot pilnekrāna logu, nevis patiesi visu ekrānu"
+
+msgctxt "#14084"
+msgid "Queue songs on selection"
+msgstr "Ierindot dziesmas pie atlases"
+
+msgctxt "#14086"
+msgid "Playback"
+msgstr "Atskaņošana"
+
+msgctxt "#14087"
+msgid "DVDs"
+msgstr "DVD diski"
+
+msgctxt "#14088"
+msgid "Play DVDs automatically"
+msgstr "Automātiski atskaņot DVD"
+
+msgctxt "#14089"
+msgid "Font to use for text subtitles"
+msgstr "Teksta subtitru fonts"
+
+msgctxt "#14090"
+msgid "International"
+msgstr "Starptautisks"
+
+msgctxt "#14091"
+msgid "Character set"
+msgstr "Rakstzīmju kopa"
+
+msgctxt "#14092"
+msgid "Debugging"
+msgstr "Atkļūdošana"
+
+msgctxt "#14093"
+msgid "Security"
+msgstr "Drošība"
+
+msgctxt "#14094"
+msgid "Input devices"
+msgstr "Ievadierīces"
+
+msgctxt "#14095"
+msgid "Power saving"
+msgstr "Enerģijas taupīšana"
+
+msgctxt "#14096"
+msgid "Rip"
+msgstr "Izvilkt"
+
+msgctxt "#14097"
+msgid "Audio CD Insert Action"
+msgstr "Audio CD ievietošanas darbība"
+
+msgctxt "#14098"
+msgid "Play"
+msgstr "Atskaņot"
+
+msgctxt "#14099"
+msgid "Eject disc when CD ripping is complete"
+msgstr "Izstumt disku, kad izvilkšana no CD ir pabeigta"
+
+msgctxt "#14100"
+msgid "Stop ripping CD"
+msgstr "Apturēt izvilkšanu no CD"
+
+msgctxt "#15015"
+msgid "Remove"
+msgstr "Noņemt"
+
+msgctxt "#15016"
+msgid "Games"
+msgstr "Spēles"
+
+msgctxt "#15019"
+msgid "Add"
+msgstr "Pievienot"
+
+msgctxt "#15052"
+msgid "Password"
+msgstr "Parole"
+
+msgctxt "#15100"
+msgid "Library"
+msgstr "Bibliotēka"
+
+msgctxt "#15101"
+msgid "Database"
+msgstr "Datubāze"
+
+msgctxt "#15102"
+msgid "* All albums"
+msgstr "* Visi albumi"
+
+msgctxt "#15103"
+msgid "* All artists"
+msgstr "* Visi izpildītāji"
+
+msgctxt "#15104"
+msgid "* All songs"
+msgstr "* Visas dziesmas"
+
+msgctxt "#15105"
+msgid "* All genres"
+msgstr "* Visi žanri"
+
+msgctxt "#15107"
+msgid "Buffering..."
+msgstr "Buferoju..."
+
+msgctxt "#15108"
+msgid "Navigation sounds"
+msgstr "Navigācijas skaņas"
+
+msgctxt "#15109"
+msgid "Skin default"
+msgstr "Ādiņas noklusētie iestatījumi"
+
+msgctxt "#15111"
+msgid "Theme"
+msgstr "Tēma"
+
+msgctxt "#15112"
+msgid "Default theme"
+msgstr "Noklusētā tēma"
+
+msgctxt "#15200"
+msgid "Last.fm"
+msgstr "Last.fm"
+
+msgctxt "#15207"
+msgid "Connected"
+msgstr "Savienots"
+
+msgctxt "#15208"
+msgid "Not connected"
+msgstr "Nav savienots"
+
+msgctxt "#15213"
+msgid "Play using..."
+msgstr "Atskaņo ar..."
+
+msgctxt "#15215"
+msgid "Hide file names in thumbs view"
+msgstr "Slēpt failu nosaukumus sīktēlu skatā"
+
+msgctxt "#15216"
+msgid "Play in party mode"
+msgstr "Atskaņot ballītes režīmā"
+
+msgctxt "#15300"
+msgid "Path not found or invalid"
+msgstr "Ceļš nav atrasts vai ir nederīgs"
+
+msgctxt "#15301"
+msgid "Could not connect to network server"
+msgstr "Nevar savienoties ar tīkla serveri"
+
+msgctxt "#15302"
+msgid "No servers found"
+msgstr "Neviens serveris nav atrasts"
+
+msgctxt "#15303"
+msgid "Workgroup not found"
+msgstr "Darbgrupa nav atrasta"
+
+msgctxt "#15310"
+msgid "Opening multi-path source"
+msgstr "Multi-ceļa avota atvēršana"
+
+msgctxt "#15311"
+msgid "Path:"
+msgstr "Ceļš:"
+
+msgctxt "#16000"
+msgid "General"
+msgstr "Vispārīgi"
+
+msgctxt "#16002"
+msgid "Internet lookup"
+msgstr "Uzmeklēšana internetā"
+
+msgctxt "#16003"
+msgid "Player"
+msgstr "Atskaņotājs"
+
+msgctxt "#16004"
+msgid "Play media from disc"
+msgstr "Atskaņot mediju no diska"
+
+msgctxt "#16008"
+msgid "Enter new title"
+msgstr "Ievadiet jauno nosaukumu"
+
+msgctxt "#16009"
+msgid "Enter the movie name"
+msgstr "Ievadiet filmas nosaukumu"
+
+msgctxt "#16010"
+msgid "Enter the profile name"
+msgstr "Ievadiet profila nosaukumu"
+
+msgctxt "#16011"
+msgid "Enter the album name"
+msgstr "Ievadiet albuma nosaukumu"
+
+msgctxt "#16012"
+msgid "Enter the playlist name"
+msgstr "Ievadiet spēļsaraksta nosaukumu"
+
+msgctxt "#16013"
+msgid "Enter new filename"
+msgstr "Ievadiet jaunu faila nosaukumu"
+
+msgctxt "#16014"
+msgid "Enter folder name"
+msgstr "Ievadiet mapes nosaukumu"
+
+msgctxt "#16015"
+msgid "Enter directory"
+msgstr "Ievadiet direktoriju"
+
+msgctxt "#16016"
+msgid "Available options: %A, %T, %N, %B, %D, %G, %Y, %F, %S"
+msgstr "Pieejamās opcijas: %A, %T, %N, %B, %D, %G, %Y, %F, %S"
+
+msgctxt "#16017"
+msgid "Enter search string"
+msgstr "Ievadiet meklējamo virkni"
+
+msgctxt "#16018"
+msgid "None"
+msgstr "Nav"
+
+msgctxt "#16019"
+msgid "Auto select"
+msgstr "Automātiski atlasīt"
+
+msgctxt "#16020"
+msgid "De-interlace"
+msgstr "De-interlace"
+
+msgctxt "#16021"
+msgid "Bob"
+msgstr "Bob"
+
+msgctxt "#16022"
+msgid "Bob (inverted)"
+msgstr "Bob (invertētais)"
+
+msgctxt "#16024"
+msgid "Cancelling..."
+msgstr "Atceļu..."
+
+msgctxt "#16025"
+msgid "Enter the artist name"
+msgstr "Ievadiet izpildītāju"
+
+msgctxt "#16026"
+msgid "Playback failed"
+msgstr "Neizdevās atskaņot"
+
+msgctxt "#16027"
+msgid "One or more items failed to play."
+msgstr "Neizdevās atskaņot vienu vai vairākus ierakstus."
+
+msgctxt "#16028"
+msgid "Enter value"
+msgstr "Ievadiet vērtību"
+
+msgctxt "#16029"
+msgid "Check the log file for details."
+msgstr "Detalizētu info meklējiet žurnālā."
+
+msgctxt "#16030"
+msgid "Party mode aborted."
+msgstr "Ballītes režīms atsaukts."
+
+msgctxt "#16031"
+msgid "No matching songs in the library."
+msgstr "Bibliotēkā nav atbilstošas dziesmas."
+
+msgctxt "#16033"
+msgid "Could not open database."
+msgstr "Nevar atvērt datubāzi."
+
+msgctxt "#16034"
+msgid "Could not get songs from database."
+msgstr "Nevar iegūt dziesmas no datubāzes."
+
+msgctxt "#16035"
+msgid "Party mode playlist"
+msgstr "Balītes režīma spēļsaraksts"
+
+msgctxt "#16036"
+msgid "De-interlace (Half)"
+msgstr "De-interlace (daļējs)"
+
+msgctxt "#16037"
+msgid "Deinterlace video"
+msgstr "Deinterlace video"
+
+msgctxt "#16038"
+msgid "Deinterlace method"
+msgstr "Deinterlace metode"
+
+msgctxt "#16039"
+msgid "Off"
+msgstr "Izslēgts"
+
+msgctxt "#16040"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#16041"
+msgid "On"
+msgstr "Darbojas"
+
+msgctxt "#16100"
+msgid "All Videos"
+msgstr "Visi video"
+
+msgctxt "#16101"
+msgid "Unwatched"
+msgstr "Neskatītie"
+
+msgctxt "#16102"
+msgid "Watched"
+msgstr "Apskatītie"
+
+msgctxt "#16103"
+msgid "Mark as watched"
+msgstr "Atzīmēt kā apskatītu"
+
+msgctxt "#16104"
+msgid "Mark as unwatched"
+msgstr "Atzīmēt kā neskatītu"
+
+msgctxt "#16105"
+msgid "Edit title"
+msgstr "Labot nosaukumu"
+
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Pārvaldīt..."
+
+msgctxt "#16200"
+msgid "Operation was aborted"
+msgstr "Operāciju atsauca"
+
+msgctxt "#16201"
+msgid "Copy failed"
+msgstr "Neizdevās kopēt"
+
+msgctxt "#16202"
+msgid "Failed to copy at least one file"
+msgstr "Neizdevās kopēt vismaz vienu failu"
+
+msgctxt "#16203"
+msgid "Move failed"
+msgstr "Neizdevās pārvietot"
+
+msgctxt "#16204"
+msgid "Failed to move at least one file"
+msgstr "Neizdevās pārvietot vismaz vienu failu"
+
+msgctxt "#16205"
+msgid "Delete failed"
+msgstr "Neizdevās dzēst"
+
+msgctxt "#16206"
+msgid "Failed to delete at least one file"
+msgstr "Neizdevās dzēst vismaz vienu failu"
+
+msgctxt "#16300"
+msgid "Video scaling method"
+msgstr "Video mērogošanas metode"
+
+msgctxt "#16301"
+msgid "Nearest neighbour"
+msgstr "Tuvākais kaimiņš"
+
+msgctxt "#16302"
+msgid "Bilinear"
+msgstr "Bilineāri"
+
+msgctxt "#16303"
+msgid "Bicubic"
+msgstr "Bikubiska"
+
+msgctxt "#16304"
+msgid "Lanczos2"
+msgstr "Lanczos2"
+
+msgctxt "#16305"
+msgid "Lanczos3"
+msgstr "Lanczos3"
+
+msgctxt "#16306"
+msgid "Sinc8"
+msgstr "Sinc8"
+
+msgctxt "#16307"
+msgid "Bicubic (software)"
+msgstr "Bikubiski (programmatūra)"
+
+msgctxt "#16308"
+msgid "Lanczos (software)"
+msgstr "Lanczos (programmatūra)"
+
+msgctxt "#16309"
+msgid "Sinc (software)"
+msgstr "Sinc (programmatūra)"
+
+msgctxt "#16310"
+msgid "Temporal"
+msgstr "Pagaidu"
+
+msgctxt "#16311"
+msgid "Temporal/Spatial"
+msgstr "Pagaidu/Telpiski"
+
+msgctxt "#16312"
+msgid "(VDPAU)Noise Reduction"
+msgstr "(VDPAU)Trokšņa samazināšana"
+
+msgctxt "#16313"
+msgid "(VDPAU)Sharpness"
+msgstr "(VDPAU)Asums"
+
+msgctxt "#16314"
+msgid "Inverse Telecine"
+msgstr "Inversais telekino"
+
+msgctxt "#16316"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "#16317"
+msgid "Temporal (Half)"
+msgstr "Pagaidu (daļējs)"
+
+msgctxt "#16318"
+msgid "Temporal/Spatial (Half)"
+msgstr "Pagaidu/Telpiski (daļējs)"
+
+msgctxt "#16319"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "#16320"
+msgid "DXVA Bob"
+msgstr "DXVA Bob"
+
+msgctxt "#16321"
+msgid "DXVA Best"
+msgstr "DXVA labākais"
+
+msgctxt "#16322"
+msgid "Spline36"
+msgstr "Spline36"
+
+msgctxt "#16324"
+msgid "Software Blend"
+msgstr "Programmatūras Blend"
+
+msgctxt "#16325"
+msgid "VDPAU - Bob"
+msgstr "VDPAU - Bob"
+
+msgctxt "#16400"
+msgid "Post-processing"
+msgstr "Pēcapstrāde"
+
+msgctxt "#17500"
+msgid "Display sleep timeout"
+msgstr "Ekrāna aizmigšanas noilgums"
+
+msgctxt "#17997"
+msgid "%i MByte"
+msgstr "%i MB"
+
+msgctxt "#17998"
+msgid "%i hours"
+msgstr "%i stundas"
+
+msgctxt "#17999"
+msgid "%i days"
+msgstr "%i dienas"
+
+msgctxt "#19000"
+msgid "Switch to channel"
+msgstr "Pārslēgt uz kanālu"
+
+msgctxt "#19001"
+msgid "Separate the search words by using AND, OR and/or NOT."
+msgstr "Atdaliet meklēšanas vārdus ar AND, OR un/vai NOT,"
+
+msgctxt "#19002"
+msgid "or use phrases to find an exact match, like \"The wizard of Oz\"."
+msgstr "vai izmantojiet frāzes, lai atrastu precīzu atbilstību, piemēram, \"The wizard of Oz\"."
+
+msgctxt "#19003"
+msgid "Find similar programs"
+msgstr "Atrast līdzīgas programmas"
+
+msgctxt "#19004"
+msgid "Importing EPG from clients"
+msgstr "Importē klientu EPG"
+
+msgctxt "#19005"
+msgid "PVR stream information"
+msgstr "PVR straumes informācija"
+
+msgctxt "#19006"
+msgid "Receiving device"
+msgstr "Uztveršanas ierīce"
+
+msgctxt "#19007"
+msgid "Device status"
+msgstr "Ierīces statuss"
+
+msgctxt "#19008"
+msgid "Signal quality"
+msgstr "Signāla kvalitāte"
+
+msgctxt "#19009"
+msgid "SNR"
+msgstr "SNR"
+
+msgctxt "#19010"
+msgid "BER"
+msgstr "BER"
+
+msgctxt "#19011"
+msgid "UNC"
+msgstr "UNC"
+
+msgctxt "#19012"
+msgid "PVR Backend"
+msgstr "PVR aizmugursistēma"
+
+msgctxt "#19013"
+msgid "Free to air"
+msgstr "Bezmaksas FTA"
+
+msgctxt "#19014"
+msgid "Fixed"
+msgstr "Fiksēts"
+
+msgctxt "#19015"
+msgid "Encryption"
+msgstr "Šifrēšana"
+
+msgctxt "#19016"
+msgid "PVR Backend %i - %s"
+msgstr "PVR aizmugursistēma %i - %s"
+
+msgctxt "#19017"
+msgid "TV recordings"
+msgstr "TV ieraksti"
+
+msgctxt "#19019"
+msgid "Channels"
+msgstr "Kanāli"
+
+msgctxt "#19020"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19021"
+msgid "Radio"
+msgstr "Radio"
+
+msgctxt "#19022"
+msgid "Hidden"
+msgstr "Slēpts"
+
+msgctxt "#19023"
+msgid "TV channels"
+msgstr "TV kanāli"
+
+msgctxt "#19024"
+msgid "Radio channels"
+msgstr "Radio kanāli"
+
+msgctxt "#19025"
+msgid "Upcoming recordings"
+msgstr "Gaidāmie ieraksti"
+
+msgctxt "#19026"
+msgid "Add timer..."
+msgstr "Pievieno taimeri..."
+
+msgctxt "#19027"
+msgid "No search results"
+msgstr "Nav meklēšanas rezultāti"
+
+msgctxt "#19028"
+msgid "No EPG entries"
+msgstr "Nav EPG ieraksti"
+
+msgctxt "#19029"
+msgid "Channel"
+msgstr "Kanāls"
+
+msgctxt "#19030"
+msgid "Now"
+msgstr "Pašlaik"
+
+msgctxt "#19031"
+msgid "Next"
+msgstr "Nākamais"
+
+msgctxt "#19032"
+msgid "Timeline"
+msgstr "Laika skala"
+
+msgctxt "#19033"
+msgid "Information"
+msgstr "Informācija"
+
+msgctxt "#19034"
+msgid "Already started recording on this channel"
+msgstr "Šī kanāla ierakstīšana jau sākta"
+
+msgctxt "#19035"
+msgid "%s could not be played. Check the log for details."
+msgstr "%s nevar atskaņot. Detaļas redzamas žurnālā."
+
+msgctxt "#19036"
+msgid "This recording cannot be played. Check the log for details."
+msgstr "Šo ierakstu nevar atskaņot. Detaļas redzamas žurnālā."
+
+msgctxt "#19037"
+msgid "Show signal quality"
+msgstr "Rādīt signāla kvalitāti"
+
+msgctxt "#19038"
+msgid "Not supported by the PVR backend."
+msgstr "PVR aizmugursistēma neatbalsta."
+
+msgctxt "#19039"
+msgid "Are you sure you want to hide this channel?"
+msgstr "Vai tiešām paslēpt šo kanālu?"
+
+msgctxt "#19040"
+msgid "Timer"
+msgstr "Taimeris"
+
+msgctxt "#19041"
+msgid "Are you sure you want to rename this recording?"
+msgstr "Vai tiešām pārdēvēt šo ierakstu?"
+
+msgctxt "#19042"
+msgid "Are you sure you want to rename this timer?"
+msgstr "Vai tiešām pārdēvēt šo taimeri?"
+
+msgctxt "#19043"
+msgid "Recording"
+msgstr "Ierakstu"
+
+msgctxt "#19044"
+msgid "Please check your configuration or check the log for details."
+msgstr "Lūdzu, pārbaudiet konfigurāciju vai skatiet detaļas žurnālā."
+
+msgctxt "#19045"
+msgid "No PVR clients have been started yet. Wait for the PVR clients to start up or check the log for details."
+msgstr "PVR klienti vēl nav ieslēgušies. Gaidiet PVR klientu ieslēgšanos vai skatiet detaļas žurnālā."
+
+msgctxt "#19046"
+msgid "New channel"
+msgstr "Jauns kanāls"
+
+msgctxt "#19047"
+msgid "Programme info"
+msgstr "Programmas info"
+
+msgctxt "#19048"
+msgid "Group management"
+msgstr "Grupu pārvaldība"
+
+msgctxt "#19049"
+msgid "Show channel"
+msgstr "Rādīt kanālu"
+
+msgctxt "#19050"
+msgid "Show visible channels"
+msgstr "Rādīt redzamos kanālus"
+
+msgctxt "#19051"
+msgid "Show hidden channels"
+msgstr "Rādīt slēptos kanālus"
+
+msgctxt "#19052"
+msgid "Move channel to:"
+msgstr "Pārvietot kanālu uz:"
+
+msgctxt "#19053"
+msgid "Recording information"
+msgstr "Ierakstu informācija"
+
+msgctxt "#19054"
+msgid "Hide channel"
+msgstr "Slēpt kanālu"
+
+msgctxt "#19055"
+msgid "No information available"
+msgstr "Informācija nav pieejama"
+
+msgctxt "#19056"
+msgid "New timer"
+msgstr "Jauns taimeris"
+
+msgctxt "#19057"
+msgid "Edit timer"
+msgstr "Labot taimeri"
+
+msgctxt "#19058"
+msgid "Timer enabled"
+msgstr "Taimeris palaists"
+
+msgctxt "#19059"
+msgid "Stop recording"
+msgstr "Apturēt ierakstīšanu"
+
+msgctxt "#19060"
+msgid "Delete timer"
+msgstr "Dzēst taimeri"
+
+msgctxt "#19061"
+msgid "Add timer"
+msgstr "Uzstādīt taimeri"
+
+msgctxt "#19062"
+msgid "Sort by: Channel"
+msgstr "Kārtot pēc: kanāla"
+
+msgctxt "#19063"
+msgid "Go to begin"
+msgstr "Uz sākumu"
+
+msgctxt "#19064"
+msgid "Go to end"
+msgstr "Uz beigām"
+
+msgctxt "#19065"
+msgid "Default EPG window"
+msgstr "Noklusētais EPG logs"
+
+msgctxt "#19067"
+msgid "This event is already being recorded."
+msgstr "Šis pasākumu jau ieraksta."
+
+msgctxt "#19068"
+msgid "This recording could not be deleted. Check the log for details."
+msgstr "Šo ierakstu nevar izdzēst. Detaļas redzamas žurnālā."
+
+msgctxt "#19069"
+msgid "EPG"
+msgstr "EPG"
+
+msgctxt "#19071"
+msgid "EPG update interval"
+msgstr "EPG atjaunināšanas intervāls"
+
+msgctxt "#19072"
+msgid "Do not store the EPG in the database"
+msgstr "Nesaglabāt EPG datubāzē"
+
+msgctxt "#19073"
+msgid "Delay channel switch"
+msgstr "Aizkavēt kanālu pārslēgšanos"
+
+msgctxt "#19074"
+msgid "Active:"
+msgstr "Aktīvs:"
+
+msgctxt "#19075"
+msgid "Name:"
+msgstr "Vārds:"
+
+msgctxt "#19076"
+msgid "Folder:"
+msgstr "Mape:"
+
+msgctxt "#19077"
+msgid "Radio:"
+msgstr "Radio:"
+
+msgctxt "#19078"
+msgid "Channel:"
+msgstr "Kanāls:"
+
+msgctxt "#19079"
+msgid "Day:"
+msgstr "Diena:"
+
+msgctxt "#19080"
+msgid "Begin:"
+msgstr "Sākas:"
+
+msgctxt "#19081"
+msgid "End:"
+msgstr "Beidzas:"
+
+msgctxt "#19082"
+msgid "Priority:"
+msgstr "Prioritāte:"
+
+msgctxt "#19083"
+msgid "Lifetime (days):"
+msgstr "Mūžs (dienas):"
+
+msgctxt "#19084"
+msgid "First day:"
+msgstr "Pirmā diena:"
+
+msgctxt "#19085"
+msgid "Unknown channel %u"
+msgstr "Nezināms kanāls %u"
+
+msgctxt "#19086"
+msgid "Mo-__-__-__-__-__-__"
+msgstr "Pr-__-__-__-__-__-__"
+
+msgctxt "#19087"
+msgid "__-Tu-__-__-__-__-__"
+msgstr "__-Ot-__-__-__-__-__"
+
+msgctxt "#19088"
+msgid "__-__-We-__-__-__-__"
+msgstr "__-__-Tr-__-__-__-__"
+
+msgctxt "#19089"
+msgid "__-__-__-Th-__-__-__"
+msgstr "__-__-__-Ce-__-__-__"
+
+msgctxt "#19090"
+msgid "__-__-__-__-Fr-__-__"
+msgstr "__-__-__-__-Pk-__-__"
+
+msgctxt "#19091"
+msgid "__-__-__-__-__-Sa-__"
+msgstr "__-__-__-__-__-Se-__"
+
+msgctxt "#19092"
+msgid "__-__-__-__-__-__-Su"
+msgstr "__-__-__-__-__-__-Sv"
+
+msgctxt "#19093"
+msgid "Mo-Tu-We-Th-Fr-__-__"
+msgstr "Pr-Ot-Tr-Ce-Pk-__-__"
+
+msgctxt "#19094"
+msgid "Mo-Tu-We-Th-Fr-Sa-__"
+msgstr "Pr-Ot-Tr-Ce-Pk-Se-__"
+
+msgctxt "#19095"
+msgid "Mo-Tu-We-Th-Fr-Sa-Su"
+msgstr "Pr-Ot-Tr-Ce-Pk-Se-Sv"
+
+msgctxt "#19096"
+msgid "__-__-__-__-__-Sa-Su"
+msgstr "__-__-__-__-__-Se-Sv"
+
+msgctxt "#19097"
+msgid "Enter the name for the recording"
+msgstr "Ievadiet ieraksta nosaukumu"
+
+msgctxt "#19098"
+msgid "Warning"
+msgstr "Brīdinājums"
+
+msgctxt "#19102"
+msgid "Please switch to another channel."
+msgstr "Lūdzu, pārslēdziet citu kanālu."
+
+msgctxt "#19104"
+msgid "Enter the name of the folder for the recording"
+msgstr "Ievadiet ierakstu mapes nosaukumu"
+
+msgctxt "#19106"
+msgid "Next timer on"
+msgstr "Nākamais taimeris"
+
+msgctxt "#19107"
+msgid "at"
+msgstr "ar"
+
+msgctxt "#19109"
+msgid "Couldn't save timer. Check the log for details."
+msgstr "Nevar saglabāt taimeri. Detaļas redzamas žurnālā."
+
+msgctxt "#19110"
+msgid "An unexpected error occurred. Try again later or check the log for details."
+msgstr "Radās negaidīta kļūda. Mēģiniet vēlāk vēlreiz vai skatiet detaļas žurnālā."
+
+msgctxt "#19111"
+msgid "PVR backend error. Check the log for details."
+msgstr "PVR aizmugursistēmas kļūda. Detaļas redzamas žurnālā."
+
+msgctxt "#19114"
+msgid "Version"
+msgstr "Versija"
+
+msgctxt "#19115"
+msgid "Address"
+msgstr "Adrese"
+
+msgctxt "#19116"
+msgid "Disksize"
+msgstr "Diskizmērs"
+
+msgctxt "#19117"
+msgid "Search for channels"
+msgstr "Meklēt kanālus"
+
+msgctxt "#19118"
+msgid "Cannot use PVR functions while searching."
+msgstr "Meklēšanas laikā PVR funkcijas nevar izmantot."
+
+msgctxt "#19119"
+msgid "On which server you want to search?"
+msgstr "Kurā serverī vēlaties meklēt?"
+
+msgctxt "#19120"
+msgid "Client number"
+msgstr "Klienta numurs"
+
+msgctxt "#19121"
+msgid "Avoid repeats"
+msgstr "Izvairīties no atkārtošanās"
+
+msgctxt "#19122"
+msgid "This timer is still recording. Are you sure you want to delete this timer?"
+msgstr "Šim taimerim Joprojām notiek ieraksts. Vai tiešām vēlaties dzēst šo taimeri?"
+
+msgctxt "#19123"
+msgid "Free to air channels only"
+msgstr "Tikai bezmaksas pārraidītie kanāli"
+
+msgctxt "#19124"
+msgid "Ignore present timers"
+msgstr "Ignorēt esošos taimerus"
+
+msgctxt "#19125"
+msgid "Ignore present recordings"
+msgstr "Ignorēt esošos ierakstus"
+
+msgctxt "#19126"
+msgid "Start time"
+msgstr "Sākuma laiks"
+
+msgctxt "#19127"
+msgid "End time"
+msgstr "Beigu laiks"
+
+msgctxt "#19128"
+msgid "Start date"
+msgstr "Sākuma datums"
+
+msgctxt "#19129"
+msgid "End date"
+msgstr "Beigu datums"
+
+msgctxt "#19130"
+msgid "Minimum duration"
+msgstr "Minimālais ilgums"
+
+msgctxt "#19131"
+msgid "Maximum duration"
+msgstr "Maksimālais ilgums"
+
+msgctxt "#19132"
+msgid "Include unknown genres"
+msgstr "Ietver nezināmus žanrus"
+
+msgctxt "#19133"
+msgid "Search string"
+msgstr "Meklēšanas virkne"
+
+msgctxt "#19134"
+msgid "Include description"
+msgstr "Apraksts iekļauj"
+
+msgctxt "#19135"
+msgid "Case sensitive"
+msgstr "Reģistrjūtīgs"
+
+msgctxt "#19136"
+msgid "Channel unavailable"
+msgstr "Kanāls nav pieejams"
+
+msgctxt "#19137"
+msgid "No groups defined"
+msgstr "Grupas nav definētas"
+
+msgctxt "#19138"
+msgid "Please create a group first"
+msgstr "Lūdzu, vispirms izveidojiet grupu"
+
+msgctxt "#19139"
+msgid "Name of the new group"
+msgstr "Jaunās grupas nosaukums"
+
+msgctxt "#19141"
+msgid "Group"
+msgstr "Grupa"
+
+msgctxt "#19142"
+msgid "Search guide"
+msgstr "Meklēšanas ceļvedis"
+
+msgctxt "#19143"
+msgid "Group management"
+msgstr "Grupu pārvaldība"
+
+msgctxt "#19144"
+msgid "No groups defined"
+msgstr "Grupas nav definētas"
+
+msgctxt "#19145"
+msgid "Grouped"
+msgstr "Grupēti"
+
+msgctxt "#19146"
+msgid "Groups"
+msgstr "Grupas"
+
+msgctxt "#19147"
+msgid "The PVR backend does not support this action. Check the log for details."
+msgstr "PVR aizmugursistēma neatbalsta šo darbību. Detaļas redzamas žurnālā."
+
+msgctxt "#19148"
+msgid "Channel"
+msgstr "Kanāls"
+
+msgctxt "#19149"
+msgid "Mo"
+msgstr "Pr"
+
+msgctxt "#19150"
+msgid "Tu"
+msgstr "Ot"
+
+msgctxt "#19151"
+msgid "We"
+msgstr "Tr"
+
+msgctxt "#19152"
+msgid "Th"
+msgstr "Ce"
+
+msgctxt "#19153"
+msgid "Fr"
+msgstr "Pk"
+
+msgctxt "#19154"
+msgid "Sa"
+msgstr "Se"
+
+msgctxt "#19155"
+msgid "Su"
+msgstr "Sv"
+
+msgctxt "#19156"
+msgid "from"
+msgstr "no"
+
+msgctxt "#19157"
+msgid "Next recording"
+msgstr "Nākamais ieraksts"
+
+msgctxt "#19158"
+msgid "Currently recording"
+msgstr "Pašreiz notiek ieraksts"
+
+msgctxt "#19159"
+msgid "from"
+msgstr "no"
+
+msgctxt "#19160"
+msgid "to"
+msgstr "uz"
+
+msgctxt "#19162"
+msgid "Recording active"
+msgstr "Aktivizēta ierakstīšana"
+
+msgctxt "#19163"
+msgid "Recordings"
+msgstr "Ieraksti"
+
+msgctxt "#19164"
+msgid "Cannot start recording. Check the log for details."
+msgstr "Nevar sākt ierakstu. Detaļas redzamas žurnālā."
+
+msgctxt "#19165"
+msgid "Switch"
+msgstr "Slēdzis"
+
+msgctxt "#19166"
+msgid "PVR information"
+msgstr "PVR informācija"
+
+msgctxt "#19167"
+msgid "Scan for missing icons"
+msgstr "Skenēt trūkstošās ikonas"
+
+msgctxt "#19169"
+msgid "Hide video information box"
+msgstr "Slēpt video informācijas lodziņu"
+
+msgctxt "#19170"
+msgid "Timeout when starting playback"
+msgstr "Noilgums, pēc kura sākt spēlēt"
+
+msgctxt "#19172"
+msgid "Instant recording duration"
+msgstr "Tūlītējā ieraksta ilgums"
+
+msgctxt "#19173"
+msgid "Default recording priority"
+msgstr "Noklusētā ierakstīšanas prioritāte"
+
+msgctxt "#19174"
+msgid "Default recording lifetime"
+msgstr "Noklusētais ieraksta kalpošanas laiks"
+
+msgctxt "#19175"
+msgid "Margin at the start of a recording"
+msgstr "Robeža ieraksta sākumā"
+
+msgctxt "#19176"
+msgid "Margin at the end of a recording"
+msgstr "Robeža ieraksta beigās"
+
+msgctxt "#19177"
+msgid "Playback"
+msgstr "Atskaņošana"
+
+msgctxt "#19178"
+msgid "Show channel information when switching channels"
+msgstr "Rādīt kanāla informāciju, pārslēdzot kanālus"
+
+msgctxt "#19179"
+msgid "Automatically hide channel information"
+msgstr "Automātiski paslēpt kanāla informāciju"
+
+msgctxt "#19180"
+msgid "TV"
+msgstr "TV"
+
+msgctxt "#19181"
+msgid "Menu/OSD"
+msgstr "Izvēlne/OSD"
+
+msgctxt "#19182"
+msgid "Days to display in the EPG"
+msgstr "Redzamais dienu skaits EPG"
+
+msgctxt "#19184"
+msgid "Channel information duration"
+msgstr "Kanāla informācijas ilgums"
+
+msgctxt "#19185"
+msgid "Reset the PVR database"
+msgstr "Atiestatīt PVR datubāzi"
+
+msgctxt "#19186"
+msgid "All data in the PVR database is being erased"
+msgstr "Visi dati PVR datubāzē tiek dzēsti"
+
+msgctxt "#19187"
+msgid "Reset the EPG database"
+msgstr "Atiestatīt EPG datubāzi"
+
+msgctxt "#19188"
+msgid "EPG is being reset"
+msgstr "Notiek EPG atiestatīšana"
+
+msgctxt "#19189"
+msgid "Continue last channel on startup"
+msgstr "Uzsākot turpināt pēdējo skatīto kanālu"
+
+msgctxt "#19191"
+msgid "PVR service"
+msgstr "PVR serviss"
+
+msgctxt "#19192"
+msgid "None of the connected PVR backends supports scanning for channels."
+msgstr "Neviena no pieslēgtajām PVR aizmugursistēmām neatbalsta kanālu skenēšanu."
+
+msgctxt "#19193"
+msgid "The channel scan cannot be started. Check the log for details."
+msgstr "Kanālu skenēšanu nevar sākt. Detaļas redzamas žurnālā."
+
+msgctxt "#19194"
+msgid "Continue?"
+msgstr "Turpināt?"
+
+msgctxt "#19195"
+msgid "Client actions"
+msgstr "Klienta darbības"
+
+msgctxt "#19196"
+msgid "PVR client specific actions"
+msgstr "PVR klienta specifiskās darbības"
+
+msgctxt "#19197"
+msgid "Recording started on: %s"
+msgstr "Iesākas ieraksts no: %s"
+
+msgctxt "#19198"
+msgid "Recording finished on: %s"
+msgstr "Pabeigts ieraksts no: %s"
+
+msgctxt "#19199"
+msgid "Channel manager"
+msgstr "Kanālu pārvaldnieks"
+
+msgctxt "#19200"
+msgid "EPG source:"
+msgstr "EPG avots:"
+
+msgctxt "#19201"
+msgid "Channel name:"
+msgstr "Kanāla nosaukums:"
+
+msgctxt "#19202"
+msgid "Channel icon:"
+msgstr "Kanāla ikona:"
+
+msgctxt "#19203"
+msgid "Edit channel"
+msgstr "Labot kanālu"
+
+msgctxt "#19204"
+msgid "New channel"
+msgstr "Jauns kanāls"
+
+msgctxt "#19205"
+msgid "Group management"
+msgstr "Grupu pārvaldība"
+
+msgctxt "#19206"
+msgid "Activate EPG:"
+msgstr "Aktivizēt EPG:"
+
+msgctxt "#19207"
+msgid "Group:"
+msgstr "Grupa:"
+
+msgctxt "#19208"
+msgid "Enter the name of the new channel"
+msgstr "Ievadiet jaunā kanāla nosaukumu"
+
+msgctxt "#19209"
+msgid "XBMC virtual backend"
+msgstr "XBMC virtuālā aizmugursistēma"
+
+msgctxt "#19210"
+msgid "Client"
+msgstr "Klients"
+
+msgctxt "#19211"
+msgid "Delete channel"
+msgstr "Dzēst kanālu"
+
+msgctxt "#19212"
+msgid "This list contains changes"
+msgstr "Šis saraksts satur izmaiņas"
+
+msgctxt "#19213"
+msgid "Select backend"
+msgstr "Izvēlēties aizmugursistēmu"
+
+msgctxt "#19214"
+msgid "Enter a valid URL for the new channel"
+msgstr "Ievadiet derīgu vietrādi URL jaunajam kanālam"
+
+msgctxt "#19215"
+msgid "The PVR backend does not support timers."
+msgstr "PVR aizmugursistēma neatbalsta taimerus."
+
+msgctxt "#19216"
+msgid "All radio channels"
+msgstr "Visi radio kanāli"
+
+msgctxt "#19217"
+msgid "All TV channels"
+msgstr "Visi TV kanāli"
+
+msgctxt "#19218"
+msgid "Visible"
+msgstr "Redzams"
+
+msgctxt "#19219"
+msgid "Ungrouped channels"
+msgstr "Negrupēti kanāli"
+
+msgctxt "#19220"
+msgid "Channels in"
+msgstr "Kanāli no"
+
+msgctxt "#19221"
+msgid "Synchronise channel groups with backends"
+msgstr "Sinhronizēt kanālu grupas ar aizmugursistēmām"
+
+msgctxt "#19222"
+msgid "EPG"
+msgstr "EPG"
+
+msgctxt "#19224"
+msgid "Recording aborted"
+msgstr "Ierakstīšana atcelta"
+
+msgctxt "#19225"
+msgid "Recording scheduled"
+msgstr "Ierakstīšana ieplānota"
+
+msgctxt "#19226"
+msgid "Recording started"
+msgstr "Ierakstīšana sākta"
+
+msgctxt "#19227"
+msgid "Recording completed"
+msgstr "Ierakstīšana pabeigta"
+
+msgctxt "#19228"
+msgid "Recording deleted"
+msgstr "Ieraksts izdzēsts"
+
+msgctxt "#19229"
+msgid "Close channel OSD after switching channels"
+msgstr "Aizvērt kanāla OSD pēc kanālu pārslēgšanas"
+
+msgctxt "#19231"
+msgid "Always use the channel order from the backend(s)"
+msgstr "Vienmēr izmantot kanālu secību no aizmugursistēmas(ām)"
+
+msgctxt "#19232"
+msgid "Clear search results"
+msgstr "Notīrīt meklēšanas rezultātus"
+
+msgctxt "#19233"
+msgid "Display a notification on timer updates"
+msgstr "Rādīt paziņojumu par taimera atjaunināšanu"
+
+msgctxt "#19235"
+msgid "PVR manager is starting up"
+msgstr "PVR pārvaldnieks ieslēdzas"
+
+msgctxt "#19236"
+msgid "Loading channels from clients"
+msgstr "Ielādē kanālus no klientiem"
+
+msgctxt "#19237"
+msgid "Loading timers from clients"
+msgstr "Ielādē taimerus no klientiem"
+
+msgctxt "#19238"
+msgid "Loading recordings from clients"
+msgstr "Ielādē ierakstus no klientiem"
+
+msgctxt "#19239"
+msgid "Starting background threads"
+msgstr "Ieslēdz fona pavedienus"
+
+msgctxt "#19241"
+msgid "The PVR manager has been enabled without any"
+msgstr "PVR pārvaldnieks ir ieslēgts bez ieslēgtiem PVR "
+
+msgctxt "#19243"
+msgid "in order to use the PVR functionality."
+msgstr "pielikumiem. Jāieslēdz vismaz viens pielikums."
+
+msgctxt "#19244"
+msgid "Backend idle time"
+msgstr "Aizmugursistēmas gaidīšanas laiks"
+
+msgctxt "#19245"
+msgid "Set wakeup command (cmd [timestamp])"
+msgstr "Iestatīt atmodināšanas komandu (cmd [timestamp])"
+
+msgctxt "#19246"
+msgid "Wakeup before recording"
+msgstr "Pamosties pirms ierakstīšanas"
+
+msgctxt "#19247"
+msgid "Daily wakeup"
+msgstr "Ikdienas pamošanās"
+
+msgctxt "#19248"
+msgid "Daily wakeup time (HH:MM:SS)"
+msgstr "Ikdienas pamošanās laiks (HH:MM:SS)"
+
+msgctxt "#19249"
+msgid "Filter channels"
+msgstr "Filtrēt kanālus"
+
+msgctxt "#19250"
+msgid "Loading EPG from database"
+msgstr "Ielādē EPG no datubāzes"
+
+msgctxt "#19251"
+msgid "Update EPG information"
+msgstr "Atjauno EPG informāciju"
+
+msgctxt "#19252"
+msgid "Schedule EPG update for this channel?"
+msgstr "Vai ieplānot EPG atjauninājumu šim kanālam?"
+
+msgctxt "#19253"
+msgid "EPG update scheduled for channel"
+msgstr "EPG atjauninājums kanālam ieplānots"
+
+msgctxt "#19254"
+msgid "EPG update failed for channel"
+msgstr "EPG atjaunināšana kanālam neizdevās"
+
+msgctxt "#19255"
+msgid "Start recording"
+msgstr "Sākt ierakstīšanu"
+
+msgctxt "#19256"
+msgid "Stop recording"
+msgstr "Apturēt ierakstīšanu"
+
+msgctxt "#19257"
+msgid "Lock channel"
+msgstr "Aizslēgts kanāls"
+
+msgctxt "#19258"
+msgid "Unlock channel"
+msgstr "Atbloķēt kanālu"
+
+msgctxt "#19259"
+msgid "Parental control"
+msgstr "Vecāku kontrole"
+
+msgctxt "#19260"
+msgid "Unlock duration"
+msgstr "Notiek atbloķēšana"
+
+msgctxt "#19261"
+msgid "Change PIN"
+msgstr "Mainīt PIN"
+
+msgctxt "#19262"
+msgid "Parental control. Enter PIN:"
+msgstr "Vecāku kontrole. Ievadiet PIN:"
+
+msgctxt "#19263"
+msgid "Locked channel. Enter PIN:"
+msgstr "Aizslēgts kanāls. Ievadiet PIN:"
+
+msgctxt "#19264"
+msgid "Incorrect PIN"
+msgstr "Nepareizs PIN"
+
+msgctxt "#19265"
+msgid "The entered PIN number was incorrect."
+msgstr "Ievadītais PIN kods bija nepareizs."
+
+msgctxt "#19266"
+msgid "Parental locked"
+msgstr "Vecāku slēdzene"
+
+msgctxt "#19267"
+msgid "Parental locked:"
+msgstr "Vecāku slēdzene:"
+
+msgctxt "#19268"
+msgid "Do not show 'no information available' labels"
+msgstr "Nerādīt 'informācija nav pieejama' etiķetes"
+
+msgctxt "#19269"
+msgid "Do not show 'connection lost' warnings"
+msgstr "Nerādīt brīdinājumus par zaudētu savienojumu"
+
+msgctxt "#19270"
+msgid "* All recordings"
+msgstr "* Visi ieraksti"
+
+msgctxt "#19272"
+msgid "You need a tuner, backend software, and an"
+msgstr "Jums nepieciešams uztvērējs, aizmugursistēmas programma un"
+
+msgctxt "#19274"
+msgid "Please visit xbmc.org/pvr to learn more."
+msgstr "Lūdzu, apmeklējiet xbmc.org/pvr, lai uzzinātu vairāk."
+
+msgctxt "#19275"
+msgid "Conflict warning"
+msgstr "Konflikta brīdinājums"
+
+msgctxt "#19276"
+msgid "Conflict error"
+msgstr "Konflikta kļūda"
+
+msgctxt "#19277"
+msgid "Recording conflict"
+msgstr "Ierakstīšanas konflikts"
+
+msgctxt "#19278"
+msgid "Recording error"
+msgstr "Ierakstīšanas kļūda"
+
+msgctxt "#19279"
+msgid "Client specific"
+msgstr "Klientam specifiskais"
+
+msgctxt "#19280"
+msgid "Client specific settings"
+msgstr "Klienta specifiskie iestatījumi"
+
+msgctxt "#19281"
+msgid "Confirm channel switches by pressing OK"
+msgstr "Apstiprināt kanālu pārslēgšanu, nospiežot OK"
+
+msgctxt "#19499"
+msgid "Other/Unknown"
+msgstr "Cits/nezināms"
+
+msgctxt "#19500"
+msgid "Movie/Drama"
+msgstr "Filma/drāma"
+
+msgctxt "#19501"
+msgid "Detective/Thriller"
+msgstr "Detektīvs/trilleris"
+
+msgctxt "#19502"
+msgid "Adventure/Western/War"
+msgstr "Piedzīvojumu/vesterns/kara"
+
+msgctxt "#19503"
+msgid "Science Fiction/Fantasy/Horror"
+msgstr "Zin.fantastika/fantāzija/šausmu"
+
+msgctxt "#19504"
+msgid "Comedy"
+msgstr "Komēdija"
+
+msgctxt "#19505"
+msgid "Soap/Melodrama/Folkloric"
+msgstr "Ziepene/melodrāma/folklora"
+
+msgctxt "#19506"
+msgid "Romance"
+msgstr "Romantika"
+
+msgctxt "#19507"
+msgid "Serious/Classical/Religious/Historical Movie/Drama"
+msgstr "Nopietna/klasiska/reliģiska/vēsturiska/drāma"
+
+msgctxt "#19508"
+msgid "Adult Movie/Drama"
+msgstr "Pieaugušo filma/drāma"
+
+msgctxt "#19516"
+msgid "News/Current Affairs"
+msgstr "Ziņas/pašreizējie notikumi"
+
+msgctxt "#19517"
+msgid "News/Weather Report"
+msgstr "Ziņas/laikaprognoze"
+
+msgctxt "#19518"
+msgid "News Magazine"
+msgstr "Ziņu žurnāls"
+
+msgctxt "#19519"
+msgid "Documentary"
+msgstr "Dokumentālā"
+
+msgctxt "#19520"
+msgid "Discussion/Interview/Debate"
+msgstr "Diskusija/intervija/debates"
+
+msgctxt "#19532"
+msgid "Show/Game Show"
+msgstr "Pārraide/spēļu pārraide"
+
+msgctxt "#19533"
+msgid "Game Show/Quiz/Contest"
+msgstr "Spēļu pārrraide/viktorīna/konkurss"
+
+msgctxt "#19534"
+msgid "Variety Show"
+msgstr "Dāžāda satura pārraide"
+
+msgctxt "#19535"
+msgid "Talk Show"
+msgstr "Sarunu pārraide"
+
+msgctxt "#19548"
+msgid "Sports"
+msgstr "Sports"
+
+msgctxt "#19549"
+msgid "Special Event"
+msgstr "Īpašs notikums"
+
+msgctxt "#19550"
+msgid "Sport Magazine"
+msgstr "Sporta žunāls"
+
+msgctxt "#19551"
+msgid "Football"
+msgstr "Futbols"
+
+msgctxt "#19552"
+msgid "Tennis/Squash"
+msgstr "Teniss/skvošs"
+
+msgctxt "#19553"
+msgid "Team Sports"
+msgstr "Komandu sports"
+
+msgctxt "#19554"
+msgid "Athletics"
+msgstr "Vieglatlētika"
+
+msgctxt "#19555"
+msgid "Motor Sport"
+msgstr "Motorsports"
+
+msgctxt "#19556"
+msgid "Water Sport"
+msgstr "Ūdenssports"
+
+msgctxt "#19557"
+msgid "Winter Sports"
+msgstr "Ziemassports"
+
+msgctxt "#19558"
+msgid "Equestrian"
+msgstr "Jāšanas sports"
+
+msgctxt "#19559"
+msgid "Martial Sports"
+msgstr "Cīņu sports"
+
+msgctxt "#19564"
+msgid "Children's/Youth Programmes"
+msgstr "Bērnu/jauniešu programmas"
+
+msgctxt "#19565"
+msgid "Pre-school Children's Programmes"
+msgstr "Pirmsskolas bērnu programmas"
+
+msgctxt "#19566"
+msgid "Entertainment Programmes for 6 to 14"
+msgstr "Izklaides programmas vecumā no 6- 14"
+
+msgctxt "#19567"
+msgid "Entertainment Programmes for 10 to 16"
+msgstr "Izklaides programmas vecumā no 10- 16"
+
+msgctxt "#19568"
+msgid "Informational/Educational/School Programme"
+msgstr "Informatīvas/izglītības/mācību programmas"
+
+msgctxt "#19569"
+msgid "Cartoons/Puppets"
+msgstr "Multenes/lelles"
+
+msgctxt "#19580"
+msgid "Music/Ballet/Dance"
+msgstr "Mūzika/balets/deja"
+
+msgctxt "#19581"
+msgid "Rock/Pop"
+msgstr "Rocks/pops"
+
+msgctxt "#19582"
+msgid "Serious/Classical Music"
+msgstr "Nopietnā/klasiskā mūzika"
+
+msgctxt "#19583"
+msgid "Folk/Traditional Music"
+msgstr "Tautas/tradicionālā mūzika"
+
+msgctxt "#19584"
+msgid "Musical/Opera"
+msgstr "Mūzikls/opera"
+
+msgctxt "#19585"
+msgid "Ballet"
+msgstr "Balets"
+
+msgctxt "#19596"
+msgid "Arts/Culture"
+msgstr "Māksla/kultūra"
+
+msgctxt "#19597"
+msgid "Performing Arts"
+msgstr "Skatuves māksla"
+
+msgctxt "#19598"
+msgid "Fine Arts"
+msgstr "Tēlotājmāksla"
+
+msgctxt "#19599"
+msgid "Religion"
+msgstr "Reliģija"
+
+msgctxt "#19600"
+msgid "Popular Culture/Traditional Arts"
+msgstr "Popkultūra/tradicionālā māksla"
+
+msgctxt "#19601"
+msgid "Literature"
+msgstr "Literatūra"
+
+msgctxt "#19602"
+msgid "Film/Cinema"
+msgstr "Filma/kino"
+
+msgctxt "#19603"
+msgid "Experimental Film/Video"
+msgstr "Eksperimentālā filma/video"
+
+msgctxt "#19604"
+msgid "Broadcasting/Press"
+msgstr "Pārraidīšana/prese"
+
+msgctxt "#19605"
+msgid "New Media"
+msgstr "Jauns medijs"
+
+msgctxt "#19606"
+msgid "Arts/Culture Magazines"
+msgstr "Mākslas/kultūras žurnāli"
+
+msgctxt "#19607"
+msgid "Fashion"
+msgstr "Mode"
+
+msgctxt "#19612"
+msgid "Social/Political/Economics"
+msgstr "Sociāls/politika/ekonomika"
+
+msgctxt "#19613"
+msgid "Magazines/Reports/Documentary"
+msgstr "Žurnāli/atskaites/dokumentālās"
+
+msgctxt "#19614"
+msgid "Economics/Social Advisory"
+msgstr "Ekonomika/sociālie padomi"
+
+msgctxt "#19615"
+msgid "Remarkable People"
+msgstr "Ievērojami cilvēki"
+
+msgctxt "#19628"
+msgid "Education/Science/Factual"
+msgstr "Izglītība/zinātne/fakti"
+
+msgctxt "#19629"
+msgid "Nature/Animals/Environment"
+msgstr "Daba/dzīvnieki/vide"
+
+msgctxt "#19630"
+msgid "Technology/Natural Sciences"
+msgstr "Tehnoloģijas/dabas zinātnes"
+
+msgctxt "#19631"
+msgid "Medicine/Physiology/Psychology"
+msgstr "Medicīna/fizioloģija/psiholoģija"
+
+msgctxt "#19632"
+msgid "Foreign Countries/Expeditions"
+msgstr "Ārzemes/ekspedīcijas"
+
+msgctxt "#19633"
+msgid "Social/Spiritual Sciences"
+msgstr "Sociālās/garīgās zinātes"
+
+msgctxt "#19634"
+msgid "Further Education"
+msgstr "Tālākizglītība"
+
+msgctxt "#19635"
+msgid "Languages"
+msgstr "Valodas"
+
+msgctxt "#19644"
+msgid "Leisure/Hobbies"
+msgstr "Brīvais laiks/hobiji"
+
+msgctxt "#19645"
+msgid "Tourism/Travel"
+msgstr "Tūrisms/ceļošana"
+
+msgctxt "#19646"
+msgid "Handicraft"
+msgstr "Mājamatniecība"
+
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Autosports"
+
+msgctxt "#19648"
+msgid "Fitness &amp; Health"
+msgstr "Fitness un veselība"
+
+msgctxt "#19649"
+msgid "Cooking"
+msgstr "Ēdiena gatavošana"
+
+msgctxt "#19650"
+msgid "Advertisement/Shopping"
+msgstr "Reklāma/iepirkšanās"
+
+msgctxt "#19651"
+msgid "Gardening"
+msgstr "Dārzkopība"
+
+msgctxt "#19660"
+msgid "Special Characteristics"
+msgstr "Īpašas iezīmes"
+
+msgctxt "#19661"
+msgid "Original Language"
+msgstr "Oriģinālvaloda"
+
+msgctxt "#19662"
+msgid "Black &amp; White"
+msgstr "Melns un balts"
+
+msgctxt "#19663"
+msgid "Unpublished"
+msgstr "Nepublicēts"
+
+msgctxt "#19664"
+msgid "Live Broadcast"
+msgstr "Tiešā pārraide"
+
+msgctxt "#19676"
+msgid "Drama"
+msgstr "Drāma"
+
+msgctxt "#19677"
+msgid "Detective/Thriller"
+msgstr "Detektīvs/trilleris"
+
+msgctxt "#19678"
+msgid "Adventure/Western/War"
+msgstr "Piedzīvojumu/vesterns/kara"
+
+msgctxt "#19679"
+msgid "Science Fiction/Fantasy/Horror"
+msgstr "Zin.fantastikas/fantāzijas/šausmu"
+
+msgctxt "#19680"
+msgid "Comedy"
+msgstr "Komēdija"
+
+msgctxt "#19681"
+msgid "Soap/Melodrama/Folkloric"
+msgstr "Ziepene/melodrāma/folklora"
+
+msgctxt "#19682"
+msgid "Romance"
+msgstr "Romantika"
+
+msgctxt "#19683"
+msgid "Serious/ClassicalReligion/Historical"
+msgstr "Nopietnā/klasiski reliģiskā/vēsturiskā"
+
+msgctxt "#19684"
+msgid "Adult"
+msgstr "Pieaugušo"
+
+msgctxt "#20000"
+msgid "Saved music folder"
+msgstr "Saglabātās mūzikas mape"
+
+msgctxt "#20001"
+msgid "Use external DVD player"
+msgstr "Izmantot ārējo DVD atskaņotāju"
+
+msgctxt "#20002"
+msgid "External DVD player"
+msgstr "Ārējais DVD atskaņotājs"
+
+msgctxt "#20003"
+msgid "Trainers folder"
+msgstr "Pasniedzēju mape"
+
+msgctxt "#20004"
+msgid "Screenshot folder"
+msgstr "Ekrānattēlu mape"
+
+msgctxt "#20006"
+msgid "Playlists folder"
+msgstr "Spēļsarakstu mape"
+
+msgctxt "#20007"
+msgid "Recordings"
+msgstr "Ieraksti"
+
+msgctxt "#20008"
+msgid "Screenshots"
+msgstr "Ekrānattēli"
+
+msgctxt "#20009"
+msgid "Use XBMC"
+msgstr "Izmanto XBMC"
+
+msgctxt "#20011"
+msgid "Music playlists"
+msgstr "Mūzikas spēļsaraksti"
+
+msgctxt "#20012"
+msgid "Video playlists"
+msgstr "Video spēļsaraksti"
+
+msgctxt "#20013"
+msgid "Do you wish to launch the game?"
+msgstr "Vai palaist spēli?"
+
+msgctxt "#20014"
+msgid "Sort by: Playlist"
+msgstr "Kārtot pēc: spēļsaraksta"
+
+msgctxt "#20015"
+msgid "Remote thumb"
+msgstr "Attālais sīktēls"
+
+msgctxt "#20016"
+msgid "Current thumb"
+msgstr "Pašreizējais sīktēls"
+
+msgctxt "#20017"
+msgid "Local thumb"
+msgstr "Lokālais sīktēls"
+
+msgctxt "#20018"
+msgid "No thumb"
+msgstr "Nav sīktēls"
+
+msgctxt "#20019"
+msgid "Choose thumbnail"
+msgstr "Izvēlēties sīktēlu"
+
+msgctxt "#20023"
+msgid "Conflict"
+msgstr "Konflikts"
+
+msgctxt "#20024"
+msgid "Scan new"
+msgstr "Skenēt jaunu"
+
+msgctxt "#20025"
+msgid "Scan all"
+msgstr "Skenēt visu"
+
+msgctxt "#20026"
+msgid "Region"
+msgstr "Reģions"
+
+msgctxt "#20037"
+msgid "Summary"
+msgstr "Kopsavilkums"
+
+msgctxt "#20038"
+msgid "Lock music window"
+msgstr "Bloķēt mūzikas logu"
+
+msgctxt "#20039"
+msgid "Lock videos window"
+msgstr "Bloķēt video logu"
+
+msgctxt "#20040"
+msgid "Lock pictures window"
+msgstr "Bloķēt attēlu logu"
+
+msgctxt "#20041"
+msgid "Lock programs & scripts windows"
+msgstr "Bloķēt programmu & skriptu logu"
+
+msgctxt "#20042"
+msgid "Lock file manager"
+msgstr "Aizslēgt failu pārvaldnieku"
+
+msgctxt "#20043"
+msgid "Lock settings"
+msgstr "Slēdzenes iestatījumi"
+
+msgctxt "#20044"
+msgid "Start fresh"
+msgstr "Sākt no jauna"
+
+msgctxt "#20045"
+msgid "Enter master mode"
+msgstr "Ieiet galvenajā režīmā"
+
+msgctxt "#20046"
+msgid "Leave master mode"
+msgstr "Iziet no galvenā režīma"
+
+msgctxt "#20047"
+msgid "Create profile '%s'?"
+msgstr "Izveidot profilu '%s'?"
+
+msgctxt "#20048"
+msgid "Start with fresh settings"
+msgstr "Sākt ar jauniem iestatījumiem"
+
+msgctxt "#20049"
+msgid "Best available"
+msgstr "Labākais pieejamais"
+
+msgctxt "#20050"
+msgid "Auto-switch between 16x9 and 4x3"
+msgstr "Auto-pārslēgšana starp 16x9 un 4x3"
+
+msgctxt "#20051"
+msgid "Treat stacked files as single file"
+msgstr "Lietot stekā ielādētus failus kā vienu failu"
+
+msgctxt "#20052"
+msgid "Caution"
+msgstr "Brīdinājums"
+
+msgctxt "#20053"
+msgid "Left master mode"
+msgstr "Pameta galveno režīmu"
+
+msgctxt "#20054"
+msgid "Entered master mode"
+msgstr "Iegāja galvenajā režīmā"
+
+msgctxt "#20055"
+msgid "Allmusic.com thumb"
+msgstr "Allmusic.com sīktēls"
+
+msgctxt "#20057"
+msgid "Remove thumbnail"
+msgstr "Noņemt sīktēlu"
+
+msgctxt "#20058"
+msgid "Add profile..."
+msgstr "Pievieno profilu..."
+
+msgctxt "#20059"
+msgid "Query info for all albums"
+msgstr "Vaicāt info par visiem albumiem"
+
+msgctxt "#20060"
+msgid "Media info"
+msgstr "Mediju info"
+
+msgctxt "#20061"
+msgid "Separate"
+msgstr "Atsevišķi"
+
+msgctxt "#20062"
+msgid "Shares with default"
+msgstr "Koplietojumi ar noklusējumu"
+
+msgctxt "#20063"
+msgid "Shares with default (read only)"
+msgstr "Koplietojumi ar noklusējumu (tikai lasāmi)"
+
+msgctxt "#20064"
+msgid "Copy default"
+msgstr "Kopēt noklusējumu"
+
+msgctxt "#20065"
+msgid "Profile picture"
+msgstr "Profila attēls"
+
+msgctxt "#20066"
+msgid "Lock preferences"
+msgstr "Slēdzenes preferences"
+
+msgctxt "#20067"
+msgid "Edit profile"
+msgstr "Labot profilu"
+
+msgctxt "#20068"
+msgid "Profile lock"
+msgstr "Profila slēdzene"
+
+msgctxt "#20069"
+msgid "Could not create folder"
+msgstr "Nevar izveidot mapi"
+
+msgctxt "#20070"
+msgid "Profile directory"
+msgstr "Profila direktorija"
+
+msgctxt "#20071"
+msgid "Start with fresh media sources"
+msgstr "Sākt ar svaigiem mediju avotiem"
+
+msgctxt "#20072"
+msgid "Make sure the selected folder is writable"
+msgstr "Pārliecinieties, vai atlasītā mape ir rakstāma"
+
+msgctxt "#20073"
+msgid "and that the new folder name is valid"
+msgstr "un ka jaunās mapes nosaukums ir derīgs"
+
+msgctxt "#20074"
+msgid "MPAA rating"
+msgstr "MPAA vērtējums"
+
+msgctxt "#20075"
+msgid "Enter master lock code"
+msgstr "Ievadiet galvenās slēdzenes kodu"
+
+msgctxt "#20076"
+msgid "Ask for master lock code on startup"
+msgstr "Ieslēdzot prasīt galvenās slēdzenes kodu"
+
+msgctxt "#20077"
+msgid "Skin settings"
+msgstr "Apvalka iestatījumi"
+
+msgctxt "#20078"
+msgid "- no link set -"
+msgstr "- saite nav iestatīta -"
+
+msgctxt "#20079"
+msgid "Enable animations"
+msgstr "Ieslēgt animāciju"
+
+msgctxt "#20080"
+msgid "Disable RSS during music"
+msgstr "Izslēgt RSS mūzikas laikā"
+
+msgctxt "#20081"
+msgid "Enable shortcut buttons"
+msgstr "Ieslēgt īsceļu pogas"
+
+msgctxt "#20082"
+msgid "Show programs in main menu"
+msgstr "Rādīt programmas galvenajā izvēlnē"
+
+msgctxt "#20083"
+msgid "Show music info"
+msgstr "Rādīt mūzikas info"
+
+msgctxt "#20084"
+msgid "Show weather info"
+msgstr "Rādīt laikapstākļu info"
+
+msgctxt "#20085"
+msgid "Show system info"
+msgstr "Rādīt sistēmas info"
+
+msgctxt "#20088"
+msgid "Weather info"
+msgstr "Laikapstākļu info"
+
+msgctxt "#20089"
+msgid "Drive space free"
+msgstr "Brīvā vieta diskā"
+
+msgctxt "#20090"
+msgid "Enter the name of an existing share"
+msgstr "Ievadiet esošā koplietojuma nosaukumu"
+
+msgctxt "#20091"
+msgid "Lock code"
+msgstr "Slēdzenes kods"
+
+msgctxt "#20092"
+msgid "Load profile"
+msgstr "Ielādēt profilu"
+
+msgctxt "#20093"
+msgid "Profile name"
+msgstr "Profila nosaukums"
+
+msgctxt "#20094"
+msgid "Media sources"
+msgstr "Mediju avoti"
+
+msgctxt "#20095"
+msgid "Enter profile lock code"
+msgstr "Ievadiet profila slēdzenes kodu"
+
+msgctxt "#20096"
+msgid "Login screen"
+msgstr "Pieteikšanās ekrāns"
+
+msgctxt "#20097"
+msgid "Fetching album info"
+msgstr "Uzmeklē albuma info"
+
+msgctxt "#20098"
+msgid "Fetching info for album"
+msgstr "Uzmeklē info par albumu"
+
+msgctxt "#20099"
+msgid "Can't rip CD or track while playing from CD"
+msgstr "Nevar izvilkt no CD vai celiņa, kamēr to atskaņo"
+
+msgctxt "#20100"
+msgid "Master lock code and settings"
+msgstr "Galvenās slēdzenes kods un iestatījumi"
+
+msgctxt "#20101"
+msgid "Entering master lock code always enables master mode"
+msgstr "Ievadot galvenās slēdzenes kodu, vienmēr ieslēdzas galvenais režīms"
+
+msgctxt "#20102"
+msgid "or copy from default?"
+msgstr "vai kopēt no noklusējuma?"
+
+msgctxt "#20103"
+msgid "Save changes to profile?"
+msgstr "Saglabāt izmaiņas profilā?"
+
+msgctxt "#20104"
+msgid "Old settings found."
+msgstr "Atrasti vecie iestatījumi."
+
+msgctxt "#20105"
+msgid "Do you want to use them?"
+msgstr "Vēlaties tos izmantot?"
+
+msgctxt "#20106"
+msgid "Old media sources found."
+msgstr "Atrasti veco mediju avoti."
+
+msgctxt "#20107"
+msgid "Separate (locked)"
+msgstr "Atsevišķs (bloķēts)"
+
+msgctxt "#20108"
+msgid "Root"
+msgstr "Sakne"
+
+msgctxt "#20109"
+msgid "Zoom"
+msgstr "Zooms"
+
+msgctxt "#20110"
+msgid "UPnP settings"
+msgstr "UPnP iestatījumi"
+
+msgctxt "#20111"
+msgid "Autostart UPnP client"
+msgstr "Autostartēt UPnP klientu"
+
+msgctxt "#20112"
+msgid "Last login: %s"
+msgstr "Pēdējā pieteikšanās: %s"
+
+msgctxt "#20113"
+msgid "Never logged on"
+msgstr "Nekad nav pieteicies"
+
+msgctxt "#20114"
+msgid "Profile %i / %i"
+msgstr "Profils %i / %i"
+
+msgctxt "#20115"
+msgid "User login / Select a profile"
+msgstr "LIetotāja pieteikšanās / Izvēlieties profilu"
+
+msgctxt "#20116"
+msgid "Use lock on login screen"
+msgstr "Izmantot slēdzeni piesakoties"
+
+msgctxt "#20117"
+msgid "Invalid lock code."
+msgstr "Nederīgs slēdzenes kods."
+
+msgctxt "#20118"
+msgid "This requires the master lock to be set."
+msgstr "Tas pieprasa, lai tiktu uzstādīta galvenā slēdzene."
+
+msgctxt "#20119"
+msgid "Would you like to set it now?"
+msgstr "Vai vēlaties to iestatīt tūlīt?"
+
+msgctxt "#20120"
+msgid "Loading program information"
+msgstr "Ielādē programmas informāciju"
+
+msgctxt "#20121"
+msgid "Party on!"
+msgstr "Ballīte sākas!"
+
+msgctxt "#20122"
+msgid "True"
+msgstr "Patiess"
+
+msgctxt "#20123"
+msgid "Mixing drinks"
+msgstr "Sajauc dzērienus"
+
+msgctxt "#20124"
+msgid "Filling glasses"
+msgstr "Piepilda glāzes"
+
+msgctxt "#20125"
+msgid "Logged on as"
+msgstr "Pieteicies kā"
+
+msgctxt "#20126"
+msgid "Log off"
+msgstr "Atteikties"
+
+msgctxt "#20128"
+msgid "Go to root"
+msgstr "Doties uz sakni"
+
+msgctxt "#20132"
+msgid "Restart video"
+msgstr "Pārstartēt video"
+
+msgctxt "#20133"
+msgid "Edit network location"
+msgstr "Labot tīkla atrašanās vietu"
+
+msgctxt "#20134"
+msgid "Remove network location"
+msgstr "Noņemt tīkla atrašanās vietu"
+
+msgctxt "#20135"
+msgid "Do you want to scan the folder?"
+msgstr "Vai vēlaties skenēt šo mapi?"
+
+msgctxt "#20136"
+msgid "Memory unit"
+msgstr "Atmiņas ierīce"
+
+msgctxt "#20137"
+msgid "Memory unit mounted"
+msgstr "Atmiņas ierīce piemontēta"
+
+msgctxt "#20138"
+msgid "Unable to mount memory unit"
+msgstr "Nevar piemontēt atmiņas ierīci"
+
+msgctxt "#20139"
+msgid "In port %i, slot %i"
+msgstr "Partā %i, slotā %i"
+
+msgctxt "#20140"
+msgid "Lock screensaver"
+msgstr "Aizslēgt ekrānsaudzētāju"
+
+msgctxt "#20141"
+msgid "Set"
+msgstr "Iestatīt"
+
+msgctxt "#20142"
+msgid "Username"
+msgstr "Lietotājvārds"
+
+msgctxt "#20143"
+msgid "Enter password for"
+msgstr "Ievadiet paroli"
+
+msgctxt "#20144"
+msgid "Shutdown timer"
+msgstr "Izslēgšanas taimeris"
+
+msgctxt "#20145"
+msgid "Shutdown interval (in minutes)"
+msgstr "Izslēgšanas intervāls (minūtēs)"
+
+msgctxt "#20146"
+msgid "Started, shutdown in %im"
+msgstr "Uzsākts, izslēgšana pēc %im"
+
+msgctxt "#20147"
+msgid "Shutdown in 30 minutes"
+msgstr "Izslēgšana pēc 30 minutēm"
+
+msgctxt "#20148"
+msgid "Shutdown in 60 minutes"
+msgstr "Izslēgšana pēc 60 minutēm"
+
+msgctxt "#20149"
+msgid "Shutdown in 120 minutes"
+msgstr "Izslēgšana pēc 120 minutēm"
+
+msgctxt "#20150"
+msgid "Custom shutdown timer"
+msgstr "PIelāgots izslēgšanas taimeris"
+
+msgctxt "#20151"
+msgid "Cancel shutdown timer"
+msgstr "Atcelt izslēgšanas taimeri"
+
+msgctxt "#20152"
+msgid "Lock preferences for %s"
+msgstr "Aizslēgt %s preferences"
+
+msgctxt "#20153"
+msgid "Browse..."
+msgstr "Pārlūko..."
+
+msgctxt "#20154"
+msgid "Summary information"
+msgstr "Kopsavilkuma informācija"
+
+msgctxt "#20155"
+msgid "Storage information"
+msgstr "Krātuves informācija"
+
+msgctxt "#20156"
+msgid "Hard disk information"
+msgstr "Cietā diska informācija"
+
+msgctxt "#20157"
+msgid "DVD-ROM information"
+msgstr "DVD-ROM informācija"
+
+msgctxt "#20158"
+msgid "Network information"
+msgstr "Tīkla informācija"
+
+msgctxt "#20159"
+msgid "Video information"
+msgstr "Video informācija"
+
+msgctxt "#20160"
+msgid "Hardware information"
+msgstr "Aparatūras informācija"
+
+msgctxt "#20161"
+msgid "Total"
+msgstr "Kopā"
+
+msgctxt "#20162"
+msgid "Used"
+msgstr "Izmantots"
+
+msgctxt "#20163"
+msgid "of"
+msgstr "arī"
+
+msgctxt "#20164"
+msgid "Locking not supported"
+msgstr "Aizslēgšana nav atbalstīta"
+
+msgctxt "#20165"
+msgid "Not locked"
+msgstr "Nav aizslēgts"
+
+msgctxt "#20166"
+msgid "Locked"
+msgstr "Aizslēgts"
+
+msgctxt "#20167"
+msgid "Frozen"
+msgstr "Saldēts"
+
+msgctxt "#20168"
+msgid "Requires reset"
+msgstr "Nepieciešams atiestatīt"
+
+msgctxt "#20169"
+msgid "Week"
+msgstr "Nedēļa"
+
+msgctxt "#20170"
+msgid "Line"
+msgstr "Līnija"
+
+msgctxt "#20171"
+msgid "Windows network (SMB)"
+msgstr "Windows tīkls (SMB)"
+
+msgctxt "#20172"
+msgid "XBMSP server"
+msgstr "XBMSP serveris"
+
+msgctxt "#20173"
+msgid "FTP server"
+msgstr "FTP serveris"
+
+msgctxt "#20174"
+msgid "iTunes music share (DAAP)"
+msgstr "iTunes mūzikas koplietojums (DAAP)"
+
+msgctxt "#20175"
+msgid "UPnP server"
+msgstr "UPnP serveris"
+
+msgctxt "#20176"
+msgid "Show video info"
+msgstr "Rādīt video info"
+
+msgctxt "#20177"
+msgid "Done"
+msgstr "Pabeigts"
+
+msgctxt "#20178"
+msgid "Shift"
+msgstr "Shift"
+
+msgctxt "#20179"
+msgid "Caps Lock"
+msgstr "Lielie burti"
+
+msgctxt "#20180"
+msgid "Symbols"
+msgstr "Simboli"
+
+msgctxt "#20181"
+msgid "Backspace"
+msgstr "Backspace"
+
+msgctxt "#20182"
+msgid "Space"
+msgstr "Tukšums"
+
+msgctxt "#20183"
+msgid "Reload skin"
+msgstr "Pārlādēt apvalku"
+
+msgctxt "#20184"
+msgid "Rotate pictures using EXIF information"
+msgstr "Pagriezt bildes pēc EXIF informācijas"
+
+msgctxt "#20185"
+msgid "Use poster view styles for TV shows"
+msgstr "TV pārraidēm izmantot plakātu skata stilu"
+
+msgctxt "#20186"
+msgid "Please wait"
+msgstr "Lūdzu, gaidiet"
+
+msgctxt "#20187"
+msgid "UPnP"
+msgstr "UPnP"
+
+msgctxt "#20188"
+msgid "Announce library updates via UPnP"
+msgstr "Paziņot bibliotēkas atjauninājumus pa UPnP"
+
+msgctxt "#20189"
+msgid "Enable auto scrolling for plot & review"
+msgstr "Ieslēgt auto ritināšanu sižetam & pārskatam"
+
+msgctxt "#20190"
+msgid "Custom"
+msgstr "Pielāgots"
+
+msgctxt "#20191"
+msgid "Enable debug logging"
+msgstr "Ieslēgt atkļūdošanas reģistrēšanu"
+
+msgctxt "#20192"
+msgid "Download additional information during updates"
+msgstr "Atjaunināšanas laikā lejupielādēt papildinformāciju "
+
+msgctxt "#20193"
+msgid "Default service for album information"
+msgstr "Noklusētais serviss informācijai par albumu"
+
+msgctxt "#20194"
+msgid "Default service for artist information"
+msgstr "Noklusētais serviss informācijai par izpildītāju"
+
+msgctxt "#20195"
+msgid "Change scraper"
+msgstr "Mainīt skrāpi"
+
+msgctxt "#20196"
+msgid "Export music library"
+msgstr "Eksportēt mūzikas bibliotēku"
+
+msgctxt "#20197"
+msgid "Import music library"
+msgstr "Importēt mūzikas bibliotēku"
+
+msgctxt "#20198"
+msgid "No artist found!"
+msgstr "Izpildītājs nav atrasts!"
+
+msgctxt "#20199"
+msgid "Downloading artist info failed"
+msgstr "Izpildītāja info lejupielāde neizdevās"
+
+msgctxt "#20240"
+msgid "Android music"
+msgstr "Android mūzika"
+
+msgctxt "#20241"
+msgid "Android videos"
+msgstr "Android video"
+
+msgctxt "#20242"
+msgid "Android pictures"
+msgstr "Android attēli"
+
+msgctxt "#20243"
+msgid "Android photos"
+msgstr "Android foto"
+
+msgctxt "#20244"
+msgid "Android Apps"
+msgstr "Android lietotnes"
+
+msgctxt "#20250"
+msgid "Party on! (videos)"
+msgstr "Ballīte sākas! (video)"
+
+msgctxt "#20251"
+msgid "Mixing drinks (videos)"
+msgstr "Jaucam dzērienus (video)"
+
+msgctxt "#20252"
+msgid "Filling glasses (videos)"
+msgstr "Pildam glāzes (video)"
+
+msgctxt "#20253"
+msgid "WebDAV server (HTTP)"
+msgstr "WebDAV serveris (HTTP)"
+
+msgctxt "#20254"
+msgid "WebDAV server (HTTPS)"
+msgstr "WebDAV serveris (HTTPS)"
+
+msgctxt "#20255"
+msgid "First logon, edit your profile"
+msgstr "Pirmā pieteikšanās, labot savu profilu"
+
+msgctxt "#20256"
+msgid "HTS Tvheadend client"
+msgstr "HTS Tvheadend klients"
+
+msgctxt "#20257"
+msgid "VDR Streamdev client"
+msgstr "VDR Streamdev klients"
+
+msgctxt "#20258"
+msgid "MythTV client"
+msgstr "MythTV klients"
+
+msgctxt "#20259"
+msgid "Network Filesystem (NFS)"
+msgstr "Network Filesystem (NFS)"
+
+msgctxt "#20260"
+msgid "Secure Shell (SSH/SFTP)"
+msgstr "Secure Shell (SSH/SFTP)"
+
+msgctxt "#20261"
+msgid "Apple Filing Protocol (AFP)"
+msgstr "Apple Filing Protocol (AFP)"
+
+msgctxt "#20300"
+msgid "Web server directory (HTTP)"
+msgstr "Tīmekļa servera direktorija (HTTP)"
+
+msgctxt "#20301"
+msgid "Web server directory (HTTPS)"
+msgstr "Tīmekļa servera direktorija (HTTPS)"
+
+msgctxt "#20302"
+msgid "Unable to write to folder:"
+msgstr "Nevar ierakstīt mapē:"
 
-msgctxt "#10025"
-msgid "Videos"
-msgstr "Video"
+msgctxt "#20303"
+msgid "Do you want to skip and proceed?"
+msgstr "Vai vēlaties izlaist un turpināt?"
 
-msgctxt "#10506"
-msgid "Programs"
-msgstr "Programmas"
+msgctxt "#20304"
+msgid "RSS Feed"
+msgstr "RSS plūsma"
 
-msgctxt "#10511"
-msgid "System info"
-msgstr "Sistēmas informācija"
+msgctxt "#20307"
+msgid "Secondary DNS"
+msgstr "Sekundārais DNS"
 
-msgctxt "#12310"
-msgid "0"
-msgstr "0"
+msgctxt "#20308"
+msgid "DHCP server:"
+msgstr "DHCP serveris:"
 
-msgctxt "#12311"
-msgid "1"
-msgstr "1"
+msgctxt "#20309"
+msgid "Make new folder"
+msgstr "Izveidot jaunu mapi"
 
-msgctxt "#12312"
-msgid "2"
-msgstr "2"
+msgctxt "#20311"
+msgid "Unknown or onboard (protected)"
+msgstr "Nezināms vai jau sistēmā (aizsargāts)"
 
-msgctxt "#12313"
-msgid "3"
-msgstr "3"
+msgctxt "#20314"
+msgid "Videos - Library"
+msgstr "Video - Bibliotēka"
 
-msgctxt "#12314"
-msgid "4"
-msgstr "4"
+msgctxt "#20316"
+msgid "Sort by: ID"
+msgstr "Kārtot pēc: ID"
 
-msgctxt "#12315"
-msgid "5"
-msgstr "5"
+msgctxt "#20317"
+msgid "Scanning movies using %s"
+msgstr "Skenē filmas ar %s"
 
-msgctxt "#12316"
-msgid "6"
-msgstr "6"
+msgctxt "#20318"
+msgid "Scanning music videos using %s"
+msgstr "Skenē mūzikas video ar %s"
 
-msgctxt "#12317"
-msgid "7"
-msgstr "7"
+msgctxt "#20319"
+msgid "Scanning tvshows using %s"
+msgstr "Skenē TV pārraides ar %s"
 
-msgctxt "#12318"
-msgid "8"
-msgstr "8"
+msgctxt "#20320"
+msgid "Scanning artists using %s"
+msgstr "Skenē izpildītājus ar %s"
 
-msgctxt "#12319"
-msgid "9"
-msgstr "9"
+msgctxt "#20321"
+msgid "Scanning albums using %s"
+msgstr "Skenē albumus ar %s"
 
-msgctxt "#12321"
-msgid "Ok"
-msgstr "Labi"
+msgctxt "#20324"
+msgid "Play part..."
+msgstr "Atskaņo daļu..."
 
-msgctxt "#12600"
-msgid "Weather"
-msgstr "Laika apstākļi"
+msgctxt "#20325"
+msgid "Calibration reset"
+msgstr "Kalibrācijas atiestatīšana"
 
-msgctxt "#12900"
-msgid "Screensaver"
-msgstr "Ekrānsaudzētājs"
+msgctxt "#20326"
+msgid "This will reset the calibration values for %s"
+msgstr "Šī darbība atiestatīs kalibrācijas vērtības %s"
 
-msgctxt "#13120"
-msgid "VDPAU"
-msgstr "VDPAU"
+msgctxt "#20327"
+msgid "to it's default values."
+msgstr "uz to noklusējuma vērtībām."
 
-msgctxt "#13276"
-msgid "DVD-ROM"
-msgstr "DVD-ROM"
+msgctxt "#20328"
+msgid "Browse for destination"
+msgstr "Pārlūkot mērķi"
 
-msgctxt "#13277"
-msgid "Storage"
-msgstr "Glabātuve"
+msgctxt "#20329"
+msgid "Movies are in separate folders that match the movie title"
+msgstr "Filmas ir atsevišķās mapēs, kas atbilst filmas nosaukumam"
 
-msgctxt "#13278"
-msgid "Default"
-msgstr "Noklusētais"
+msgctxt "#20330"
+msgid "Use folder names for lookups"
+msgstr "Uzmeklēšanā izmantot mapju nosaukumus"
 
-msgctxt "#13280"
-msgid "Video"
-msgstr "Video"
+msgctxt "#20331"
+msgid "File"
+msgstr "Fails"
 
-msgctxt "#13320"
-msgid "Stereo"
-msgstr "Stereo"
+msgctxt "#20332"
+msgid "Use file or folder names in lookups?"
+msgstr "Vai izmantot uzmeklēšanā failu / mapju nosaukumus?"
 
-msgctxt "#13327"
-msgid "Karaoke"
-msgstr "Karaoke"
+msgctxt "#20333"
+msgid "Set content"
+msgstr "Iestatīt saturu"
 
-msgctxt "#13398"
-msgid "Shortcuts"
-msgstr "Saīsnes"
+msgctxt "#20334"
+msgid "Folder"
+msgstr "Mape"
 
-msgctxt "#13409"
-msgid "Top 250"
-msgstr "Top 250"
+msgctxt "#20335"
+msgid "Look for content recursively?"
+msgstr "Vai meklēt saturu rekursīvi?"
 
-msgctxt "#13421"
-msgid "VDPAU"
-msgstr "VDPAU"
+msgctxt "#20336"
+msgid "Unlock sources"
+msgstr "Atbloķēt avotus"
 
-msgctxt "#13507"
-msgid "Medium"
-msgstr "Vidējs"
+msgctxt "#20337"
+msgid "Actor"
+msgstr "Aktieris"
 
-msgctxt "#13508"
-msgid "High"
-msgstr "Augsts"
+msgctxt "#20338"
+msgid "Movie"
+msgstr "Filma"
 
-msgctxt "#14028"
-msgid "Internet"
-msgstr "Internets"
+msgctxt "#20339"
+msgid "Director"
+msgstr "Režisors"
 
-msgctxt "#14032"
-msgid "Internet"
-msgstr "Internets"
+msgctxt "#20340"
+msgid "Do you want to remove all items within"
+msgstr "Vai vēlaties izņemt no XBMC bibliotēkas visus ierakstus,"
 
-msgctxt "#14044"
-msgid "%i min"
-msgstr "%i min"
+msgctxt "#20341"
+msgid "this path from the XBMC library?"
+msgstr " kas atrodas šajā ceļā?"
 
-msgctxt "#14045"
-msgid "%i sec"
-msgstr "%i sec"
+msgctxt "#20342"
+msgid "Movies"
+msgstr "Filmas"
 
-msgctxt "#14046"
-msgid "%i ms"
-msgstr "%i ms"
+msgctxt "#20343"
+msgid "TV shows"
+msgstr "TV pārraides"
 
-msgctxt "#14047"
-msgid "%i %%"
-msgstr "%i %%"
+msgctxt "#20344"
+msgid "This directory contains"
+msgstr "Šī derektorija satur"
 
-msgctxt "#14048"
-msgid "%i kbps"
-msgstr "%i kbps"
+msgctxt "#20345"
+msgid "Run automated scan"
+msgstr "Palaist automātisko skenēšanu"
 
-msgctxt "#14049"
-msgid "%i kb"
-msgstr "%i kb"
+msgctxt "#20346"
+msgid "Scan recursively"
+msgstr "Rekursīvi skenēt"
 
-msgctxt "#14050"
-msgid "%i.0 dB"
-msgstr "%i.0 dB"
+msgctxt "#20347"
+msgid "as"
+msgstr ""
 
-msgctxt "#14061"
-msgid "Auto"
-msgstr "Auto"
+msgctxt "#20348"
+msgid "Directors"
+msgstr "Režisori"
 
-msgctxt "#14098"
-msgid "Play"
-msgstr "Atskaņot"
+msgctxt "#20349"
+msgid "No video files found in this path!"
+msgstr "Šajā ceļā nav atrasti video faili!"
 
-msgctxt "#15019"
-msgid "Add"
-msgstr "Pievienot"
+msgctxt "#20350"
+msgid "votes"
+msgstr "balsis"
 
-msgctxt "#15109"
-msgid "Skin default"
-msgstr "Ādiņas noklusētie iestatījumi"
+msgctxt "#20351"
+msgid "TV show information"
+msgstr "TV pārraides informācija"
 
-msgctxt "#15200"
-msgid "Last.fm"
-msgstr "Last.fm"
+msgctxt "#20352"
+msgid "Episode information"
+msgstr "Sērijas informācija"
 
-msgctxt "#15311"
-msgid "Path:"
-msgstr "Ceļš:"
+msgctxt "#20353"
+msgid "Loading TV show details"
+msgstr "TV pārraides detaļu ielādēšana"
 
-msgctxt "#16000"
-msgid "General"
-msgstr "Vispārīgi"
+msgctxt "#20354"
+msgid "Fetching episode guide"
+msgstr "Uzmeklē sēriju gidu"
 
-msgctxt "#16018"
-msgid "None"
-msgstr "Nav"
+msgctxt "#20355"
+msgid "Loading info for episodes in directory"
+msgstr "Ielādē direktorijā info par sērijām"
 
-msgctxt "#16040"
-msgid "Auto"
-msgstr "Auto"
+msgctxt "#20356"
+msgid "Select TV show:"
+msgstr "Izvēlēties TV pārraidi:"
 
-msgctxt "#16304"
-msgid "Lanczos2"
-msgstr "Lanczos2"
+msgctxt "#20357"
+msgid "Enter the TV show name"
+msgstr "Ievadiet TV pārraides nosaukumu"
 
-msgctxt "#16305"
-msgid "Lanczos3"
-msgstr "Lanczos3"
+msgctxt "#20358"
+msgid "Season %i"
+msgstr "Sezona %i"
 
-msgctxt "#16306"
-msgid "Sinc8"
-msgstr "Sinc8"
+msgctxt "#20359"
+msgid "Episode"
+msgstr "Sērija"
 
-msgctxt "#16316"
-msgid "Auto"
-msgstr "Auto"
+msgctxt "#20360"
+msgid "Episodes"
+msgstr "Sērijas"
 
-msgctxt "#16319"
-msgid "DXVA"
-msgstr "DXVA"
+msgctxt "#20361"
+msgid "Loading episode details"
+msgstr "Ielādē sērijas detaļas"
 
-msgctxt "#16325"
-msgid "VDPAU - Bob"
-msgstr "VDPAU - Bob"
+msgctxt "#20362"
+msgid "Remove episode from library"
+msgstr "Izņem sēriju no bibliotēkas"
 
-msgctxt "#19009"
-msgid "SNR"
-msgstr "SNR"
+msgctxt "#20363"
+msgid "Remove TV show from library"
+msgstr "Izņem TV pārraidi no bibliotēkas"
 
-msgctxt "#19010"
-msgid "BER"
-msgstr "BER"
+msgctxt "#20364"
+msgid "TV show"
+msgstr "TV pārraide"
 
-msgctxt "#19011"
-msgid "UNC"
-msgstr "UNC"
+msgctxt "#20365"
+msgid "Episode plot"
+msgstr "Sērijas sižets"
 
-msgctxt "#19020"
-msgid "TV"
-msgstr "TV"
+msgctxt "#20366"
+msgid "* All seasons"
+msgstr "* Visas sezonas"
 
-msgctxt "#19021"
-msgid "Radio"
-msgstr "Radio"
+msgctxt "#20367"
+msgid "Hide watched"
+msgstr "Slēpt apskatīto"
 
-msgctxt "#19031"
-msgid "Next"
-msgstr "Nākamais"
+msgctxt "#20368"
+msgid "Prod code"
+msgstr "Prod kods"
 
-msgctxt "#19069"
-msgid "EPG"
-msgstr "EPG"
+msgctxt "#20369"
+msgid "Show plot for unwatched items"
+msgstr "Rādīt sižetu neskatītiem ierakstiem"
 
-msgctxt "#19077"
-msgid "Radio:"
-msgstr "Radio:"
+msgctxt "#20370"
+msgid "* Hidden to prevent spoilers *"
+msgstr "* Slēpts, lai nebūtu spoileris *"
 
-msgctxt "#19180"
-msgid "TV"
-msgstr "TV"
+msgctxt "#20371"
+msgid "Set season thumb"
+msgstr "Iestatīt sezonas sīktēlu"
 
-msgctxt "#19222"
-msgid "EPG"
-msgstr "EPG"
+msgctxt "#20372"
+msgid "Season image"
+msgstr "Sezonas attēls"
 
-msgctxt "#20173"
-msgid "FTP server"
-msgstr "FTP serveris"
+msgctxt "#20373"
+msgid "Season"
+msgstr "Sezona"
 
-msgctxt "#20331"
-msgid "File"
-msgstr "Fails"
+msgctxt "#20374"
+msgid "Downloading movie information"
+msgstr "Lejupielādē filmas informāciju"
 
-msgctxt "#20342"
-msgid "Movies"
-msgstr "Filmas"
+msgctxt "#20375"
+msgid "Unassign content"
+msgstr "Neiedalīts saturs"
+
+msgctxt "#20376"
+msgid "Original title"
+msgstr "Oriģinālnosaukums"
 
 msgctxt "#20413"
 msgid "Get fanart"
 msgstr "Fanu māksla"
 
+msgctxt "#20420"
+msgid "Never"
+msgstr "Nekad"
+
+msgctxt "#20429"
+msgid "Separate"
+msgstr "Atsevišķi"
+
 msgctxt "#20445"
 msgid "Fanart"
 msgstr "Fanu māksla"
 
+msgctxt "#20462"
+msgid "New tag..."
+msgstr "Jauns tags..."
+
+msgctxt "#21359"
+msgid "Add media share..."
+msgstr "Pievieno mediju koplietojumu..."
+
+msgctxt "#21375"
+msgid "Normal"
+msgstr "Normāls"
+
+msgctxt "#21385"
+msgid "Open"
+msgstr "Atvērt"
+
 msgctxt "#21387"
 msgid "Fast"
 msgstr "Ātrs"
@@ -1689,10 +8165,34 @@ msgctxt "#21417"
 msgid "Settings"
 msgstr "Iestatījumi"
 
+msgctxt "#21423"
+msgid "New rule..."
+msgstr "Jauns likums..."
+
+msgctxt "#21437"
+msgid "New smart playlist..."
+msgstr "Jauns gudrais spēļsaraksts..."
+
+msgctxt "#21440"
+msgid "Home folder"
+msgstr "Sākuma mape"
+
+msgctxt "#21452"
+msgid "Get More..."
+msgstr "Iegūt vairāk..."
+
+msgctxt "#21461"
+msgid "Fixed"
+msgstr "Fiksēts"
+
 msgctxt "#21805"
 msgid "Resolution"
 msgstr "Izšķirtspēja"
 
+msgctxt "#21806"
+msgid "Comment"
+msgstr "Komentārs"
+
 msgctxt "#21837"
 msgid "ISO"
 msgstr "ISO"
@@ -1729,22 +8229,82 @@ msgctxt "#22030"
 msgid "Font"
 msgstr "Fonts"
 
+msgctxt "#22031"
+msgid "Size"
+msgstr "Izmērs"
+
+msgctxt "#22032"
+msgid "Colours"
+msgstr "Krāsas"
+
+msgctxt "#22036"
+msgid "Import karaoke titles..."
+msgstr "Importēt karaoke titrus..."
+
+msgctxt "#22038"
+msgid "Export karaoke titles..."
+msgstr "Eksportēt karaoke titrus..."
+
 msgctxt "#22082"
 msgid "More..."
 msgstr "Vairāk..."
 
+msgctxt "#24005"
+msgid "Media sources"
+msgstr "Mediju avoti"
+
+msgctxt "#24007"
+msgid "Movie information"
+msgstr "Informācija par filmu"
+
 msgctxt "#24008"
 msgid "Screensaver"
 msgstr "Ekrānsaudzētājs"
 
+msgctxt "#24012"
+msgid "Subtitles"
+msgstr "Subtitri"
+
 msgctxt "#24013"
 msgid "Lyrics"
 msgstr "Lirika"
 
+msgctxt "#24016"
+msgid "Album information"
+msgstr "Albuma informācija"
+
+msgctxt "#24018"
+msgid "Services"
+msgstr "Servisi"
+
 msgctxt "#24027"
 msgid "Weather"
 msgstr "Laika apstākļi"
 
+msgctxt "#24090"
+msgid "Lock Add-on manager"
+msgstr "Aizslēgt pielikumu pārvaldnieku"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Meklēju subtitrus ..."
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Lejupielādēju subtitrus ..."
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Ievadiet meklējamo virkni"
+
+msgctxt "#25002"
+msgid "Select from all titles ..."
+msgstr "Izvēlēties no visiem nosaukumiem ..."
+
+msgctxt "#33021"
+msgid "Precipitation"
+msgstr "nokrišņu daudzums"
+
 msgctxt "#33063"
 msgid "Options"
 msgstr "Iespējas"
@@ -1821,14 +8381,102 @@ 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 "Izvēlieties rīcību, kad skaņa nav nepieciešama atskaņošanai vai saskarnei. [Vienmēr] - izvada nepārtrauktu, bet nedzirdamu signālu, lai uzturētu audio ierīci gatavībā jaunām skaņām, taču tas var arī nobloķēt skaņu no citām lietotnēm. [1- 10 minūtes] - līdzīgs Vienmēr, taču pēc izvēlētā laika audio ieiet gatavības režīmā. [Izslēgts] - audio izvade ieiet gatavības režīmā. Piezīme - varat palaist garām skaņas, ja audio iegājis gatavības režīmā."
+
+msgctxt "#34123"
+msgid "Never"
+msgstr "Nekad"
+
+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 "#35500"
 msgid "Location"
 msgstr "Lokācija"
 
+msgctxt "#35502"
+msgid "Name"
+msgstr "Vārds"
+
+msgctxt "#36016"
+msgid "Connected"
+msgstr "Savienots"
+
 msgctxt "#36037"
 msgid "TV"
 msgstr "TV"
 
+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 jāpaliek sinhronam. To var panākt ar pārsemplošanu, pakešu izlaišanu/dublēšanu vai arī, regulējot pulksteni, ja sinhronums zaudēts pārāk daudz."
+
+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 "Importē kanālu grupas no PVR aizmugursistēmas (ja atbalstīts). Izdzēsīs lietotāja izveidotās grupas, ja tās nebūs atrodamas aizmugursistēmā."
+
+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 "Prasa pin kodu, lai piekļūtu vecāku slēgtajiem kanāliem. Kanāli var tikt slēgti kanālu redaktora galvenajā cilnē. Vecāku slēgtos kanālus nevar atskaņot vai ierakstīt, ja nav ievadīts pin kods, un EPG informācija par šiem kanāliem ir noslēpta."
+
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Ievadiet jaunu pin kodu, lai atslēgtu vecāku sēgtos kanālus."
+
+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 "Atkārtoti prasīt pin kodu, piekļūstot vecāku slēgtajiem kanāliem, ja kods nav bijis prasīts šo laika sprīdi. Noklusējums ir 300 sekundes. "
+
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Testē musturus ekrāna aparatūras kalibrēšanai."
+
+msgctxt "#36391"
+msgid "Turn debug logging on or off. Useful for troubleshooting."
+msgstr "Ieslēgt vai izslēgt atkļūdošanas reģistrēšanu. Noder problēmu risināšanai."
+
+msgctxt "#36395"
+msgid "Open the Master Lock dialogue, where you can configure your Master Lock options."
+msgstr "Atver galvenās slēdzenes dialogu, kur iespējams konfigurēt galvenās slēdzenes opcijas."
+
+msgctxt "#36396"
+msgid "Define the PIN code used for the master lock."
+msgstr "Definē PIN kodu, kas tiek izmantots galvenajā slēdzenē."
+
+msgctxt "#36397"
+msgid "If enabled, the master lock code is required to unlock XBMC on startup "
+msgstr "Ja ieslēgts, galvenais slēdzenes kods tiks pieprasīts, lai atbloķētu XBMC pie startēšanas"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Pārslēgt uz kanālu"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Ierakstīt"
+
 msgctxt "#36502"
 msgid "None"
 msgstr "Nav"
+
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "Izvēlēties alternatīvo režīmu..."
index a66845d..af5852c 100644 (file)
@@ -43,7 +43,7 @@ msgstr "XBMC SVN"
 
 msgctxt "#7"
 msgid "File manager"
-msgstr "Failų menedžeris"
+msgstr "Failų tvarkyklė"
 
 msgctxt "#8"
 msgid "Weather"
@@ -207,67 +207,67 @@ msgstr "Gruo"
 
 msgctxt "#71"
 msgid "N"
-msgstr "N"
+msgstr "Š"
 
 msgctxt "#72"
 msgid "NNE"
-msgstr "NNE"
+msgstr "ŠŠR"
 
 msgctxt "#73"
 msgid "NE"
-msgstr "NE"
+msgstr "ŠR"
 
 msgctxt "#74"
 msgid "ENE"
-msgstr "ENE"
+msgstr "RŠR"
 
 msgctxt "#75"
 msgid "E"
-msgstr "E"
+msgstr "R"
 
 msgctxt "#76"
 msgid "ESE"
-msgstr "ESE"
+msgstr "RPR"
 
 msgctxt "#77"
 msgid "SE"
-msgstr "SE"
+msgstr "PR"
 
 msgctxt "#78"
 msgid "SSE"
-msgstr "SSE"
+msgstr "PPR"
 
 msgctxt "#79"
 msgid "S"
-msgstr "S"
+msgstr "P"
 
 msgctxt "#80"
 msgid "SSW"
-msgstr "SSW"
+msgstr "PPV"
 
 msgctxt "#81"
 msgid "SW"
-msgstr "SW"
+msgstr "PV"
 
 msgctxt "#82"
 msgid "WSW"
-msgstr "WSW"
+msgstr "VPV"
 
 msgctxt "#83"
 msgid "W"
-msgstr "W"
+msgstr "V"
 
 msgctxt "#84"
 msgid "WNW"
-msgstr "WNW"
+msgstr "VŠV"
 
 msgctxt "#85"
 msgid "NW"
-msgstr "NW"
+msgstr "ŠV"
 
 msgctxt "#86"
 msgid "NNW"
-msgstr "NNW"
+msgstr "ŠŠV"
 
 msgctxt "#87"
 msgid "VAR"
@@ -311,7 +311,7 @@ msgstr "Žiūrėti: Sąrašas"
 
 msgctxt "#102"
 msgid "Scan"
-msgstr "Peržvelgti"
+msgstr "Nuskaityti"
 
 msgctxt "#103"
 msgid "Sort by: Name"
@@ -347,7 +347,7 @@ msgstr "Sukurti miniatiūras"
 
 msgctxt "#111"
 msgid "Shortcuts"
-msgstr "Etiketės"
+msgstr "Nuorodos"
 
 msgctxt "#112"
 msgid "Paused"
@@ -371,7 +371,7 @@ msgstr "Perkelti"
 
 msgctxt "#117"
 msgid "Delete"
-msgstr "Ištrynti"
+msgstr "Panaikinti"
 
 msgctxt "#118"
 msgid "Rename"
@@ -383,27 +383,27 @@ msgstr "Naujas aplankas"
 
 msgctxt "#120"
 msgid "Confirm file copy"
-msgstr "Kopijavimo patvirtinimas"
+msgstr "Patvirtinti failo kopiją"
 
 msgctxt "#121"
 msgid "Confirm file move"
-msgstr "Perkėlimo patvirtinimas"
+msgstr "Patvirtinti failo perkėlimą"
 
 msgctxt "#122"
 msgid "Confirm file delete?"
-msgstr "Patvirtinti failo ištrinimą?"
+msgstr "Patvirtinti failo panaikinimą ?"
 
 msgctxt "#123"
 msgid "Copy these files?"
-msgstr "Kopijuoti failus?"
+msgstr "Kopijuoti šiuos failus ?"
 
 msgctxt "#124"
 msgid "Move these files?"
-msgstr "Perkelti failus?"
+msgstr "Perkelti šiuos failus ?"
 
 msgctxt "#125"
 msgid "Delete these files? - Deleting files cannot be undone!"
-msgstr "Pašalinti šiuos failus? - Failų trynimas negali būti atšauktas!"
+msgstr "Pašalinti šiuos failus ? - Failų šalinimas negali būti atšauktas!"
 
 msgctxt "#126"
 msgid "Status"
@@ -423,7 +423,7 @@ msgstr "Skaidrių peržiūra"
 
 msgctxt "#130"
 msgid "System info"
-msgstr "Sistemos informcija"
+msgstr "Sistemos info"
 
 msgctxt "#131"
 msgid "Display"
@@ -475,7 +475,7 @@ msgstr "Laikas:"
 
 msgctxt "#143"
 msgid "Current:"
-msgstr "Aktualus:"
+msgstr "Dabartinis:"
 
 msgctxt "#144"
 msgid "Build:"
@@ -487,7 +487,7 @@ msgstr "Tinklas:"
 
 msgctxt "#146"
 msgid "Type:"
-msgstr "Rūšis:"
+msgstr "Tipas:"
 
 msgctxt "#147"
 msgid "Static"
@@ -511,11 +511,11 @@ msgstr "Nuoroda:"
 
 msgctxt "#152"
 msgid "Half duplex"
-msgstr "Pakaitinis dvipusis ryšys"
+msgstr "Pusiau dvipusis"
 
 msgctxt "#153"
 msgid "Full duplex"
-msgstr "Pilnas dvipusis ryšys"
+msgstr "Visiškai dvipusis"
 
 msgctxt "#154"
 msgid "Storage"
@@ -523,7 +523,7 @@ msgstr "Saugykla"
 
 msgctxt "#155"
 msgid "Drive"
-msgstr "Dėtuvė"
+msgstr "Vykdyti"
 
 msgctxt "#156"
 msgid "Free"
@@ -583,11 +583,11 @@ msgstr "Rezoliucija"
 
 msgctxt "#170"
 msgid "Adjust display refresh rate to match video"
-msgstr "Nustatyti ekrano atnaujinimo dažnį, kad atitiktų vaizdą"
+msgstr "Nustatyti ekrano atnaujinimo dažnį, kad atitiktų vaizdo įrašą"
 
 msgctxt "#171"
 msgid "Sort title"
-msgstr "Rūšiuoti pagal pavadinimą"
+msgstr "Rūšiuoti - Pavadinimas"
 
 msgctxt "#172"
 msgid "Release date"
@@ -595,7 +595,7 @@ msgstr "Išleidimo data"
 
 msgctxt "#173"
 msgid "Display 4:3 videos as"
-msgstr "Rodyti vaizdo formatą 4:3 ..."
+msgstr "Rodyti 4:3 vaizdą kitu masteliu"
 
 msgctxt "#175"
 msgid "Moods"
@@ -619,11 +619,11 @@ msgstr "Pasirinkite albumą"
 
 msgctxt "#182"
 msgid "Tracks"
-msgstr "Dainos"
+msgstr "Takeliai"
 
 msgctxt "#183"
 msgid "Review"
-msgstr "Peržiūrėti"
+msgstr "Apžvalga"
 
 msgctxt "#184"
 msgid "Refresh"
@@ -635,7 +635,7 @@ msgstr "Albumų paieška"
 
 msgctxt "#186"
 msgid "OK"
-msgstr "Gerai"
+msgstr "OK"
 
 msgctxt "#187"
 msgid "No albums found!"
@@ -659,7 +659,7 @@ msgstr "Sumaišyti"
 
 msgctxt "#192"
 msgid "Clear"
-msgstr "Išvalyti"
+msgstr "Valyti"
 
 msgctxt "#193"
 msgid "Scan"
@@ -679,7 +679,7 @@ msgstr "Pasirinti filmą:"
 
 msgctxt "#197"
 msgid "Querying %s info"
-msgstr "Užklausos %s Informacija"
+msgstr "Užklausos %s info"
 
 msgctxt "#198"
 msgid "Loading movie details"
@@ -723,7 +723,7 @@ msgstr "Ankstesnis"
 
 msgctxt "#213"
 msgid "Calibrate user interface..."
-msgstr "Kalibruoti naudotojo sąsaja..."
+msgstr "Kalibruoti vartotojo sąsają..."
 
 msgctxt "#214"
 msgid "Video calibration..."
@@ -823,11 +823,11 @@ msgstr "Didinimas"
 
 msgctxt "#239"
 msgid "Clear playlist on finish"
-msgstr "Išvalyti grojaraštį baigus"
+msgstr "Valyti grojaraštį baigus"
 
 msgctxt "#240"
 msgid "Display Mode"
-msgstr "Rodymo režimas"
+msgstr "Pagrindinis langas rodomas kaip"
 
 msgctxt "#241"
 msgid "Full Screen #%d"
@@ -835,7 +835,7 @@ msgstr "Visas ekranas #%d"
 
 msgctxt "#242"
 msgid "Windowed"
-msgstr "Lange"
+msgstr "Langas lange"
 
 msgctxt "#243"
 msgid "Refresh Rate"
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Pasirinkite paskirties katalogą"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo visuose garsiakalbiuose"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Kanalų skaičius"
@@ -1043,7 +1039,7 @@ msgstr "Sukurti žymę"
 
 msgctxt "#296"
 msgid "Clear bookmarks"
-msgstr "Išvalyti žymas"
+msgstr "Valyti žymas"
 
 msgctxt "#297"
 msgid "Audio offset"
@@ -1087,7 +1083,7 @@ msgstr "Originali srautinė kalba"
 
 msgctxt "#309"
 msgid "User Interface language"
-msgstr "Naudotojo sąsajos kalba"
+msgstr "Vartotojo sąsajos kalba"
 
 msgctxt "#312"
 msgid "(0=auto)"
@@ -1467,11 +1463,11 @@ msgstr "Rasos taškas"
 
 msgctxt "#406"
 msgid "Humidity"
-msgstr "Santykinis drėg."
+msgstr "Drėgnumas"
 
 msgctxt "#409"
 msgid "Defaults"
-msgstr "Palikti kaip yra"
+msgstr "Numatytasis"
 
 msgctxt "#410"
 msgid "Accessing weather service"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Kreditai"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Išjungta"
@@ -2407,7 +2399,7 @@ msgstr "Suspaudimo laipsnis"
 
 msgctxt "#666"
 msgid "Verbose logging..."
-msgstr "Daugiažodis registravimas ..."
+msgstr "Išsami registracija ..."
 
 msgctxt "#700"
 msgid "Cleaning up library"
@@ -2835,7 +2827,7 @@ msgstr "Portas"
 
 msgctxt "#1014"
 msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
 
 msgctxt "#1015"
 msgid "Browse for network server"
@@ -2855,7 +2847,7 @@ msgstr "Įveskite porto numrį"
 
 msgctxt "#1019"
 msgid "Enter the username"
-msgstr "Įveskite naudotojo vardą"
+msgstr "Įveskite vartotojo vardą"
 
 msgctxt "#1020"
 msgid "Add %s source"
@@ -2971,7 +2963,7 @@ msgstr "Kita..."
 
 msgctxt "#1048"
 msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
 
 msgctxt "#1049"
 msgid "Script settings"
@@ -3011,7 +3003,7 @@ msgstr "SOCKS5 kartu su nuotoliniu DNS sperndimu"
 
 msgctxt "#1200"
 msgid "SMB client"
-msgstr "SMB naudotojas"
+msgstr "SMB klientas"
 
 msgctxt "#1202"
 msgid "Workgroup"
@@ -3019,11 +3011,11 @@ msgstr "Darbo grupė"
 
 msgctxt "#1203"
 msgid "Default username"
-msgstr "Numatytas naudotojo vardas"
+msgstr "Numatytas vartotojo vardas"
 
 msgctxt "#1204"
 msgid "Default password"
-msgstr "Numatytas naudotojo slaptažodis"
+msgstr "Numatytas vartotojo slaptažodis"
 
 msgctxt "#1207"
 msgid "WINS server"
@@ -3543,7 +3535,7 @@ msgstr "Priedų naršyklė"
 
 msgctxt "#10041"
 msgid "Reset above settings to default"
-msgstr "Išvalyti šiuos nustatymus pagal nutylėjimą"
+msgstr "Atstatyti šiuos nustatymus į numatytuosius"
 
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
@@ -3559,7 +3551,7 @@ 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ą."
+msgstr "Atstato visas matomų parametrų reikšmes kaip numatytas."
 
 msgctxt "#10046"
 msgid "No categories available"
@@ -3595,7 +3587,7 @@ msgstr "Profilio nuostatos"
 
 msgctxt "#10131"
 msgid "Lock settings"
-msgstr "Blokuoti Nustatymus"
+msgstr "Blokuoti nustatymus"
 
 msgctxt "#10132"
 msgid "Content settings"
@@ -3831,7 +3823,7 @@ msgstr "Įveskite slaptažodį"
 
 msgctxt "#12327"
 msgid "Enter master code"
-msgstr "Įveskite apsaugos kodą"
+msgstr "Įveskite Spec. apsaugos kodą"
 
 msgctxt "#12328"
 msgid "Enter unlock code"
@@ -3863,7 +3855,7 @@ msgstr "Atstatyti užraktą"
 
 msgctxt "#12335"
 msgid "Remove lock"
-msgstr "Išvalyti užraktą"
+msgstr "Pašalinti užraktą"
 
 msgctxt "#12337"
 msgid "Numeric password"
@@ -3951,19 +3943,19 @@ msgstr "Slaptažodžio laukas tuščias. Pakartokite."
 
 msgctxt "#12360"
 msgid "Master lock"
-msgstr "Bendra apsauga"
+msgstr "Speciali apsauga"
 
 msgctxt "#12362"
 msgid "Shutdown system if Master Lock retries exceeded"
-msgstr "Išjungite sistemą, jei bandymų skaičius yra išnaudotas"
+msgstr "Stabdyti sistemą, jei viršyti Spec. apsaugos prisijungimo bandymai"
 
 msgctxt "#12367"
 msgid "Master code is not valid"
-msgstr "Apsaugos kodas neteisingas!"
+msgstr "Spec. apsaugos kodas neteisingas!"
 
 msgctxt "#12368"
 msgid "Please enter a valid master code"
-msgstr "Įveskite teisingą apsaugos kodą!"
+msgstr "Įveskite teisingą Spec. apsaugos kodą!"
 
 msgctxt "#12373"
 msgid "Settings & file manager"
@@ -4855,7 +4847,7 @@ msgstr "%s iš anksto nustatyti"
 
 msgctxt "#13408"
 msgid "(IMDb user rating)"
-msgstr "(IMDb naudotojo įvertinimas)"
+msgstr "(IMDb vartotojo įvertinimas)"
 
 msgctxt "#13409"
 msgid "Top 250"
@@ -4981,10 +4973,6 @@ 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"
@@ -5335,7 +5323,7 @@ msgstr "Auto"
 
 msgctxt "#14062"
 msgid "Enter username for"
-msgstr "Įveskite naudotojo vardą"
+msgstr "Įveskite vartotojo vardą"
 
 msgctxt "#14063"
 msgid "Date & time"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Stabdyti CD nuskaitymą"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Neprieinamas šaltinis"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Ką norėtumėte daryti su media elementais %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Išsaugoti"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Pašalinti"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Po apdirbimo (vėliau)"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV įrašai"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Numatyto aplanko PVR miniatiūros"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanalai"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Dabar eiti į"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "EPG atnaujinimo intervalas"
@@ -6599,7 +6603,7 @@ msgstr "Rodyti kanalų informaciją perjungiant kanalus"
 
 msgctxt "#19179"
 msgid "Automatically hide channel information"
-msgstr "Automatiškai nerodyti kanalo informacijos"
+msgstr "Nerodyti kanalo informacijos automatiškai"
 
 msgctxt "#19180"
 msgid "TV"
@@ -6675,7 +6679,7 @@ msgstr "Įrašymas baigtas: %s"
 
 msgctxt "#19199"
 msgid "Channel manager"
-msgstr "Kanalų menedžeris"
+msgstr "Kanalų tvarkyklė"
 
 msgctxt "#19200"
 msgid "EPG source:"
@@ -6807,7 +6811,7 @@ msgstr "Visada naudoti kanalo užsakymą iš posistemės(-ių)"
 
 msgctxt "#19232"
 msgid "Clear search results"
-msgstr "Išvalyti paieškos rezultatus"
+msgstr "Valyti paieškos rezultatus"
 
 msgctxt "#19233"
 msgid "Display a notification on timer updates"
@@ -6819,7 +6823,7 @@ msgstr "Naudoti posistemės kanalų numerius (veikia tik su vienu įjungtu PVR p
 
 msgctxt "#19235"
 msgid "PVR manager is starting up"
-msgstr "PVR menedžeris veikia/startavo"
+msgstr "PVR tvarkyklė veikia"
 
 msgctxt "#19236"
 msgid "Loading channels from clients"
@@ -6843,7 +6847,7 @@ msgstr "Neįjungtas joks PVR priedas"
 
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
-msgstr "PVR menedžeris buvo įjungtas nenaudojant"
+msgstr "PVR tvarkyklė buvo įjungta nenaudojant"
 
 msgctxt "#19242"
 msgid "enabled PVR Add-on. Enable at least one Add-on"
@@ -7003,7 +7007,7 @@ msgstr "Konkretūs kliento(-ų) parametrai"
 
 msgctxt "#19281"
 msgid "Confirm channel switches by pressing OK"
-msgstr "Patvirtinkite kanalų jungiklius paspausdami OK"
+msgstr "Patvirtinti kanalų jungiklius paspaudus 'OK'"
 
 msgctxt "#19499"
 msgid "Other/Unknown"
@@ -7467,27 +7471,27 @@ msgstr "Blokuoti nuotraukų langą"
 
 msgctxt "#20041"
 msgid "Lock programs & scripts windows"
-msgstr "Blokuoti programos ir skriptai langus"
+msgstr "Blokuoti programų ir skriptų langus"
 
 msgctxt "#20042"
 msgid "Lock file manager"
-msgstr "Blokuoti Failų tvarkyklę"
+msgstr "Blokuoti failų tvarkyklę"
 
 msgctxt "#20043"
 msgid "Lock settings"
-msgstr "Blokuoti Nustatymus"
+msgstr "Blokuoti nustatymus"
 
 msgctxt "#20044"
 msgid "Start fresh"
-msgstr "Nauja(švari) paleistis"
+msgstr "Pradėti iš naujo"
 
 msgctxt "#20045"
 msgid "Enter master mode"
-msgstr "Įjungti Meistro režimą"
+msgstr "Įjungti Spec. režimą"
 
 msgctxt "#20046"
 msgid "Leave master mode"
-msgstr "Išjungti Meistro režimą"
+msgstr "Išjungti Spec. režimą"
 
 msgctxt "#20047"
 msgid "Create profile '%s'?"
@@ -7515,11 +7519,11 @@ msgstr "Dėmesio"
 
 msgctxt "#20053"
 msgid "Left master mode"
-msgstr "Palikti Meistro režimą"
+msgstr "Palikti Spec. režimą"
 
 msgctxt "#20054"
 msgid "Entered master mode"
-msgstr "Įjungtas Meistro režimas metodas"
+msgstr "Įjungtas Spec. režimo metodas"
 
 msgctxt "#20055"
 msgid "Allmusic.com thumb"
@@ -7599,11 +7603,11 @@ msgstr "Reitingas MPAA"
 
 msgctxt "#20075"
 msgid "Enter master lock code"
-msgstr "Įveskite Meistro užrakto kodą"
+msgstr "Įveskite Spec. apsaugos kodą"
 
 msgctxt "#20076"
 msgid "Ask for master lock code on startup"
-msgstr "Klausti Meistro užrakto kodo paleidžiant"
+msgstr "Klausti Spec. apsaugos kodo paleidžiant"
 
 msgctxt "#20077"
 msgid "Skin settings"
@@ -7699,11 +7703,11 @@ msgstr "Negali nuskaityti CD arba atsekti atkūriant iš CD"
 
 msgctxt "#20100"
 msgid "Master lock code and settings"
-msgstr "'Meistro kodas' ir jo nustatymas"
+msgstr "Spec. apsauga ir jos nustatymai"
 
 msgctxt "#20101"
 msgid "Entering master lock code always enables master mode"
-msgstr "Įvestas 'Meistro kodas' visuomet įgalina pagrindinį Meistro režimą."
+msgstr "Įvesta Spec. apsauga visuomet įgalina Spec. režimą."
 
 msgctxt "#20102"
 msgid "or copy from default?"
@@ -7759,7 +7763,7 @@ msgstr "Profilis %i / %i"
 
 msgctxt "#20115"
 msgid "User login / Select a profile"
-msgstr "Naudotojo prisijungimas / Profilio pasirinkimas"
+msgstr "Vartotojo prisijungimas / Profilio pasirinkimas"
 
 msgctxt "#20116"
 msgid "Use lock on login screen"
@@ -7771,7 +7775,7 @@ msgstr "Neteisingas apsaugos kodas."
 
 msgctxt "#20118"
 msgid "This requires the master lock to be set."
-msgstr "Tai reikalauja 'Meistro kodas', nustatymo(-ų)."
+msgstr "Tai reikalauja Spec. apsaugos nustatymo(-ų)."
 
 msgctxt "#20119"
 msgid "Would you like to set it now?"
@@ -7863,7 +7867,7 @@ msgstr "Įdiegti"
 
 msgctxt "#20142"
 msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
 
 msgctxt "#20143"
 msgid "Enter password for"
@@ -8063,7 +8067,7 @@ msgstr "Įjungti žurnalo derinimą"
 
 msgctxt "#20192"
 msgid "Download additional information during updates"
-msgstr "Parsisiųsti papildomą informaciją per atnaujinimus"
+msgstr "Atsiūsti papildomą informaciją atnaujinant"
 
 msgctxt "#20193"
 msgid "Default service for album information"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Nepavyko atsisiųsti informacijos apie atlikėjus."
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Nepaisyti dainų žodžių su informaciją internete"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Naudodami šią pagalbą, visą informacija kurią  atsisiuntėte - albumai, atlikėjai bus taikoma vietoj to ką nustatėte savarankiškai pvz.: dainų žodžiai, žanrai, metai, dainų atlikėjai ir t.t. (Naudinga jei turite 'MusicBrainz' identifikatorių savo dainų žodžiams)."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Android muzika"
@@ -8607,7 +8619,7 @@ msgstr "Rašytojai"
 
 msgctxt "#20419"
 msgid "Replace file names with library titles"
-msgstr "Pakeisti failų pavadinimus su bibliotekų pavadinimais"
+msgstr "Keisti failų pavadinimus su bibliotekų pavadinimais"
 
 msgctxt "#20420"
 msgid "Never"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Pašalinti medijos dalinimą"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtitrų aplankas"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Filmai ir pakaitinis subtitrų katalogas"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mišrus"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitrų vieta"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fiksuotas"
@@ -9655,7 +9659,7 @@ msgstr "Profilio duomenys"
 
 msgctxt "#22014"
 msgid "Use dim if paused during video playback"
-msgstr "Naudoti pritemdymą, vaizdo atkūrimo pristabdymo metu"
+msgstr "Naudoti pritemdymą jei  pristabdytas vaizdas atkūrimo metu"
 
 msgctxt "#22015"
 msgid "All recordings"
@@ -9911,7 +9915,7 @@ msgstr "Weather.com (standartinis)"
 
 msgctxt "#24029"
 msgid "Service for weather information"
-msgstr "Informacija apie Orus iš..."
+msgstr "Gauti informaciją apie Orus iš..."
 
 msgctxt "#24030"
 msgid "This Add-on can not be configured"
@@ -9955,7 +9959,7 @@ msgstr "Išjungti priedus"
 
 msgctxt "#24040"
 msgid "(Clear the current setting)"
-msgstr "(Išvalyti dabartinius nustatymus)"
+msgstr "(Valyti dabartinius nustatymus)"
 
 msgctxt "#24041"
 msgid "Install from zip file"
@@ -10095,7 +10099,7 @@ msgstr "Priedas atnaujinamas"
 
 msgctxt "#24090"
 msgid "Lock Add-on manager"
-msgstr "Blokuoti priedų saugyklą"
+msgstr "Blokuoti priedų tvarkyklės saugyklą"
 
 msgctxt "#24091"
 msgid "This Add-on cannot be disabled"
@@ -10171,7 +10175,7 @@ msgstr "Atsisiunčiami subtitrai ..."
 
 msgctxt "#24111"
 msgid "Languages to download subtitles for"
-msgstr "Kalbos atsisiųsti subtitrai"
+msgstr "Atsisiųsti subtitrus kalbomis pasirinktinai"
 
 msgctxt "#24112"
 msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
@@ -10183,19 +10187,43 @@ msgstr "Nepavyko atsisiųsti subtitrų"
 
 msgctxt "#24114"
 msgid "No subtitle services installed"
-msgstr "Neįdiegta subtitrų siuntimo paslauga"
+msgstr "Neįdiegta subtitrų siuntimo servisas"
 
 msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Išsaugoti subtitrus filmo kataloge"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Numatyta TV servisas"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Pasirinkite paslaugą, kuri bus naudojama kaip numatytoji ieškant TV šou subtitrų"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Numatyta filmų servisas"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Pasirinkite paslaugą, kuri bus naudojama kaip numatytoji ieškant filmų subtitrų"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Rankinė eilutės paieška"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Įveskite paieškos eilutę"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Pranešimai"
 
 msgctxt "#25001"
 msgid "Hide foreign"
-msgstr "Slėpti svetimą(-us)"
+msgstr "Slėpti kitą(-us)"
 
 msgctxt "#25002"
 msgid "Select from all titles ..."
@@ -10399,7 +10427,7 @@ msgstr "Patikrinti"
 
 msgctxt "#33053"
 msgid "Configure the"
-msgstr "Sukonfiguruoti"
+msgstr "Sukonfigūruoti"
 
 msgctxt "#33054"
 msgid "Seasons"
@@ -10423,7 +10451,7 @@ msgstr "Peržiūrėti savo"
 
 msgctxt "#33059"
 msgid "Configure the"
-msgstr "Sukonfiguruoti"
+msgstr "Sukonfigūruoti"
 
 msgctxt "#33060"
 msgid "Power"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Garsiakalbių konfiguracija"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10811,7 +10835,7 @@ msgstr "Perjungti į pultelio komandas"
 
 msgctxt "#36004"
 msgid "Press \"user\" button command"
-msgstr "Paspausti \"Naudotojas\" mygtuką"
+msgstr "Paspausti \"vartotojas\" mygtuką"
 
 msgctxt "#36005"
 msgid "Enable switch side commands"
@@ -11047,11 +11071,11 @@ msgstr "Rodyti medijos failų plėtinius. Pavyzdžiui, 'man patinka Myself.mp3'
 
 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 "Ignoruoti tam tikras žymes konfiguruojant. Pavyzdžiui, 'Simpsons' tiesiog būti konfiguruojama kaip 'Simpsonai'. Norint konfigūruoti žymes žiūr.: http://wiki.xbmc.org/index.php?title=Settings/Appearance."
+msgstr "Ignoruoti tam tikras žymes konfiguruojant. Pavyzdžiui, 'Simpsons' tiesiog būtų konfiguruojami kaip 'Simpsonai'. Norint konfigūruoti žymes žiūr.: 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 "Leisti panaikinti failus ir/arba pervadinti per vartotojo sąsają arba per kontekstinį meniu (paspauskite C ant klaviatūros, pavyzdžiui, kad įjungtumėte šį meniu)."
+msgstr "Leisti panaikinti failus ir/arba pervadinti per vartotojo sąsają arba per kontekstinį menių (paspauskite C ant klaviatūros kad įjungti šį menių)."
 
 msgctxt "#36126"
 msgid "Show the add source button from root sections of the user interface."
@@ -11071,11 +11095,11 @@ 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."
+msgstr "Pasirinkite ekrano užsklandą. XBMC 'Dim' ekrano užsklanda priverstinai, kai visame ekrane vaizdo atkūrimas yra sustabdytas ir/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."
+msgstr "Pakeisti konkrečius ekrano užsklandos parametrus. Galimos parinktys priklauso nuo ekrano naudojamo."
 
 msgctxt "#36132"
 msgid "Preview the selected screensaver."
@@ -11083,7 +11107,7 @@ 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ą."
+msgstr "Kai muzika atkuriama, XBMC pradės parinktą vizualizaciją, o ne ekrano užsklandą."
 
 msgctxt "#36134"
 msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
@@ -11115,7 +11139,7 @@ msgstr "Informacijos dar nėra."
 
 msgctxt "#36141"
 msgid "Show plot information for unwatched media in the Video Library."
-msgstr "Rodyti informaciją tik neperžiūrėtų medios vaizdo bibliotekoje."
+msgstr "Rodyti informaciją tik neperžiūrėtų media vaizdo bibliotekoje."
 
 msgctxt "#36142"
 msgid "No info available yet."
@@ -11123,7 +11147,7 @@ msgstr "Informacijos dar nėra."
 
 msgctxt "#36143"
 msgid "Get thumbnails for actors when scanning media."
-msgstr "Gauti atlikėjų miniatiūras skenuojant medijas"
+msgstr "Gauti atlikėjų miniatiūras nuskaitant media"
 
 msgctxt "#36144"
 msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'."
@@ -11143,7 +11167,7 @@ msgstr "Slėpti bibliotekos skenavimo juostą nuskaitymo metu"
 
 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 "Šalinti elementus iš bibliotekos, kada negalima rasti falų ((failas) pervadintas, ištrintas ir/arba išimta USB/HDD-USB laikmena arba šiuo metu atjungta)."
+msgstr "Šalinti elementus iš bibliotekos kai neimanoma rasti falų ((failas) pervadintas, ištrintas ir/arba išimta USB/HDD-USB laikmena ar/arba šiuo metu atjungta)."
 
 msgctxt "#36149"
 msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files."
@@ -11259,7 +11283,7 @@ msgstr "Informacijos dar nėra."
 
 msgctxt "#36177"
 msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
-msgstr "Pasirinkite,- 'Atkurti' (pagal nutylėjimą), 'Atnaujinti ir rodyti informaciją'. Pasirinkite,- bus pasirinkti elementai, pvz.: atidaryti failai katalogo režimu. 'Atnaujinti',- bus automatiškai atnaujintas vaizdo įrašas iš paskutinės pozicijos, kada jūs paskutinį kartą žiūrėjote, net pakartotinai paleidus sistemą."
+msgstr "Pasirinkite,- 'Atkurti' (kaip numatyta), 'Atnaujinti ir rodyti informaciją'. Pasirinkite,- bus pasirinkti elementai, pvz.: atidaryti failai katalogo režimu. 'Atnaujinti',- bus automatiškai atnaujintas vaizdo įrašas iš paskutinės pozicijos, kada jūs paskutinį kartą žiūrėjote, net pakartotinai paleidus sistemą."
 
 msgctxt "#36178"
 msgid "No info available yet."
@@ -11343,11 +11367,11 @@ msgstr "Informacijos dar nėra."
 
 msgctxt "#36198"
 msgid "Select the default movie information source. See the Add-ons Manager for options."
-msgstr "Pasirinkite numatytąjį vaizdo informacijos šaltinį. Žiūrėti,- Manager priedų galimybės."
+msgstr "Pasirinkite numatytąjį vaizdo informacijos šaltinį. Žiūrėti,- Priedų tvarkyklės galimybės."
 
 msgctxt "#36199"
 msgid "Select the default TV show information source. See the Add-ons Manager for options."
-msgstr "Pasirinkite numatytąjį TV Šou informacijos šaltinį. Žiūrėti,- Manager priedų galimybės."
+msgstr "Pasirinkite numatytąjį TV Šou informacijos šaltinį. Žiūrėti,- Priedų tvarkyklės galimybės."
 
 msgctxt "#36200"
 msgid "Default scraper used for adding music videos to your library."
@@ -11430,12 +11454,12 @@ 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ų."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "EPG duomenų importas iš 'backends' dienų skaičius. Pagal nutylėjimą 3 dienas."
 
 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ų."
+msgstr "Laikas tarp EPG duomenų importo iš serverio. Kaip numatyta 120 minučių."
 
 msgctxt "#36222"
 msgid "Do not import EPG data while playing TV to minimise CPU usage."
@@ -11443,7 +11467,7 @@ msgstr "Neimportuoti EPG duomenų atkuriant TV. Iki minimumo sumažina kompiuter
 
 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."
+msgstr "Kaip numatyta, 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."
@@ -11495,15 +11519,15 @@ msgstr "Prioritetą skiria įrašymui. Didesnis skaičius reiškia didesnį prio
 
 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."
+msgstr "Naikinti įrašą. Kaip numatyta 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."
+msgstr "Pradėti įrašus iki faktinio laiko. Kaip numatyta 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."
+msgstr "Įrašo pabaiga po faktinio laiko. Kaip numatyta 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."
@@ -11519,7 +11543,7 @@ msgstr "Execute the \"wakeup command\" below when XBMC exits or is going into hi
 
 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ų."
+msgstr "Komanda nebus vykdoma, kai įrašymas bus pradėtas per šį laukimo laiką. Kaip numatyta 15 minučių."
 
 msgctxt "#36243"
 msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
@@ -11583,7 +11607,7 @@ 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."
+msgstr "Pasirinkti kaip numatyta šaltinio informacija apie atlikėją. Žiūrėti,- Priedų tvarkyklės galimybės."
 
 msgctxt "#36259"
 msgid "Check for new and removed media files on XBMC startup."
@@ -11623,11 +11647,11 @@ msgstr "XBMC perskaitys garso failų ReplayGain informaciją ir atitinkamai norm
 
 msgctxt "#36268"
 msgid "Default is 89dB per standard. Change with caution."
-msgstr "Pagal nutylėjimą yra 89dB standartu. Keisti atsargiai."
+msgstr "Kaip numatyta yra 89dB standartu. Keisti atsargiai."
 
 msgctxt "#36269"
 msgid "Default is 89dB per standard. Change with caution."
-msgstr "Pagal nutylėjimą yra 89dB standartu. Keisti atsargiai."
+msgstr "Kaip numatyta yra 89dB standartu. Keisti atsargiai."
 
 msgctxt "#36270"
 msgid "Reduce the volume of the file if clipping is likely to occur."
@@ -11711,7 +11735,7 @@ msgstr "Pasirinkite, kokią garso kokybę naudoti kodavime, suspaudime."
 
 msgctxt "#36290"
 msgid "For FLAC define compression level, default 5"
-msgstr "Nustatykite FLAC glaudinimo lygį, pagal nutylėjimą 5"
+msgstr "Nustatykite FLAC glaudinimo lygį, Kaip numatyta 5"
 
 msgctxt "#36291"
 msgid "Auto eject disc after rip is complete."
@@ -11823,7 +11847,7 @@ msgstr "Pasirinkite ne daugiau kaip trys vietoves, kuriose bus rodomas oras."
 
 msgctxt "#36318"
 msgid "Specify the default weather information source. See the Add-ons Manager for options."
-msgstr "Nurodykite numatytąjį orų informacijos šaltinį. Žiūrėti variantus priedų atsisiuntime."
+msgstr "Nurodykite numatytąjį orų informacijos šaltinį. Žiūrėti,- variantus Priedų tvarkyklės atsisiuntime."
 
 msgctxt "#36319"
 msgid "No info available yet."
@@ -11871,7 +11895,7 @@ msgstr "Nustatyti web serverio prievadą."
 
 msgctxt "#36330"
 msgid "Define the webserver username."
-msgstr "Nustatyti web serverio vardą."
+msgstr "Nustatyti web serverio vartotojo vardą."
 
 msgctxt "#36331"
 msgid "Define webserver password."
@@ -11879,7 +11903,7 @@ msgstr "Nustatykite web serverio slaptažodį."
 
 msgctxt "#36332"
 msgid "Select between web interfaces installed via the Add-on Manager."
-msgstr "Pasirinkti interneto sąsajos įrenginį naudojantis priedų saugykla."
+msgstr "Pasirinkti interneto sąsajos įrenginį naudojantis priedų tvarkyklės saugykla."
 
 msgctxt "#36333"
 msgid "No info available yet."
@@ -11983,7 +12007,7 @@ msgstr "Kalibruoti vartotojo sąsają koreguojant 'overscan'. Naudokite šį įr
 
 msgctxt "#36358"
 msgid "Test patterns for display hardware calibration."
-msgstr "Modelio testavimas, ekrano techninės įrangos kalibravimas."
+msgstr "Bandymų modeliai, ekrano įrangos kalibravimas."
 
 msgctxt "#36359"
 msgid "No info available yet."
@@ -11997,18 +12021,10 @@ 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 "Pasirinkti, kai garso išvesties savybės yra nustatytos: [Fiksuotas] - išėjimo savybės yra nustatyti į nurodytą garsiakalbių konfigūraciją [Geriausias atitikimas] - išėjimo savybės yra nustatytos kaip yra; [Optimizuotas] - išėjimo savybės buvo nustatyti atkūrimo pradžioje ir nesikeičia."
 
-msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
-msgstr "Pasirinkti maksimalus garso kanalų/garsiakalbių dekodavimas."
-
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
 msgstr "Didinti AC3 srautus, kurie buvo downmixed į 2 kanalus."
 
-msgctxt "#36364"
-msgid "Select to enable upmixing of 2 channel stereo sources to the number of audio channels specified by the speaker configuration."
-msgstr "Pasirinkti upmixing iš 2 kanalų stereo šaltinių garso kanalais, garsiakalbio konfigūraciją nurodytų kanalų skaičius."
-
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
 msgstr "Pasirinkti šią parinktį, jei jūsų imtuvas gali dekoduoti AC3 srautus."
@@ -12131,19 +12147,19 @@ msgstr "Nurodyti papildomas bibliotekas kurios turi būti įtrauktos į derinimo
 
 msgctxt "#36395"
 msgid "Open the Master Lock dialogue, where you can configure your Master Lock options."
-msgstr "Atidaryti 'Master Lock' dialogą, kuriame galite konfigūruoti savo 'Master Lock' galimybes."
+msgstr "[B][COLOR=red]Master lock[/COLOR][/B] toliau bus verčiama kaip [B][COLOR=blue]Spec. apsauga[/COLOR][/B].[B][COLOR=red]Master mode[/COLOR][/B] toliau bus verčiama kaip [B][COLOR=blue]Spec. režimas[/COLOR][/B][CR]Atidaryti Spec. apsaugos dialogą, kuriame galite konfigūruoti savo Spec. apsaugos galimybes."
 
 msgctxt "#36396"
 msgid "Define the PIN code used for the master lock."
-msgstr "Nustatyti PIN kodą, naudojamą pagrindiniam užrakinimui."
+msgstr "Nustatyti PIN kodą, naudojamą pagrindiniam Spec. apsaugos nustatymų užrakinimui."
 
 msgctxt "#36397"
 msgid "If enabled, the master lock code is required to unlock XBMC on startup "
-msgstr "Jei įjungta, 'master lock' kodas yra reikalingas atblokuoti paleidžiant XBMC"
+msgstr "Jei įjungta, - Spec. apsaugos kodas yra reikalingas atblokuoti paleidžiant XBMC"
 
 msgctxt "#36398"
 msgid "Define the maximum number of retries before XBMC is closed down."
-msgstr "Nustatykite maksimalų pakartojimų skaičių kol XBMC yra uždarytas."
+msgstr "Nustatykite maksimalų pakartojimų skaičių prieš uždarant XBMC."
 
 msgctxt "#36399"
 msgid "No info available yet."
@@ -12241,9 +12257,25 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Įjungti, aparatinės įrangos video dekodavimas naudojant AMLogic dekoderį"
 
-msgctxt "#36423"
-msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
-msgstr "Naudoti, - ffmpeg  daugkartinis kadro gijos dekodavimas, kai aparatinės įrangos dekodavimas neveikia ar išjungtas. (mažiau patikimas nei numatytasis, -  vienos gijos režimas)"
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Pasirinkite atitikimus, kai EPG elementas yra pasirinktas: [Rodyti kontekstinį menių] suaktyvins kontekstinį menių, kur jūs galite pasirinkti tolimensius veiksmus; [Perjungti kanalą], iš karto paleis atitinkamą kanalą; [Rodyti informaciją] bus rodoma siužetų išsami informacija, pasirinktinai tolimesni variantai; [Record] sukurs pasirinkto elemento įrašymo laikmatį."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Rodyti kontekstinį meniu"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Perjungti į kanalą"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Rodyti informaciją"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Įrašas"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12379,11 +12411,27 @@ msgstr "Įjunkite šią funkciją, dialogas garsesnis lyginant su fone girdimu '
 
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
-msgstr "Įjungti vaizdo failų įrangos dekodavimą."
+msgstr "Įjungti įrangos dekodavimo vaizdo failus."
+
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Subtitrų stereoskopinis gylis"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Nustato regėjimo gylio subtitrus 'Stereoscopic video'.Kuo didesnė reikšmė tuo arčiau subtitrai bus rodomi žiūrovui."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Naudoti aukštesnės kokybės tekstūrą ir apvalkalus dėl FanArt (naudoja daugiau atminties)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Apribojimai GUI rezoliucijos atminties išsaugojimui. Neturi įtakos vaizdo atkūrimui. Naudokite 1080 ir <. Reikia restartuoti."
 
 msgctxt "#37000"
 msgid "(Visually Impaired)"
-msgstr "(Vizulus sutrikimas)"
+msgstr "(Žmonėms su regos negalia)"
 
 msgctxt "#37001"
 msgid "(Directors Comments)"
@@ -12428,3 +12476,11 @@ msgstr "Didinti centrinį kanalą, kai 'downmixing'"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Leidžia sistemos raktus pavyzdžiui 'printScreen', 'alt-tab' bei garso mygtukas visame ekrane"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Įjungti didesnį spalvų gylį 'artwork'"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Nustatyti GUI raiškos ribas(-ą)"
index 2953a80..c3d39a3 100644 (file)
@@ -857,10 +857,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Изаберете целна папка"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Стерео излез кон сите звучници"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Број на канали"
@@ -1633,10 +1629,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Заслуги"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Изме. чип"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Искл."
@@ -7201,10 +7193,6 @@ msgctxt "#21360"
 msgid "Share video and music libraries through UPnP"
 msgstr "Споделувај видео и музички библиотеки преку UPnP"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Титл фолдер"
-
 msgctxt "#21368"
 msgid "Override ASS/SSA subtitles fonts"
 msgstr "Игнорирај фонтови во ASS/SSA титлови"
@@ -7553,10 +7541,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Број на гледани епизоди"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Локација на титл"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Фиксирано"
@@ -8069,6 +8053,10 @@ msgctxt "#24099"
 msgid "Would you like to switch to this skin?"
 msgstr "Дали сакате да ја поставите оваа маска?"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Внесите збор за пребарување"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Нотификации"
@@ -8233,10 +8221,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурација на звучници"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -8324,3 +8308,11 @@ msgstr "Amplifier / AVR уред"
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* локација"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Префрли на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Сними"
index 3b1788d..8bcf014 100644 (file)
@@ -805,10 +805,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Pilih destinasi direktori"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Output stereo ke semua pembesar suara"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Jumlah saluran"
@@ -1596,3 +1592,7 @@ msgstr "Sentiasa"
 msgctxt "#36037"
 msgid "TV"
 msgstr "TV"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Rakam"
index 1e4d504..0d4bc7e 100644 (file)
@@ -693,10 +693,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Għażel destinazzjoni"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Output Speakers kollha"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Numru ta' kanali"
@@ -1445,10 +1441,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Krediti"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Mitfi"
@@ -5409,10 +5401,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Neħħi Media Share"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Fowlder Preferut tas-sottutitoli"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Fowlder Alternattiv ghas-sottotitoli u filmati"
@@ -5969,6 +5957,10 @@ msgctxt "#24027"
 msgid "Weather"
 msgstr "It-temp"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Daħħal Search String"
+
 msgctxt "#34123"
 msgid "Never"
 msgstr "Qatt"
@@ -5980,3 +5972,7 @@ msgstr "Isem"
 msgctxt "#36016"
 msgid "Connected"
 msgstr "Xbox Imqabbda"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Irrekordja"
index 9260c33..3bde209 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Velg destinasjonsmappe"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Send stereolyd til alle høyttalere"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Antall kanaler"
@@ -1689,10 +1685,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Anerkjennelser"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Av"
@@ -5901,10 +5893,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV-opptak"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Standard mappe for PVR-miniatyrbilder"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanaler"
@@ -8749,10 +8737,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Fjern delt mediaressurs"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mappe for undertekst"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film & alternativ mappe for undertekst"
@@ -9121,10 +9105,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mikset"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Plassering av undertekst"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Låst"
@@ -9695,7 +9675,7 @@ msgstr "Tillegg"
 
 msgctxt "#24001"
 msgid "Add-ons"
-msgstr "Tillegger"
+msgstr "Tillegg"
 
 msgctxt "#24002"
 msgid "Add-on options"
@@ -9815,7 +9795,7 @@ msgstr "Tvungen oppdatering"
 
 msgctxt "#24036"
 msgid "Change log"
-msgstr "Endrlogg"
+msgstr "Endringslogg"
 
 msgctxt "#24037"
 msgid "Uninstall"
@@ -10025,6 +10005,10 @@ msgctxt "#24113"
 msgid "Failed to download subtitle"
 msgstr "Kunne ikke laste ned undertekst"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Skriv inn søketekst"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Varslinger"
@@ -10405,10 +10389,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Høyttalerkonfigurasjon"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11217,10 +11197,6 @@ msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Viser standard EPG-vindu. Bruker tidslinjevisning som standard."
 
-msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Antall dager med EPG-informasjon som skal hentes fra kulisseklienten. Standarden er 2 dager."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Tid mellom datahentinger fra kulisseklienten. Standarden er 120 minutter."
@@ -11455,7 +11431,7 @@ msgstr "Ingen informasjon tilgjengelig enda."
 
 msgctxt "#36281"
 msgid "XBMC will search for thumbs on remote shares and optical media. This can often slow down the listing of network folders."
-msgstr "XMBC vil søke etter miniatyrer på nettverksstasjoner og optiske medier. Dette kan forsinke visningen av nettverksmapper."
+msgstr "XBMC vil søke etter miniatyrer på nettverksstasjoner og optiske medier. Dette kan forsinke visningen av nettverksmapper."
 
 msgctxt "#36282"
 msgid "No info available yet."
@@ -11517,6 +11493,10 @@ msgctxt "#36296"
 msgid "Select the size of the font used during karoake."
 msgstr "Velg skriftstørrelse som brukes for karaoke."
 
+msgctxt "#36297"
+msgid "Select the font colour used during karoake."
+msgstr "Velg skriftfargen som skal benyttes i karaoke."
+
 msgctxt "#36298"
 msgid "Select the character set used during karoake."
 msgstr "Velg tegnsett som brukes for karaoke."
@@ -11725,6 +11705,10 @@ msgctxt "#36349"
 msgid "No info available yet."
 msgstr "Ingen informasjon tilgjengelig enda."
 
+msgctxt "#36350"
+msgid "Automatically send 'Wake-On-Lan' to server(s) right before trying to access shared files or services."
+msgstr "Send 'Wake-On-Lan' automatisk til server(e) like før åpning av delte filer eller tjenester."
+
 msgctxt "#36351"
 msgid "No info available yet."
 msgstr "Ingen informasjon tilgjengelig enda."
@@ -11977,6 +11961,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Ingen informasjon tilgjengelig enda."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Bytt til kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Opptak"
+
 msgctxt "#36502"
 msgid "None"
 msgstr "Ingen"
index b6185e7..c4c360a 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "دایرکتوری مقصد را انتخاب کنید"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "خروجی استریو به همه ی بلندگوها"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "تعداد کانال ها"
@@ -1669,10 +1665,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "کارت های اعتباری"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "مودچیپ"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "خاموش"
@@ -6545,6 +6537,10 @@ msgctxt "#24027"
 msgid "Weather"
 msgstr "آب و هوا"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "رشته ی جستجو را وارد کنید"
+
 msgctxt "#33069"
 msgid "Backgrounds"
 msgstr "پس زمیته ها"
@@ -6572,3 +6568,11 @@ msgstr "متصل شده"
 msgctxt "#36035"
 msgid "Always"
 msgstr "همیشه"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "تغییر به کانال"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "ضبط"
index 1fa48e9..c177dc3 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Wybierz folder docelowy"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Wyjście stereo na wszystkie głośniki"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Ilość kanałów"
@@ -1627,7 +1623,7 @@ msgstr "Autoodtwarzanie"
 
 msgctxt "#448"
 msgid "Dolby Digital Plus (E-AC3) capable receiver"
-msgstr "Wsparcie formatu Dolby Digital (AC3)"
+msgstr "Wsparcie formatu Dolby Digital Plus (E-AC3)"
 
 msgctxt "#449"
 msgid "Enabled"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Autorzy"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Wyłącz"
@@ -2751,7 +2743,7 @@ msgstr "Aktualizacja biblioteki"
 
 msgctxt "#800"
 msgid "Music library needs to rescan tags from files."
-msgstr "Biblioteka muzyki musi zostać przeskanowana ponownie."
+msgstr "Biblioteka muzyki wymaga odświeżenia znaczników z plików."
 
 msgctxt "#801"
 msgid "Would you like to scan now?"
@@ -2953,6 +2945,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Wtyczki programów"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Ustaw ikonę wtyczki"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Ustawienia wtyczki"
@@ -3561,6 +3557,10 @@ msgctxt "#10046"
 msgid "No categories available"
 msgstr "Brak dostępnych kategorii "
 
+msgctxt "#10047"
+msgid "Try changing the setting level to see additional categories and settings."
+msgstr "Spróbuj zmienić poziom ustawień, aby zobaczyć dodatkowe kategorie i ustawienia."
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Dialog Tak/Nie"
@@ -3895,7 +3895,7 @@ msgstr "Odmowa dostępu"
 
 msgctxt "#12346"
 msgid "Password retry limit exceeded."
-msgstr "Limit prób wpisania hasła został wyczerpany."
+msgstr "Przekroczono limit prób wprowadzenia hasła."
 
 msgctxt "#12347"
 msgid "The system will now power down."
@@ -3947,7 +3947,7 @@ msgstr "Zabezpieczenie"
 
 msgctxt "#12362"
 msgid "Shutdown system if Master Lock retries exceeded"
-msgstr "Wyłącz system, gdy ilość prób logowania zostanie przekroczona"
+msgstr "Zamknij system po przekroczeniu limitu prób logowania"
 
 msgctxt "#12367"
 msgid "Master code is not valid"
@@ -4027,7 +4027,7 @@ msgstr "Wygaszacz ekranu"
 
 msgctxt "#12901"
 msgid "Fullscreen OSD"
-msgstr "OSD w trybie pełnoekranowym"
+msgstr "Menu ekranowe w trybie pełnoekranowym"
 
 msgctxt "#13000"
 msgid "System"
@@ -4051,11 +4051,11 @@ msgstr "- Minimalny czas trwania pliku"
 
 msgctxt "#13005"
 msgid "Shutdown"
-msgstr "Wyłącz"
+msgstr "Zamknij"
 
 msgctxt "#13008"
 msgid "Shutdown function"
-msgstr "Tryby wyłączania"
+msgstr "Tryb zamykania"
 
 msgctxt "#13009"
 msgid "Quit"
@@ -4063,11 +4063,11 @@ msgstr "Wyjdź"
 
 msgctxt "#13010"
 msgid "Hibernate"
-msgstr "Hibernacja"
+msgstr "Hibernuj"
 
 msgctxt "#13011"
 msgid "Suspend"
-msgstr "Wstrzymaj"
+msgstr "Uśpij"
 
 msgctxt "#13012"
 msgid "Exit"
@@ -4091,11 +4091,11 @@ msgstr "Wyłącz system"
 
 msgctxt "#13017"
 msgid "Inhibit idle shutdown"
-msgstr "Zabroń wyłączenia w stanie bezczynności"
+msgstr "Zapobiegaj zamykaniu podczas bezczynności"
 
 msgctxt "#13018"
 msgid "Allow idle shutdown"
-msgstr "Zezwól na wyłączenie w stanie bezczynności"
+msgstr "Dopuszczaj zamykanie podczas bezczynności"
 
 msgctxt "#13020"
 msgid "Is another session active, perhaps over ssh?"
@@ -4195,7 +4195,7 @@ msgstr "Zawsze włączona"
 
 msgctxt "#13109"
 msgid "Test & apply resolution"
-msgstr "Test rozdzielczości"
+msgstr "Testuj i zastosuj rozdzielczość"
 
 msgctxt "#13110"
 msgid "Save resolution?"
@@ -4355,7 +4355,7 @@ msgstr "Alarm"
 
 msgctxt "#13209"
 msgid "Alarm clock interval (in minutes)"
-msgstr "Interwał alarmu (w minutach)"
+msgstr "Alarmuj w interwale (w minutach)"
 
 msgctxt "#13210"
 msgid "Started, alarm in %im"
@@ -4959,7 +4959,7 @@ msgstr "Włącz Skalery HQ dla skalowania ponad"
 
 msgctxt "#13436"
 msgid "Allow hardware acceleration (libstagefright)"
-msgstr "Akceleracja sprzętowa (libstagefright) "
+msgstr "Dopuszczaj akcelerację sprzętową (libstagefright) "
 
 msgctxt "#13437"
 msgid "Prefer VDPAU Video Mixer"
@@ -5251,7 +5251,7 @@ msgstr "Ograniczenie pasma połączenia Internetowego"
 
 msgctxt "#14043"
 msgid "- Shutdown while playing"
-msgstr "- Wyłącz w trakcie odtwarzania"
+msgstr "- Zamknij w trakcie odtwarzania"
 
 msgctxt "#14044"
 msgid "%i min"
@@ -5419,7 +5419,7 @@ msgstr "Automatycznie odtwarzaj płyty DVD"
 
 msgctxt "#14089"
 msgid "Font to use for text subtitles"
-msgstr "Czcionka używana do napisów"
+msgstr "Czcionka napisów"
 
 msgctxt "#14090"
 msgid "International"
@@ -5465,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Zatrzymaj zgrywanie CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Źródło niedostępny"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Co chcesz zrobić z pozycjami multimedialnymi z %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Zachowaj"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Usuń"
@@ -5889,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "DXVA Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-processing"
@@ -5927,7 +5943,7 @@ msgstr "Znajdź podobne programy"
 
 msgctxt "#19004"
 msgid "Importing EPG from clients"
-msgstr "Importowanie EPG ze źródeł"
+msgstr "Importowanie Przewodnika TV z serwerów"
 
 msgctxt "#19005"
 msgid "PVR stream information"
@@ -5981,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Nagrania"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Domyślny folder dla miniatur PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanały"
@@ -6023,7 +6035,7 @@ msgstr "Brak rezultatów wyszukiwania"
 
 msgctxt "#19028"
 msgid "No EPG entries"
-msgstr "Brak pozycji EPG"
+msgstr "Brak wpisów w Przewodniku TV"
 
 msgctxt "#19029"
 msgid "Channel"
@@ -6039,7 +6051,7 @@ msgstr "Następnie"
 
 msgctxt "#19032"
 msgid "Timeline"
-msgstr "Oś czasowa"
+msgstr "Oś czasu"
 
 msgctxt "#19033"
 msgid "Information"
@@ -6163,15 +6175,15 @@ msgstr "Sortuj według: Kanał"
 
 msgctxt "#19063"
 msgid "Go to begin"
-msgstr "Idź na początek"
+msgstr "Przejdź na początek"
 
 msgctxt "#19064"
 msgid "Go to end"
-msgstr "Idź na koniec"
+msgstr "Przejdź na koniec"
 
 msgctxt "#19065"
 msgid "Default EPG window"
-msgstr "Domyślne okno EPG"
+msgstr "Domyślne okno Przewodnika TV"
 
 msgctxt "#19067"
 msgid "This event is already being recorded."
@@ -6183,15 +6195,19 @@ msgstr "To nagranie nie może być usunięte. Sprawdź plik log."
 
 msgctxt "#19069"
 msgid "EPG"
-msgstr "EPG"
+msgstr "Przewodnik TV"
+
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Przejdź do aktualnych"
 
 msgctxt "#19071"
 msgid "EPG update interval"
-msgstr "Czas odświeżania EPG"
+msgstr "Odświeżaj Przewodnik TV w interwale"
 
 msgctxt "#19072"
 msgid "Do not store the EPG in the database"
-msgstr "Nie przechowuj EPG w bazie"
+msgstr "Nie przechowuj danych Przewodnika TV w bazie"
 
 msgctxt "#19073"
 msgid "Delay channel switch"
@@ -6591,11 +6607,11 @@ msgstr "TV"
 
 msgctxt "#19181"
 msgid "Menu/OSD"
-msgstr "Menu/OSD"
+msgstr "Menu ekranowe"
 
 msgctxt "#19182"
 msgid "Days to display in the EPG"
-msgstr "Liczba dni do wyświetlenia w EPG"
+msgstr "Liczba dni wyświetlanych w Przewodniku TV"
 
 msgctxt "#19184"
 msgid "Channel information duration"
@@ -6611,11 +6627,11 @@ msgstr "Wszystkie dane w bazie PVR są kasowane"
 
 msgctxt "#19187"
 msgid "Reset the EPG database"
-msgstr "Resetuj bazę EPG"
+msgstr "Resetuj bazę Przewodnika TV"
 
 msgctxt "#19188"
 msgid "EPG is being reset"
-msgstr "Resetowanie EPG"
+msgstr "Resetowanie Przewodnika TV"
 
 msgctxt "#19189"
 msgid "Continue last channel on startup"
@@ -6659,11 +6675,11 @@ msgstr "Nagranie zakończono o: %s"
 
 msgctxt "#19199"
 msgid "Channel manager"
-msgstr "Menadżer kanałów"
+msgstr "Menedżer kanałów"
 
 msgctxt "#19200"
 msgid "EPG source:"
-msgstr "Źródło EPG:"
+msgstr "Źródło Przewodnika TV:"
 
 msgctxt "#19201"
 msgid "Channel name:"
@@ -6687,7 +6703,7 @@ msgstr "Zarządzanie grupami"
 
 msgctxt "#19206"
 msgid "Activate EPG:"
-msgstr "Aktywuj EPG:"
+msgstr "Aktywuj Przewodnik TV:"
 
 msgctxt "#19207"
 msgid "Group:"
@@ -6751,7 +6767,7 @@ msgstr "Synchronizuj grupy kanałów z serwerem"
 
 msgctxt "#19222"
 msgid "EPG"
-msgstr "EPG"
+msgstr "Przewodnik TV"
 
 msgctxt "#19223"
 msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
@@ -6783,7 +6799,7 @@ msgstr "Zamknij menu OSD po przełączeniu kanału"
 
 msgctxt "#19230"
 msgid "Prevent EPG updates during playback"
-msgstr "Zapobiegaj aktualizacji EPG podczas odtwarzania"
+msgstr "Zapobiegaj aktualizacji Przewodnika TV podczas odtwarzania"
 
 msgctxt "#19231"
 msgid "Always use the channel order from the backend(s)"
@@ -6863,23 +6879,23 @@ msgstr "Filtruj kanały"
 
 msgctxt "#19250"
 msgid "Loading EPG from database"
-msgstr "Wczytywanie EPG z bazy"
+msgstr "Wczytywanie Przewodnika TV z bazy"
 
 msgctxt "#19251"
 msgid "Update EPG information"
-msgstr "Aktualizuj informacje EPG"
+msgstr "Aktualizuj dane Przewodnika TV"
 
 msgctxt "#19252"
 msgid "Schedule EPG update for this channel?"
-msgstr "Zaplanować aktualizację EPG dla tego kanału?"
+msgstr "Zaplanować odświeżanie Przewodnika TV dla tego kanału?"
 
 msgctxt "#19253"
 msgid "EPG update scheduled for channel"
-msgstr "Aktualizacja EPG zaplanowana dla kanału"
+msgstr "Planowana aktualizacja Przewodnika TV dla kanału"
 
 msgctxt "#19254"
 msgid "EPG update failed for channel"
-msgstr "Aktualizacja EPG dla kanału nieudana"
+msgstr "Aktualizacja Przewodnika TV dla kanału nieudana"
 
 msgctxt "#19255"
 msgid "Start recording"
@@ -6951,7 +6967,11 @@ msgstr "Brak wtyczek PVR"
 
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
-msgstr "Potrzebny tuner, oprogramowanie serwerowego, i"
+msgstr "Potrzebujesz karty telewizyjnej, oprogramowania serwerowego, i"
+
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Wtyczka umożliwiająca użycie funkcji serwera PVR."
 
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
@@ -7615,7 +7635,7 @@ msgstr "Pokazuj info o muzyce"
 
 msgctxt "#20084"
 msgid "Show weather info"
-msgstr "Pokazuj info o pogodzie"
+msgstr "Pokazuj dane pogodowe"
 
 msgctxt "#20085"
 msgid "Show system info"
@@ -7631,7 +7651,7 @@ msgstr "Pokazuj wolne miejsce dysków E: F: G:"
 
 msgctxt "#20088"
 msgid "Weather info"
-msgstr "Info o pogodzie"
+msgstr "Dane pogodowe"
 
 msgctxt "#20089"
 msgid "Drive space free"
@@ -7851,35 +7871,35 @@ msgstr "Wprowadź hasło dla"
 
 msgctxt "#20144"
 msgid "Shutdown timer"
-msgstr "Timer wyłączenia"
+msgstr "Planowane zamykanie"
 
 msgctxt "#20145"
 msgid "Shutdown interval (in minutes)"
-msgstr "Interwał wyłączenia (w minutach)"
+msgstr "Zamykaj w intewale (w minutach)"
 
 msgctxt "#20146"
 msgid "Started, shutdown in %im"
-msgstr "Uruchomiono, wyłączenie za %im"
+msgstr "Uruchomiono, zamknięcie za %im"
 
 msgctxt "#20147"
 msgid "Shutdown in 30 minutes"
-msgstr "Wyłączenie za 30 minut"
+msgstr "Zamknięcie za 30 minut"
 
 msgctxt "#20148"
 msgid "Shutdown in 60 minutes"
-msgstr "Wyłączenie za 60 minut"
+msgstr "Zamknięcie za 60 minut"
 
 msgctxt "#20149"
 msgid "Shutdown in 120 minutes"
-msgstr "Wyłączenie za 120 minut"
+msgstr "Zamknięcie za 120 minut"
 
 msgctxt "#20150"
 msgid "Custom shutdown timer"
-msgstr "Własny timer wyłączenia"
+msgstr "Zaplanuj zamknięcie"
 
 msgctxt "#20151"
 msgid "Cancel shutdown timer"
-msgstr "Anuluj timer wyłączenia"
+msgstr "Anuluj zaplanowane zamknięcie"
 
 msgctxt "#20152"
 msgid "Lock preferences for %s"
@@ -8073,6 +8093,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Pobieranie informacji o artyście nie powiodło się"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Zastępuj znaczniki utworu informacjami z sieci"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Jeśli włączone, informacje o albumach i artystach pobrane z sieci zastąpią wcześniej wprowadzone wartości znaczników takie, jak gatunek, rok, wykonawca itd. Użyteczne jeśli znaczniki utworów posiadają identyfikatory MusicBrainz."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Muzyka Android"
@@ -8747,7 +8775,7 @@ msgstr "Grupuj filmy w kolekcje"
 
 msgctxt "#20459"
 msgid "Tags"
-msgstr "Tagi"
+msgstr "Znaczniki"
 
 msgctxt "#20460"
 msgid "Add %s"
@@ -8759,11 +8787,11 @@ msgstr "Usuń %s"
 
 msgctxt "#20462"
 msgid "New tag..."
-msgstr "Nowy tag..."
+msgstr "Nowy znacznik..."
 
 msgctxt "#20463"
 msgid "A tag with the name '%s' already exists."
-msgstr "Tag o nazwie '%s' już istnieje."
+msgstr "Znacznik o nazwie '%s' już istnieje."
 
 msgctxt "#20464"
 msgid "Select %s"
@@ -8849,17 +8877,13 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Usuń udział"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Folder z napisami"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Filmy i alternatywny folder dla napisów"
 
 msgctxt "#21368"
 msgid "Override ASS/SSA subtitles fonts"
-msgstr "Pomiń ustawienia czcionek napisów ASS/SSA"
+msgstr "Zastępuj czcionki w napisach ASS/SSA"
 
 msgctxt "#21369"
 msgid "Enable mouse and Touch Screen support"
@@ -8875,7 +8899,7 @@ msgstr "Miniatura"
 
 msgctxt "#21372"
 msgid "Forced DVD player region"
-msgstr "Narzuć region dla DVD"
+msgstr "Narzucaj region DVD"
 
 msgctxt "#21373"
 msgid "Video output"
@@ -9091,11 +9115,11 @@ msgstr "przynajmniej jedno kryterium"
 
 msgctxt "#21427"
 msgid "Limit to"
-msgstr "ogranicz do"
+msgstr "Ogranicz do"
 
 msgctxt "#21428"
 msgid "No limit"
-msgstr "bez ograniczeń"
+msgstr "Bez ograniczeń"
 
 msgctxt "#21429"
 msgid "Order by"
@@ -9221,10 +9245,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "miksowane"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Położenie napisów"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Stałe"
@@ -9257,6 +9277,18 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s do %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Preferuj zewnętrzne napisy"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Preferuj zewnętrzne napisy zamiast wewnętrznych"
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Zewnętrzny)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Nazwa pliku"
@@ -9367,7 +9399,7 @@ msgstr "Czułość ISO"
 
 msgctxt "#21838"
 msgid "Digital zoom"
-msgstr "Cyfrowy zoom"
+msgstr "Powiększenie cyfrowe"
 
 msgctxt "#21839"
 msgid "CCD width"
@@ -9395,7 +9427,7 @@ msgstr "Lokalizacja dodatkowa"
 
 msgctxt "#21858"
 msgid "Image type"
-msgstr "Typ pliku"
+msgstr "Typ obrazu"
 
 msgctxt "#21859"
 msgid "Time created"
@@ -9879,7 +9911,7 @@ msgstr "Weather.com (standard)"
 
 msgctxt "#24029"
 msgid "Service for weather information"
-msgstr "Usługa dla informacji pogodowych"
+msgstr "Serwis pogodowy"
 
 msgctxt "#24030"
 msgid "This Add-on can not be configured"
@@ -9937,10 +9969,18 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Dostępne aktualizacje"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Zależności nie zostały spełnione. Proszę skontaktować się z autorem dodatku."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "Wtyczka nie ma właściwej struktury"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s jest używany przez następujące zainstalowane wtyczki"
+
 msgctxt "#24047"
 msgid "This Add-on cannot be uninstalled"
 msgstr "Ta wtyczka nie może zostać usunięta"
@@ -10069,6 +10109,10 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(zablokowany)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Wtyczkę jest niekompatybilna lub oznaczono jako uszkodzoną w repozytorium."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Czy chcesz ją wyłączyć?"
@@ -10097,10 +10141,26 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "W skórze brakuje części plików"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Dodatek jest niekompatybilny z powodu niespełniania zależności."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Zatrzymaj odtwarzanie podczas wyszukiwania napisów"
+
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "Napisy zostaną ściągnięte do domyślnego katalogu, chyba że zostaną zapisane do katalogu z filmem"
+
 msgctxt "#24107"
 msgid "Searching for subtitles ..."
 msgstr "Szukanie napisów..."
 
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d  znaleziono napisy"
+
 msgctxt "#24109"
 msgid "No subtitles found"
 msgstr "Nie znaleziono napisów"
@@ -10111,12 +10171,48 @@ msgstr "Pobieram napisy..."
 
 msgctxt "#24111"
 msgid "Languages to download subtitles for"
-msgstr "Pobierz napisy dla następujących języków:"
+msgstr "Pobieraj napisy dla następujących języków:"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Wybierz języki, które będą używane podczas wyszukiwania napisów. "
 
 msgctxt "#24113"
 msgid "Failed to download subtitle"
 msgstr "Błąd podczas pobierania napisów"
 
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Nie zainstalowano serwisów napisów"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Zapisuj napisy w folderze filmu"
+
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Domyślny serwis telewizyjny"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Wybierz serwis, który będzie domyślnie używany do wyszukiwania napisów do seriali"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Domyślny serwis filmowy"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Wybierz serwis, który będzie domyślnie używany do wyszukiwania napisów do filmów"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Tekst wyszukiwania ręcznego"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Wprowadź tekst do wyszukania"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Powiadomienia"
@@ -10221,6 +10317,10 @@ msgctxt "#33016"
 msgid "Clips"
 msgstr "Klipy"
 
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Wtyczka wymaga restartu"
+
 msgctxt "#33018"
 msgid "Tonight"
 msgstr "Wieczorem"
@@ -10497,10 +10597,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2) "
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "System głośników"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10541,6 +10637,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 "Określ zachowanie, gdy żaden dźwięk nie jest generowany przez odtwarzacz lub interfejs użytkownika. [Zawsze] - wysyłany jest ciągły niesłyszalny sygnał, który utrzymuje urządzenie w stanie gotowości, może jednak blokować dostęp do urządzenia innym programom. [1-10 minut] - działa identycznie jak ustawienie Zawsze z ograniczeniem czasowym, po którym urządzenie przechodzi w stan wstrzymania [Wyłączone] - urządzenie wyjściowe przechodzi w stan wstrzymania. Uwaga - w stanie wstrzymania urządzenie może pomijać niektóre dźwięki."
+
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "Odtwarzaj dźwięki interfejsu"
@@ -10689,6 +10789,10 @@ msgctxt "#35102"
 msgid "Disable joystick when this device is present"
 msgstr "Wyłącz dżojstik kiedy urządzenie jest dostępne"
 
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "Włącz klawisze systemowe w trybie pełnoekranowym"
+
 msgctxt "#35500"
 msgid "Location"
 msgstr "Położenie"
@@ -10983,7 +11087,7 @@ msgstr "Brak dostępnych informacji."
 
 msgctxt "#36129"
 msgid "Set the amount of idle time required before displaying the screensaver."
-msgstr "Ustaw czas po którym uruchomiony zostanie wygaszacz ekranu."
+msgstr "Ustaw czas bezczynności wymagany do uruchomienia wygaszacza ekranu."
 
 msgctxt "#36130"
 msgid "Select the screensaver. XBMC will force the 'Dim' screensaver when fullscreen video playback is paused or a dialogue box is active."
@@ -11141,6 +11245,10 @@ msgctxt "#36168"
 msgid "Maximum video speed adjust to match actual screen refresh rate."
 msgstr "Maksymalna prędkość video dopasowana do rzeczywistej częstotliwości odświeżania ekranu."
 
+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 "Określ jakość próbkowania w przypadku, gdy urządzenie audio wymaga innego próbkowania niż to używane przez źródło. [Niskie] jest szybkie i ma minimalny wpływ na zasoby systemowe takie, jak użycie procesora, [Średnie] i [Wysokie] będzie używać proporcjonalnie więcej zasobów systemowych."
+
 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 "Zezwól odtwarzaczowi wideo, aby ignorował proporcję obrazu aby jak najwięcej wypełnić ekran obrazem filmu. "
@@ -11273,9 +11381,13 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Brak dostępnych informacji."
 
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Włącz osobistą cyfrową nagrywarkę (PVR) w funkcjach w XBMC. Wymagane, aby co najmniej jeden klient PVR był zainstalowany."
+
 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 "Importuj grupy kanałów z bazy PVR (jeśli jest obsługiwane). Funkcja usunie wszystkie grupy utworzone przez użytkownika, jeśli nie są one zapisane w bazie."
+msgstr "Importuj grupy kanałów z serwera PVR (jeśli jest obsługiwane). Funkcja usunie wszystkie grupy utworzone przez użytkownika, jeśli nie są one zapisane w bazie."
 
 msgctxt "#36205"
 msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
@@ -11283,7 +11395,7 @@ msgstr "Sortuj kanały według numeru kanału na serwerze, ale używaj dodatkowo
 
 msgctxt "#36206"
 msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
-msgstr "Użyj numeracji z bazy, zamiast konfigurować ręcznie w XBMC."
+msgstr "Użyj numeracji z serwera PVR, zamiast konfigurować ją ręcznie w XBMC."
 
 msgctxt "#36207"
 msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
@@ -11291,11 +11403,11 @@ msgstr "Skożystaj z menedżera kanału, który umożliwia zmianę kolejności k
 
 msgctxt "#36208"
 msgid "Instruct the backend to search for channels (if supported)."
-msgstr "Skonfiguruj bazę do wyszukiwania kanałów (jeśli jest obsługiwane)."
+msgstr "Wymuzaj na serwerze PVR wyszukiwanie kanałów (jeśli obsługiwane)."
 
 msgctxt "#36209"
 msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
-msgstr "Usuń kanał/bazę danych EPG i później ponownie zaimportuj dane z bazy."
+msgstr "Usuń kanał/bazę Przewodnika TV i importuj ponownie dane z serwera PVR."
 
 msgctxt "#36210"
 msgid "No info available yet."
@@ -11335,31 +11447,31 @@ msgstr "Brak dostępnych informacji."
 
 msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
-msgstr "Domyślnie okno wyświetlania EPG. Domyślnie dla osi czasu."
+msgstr "Domyślny wyświetlany tryb Przewodnika TV. Domyślnie oś czasowa."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Liczba importowanych dni danych EPG do pobrania z bazy. Domyślnie to 2 dni."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Liczba dni pomiędzy importem danych Przewodnika TV z serwerów. Domyślnie 3 dni."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
-msgstr "Czas pomiędzy importowaniem danych EPG z bazy. Domyślnie - 120 minut."
+msgstr "Czas pomiędzy importowaniem danych Przewodnika TV. Domyślnie 120 minut."
 
 msgctxt "#36222"
 msgid "Do not import EPG data while playing TV to minimise CPU usage."
-msgstr "Nie importuj danych EPG podczas odtwarzania mutimediów, w celu zminimalizowania zużycia procesora."
+msgstr "Nie importuj danych Przewodnika TV podczas odtwarzania multimediów, aby zminimalizować obciążenie procesora."
 
 msgctxt "#36223"
 msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
-msgstr "Domyślnie dane EPG są przechowywane w lokalnej bazie danych w celu przyspieszenia importowania, podczas wznowienia XBMC."
+msgstr "Domyślnie dane Przewodnika TV są przechowywane w lokalnej bazie danych, aby przyśpieszyć importowanie, podczas ponownego uruchomienia XBMC."
 
 msgctxt "#36224"
 msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
-msgstr "Ukryj \"Brak dostępnych informacji\" gdy brak jest danych EPG."
+msgstr "Ukryj komunikat \"Brak dostępnych informacji\", gdy brak informacji o kanale w Przewodniku TV."
 
 msgctxt "#36225"
 msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
-msgstr "Usuwanie bazy danych EPG w XBMC i ponownie importowanie danych z bazy."
+msgstr "Usuń bazę Przewodnika TV i importuj ponownie dane z serwera PVR."
 
 msgctxt "#36226"
 msgid "No info available yet."
@@ -11373,6 +11485,10 @@ msgctxt "#36228"
 msgid "Show the last viewed channel if switching to live tv."
 msgstr "Pokaż ostatnio oglądane kanały przy wejsciu w Telewizję."
 
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Wyświetlaj informację o jakości sygnału w oknie informacyjnym kodeka (jeśli obsługiwane przez wtyczkę i serwer)."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Brak dostępnych informacji."
@@ -11393,9 +11509,25 @@ msgctxt "#36234"
 msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes."
 msgstr "Czas trwania nagrania po naciśnięciu przycisku nagrywania lub podczas tworzenia nowego czasu nagrania w trybie ręcznym. Domyślnie jest to 180 minut."
 
+msgctxt "#36235"
+msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends."
+msgstr "Priorytet nagrywania. Większa liczba - wyższy priorytet. Domyślnie 50. Niewspierane przez wszystkie wtyczki i serwery."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Usuwaj nagranie po tym czasie. Domyślnie 99 dni. Niewspierane przez wszystkie wtyczki i serwery."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Początek nagrania przed rozpoczęciem audycji. Domyślnie 2 minuty. Niewspierane przez wszystkie wtyczki i serwery."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Koniec nagrania po zakończeniu audycji. Domyślnie 10 minut. Niewspierane przez wszystkie wtyczki i serwery."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
-msgstr "Wyświetl powiadomienie, gdy czasy nagrania audycji są dodawane, zakończone lub usunięte z bazy."
+msgstr "Wyświetlaj powiadomienie, gdy nagrania są dodawane, zakończone lub usuwane."
 
 msgctxt "#36240"
 msgid "No info available yet."
@@ -11431,7 +11563,7 @@ msgstr "Brak dostępnych informacji."
 
 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 "Proś o kod PIN, aby uzyskać dostęp do blokowanych kanałów rodzicielskich. Kanały mogą być oznaczone jako zamknięte w edytorze kanałów w karcie \"Ogólne\". Zablokowane kanały rodzicielskie nie mogą być odtwarzane lub nagrane bez wprowadzania kodu PIN, dodatkowo informacje EPG dla tych kanałów są ukryte."
+msgstr "Proś o kod PIN, aby uzyskać dostęp do blokowanych kanałów rodzicielskich. Kanały mogą być oznaczone jako zamknięte w edytorze kanałów w karcie \"Ogólne\". Zablokowane kanały rodzicielskie nie mogą być odtwarzane lub nagrane bez wprowadzania kodu PIN, dodatkowo informacje Przewodnika TV dla tych kanałów są ukryte."
 
 msgctxt "#36249"
 msgid "Enter a new pin code to unlock parental locked channels."
@@ -11535,11 +11667,11 @@ msgstr "Wybierz wizualizację."
 
 msgctxt "#36274"
 msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
-msgstr "Czytaj informacje z plików utworów. W przypadku dużych katalogów może spowolnić czas odczytu, zwłaszcza w sieci."
+msgstr "Czytaj metadane z plików utworów. W przypadku dużych katalogów może spowolnić czas odczytu, zwłaszcza w sieci."
 
 msgctxt "#36275"
 msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
-msgstr "Określ sposób wyświetlania nazw utworów w interfejsie użytkownika. Tagi ID3 muszą być włączone w celu prawidłowego funkcjonowania. "
+msgstr "Określ sposób wyświetlania nazw utworów w interfejsie użytkownika. Znaczniki ID3 muszą być włączone w celu prawidłowego funkcjonowania. "
 
 msgctxt "#36276"
 msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
@@ -11583,7 +11715,7 @@ msgstr "Wybierz lokalizację gdzie na dysku zostaną zapisane zgrane utwory."
 
 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 "Tagi: [B]%N[/B]: Numer ścieżki, [B]%S[/B]: Numer płyty, [B]%A[/B]: Artysta, [B]%T[/B]: Tytuł, [B]%B[/B]: Album, [B]%G[/B]: Gatunek, [B]%Y[/B]: Rok, [B]%F[/B]: Nazwa pliku, [B]%D[/B]: Czas trwania, [B]%J[/B]: Data, [B]%R[/B]: Ocena, [B]%I[/B]: Wielkość pliku."
+msgstr "Znaczniki: [B]%N[/B]: Numer ścieżki, [B]%S[/B]: Numer płyty, [B]%A[/B]: Artysta, [B]%T[/B]: Tytuł, [B]%B[/B]: Album, [B]%G[/B]: Gatunek, [B]%Y[/B]: Rok, [B]%F[/B]: Nazwa pliku, [B]%D[/B]: Czas trwania, [B]%J[/B]: Data, [B]%R[/B]: Ocena, [B]%I[/B]: Wielkość pliku."
 
 msgctxt "#36287"
 msgid "Select which audio encoder to use when ripping."
@@ -11671,11 +11803,11 @@ msgstr "Automatyczne generowanie miniaturek obrazu przy wejściu w folder zdję
 
 msgctxt "#36308"
 msgid "Pictures will automatically rotate according to information in the EXIF tag, if found."
-msgstr "Zdjęcia będą automatycznie się obracać według informacji w tagu EXIF."
+msgstr "Zdjęcia będą automatycznie się obracać według informacji w znaczniku EXIF."
 
 msgctxt "#36309"
 msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
-msgstr "Pokaż materiały wideo na listach zdjęć, ponieważ obecnie większość aparatów cyfrowych  ma możliwości nagrywania wideo."
+msgstr "Pokazuj materiały wideo na listach zdjęć, ponieważ obecnie większość aparatów cyfrowych  ma możliwości nagrywania wideo."
 
 msgctxt "#36310"
 msgid "No info available yet."
@@ -11839,7 +11971,7 @@ msgstr "Brak dostępnych informacji."
 
 msgctxt "#36350"
 msgid "Automatically send 'Wake-On-Lan' to server(s) right before trying to access shared files or services."
-msgstr "Automatyczne wysyłanie sygnału \"Wake-on-LAN\" do serwerów tuż przed tym jak próbuje uzyskać zdalny dostęp do udostępnionych plików lub usług."
+msgstr "Automatyczne wysyłaj sygnał \"Wake-On-Lan\" do serwera(ów), przed uzyskaniem dostępu zdalnego do udostępnionych plików lub usług."
 
 msgctxt "#36351"
 msgid "No info available yet."
@@ -11883,16 +12015,24 @@ msgstr "Brak dostępnych informacji."
 
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
-msgstr "Wzmocnienie strumieni AC3, które zostały zmiksowane do 2 kanałów."
+msgstr "Wzmocnij strumienie AC3 zmiksowane do 2 kanałów."
 
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
-msgstr "Wybierz tę opcję, jeśli Twój interfejs jest zdolny do dekodowania strumieni AC3."
+msgstr "Wybierz tę opcję, jeśli urządzenie odtwarzające potrafi dekodować strumienie AC3."
 
 msgctxt "#36366"
 msgid "Select this option if your receiver is capable of decoding DTS streams."
 msgstr "Wybierz tę opcję, jeśli Twój interfejs jest zdolny do dekodowania strumieni 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 "Określ maksymalną liczbę kanałów/głośników dostępnych dla zdekodowanego dźwięku. W przypadku korzystania z cyfrowych wyjść optycznych/elektrycznych, konieczne jest ustawienie tej wartości na 2.0"
+
+msgctxt "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Wybierz, aby włączyć funkcję przepuszczania zakodowanego dźwięku np. Dolby Digital, do zewnętrznego urządzenia dekodującego np. telewizora, amplitunera."
+
 msgctxt "#36369"
 msgid "Select this option if your receiver is capable of decoding TrueHD streams."
 msgstr "Wybierz tę opcję, jeśli Twój interfejs jest zdolny do dekodowania strumieni TrueHD."
@@ -11901,6 +12041,14 @@ msgctxt "#36370"
 msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
 msgstr "Wybierz tę opcję, jeśli Twój interfejs jest zdolny do dekodowania strumieni DTS-HD."
 
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Wybierz urządzenie, które będzie używane do odtwarzania zdekodowanego dźwięku np. 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 "Wybierz interfejs, którego używasz do odtwarzania zdekodowanych formatów, zaznacz dostępne opcje w 'współpracujących interfejsach'."
+
 msgctxt "#36373"
 msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
 msgstr "Określ, jakie dodatkowe funkcje nawigacji w menu obsługuje Twój interfejs."
@@ -11959,7 +12107,7 @@ msgstr "Jeżeli masz ograniczoną przepustowość łącza, XBMC będzie starał
 
 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 "Wyłącz monitor w trybie bezczynności. Przydatne dla wyłączania telewizorów, gdy nie ma wykrywanego sygnału wyświetlania, ale nie chcesz wstrzymać/wyłączać komputera."
+msgstr "Wyłączaj wyświetlacz w trybie bezczynności. Zapobiega wyłączaniu się niektórych telewizorów przy braku sygnału wejściowego, gdy nie chcesz uśpić/wyłączyć komputera."
 
 msgctxt "#36388"
 msgid "No info available yet."
@@ -11967,11 +12115,11 @@ msgstr "Brak dostępnych informacji ."
 
 msgctxt "#36389"
 msgid "Define how long XBMC should idle before shutting down."
-msgstr "Określ, czas bezczynności przed wyłączeniem XBMC."
+msgstr "Określ czas bezczynności przed zamknięciem XBMC."
 
 msgctxt "#36390"
 msgid "Define what action XBMC should do when it has been idle for a long period of time."
-msgstr "Określ, jakie działania XBMC powinien podjąć, gdy nie był używany przez długi okres czasu."
+msgstr "Określ jakie działania XBMC powinien podjąć podczas długiej bezczynności."
 
 msgctxt "#36391"
 msgid "Turn debug logging on or off. Useful for troubleshooting."
@@ -12003,7 +12151,7 @@ msgstr "Główny PIN blokady będzie wymagany na starcie XBMC, gdy opcja zostani
 
 msgctxt "#36398"
 msgid "Define the maximum number of retries before XBMC is closed down."
-msgstr "Określ maksymalną liczbę prób przed wyłączeniem XBMC."
+msgstr "Określ maksymalną liczbę prób przed zamknięciem XBMC."
 
 msgctxt "#36399"
 msgid "No info available yet."
@@ -12087,7 +12235,7 @@ msgstr "Brak dostępnych informacji ."
 
 msgctxt "#36419"
 msgid "Define locations used for retrieving weather information."
-msgstr "Określ lokalizacje o informacjach o pogodzie. "
+msgstr "Określ lokalizacje pobierania informacji o pogodzie. "
 
 msgctxt "#36420"
 msgid "No info available yet."
@@ -12099,7 +12247,27 @@ msgstr "Omijanie miksera VDPAU oszczędza zasoby, ale zmniejsza jakość obrazu"
 
 msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
-msgstr "Włącz sprzętowe dekodowanie plików wideo dekodera AMLogic"
+msgstr "Włącz sprzętowe dekodowanie wideo dekodera AMLogic"
+
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Określ akcję wykonywaną po wybraniu pozycji w Przewodniku TV: [Pokazuj menu] wyświetli menu kontekstowe z dodatkowymi akcjami; [Wybierz kanał] przełączy natychmiast na wybrany kanał; [Pokazuj informacje] wyświetli szczegółowe informacje z fabułą i dodatkowymi opcjami; [Nagrywaj] stworzy zaplanowane nagrywanie wybranej pozycji."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Pokaż menu kontekstowe"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Wybierz kanał"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Pokaż informację"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Nagrywaj"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12153,6 +12321,10 @@ msgctxt "#36522"
 msgid "Use preferred mode"
 msgstr "Użyj preferowanego trybu "
 
+msgctxt "#36523"
+msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration"
+msgstr "Maksymalna częstotliwość próbkowania dla S/PDIF lub stała częstotliwość próbkowania wyjścia audio."
+
 msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "Preferowany tryb "
@@ -12163,7 +12335,7 @@ msgstr "Tak samo jak film (autodetekcja) "
 
 msgctxt "#36526"
 msgid "Disable stereoscopic mode when playback is stopped"
-msgstr "Wyłącz tryb stereoskopowy gdy odtwarzanie jest wstrzymane "
+msgstr "Wyłącz tryb stereoskopowy, gdy odtwarzanie jest wstrzymane "
 
 msgctxt "#36527"
 msgid "This video is stereoscopic. Select playback mode"
@@ -12229,6 +12401,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Włącz sprzętowe dekodowanie plików wideo."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Głębia napisów stereoskopowych "
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Określa głębię napisów w stereoskopowych materiałach wideo. Im wyższa wartość, tym napisy wydają się być bliżej widza."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Użyj tekstur wyższej jakości dla okładek i fanartów (zużywa więcej pamięci)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Ogranicza rozdzielczość interfejsu użytkownika w celu oszczędzenia pamięci. Użyj 1080, aby wyłączyć ograniczenie. Wymaga ponownego uruchomienia."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Dla niedowidzących)"
@@ -12263,12 +12451,24 @@ msgstr "Znajdź w"
 
 msgctxt "#37016"
 msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
-msgstr "Wybierz tę opcję, jeśli Twój interfejs jest zdolny do dekodowania strumieni E-AC3."
+msgstr "Wybierz tę opcję, jeśli urządzenie odtwarzające potrafi dekodować strumienie AC3."
 
 msgctxt "#37017"
 msgid "Dual audio output"
-msgstr "Podwujne wyjście dźwięku"
+msgstr "Dualne wyjście dźwięku"
 
 msgctxt "#37018"
 msgid "Boost centre channel when downmixing"
 msgstr "Podgłoś kanał centralny przy miksowaniu"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Włącza klawisze systemowe takie jak Print Screen, Alt-Tab i regulacji głośności w trybie pełnoekranowym"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Włącz większą głębie koloru grafik"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Limit rozdzielczości interfejsu"
index e892b29..d87b1fe 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Selecionar diretório de destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Saída estéreo em todos os alto-falantes"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canais"
@@ -1507,11 +1503,11 @@ msgstr "Ver: Ícones grandes"
 
 msgctxt "#418"
 msgid "Low"
-msgstr "Baixo"
+msgstr "Mín"
 
 msgctxt "#419"
 msgid "High"
-msgstr "Alto"
+msgstr "Máx"
 
 msgctxt "#420"
 msgid "Best Match"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Desligado"
@@ -4981,10 +4973,6 @@ 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"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Parar de ripar o CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Fonte indisponível"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "O que você deseja fazer com estes itens de mídia de %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Manter"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Remove"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Pós-processamento de video"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Gravações da TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Pasta padrão para miniaturas PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canais"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ir agora"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "EPG Intervalo atualização"
@@ -6255,7 +6259,7 @@ msgstr "Primeiro dia:"
 
 msgctxt "#19085"
 msgid "Unknown channel %u"
-msgstr "Canal desconhecido %"
+msgstr "Canal desconhecido %u"
 
 msgctxt "#19086"
 msgid "Mo-__-__-__-__-__-__"
@@ -6391,11 +6395,11 @@ msgstr "Somente canais abertos"
 
 msgctxt "#19124"
 msgid "Ignore present timers"
-msgstr "Ignore agendamentos atuais"
+msgstr "Ignorar agendamentos atuais"
 
 msgctxt "#19125"
 msgid "Ignore present recordings"
-msgstr "Ignore gravações atuais"
+msgstr "Ignorar gravações atuais"
 
 msgctxt "#19126"
 msgid "Start time"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Falha ao baixar informações de artista"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Sobreponha tags de músicas com informações online"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Com este ajuste ligado, qualquer informação que for transferida para álbuns e artistas, irá sobrepor os conteúdos anteriores de suas tags de músicas, como gênero, ano, artistas de músicas etc. Útil se você tiver identificadores MusicBrainz em suas tags de músicas."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Músicas Android"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Remover compartilhamento de mídia"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Pasta de legendas"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Filme & diretório de legenda alternativo"
@@ -8903,7 +8911,7 @@ msgstr "Saída de vídeo"
 
 msgctxt "#21374"
 msgid "Video aspect"
-msgstr "Aspecto de vídeo"
+msgstr "Relação de aspecto"
 
 msgctxt "#21375"
 msgid "Normal"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "Mixado"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Local da Legenda"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixado"
@@ -9683,7 +9687,7 @@ msgstr "Guia"
 
 msgctxt "#22021"
 msgid "Allowed error in aspect ratio to minimise black bars"
-msgstr "Erro (%) permitido na proporção de aspecto para minimizar barras pretas"
+msgstr "Permitir erro na relação de aspecto para minimizar as barras pretas"
 
 msgctxt "#22022"
 msgid "Show video files in listings"
@@ -10159,7 +10163,7 @@ msgstr "Procurando por legendas..."
 
 msgctxt "#24108"
 msgid "%d subtitles found"
-msgstr "% legendas encontradas"
+msgstr "%d legenda(s) encontrada(s)"
 
 msgctxt "#24109"
 msgid "No subtitles found"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Salvar legendas para pasta de vídeo"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Serviço padrão para Seriados"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Selecione o serviço que será utilizado como padrão para procurar legendas de Seriados"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Serviço Padrão para Filmes"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Selecione o serviço que será utilizado como padrão para procurar legendas de Filmes"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Texto para procura manual"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Entre com o título para procura manual"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificações"
@@ -10207,7 +10235,7 @@ msgstr "Mostrar Menus blu-ray"
 
 msgctxt "#25004"
 msgid "Play main title: %d"
-msgstr "Reproduzir título prinicipal: %d"
+msgstr "Reproduzir título principal: %d"
 
 msgctxt "#25005"
 msgid "Title: %d"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configurar alto-falantes"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10819,31 +10843,31 @@ msgstr "Ativar mudar lado dos comandos"
 
 msgctxt "#36006"
 msgid "Could not open the adaptor"
-msgstr "Não pude abrir o adaptador"
+msgstr "Não foi possível abrir o adaptador"
 
 msgctxt "#36007"
 msgid "Devices to power on when starting XBMC"
-msgstr "Ligar a TV ou projetor quando inicializar o XBMC"
+msgstr "Ligar a TV ou projetor ao inicializar o XBMC"
 
 msgctxt "#36008"
 msgid "Devices to power off when stopping XBMC"
-msgstr "Desligar equipamentos quando parar o XBMC"
+msgstr "Desligar equipamentos ao parar o XBMC"
 
 msgctxt "#36009"
 msgid "Put devices in standby mode when activating screensaver"
-msgstr "Colocar os equipamentos em modo de espera quando ativando proteção de tela"
+msgstr "Dormir equipamentos ao ativar o protetor de tela"
 
 msgctxt "#36010"
 msgid "Wake devices when deactivating screensaver"
-msgstr "Ativar dispositivos quando protetor de tela estiver sendo desativado"
+msgstr "Acordar equipamentos ao desativar o protetor de tela"
 
 msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
-msgstr "Não pude detectar a porta CEC. Seta manualmente."
+msgstr "Não foi possível detectar à porta CEC. Configure-o manualmente."
 
 msgctxt "#36012"
 msgid "Could not initialise the CEC adaptor. Please check your settings."
-msgstr "Não pude inicializar o adaptador CEC. Por favor verifique seus ajustes."
+msgstr "Não foi possível inicializar o adaptador CEC. Por favor verifique seus ajustes."
 
 msgctxt "#36015"
 msgid "HDMI port number"
@@ -10855,7 +10879,7 @@ msgstr "Conectado"
 
 msgctxt "#36017"
 msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
-msgstr "Não pude inicializar o adaptador CEC: libCEC não foi encontrado em seu sistema."
+msgstr "Não foi possível inicializar o adaptador CEC: libCEC não foi encontrado em seu sistema."
 
 msgctxt "#36018"
 msgid "Use the TV's language setting"
@@ -10867,7 +10891,7 @@ msgstr "Conectado a um dispositivo HDMI"
 
 msgctxt "#36020"
 msgid "Make XBMC the active source when starting"
-msgstr "Faça XBMC a fonte ativa quando se inicia"
+msgstr "Faça o XBMC a fonte ativa ao iniciar"
 
 msgctxt "#36021"
 msgid "Physical address (overrules HDMI port)"
@@ -10887,11 +10911,11 @@ msgstr "Falha ao definir a nova configuração. Por favor, verifique suas config
 
 msgctxt "#36025"
 msgid "Send 'inactive source' command when stopping XBMC"
-msgstr "Envie comando 'fonte inativa' quando parando XBMC"
+msgstr "Enviar comando 'fonte inativa' ao parar o XBMC"
 
 msgctxt "#36026"
 msgid "Put devices in standby mode when putting the PC in standby"
-msgstr "Coloque o equipamento em modo standby quando colocar o PC em standby"
+msgstr "Dormir equipamentos quando o PC também dormir"
 
 msgctxt "#36027"
 msgid "This device needs servicing"
@@ -10899,11 +10923,11 @@ msgstr "Este equipamento necessita serviços"
 
 msgctxt "#36028"
 msgid "Ignore"
-msgstr "Ignore"
+msgstr "Ignorar"
 
 msgctxt "#36029"
 msgid "When the TV is switched off"
-msgstr "Quando a TV estiver desligando"
+msgstr "Ao desligar a TV"
 
 msgctxt "#36030"
 msgid "Connection lost"
@@ -11231,7 +11255,7 @@ msgstr "Selecione a qualidade de reamostragem para casos em que a saída de áud
 
 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."
+msgstr "Permitir que o reprodutor de vídeo ignore relação de aspecto até uma certa quantidade, de modo a preencher com o vídeo uma área maior da tela."
 
 msgctxt "#36171"
 msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
@@ -11271,7 +11295,7 @@ msgstr "Quando um arquivo é analisado e inserido na biblioteca, será exibido o
 
 msgctxt "#36180"
 msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode."
-msgstr "Extrair miniaturas e informação, como os codecs e a taxa de aspecto, para exibir na Biblioteca."
+msgstr "Extrair miniaturas e informação, como os codecs e a relação de aspecto, para exibir na Biblioteca."
 
 msgctxt "#36181"
 msgid "No info available yet."
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Padrão de janela EPG para exibir. A Linha do Tempo é a vista padrão."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Número de dias de dados EPG a importar do backend. O padrão é 2 dias."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Número de dias de dados EPG a importar do backend. O padrão é 3 dias."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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 estéreo 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."
@@ -12241,9 +12257,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "lecione o que vai acontecer quando um item é selecionado EPG: [Mostrar menu de contexto] irá acionar o menu contextual aonde você poderá escolher novas ações; [Mudar para o canal] irá imediatamente sintonizar o canal selecionado; [Mostrar informações] irá mostrar informações detalhadas como enredo e outras opções; [Gravar] criará um temporizador de gravação para o item selecionado."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Mostrar menu de contexto"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Mudar para o canal"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Mostrar Informações"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Gravar"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Ativar decodificação por hardware de arquivos de vídeo."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profundidade da Legenda estereoscópica"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Define a profundidade visual de legendas para vídeos estereoscópicos. Quanto maior o valor, mais próximo das legendas aparecerão para o telespectador."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Usar texturas de maior qualidade para as capas e fanart (usa mais memória)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limitar a resolução da interface gráfica para economizar memória. Não afeta a reprodução de vídeo. Use 1080 para ilimitado. Requer reinicializar."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Deficiente Visual)"
@@ -12427,4 +12475,12 @@ 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"
+msgstr "Ativar teclas de sistema como printscreen, alt-tab e teclas de volume quando em tela cheia"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Ativar maior profundidade nas cores dos artworks"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Setar o limite para resolução da interface gráfica"
index fe3ccf0..ec0de3d 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleccionar pasta de destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Emitir estéreo para todas as colunas"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canais"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Desligado"
@@ -2407,7 +2399,7 @@ msgstr "Nível de compressão"
 
 msgctxt "#666"
 msgid "Verbose logging..."
-msgstr "Verbose logging..."
+msgstr "Registo Verbose..."
 
 msgctxt "#700"
 msgid "Cleaning up library"
@@ -3411,7 +3403,7 @@ msgstr "Script falhou!: %s"
 
 msgctxt "#2101"
 msgid "Newer version needed - See log"
-msgstr "É necessária uma nova versão - verifique log"
+msgstr "É necessária uma nova versão - verifique o registo"
 
 msgctxt "#10000"
 msgid "Home"
@@ -4981,10 +4973,6 @@ msgctxt "#13439"
 msgid "Allow hardware acceleration (MediaCodec)"
 msgstr "Permitir aceleração por hardware (MediaCodec)"
 
-msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
-msgstr "Descodificação de Frames Multi-Tarefa (menos fiável)"
-
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "Método de sincronia A/V"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Interromper a conversão do CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Fonte indisponível"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "O que pretende fazer com os itens de média de %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Manter"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Remover"
@@ -5687,7 +5687,7 @@ msgstr "Introduza o valor"
 
 msgctxt "#16029"
 msgid "Check the log file for details."
-msgstr "Verifique os detalhes no ficheiro de log."
+msgstr "Verifique os detalhes no ficheiro de registo."
 
 msgctxt "#16030"
 msgid "Party mode aborted."
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Pós-processamento"
@@ -5923,7 +5927,7 @@ msgstr "%i dias"
 
 msgctxt "#19000"
 msgid "Switch to channel"
-msgstr "Mudar para canal"
+msgstr "Mudar para Canal"
 
 msgctxt "#19001"
 msgid "Separate the search words by using AND, OR and/or NOT."
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Gravações de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Pasta padrão para miniaturas do PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canais"
@@ -6063,11 +6063,11 @@ msgstr "Este canal já está a ser gravado"
 
 msgctxt "#19035"
 msgid "%s could not be played. Check the log for details."
-msgstr "Não foi possível reproduzir %s. Verifique o log para detalhes."
+msgstr "Não foi possível reproduzir %s. Verifique o registo para detalhes."
 
 msgctxt "#19036"
 msgid "This recording cannot be played. Check the log for details."
-msgstr "Esta gravação não pode ser reproduzida. Verifique os detalhes no log."
+msgstr "Esta gravação não pode ser reproduzida. Verifique os detalhes no registo."
 
 msgctxt "#19037"
 msgid "Show signal quality"
@@ -6099,11 +6099,11 @@ msgstr "Gravação"
 
 msgctxt "#19044"
 msgid "Please check your configuration or check the log for details."
-msgstr "Por favor, confirme a sua configuração ou verifique mais detalhes no log."
+msgstr "Por favor, confirme a sua configuração ou verifique mais detalhes no registo."
 
 msgctxt "#19045"
 msgid "No PVR clients have been started yet. Wait for the PVR clients to start up or check the log for details."
-msgstr "Nenhum cliente PVR foi iniciado. Espere até os clientes PVR iniciarem, ou verifique mais detalhes no log."
+msgstr "Nenhum cliente PVR foi iniciado. Espere até os clientes PVR iniciarem, ou verifique mais detalhes no registo."
 
 msgctxt "#19046"
 msgid "New channel"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ir para agora"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Intervalo de atualizações do EPG"
@@ -6339,15 +6343,15 @@ msgstr "a"
 
 msgctxt "#19109"
 msgid "Couldn't save timer. Check the log for details."
-msgstr "Não foi possível gravar o temporizador. Veja mais detalhes no log."
+msgstr "Não foi possível gravar o temporizador. Veja mais detalhes no registo."
 
 msgctxt "#19110"
 msgid "An unexpected error occurred. Try again later or check the log for details."
-msgstr "Ocorreu um erro inesperado. Por favor tente mais tarde ou veja mais detalhes no log."
+msgstr "Ocorreu um erro inesperado. Por favor tente mais tarde ou veja mais detalhes no registo."
 
 msgctxt "#19111"
 msgid "PVR backend error. Check the log for details."
-msgstr "Erro da backend PVR. Veja mais detalhes no log."
+msgstr "Erro da backend PVR. Veja mais detalhes no registo."
 
 msgctxt "#19114"
 msgid "Version"
@@ -6479,7 +6483,7 @@ msgstr "Grupos"
 
 msgctxt "#19147"
 msgid "The PVR backend does not support this action. Check the log for details."
-msgstr "A backend PVR não permite essa acção. Verifique mais detalhes no log."
+msgstr "A backend PVR não permite essa acção. Verifique mais detalhes no registo."
 
 msgctxt "#19148"
 msgid "Channel"
@@ -6543,7 +6547,7 @@ msgstr "Gravações"
 
 msgctxt "#19164"
 msgid "Cannot start recording. Check the log for details."
-msgstr "Não é possível iniciar a gravação. Verifique mais detalhes no log."
+msgstr "Não é possível iniciar a gravação. Verifique mais detalhes no registo."
 
 msgctxt "#19165"
 msgid "Switch"
@@ -6651,7 +6655,7 @@ msgstr "Nenhuma das backend PVR ligadas permite procurar canais"
 
 msgctxt "#19193"
 msgid "The channel scan cannot be started. Check the log for details."
-msgstr "Não foi possível iniciar a procura de canais. Verifique mais detalhes no log."
+msgstr "Não foi possível iniciar a procura de canais. Verifique mais detalhes no registo."
 
 msgctxt "#19194"
 msgid "Continue?"
@@ -6771,7 +6775,7 @@ 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."
+msgstr "Não foi possível activar nenhum add-on de PVR. Para mais informação, verifique as configurações ou o registo."
 
 msgctxt "#19224"
 msgid "Recording aborted"
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Não foi possível transferir informação do artista"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Sobrescrever etiquetas de música com info online"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Quando activado, qualquer informação de álbuns e artistas que seja transferida irá sobrescrever os valores presentes nas etiquetas de músicas, como os géneros, anos, artistas, etc. Isto é útil se tiver identificadores MusicBrainz nas suas etiquetas de músicas."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Música Android"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Remover partilha de conteúdo"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Pasta de legendas"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Pasta alternativa de vídeo e legendas"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mistura"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Posição das legendas"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixa"
@@ -9939,7 +9943,7 @@ msgstr "Forçar actualização"
 
 msgctxt "#24036"
 msgid "Change log"
-msgstr "Log de alterações"
+msgstr "Registo de alterações"
 
 msgctxt "#24037"
 msgid "Uninstall"
@@ -10011,7 +10015,7 @@ msgstr "Licença:"
 
 msgctxt "#24054"
 msgid "Changelog"
-msgstr "Changelog"
+msgstr "Registo de Alterações"
 
 msgctxt "#24059"
 msgid "Would you like to enable this Add-on?"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Guardar legendas na pasta do filme"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Serviço Padrão para Séries"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Escolher o serviço que será usado como padrão ao procurar legendas de Séries TV"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Serviço Padrão para Filmes"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Escolher o serviço que será usado como padrão ao procurar legendas de Séries TV"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Expressão de busca manual"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduza texto a procurar"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificações"
@@ -10475,7 +10503,7 @@ msgstr "Ver Readme"
 
 msgctxt "#33073"
 msgid "View Changelog"
-msgstr "Ver mudanças"
+msgstr "Ver Registo de Alterações"
 
 msgctxt "#33074"
 msgid "This version of %s requires an"
@@ -10573,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Áudio Windows Media 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuração das Colunas"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10671,7 +10695,7 @@ msgstr "Não foi possível iniciar Zeroconf"
 
 msgctxt "#34301"
 msgid "Is Apple's Bonjour Service installed? See log for more info."
-msgstr "O serviço Apple Bonjour está instalado? Veja o ficheiro log para mais informações."
+msgstr "O serviço Apple Bonjour está instalado? Veja o ficheiro de registo para mais informações."
 
 msgctxt "#34302"
 msgid "AirPlay requires Zeroconf to be enabled."
@@ -11430,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Padrão de janela EPG para exibir. A Linha do Tempo é a vista padrão."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Número de dias de dados EPG a importar da backend. O padrão é 2 dias."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Número de dias para importar dados EPG da backend. O padrão é de 3 dias."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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 "Seleccionar como as propriedades da saída de áudio são definidas: [Fixa] - as propriedades de saída são definidas para a mesma taxa de amostragem e configuração de colunas em todos os momentos; [Melhor Correspondência] - as propriedades de saída são definidas para serem sempre uma correspondência o mais aproximada possível às propriedades da fonte; [Optimizado] - as propriedades de saída são definidas no início da reprodução e não serão alteradas se as propriedades da fonte mudarem."
 
-msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
-msgstr "Seleccionar o número máximo de canais/colunas áudio disponíveis para descodificação de áudio."
-
 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."
@@ -12115,7 +12131,7 @@ msgstr "Definir a acção a realizar pelo XBMC quando estiver inactivo durante u
 
 msgctxt "#36391"
 msgid "Turn debug logging on or off. Useful for troubleshooting."
-msgstr "Activar o registo de depuração. É útil para resolução de problemas."
+msgstr "Activar ou desactivar o registo de depuração. É útil para resolução de problemas."
 
 msgctxt "#36392"
 msgid "No info available yet."
@@ -12241,9 +12257,25 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Activa a descodificação por hardware com o descodificador 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 descodificação ffmpeg de frames multi-tarefa quando a descodificação hardware não funciona ou está desactivada. (menos fiável do que o modo padrão de tarefa única)"
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Seleccionar o que acontece quando um item do EPG é seleccionado: [Exibir Menu de Contexto] irá exibir o menu de contexto, de onde poderá escolher outras acções.; [Mudar Para Canal] irá sintonizar imediatamente o canal relacionado; [Exibir Informação] exibirá informação detalhada, com argumento e mais opções; [Gravar] irá criar um temporizador de gravação para o item seleccionado."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Exibir menu de contexto"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Mudar para canal"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Exibir informação"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Gravar"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Activa a descodificação por hardware de ficheiros vídeo."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profundidade estereoscópica das legendas"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Definir a profundidade visual das legendas para vídeos estereoscópicos. Quanto mais alto o valor, mais próximas ficarão as legendas do espectador."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Usar texturas de maior qualidade para capas e fanart (utiliza mais memória)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limitar resolução da interface para poupar memória. Isto não afecta a reprodução de vídeo. Use 1080 para resolução ilimitada. Requer um reinício do XBMC."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Deficientes Visuais)"
@@ -12428,3 +12476,11 @@ msgstr "Aumentar volume do canal central ao fazer remisturas diminuídas"
 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."
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Activar artwork com maior profundidade de cor"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Definir limite de resolução da interface"
index ac684e7..e4c8a65 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Selectează dosarul destinație"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Scoate stereo în toate difuzoarele"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Număr de canale"
@@ -1649,10 +1645,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Autori"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Oprit"
@@ -5509,10 +5501,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Înregistrări TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Dosar implicit pentru miniaturi PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canale"
@@ -8273,10 +8261,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Elimină partajare media"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Dosar de subtitrări"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Director de film și subtitrare alternativă"
@@ -8637,10 +8621,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Număr episoade văzute"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Locație subtitrare"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fixă"
@@ -9465,6 +9445,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Costumului îi lipsesc unele fișiere"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduceți șir de căutare"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificări"
@@ -9833,10 +9817,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configurație difuzoare"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10124,3 +10104,11 @@ msgstr "Versiune interfață libCEC nesuportată. %x este mai mică decât versi
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Dosar element"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Comută pe canalul"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Înregistrează"
index 80588a9..8ef2117 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Выберите папку назначения"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Выводить стерео на все динамики"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Количество каналов"
@@ -1191,15 +1187,15 @@ msgstr "Преобразование частоты кадров"
 
 msgctxt "#337"
 msgid "Output configuration"
-msgstr "Ð\9dаÑ\81Ñ\82Ñ\80оиÑ\82Ñ\8c Ð´Ð°Ð½Ð½Ñ\8bе вывода"
+msgstr "Ð\9dаÑ\81Ñ\82Ñ\80ойка вывода"
 
 msgctxt "#338"
 msgid "Fixed"
-msgstr "Фиксированное"
+msgstr "Фиксир."
 
 msgctxt "#339"
 msgid "Optimized"
-msgstr "Оптимизированный"
+msgstr "Оптимизир."
 
 msgctxt "#340"
 msgid "Various artists"
@@ -1227,7 +1223,7 @@ msgstr "Год"
 
 msgctxt "#346"
 msgid "Normalize levels on downmix"
-msgstr "Ð\9dоÑ\80мализаÑ\86иÑ\8f Ñ\83Ñ\80овней Ð¿Ñ\80и downmix"
+msgstr "Ð\9dоÑ\80мализоваÑ\82Ñ\8c Ñ\83Ñ\80овни Ð¿Ñ\80и Ð¼Ð¸ÐºÑ\88иÑ\80овании"
 
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
@@ -1235,7 +1231,7 @@ msgstr "Выводить звук в формате DTS-HD"
 
 msgctxt "#348"
 msgid "Enable passthrough"
-msgstr "Ð\90кÑ\82ивиÑ\80оваÑ\82Ñ\8c Ð¿ÐµÑ\80еÑ\81Ñ\8bлкÑ\83"
+msgstr "Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ð¿Ñ\80Ñ\8fмой Ð²Ñ\8bвод Ð·Ð²Ñ\83ка"
 
 msgctxt "#349"
 msgid "TrueHD capable receiver"
@@ -1515,7 +1511,7 @@ msgstr "Макс."
 
 msgctxt "#420"
 msgid "Best Match"
-msgstr "Ð\90вÑ\82оподбоÑ\80"
+msgstr "Ð\9eпÑ\82имизиÑ\80."
 
 msgctxt "#421"
 msgid "Keep audio device alive"
@@ -1667,7 +1663,7 @@ msgstr "Сменить вид"
 
 msgctxt "#458"
 msgid "Limit sampling rate (kHz)"
-msgstr "Ограничить частоту (кГц)"
+msgstr "Ограничить частоту сэмплирования (кГц)"
 
 msgctxt "#459"
 msgid "Subs"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Создатели"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-чип"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Выкл."
@@ -2955,7 +2947,7 @@ msgstr "Программные дополнения"
 
 msgctxt "#1044"
 msgid "Set plug-in thumb"
-msgstr "УÑ\81Ñ\82ановиÑ\82Ñ\8c Ð¼Ð¸Ð½Ð¸-изобÑ\80ажение Ð´Ð»Ñ\8f Ð¼Ð¾Ð´Ñ\83ля"
+msgstr "Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\8dÑ\81киз Ð´Ð»Ñ\8f Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸я"
 
 msgctxt "#1045"
 msgid "Add-on settings"
@@ -3523,7 +3515,7 @@ msgstr "Сброс"
 
 msgctxt "#10036"
 msgid "Basic"
-msgstr "Ð\9dаÑ\87алÑ\8cный"
+msgstr "Ð\91азовый"
 
 msgctxt "#10037"
 msgid "Standard"
@@ -3531,7 +3523,7 @@ msgstr "Стандартный"
 
 msgctxt "#10038"
 msgid "Advanced"
-msgstr "Ð\9fÑ\80одвинÑ\83Ñ\82ый"
+msgstr "РаÑ\81Ñ\88иÑ\80енный"
 
 msgctxt "#10039"
 msgid "Expert"
@@ -3543,7 +3535,7 @@ msgstr "Браузер дополнений"
 
 msgctxt "#10041"
 msgid "Reset above settings to default"
-msgstr "СбÑ\80оÑ\81иÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð½Ð° Ð·Ð½Ð°Ñ\87ение по умолчанию"
+msgstr "СбÑ\80оÑ\81иÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð´Ð¾ Ð·Ð½Ð°Ñ\87ений по умолчанию"
 
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
@@ -3559,7 +3551,7 @@ msgstr "Справка недоступна"
 
 msgctxt "#10045"
 msgid "Resets all the visible settings to their default values."
-msgstr "СбÑ\80оÑ\81иÑ\82Ñ\8c Ð²Ñ\81е Ð¿Ñ\80едÑ\81Ñ\82авленнÑ\8bе Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð´Ð¾ Ñ\83Ñ\80овнÑ\8f Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e"
+msgstr "СбÑ\80оÑ\81иÑ\82Ñ\8c Ð²Ñ\81е Ð´Ð¾Ñ\81Ñ\82Ñ\83пнÑ\8bе Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð´Ð¾ Ð·Ð½Ð°Ñ\87ений Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e."
 
 msgctxt "#10046"
 msgid "No categories available"
@@ -3567,7 +3559,7 @@ msgstr "Нет доступных категорий"
 
 msgctxt "#10047"
 msgid "Try changing the setting level to see additional categories and settings."
-msgstr "Попробуйте поменять настройки, чтобы увидеть дополнительные категории и настройки."
+msgstr "Попробуйте поменять уровень настроек, чтобы увидеть дополнительные категории и настройки."
 
 msgctxt "#10100"
 msgid "Yes/No dialogue"
@@ -3907,7 +3899,7 @@ msgstr "Количество попыток ввода пароля исчерп
 
 msgctxt "#12347"
 msgid "The system will now power down."
-msgstr "Сейчас система будет выключена. "
+msgstr "Сейчас система будет выключена."
 
 msgctxt "#12348"
 msgid "Item locked"
@@ -4211,7 +4203,7 @@ msgstr "Сохранить разрешение?"
 
 msgctxt "#13111"
 msgid "Would you like to keep this change?"
-msgstr "ХоÑ\82иÑ\82е Ñ\81охранить изменения?"
+msgstr "Сохранить изменения?"
 
 msgctxt "#13112"
 msgid "High quality upscaling"
@@ -4259,7 +4251,7 @@ msgstr "Преобразование цветов VDPAU Studio"
 
 msgctxt "#13123"
 msgid "Keep skin?"
-msgstr "Ð\9eÑ\81Ñ\82авиÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойкÑ\83 Ñ\82емÑ\8b?"
+msgstr "Ð\9eÑ\81Ñ\82авиÑ\82Ñ\8c Ð¾Ð±Ð»Ð¾Ð¶ÐºÑ\83?"
 
 msgctxt "#13130"
 msgid "Blank other displays"
@@ -4981,10 +4973,6 @@ 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 "Синхронизация А/В"
@@ -5071,11 +5059,11 @@ msgstr "%.1f с."
 
 msgctxt "#13554"
 msgid "%d Minute"
-msgstr "%d Ð\9cинÑ\83Ñ\82а"
+msgstr "%d Ð¼Ð¸Ð½."
 
 msgctxt "#13555"
 msgid "%d Minutes"
-msgstr "%d Ð\9cинÑ\83Ñ\82Ñ\8b"
+msgstr "%d Ð¼Ð¸Ð½."
 
 msgctxt "#13600"
 msgid "Apple remote"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Остановить оцифровку CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Источник недоступен"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Что делать с медиафайлами из %s?"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Сохнанить"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Удалить"
@@ -5763,7 +5763,7 @@ msgstr "Изменить название"
 
 msgctxt "#16106"
 msgid "Manage..."
-msgstr "Управление..."
+msgstr "Управление"
 
 msgctxt "#16107"
 msgid "Edit sort title"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU  Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Постобработка"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Записи ТВ"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Папка по умолчанию для эскизов PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Каналы"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "К текущему моменту"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Интервал обновления EPG"
@@ -6319,7 +6323,7 @@ msgstr "Микшировать"
 
 msgctxt "#19101"
 msgid "Provider"
-msgstr "Провайдер"
+msgstr "Поставщик"
 
 msgctxt "#19102"
 msgid "Please switch to another channel."
@@ -6771,7 +6775,7 @@ msgstr "EPG"
 
 msgctxt "#19223"
 msgid "No PVR Add-on could be enabled. Check your settings or the log for more info."
-msgstr "Ð\9dи Ð¾Ð´Ð¸Ð½ Ð\9cодÑ\83лÑ\8c PVR Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð°ÐºÑ\82ивиÑ\80ован. Ð\9fÑ\80овеÑ\80Ñ\8cÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¸Ð»Ð¸ Ñ\81иÑ\81Ñ\82емнÑ\8bй Ð¶Ñ\83Ñ\80нал Ð´Ð»Ñ\8f Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ\82елÑ\8cной Ð¸Ð½Ñ\84оÑ\80маÑ\86ии."
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ\8f PVR. Ð\9fÑ\80овеÑ\80Ñ\8cÑ\82е Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¸Ð»Ð¸ Ñ\81м. Ð¶Ñ\83Ñ\80нал."
 
 msgctxt "#19224"
 msgid "Recording aborted"
@@ -6813,6 +6817,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 запускается…"
@@ -6835,7 +6843,7 @@ msgstr "Запуск фоновых процессов"
 
 msgctxt "#19240"
 msgid "No PVR Add-on enabled"
-msgstr "Ð\9dеÑ\82 Ð°ÐºÑ\82ивиÑ\80ованного Ð\9cодÑ\83лÑ\8f PVR"
+msgstr "Ð\9dеÑ\82 Ð°ÐºÑ\82ивнÑ\8bÑ\85 Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¹ PVR"
 
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
@@ -6843,7 +6851,7 @@ msgstr "Менеджер PVR включен без"
 
 msgctxt "#19242"
 msgid "enabled PVR Add-on. Enable at least one Add-on"
-msgstr "акÑ\82ивиÑ\80ованнÑ\8bÑ\85 Ð¼Ð¾Ð´Ñ\83лей PVR. Ð\90кÑ\82ивиÑ\80Ñ\83йÑ\82е Ð¿Ð¾ Ð¼ÐµÐ½Ñ\8cÑ\88ей Ð¼ÐµÑ\80е Ð¾Ð´Ð¸Ð½ Ð\9cодÑ\83лÑ\8c"
+msgstr "акÑ\82ивнÑ\8bÑ\85 Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¹ PVR. Ð\92клÑ\8eÑ\87иÑ\82е Ð¿Ð¾ ÐºÑ\80айней Ð¼ÐµÑ\80е Ð¾Ð´Ð½Ð¾ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ"
 
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
@@ -6959,7 +6967,7 @@ msgstr "* Все записи"
 
 msgctxt "#19271"
 msgid "No PVR Add-ons could be found"
-msgstr "Ð\9dи Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¼Ð¾Ð´Ñ\83лÑ\8f PVR Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ\80Ñ\83жено"
+msgstr "Ð\9dе Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¹ PVR"
 
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
@@ -6967,7 +6975,7 @@ msgstr "Для использования функций PVR необходим
 
 msgctxt "#19273"
 msgid "Add-on for the backend to be able to use PVR."
-msgstr "Модуль (внутрисистемной коммутации/внутреннего интерфейса), необходимый для ипользования PVR."
+msgstr "серверное ПО и соответствующее дополнение."
 
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
@@ -8089,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Не удалось загрузить сведения об исполнителе"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Заменить сведения из тэгов композиций сведениями из Интернета"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "При включении этой настройки сведения об альбомах и исполнителях, загруженные из Интернета, заменят все сведения из тэгов композиций, такие как жанры, год, исполнители и т. п. Полезно при наличии идентификаторов MusicBrainz в тэгах композиций."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Музыка Android"
@@ -8865,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Удалить медиаресурс"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка субтитров"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Папка для фильмов и альтернативных субтитров"
@@ -9237,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "смешанно"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Расположение субтитров"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Фиксированное"
@@ -9275,11 +9283,11 @@ msgstr "%s—%s"
 
 msgctxt "#21600"
 msgid "Prefer external subtitles"
-msgstr "Ð\9fÑ\80иоÑ\80иÑ\82еÑ\82 Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов Ð¸Ð·Ð²Ð½Ðµ"
+msgstr "Ð\9fÑ\80едпоÑ\87иÑ\82аÑ\82Ñ\8c Ð²Ð½ÐµÑ\88ние Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80Ñ\8b"
 
 msgctxt "#21601"
 msgid "Prefer external subtitles to internal ones"
-msgstr "Ð\9fÑ\80иоÑ\80иÑ\82еÑ\82 Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов Ð¸Ð·Ð²Ð½Ðµ Ð½Ð°Ð´ Ð²Ñ\81Ñ\82Ñ\80оеннÑ\8bми Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ами"
+msgstr "Ð\9fÑ\80едпоÑ\87иÑ\82аÑ\82Ñ\8c Ð²Ð½ÐµÑ\88ние Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80Ñ\8b Ð¿Ñ\80и Ð½Ð°Ð»Ð¸Ñ\87ии Ð²Ð½Ñ\83Ñ\82Ñ\80енниÑ\85."
 
 msgctxt "#21602"
 msgid "(External)"
@@ -9975,11 +9983,11 @@ msgstr "Неправильная структура дополнения"
 
 msgctxt "#24046"
 msgid "%s is used by the following installed Add-on(s)"
-msgstr "% используется следующим установленным(и) Модулем(-ями)"
+msgstr "%s используется установленными дополнениями"
 
 msgctxt "#24047"
 msgid "This Add-on cannot be uninstalled"
-msgstr "Ð\94аннÑ\8bй Ð\9cодÑ\83лÑ\8c Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ñ\83дален."
+msgstr "Ð\9dевозможно Ñ\83далиÑ\82Ñ\8c Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ"
 
 msgctxt "#24048"
 msgid "Rollback"
@@ -10095,7 +10103,7 @@ msgstr "Заблокировать менеджер дополнений"
 
 msgctxt "#24091"
 msgid "This Add-on cannot be disabled"
-msgstr "Ð\94аннÑ\8bй Ð\9cодÑ\83лÑ\8c Ð½ÐµÐ»Ñ\8cзÑ\8f Ð´ÐµÐ·Ð°ÐºÑ\82ивиÑ\80оваÑ\82Ñ\8c"
+msgstr "Ð\9dевозможно Ð¾Ñ\82клÑ\8eÑ\87иÑ\82Ñ\8c Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ"
 
 msgctxt "#24094"
 msgid "(current)"
@@ -10143,35 +10151,35 @@ msgstr "Модуль несовместим из-за несоблюдения 
 
 msgctxt "#24105"
 msgid "Pause when searching for subtitles"
-msgstr "Приостановите для поиска субтитров."
+msgstr "Пауза при поиске субтитров"
 
 msgctxt "#24106"
 msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
-msgstr "Ð\95Ñ\81ли Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80Ñ\8b Ð½Ðµ Ñ\81оÑ\85Ñ\80аненÑ\8b Ð² Ð¿Ð°Ð¿ÐºÐµ Ñ\81 Ð²Ð¸Ð´ÐµÐ¾, Ñ\82огда Ð¾Ð½Ð¸ Ð·Ð°Ð³Ñ\80Ñ\83жаÑ\8eÑ\82Ñ\81Ñ\8f Ð² Ð¿Ð°Ð¿ÐºÑ\83 Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов Ð¿Ð¾ Ð²Ñ\8bбоÑ\80Ñ\83 Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8f"
+msgstr "Ð\92меÑ\81Ñ\82о Ð¿Ð°Ð¿ÐºÐ¸ Ñ\81 Ð²Ð¸Ð´ÐµÐ¾ Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80Ñ\8b Ð±Ñ\83дÑ\83Ñ\82 Ñ\81оÑ\85Ñ\80аненÑ\8b Ð² Ð¿Ð°Ð¿ÐºÑ\83, Ñ\83казаннÑ\83Ñ\8e Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елем."
 
 msgctxt "#24107"
 msgid "Searching for subtitles ..."
-msgstr "Поиск субтитров..."
+msgstr "Поиск субтитров"
 
 msgctxt "#24108"
 msgid "%d subtitles found"
-msgstr "Найдено %d субтитров"
+msgstr "Найдено субтитров: %d"
 
 msgctxt "#24109"
 msgid "No subtitles found"
-msgstr "Субтитров не обнаружено"
+msgstr "Субтитры не найдены"
 
 msgctxt "#24110"
 msgid "Downloading subtitles ..."
-msgstr "СÑ\83бÑ\82иÑ\82Ñ\80Ñ\8b Ð·Ð°Ð³Ñ\80Ñ\83жаÑ\8eÑ\82Ñ\81Ñ\8f..."
+msgstr "Ð\97агÑ\80Ñ\83зка Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80овâ\80¦"
 
 msgctxt "#24111"
 msgid "Languages to download subtitles for"
-msgstr "Языки, для которых загружаются субтитры:"
+msgstr "Языки загружаемых субтитров"
 
 msgctxt "#24112"
 msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
-msgstr "УÑ\81Ñ\82ановиÑ\82Ñ\8c Ñ\8fзÑ\8bки Ð´Ð»Ñ\8f Ð¿Ð¾Ð¸Ñ\81ка Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов. Ð\9dе Ð²Ñ\81е Ð¸Ñ\81Ñ\82оÑ\87ники Ð±Ñ\83дÑ\83Ñ\82 Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\83казанные языки."
+msgstr "Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\8fзÑ\8bки Ð´Ð»Ñ\8f Ð¿Ð¾Ð¸Ñ\81ка Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов. Ð\9dе Ð²Ñ\81е Ñ\81лÑ\83жбÑ\8b Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов Ð¿Ð¾Ð´Ð´ÐµÑ\80живаÑ\8eÑ\82 Ð½Ñ\83жные языки."
 
 msgctxt "#24113"
 msgid "Failed to download subtitle"
@@ -10179,11 +10187,35 @@ msgstr "Не удалось загрузить субтитры"
 
 msgctxt "#24114"
 msgid "No subtitle services installed"
-msgstr "Ð\9dе Ð¾Ð±Ð½Ð°Ñ\80Ñ\83женÑ\8b Ð¸Ñ\81Ñ\82оÑ\87ники Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов"
+msgstr "СлÑ\83жбÑ\8b Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80ов Ð½Ðµ Ñ\83Ñ\81Ñ\82ановленÑ\8b"
 
 msgctxt "#24115"
 msgid "Save subtitles to movie folder"
-msgstr "Сохранить субтитры в папку для видео"
+msgstr "Сохранять субтитры в папку с видео"
+
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Служба субтитров сериалов"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Выбор службы, используемой по умолчанию для поиска субтитров к сериалам."
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Служба субтитров фильмов"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Выбор службы, используемой по умолчанию для поиска субтитров к фильмам."
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Заданная строка поиска"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Строка поиска"
 
 msgctxt "#25000"
 msgid "Notifications"
@@ -10569,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурация динамиков"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10613,6 +10641,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 мин.] — то же, что и [Всегда], но по истечении указанного интервала времени вывод аудио отключается. [Выкл.] — вывод аудио отключается. Примечание: в этом режиме возможен пропуск звука."
+
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "Звуки интерфейса"
@@ -10631,23 +10663,23 @@ msgstr "Никогда"
 
 msgctxt "#34124"
 msgid "44.1"
-msgstr "44.1"
+msgstr "44,1"
 
 msgctxt "#34125"
 msgid "48.0"
-msgstr "48.0"
+msgstr "48,0"
 
 msgctxt "#34126"
 msgid "88.2"
-msgstr "88.2"
+msgstr "88,2"
 
 msgctxt "#34127"
 msgid "96.0"
-msgstr "96.0"
+msgstr "96,0"
 
 msgctxt "#34128"
 msgid "192.0"
-msgstr "192.0"
+msgstr "192,0"
 
 msgctxt "#34201"
 msgid "Can't find a next item to play"
@@ -10763,7 +10795,7 @@ msgstr "Отключать джойстик, когда это устройст
 
 msgctxt "#35103"
 msgid "Enable system keys in fullscreen"
-msgstr "Ð\90кÑ\82ивиÑ\80оваÑ\82Ñ\8c Ð½Ð°Ð¶Ð°Ñ\82ия клавиш в полноэкранном режиме"
+msgstr "РазÑ\80еÑ\88иÑ\82Ñ\8c Ñ\81иÑ\81Ñ\82емнÑ\8bе Ñ\81оÑ\87еÑ\82ания клавиш в полноэкранном режиме"
 
 msgctxt "#35500"
 msgid "Location"
@@ -11217,6 +11249,10 @@ 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 "Выбор качества преобразования частоты сэмплирования, если звук нужно вывести с частотой, отличной от источника. [Низк.] обеспечивает высокую скорость и минимальную нагрузку на системные ресурсы, например ЦП. [Средн.] и [Высок.], соответственно, используют больше системных ресурсов."
+
 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 "Игнорировать соотношение сторон видео до некоторой степени, чтобы заполнить больше площади экрана."
@@ -11351,7 +11387,7 @@ 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 "Ð\90кÑ\82ивиÑ\80оваÑ\82Ñ\8c Ñ\84Ñ\83нкÑ\86ии Ð\9fеÑ\80Ñ\81оналÑ\8cного Ð\92идеоРегиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80а (PVR) Ð² XBMC. Ð¢Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ð¿Ð¾ ÐºÑ\80айней Ð¼ÐµÑ\80е Ð¾Ð´Ð¸Ð½ Ð¿Ñ\80едÑ\83Ñ\81Ñ\82ановленнÑ\8bй Ð\9cодÑ\83лÑ\8c PVR."
+msgstr "Ð\90кÑ\82ивиÑ\80оваÑ\82Ñ\8c Ñ\84Ñ\83нкÑ\86ии Ð¿Ñ\80оÑ\81моÑ\82Ñ\80а Ð¸ Ð·Ð°Ð¿Ð¸Ñ\81и Ð¢Ð\92 (PVR) Ð² XBMC. Ð\94лÑ\8f Ñ\8dÑ\82ого Ñ\82Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ð¿Ð¾ ÐºÑ\80айней Ð¼ÐµÑ\80е Ð¾Ð´Ð½Ð¾ Ð´Ð¾Ð¿Ð¾Ð»ÐµÐ½Ð½Ð¸Ðµ 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."
@@ -11418,8 +11454,8 @@ 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 "Ð\98мпоÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c EPG Ñ\81 Ð¢Ð\92\81еÑ\80веÑ\80ов Ð½Ð° Ñ\83казанное Ñ\87иÑ\81ло Ð´Ð½ÐµÐ¹. Ð\9fо Ñ\83молÑ\87аниÑ\8e â\80\94 2 дня."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Ð\98нÑ\82еÑ\80вал Ð²Ñ\80емени Ð² Ð´Ð½Ñ\8fÑ\85, Ð·Ð° ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð´Ð°Ð½Ð½Ñ\8bе EPG Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82иÑ\80Ñ\83Ñ\8eÑ\82Ñ\81Ñ\8f Ñ\81 Ð¢Ð\92\81еÑ\80веÑ\80ов. Ð\9fо Ñ\83молÑ\87аниÑ\8e â\80\94 3 дня."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11453,6 +11489,10 @@ 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 "Информация пока недоступна."
@@ -11475,7 +11515,19 @@ msgstr "Продолжительность записи при нажатии к
 
 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. Не поддерживается всеми Модулями (и внутренними интерфейсами)."
+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."
@@ -11965,9 +12017,9 @@ msgctxt "#36360"
 msgid "No info available yet."
 msgstr "Информация пока недоступна."
 
-msgctxt "#36362"
-msgid "Select the maximum number of audio channels/speakers available for audio decoded."
-msgstr "УÑ\81Ñ\82ановиÑ\82Ñ\8c Ð¼Ð°ÐºÑ\81ималÑ\8cное Ñ\87иÑ\81ло Ð°Ñ\83диÑ\80оканалов/колонок Ð´Ð»Ñ\8f Ð´ÐµÐºÐ¾Ð´Ð¸Ñ\80ованного Ð°Ñ\83диопоÑ\82ока."
+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 "Ð\9dаÑ\81Ñ\82Ñ\80ойка Ð²Ñ\8bбоÑ\80а Ð¿Ð°Ñ\80амеÑ\82Ñ\80ов Ð°Ñ\83диовÑ\8bÑ\85ода: [ФикÑ\81иÑ\80.] â\80\94 Ð²Ñ\81егда Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\83казаннÑ\83Ñ\8e Ñ\87аÑ\81Ñ\82оÑ\82Ñ\83 Ñ\81Ñ\8dмплиÑ\80ованиÑ\8f Ð¸ ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\8e ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº; [Ð\9dаилÑ\83Ñ\87Ñ\88.] â\80\94 Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b Ð°Ñ\83диовÑ\8bÑ\85ода Ð²Ñ\8bбиÑ\80аÑ\8eÑ\82Ñ\81Ñ\8f, Ñ\87Ñ\82обÑ\8b Ð½Ð°Ð¸Ð»Ñ\83Ñ\87Ñ\88им Ð¾Ð±Ñ\80азом Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82воваÑ\82Ñ\8c Ð¸Ñ\81Ñ\82оÑ\87никÑ\83; [Ð\9eпÑ\82имизиÑ\80.] â\80\94 Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b Ð°Ñ\83диовÑ\8bÑ\85ода Ð·Ð°Ð´Ð°Ñ\8eÑ\82Ñ\81Ñ\8f Ð² Ð½Ð°Ñ\87але Ð²Ð¾Ñ\81пÑ\80оизведениÑ\8f Ð¸ Ð½Ðµ Ð¼ÐµÐ½Ñ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð¿Ñ\80и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð¿Ð°Ñ\80амеÑ\82Ñ\80ов Ð¸Ñ\81Ñ\82оÑ\87ника."
 
 msgctxt "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
@@ -11983,11 +12035,11 @@ msgstr "Включите эту настройку, если ваш ресиве
 
 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 "УÑ\81Ñ\82ановиÑ\82Ñ\8c Ð¼Ð°ÐºÑ\81ималÑ\8cное Ñ\87иÑ\81ло Ð°Ñ\83диÑ\80оканалов/колонок Ð´Ð»Ñ\8f Ð´ÐµÐºÐ¾Ð´Ð¸Ñ\80ованного Ð°Ñ\83диопоÑ\82ока. Ð\95Ñ\81ли Ð¸Ñ\81полÑ\8cзованÑ\8b Ð²Ñ\8bÑ\85однÑ\8bе Ð¾Ð¿Ñ\82иÑ\87еÑ\81кие/коакÑ\81иалÑ\8cнÑ\8bе ÐºÐ°Ð½Ð°Ð»Ñ\8b, Ñ\83Ñ\81Ñ\82ановиÑ\82е Ð½Ð° 2.0"
+msgstr "Ð\92Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¼Ð°ÐºÑ\81ималÑ\8cное Ñ\87иÑ\81ло Ð°Ñ\83диÑ\80оканалов/колонок Ð´Ð»Ñ\8f Ð´ÐµÐºÐ¾Ð´Ð¸Ñ\80ованного Ð°Ñ\83диопоÑ\82ока. Ð\9fÑ\80и Ð¸Ñ\81полÑ\8cзовании Ñ\86иÑ\84Ñ\80ового Ð¾Ð¿Ñ\82иÑ\87еÑ\81кого/коакÑ\81иалÑ\8cного Ð²Ñ\8bÑ\85ода Ð²Ñ\8bбеÑ\80иÑ\82е 2.0."
 
 msgctxt "#36368"
 msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
-msgstr "Выберите для активации транзита аудиопотока, чтобы воспроизодить кодированный аудиопоток типа Dolby Digital."
+msgstr "Включение прямого вывода кодированного аудиопотока, например Dolby Digital, на А/В-ресивер."
 
 msgctxt "#36369"
 msgid "Select this option if your receiver is capable of decoding TrueHD streams."
@@ -11999,11 +12051,11 @@ msgstr "Включите эту настройку, если ваш ресиве
 
 msgctxt "#36371"
 msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
-msgstr "Выберите устройство воспроизведения декодированного аудиопотока, напр., 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 "Ð\92Ñ\8bбеÑ\80иÑ\82е Ñ\83Ñ\81Ñ\82Ñ\80ойÑ\81Ñ\82во Ð²Ð¾Ñ\81пÑ\80оизведениÑ\8f Ð´ÐµÐºÐ¾Ð´Ð¸Ñ\80ованнÑ\8bÑ\85 Ñ\84оÑ\80маÑ\82ов, Ð»Ñ\8eбÑ\8bÑ\85 Ð¸Ð· Ñ\81пиÑ\81ка Ð² Ð¼ÐµÐ½Ñ\8e 'Ñ\81овмеÑ\81Ñ\82имое Ñ\83Ñ\81Ñ\82Ñ\80ойÑ\81Ñ\82во Ð¿Ñ\80иÑ\91ма'."
+msgstr "Ð\92Ñ\8bбоÑ\80 Ñ\83Ñ\81Ñ\82Ñ\80ойÑ\81Ñ\82ва Ð²Ð¾Ñ\81пÑ\80оизведениÑ\8f ÐºÐ¾Ð´Ð¸Ñ\80ованнÑ\8bÑ\85 Ñ\84оÑ\80маÑ\82ов. Ð\94оÑ\81Ñ\82Ñ\83пнÑ\8bе Ñ\84оÑ\80маÑ\82Ñ\8b Ð²Ñ\8bбиÑ\80аÑ\8eÑ\82Ñ\81Ñ\8f Ð½Ð°Ñ\81Ñ\82Ñ\80ойками \"Ð\92Ñ\8bводиÑ\82Ñ\8c Ð·Ð²Ñ\83к Ð² Ñ\84оÑ\80маÑ\82еâ\80¦\"."
 
 msgctxt "#36373"
 msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
@@ -12205,6 +12257,26 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Включение аппаратного декодирования видеофайлов при помощи декодера AMLogic."
 
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Действие при выборе элемента EPG. [Показать контекстное меню] — вывод контекстного меню для выбора дальнейших действий; [Переключиться на канал] — мгновенное переключение на соответствующий канал; [Показать сведения] — подробные сведения о сюжете и другие параметры; [Запись] — создание таймера записи для выбранного элемента."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Показать контекстное меню"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Переключиться на канал"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Показать сведения"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Запись"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Стереоскопический режим (текущий)"
@@ -12257,6 +12329,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 "Предпочтительный режим"
@@ -12293,6 +12369,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 до стерео. [Вкл.] — сохранение исходного динамического диапазона при микшировании, но при этом громкость будет ниже. [Выкл.] — сохранение уровня исходного уровня громкости, но со сжатием динамического диапазона. Примечание: динамический диапазон — это разница между самым тихим и самым громким звуками исходного аудио."
+
 msgctxt "#36535"
 msgid "Stereoscopic mode of video"
 msgstr "Стереоскопический режим видео"
@@ -12333,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Включение аппаратного декодирования видеофайлов."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Глубина стереосубтитров"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Настройка визуальной глубины субтитров для стереоскопического видео. Чем выше значение, тем ближе субтитры к зрителю."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Высококачественные текстуры для обложек и фанарта (повышенное использование памяти)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Ограничение разрешения интерфейса, чтобы сэкономить память. Не влияет на воспроизведение видео. 1080 — без ограничений. Требуется перезапуск."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Для глухих)"
@@ -12379,4 +12475,12 @@ msgstr "Усиливать центральный канал при микшир
 
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
-msgstr "Активация клавиш для скриншота, alt-tab и клавиши управления громкостью в полноэкранном режиме."
+msgstr "Разрешить системные комбинации клавиш, например PRINT SCREEN, ALT+TAB, клавиши громкости, в полноэкранном режиме."
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Разрешить картинки с расширенной глубиной цвета"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Ограничить разрешение интерфейса"
index b2c546f..342cd0a 100644 (file)
@@ -725,10 +725,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Изаберите одредишну фасциклу"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Стерео излаз ка свим звучницима"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Број канала"
@@ -1477,10 +1473,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Заслуге"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Изме. чип"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Искљ."
@@ -6209,10 +6201,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Уклони дељену локацију медија"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Фасцикла са титловима"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Фасцикла филмова и алтернативних титлова"
@@ -7185,6 +7173,10 @@ msgctxt "#24094"
 msgid "(current)"
 msgstr "Омогући хардверско убрзање (CrystalHD)"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Унесите реч за претрагу"
+
 msgctxt "#29800"
 msgid "Library Mode"
 msgstr "Режим библиотеке"
@@ -7493,10 +7485,6 @@ msgctxt "#34003"
 msgid "DXVA2"
 msgstr "DXVA"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурација звучника"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -7560,3 +7548,11 @@ msgstr "Повезано"
 msgctxt "#36035"
 msgid "Always"
 msgstr "Увек"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Пребаци на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Сними"
index d951afe..c73b8c9 100644 (file)
@@ -821,10 +821,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Izaberite odredišnu fasciklu"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo izlaz ka svim zvučnicima"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Broj kanala"
@@ -1581,10 +1577,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Zasluge"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Izme. čip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Isklj."
@@ -6389,10 +6381,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Ukloni deljenu lokaciju medija"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Fascikla sa titlovima"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Fascikla filmova i alternativnih titlova"
@@ -6729,10 +6717,6 @@ msgctxt "#21452"
 msgid "Get More..."
 msgstr "Nađi jos..."
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokacija prevoda"
-
 msgctxt "#21800"
 msgid "File name"
 msgstr "Ime datoteke"
@@ -7385,6 +7369,10 @@ msgctxt "#24094"
 msgid "(current)"
 msgstr "Omogući hardversko ubrzanje (CrystalHD)"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Unesite reč za pretragu"
+
 msgctxt "#29800"
 msgid "Library Mode"
 msgstr "Režim biblioteke"
@@ -7693,10 +7681,6 @@ msgctxt "#34003"
 msgid "DXVA2"
 msgstr "DXVA"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfiguracija zvučnika"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -7760,3 +7744,11 @@ msgstr "Povezano"
 msgctxt "#36035"
 msgid "Always"
 msgstr "Uvek"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Prebaci na kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Snimi"
index 543a2be..dcb637f 100644 (file)
@@ -275,19 +275,19 @@ msgstr "premenlivé"
 
 msgctxt "#88"
 msgid "South"
-msgstr "južný"
+msgstr "Juh"
 
 msgctxt "#89"
 msgid "North"
-msgstr "severný"
+msgstr "Sever"
 
 msgctxt "#90"
 msgid "West"
-msgstr "západný"
+msgstr "Západ"
 
 msgctxt "#91"
 msgid "East"
-msgstr "východný"
+msgstr "Východ"
 
 msgctxt "#92"
 msgid "Variable"
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Vyberte cieľový priečinok"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo výstup do všetkých reproduktorov"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Počet kanálov"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Autori"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Vypnúť"
@@ -4981,10 +4973,6 @@ msgctxt "#13439"
 msgid "Allow hardware acceleration (MediaCodec)"
 msgstr "Povoliť hardvérovú akceleráciu (MediaCodec)"
 
-msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
-msgstr "Dekódovanie rámcov s využitím viacerých vlákien súčasne (menej spoľahlivé)"
-
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "Spôsob synchronizácie A/V"
@@ -5477,6 +5465,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Zastaviť kopírovanie CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Nedostupný zdroj"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Zachovať"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Odstrániť"
@@ -5901,6 +5897,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-processing"
@@ -5993,10 +5993,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV nahrávky"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Predvolený priečinok pre náhľady PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanály"
@@ -8869,10 +8865,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Odstrániť zdieľanie média"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Priečinok s titulkami"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film a alternatívny priečinok s titulkami"
@@ -9241,10 +9233,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "zmiešané"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Umiestnenie titulkov"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Pevné"
@@ -10189,6 +10177,26 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Uložiť titulky do priečinka s filmom"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Predvolená TV služba"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Zvoľte službu, ktorá bude použitá ako predvolená pre vyhľadanie titulkov pre seriály"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Predvolená filmová služba"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Zvoľte službu, ktorá bude použitá ako predvolená pre vyhľadanie titulkov pre filmy"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Zadajte hľadaný výraz"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifikácie"
@@ -10573,10 +10581,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Nastavenie reproduktorov"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11429,10 +11433,6 @@ 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 "Number of days of EPG data to import from backends. Defaults to 2 days."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -12213,6 +12213,22 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Enable hardware video decode using AMLogic decoder"
 
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Zobraziť kontextové menu"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Prepnúť na kanál"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Zobraziť informácie"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Nahrávať"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Stereoscopic mode (current)"
@@ -12341,6 +12357,14 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Enable hardware decoding of video files."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Hĺbka 3D titulkov"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Nastaví obrazovú hĺbku titulkov pre 3D videá. Čím vyššia hodnota, tým bližšie sa budú titulky javiť."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Visually Impaired)"
@@ -12388,3 +12412,7 @@ msgstr "Boost centre channel when downmixing"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Zapne systémové klávesy ako napr. printscreen, alt-tab a klávesy pre ovládanie hlasitosti v režime celej obrazovky"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Nastaviť limit rozlíšenia užívateľského prostredia"
index 72652ed..c36d979 100644 (file)
@@ -13,7 +13,7 @@
 
   <regions>
     <region name="Slovenija" locale="SI">
-      <dateshort>D.M.YYYY</dateshort>
+      <dateshort>D. M. YYYY</dateshort>
       <datelong>D. MMMM YYYY</datelong>
       <time symbolAM="" symbolPM="">H:mm:ss</time>
       <tempunit>C</tempunit>
index f13adc2..c5f74ab 100644 (file)
@@ -43,7 +43,7 @@ msgstr "XBMC SVN"
 
 msgctxt "#7"
 msgid "File manager"
-msgstr "Upravljalec datotek"
+msgstr "Upravljalnik datotek"
 
 msgctxt "#8"
 msgid "Weather"
@@ -335,7 +335,7 @@ msgstr "Da"
 
 msgctxt "#108"
 msgid "Slideshow"
-msgstr "Diaprojekcija slik"
+msgstr "Projekcija slik"
 
 msgctxt "#109"
 msgid "Create thumbs"
@@ -383,27 +383,27 @@ msgstr "Nova mapa"
 
 msgctxt "#120"
 msgid "Confirm file copy"
-msgstr "Potrdi kopiranje datoteke"
+msgstr "Potrdite kopiranje datoteke"
 
 msgctxt "#121"
 msgid "Confirm file move"
-msgstr "Potrdi premik datoteke"
+msgstr "Potrdite premik datoteke"
 
 msgctxt "#122"
 msgid "Confirm file delete?"
-msgstr "Potrdi izbris datoteke?"
+msgstr "Potrdite izbris datoteke"
 
 msgctxt "#123"
 msgid "Copy these files?"
-msgstr "Ali naj kopiram te datoteke?"
+msgstr "Ali želite kopirati te datoteke?"
 
 msgctxt "#124"
 msgid "Move these files?"
-msgstr "Ali naj premaknem te datoteke?"
+msgstr "Ali želite premakniti te datoteke?"
 
 msgctxt "#125"
 msgid "Delete these files? - Deleting files cannot be undone!"
-msgstr "Ali naj izbrišem te datoteke? - Izbrisa datotek ni mogoče razveljaviti!"
+msgstr "Ali želite izbrisati te datoteke? - Izbrisa datotek ni mogoče razveljaviti!"
 
 msgctxt "#126"
 msgid "Status"
@@ -419,7 +419,7 @@ msgstr "Splošno"
 
 msgctxt "#129"
 msgid "Slideshow"
-msgstr "Diaprojekcija slik"
+msgstr "Projekcija slik"
 
 msgctxt "#130"
 msgid "System info"
@@ -511,11 +511,11 @@ msgstr "Povezava:"
 
 msgctxt "#152"
 msgid "Half duplex"
-msgstr "Polovični duplex"
+msgstr "Polovični dupleks"
 
 msgctxt "#153"
 msgid "Full duplex"
-msgstr "Celotni duplex"
+msgstr "Polni dupleks"
 
 msgctxt "#154"
 msgid "Storage"
@@ -535,7 +535,7 @@ msgstr "Video"
 
 msgctxt "#158"
 msgid "Free memory"
-msgstr "Prosti pomnilnik"
+msgstr "Prost pomnilnik"
 
 msgctxt "#159"
 msgid "No link"
@@ -547,23 +547,23 @@ msgstr "Prosto"
 
 msgctxt "#161"
 msgid "Unavailable"
-msgstr "Nedosegljiv"
+msgstr "Nedosegljivo"
 
 msgctxt "#162"
 msgid "Tray open"
-msgstr "Odprta vratca medija"
+msgstr "Odprta vratca"
 
 msgctxt "#163"
 msgid "Reading"
-msgstr "Prebiram"
+msgstr "Berem"
 
 msgctxt "#164"
 msgid "No disc"
-msgstr "Ni medija"
+msgstr "Ni plošče"
 
 msgctxt "#165"
 msgid "Disc present"
-msgstr "Medij prisoten"
+msgstr "Plošča prisotna"
 
 msgctxt "#166"
 msgid "Skin"
@@ -571,7 +571,7 @@ msgstr "Preobleka"
 
 msgctxt "#167"
 msgid "Cancel file operations"
-msgstr "Prekliči operacije z datotekami"
+msgstr "Prekliči datotečne operacije"
 
 msgctxt "#168"
 msgid "%s- %s"
@@ -583,7 +583,7 @@ msgstr "Ločljivost"
 
 msgctxt "#170"
 msgid "Adjust display refresh rate to match video"
-msgstr "Prilagodi osveževanje zaslona videu"
+msgstr "Posnetku prilagodi stopnjo oveževanja zaslona"
 
 msgctxt "#171"
 msgid "Sort title"
@@ -639,7 +639,7 @@ msgstr "OK"
 
 msgctxt "#187"
 msgid "No albums found!"
-msgstr "Ni najdenih albumov!"
+msgstr "Albumov ni mogoče najti!"
 
 msgctxt "#188"
 msgid "Select all"
@@ -647,7 +647,7 @@ msgstr "Izberi vse"
 
 msgctxt "#189"
 msgid "Scanning media info"
-msgstr "Pregledujem informacije o mediju"
+msgstr "Pregledujem predstavne informacije"
 
 msgctxt "#190"
 msgid "Save"
@@ -667,11 +667,11 @@ msgstr "Preglej"
 
 msgctxt "#194"
 msgid "Searching..."
-msgstr "Iščem..."
+msgstr "Iščem ..."
 
 msgctxt "#195"
 msgid "No info found!"
-msgstr "Ne najdem informacije!"
+msgstr "Informacij ni mogoče najti!"
 
 msgctxt "#196"
 msgid "Select movie:"
@@ -707,7 +707,7 @@ msgstr "Zasedba"
 
 msgctxt "#207"
 msgid "Plot"
-msgstr "Zgodba"
+msgstr "Povzetek"
 
 msgctxt "#208"
 msgid "Play"
@@ -715,7 +715,7 @@ msgstr "Predvajaj"
 
 msgctxt "#209"
 msgid "Next"
-msgstr "Naslednji"
+msgstr "Naprej"
 
 msgctxt "#210"
 msgid "Previous"
@@ -723,11 +723,11 @@ msgstr "Prejšnji"
 
 msgctxt "#213"
 msgid "Calibrate user interface..."
-msgstr "Umeri uporabniški vmesnik..."
+msgstr "Umeri uporabniški vmesnik ..."
 
 msgctxt "#214"
 msgid "Video calibration..."
-msgstr "Umeritev slike..."
+msgstr "Umeritev slike ..."
 
 msgctxt "#215"
 msgid "Soften"
@@ -747,11 +747,11 @@ msgstr "Pogon DVD"
 
 msgctxt "#219"
 msgid "Please insert disc"
-msgstr "Vstavite medij"
+msgstr "Vstavite ploščo"
 
 msgctxt "#220"
 msgid "Remote share"
-msgstr "Oddaljena raba"
+msgstr "Oddaljena mapa"
 
 msgctxt "#221"
 msgid "Network is not connected"
@@ -771,7 +771,7 @@ msgstr "Navpični premik"
 
 msgctxt "#226"
 msgid "Test patterns..."
-msgstr "Testni vzorci..."
+msgstr "Testni vzorci ..."
 
 msgctxt "#227"
 msgid "Lookup audio CD track names from freedb.org"
@@ -861,13 +861,13 @@ msgctxt "#249"
 msgid "Music"
 msgstr "Glasba"
 
+msgctxt "#250"
+msgid "Visualisation"
+msgstr "Vizualizacija"
+
 msgctxt "#251"
 msgid "Select destination directory"
-msgstr "Izberite ciljni direktorij"
-
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo zvok na vse zvočnike"
+msgstr "Izberite ciljno mapo"
 
 msgctxt "#253"
 msgid "Number of channels"
@@ -891,7 +891,7 @@ msgstr "Napaka"
 
 msgctxt "#258"
 msgid "Enable tag reading"
-msgstr "Omgoči branje značk"
+msgstr "Omogoči branje značk"
 
 msgctxt "#259"
 msgid "Opening"
@@ -903,7 +903,7 @@ msgstr "Shoutcast"
 
 msgctxt "#261"
 msgid "Waiting for start..."
-msgstr "Čakam na začetek..."
+msgstr "Čakam na začetek ..."
 
 msgctxt "#262"
 msgid "Scripts output"
@@ -911,7 +911,7 @@ msgstr "Izhod skript"
 
 msgctxt "#263"
 msgid "Allow control of XBMC via HTTP"
-msgstr "Dovoli upravljanje z XBMC preko HTTP"
+msgstr "Dovoli upravljanje z XBMC-jem preko HTTP-ja"
 
 msgctxt "#264"
 msgid "Record"
@@ -987,7 +987,7 @@ msgstr "Preverite XML datoteke"
 
 msgctxt "#282"
 msgid "Found %i items"
-msgstr "Najdeno %i posnetkov"
+msgstr "Najdeno %i predmetov"
 
 msgctxt "#283"
 msgid "Search results"
@@ -999,11 +999,11 @@ msgstr "Ni rezultatov"
 
 msgctxt "#285"
 msgid "Preferred audio language"
-msgstr "Privzet jezik zvoka"
+msgstr "Privzeti jezik zvoka"
 
 msgctxt "#286"
 msgid "Preferred subtitle language"
-msgstr "Privzet jezik podnapisov"
+msgstr "Privzeti jezik podnapisov"
 
 msgctxt "#287"
 msgid "Subtitles"
@@ -1031,7 +1031,7 @@ msgstr "Zvok"
 
 msgctxt "#293"
 msgid "Browse for subtitles"
-msgstr "Prebrskaj za podnapise"
+msgstr "Prebrskaj za podnapisi"
 
 msgctxt "#294"
 msgid "Create bookmark"
@@ -1087,7 +1087,7 @@ msgstr "Jezik uporabniškega vmesnika"
 
 msgctxt "#312"
 msgid "(0=auto)"
-msgstr "(0=auto)"
+msgstr "(0=samodejno)"
 
 msgctxt "#313"
 msgid "Cleaning database"
@@ -1095,7 +1095,7 @@ msgstr "Čiščenje baze podatkov"
 
 msgctxt "#314"
 msgid "Preparing..."
-msgstr "Pripravljanje..."
+msgstr "Pripravljanje ..."
 
 msgctxt "#315"
 msgid "Database error"
@@ -1103,7 +1103,7 @@ msgstr "Napaka v podatkovni bazi"
 
 msgctxt "#316"
 msgid "Searching songs..."
-msgstr "Iščem pesmi..."
+msgstr "Iščem pesmi ..."
 
 msgctxt "#317"
 msgid "Cleaned database successfully"
@@ -1111,7 +1111,7 @@ msgstr "Podatkovna baza je uspešno očiščena"
 
 msgctxt "#318"
 msgid "Cleaning songs..."
-msgstr "Čistim pesmi..."
+msgstr "Čistim pesmi ..."
 
 msgctxt "#319"
 msgid "Error cleaning songs"
@@ -1119,7 +1119,7 @@ msgstr "Napaka pri čiščenju pesmi"
 
 msgctxt "#320"
 msgid "Cleaning artists..."
-msgstr "Čistim izvajalce..."
+msgstr "Čistim izvajalce ..."
 
 msgctxt "#321"
 msgid "Error cleaning artists"
@@ -1127,7 +1127,7 @@ msgstr "Napaka pri čiščenju izvajalcev"
 
 msgctxt "#322"
 msgid "Cleaning genres..."
-msgstr "Čistim žanre..."
+msgstr "Čistim žanre ..."
 
 msgctxt "#323"
 msgid "Error cleaning genres"
@@ -1135,7 +1135,7 @@ msgstr "Napaka pri čiščenju žanrov"
 
 msgctxt "#324"
 msgid "Cleaning paths..."
-msgstr "Čistim poti...."
+msgstr "Čistim poti ..."
 
 msgctxt "#325"
 msgid "Error cleaning paths"
@@ -1143,7 +1143,7 @@ msgstr "Napaka pri čiščenju poti"
 
 msgctxt "#326"
 msgid "Cleaning albums..."
-msgstr "Čistim albume..."
+msgstr "Čistim albume ..."
 
 msgctxt "#327"
 msgid "Error cleaning albums"
@@ -1151,7 +1151,7 @@ msgstr "Napaka pri čiščenju albumov"
 
 msgctxt "#328"
 msgid "Writing changes..."
-msgstr "Zapisujem spremembe..."
+msgstr "Zapisujem spremembe ..."
 
 msgctxt "#329"
 msgid "Error writing changes"
@@ -1159,11 +1159,11 @@ msgstr "Napaka pri zapisovanju sprememb"
 
 msgctxt "#330"
 msgid "This may take some time..."
-msgstr "To lahko vzame nekaj časa..."
+msgstr "To lahko vzame nekaj časa ..."
 
 msgctxt "#331"
 msgid "Compressing database..."
-msgstr "Stiskam podatkovno bazo...."
+msgstr "Stiskam podatkovno bazo ..."
 
 msgctxt "#332"
 msgid "Error compressing database"
@@ -1171,11 +1171,11 @@ msgstr "Napaka pri stiskanju podatkovne baze"
 
 msgctxt "#333"
 msgid "Do you want to clean the library?"
-msgstr "Želite očistiti knjižnico?"
+msgstr "Ali želite očistiti knjižnico?"
 
 msgctxt "#334"
 msgid "Clean library..."
-msgstr "Očisti knjižnico..."
+msgstr "Očisti knjižnico ..."
 
 msgctxt "#335"
 msgid "Start"
@@ -1185,6 +1185,10 @@ msgctxt "#336"
 msgid "Framerate conversion"
 msgstr "Pretvorba hitrosti sličic"
 
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Konfiguracija izhoda"
+
 msgctxt "#338"
 msgid "Fixed"
 msgstr "Fiksno"
@@ -1199,7 +1203,7 @@ msgstr "Različni izvajalci"
 
 msgctxt "#341"
 msgid "Play disc"
-msgstr "Predvajaj medij"
+msgstr "Predvajaj ploščo"
 
 msgctxt "#342"
 msgid "Movies"
@@ -1217,10 +1221,18 @@ msgctxt "#345"
 msgid "Year"
 msgstr "Leto"
 
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normaliziraj glasnost pri združevanju kanalov"
+
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
 msgstr "Sprejemnik podpira DTS-HD"
 
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Omogoči prehajanje"
+
 msgctxt "#349"
 msgid "TrueHD capable receiver"
 msgstr "Sprejemnik podpira TrueHD"
@@ -1235,7 +1247,7 @@ msgstr "Izključeno"
 
 msgctxt "#352"
 msgid "Dim"
-msgstr "Zamegljeno"
+msgstr "Zatemnitev"
 
 msgctxt "#353"
 msgid "Black"
@@ -1247,11 +1259,11 @@ msgstr "Sledi matrice"
 
 msgctxt "#355"
 msgid "Screensaver time"
-msgstr "Zamik ohranjevalnika zaslona"
+msgstr "Čas ohranjevalnika zaslona"
 
 msgctxt "#356"
 msgid "Screensaver mode"
-msgstr "Način ohranjevalnika zaslona"
+msgstr "Tip ohranjevalnika zaslona"
 
 msgctxt "#357"
 msgid "Shutdown function timer"
@@ -1271,11 +1283,11 @@ msgstr "Ohranjevalnik"
 
 msgctxt "#361"
 msgid "R. Slideshow"
-msgstr "R. proj. slik"
+msgstr "Rekurzivna projekcija"
 
 msgctxt "#362"
 msgid "Screensaver dim level"
-msgstr "Zameglitev ohranjevalnika zaslona"
+msgstr "Nivo zatemnitve ohranjevalnika zaslona"
 
 msgctxt "#363"
 msgid "Sort by: File"
@@ -1455,7 +1467,7 @@ msgstr "Vlažnost"
 
 msgctxt "#409"
 msgid "Defaults"
-msgstr "Privzeto"
+msgstr "Privzete vrednosti"
 
 msgctxt "#410"
 msgid "Accessing weather service"
@@ -1479,7 +1491,7 @@ msgstr "Za izbrani album ni ocen"
 
 msgctxt "#415"
 msgid "Downloading thumbnail..."
-msgstr "Prenašam sličice..."
+msgstr "Prenašam sličice ..."
 
 msgctxt "#416"
 msgid "Not available"
@@ -1501,6 +1513,10 @@ msgctxt "#420"
 msgid "Best Match"
 msgstr "Najboljši približek"
 
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Vzdržuj prižgano zvočno napravo"
+
 msgctxt "#422"
 msgid "Delete album info"
 msgstr "Izbriši informacije o albumu"
@@ -1515,15 +1531,15 @@ msgstr "Izberi"
 
 msgctxt "#425"
 msgid "No album information found"
-msgstr "Ni informacij o albumu"
+msgstr "Informacij o albumu ni mogoče najti"
 
 msgctxt "#426"
 msgid "No CD information found"
-msgstr "Ni informacij o CD-ju"
+msgstr "Informacij o CD-ju ni mogoče najti"
 
 msgctxt "#427"
 msgid "Disc"
-msgstr "Medij"
+msgstr "Plošča"
 
 msgctxt "#428"
 msgid "Insert correct CD/DVD"
@@ -1531,7 +1547,7 @@ msgstr "Vstavite pravilen CD/DVD"
 
 msgctxt "#429"
 msgid "Please insert the following disc:"
-msgstr "Vstavite naslednji CD/DVD:"
+msgstr "Vstavite naslednjo ploščo:"
 
 msgctxt "#430"
 msgid "Sort by: DVD#"
@@ -1539,7 +1555,7 @@ msgstr "Razvrsti po: DVD#"
 
 msgctxt "#431"
 msgid "No cache"
-msgstr "Brez začasnega pomnilnika"
+msgstr "Brez predpomnilnika"
 
 msgctxt "#432"
 msgid "Remove movie from library"
@@ -1547,7 +1563,7 @@ msgstr "Odstrani film iz baze"
 
 msgctxt "#433"
 msgid "Really remove '%s'?"
-msgstr "Resnično odstrani '%s'?"
+msgstr "Ali resnično želite odstraniti '%s'?"
 
 msgctxt "#434"
 msgid "From %s at %i %s"
@@ -1559,7 +1575,7 @@ msgstr "Optični pogon ni bil zaznan"
 
 msgctxt "#436"
 msgid "You need an optical disc drive to play this video"
-msgstr "Za predvajanje tega videa potrebujete optični pogon"
+msgstr "Za predvajanje tega posnetka potrebujete optični pogon"
 
 msgctxt "#437"
 msgid "Removable disk"
@@ -1571,7 +1587,7 @@ msgstr "Odpiram datoteko"
 
 msgctxt "#439"
 msgid "Cache"
-msgstr "Začasni pomnilnik"
+msgstr "Predpomnilnik"
 
 msgctxt "#440"
 msgid "Hard disk"
@@ -1605,6 +1621,10 @@ msgctxt "#447"
 msgid "Autorun media"
 msgstr "Samodejno predvajanje"
 
+msgctxt "#448"
+msgid "Dolby Digital Plus (E-AC3) capable receiver"
+msgstr "Sprejemnik podpira Dolby Digital Plus (E-AC3)"
+
 msgctxt "#449"
 msgid "Enabled"
 msgstr "Omogočeno"
@@ -1641,6 +1661,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Preklopi pogled"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Omejitev frekvenčnega vzorčenja (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Podnapisi"
@@ -1689,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Zasluge"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Izključi"
@@ -1747,7 +1767,7 @@ msgstr "Ponovi mapo"
 
 msgctxt "#489"
 msgid "Play the next song automatically"
-msgstr "Samodejno predvajanje naslednje datoteke"
+msgstr "Samodejno predvajaj naslednjo datoteko"
 
 msgctxt "#491"
 msgid "- Use big icons"
@@ -1759,7 +1779,7 @@ msgstr "Sprememba velikosti VobSubs"
 
 msgctxt "#493"
 msgid "Advanced options (Experts Only!)"
-msgstr "Napredne nastavitve (Samo za strokovnjake!)"
+msgstr "Napredne nastavitve (za strokovnjake!)"
 
 msgctxt "#494"
 msgid "Overall audio headroom"
@@ -1791,7 +1811,7 @@ msgstr "Informacije o albumu ni mogoče prenesti"
 
 msgctxt "#501"
 msgid "Looking for album names..."
-msgstr "Iščem imena albumov..."
+msgstr "Iščem imena albumov ..."
 
 msgctxt "#502"
 msgid "Open"
@@ -1807,7 +1827,7 @@ msgstr "Prazen"
 
 msgctxt "#505"
 msgid "Loading media info from files..."
-msgstr "Nalagam informacije iz datotek..."
+msgstr "Nalagam informacije iz datotek ..."
 
 msgctxt "#507"
 msgid "Sort by: Usage"
@@ -1847,7 +1867,7 @@ msgstr "Zaženi"
 
 msgctxt "#519"
 msgid "Launch in..."
-msgstr "Zaženi v..."
+msgstr "Zaženi v ..."
 
 msgctxt "#521"
 msgid "Compilations"
@@ -1855,11 +1875,11 @@ msgstr "Kompilacije"
 
 msgctxt "#522"
 msgid "Remove source"
-msgstr "Odstrani izvor"
+msgstr "Odstrani vir"
 
 msgctxt "#523"
 msgid "Switch media"
-msgstr "Zamenjaj medij"
+msgstr "Zamenjaj predstavnost"
 
 msgctxt "#524"
 msgid "Select playlist"
@@ -1867,7 +1887,7 @@ msgstr "Izberi seznam predvajanja"
 
 msgctxt "#525"
 msgid "New playlist..."
-msgstr "Nov seznam predvajanja..."
+msgstr "Nov seznam predvajanja ..."
 
 msgctxt "#526"
 msgid "Add to playlist"
@@ -1943,7 +1963,7 @@ msgstr "DVD"
 
 msgctxt "#544"
 msgid "Media info"
-msgstr "Info o mediju"
+msgstr "Predstavne informacije"
 
 msgctxt "#545"
 msgid "Audio output device"
@@ -1951,7 +1971,7 @@ msgstr "Zvočna izhodna naprava"
 
 msgctxt "#546"
 msgid "Passthrough output device"
-msgstr "Naprava za preusmeritev zvoka"
+msgstr "Naprava za preusmerjen zvok"
 
 msgctxt "#547"
 msgid "No biography for this artist"
@@ -2147,7 +2167,7 @@ msgstr "Ponovi: Vse"
 
 msgctxt "#600"
 msgid "Rip audio CD"
-msgstr "Pretvori zvočni CD"
+msgstr "Zajemi zvočni CD"
 
 msgctxt "#601"
 msgid "Medium"
@@ -2167,7 +2187,7 @@ msgstr "Konstantna bitna hitrost"
 
 msgctxt "#605"
 msgid "Ripping..."
-msgstr "Pretvarjanje..."
+msgstr "Zajemanje ..."
 
 msgctxt "#607"
 msgid "To:"
@@ -2175,7 +2195,7 @@ msgstr "Do:"
 
 msgctxt "#608"
 msgid "Could not rip CD or track"
-msgstr "CD-ja ali zapisa ni mogoče pretvoriti "
+msgstr "CD-ja ali zapisa ni mogoče zajeti "
 
 msgctxt "#609"
 msgid "CDDARipPath is not set."
@@ -2183,7 +2203,7 @@ msgstr "CDDARipPath ni nastavljen."
 
 msgctxt "#610"
 msgid "Rip audio track"
-msgstr "Pretvori zvočni posnetek"
+msgstr "Zajemi zvočni posnetek"
 
 msgctxt "#611"
 msgid "Enter number"
@@ -2261,6 +2281,14 @@ msgctxt "#636"
 msgid "Custom"
 msgstr "Po meri"
 
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "ReplayGain prilagoditev glasnosti"
+
 msgctxt "#639"
 msgid "Use track levels"
 msgstr "Uporabi nivoje posnetkov"
@@ -2275,7 +2303,7 @@ msgstr "Obreži črne robove"
 
 msgctxt "#645"
 msgid "Need to unpack a big file. Continue?"
-msgstr "Potrebno je razpakirati veliko datoteko. Nadaljujem?"
+msgstr "Potrebno je razširiti veliko datoteko. Ali želite nadaljevati?"
 
 msgctxt "#646"
 msgid "Remove from library"
@@ -2315,11 +2343,11 @@ msgstr "Prikaži razhroščevalne informacije"
 
 msgctxt "#655"
 msgid "Browse for executable"
-msgstr "Prebrskaj za program"
+msgstr "Prebrskaj za programom"
 
 msgctxt "#656"
 msgid "Browse for playlist"
-msgstr "Prebrskaj za seznam predvajanja"
+msgstr "Prebrskaj za seznamom predvajanja"
 
 msgctxt "#657"
 msgid "Browse for folder"
@@ -2359,7 +2387,7 @@ msgstr "Nivo stiskanja"
 
 msgctxt "#666"
 msgid "Verbose logging..."
-msgstr "Podrobno zapisovanje..."
+msgstr "Podrobno zapisovanje ..."
 
 msgctxt "#700"
 msgid "Cleaning up library"
@@ -2383,7 +2411,7 @@ msgstr "Strežnik"
 
 msgctxt "#708"
 msgid "Use an HTTP proxy server to access the internet"
-msgstr "Za povezavo do interneta uporabi HTTP proxy strežnik"
+msgstr "Za povezavo do interneta uporabi proxy strežnik HTTP"
 
 msgctxt "#711"
 msgid "Internet Protocol (IP)"
@@ -2395,7 +2423,7 @@ msgstr "Izbrana napačna vrata. Vrednost mora biti med 1 in 65535."
 
 msgctxt "#713"
 msgid "HTTP proxy"
-msgstr "HTTP proxy"
+msgstr "Proxy HTTP"
 
 msgctxt "#715"
 msgid "Assignment"
@@ -2407,7 +2435,7 @@ msgstr "Samodejno (DHCP)"
 
 msgctxt "#717"
 msgid "Manual (Static)"
-msgstr "Ročno (Statično)"
+msgstr "Ročno (statično)"
 
 msgctxt "#719"
 msgid "IP address"
@@ -2419,7 +2447,7 @@ msgstr "Maska omrežja"
 
 msgctxt "#721"
 msgid "Default gateway"
-msgstr "Privzet prehod"
+msgstr "Privzeti prehod"
 
 msgctxt "#722"
 msgid "DNS server"
@@ -2439,7 +2467,7 @@ msgstr "s števili od 0 do 255."
 
 msgctxt "#726"
 msgid "Changes not saved. Continue without saving?"
-msgstr "Spremembe niso shranjene. Nadaljujem brez shranjevanja?"
+msgstr "Spremembe niso shranjene. Ali želite nadaljevati brez shranjevanja?"
 
 msgctxt "#727"
 msgid "Web server"
@@ -2507,7 +2535,7 @@ msgstr "Datoteke"
 
 msgctxt "#745"
 msgid "No scanned information for this view"
-msgstr "Za ta pogled ni najdenih informacij"
+msgstr "Za ta pogled ni informacij ni na voljo"
 
 msgctxt "#746"
 msgid "Please turn off library mode"
@@ -2527,7 +2555,7 @@ msgstr "Zrcali sliko"
 
 msgctxt "#750"
 msgid "Are you sure?"
-msgstr "Ste prepričani?"
+msgstr "Ali ste prepričani?"
 
 msgctxt "#751"
 msgid "Removing source"
@@ -2599,7 +2627,7 @@ msgstr "Premikam"
 
 msgctxt "#774"
 msgid "Slideshow folder"
-msgstr "Mapa za diaprojekcijo slik"
+msgstr "Mapa projekcije slik"
 
 msgctxt "#775"
 msgid "Network interface"
@@ -2611,11 +2639,11 @@ msgstr "Ime brezžičnega omrežja (ESSID)"
 
 msgctxt "#777"
 msgid "Wireless password"
-msgstr "Geslo za brezžično omrežje"
+msgstr "Geslo brezžičnega omrežja"
 
 msgctxt "#778"
 msgid "Wireless security"
-msgstr "Varnost za brezžično omrežje"
+msgstr "Zaščita brezžičnega omrežja"
 
 msgctxt "#779"
 msgid "Save and apply network interface settings"
@@ -2667,7 +2695,7 @@ msgstr "Oddaljeno upravljanje"
 
 msgctxt "#791"
 msgid "Allow programs on this system to control XBMC"
-msgstr "Dovoli programom na tem sistemu, da upravljajo z XBMC"
+msgstr "Dovoli programom na tem sistemu, da upravljajo z XBMC-jem"
 
 msgctxt "#792"
 msgid "Port"
@@ -2679,7 +2707,7 @@ msgstr "Območje vrat"
 
 msgctxt "#794"
 msgid "Allow programs on other systems to control XBMC"
-msgstr "Dovoli programom na drugih sistemih, da upravljajo z XBMC"
+msgstr "Dovoli programom na drugih sistemih, da upravljajo z XBMC-jem"
 
 msgctxt "#795"
 msgid "Initial repeat delay (ms)"
@@ -2703,11 +2731,11 @@ msgstr "Posodobitev knjižnice"
 
 msgctxt "#800"
 msgid "Music library needs to rescan tags from files."
-msgstr "Knjižnica glasbe mora znova preveriti oznake iz datotek."
+msgstr "Knjižnica glasbe mora znova prebrati značke iz datotek."
 
 msgctxt "#801"
 msgid "Would you like to scan now?"
-msgstr "Želite pregledati sedaj?"
+msgstr "Ali želite pregledati sedaj?"
 
 msgctxt "#850"
 msgid "Invalid port number entered"
@@ -2723,15 +2751,15 @@ msgstr "Veljavno območje vrat je 1024-65535"
 
 msgctxt "#997"
 msgid "Add Pictures..."
-msgstr "Dodaj slike..."
+msgstr "Dodaj slike ..."
 
 msgctxt "#998"
 msgid "Add Music..."
-msgstr "Dodaj glasbo..."
+msgstr "Dodaj glasbo ..."
 
 msgctxt "#999"
 msgid "Add Videos..."
-msgstr "Dodaj video..."
+msgstr "Dodaj video ..."
 
 msgctxt "#1000"
 msgid "Preview"
@@ -2751,7 +2779,7 @@ msgstr "Težava je lahko nastala, ker niste povezani z omrežjem."
 
 msgctxt "#1004"
 msgid "Would you like to add it anyway?"
-msgstr "Želite vseeno dodati vsebino?"
+msgstr "Ali vseeno želite dodati vsebino?"
 
 msgctxt "#1006"
 msgid "IP address"
@@ -2779,7 +2807,7 @@ msgstr "Oddaljena pot"
 
 msgctxt "#1012"
 msgid "Shared folder"
-msgstr "Mapa skupne rabe"
+msgstr "Mapa v skupni rabi"
 
 msgctxt "#1013"
 msgid "Port"
@@ -2791,7 +2819,7 @@ msgstr "Uporabniško ime"
 
 msgctxt "#1015"
 msgid "Browse for network server"
-msgstr "Prebrskaj za omrežni strežnik"
+msgstr "Prebrskaj za omrežnim strežnikom"
 
 msgctxt "#1016"
 msgid "Enter the network address of the server"
@@ -2811,15 +2839,15 @@ msgstr "Vnesite uporabniško ime"
 
 msgctxt "#1020"
 msgid "Add %s source"
-msgstr "Dodaj izvor %s"
+msgstr "Dodaj vir %s"
 
 msgctxt "#1021"
 msgid "Enter the paths or browse for the media locations."
-msgstr "Vnesite poti ali prebrskajte za lokacijo medija."
+msgstr "Vnesite poti ali prebrskajte za predstavnimi vsebinami."
 
 msgctxt "#1022"
 msgid "Enter a name for this media Source."
-msgstr "Vnesite ime za ta izvor."
+msgstr "Vnesite ime za ta predstavni vir."
 
 msgctxt "#1023"
 msgid "Browse for new share"
@@ -2831,19 +2859,19 @@ msgstr "Prebrskaj"
 
 msgctxt "#1025"
 msgid "Could not retrieve directory information."
-msgstr "Informacij o direktoriju ni mogoče pridobiti."
+msgstr "Informacij o mapi ni mogoče pridobiti."
 
 msgctxt "#1026"
 msgid "Add source"
-msgstr "Dodaj izvor"
+msgstr "Dodaj vir"
 
 msgctxt "#1027"
 msgid "Edit source"
-msgstr "Uredi izvor"
+msgstr "Uredi vir"
 
 msgctxt "#1028"
 msgid "Edit %s source"
-msgstr "Uredi izvor %s"
+msgstr "Uredi vir %s"
 
 msgctxt "#1029"
 msgid "Enter the new label"
@@ -2859,7 +2887,7 @@ msgstr "Prebrskaj za mapo slik"
 
 msgctxt "#1032"
 msgid "Add network location..."
-msgstr "Dodaj omrežno lokacijo..."
+msgstr "Dodaj omrežno lokacijo ..."
 
 msgctxt "#1033"
 msgid "Browse for file"
@@ -2891,7 +2919,7 @@ msgstr "Slikovni dodatki"
 
 msgctxt "#1040"
 msgid "Loading directory"
-msgstr "Nalagam direktorij"
+msgstr "Nalagam mapo"
 
 msgctxt "#1041"
 msgid "Retrieved %i items"
@@ -2905,6 +2933,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "Programski dodatki"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Nastavi sličico vstavka"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "Nastavitve dodatka"
@@ -2915,7 +2947,7 @@ msgstr "Dostopne točke"
 
 msgctxt "#1047"
 msgid "Other..."
-msgstr "Drugo..."
+msgstr "Drugo ..."
 
 msgctxt "#1048"
 msgid "Username"
@@ -2935,7 +2967,7 @@ msgstr "Vnesite spletni naslov"
 
 msgctxt "#1180"
 msgid "Proxy type"
-msgstr "Vrsta proxy-ja"
+msgstr "Vrsta proxyja"
 
 msgctxt "#1181"
 msgid "HTTP"
@@ -2955,7 +2987,7 @@ msgstr "SOCKS5"
 
 msgctxt "#1185"
 msgid "SOCKS5 with remote dns resolving"
-msgstr "SOCKS5 z oddaljenim DNS razreševanjem"
+msgstr "SOCKS5 z oddaljenim razreševanjem DNS"
 
 msgctxt "#1200"
 msgid "SMB client"
@@ -3085,9 +3117,13 @@ msgctxt "#1260"
 msgid "Announce these services to other systems via Zeroconf"
 msgstr "Oznani storitve drugim sistemom preko Zeroconf"
 
+msgctxt "#1269"
+msgid "Allow volume control"
+msgstr "Dovoli nadzor jakosti zvoka"
+
 msgctxt "#1270"
 msgid "Allow XBMC to receive AirPlay content"
-msgstr "Dovoli XBMC sprejemanje vsebin AirPlay"
+msgstr "Dovoli sprejemanje vsebin AirPlay"
 
 msgctxt "#1271"
 msgid "Device name"
@@ -3115,7 +3151,7 @@ msgstr "Poljubna zvočna naprava"
 
 msgctxt "#1301"
 msgid "Custom passthrough device"
-msgstr "Poljubna naprava za preusmeritev zvoka"
+msgstr "Poljubna naprava za preusmerjen zvok"
 
 msgctxt "#1396"
 msgid "Drifting"
@@ -3371,7 +3407,7 @@ msgstr "Slike"
 
 msgctxt "#10003"
 msgid "File manager"
-msgstr "Upravitelj datotek"
+msgstr "Upravljalnik datotek"
 
 msgctxt "#10004"
 msgid "Settings"
@@ -3485,9 +3521,13 @@ msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Brskalnik dodatkov"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Ponastavi zgornje nastavitve na privzete vrednosti"
+
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
-msgstr "Ste prepričani, da želite ponastaviti nastavitve v tej kategoriji?"
+msgstr "Ali ste prepričani, da želite ponastaviti nastavitve v tej kategoriji?"
 
 msgctxt "#10043"
 msgid "Help"
@@ -3497,17 +3537,21 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "Pomoč ni na voljo"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Ponastavi vse vidne nastavitve na privzete vrednosti."
+
 msgctxt "#10046"
 msgid "No categories available"
 msgstr "Na voljo ni nobene kategorije"
 
 msgctxt "#10100"
 msgid "Yes/No dialogue"
-msgstr "Da/Ne dialog"
+msgstr "Pogovorno okno Da/Ne"
 
 msgctxt "#10101"
 msgid "Progress dialogue"
-msgstr "Dialog napredka"
+msgstr "Pogovorno okno napredka"
 
 msgctxt "#10126"
 msgid "File browser"
@@ -3519,7 +3563,7 @@ msgstr "Nastavitve omrežja"
 
 msgctxt "#10129"
 msgid "Media source"
-msgstr "Medijski vir"
+msgstr "Predstavni vir"
 
 msgctxt "#10130"
 msgid "Profile settings"
@@ -3527,7 +3571,7 @@ msgstr "Nastavitve profilov"
 
 msgctxt "#10131"
 msgid "Lock settings"
-msgstr "Zakleni nastavitve"
+msgstr "Nastavitve zaščite"
 
 msgctxt "#10132"
 msgid "Content settings"
@@ -3555,7 +3599,7 @@ msgstr "Slike/Info"
 
 msgctxt "#10140"
 msgid "Add-on settings"
-msgstr "Nastavitve dodatka"
+msgstr "Nastavitve dodatkov"
 
 msgctxt "#10146"
 msgid "Add-ons/Info"
@@ -3563,11 +3607,11 @@ msgstr "Dodatki/Informacije"
 
 msgctxt "#10210"
 msgid "Looking for subtitles..."
-msgstr "Iščem podnapise..."
+msgstr "Iščem podnapise ..."
 
 msgctxt "#10211"
 msgid "Looking for or caching subtitles..."
-msgstr "Iščem ali začasno shranjujem podnapise..."
+msgstr "Iščem ali začasno shranjujem podnapise ..."
 
 msgctxt "#10212"
 msgid "terminating"
@@ -3651,7 +3695,7 @@ msgstr "Info o filmu"
 
 msgctxt "#12000"
 msgid "Select dialogue"
-msgstr "Izberi"
+msgstr "Pogovorno okno izbora"
 
 msgctxt "#12001"
 msgid "Music/Info"
@@ -3659,7 +3703,7 @@ msgstr "Glasba/Informacije"
 
 msgctxt "#12002"
 msgid "Dialogue OK"
-msgstr "Potrdi"
+msgstr "Potrditveno pogovorno okno"
 
 msgctxt "#12003"
 msgid "Videos/Info"
@@ -3673,9 +3717,17 @@ msgctxt "#12005"
 msgid "Fullscreen video"
 msgstr "Celozaslonska slika"
 
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "Avdio vizualizacija"
+
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr "Pogovorno okno združevanja datotek"
+
 msgctxt "#12009"
 msgid "Rebuild index..."
-msgstr "Ponovno indeksiranje..."
+msgstr "Ponovno indeksira..."
 
 msgctxt "#12010"
 msgid "Return to music window"
@@ -3747,7 +3799,7 @@ msgstr "*"
 
 msgctxt "#12325"
 msgid "Locked! Enter code..."
-msgstr "Zaklenjeno! Vnesite geslo..."
+msgstr "Zaklenjeno! Vnesite geslo ..."
 
 msgctxt "#12326"
 msgid "Enter password"
@@ -3815,7 +3867,7 @@ msgstr "Geslo je napačno,"
 
 msgctxt "#12343"
 msgid "retries left "
-msgstr "vnosov na voljo"
+msgstr "poskusov še na voljo"
 
 msgctxt "#12344"
 msgid "Passwords entered did not match."
@@ -3827,7 +3879,7 @@ msgstr "Dostop zavrnjen"
 
 msgctxt "#12346"
 msgid "Password retry limit exceeded."
-msgstr "Število ponovnih vnosov gesla je preseženo."
+msgstr "Število ponovnih poskusov gesla je preseženo."
 
 msgctxt "#12347"
 msgid "The system will now power down."
@@ -3847,7 +3899,7 @@ msgstr "Procesiram %s"
 
 msgctxt "#12351"
 msgid "The art cache in your video library needs updating."
-msgstr "Grafike v vaši video knjižnici morajo biti posodobljene."
+msgstr "Predpomnjene grafike v vaši video knjižnici morajo biti posodobljene."
 
 msgctxt "#12352"
 msgid "No downloading is needed."
@@ -3859,7 +3911,7 @@ msgstr "Ponovno aktiviraj zaščito"
 
 msgctxt "#12354"
 msgid "Would you like to update it now?"
-msgstr "Želite posodobiti zdaj?"
+msgstr "Ali želite posodobiti zdaj?"
 
 msgctxt "#12356"
 msgid "Change lock"
@@ -3867,7 +3919,7 @@ msgstr "Spremeni zaščito"
 
 msgctxt "#12357"
 msgid "Source lock"
-msgstr "Vir zaščite"
+msgstr "Zaščita vira"
 
 msgctxt "#12358"
 msgid "Password entry was blank. Try again."
@@ -3879,7 +3931,7 @@ msgstr "Glavno geslo"
 
 msgctxt "#12362"
 msgid "Shutdown system if Master Lock retries exceeded"
-msgstr "Ugasni sistem, če se preseže število ponovnih vnosov"
+msgstr "Ugasni sistem, če se preseže število ponovnih vnosov gesla"
 
 msgctxt "#12367"
 msgid "Master code is not valid"
@@ -3891,7 +3943,7 @@ msgstr "Vnesite pravilno glavno geslo"
 
 msgctxt "#12373"
 msgid "Settings & file manager"
-msgstr "Nastavitve & upravitelj datotek"
+msgstr "Nastavitve & upravljalnik datotek"
 
 msgctxt "#12376"
 msgid "Set as default for all videos"
@@ -3995,7 +4047,7 @@ msgstr "Izhod"
 
 msgctxt "#13010"
 msgid "Hibernate"
-msgstr "Zaustavi"
+msgstr "Mirovanje"
 
 msgctxt "#13011"
 msgid "Suspend"
@@ -4031,11 +4083,11 @@ msgstr "Dovoli izklop ob nedejavnosti"
 
 msgctxt "#13020"
 msgid "Is another session active, perhaps over ssh?"
-msgstr "Je aktivna še kakšna seja, mogoče ssh?"
+msgstr "Ali je aktivna še kakšna seja, mogoče preko ssh?"
 
 msgctxt "#13021"
 msgid "Mounted removable harddrive"
-msgstr "Priključen zunanji trdi disk"
+msgstr "Priključen odstranljivi trdi disk"
 
 msgctxt "#13022"
 msgid "Unsafe device removal"
@@ -4043,7 +4095,7 @@ msgstr "Nepravilna odstranitev naprave"
 
 msgctxt "#13023"
 msgid "Successfully removed device"
-msgstr "Naprava je uspešno izključena"
+msgstr "Naprava je uspešno odstranjena"
 
 msgctxt "#13024"
 msgid "Joystick plugged"
@@ -4055,7 +4107,7 @@ msgstr "Izključena igralna palica"
 
 msgctxt "#13026"
 msgid "Try to wake remote servers on access"
-msgstr "Poskusi prebuditi oddaljene strežnike ob dostopu"
+msgstr "Ob dostopu poskusi prebuditi oddaljene strežnike"
 
 msgctxt "#13027"
 msgid "Wake on Lan (%s)"
@@ -4063,7 +4115,7 @@ msgstr "Wake on Lan (%s)"
 
 msgctxt "#13028"
 msgid "Waiting for network to connect..."
-msgstr "Čakam na povezavo omrežja..."
+msgstr "Čakam na povezavo omrežja ..."
 
 msgctxt "#13029"
 msgid "Failed to execute Wake on Lan!"
@@ -4071,19 +4123,19 @@ msgstr "Izvajanje Wake on Lan je spodletelo!"
 
 msgctxt "#13030"
 msgid "Waiting for server to wake up..."
-msgstr "Čakam, da se strežnik prebudi..."
+msgstr "Čakam, da se strežnik prebudi ..."
 
 msgctxt "#13031"
 msgid "Extended wait for server to wake up..."
-msgstr "Podaljšano čakanje da se strežnik odzove..."
+msgstr "Podaljšano čakanje, da se strežnik prebudi ..."
 
 msgctxt "#13032"
 msgid "Waiting for services to launch..."
-msgstr "Čakam na zagon servisov..."
+msgstr "Čakam na zagon storitev ..."
 
 msgctxt "#13033"
 msgid "MAC Discovery"
-msgstr "MAC odkrivanje"
+msgstr "Odkrivanje MAC"
 
 msgctxt "#13034"
 msgid "Updated for %s"
@@ -4107,7 +4159,7 @@ msgstr "Filter proti utripanju"
 
 msgctxt "#13101"
 msgid "Let driver choose (requires restart)"
-msgstr "Izbere gonilnik (zahteva ponovni zagon)"
+msgstr "Naj izbere gonilnik (zahteva ponovni zagon)"
 
 msgctxt "#13105"
 msgid "Vertical blank sync"
@@ -4131,11 +4183,11 @@ msgstr "Preveri & uveljavi ločljivost"
 
 msgctxt "#13110"
 msgid "Save resolution?"
-msgstr "Shrani ločljivost?"
+msgstr "Ali shranim ločljivost?"
 
 msgctxt "#13111"
 msgid "Would you like to keep this change?"
-msgstr "Želite ohraniti to spremembo?"
+msgstr "Ali želite ohraniti to spremembo?"
 
 msgctxt "#13112"
 msgid "High quality upscaling"
@@ -4179,7 +4231,7 @@ msgstr "Nivo zviševanja ločljivosti VDPAU HQ"
 
 msgctxt "#13123"
 msgid "Keep skin?"
-msgstr "Ohranim predlogo?"
+msgstr "Ali želite obdržati preobleko?"
 
 msgctxt "#13130"
 msgid "Blank other displays"
@@ -4199,15 +4251,15 @@ msgstr "Zaznane so aktivne povezave!"
 
 msgctxt "#13141"
 msgid "If you proceed, you might not be able to control XBMC"
-msgstr "Če nadaljujete, mogoče ne boste več mogli upravljati z XBMC"
+msgstr "V primeru, da nadaljujete, mogoče ne boste več mogli upravljati z XBMC-jem"
 
 msgctxt "#13142"
 msgid "any longer. Are you sure you want to stop the Event server?"
-msgstr ". Ste prepričani, da želite ustaviti strežnik Dogodkov?"
+msgstr ". Ali ste prepričani, da želite ustaviti strežnik dogodkov?"
 
 msgctxt "#13144"
 msgid "Change Apple Remote mode?"
-msgstr "Spremeni način Apple Remote?"
+msgstr "Ali spremenim način Apple Remote?"
 
 msgctxt "#13145"
 msgid "If you are currently using the Apple Remote to control"
@@ -4219,7 +4271,7 @@ msgstr "XBMC, sprememba teh nastavitev lahko vpliva na zmožnost"
 
 msgctxt "#13147"
 msgid "to continue controlling it. Do you want to proceed?"
-msgstr "nadaljnega upravljanja. Želite nadaljevati?"
+msgstr "nadaljnega upravljanja. Ali želite nadaljevati?"
 
 msgctxt "#13159"
 msgid "Subnet mask"
@@ -4235,7 +4287,7 @@ msgstr "Primarni DNS"
 
 msgctxt "#13162"
 msgid "Initialise failed"
-msgstr "Neuspešna inicializacija"
+msgstr "Neuspešen zagon"
 
 msgctxt "#13170"
 msgid "Never"
@@ -4263,7 +4315,7 @@ msgstr "Profili"
 
 msgctxt "#13201"
 msgid "Delete profile '%s'?"
-msgstr "Izbriši profil '%s'?"
+msgstr "Ali izbrišem profil '%s'?"
 
 msgctxt "#13204"
 msgid "Last loaded profile:"
@@ -4311,7 +4363,7 @@ msgstr "Poišči podnapise v RAR datotekah"
 
 msgctxt "#13250"
 msgid "Browse for subtitle..."
-msgstr "Prebrskaj za podnapise..."
+msgstr "Prebrskaj za podnapis..."
 
 msgctxt "#13251"
 msgid "Move item"
@@ -4411,7 +4463,7 @@ msgstr "Hitrost ventilatorja"
 
 msgctxt "#13301"
 msgid "Auto temperature control"
-msgstr "Samodejna kontrola temperature"
+msgstr "Samodejni nadzor temperature"
 
 msgctxt "#13302"
 msgid "Fan speed override"
@@ -4439,7 +4491,7 @@ msgstr "Način poimenovanja posnetkov"
 
 msgctxt "#13308"
 msgid "Do you wish to reboot your system"
-msgstr "Želite ponovno zagnati sistem"
+msgstr "Ali želite ponovno zagnati sistem"
 
 msgctxt "#13309"
 msgid "instead of just XBMC?"
@@ -4463,7 +4515,7 @@ msgstr "Ponovno zaženi"
 
 msgctxt "#13314"
 msgid "Crossfade between songs"
-msgstr "Navzkrižni prehod"
+msgstr "Navzkrižni prehod pesmi"
 
 msgctxt "#13315"
 msgid "Regenerate thumbnails"
@@ -4475,11 +4527,11 @@ msgstr "Rekurzivne sličice"
 
 msgctxt "#13317"
 msgid "View slideshow"
-msgstr "Prikaži diaprojekcijo slik"
+msgstr "Prikaži projekcijo slik"
 
 msgctxt "#13318"
 msgid "Recursive slideshow"
-msgstr "Rekurzivna diaprojekcija slik"
+msgstr "Rekurzivna projekcija slik"
 
 msgctxt "#13319"
 msgid "Randomise"
@@ -4499,7 +4551,7 @@ msgstr "Samo desno"
 
 msgctxt "#13323"
 msgid "Enable karaoke support"
-msgstr "Omogoči podporo karaok"
+msgstr "Omogoči podporo karaokam"
 
 msgctxt "#13324"
 msgid "Background transparency"
@@ -4587,7 +4639,7 @@ msgstr "Postavi v vrsto"
 
 msgctxt "#13348"
 msgid "Search IMDb..."
-msgstr "Preišči IMDb..."
+msgstr "Preišči IMDb ..."
 
 msgctxt "#13349"
 msgid "Scan for new content"
@@ -4595,7 +4647,7 @@ msgstr "Preglej za nove vsebine"
 
 msgctxt "#13350"
 msgid "Now playing..."
-msgstr "Trenutno predvajam..."
+msgstr "Trenutno predvajam ..."
 
 msgctxt "#13351"
 msgid "Album information"
@@ -4603,7 +4655,7 @@ msgstr "Informacije o albumu"
 
 msgctxt "#13352"
 msgid "Scan item to library"
-msgstr "Dodaj v bazo"
+msgstr "Dodaj v knjižnico"
 
 msgctxt "#13353"
 msgid "Stop scanning"
@@ -4651,7 +4703,7 @@ msgstr "Glasnost"
 
 msgctxt "#13377"
 msgid "Default view mode"
-msgstr "Privzet pogled"
+msgstr "Privzeti pogled"
 
 msgctxt "#13378"
 msgid "Default brightness"
@@ -4659,7 +4711,7 @@ msgstr "Privzeta svetlost"
 
 msgctxt "#13379"
 msgid "Default contrast"
-msgstr "Privzet kontrast"
+msgstr "Privzeti kontrast"
 
 msgctxt "#13380"
 msgid "Default gamma"
@@ -4699,7 +4751,7 @@ msgstr "Prednastavitev"
 
 msgctxt "#13389"
 msgid "There are no presets available\nfor this visualisation"
-msgstr "Ni prednastavitev za vizualizacijo"
+msgstr "Ni prednastavitev za to vizualizacijo"
 
 msgctxt "#13390"
 msgid "There are no settings available\nfor this visualisation"
@@ -4739,11 +4791,11 @@ msgstr "Bližnjice"
 
 msgctxt "#13399"
 msgid "Ignore articles when sorting (e.g. \"the\")"
-msgstr "Pri razvrščanju izpusti člene (npr. \"the\")"
+msgstr "Pri razvrščanju izpusti predloge (npr. \"the\")"
 
 msgctxt "#13400"
 msgid "Crossfade between songs on the same album"
-msgstr "Navzkrižni prehod posnetkov v istem albumu"
+msgstr "Navzkrižni prehod pesmi v istem albumu"
 
 msgctxt "#13401"
 msgid "Browse for %s"
@@ -4831,7 +4883,7 @@ msgstr "VDPAU"
 
 msgctxt "#13422"
 msgid "Start slideshow here"
-msgstr "Tukaj začni diaprojekcijo slik"
+msgstr "Tukaj začni projekcijo slik"
 
 msgctxt "#13423"
 msgid "Remember for this path"
@@ -4885,6 +4937,10 @@ msgctxt "#13435"
 msgid "Enable HQ Scalers for scalings above"
 msgstr "Omogoči HQ Scalerje za umerjanje nad"
 
+msgctxt "#13436"
+msgid "Allow hardware acceleration (libstagefright)"
+msgstr "Dovoli strojno pospeševanje (libstagefright)"
+
 msgctxt "#13438"
 msgid "Allow hardware acceleration (amcodec)"
 msgstr "Dovoli strojno pospeševanje (amcodec)"
@@ -4903,11 +4959,11 @@ msgstr "Zvočna ura"
 
 msgctxt "#13502"
 msgid "Video clock (Drop/Dupe audio)"
-msgstr "Slikovna ura (Zavrži zvok)"
+msgstr "Slikovna ura (zavrži/podvoji zvok)"
 
 msgctxt "#13503"
 msgid "Video clock (Resample audio)"
-msgstr "Ura videa (Pretvori zvok)"
+msgstr "Slikovna ura (pretvori zvok)"
 
 msgctxt "#13505"
 msgid "Resample quality"
@@ -4935,7 +4991,7 @@ msgstr "Sinhroniziraj predvajanje z zaslonom"
 
 msgctxt "#13511"
 msgid "Choose art"
-msgstr "Izberite grafiko"
+msgstr "Izberi grafiko"
 
 msgctxt "#13512"
 msgid "Current art"
@@ -4959,7 +5015,7 @@ msgstr "Dodaj grafiko"
 
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
-msgstr "Prekini med spremembo osveževanja zaslona"
+msgstr "Prekini med spremembo stopnje osveževanja zaslona"
 
 msgctxt "#13551"
 msgid "Off"
@@ -4975,11 +5031,11 @@ msgstr "%.1f sekund"
 
 msgctxt "#13554"
 msgid "%d Minute"
-msgstr "%d minut"
+msgstr "%d minuta"
 
 msgctxt "#13555"
 msgid "%d Minutes"
-msgstr "%d Minut"
+msgstr "%d minut"
 
 msgctxt "#13600"
 msgid "Apple remote"
@@ -4987,7 +5043,7 @@ msgstr "Upravljalnik Apple"
 
 msgctxt "#13602"
 msgid "Allow start of XBMC using the remote"
-msgstr "Dovoli zagon XBMC preko upravljalnika"
+msgstr "Dovoli zagon XBMC-ja preko upravljalnika"
 
 msgctxt "#13603"
 msgid "Sequence delay time"
@@ -5027,15 +5083,15 @@ msgstr "Razdruži"
 
 msgctxt "#14003"
 msgid "Downloading playlist file..."
-msgstr "Prenašam seznam predvajanja..."
+msgstr "Prenašam seznam predvajanja ..."
 
 msgctxt "#14004"
 msgid "Downloading streams list..."
-msgstr "Prenašam seznam pretokov..."
+msgstr "Prenašam seznam pretokov ..."
 
 msgctxt "#14005"
 msgid "Parsing streams list..."
-msgstr "Berem seznam pretokov..."
+msgstr "Berem seznam pretokov ..."
 
 msgctxt "#14006"
 msgid "Downloading streams list failed"
@@ -5047,11 +5103,11 @@ msgstr "Prenos seznama predvajanja ni uspel"
 
 msgctxt "#14009"
 msgid "Games directory"
-msgstr "Direktorij iger"
+msgstr "Mapa iger"
 
 msgctxt "#14010"
 msgid "Auto switch to thumbs based on"
-msgstr "Samodejni prikaz sličic temeljujoč na"
+msgstr "Samodejni prikaz sličic glede na"
 
 msgctxt "#14011"
 msgid "Enable auto switching to thumbs view"
@@ -5111,11 +5167,11 @@ msgstr "Vnesite najbližje večje mesto"
 
 msgctxt "#14025"
 msgid "Video/Audio/DVD cache - Hard disk"
-msgstr "Začasni pomnilnik videa/zvoka/DVD - Trdi disk"
+msgstr "Predpomnilnik videa/zvoka/DVD - Trdi disk"
 
 msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
-msgstr "Začasni pomnilnik videa - DVD-ROM"
+msgstr "Predpomnilnik slike - DVD-ROM"
 
 msgctxt "#14027"
 msgid "Local Network"
@@ -5127,7 +5183,7 @@ msgstr "Internet"
 
 msgctxt "#14030"
 msgid "Audio cache - DVD-ROM"
-msgstr "Začasni pomnilnik zvoka - DVD-ROM"
+msgstr "Predpomnilnik zvoka - DVD-ROM"
 
 msgctxt "#14031"
 msgid "Local Network"
@@ -5139,7 +5195,7 @@ msgstr "Internet"
 
 msgctxt "#14034"
 msgid "DVD cache - DVD-ROM"
-msgstr "Začasni pomnilnik DVD - DVD-ROM"
+msgstr "Predpomnilnik DVD - DVD-ROM"
 
 msgctxt "#14035"
 msgid "Local Network"
@@ -5227,11 +5283,11 @@ msgstr "Učinek zrnatosti filma"
 
 msgctxt "#14059"
 msgid "Search for thumbnails on remote shares"
-msgstr "Preišči za sličice na oddaljeni skupni rabi"
+msgstr "Preišči za sličice na oddaljenih mapah v skupni rabi"
 
 msgctxt "#14060"
 msgid "Unknown type cache - Internet"
-msgstr "Neznan tip začasnega pomnilnika - Internet"
+msgstr "Neznan tip predpomnjenja - Internet"
 
 msgctxt "#14061"
 msgid "Auto"
@@ -5267,7 +5323,7 @@ msgstr "Vnesite naslov IP"
 
 msgctxt "#14069"
 msgid "Apply these settings now?"
-msgstr "Takoj uporabim te nastavitve?"
+msgstr "Ali takoj uporabim te nastavitve?"
 
 msgctxt "#14070"
 msgid "Apply changes now"
@@ -5363,7 +5419,7 @@ msgstr "Varčevanje energije"
 
 msgctxt "#14096"
 msgid "Rip"
-msgstr "Pretvori"
+msgstr "Zajemi"
 
 msgctxt "#14097"
 msgid "Audio CD Insert Action"
@@ -5375,11 +5431,23 @@ msgstr "Predvajaj"
 
 msgctxt "#14099"
 msgid "Eject disc when CD ripping is complete"
-msgstr "Izvrzi CD, ko je pretvarjanje zaključeno"
+msgstr "Izvrzi ploščo, ko je zajemanje zaključeno"
 
 msgctxt "#14100"
 msgid "Stop ripping CD"
-msgstr "Prekini pretvarjanje CD-ja"
+msgstr "Prekini zajemanje CD-ja"
+
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Vir ni na voljo"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Kaj bi radi naredili z medijsko datoteko iz %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Ohrani"
 
 msgctxt "#15015"
 msgid "Remove"
@@ -5423,7 +5491,7 @@ msgstr "* Vsi žanri"
 
 msgctxt "#15107"
 msgid "Buffering..."
-msgstr "Medpomnenje..."
+msgstr "Medpomnenje ..."
 
 msgctxt "#15108"
 msgid "Navigation sounds"
@@ -5455,11 +5523,11 @@ msgstr "Brez povezave"
 
 msgctxt "#15213"
 msgid "Play using..."
-msgstr "Predvajaj z uporabo..."
+msgstr "Predvajaj z ..."
 
 msgctxt "#15214"
 msgid "Use smoothed A/V synchronisation"
-msgstr "Uporabi gladko sinhronizacijo A/V"
+msgstr "Uporabi glajeno sinhronizacijo A/V"
 
 msgctxt "#15215"
 msgid "Hide file names in thumbs view"
@@ -5479,7 +5547,7 @@ msgstr "S strežnikom se ni mogoče povezati"
 
 msgctxt "#15302"
 msgid "No servers found"
-msgstr "Ni strežnikov"
+msgstr "Strežnikov ni mogoče najti"
 
 msgctxt "#15303"
 msgid "Workgroup not found"
@@ -5507,7 +5575,7 @@ msgstr "Predvajalnik"
 
 msgctxt "#16004"
 msgid "Play media from disc"
-msgstr "Predvajaj z medija"
+msgstr "Predvajaj vsebino plošče"
 
 msgctxt "#16008"
 msgid "Enter new title"
@@ -5539,7 +5607,7 @@ msgstr "Vnesite ime mape"
 
 msgctxt "#16015"
 msgid "Enter directory"
-msgstr "Vnesite direktorij"
+msgstr "Vnesite mapo"
 
 msgctxt "#16016"
 msgid "Available options: %A, %T, %N, %B, %D, %G, %Y, %F, %S"
@@ -5571,7 +5639,7 @@ msgstr "Bob (obrnjeno)"
 
 msgctxt "#16024"
 msgid "Cancelling..."
-msgstr "Prekinjam..."
+msgstr "Prekinjam ..."
 
 msgctxt "#16025"
 msgid "Enter the artist name"
@@ -5583,7 +5651,7 @@ msgstr "Predvajanje ni uspelo"
 
 msgctxt "#16027"
 msgid "One or more items failed to play."
-msgstr "Ene ali več datotek ni mogoče predvajati."
+msgstr "Enega ali več predmetov ni mogoče predvajati."
 
 msgctxt "#16028"
 msgid "Enter value"
@@ -5603,7 +5671,7 @@ msgstr "Pogojev ne izpolnjuje nobena pesem v bazi."
 
 msgctxt "#16032"
 msgid "Could not initialise database."
-msgstr "Podatkovne baze ni mogoče inicializirati."
+msgstr "Podatkovne baze ni mogoče prebrati."
 
 msgctxt "#16033"
 msgid "Could not open database."
@@ -5667,7 +5735,7 @@ msgstr "Uredi naslov"
 
 msgctxt "#16106"
 msgid "Manage..."
-msgstr "Urejanje..."
+msgstr "Upravljanje ..."
 
 msgctxt "#16107"
 msgid "Edit sort title"
@@ -5775,7 +5843,7 @@ msgstr "Senčno (polovično)"
 
 msgctxt "#16318"
 msgid "Temporal/Spatial (Half)"
-msgstr "Senčno/Pprostorsko (polovično)"
+msgstr "Senčno/Prostorsko (polovično)"
 
 msgctxt "#16319"
 msgid "DXVA"
@@ -5805,6 +5873,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-procesiranje"
@@ -5897,10 +5969,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV posnetki"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Privzete mapa za sličice PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Programi"
@@ -5931,7 +5999,7 @@ msgstr "Prihajajoča snemanja"
 
 msgctxt "#19026"
 msgid "Add timer..."
-msgstr "Dodaj časovnik..."
+msgstr "Dodaj časovnik ..."
 
 msgctxt "#19027"
 msgid "No search results"
@@ -5983,7 +6051,7 @@ msgstr "Ni podprto s strani hrbtenice PVR."
 
 msgctxt "#19039"
 msgid "Are you sure you want to hide this channel?"
-msgstr "Ste prepričani, da želite skriti ta program?"
+msgstr "Ali ste prepričani, da želite skriti ta program?"
 
 msgctxt "#19040"
 msgid "Timer"
@@ -5991,11 +6059,11 @@ msgstr "Časovnik"
 
 msgctxt "#19041"
 msgid "Are you sure you want to rename this recording?"
-msgstr "Ste prepričani, da želite preimenovati ta posnetek?"
+msgstr "Ali ste prepričani, da želite preimenovati ta posnetek?"
 
 msgctxt "#19042"
 msgid "Are you sure you want to rename this timer?"
-msgstr "Ste prepričani, da želite preimenovati ta časovnik?"
+msgstr "Ali ste prepričani, da želite preimenovati ta časovnik?"
 
 msgctxt "#19043"
 msgid "Recording"
@@ -6047,7 +6115,7 @@ msgstr "Skrij program"
 
 msgctxt "#19055"
 msgid "No information available"
-msgstr "Informacija ni na voljo"
+msgstr "Informacije niso na voljo"
 
 msgctxt "#19056"
 msgid "New timer"
@@ -6101,13 +6169,17 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Pojdi na \"zdaj\""
+
 msgctxt "#19071"
 msgid "EPG update interval"
-msgstr "Interval posodabljanja EPG"
+msgstr "Interval posodabljanja EPG-ja"
 
 msgctxt "#19072"
 msgid "Do not store the EPG in the database"
-msgstr "Ne shranjuj EPG v bazi"
+msgstr "Ne shranjuj EPG-ja v bazi"
 
 msgctxt "#19073"
 msgid "Delay channel switch"
@@ -6287,7 +6359,7 @@ msgstr "Izogni se ponovitvam"
 
 msgctxt "#19122"
 msgid "This timer is still recording. Are you sure you want to delete this timer?"
-msgstr "Ta časovnik se še vedno snema. Ste prepričani, da ga želite izbrisati?"
+msgstr "Ta časovnik se še vedno snema. Ali ste prepričani, da ga želite izbrisati?"
 
 msgctxt "#19123"
 msgid "Free to air channels only"
@@ -6467,7 +6539,7 @@ msgstr "Skrij okno z informacijo o videu"
 
 msgctxt "#19170"
 msgid "Timeout when starting playback"
-msgstr "Najdaljši čas začetka predvajanja"
+msgstr "Čas preteka začetka predvajanja"
 
 msgctxt "#19171"
 msgid "Start playback minimised"
@@ -6483,7 +6555,7 @@ msgstr "Privzeta prioriteta snemanja"
 
 msgctxt "#19174"
 msgid "Default recording lifetime"
-msgstr "Privzeta časovna doma snemanja"
+msgstr "Privzeti čas ohranitve posnetkov"
 
 msgctxt "#19175"
 msgid "Margin at the start of a recording"
@@ -6499,7 +6571,7 @@ msgstr "Predvajanje"
 
 msgctxt "#19178"
 msgid "Show channel information when switching channels"
-msgstr "Prikaži informacije o programu med preklaplanjem"
+msgstr "Prikaži informacije o programu med preklapljanjem"
 
 msgctxt "#19179"
 msgid "Automatically hide channel information"
@@ -6515,7 +6587,7 @@ msgstr "Meni/OSD"
 
 msgctxt "#19182"
 msgid "Days to display in the EPG"
-msgstr "Dnevi za prikaz v EPG"
+msgstr "Dnevi za prikaz v EPG-ju"
 
 msgctxt "#19184"
 msgid "Channel information duration"
@@ -6579,11 +6651,11 @@ msgstr "Snemanje zaključeno: %s"
 
 msgctxt "#19199"
 msgid "Channel manager"
-msgstr "Upravitelj programov"
+msgstr "Upravljalnik programov"
 
 msgctxt "#19200"
 msgid "EPG source:"
-msgstr "Vir EPG:"
+msgstr "Vir EPG-ja:"
 
 msgctxt "#19201"
 msgid "Channel name:"
@@ -6697,6 +6769,10 @@ msgctxt "#19229"
 msgid "Close channel OSD after switching channels"
 msgstr "Po preklopu programa zapri OSD"
 
+msgctxt "#19230"
+msgid "Prevent EPG updates during playback"
+msgstr "Prepreči posodabljanje EPG-ja med predvajanjem"
+
 msgctxt "#19231"
 msgid "Always use the channel order from the backend(s)"
 msgstr "Vedno uporabi zaporedje programov iz hrbtenic(e)"
@@ -6711,7 +6787,7 @@ msgstr "Prikaži obvestilo ob posodobitvah časovnikov"
 
 msgctxt "#19235"
 msgid "PVR manager is starting up"
-msgstr "Upravitelj PVR se zaganja"
+msgstr "Upravljalnik PVR se zaganja"
 
 msgctxt "#19236"
 msgid "Loading channels from clients"
@@ -6729,9 +6805,17 @@ msgctxt "#19239"
 msgid "Starting background threads"
 msgstr "Zaganjam niti v ozadju"
 
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Noben dodatek PVR ni omogočen"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
-msgstr "Upravljalec PVR je bil omogočen brez"
+msgstr "Upravljalnik PVR je bil omogočen brez"
+
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "vključen dodatek PVR. Omogočite vsaj enega"
 
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
@@ -6743,11 +6827,11 @@ msgstr "Čas nedejavnosti hrbtenice"
 
 msgctxt "#19245"
 msgid "Set wakeup command (cmd [timestamp])"
-msgstr "Določi ukaz zbujanja (ukaz [časovna koda])"
+msgstr "Določi ukaz bujenja (ukaz [časovni žig])"
 
 msgctxt "#19246"
 msgid "Wakeup before recording"
-msgstr "Zbudi se pred snemanjem"
+msgstr "Prebudi se pred snemanjem"
 
 msgctxt "#19247"
 msgid "Daily wakeup"
@@ -6771,15 +6855,15 @@ msgstr "Posodobi informacije EPG"
 
 msgctxt "#19252"
 msgid "Schedule EPG update for this channel?"
-msgstr "Načrtujem posodobitev EPG za ta program?"
+msgstr "Ali želite načrtovati posodobitev EPG-ja za ta program?"
 
 msgctxt "#19253"
 msgid "EPG update scheduled for channel"
-msgstr "Posodobitev EPG je načrtovana za program"
+msgstr "Posodobitev EPG-ja je načrtovana za program"
 
 msgctxt "#19254"
 msgid "EPG update failed for channel"
-msgstr "Posodobitev EPG ni uspela za program"
+msgstr "Posodobitev EPG-ja ni uspela za program"
 
 msgctxt "#19255"
 msgid "Start recording"
@@ -6803,7 +6887,7 @@ msgstr "Starševski nazdor"
 
 msgctxt "#19260"
 msgid "Unlock duration"
-msgstr "Čas odklenjenosti"
+msgstr "Trajanje odklepa"
 
 msgctxt "#19261"
 msgid "Change PIN"
@@ -6835,7 +6919,7 @@ msgstr "Starševsko zaklenjeno:"
 
 msgctxt "#19268"
 msgid "Do not show 'no information available' labels"
-msgstr "Ne prikaži oznak 'informacija ni na voljo'"
+msgstr "Ne prikaži oznak 'Informacije niso na voljo'"
 
 msgctxt "#19269"
 msgid "Do not show 'connection lost' warnings"
@@ -6845,10 +6929,18 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Vsi posnetki"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Dodatkov PVR ni mogoče najti"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Za PVR potrebujete sprejemnik, program za hrbtenico"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Dodatek za hrbtenico ki bo omogočal uporabo PVR."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "Obiščite xbmc.org/pvr za več informacij."
@@ -7147,7 +7239,7 @@ msgstr "Dodatno izobraževanje"
 
 msgctxt "#19635"
 msgid "Languages"
-msgstr "Languages"
+msgstr "Jeziki"
 
 msgctxt "#19644"
 msgid "Leisure/Hobbies"
@@ -7239,7 +7331,7 @@ msgstr "Za odrasle"
 
 msgctxt "#20000"
 msgid "Saved music folder"
-msgstr "Mapa za shranjeno glasbo"
+msgstr "Mapa shranjene glasbe"
 
 msgctxt "#20001"
 msgid "Use external DVD player"
@@ -7283,7 +7375,7 @@ msgstr "Seznami predvajanja videa"
 
 msgctxt "#20013"
 msgid "Do you wish to launch the game?"
-msgstr "Želite zagnati igro?"
+msgstr "Ali želite zagnati igro?"
 
 msgctxt "#20014"
 msgid "Sort by: Playlist"
@@ -7347,11 +7439,11 @@ msgstr "Zakleni okna programov & skript"
 
 msgctxt "#20042"
 msgid "Lock file manager"
-msgstr "Zakleni upravitelja datotek"
+msgstr "Zakleni upravljalnika datotek"
 
 msgctxt "#20043"
 msgid "Lock settings"
-msgstr "Zakleni nastavitve"
+msgstr "Nastavitve zaklepanja"
 
 msgctxt "#20044"
 msgid "Start fresh"
@@ -7367,7 +7459,7 @@ msgstr "Izstopi iz načina upravljanja"
 
 msgctxt "#20047"
 msgid "Create profile '%s'?"
-msgstr "Ustvari profil '%s'?"
+msgstr "Ali ustvarim profil '%s'?"
 
 msgctxt "#20048"
 msgid "Start with fresh settings"
@@ -7383,7 +7475,7 @@ msgstr "Samodejno preklopi med 16x9 in 4x3"
 
 msgctxt "#20051"
 msgid "Treat stacked files as single file"
-msgstr "Obravnavaj razdeljene datoteke kot eno datoteko"
+msgstr "Obravnavaj združene datoteke kot eno datoteko"
 
 msgctxt "#20052"
 msgid "Caution"
@@ -7407,7 +7499,7 @@ msgstr "Odstrani sličico"
 
 msgctxt "#20058"
 msgid "Add profile..."
-msgstr "Dodaj profil..."
+msgstr "Dodaj profil ..."
 
 msgctxt "#20059"
 msgid "Query info for all albums"
@@ -7415,7 +7507,7 @@ msgstr "Poizvedba informacij za vse albume"
 
 msgctxt "#20060"
 msgid "Media info"
-msgstr "Info o mediju"
+msgstr "Predstavne informacije"
 
 msgctxt "#20061"
 msgid "Separate"
@@ -7455,11 +7547,11 @@ msgstr "Mape ni mogoče ustvariti"
 
 msgctxt "#20070"
 msgid "Profile directory"
-msgstr "Direktorij profilov"
+msgstr "Mapa profilov"
 
 msgctxt "#20071"
 msgid "Start with fresh media sources"
-msgstr "Začni z svežimi multimedijskimi viri"
+msgstr "Začni z svežimi predstavnimi viri"
 
 msgctxt "#20072"
 msgid "Make sure the selected folder is writable"
@@ -7535,7 +7627,7 @@ msgstr "Prostor na trdem disku"
 
 msgctxt "#20090"
 msgid "Enter the name of an existing share"
-msgstr "Vnesite naziv za obstoječo skupno rabo"
+msgstr "Vnesite naziv obstoječe skupne rabe"
 
 msgctxt "#20091"
 msgid "Lock code"
@@ -7551,11 +7643,11 @@ msgstr "Ime profila"
 
 msgctxt "#20094"
 msgid "Media sources"
-msgstr "Multimedijski vir"
+msgstr "Predstavni viri"
 
 msgctxt "#20095"
 msgid "Enter profile lock code"
-msgstr "Vnesite geslo za zaklepanje za profil"
+msgstr "Vnesite geslo za zaklepanje profila"
 
 msgctxt "#20096"
 msgid "Login screen"
@@ -7571,7 +7663,7 @@ msgstr "Prenašam informacije za album"
 
 msgctxt "#20099"
 msgid "Can't rip CD or track while playing from CD"
-msgstr "Med predvajanjem CD-ja ni mogoče pretvoriti"
+msgstr "Med predvajanjem CD-ja posnetkov ni mogoče zajeti"
 
 msgctxt "#20100"
 msgid "Master lock code and settings"
@@ -7587,7 +7679,7 @@ msgstr "ali kopiram iz privzete?"
 
 msgctxt "#20103"
 msgid "Save changes to profile?"
-msgstr "Shranim spremembe v profil?"
+msgstr "Ali shranim spremembe v profil?"
 
 msgctxt "#20104"
 msgid "Old settings found."
@@ -7595,11 +7687,11 @@ msgstr "Najdene stare nastavitve."
 
 msgctxt "#20105"
 msgid "Do you want to use them?"
-msgstr "Jih želite uporabit?"
+msgstr "Ali jih želite uporabiti?"
 
 msgctxt "#20106"
 msgid "Old media sources found."
-msgstr "Najdeni stari multimedijski viri"
+msgstr "Najdeni stari predstavni viri."
 
 msgctxt "#20107"
 msgid "Separate (locked)"
@@ -7615,11 +7707,11 @@ msgstr "Povečaj"
 
 msgctxt "#20110"
 msgid "UPnP settings"
-msgstr "UPnP nastavitve"
+msgstr "Nastavitve UPnP-ja"
 
 msgctxt "#20111"
 msgid "Autostart UPnP client"
-msgstr "Samodejni zagon odjemalca UPnP"
+msgstr "Samodejno zaženi odjemalca UPnP"
 
 msgctxt "#20112"
 msgid "Last login: %s"
@@ -7651,7 +7743,7 @@ msgstr "Dejanje potrebuje nastavitev glavnega gesla."
 
 msgctxt "#20119"
 msgid "Would you like to set it now?"
-msgstr "Želite opraviti nastavitve sedaj?"
+msgstr "Ali želite opraviti nastavitve sedaj?"
 
 msgctxt "#20120"
 msgid "Loading program information"
@@ -7711,7 +7803,7 @@ msgstr "Odstrani omrežno lokacijo"
 
 msgctxt "#20135"
 msgid "Do you want to scan the folder?"
-msgstr "Želite pregledati mapo?"
+msgstr "Ali želite pregledati mapo?"
 
 msgctxt "#20136"
 msgid "Memory unit"
@@ -7779,11 +7871,11 @@ msgstr "Izključi zakasnitev izklopa"
 
 msgctxt "#20152"
 msgid "Lock preferences for %s"
-msgstr "Nastavitve zaklepanja za %s"
+msgstr "Zakleni nastavitve za %s"
 
 msgctxt "#20153"
 msgid "Browse..."
-msgstr "Prebrskaj..."
+msgstr "Prebrskaj ..."
 
 msgctxt "#20154"
 msgid "Summary information"
@@ -7923,11 +8015,11 @@ msgstr "UPnP"
 
 msgctxt "#20188"
 msgid "Announce library updates via UPnP"
-msgstr "Naznani posodobitve knjižnice preko UPnP"
+msgstr "Naznani posodobitve knjižnice preko UPnP-ja"
 
 msgctxt "#20189"
 msgid "Enable auto scrolling for plot & review"
-msgstr "Omogoči samodejno premikanje zgodbe & ocen"
+msgstr "Omogoči samodejno drsenje povzetka & ocen"
 
 msgctxt "#20190"
 msgid "Custom"
@@ -7963,12 +8055,16 @@ msgstr "Uvozi glasbeno knjižnico"
 
 msgctxt "#20198"
 msgid "No artist found!"
-msgstr "Ni najdenega izvajalca!"
+msgstr "Izvajalca ni mogoče najti!"
 
 msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Prenašanje informacij o izvajalcu ni uspelo"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Preglasijo oznake pesmi s spletnimi informacijami"
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Glasba Android"
@@ -8035,15 +8131,15 @@ msgstr "Varna lupina (SSH/SFTP)"
 
 msgctxt "#20261"
 msgid "Apple Filing Protocol (AFP)"
-msgstr "Protokol Apple Filing (AFP)"
+msgstr "Datotečni protokol Apple (AFP)"
 
 msgctxt "#20300"
 msgid "Web server directory (HTTP)"
-msgstr "Direktorij na spletnem strežniku (HTTP)"
+msgstr "Spletna mapa (HTTP)"
 
 msgctxt "#20301"
 msgid "Web server directory (HTTPS)"
-msgstr "Direktorij na spletnem strežniku (HTTPS)"
+msgstr "Spletna mapa (HTTPS)"
 
 msgctxt "#20302"
 msgid "Unable to write to folder:"
@@ -8051,7 +8147,7 @@ msgstr "Ni mogoče pisati v mapo:"
 
 msgctxt "#20303"
 msgid "Do you want to skip and proceed?"
-msgstr "Želite preskočiti in nadaljevati?"
+msgstr "Ali želite preskočiti in nadaljevati?"
 
 msgctxt "#20304"
 msgid "RSS Feed"
@@ -8071,7 +8167,7 @@ msgstr "Ustvari novo mapo"
 
 msgctxt "#20311"
 msgid "Unknown or onboard (protected)"
-msgstr "Neznano (zaščiteno)"
+msgstr "Neznano ali vgrajeno (zaščiteno)"
 
 msgctxt "#20314"
 msgid "Videos - Library"
@@ -8103,7 +8199,7 @@ msgstr "Pregledujem albume z %s"
 
 msgctxt "#20324"
 msgid "Play part..."
-msgstr "Predvajaj odlomek..."
+msgstr "Predvajaj odlomek ..."
 
 msgctxt "#20325"
 msgid "Calibration reset"
@@ -8135,7 +8231,7 @@ msgstr "Datoteka"
 
 msgctxt "#20332"
 msgid "Use file or folder names in lookups?"
-msgstr "Uporabi ime datoteke ali mape v poizvedbah?"
+msgstr "Ali želite v poizvedbah uporabiti ime datoteke ali mape?"
 
 msgctxt "#20333"
 msgid "Set content"
@@ -8147,11 +8243,11 @@ msgstr "Mapa"
 
 msgctxt "#20335"
 msgid "Look for content recursively?"
-msgstr "Preišči za vsebine tudi v podmapah?"
+msgstr "Ali želite preiskati za vsebinami tudi v podmapah?"
 
 msgctxt "#20336"
 msgid "Unlock sources"
-msgstr "Odkleni izvore"
+msgstr "Odkleni vire"
 
 msgctxt "#20337"
 msgid "Actor"
@@ -8167,7 +8263,7 @@ msgstr "Režiser"
 
 msgctxt "#20340"
 msgid "Do you want to remove all items within"
-msgstr "Želite odstraniti vse predmete"
+msgstr "Ali želite odstraniti vse predmete"
 
 msgctxt "#20341"
 msgid "this path from the XBMC library?"
@@ -8183,7 +8279,7 @@ msgstr "TV serije"
 
 msgctxt "#20344"
 msgid "This directory contains"
-msgstr "Ta direktorij vsebuje"
+msgstr "Ta mapa vsebuje"
 
 msgctxt "#20345"
 msgid "Run automated scan"
@@ -8203,7 +8299,7 @@ msgstr "Režiserji"
 
 msgctxt "#20349"
 msgid "No video files found in this path!"
-msgstr "Na tej poti ni nobenih video datotek!"
+msgstr "Na tej poti ni video datotek!"
 
 msgctxt "#20350"
 msgid "votes"
@@ -8227,7 +8323,7 @@ msgstr "Prenašam opis epizod"
 
 msgctxt "#20355"
 msgid "Loading info for episodes in directory"
-msgstr "Iščem epizode v direktoriju"
+msgstr "Iščem epizode v mapi"
 
 msgctxt "#20356"
 msgid "Select TV show:"
@@ -8267,7 +8363,7 @@ msgstr "TV serija"
 
 msgctxt "#20365"
 msgid "Episode plot"
-msgstr "Zgodba epizode"
+msgstr "Povzetek epizode"
 
 msgctxt "#20366"
 msgid "* All seasons"
@@ -8283,7 +8379,7 @@ msgstr "Št. prod."
 
 msgctxt "#20369"
 msgid "Show plot for unwatched items"
-msgstr "Skrij zgodbo neogledanih posnetkov"
+msgstr "Prikaži povzetek neogledanih posnetkov"
 
 msgctxt "#20370"
 msgid "* Hidden to prevent spoilers *"
@@ -8319,7 +8415,7 @@ msgstr "Osveži informacije o TV seriji"
 
 msgctxt "#20378"
 msgid "Refresh info for all episodes?"
-msgstr "Osveži informacije vseh epizod?"
+msgstr "Ali želite osvežiti informacije vseh epizod?"
 
 msgctxt "#20379"
 msgid "Selected folder contains a single TV show"
@@ -8335,11 +8431,11 @@ msgstr "Posebne epizode"
 
 msgctxt "#20382"
 msgid "Automatically grab season thumbs"
-msgstr "Samodejno izberi sličico sezone"
+msgstr "Samodejno prenesi sličico sezone"
 
 msgctxt "#20383"
 msgid "Selected folder contains a single video"
-msgstr "Mapa vsebuje samostojni video"
+msgstr "Mapa vsebuje le en samostojni video"
 
 msgctxt "#20384"
 msgid "Link to TV show"
@@ -8507,7 +8603,7 @@ msgstr "Nepravilno"
 
 msgctxt "#20425"
 msgid "Fanart slideshow"
-msgstr "Diaprojekcija ozadij"
+msgstr "Projekcija grafik"
 
 msgctxt "#20426"
 msgid "Export to a single file or separate"
@@ -8527,11 +8623,11 @@ msgstr "Ločeno"
 
 msgctxt "#20430"
 msgid "Export thumbnails and fanart?"
-msgstr "Izvozi sličice in ozadja?"
+msgstr "Ali želite izvoziti sličice in grafike?"
 
 msgctxt "#20431"
 msgid "Overwrite old files?"
-msgstr "Prepiši stare datoteke?"
+msgstr "Ali želite prepisati stare datoteke?"
 
 msgctxt "#20432"
 msgid "Exclude path from library updates"
@@ -8539,15 +8635,19 @@ msgstr "Izloči pot iz posodobitev knjižnice"
 
 msgctxt "#20433"
 msgid "Extract thumbnails and video information"
-msgstr "Izloči sličice in informacije o videu"
+msgstr "Preberi informacije o posnetku in ustvari sličice"
 
 msgctxt "#20434"
 msgid "Sets"
 msgstr "Zbirke"
 
+msgctxt "#20435"
+msgid "Combine split video items"
+msgstr "Združi razdeljene posnetke"
+
 msgctxt "#20436"
 msgid "Export actor thumbs?"
-msgstr "Izvozi sličice izvajalcev?"
+msgstr "Ali želite izvoziti sličice izvajalcev?"
 
 msgctxt "#20437"
 msgid "Choose fanart"
@@ -8575,11 +8675,11 @@ msgstr "Spremeni vsebino"
 
 msgctxt "#20443"
 msgid "Do you want to refresh info for all"
-msgstr "Želite osvežiti informacije"
+msgstr "Ali želite osvežiti informacije za vse"
 
 msgctxt "#20444"
 msgid "items within this path?"
-msgstr "vseh posnetkov s to potjo?"
+msgstr "vseh predmetov s to potjo?"
 
 msgctxt "#20445"
 msgid "Fanart"
@@ -8591,7 +8691,7 @@ msgstr "Najdene krajevno shranjene informacije."
 
 msgctxt "#20447"
 msgid "Ignore and refresh from internet?"
-msgstr "Prezri in osveži z interneta?"
+msgstr "Ali želite prezreti in osvežiti z interneta?"
 
 msgctxt "#20448"
 msgid "Could not download information"
@@ -8603,7 +8703,7 @@ msgstr "Na oddaljeni strežnik se ni mogoče povezati"
 
 msgctxt "#20450"
 msgid "Would you like to continue scanning?"
-msgstr "Želite nadaljevati s pregledovanjem?"
+msgstr "Ali želite nadaljevati s pregledovanjem?"
 
 msgctxt "#20451"
 msgid "Countries"
@@ -8625,6 +8725,10 @@ msgctxt "#20455"
 msgid "Listeners"
 msgstr "Poslušalci"
 
+msgctxt "#20456"
+msgid "Flatten library hierarchy"
+msgstr "Izravnaj hierarhijo knjižnice"
+
 msgctxt "#20457"
 msgid "Movie set"
 msgstr "Filmska zbirka"
@@ -8635,7 +8739,7 @@ msgstr "Združi filme v zbirke"
 
 msgctxt "#20459"
 msgid "Tags"
-msgstr "Oznake"
+msgstr "Značke"
 
 msgctxt "#20460"
 msgid "Add %s"
@@ -8647,11 +8751,11 @@ msgstr "Odstrani %s"
 
 msgctxt "#20462"
 msgid "New tag..."
-msgstr "Nova oznaka..."
+msgstr "Nova značka ..."
 
 msgctxt "#20463"
 msgid "A tag with the name '%s' already exists."
-msgstr "Oznaka z imenom '%s' že obstaja."
+msgstr "Značka z imenom '%s' že obstaja."
 
 msgctxt "#20464"
 msgid "Select %s"
@@ -8667,7 +8771,7 @@ msgstr "Izberi zbirko filmov"
 
 msgctxt "#20467"
 msgid "No set (Remove from %s)"
-msgstr "Brez zbirke (Odstrani iz %s)"
+msgstr "Brez zbirke (odstrani iz %s)"
 
 msgctxt "#20468"
 msgid "Add movie to a new set"
@@ -8687,7 +8791,7 @@ msgstr "Odjemalec TuxBox"
 
 msgctxt "#21332"
 msgid "WARNING: Target TuxBox device is in recording-mode!"
-msgstr "OPOZORILO: Željena naprava TuxBox je v snemalnem načinu!"
+msgstr "OPOZORILO: Ciljna naprava TuxBox je v snemalnem načinu!"
 
 msgctxt "#21333"
 msgid "The stream will be stopped!"
@@ -8699,7 +8803,7 @@ msgstr "Povezava s kanalom: %s ni uspel!"
 
 msgctxt "#21335"
 msgid "Are you sure to start the stream?"
-msgstr "Ste prepričani, da želite začeti pretok?"
+msgstr "Ali ste prepričani, da želite začeti pretok?"
 
 msgctxt "#21336"
 msgid "Connecting to: %s"
@@ -8711,15 +8815,15 @@ msgstr "Naprava TuxBox"
 
 msgctxt "#21359"
 msgid "Add media share..."
-msgstr "Dodaj multimedijsko skupno rabo..."
+msgstr "Dodaj skupno rabo ..."
 
 msgctxt "#21360"
 msgid "Share video and music libraries through UPnP"
-msgstr "Deli video in glasbo preko UPnP"
+msgstr "Postavi knjižnice videa in glasbe v skupno rabo preko UPnP-ja"
 
 msgctxt "#21361"
 msgid "Look for remote UPnP players"
-msgstr "Poišči oddaljene UPnP predvajalnike"
+msgstr "Poišči oddaljene predvajalnike UPnP"
 
 msgctxt "#21362"
 msgid "Bookmark created"
@@ -8731,19 +8835,15 @@ msgstr "Zaznamek episode ustvarjen"
 
 msgctxt "#21364"
 msgid "Edit media share"
-msgstr "Uredi multimedijsko skupno rabo"
+msgstr "Uredi skupno rabo"
 
 msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Odstrani skupno rabo"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Mapa s podnapisi"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
-msgstr "Film & dodatni direktorij s podnapisi"
+msgstr "Mapa s filmom & dodatnimi podnapisi"
 
 msgctxt "#21368"
 msgid "Override ASS/SSA subtitles fonts"
@@ -8755,7 +8855,7 @@ msgstr "Omogoči miško in podporo za zaslone na dotik"
 
 msgctxt "#21370"
 msgid "Play navigation sounds during media playback"
-msgstr "Vključi navigacijske zvoke med predvajanjem vsebine"
+msgstr "Predvajaj navigacijske zvoke med predvajanjem vsebine"
 
 msgctxt "#21371"
 msgid "Thumbnail"
@@ -8803,7 +8903,7 @@ msgstr "Vnesite ime novega seznama predvajanja"
 
 msgctxt "#21382"
 msgid "Show \"Add source\" buttons in file lists"
-msgstr "Prikaži gumb \"Dodaj izvor\" v seznamih datotek"
+msgstr "Prikaži gumb \"Dodaj vir\" v seznamih datotek"
 
 msgctxt "#21383"
 msgid "Enable scrollbars"
@@ -8855,7 +8955,7 @@ msgstr "Kratka pripravljenost"
 
 msgctxt "#21395"
 msgid "Unable to cache files bigger than 4GB"
-msgstr "Začasno pomnenje datotek večjih od 4GB ni mogoče"
+msgstr "Predpomnjenje datotek večjih od 4GB ni mogoče"
 
 msgctxt "#21396"
 msgid "Chapter"
@@ -8959,11 +9059,11 @@ msgstr "Pravilo pametnega seznama predvajanja"
 
 msgctxt "#21422"
 msgid "Match items where"
-msgstr "Označi predmete kjer"
+msgstr "Primerjaj predmete kjer"
 
 msgctxt "#21423"
 msgid "New rule..."
-msgstr "Novo pravilo..."
+msgstr "Novo pravilo ..."
 
 msgctxt "#21424"
 msgid "Items must match"
@@ -9019,7 +9119,7 @@ msgstr "%i predmetov"
 
 msgctxt "#21437"
 msgid "New smart playlist..."
-msgstr "Nov pameten seznam predvajanja..."
+msgstr "Nov pameten seznam predvajanja ..."
 
 msgctxt "#21438"
 msgid "%c Drive"
@@ -9079,7 +9179,7 @@ msgstr "Potrebna je internetna povezava."
 
 msgctxt "#21452"
 msgid "Get More..."
-msgstr "Prenesi več..."
+msgstr "Prenesi več ..."
 
 msgctxt "#21453"
 msgid "Root filesystem"
@@ -9087,11 +9187,11 @@ msgstr "Korenski datotečni sistem"
 
 msgctxt "#21454"
 msgid "Cache full"
-msgstr "Začasni pomnilnik poln"
+msgstr "Predpomnilnik poln"
 
 msgctxt "#21455"
 msgid "Cache filled before reaching required amount for continous playback"
-msgstr "Začasni pomnilnik se je zapolnil, preden je bil dosežen nivo za tekoče predvajanje"
+msgstr "Predpomnilnik se je zapolnil, preden je bil dosežen nivo za tekoče predvajanje"
 
 msgctxt "#21456"
 msgid "External storage"
@@ -9109,10 +9209,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mešano"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Položaj podnapisov"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fiksno"
@@ -9145,6 +9241,14 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s do %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Raje uporabi zunanje podnapise"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Raje uporabi zunanje podnapise pred internimi."
+
 msgctxt "#21602"
 msgid "(External)"
 msgstr "(Zunanje)"
@@ -9379,11 +9483,11 @@ msgstr "Storitev referenc"
 
 msgctxt "#21881"
 msgid "Allow control of XBMC via UPnP"
-msgstr "Dovoli upravljanje z XBMC preko UPnP"
+msgstr "Dovoli upravljanje z XBMC-jem preko UPnP-ja"
 
 msgctxt "#21882"
 msgid "Attempt to skip introduction before DVD menu"
-msgstr "Poskusi preskočiti uvod pred DVD menujem"
+msgstr "Poskusi preskočiti uvod pred menijem DVD-ja"
 
 msgctxt "#21883"
 msgid "Saved music"
@@ -9467,7 +9571,7 @@ msgstr "Posodabljaj knjižnico v ozadju"
 
 msgctxt "#22002"
 msgid "DNS suffix"
-msgstr "DNS pripona"
+msgstr "Pripona DNS"
 
 msgctxt "#22003"
 msgid "%2.3fs"
@@ -9479,7 +9583,7 @@ msgstr "Zaostanek za: %2.3fs"
 
 msgctxt "#22005"
 msgid "Ahead by: %2.3fs"
-msgstr "Prehitevanje za: %2.3fs"
+msgstr "Naprej za: %2.3fs"
 
 msgctxt "#22006"
 msgid "Subtitle offset"
@@ -9515,7 +9619,7 @@ msgstr "Podatki o profilu"
 
 msgctxt "#22014"
 msgid "Use dim if paused during video playback"
-msgstr "Zatemni med prekinitvijo videa"
+msgstr "Zatemni med prekinitvijo predvajanja"
 
 msgctxt "#22015"
 msgid "All recordings"
@@ -9541,6 +9645,10 @@ msgctxt "#22020"
 msgid "Guide"
 msgstr "Vodič"
 
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "Dovoljena napaka v razmerju slike za zmanjšanje črnih robov"
+
 msgctxt "#22022"
 msgid "Show video files in listings"
 msgstr "V seznamih prikaži video datoteke"
@@ -9579,15 +9687,15 @@ msgstr "Izvozi naslove karaok kot CSV"
 
 msgctxt "#22036"
 msgid "Import karaoke titles..."
-msgstr "Uvozi naslove karaok..."
+msgstr "Uvozi naslove karaok ..."
 
 msgctxt "#22037"
 msgid "Show song selector automatically"
-msgstr "Samodejno prikaži izbor pesmi"
+msgstr "Samodejno prikaži izbirnik pesmi"
 
 msgctxt "#22038"
 msgid "Export karaoke titles..."
-msgstr "Izvozi naslove karaok..."
+msgstr "Izvozi naslove karaok ..."
 
 msgctxt "#22039"
 msgid "Enter song number"
@@ -9623,7 +9731,7 @@ msgstr "Prikaži informacije"
 
 msgctxt "#22082"
 msgid "More..."
-msgstr "Več..."
+msgstr "Več ..."
 
 msgctxt "#22083"
 msgid "Play all"
@@ -9655,7 +9763,7 @@ msgstr "Teče"
 
 msgctxt "#23055"
 msgid "Scale Teletext to 4:3"
-msgstr "Raztegni teletekst na 4:3"
+msgstr "Prikaži teletekst v razmerju 4:3"
 
 msgctxt "#23100"
 msgid "External Player Active"
@@ -9687,7 +9795,7 @@ msgstr "Informacije o dodatku"
 
 msgctxt "#24005"
 msgid "Media sources"
-msgstr "Multimedijski viri"
+msgstr "Predstavni viri"
 
 msgctxt "#24007"
 msgid "Movie information"
@@ -9701,6 +9809,10 @@ msgctxt "#24009"
 msgid "Script"
 msgstr "Skripta"
 
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "Vizualizacija"
+
 msgctxt "#24011"
 msgid "Add-on repository"
 msgstr "Skladišče dodatkov"
@@ -9821,10 +9933,22 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Na voljo so posodobitve"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Odvisnost ni ipolnjena. Obrnite se na avtorja dodatka."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "Dodatek nima pravilne strukture"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s uporabljajo sledeči dodatki"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Tega dodatka ne morete odstraniti"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Razveljavi posodobitev"
@@ -9855,11 +9979,11 @@ msgstr "Zgodovina sprememb"
 
 msgctxt "#24059"
 msgid "Would you like to enable this Add-on?"
-msgstr "Želite omogočiti ta dodatek?"
+msgstr "Ali želite omogočiti ta dodatek?"
 
 msgctxt "#24060"
 msgid "Would you like to disable this Add-on?"
-msgstr "Želite onemogočiti ta dodatek?"
+msgstr "Ali želite onemogočiti ta dodatek?"
 
 msgctxt "#24061"
 msgid "Add-on update available!"
@@ -9883,7 +10007,7 @@ msgstr "Dodatek je posodobljen"
 
 msgctxt "#24066"
 msgid "Cancel Add-on download?"
-msgstr "Prekličem prenos dodatka?"
+msgstr "Ali želite preklicati prenos dodatka?"
 
 msgctxt "#24067"
 msgid "Currently downloading Add-ons"
@@ -9927,7 +10051,7 @@ msgstr "Zahtevan dodatek"
 
 msgctxt "#24080"
 msgid "Try to reconnect?"
-msgstr "Poskusim ponovno povezavo?"
+msgstr "Ali želite poskusiti ponovno?"
 
 msgctxt "#24089"
 msgid "Add-on restarts"
@@ -9935,7 +10059,7 @@ msgstr "Ponovni zagon dodatka"
 
 msgctxt "#24090"
 msgid "Lock Add-on manager"
-msgstr "Zakleni upravitelja dodatkov"
+msgstr "Zakleni upravljalnika dodatkov"
 
 msgctxt "#24091"
 msgid "This Add-on cannot be disabled"
@@ -9949,9 +10073,13 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(nedelujoč)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Dodatek je nezdružljiv ali je bil označen kot 'zlomljen' v repozitoriju."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
-msgstr "Ga želite onemogočiti na vašem sistemu?"
+msgstr "Ali ga želite onemogočiti na vašem sistemu?"
 
 msgctxt "#24098"
 msgid "Broken"
@@ -9959,7 +10087,7 @@ msgstr "Nedelujoč"
 
 msgctxt "#24099"
 msgid "Would you like to switch to this skin?"
-msgstr "Želite preklopiti na to preobleko?"
+msgstr "Ali želite preklopiti na to preobleko?"
 
 msgctxt "#24100"
 msgid "To use this feature you must download an Add-on:"
@@ -9967,7 +10095,7 @@ msgstr "Za uporabo te funkcije potrebujete dodatek:"
 
 msgctxt "#24101"
 msgid "Would you like to download this Add-on?"
-msgstr "Želite prenesti ta dodatek?"
+msgstr "Ali želite prenesti ta dodatek?"
 
 msgctxt "#24102"
 msgid "Unable to load skin"
@@ -9977,10 +10105,18 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Preobleki manjkajo nekatere datoteke"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Dodatek je nezdružljiv zaradi pomanjkanja odvisnih datotek."
+
 msgctxt "#24105"
 msgid "Pause when searching for subtitles"
 msgstr "Začasno ustavi predvajanje ko se prične iskanje podnapisov"
 
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr "V primeru, da podnapisi ne bodo shranjeni v mapo s filmom, bodo prenešeni v določeno poljubno mapo"
+
 msgctxt "#24107"
 msgid "Searching for subtitles ..."
 msgstr "Iščem podnapise ..."
@@ -9991,12 +10127,20 @@ msgstr "%d najdenih podnapisov"
 
 msgctxt "#24109"
 msgid "No subtitles found"
-msgstr "Ni najdenih podnapisov"
+msgstr "Podnapisov ni mogoče najti"
 
 msgctxt "#24110"
 msgid "Downloading subtitles ..."
 msgstr "Prenašam podnapise ..."
 
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Jeziki za prenos podnapisov za"
+
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr "Nastavite jezike za iskanje podnapisov. Vsi iskalniki ne bodo uporabili vse jezike."
+
 msgctxt "#24113"
 msgid "Failed to download subtitle"
 msgstr "Prenos podnapisa je spodletel."
@@ -10007,7 +10151,27 @@ msgstr "Ni nameščen noben vtičnik za podnapise."
 
 msgctxt "#24115"
 msgid "Save subtitles to movie folder"
-msgstr "Shrani podnapise v mapo s filmom."
+msgstr "Shrani podnapise v mapo s filmom"
+
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Privzeta storitev za TV"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Izberite storitev, ki se bo uporabljala kot privzeta za iskanje podnapisov za TV serije"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Privzeta storitev za filme"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Izberite storitev, ki se bo uporabljala kot privzeta za iskanje podnapisov za filme"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Vnesite iskalni niz"
 
 msgctxt "#25000"
 msgid "Notifications"
@@ -10087,7 +10251,7 @@ msgstr "Kopiram"
 
 msgctxt "#33010"
 msgid "Set download directory"
-msgstr "Določi direktorij prenosov"
+msgstr "Določi mapo prenosov"
 
 msgctxt "#33011"
 msgid "Search duration"
@@ -10311,7 +10475,7 @@ msgstr "Posodobite XBMC."
 
 msgctxt "#33077"
 msgid "No data found!"
-msgstr "Nobenih podatkov ni bilo mogoče najti!"
+msgstr "Podatkov ni bilo mogoče najti!"
 
 msgctxt "#33078"
 msgid "Next page"
@@ -10327,7 +10491,7 @@ msgstr "Sovražim"
 
 msgctxt "#33081"
 msgid "This file is stacked, select the part you want to play from."
-msgstr "Ta datoteka je razdeljena. Izberite del za predvajanje."
+msgstr "Ta datoteka je združena. Izberite del za predvajanje."
 
 msgctxt "#33082"
 msgid "Path to script"
@@ -10335,7 +10499,7 @@ msgstr "Pot do skripte"
 
 msgctxt "#33083"
 msgid "Enable custom script button"
-msgstr "Omogoči gumb poljubne skripte"
+msgstr "Omogoči gumb s poljubno skripto"
 
 msgctxt "#33084"
 msgid "Auto login"
@@ -10385,9 +10549,13 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Sistem zvočnikov"
+msgctxt "#34006"
+msgid "MPEG-4 Audio (FFmpeg M4A AAC)"
+msgstr "MPEG-4 Audio (FFmpeg M4A AAC)"
+
+msgctxt "#34007"
+msgid "Windows Media Audio 2 (FFmpeg wmav2)"
+msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
 msgctxt "#34101"
 msgid "2.0"
@@ -10467,15 +10635,15 @@ msgstr "192.0"
 
 msgctxt "#34201"
 msgid "Can't find a next item to play"
-msgstr "Naslednjega posnetka za predvajanje ni mogoče najti"
+msgstr "Naslednjega vira predvajanja ni mogoče najti"
 
 msgctxt "#34202"
 msgid "Can't find a previous item to play"
-msgstr "Prejšnjega posnetka za predvajanje ni mogoče najti"
+msgstr "Prejšnjega vira predvajanja ni mogoče najti"
 
 msgctxt "#34300"
 msgid "Failed to start Zeroconf"
-msgstr "Zagon Zeroconf ni uspel"
+msgstr "Zeroconf-a ni bilo mogoče zagnati"
 
 msgctxt "#34301"
 msgid "Is Apple's Bonjour Service installed? See log for more info."
@@ -10487,11 +10655,11 @@ msgstr "AirPlay zahteva omogočen Zeroconf."
 
 msgctxt "#34303"
 msgid "Unable to stop Zeroconf"
-msgstr "Zaustavitev Zeroconf-a je spodletela."
+msgstr "Zeroconf-a ni bilo mogoče ustaviti"
 
 msgctxt "#34304"
 msgid "AirPlay and AirTunes depend on Zeroconf running."
-msgstr "AirPlay in AirTunes sta odvisna od delovanja Zeroconf."
+msgstr "AirPlay in AirTunes za delovanje potrebujeta Zeroconf."
 
 msgctxt "#34400"
 msgid "Video Rendering"
@@ -10501,6 +10669,10 @@ msgctxt "#34401"
 msgid "Failed to init video filters/scalers, falling back to bilinear scaling"
 msgstr "Filtrov/spreminjanja velikosti slike ni mogoče zagnati, prehajam nazaj na bilinearno spreminjanje velikosti"
 
+msgctxt "#34402"
+msgid "Failed to initialise audio device"
+msgstr "Zvočne naprave ni mogoče zagnati"
+
 msgctxt "#34403"
 msgid "Check your audiosettings"
 msgstr "Preverite vaše nastavitve zvoka"
@@ -10543,7 +10715,7 @@ msgstr "Generični disk"
 
 msgctxt "#35004"
 msgid "There are no settings available\nfor this peripheral."
-msgstr "Ni nastavitev za to zunanjo napravo."
+msgstr "Za to zunanjo napravo ni nastavitev."
 
 msgctxt "#35005"
 msgid "New device configured"
@@ -10551,7 +10723,7 @@ msgstr "Dodana nova naprava"
 
 msgctxt "#35006"
 msgid "Device removed"
-msgstr "Naprava je izključena"
+msgstr "Naprava je odstranjena"
 
 msgctxt "#35007"
 msgid "Keymap to use for this device"
@@ -10571,7 +10743,7 @@ msgstr "Omogoči podporo igralnim ploščkom in palicam"
 
 msgctxt "#35102"
 msgid "Disable joystick when this device is present"
-msgstr "Onemogoči igralni plošček ko je prisotna ta naprava"
+msgstr "Onemogoči igralno palico ob prisotnosti te naprave"
 
 msgctxt "#35103"
 msgid "Enable system keys in fullscreen"
@@ -10599,7 +10771,7 @@ msgstr "ID izdelka"
 
 msgctxt "#36000"
 msgid "Pulse-Eight CEC adaptor"
-msgstr "Pulse-Eight CEC adapter"
+msgstr "Pulse-Eight vmesnik CEC"
 
 msgctxt "#36001"
 msgid "Pulse-Eight Nyxboard"
@@ -10621,26 +10793,34 @@ msgctxt "#36005"
 msgid "Enable switch side commands"
 msgstr "Omogoči ukaze za menjavo strani"
 
+msgctxt "#36006"
+msgid "Could not open the adaptor"
+msgstr "Vmesnika ni mogoče odpreti"
+
 msgctxt "#36007"
 msgid "Devices to power on when starting XBMC"
-msgstr "Naprave, ki se vključijo ob zagonu XBMC"
+msgstr "Naprave, ki se vključijo ob zagonu XBMC-ja"
 
 msgctxt "#36008"
 msgid "Devices to power off when stopping XBMC"
-msgstr "Naprave, ki se izključijo ob izhodu iz XBMC"
+msgstr "Naprave, ki se izključijo ob izhodu iz XBMC-ja"
 
 msgctxt "#36009"
 msgid "Put devices in standby mode when activating screensaver"
-msgstr "Postavi naprave v stanje pripravljenosti ob ohranjevalniku zaslona"
+msgstr "Postavi naprave v stanje pripravljenosti ob zagonu ohranjevalnika zaslona"
 
 msgctxt "#36010"
 msgid "Wake devices when deactivating screensaver"
-msgstr "Omogoči naprave ko se izključi mirovanje"
+msgstr "Prebudi naprave, ko se izključi ohranjevalnik zaslona"
 
 msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
 msgstr "Vrat CEC ni mogoče zaznati. Nastavite jih ročno."
 
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "Vmesnika CEC ni mogoče zagnati. Preverite vaše nastavitve."
+
 msgctxt "#36015"
 msgid "HDMI port number"
 msgstr "Št. vrat HDMI"
@@ -10649,6 +10829,10 @@ msgctxt "#36016"
 msgid "Connected"
 msgstr "Povezan"
 
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "Vmesnika CEC ni bilo mogoče zagnati: libCEC ni bilo mogoče najti."
+
 msgctxt "#36018"
 msgid "Use the TV's language setting"
 msgstr "Uporabi jezikovne nastavitve TV"
@@ -10679,7 +10863,7 @@ msgstr "Novih nastavitev ni mogoče uveljaviti. Preverite svoje nastavitve."
 
 msgctxt "#36025"
 msgid "Send 'inactive source' command when stopping XBMC"
-msgstr "Pošlji ukaz 'neaktiven vir' ob izhodu iz XBMC"
+msgstr "Pošlji ukaz 'neaktiven vir' ob izhodu iz XBMC-ja"
 
 msgctxt "#36026"
 msgid "Put devices in standby mode when putting the PC in standby"
@@ -10701,6 +10885,14 @@ msgctxt "#36030"
 msgid "Connection lost"
 msgstr "Povezava prekinjena"
 
+msgctxt "#36031"
+msgid "This user does not have permissions to open the CEC adaptor"
+msgstr "Ta uporabnik nima pravic za uporabo vmesnika CEC"
+
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "Vrata so zasedena. Samo en program lahko dostopa do vmesnika CEC"
+
 msgctxt "#36033"
 msgid "Pause playback when switching to another source"
 msgstr "Prekini predvajanje med preklopom na drug vir"
@@ -10731,7 +10923,11 @@ msgstr "Nepodprta različica libCEC. %x je nižja, kot jo podpira XBMC (%x)"
 
 msgctxt "#36041"
 msgid "* Item folder"
-msgstr "* Mapa posnetka"
+msgstr "* Mapa predmeta"
+
+msgctxt "#36042"
+msgid "Use limited colour range (16-235)"
+msgstr "Uporabi omejen obseg barv (16-235)"
 
 msgctxt "#36101"
 msgid "Change the look and feel of the User Interface."
@@ -10743,7 +10939,7 @@ msgstr "Informacije še niso na voljo."
 
 msgctxt "#36103"
 msgid "Select the skin for the User Interface. This will define the look and feel of XBMC."
-msgstr "Izberite preobleko uporabniškega vmesnika. To bo določilo izgled in obnašanje XBMC."
+msgstr "Izberite preobleko uporabniškega vmesnika. To bo določilo izgled in obnašanje XBMC-ja."
 
 msgctxt "#36104"
 msgid "Change specific skin settings. The available options are dependent on the skin used."
@@ -10763,19 +10959,19 @@ msgstr "Izberite pisavo uporabniškega vmesnika. Zbirke pisav so nastavljene pre
 
 msgctxt "#36108"
 msgid "Resize the view of the GUI."
-msgstr "Spremeni velikost pogleda GUI."
+msgstr "Spremenite velikost uporabniškega vmesnika."
 
 msgctxt "#36109"
 msgid "Select the media window that XBMC displays on startup."
-msgstr "Izberi privzeto okno ki se bo prikazalo ob zagonu XBMC."
+msgstr "Izberite privzeto okno, ki se bo prikazalo ob zagonu XBMC-ja."
 
 msgctxt "#36110"
 msgid "Select or disable the sound scheme used in the User Interface."
-msgstr "Izberi ali onemogoči nastavitev zvoka uporabljeno v Uporabniškem vmesniku."
+msgstr "Izberite ali onemogočite zvočno shemo, uporabljeno v uporabniškem vmesniku."
 
 msgctxt "#36111"
 msgid "Turn this off to remove the scrolling RSS news ticker."
-msgstr "Izključi drsenje RSS novic."
+msgstr "Izključite drsenje novic RSS."
 
 msgctxt "#36112"
 msgid "Edit the RSS feeds."
@@ -10791,11 +10987,11 @@ msgstr "Izberite jezik uporabniškega vmesnika."
 
 msgctxt "#36115"
 msgid "Select the formats for temperature, time and date. The available options depend on the selected language."
-msgstr "Izberi vrsto zapisa za temperaturo, čas in datum. Razpoložljive možnosti so odvisne od izbranega jezika."
+msgstr "Izberite vrsto zapisa temperature, časa in datuma. Razpoložljive možnosti so odvisne od izbranega jezika."
 
 msgctxt "#36116"
 msgid "Choose which character set is used for displaying text in the GUI."
-msgstr "Izberi nabor znakov za prikaz besedila v grafičnem vmesniku."
+msgstr "Izberite nabor znakov za prikaz besedila v uporabniškem vmesniku."
 
 msgctxt "#36117"
 msgid "Select country location."
@@ -10807,11 +11003,11 @@ msgstr "Izberite vaš trenutni časovni pas."
 
 msgctxt "#36119"
 msgid "Select the default audio track when different language tracks are available."
-msgstr "Izberi privzet audio zapis kadar je na voljo več jezikovnih zapisov."
+msgstr "Izberite privzeto zvočno sled kadar je na voljo več jezikovnih sledi."
 
 msgctxt "#36120"
 msgid "Select the default subtitles when different languages are available."
-msgstr "Izberi privzet jezik podnapisov kadar je na voljo več jezikovnih zapisov."
+msgstr "Izberite privzet jezik podnapisov kadar so na voljo v več jezikih."
 
 msgctxt "#36121"
 msgid "No info available yet."
@@ -10819,23 +11015,55 @@ msgstr "Informacije še niso na voljo."
 
 msgctxt "#36122"
 msgid "Display the (..) item in lists for visiting the parent folder."
-msgstr "Prikaži (..) v seznamu za ogled mape en nivo višje."
+msgstr "Prikažite (..) v seznamih za ogled mape en nivo višje."
 
 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 "Prikaži pripone medijskih datote. Primer 'Party Anima.mp3' bi preprosto bil prikazan kot 'Party Animal'."
+msgstr "Prikažite pripone predstavnih datotek. Na primer 'Party Anima.mp3' bi preprosto bil prikazan kot 'Party Animal'."
+
+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 "Prezrite določene ključne besede med razvrščanjem. Na primer 'The Simpsons' bi bil preprosto razvrščen kot 'Simpsons'. Več informacij o nastavitvi ključnih besed najdete na 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 "Dovolite brisanje in preimenovanje datotek s pomočjo uporabniškega vmesnika, preko vsebinskega menija (na primer na tipkovnici pritisnite tipko C za prikaz vsebinskega menija)."
+
+msgctxt "#36126"
+msgid "Show the add source button from root sections of the user interface."
+msgstr "Prikažite gumb Dodaj vir iz koreninskih odsekov uporabniškega vmesnika."
 
 msgctxt "#36127"
 msgid "Show hidden files and directories."
-msgstr "Prikaži skrite datoteke in mape."
+msgstr "Prikažite skrite datoteke in mape."
 
 msgctxt "#36128"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36129"
+msgid "Set the amount of idle time required before displaying the screensaver."
+msgstr "Nastavite potreben neaktivni čas pred prikazom ohranjevalnika zaslona."
+
+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 "Izberite ohranjevalnik zaslona. XBMC bo samodejno uporabil ohranjevalnik zaslona 'Zatemnitev' od prekinitvi predvajanja ali pri prikazu pogovornega okna."
+
+msgctxt "#36131"
+msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
+msgstr "Spremenite nastavitve specifične za ohranjevalnik zaslona. Možnosti, ki so na voljo, so odvisne od uporabljenega ohranjevalnika zaslona."
+
 msgctxt "#36132"
 msgid "Preview the selected screensaver."
-msgstr "Predogled izbranega ohranjevalnika."
+msgstr "Predogled izbranega ohranjevalnika zaslona."
+
+msgctxt "#36133"
+msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver."
+msgstr "V primeru, da poslušate glasbo, bo XBMC prikazal izbrano vizualizacijo namesto ohranjevalnika zaslona."
+
+msgctxt "#36134"
+msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode."
+msgstr "Zatemnite zaslon, ko je predvajanje prekinjeno. Ne velja za \"Zatemnitev\" kot ohranjevalnik zaslona."
 
 msgctxt "#36135"
 msgid "No info available yet."
@@ -10861,10 +11089,46 @@ msgctxt "#36140"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36141"
+msgid "Show plot information for unwatched media in the Video Library."
+msgstr "Prikaži povzetek neogledanih vsebin iz knjižnice videa."
+
 msgctxt "#36142"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36143"
+msgid "Get thumbnails for actors when scanning media."
+msgstr "Pridobite sličice igralcev ob pregledovanju vsebin."
+
+msgctxt "#36144"
+msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'."
+msgstr "Odstranite vozlišče za sezone TV serij, preklaplja med 'V primeru da je samo ena sezona' (privzeto), 'Vedno' in 'nikoli'."
+
+msgctxt "#36145"
+msgid "Group movies into 'Movie sets' when browsing the movie library."
+msgstr "Združi filme v 'Zbirke filmov' ob brskanju knjižnice Filmi."
+
+msgctxt "#36146"
+msgid "Check for new media files on XBMC startup."
+msgstr "Preglejte za nove vsebine ob zagonu XBMC-ja."
+
+msgctxt "#36147"
+msgid "Hide the library scanning progress bar during scans."
+msgstr "Skrij prikaz poteka pregledovanja knjižnice med pregledovanjem."
+
+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 "Odstranite posnetke iz knjižnice, ki jih ni mogoče najdi (torej so bili preimenovani, izbrisani ali pa na odstranljivi napravi, ki trenutno ni priključena)."
+
+msgctxt "#36149"
+msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Izvozi bazo knjižnice za Video v XML datoteke. To bo po izbiri prepisalo vaše trenutne XML datoteke."
+
+msgctxt "#36150"
+msgid "Import a XML file into the Video Library database."
+msgstr "Uvozi datoteko XML v podatkovno bazo knjižnice za Video."
+
 msgctxt "#36151"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -10873,6 +11137,10 @@ msgctxt "#36152"
 msgid "Enable automatic playback of the next file in the list of the selected item."
 msgstr "Omogočite samodejno predvajanje naslednje datoteke v seznamu izbranih predmetov."
 
+msgctxt "#36153"
+msgid "Adjust the method used to process and display video."
+msgstr "Prilagodi metodo uporabljeno za procesiranje in prikaz videa."
+
 msgctxt "#36154"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -10913,6 +11181,26 @@ msgctxt "#36163"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36164"
+msgid "Select when the refresh rate adjustments should take place."
+msgstr "Izberite, kdaj naj se uveljavijo nastavitve stopnje osveževanja."
+
+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 "Prekinite predvajanje za kratek čas ob spremembi stopnje osveževanja. Aktiviranje samodejno nastavi stopnjo osveževanja, ki se najbolje ujema s predvajanim videom. To omogoči bolj tekoče predvajanje posnetka, saj je video lahko posnet pri različnih hitrostih sličic, ki se morajo pravilno ujemati s stopnjo osveževanja zaslona, da so lahko prikazane tekoče."
+
+msgctxt "#36166"
+msgid "Synchronise the video to the refresh rate of the monitor."
+msgstr "Stopnji osveževanja zaslona prilagodite posnetek."
+
+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 "Dovolite predvajalniku videa delno ignoriranje razmerja slike, da zapolni čim večje območje zaslona s sliko."
+
+msgctxt "#36171"
+msgid "Select the zoom level that 4:3 videos are shown on widescreen displays."
+msgstr "Izberite način prikaza vsebin v razmerju 4:3 na širokih zaslonih."
+
 msgctxt "#36173"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -10923,20 +11211,32 @@ msgstr "Omogočite teletekst ob gledanju televizije v živo."
 
 msgctxt "#36175"
 msgid "Scale Teletext to 4:3 ratio."
-msgstr "Raztegni Teletext na razmerje slike 4:3."
+msgstr "Prikažite teletekst v razmerju slike 4:3."
 
 msgctxt "#36176"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36177"
+msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
+msgstr "Preklapljajte med Izberi, Predvajaj (privzeto), Nadaljuj in Prikaži informacije. Izberi bo izbralo predmet, npr. odprlo mapo v načinu datotek. Nadaljuj bo samodejno nadaljevalo predvajanje posnetka z zadnjega položaja, tudi če se ponovno zagnali sistem."
+
 msgctxt "#36178"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36179"
+msgid "When a file is scanned into the library it will display the metadata title instead of the file name."
+msgstr "Kadar je datoteka skenirana v knjižnico bo prikazan naziv iz meta podatkov namesto imena datoteke."
+
 msgctxt "#36181"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36182"
+msgid "Enables direct playback of videos that are in folders, without having to open those folders first, as well as displaying multi-part video files as single items in non-library views."
+msgstr "Omogoči direktno predvajanje posnetkov, ki so v mapah, brez da bi bilo potrebno te mape prej odpreti, ter prikaže posnetke v več delih kot enega v pogledih izven knjižnice."
+
 msgctxt "#36184"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -10967,7 +11267,7 @@ msgstr "Informacije še niso na voljo."
 
 msgctxt "#36191"
 msgid "Set a custom directory for your subtitles. This can be a file share."
-msgstr "Določi mapo za podnapise. Lahko je mapa iz skupne rabe."
+msgstr "Določite mapo za podnapise. Lahko je mapa v skupni rabi."
 
 msgctxt "#36192"
 msgid "Location of subtitles on the screen."
@@ -10979,7 +11279,7 @@ msgstr "Informacije še niso na voljo."
 
 msgctxt "#36194"
 msgid "Autorun DVD video when inserted in drive."
-msgstr "Samodejni zagon DVD videa ko je vstavljen medij v pogon."
+msgstr "Samodejno predvajajte DVD, ko ga vstavite v pogon."
 
 msgctxt "#36195"
 msgid "Force a region for DVD playback."
@@ -10987,12 +11287,24 @@ msgstr "Vsili regijo za predvajanje DVD videa."
 
 msgctxt "#36196"
 msgid "Attempt to skip 'unskippable' introductions before DVD menu."
-msgstr "Poskusi preskočiti uvod pred DVD menujem"
+msgstr "Poskusite preskočiti 'obvezen' uvod pred menijem DVD-ja."
 
 msgctxt "#36197"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36198"
+msgid "Select the default movie information source. See the Add-ons Manager for options."
+msgstr "Izberite privzeti vir informacij o filmih. Več možnosti najdete v upravljalniku dodatkov."
+
+msgctxt "#36199"
+msgid "Select the default TV show information source. See the Add-ons Manager for options."
+msgstr "Izberite privzeti vir informacij o TV serijah. Več možnosti najdete v upravljalniku dodatkov."
+
+msgctxt "#36200"
+msgid "Default scraper used for adding music videos to your library."
+msgstr "Privzeto strgalo za dodajanje videospotov v knjižnico."
+
 msgctxt "#36201"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11001,9 +11313,29 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+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 "Uvozite skupine programov iz hrbtenic PVR (če je podprto). To bo izbrisalo uporabniško ustvarjene skupine, če se ne nahajajo v hrbtenici."
+
 msgctxt "#36205"
 msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels."
-msgstr "Razvrsti programe glede na njihovo številko na strežniku, vendar uporabi XBMC-jevo lastno številčenje."
+msgstr "Razvrstite programe glede na njihovo številko na strežniku, vendar uporabite XBMC-jevo lastno številčenje."
+
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "Uporabite številčenje iz hrbtenice namesto ročnega nastavljanja preko XBMC-ja."
+
+msgctxt "#36207"
+msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
+msgstr "Odprite upravljalnika programov, ki omogoča urejanje zaporedja programov, ime programa, ikono, itd."
+
+msgctxt "#36208"
+msgid "Instruct the backend to search for channels (if supported)."
+msgstr "Podučite hrbtenico za iskanje kanalov (v primeru da obstajajo)."
+
+msgctxt "#36209"
+msgid "Delete channel/EPG database and reimport the data from the backend afterwards."
+msgstr "Izbrišite bazo programov/EPG in ponovno uvozite podatke iz hrbtenic."
 
 msgctxt "#36210"
 msgid "No info available yet."
@@ -11041,14 +11373,50 @@ msgctxt "#36218"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36219"
+msgid "Default EPG window to show. Defaults to Timeline."
+msgstr "Privzeto prikazano okno programskega vodiča. Privzeta vrednost je časovnica."
+
+msgctxt "#36221"
+msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
+msgstr "Čas med posameznimi uvozi programskega vodiča iz hrbtenic. Privzeta vrednost je 120 minut."
+
+msgctxt "#36222"
+msgid "Do not import EPG data while playing TV to minimise CPU usage."
+msgstr "Ne uvažajte programskega vodiča med predvajanjem TV in s tem zmanjšajte porabo CPU-ja."
+
+msgctxt "#36223"
+msgid "By default, EPG data is stored in a local database to speed up importing when XBMC is restarted."
+msgstr "Privzeto se programski vodič shranjuje v krajevni bazi, kar pohitri uvoz ob zagonu XBMC-ja."
+
+msgctxt "#36224"
+msgid "Hide \"no information available\" labels when no EPG data can be retrieved for a channel."
+msgstr "Skrijte oznako \"Informacije niso na voljo\", ko programskega vodiča za izbran program ni na voljo."
+
+msgctxt "#36225"
+msgid "Delete the EPG database in xbmc and reimport the data afterwards from the backend."
+msgstr "Izbrišite bazo EPG v XBMC-ju in ponovno uvozite podatke iz hrbtenic."
+
 msgctxt "#36226"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Prikažite video izbranega programa v manjšem okvirju namesto v celozaslonskem načinu."
+
+msgctxt "#36228"
+msgid "Show the last viewed channel if switching to live tv."
+msgstr "Prikažite zadnji gledan program ob preklopu na TV v živo."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+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 "Pritisk na številčne gumbe v celozaslonskem načinu bo samodejno preklopil na program s to številko po 1 sekundi."
+
 msgctxt "#36232"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11057,14 +11425,46 @@ msgctxt "#36233"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+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 snemanja ob pritisku na gumb za snemanje ali ob ustvarjanju novega ročnega časovnika. Privzeta vrednost je 180 minut."
+
+msgctxt "#36239"
+msgid "Display a notification when timers are added, finished or removed by the backend."
+msgstr "Prikažite obvestilo, ko so časovniki dodani, končani ali zaključeni s strani hrbtenice."
+
 msgctxt "#36240"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+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 "Zaženite \"ukaz bujenja\" spodaj, ko se XBMC zapre ali gre v mirovanje. Kot parameter je podan časovni žig naslednjega snemanja."
+
+msgctxt "#36242"
+msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes."
+msgstr "Ukaz ne bo zagnan, če se bo v tem obdobju začelo snemanje. Privzeta vrednost je 15 minut."
+
+msgctxt "#36243"
+msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'."
+msgstr "Ukaz, ki se bo zagnal. Privzeta vrednost je '/usr/bin/setwakeup.sh'."
+
+msgctxt "#36245"
+msgid "Execute the wakeup command every day at the given time."
+msgstr "Zaženite ukaz bujenja vsak dan ob določenem času."
+
+msgctxt "#36246"
+msgid "When to execute the daily wakeup command."
+msgstr "Določite, kdaj zagnati dnevni ukaz bujenja."
+
 msgctxt "#36247"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36249"
+msgid "Enter a new pin code to unlock parental locked channels."
+msgstr "Vnesite novo PIN kodo za odklep kanalov s starševkim nadzorom."
+
 msgctxt "#36251"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11081,14 +11481,86 @@ msgctxt "#36254"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36256"
+msgid "Automatically fetch album and artist information via scrapers during scan."
+msgstr "Med pregledovanjem samodejno prenesite informacije o albumu in izvajalcu s ponudnikov."
+
+msgctxt "#36257"
+msgid "Select the default album information source"
+msgstr "Izberite privzeti vir za podatke o albumu"
+
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Izberite privzeti vir za informacije o izvajalcih. Več možnosti najdete v upravljalniku dodatkov."
+
+msgctxt "#36259"
+msgid "Check for new and removed media files on XBMC startup."
+msgstr "Preglejte za nove in odstranjene medijske datoteke ob zagonu XBMC-ja."
+
 msgctxt "#36260"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36261"
+msgid "Path where taken screenshots will be stored."
+msgstr "Pot, kjer bodo shranjeni posnetki zaslona."
+
+msgctxt "#36262"
+msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files."
+msgstr "Izvozite bazo knjižnice za Glasbo v XML datoteke. To bo po izbiri prepisalo vaše trenutne XML datoteke."
+
+msgctxt "#36263"
+msgid "Import a XML file into the Music Library database."
+msgstr "Uvozi datoteko XML v podatkovno bazo knjižnice Glasba."
+
 msgctxt "#36264"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36265"
+msgid "XBMC automatically plays the next item in the current folder. For example, in Files View: After a track has been played, XBMC would automatically play the next track in the same folder."
+msgstr "XBMC samodejno predvaja naslednjo datoteko v trenutni mapi. Na primer v pogledu datotek: Ko pesem zaključi s predvajanjem, bo XBMC samodejno začel predvajanje naslednje pesmi v tej isti mapi."
+
+msgctxt "#36266"
+msgid "When songs are added to a playlist they are queued instead of playback starting immediately."
+msgstr "Pesmi se ob dodajanju v seznam predvajanja postavijo v vrsto namesto, da se takoj začnejo predvajati."
+
+msgctxt "#36268"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Privzeta vrednost po standardih je 89 dB. Bodite pazljivi pri spreminjanju."
+
+msgctxt "#36269"
+msgid "Default is 89dB per standard. Change with caution."
+msgstr "Privzeta vrednost po standardih je 89 dB. Bodite pazljivi pri spreminjanju."
+
+msgctxt "#36270"
+msgid "Reduce the volume of the file if clipping is likely to occur."
+msgstr "Zmanjšaj glasnost v primeru da je mogoče striženje."
+
+msgctxt "#36271"
+msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds."
+msgstr "Gladko prehajanje iz enega zvočnega posnetka v drugega. Lahko nastavite vrednost prekrivanja od 1-15 sekund."
+
+msgctxt "#36272"
+msgid "Allow crassfading to occur when both tracks are from the same album."
+msgstr "Dovolite navzkrižni prehod iz ene pesmi v drugo, če sta obe iz istega albuma."
+
+msgctxt "#36273"
+msgid "Select the visualisation that will be displayed while listening to music."
+msgstr "Izberite vizualizacijo ki se bo prikazovala ob predvajanju glasbe."
+
+msgctxt "#36274"
+msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network."
+msgstr "Preberite informacije v značkah glasbenih datotek. Za velike mape to lahko upočasni branje, posebej preko omrežja."
+
+msgctxt "#36275"
+msgid "Control the way that the names of songs are displayed in the User Interface. In order to function properly, ID3 tags need to be enabled."
+msgstr "Določite, kako naj se imena pesmi prikazujejo na zaslonu. Da funkcija deluje pravilno, morajo biti omogočene značke ID3."
+
+msgctxt "#36276"
+msgid "Used for the information on the right-hand side of the UI. It is commonly used to display the length of tracks."
+msgstr "Uporablja se za informacije na desni strani grafičnega vmesnika. To se običajno uporablja za prikaz dolžine skladbe."
+
 msgctxt "#36277"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11105,18 +11577,54 @@ msgctxt "#36280"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36281"
+msgid "XBMC will search for thumbs on remote shares and optical media. This can often slow down the listing of network folders."
+msgstr "XBMC bo poiskal sličice na mapah v skupni rabi in optičnih medijih. To lahko upočasni brskanje omrežnih map."
+
 msgctxt "#36282"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36283"
+msgid "Autorun CDs when inserted in drive."
+msgstr "Samodejno predvajajte CD-je, ko jih vstavite v pogon."
+
+msgctxt "#36284"
+msgid "Read the information belonging to an audio CD from an internet database."
+msgstr "Preberite informacije, ki pripadajo avdio CD-ju iz internetne baze podatkov."
+
+msgctxt "#36285"
+msgid "Select the location on your hard drive where ripped tracks will be saved to."
+msgstr "Izberite lokacijo na vašem trdem disku, kamor bodo shranjeni zajeti posnetki."
+
+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 "Oznake: [B]%N[/B]: PesemŠt., [B]%S[/B]: DiskŠt., [B]%A[/B]: Izvajalec, [B]%T[/B]: Naslov, [B]%B[/B]: Album, [B]%G[/B]: Zvrst, [B]%Y[/B]: Leto, [B]%F[/B]: ImeDatoteke, [B]%D[/B]: Trajanje, [B]%J[/B]: Datum, [B]%R[/B]: Ocena, [B]%I[/B]: VelikostDatoteke."
+
+msgctxt "#36287"
+msgid "Select which audio encoder to use when ripping."
+msgstr "Izberite zvočni enkoder za zajemanje posnetkov."
+
+msgctxt "#36288"
+msgid "Select which quality you want to rip your files."
+msgstr "Izberite kvaliteto zajemanja posnetkov."
+
+msgctxt "#36290"
+msgid "For FLAC define compression level, default 5"
+msgstr "Za FLAC določi stopnjo kompresije, privzeto je 5"
+
 msgctxt "#36291"
 msgid "Auto eject disc after rip is complete."
-msgstr "Samodejno izvrzi disk po končani pretvorbi."
+msgstr "Samodejno izvrzite ploščo po končanem zajemanju."
 
 msgctxt "#36292"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36293"
+msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics."
+msgstr "Ob predvajanju katerikoli glasbene datoteke bo XBMC preveril za pripadajočo .cdg datoteko in prikazal pripadajočo grafiko."
+
 msgctxt "#36294"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11133,6 +11641,10 @@ msgctxt "#36297"
 msgid "Select the font colour used during karoake."
 msgstr "Izberite barvo pisave, ki bo uporabljena med karaokami."
 
+msgctxt "#36298"
+msgid "Select the character set used during karoake."
+msgstr "Izberite nabor znakov, ki bo uporabljena med karaokami."
+
 msgctxt "#36299"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11161,6 +11673,22 @@ msgctxt "#36305"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36306"
+msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed."
+msgstr "Če informacije EXIF obstajajo (datum, čas, uporabljen fotoaparad, itd.), bodo prikazane."
+
+msgctxt "#36307"
+msgid "Automatically generate picture thumbnails when entering picture folder."
+msgstr "Samodejno generirajte sličice fotografij ob vstopu v mapo s slikami."
+
+msgctxt "#36308"
+msgid "Pictures will automatically rotate according to information in the EXIF tag, if found."
+msgstr "Slike se bodo samodejno zavrtele glede na informacijo EXIF, če bo na voljo."
+
+msgctxt "#36309"
+msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities."
+msgstr "Prikaži videoposnetke v seznamih slik, saj večina današnjih digitalnih fotoaparatov lahko snema video."
+
 msgctxt "#36310"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11169,6 +11697,18 @@ msgctxt "#36311"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36312"
+msgid "Select the amount of time that each image is displayed in a slideshow."
+msgstr "Izberite čas prikaza vsake slike v projekciji slik."
+
+msgctxt "#36313"
+msgid "Images in a slideshow will pan and zoom while displayed."
+msgstr "Slike se bodo med projekcijo premikale in približevale."
+
+msgctxt "#36314"
+msgid "View slideshow images in a random order."
+msgstr "Oglejte si projekcijo slik v naključnem vrstnem redu."
+
 msgctxt "#36315"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11177,6 +11717,14 @@ msgctxt "#36316"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36317"
+msgid "Select up to three locations for which the weather can be displayed."
+msgstr "Izberite do tri lokacije za prikaz vremena."
+
+msgctxt "#36318"
+msgid "Specify the default weather information source. See the Add-ons Manager for options."
+msgstr "Določite privzeti vir informacij o vremenu. Več možnosti najdete v upravljalniku dodatkov."
+
 msgctxt "#36319"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11185,18 +11733,38 @@ msgctxt "#36320"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36321"
+msgid "Display name of the XBMC installation when using various network services."
+msgstr "Prikaži ime instalacije XBMC ob uporabi različnih omrežnih storitev."
+
 msgctxt "#36322"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36323"
+msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
+msgstr "Omogočite strežnik UPnP. To bo omogočilo pretakanje vsebin kateremukoli odjemalcu UPnP."
+
+msgctxt "#36324"
+msgid "When a manual or automatical library update occurs, notify UPnP clients."
+msgstr "Obvestite odjemalce UPnP ob vsaki posodobitvi knjižnice, tako ročni kot samodejni."
+
 msgctxt "#36325"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36326"
+msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
+msgstr "Omogočite odjemalec UPnP. To bo omogočilo pretakanja vsebin s kateregakoli strežnika UPnP, ki omogoča upravljanje."
+
 msgctxt "#36327"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36328"
+msgid "Enable remote users to control XBMC through the built-in webserver."
+msgstr "Omogočite oddaljene uporabnike za nadzor XBMC prek vgrajenega spletnega strežnika."
+
 msgctxt "#36329"
 msgid "Define the webserver port."
 msgstr "Določite vrata spletnega strežnika."
@@ -11209,10 +11777,18 @@ msgctxt "#36331"
 msgid "Define webserver password."
 msgstr "Določite geslo spletnega strežnika."
 
+msgctxt "#36332"
+msgid "Select between web interfaces installed via the Add-on Manager."
+msgstr "Izberite enega izmed spletnih vmesnikov, nameščenih preko upravljalnika dodatkov."
+
 msgctxt "#36333"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36334"
+msgid "Allow programs on this computer to control XBMC via the Web Interface or the JSON-RPC interface protocol."
+msgstr "Dovolite programom na tem računalniku, da upravljajo z XBMC-jem preko spletnega vmesnika ali protokola JSON-RPC."
+
 msgctxt "#36335"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11225,6 +11801,10 @@ msgctxt "#36337"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36338"
+msgid "Allow programs on the network to control XBMC."
+msgstr "Dovolite programom v omrežju, da upravljajo z XBMC-jem."
+
 msgctxt "#36339"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11269,6 +11849,10 @@ msgctxt "#36349"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36350"
+msgid "Automatically send 'Wake-On-Lan' to server(s) right before trying to access shared files or services."
+msgstr "Samodejno pošljite signal 'Wake-On-Lan' strežniku(om) tik pred dostopom do datotek v skupni rabi in storitev."
+
 msgctxt "#36351"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11281,6 +11865,18 @@ msgctxt "#36353"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36355"
+msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out."
+msgstr "V več zaslonski konfiguraciji, so zasloni, kjer se ne prikazuje XBMC zatemnjeni."
+
+msgctxt "#36356"
+msgid "Eliminate vertical tearing."
+msgstr "Odpravi vertikalno solzenje."
+
+msgctxt "#36358"
+msgid "Test patterns for display hardware calibration."
+msgstr "Testni vzorec za umerjanje strojne opreme."
+
 msgctxt "#36359"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11289,6 +11885,10 @@ msgctxt "#36360"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36363"
+msgid "Boost AC3 streams that have been downmixed to 2 channels."
+msgstr "Ojačaj AC3 tokove ki so bili mešani na 2 kanala."
+
 msgctxt "#36365"
 msgid "Select this option if your receiver is capable of decoding AC3 streams."
 msgstr "Izberite to možnost, če vaš sprejemnik podpira dekodiranje sledi AC3."
@@ -11305,6 +11905,14 @@ msgctxt "#36370"
 msgid "Select this option if your receiver is capable of decoding DTS-HD streams."
 msgstr "Izberite to možnost, če vaš sprejemnik podpira dekodiranje sledi DTS-HD."
 
+msgctxt "#36371"
+msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
+msgstr "Izberite napravo, ki se bo uporabila za predvajanje dekodiranega zvoka kot je 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 "Izberite napravo, ki se bo uporabila za predvajanje kodiranih formatov, ki so navedeni spodaj med možnostmi 'sprejemnik podpira'."
+
 msgctxt "#36374"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11313,18 +11921,82 @@ msgctxt "#36375"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36377"
+msgid "Use a mouse or touch screen device to control XBMC. Note: disabling will cause you to lose control over XBMC when no keyboard or remote is present."
+msgstr "Za upravljanje z XBMC-jem uporabite miško ali zaslon na dotik. Opomba: onemogočenje te nastavitve lahko povzroči, da izgubite nadzor nad XBMC-jem, ko ne boste imeli na voljo tipkovnice ali daljinskega upravljalnika."
+
+msgctxt "#36378"
+msgid "Use a joystick to control XBMC."
+msgstr "Uporabite igralno palico za nadzor XBMC-ja."
+
 msgctxt "#36379"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36380"
+msgid "If your internet connection uses a proxy, configure it here."
+msgstr "V primeru, da vaša internetna povezava uporablja proxy, to nastavite tukaj."
+
+msgctxt "#36381"
+msgid "Configure which proxy type is used."
+msgstr "Določite vrsto uporabljenega proxyja."
+
+msgctxt "#36382"
+msgid "Configure the proxy server address."
+msgstr "Določite naslov strežnika proxy."
+
+msgctxt "#36383"
+msgid "Configure the proxy server port."
+msgstr "Določite vrata strežnika proxy."
+
+msgctxt "#36384"
+msgid "Configure the proxy server username."
+msgstr "Določite uporabniško ime strežnika proxy."
+
+msgctxt "#36385"
+msgid "Configure the proxy server password."
+msgstr "Določite geslo strežnika proxy."
+
+msgctxt "#36386"
+msgid "If you have limited bandwidth available, XBMC will try to keep within these limits."
+msgstr "V primeru, da imate omejeno pasovno širino internetneta, bo XBMC poskušal ostati znotraj teh meja."
+
 msgctxt "#36388"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36389"
+msgid "Define how long XBMC should idle before shutting down."
+msgstr "Določite kako dolgo je lahko XBMC nedejaven preden se izklopi."
+
+msgctxt "#36390"
+msgid "Define what action XBMC should do when it has been idle for a long period of time."
+msgstr "Določite dejanje ko je XBMC nedejaven dalj časa."
+
+msgctxt "#36391"
+msgid "Turn debug logging on or off. Useful for troubleshooting."
+msgstr "Vklopite ali izklopite zapisovanje razhroščevanja. Uporabno za odpravljanje težav."
+
 msgctxt "#36392"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36393"
+msgid "Folder used to save screenshots taken within XBMC."
+msgstr "Mapa za shranjevanje namiznih slik, zajetih z XBMC-jem."
+
+msgctxt "#36396"
+msgid "Define the PIN code used for the master lock."
+msgstr "Določite PIN kodo, ki se uporablja za glavni zaklep."
+
+msgctxt "#36397"
+msgid "If enabled, the master lock code is required to unlock XBMC on startup "
+msgstr "Če je omogočeno, se zahteva koda za glavni zaklep za odklepanje XBMC ob zagonu"
+
+msgctxt "#36398"
+msgid "Define the maximum number of retries before XBMC is closed down."
+msgstr "Določite največje število poskusov, preden se XBMC izključi."
+
 msgctxt "#36399"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11393,6 +12065,10 @@ msgctxt "#36415"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36416"
+msgid "Define the Apple remote standard used."
+msgstr "Določite uporabljen standard daljinskega upravljalca Apple."
+
 msgctxt "#36417"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11401,10 +12077,130 @@ msgctxt "#36418"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36419"
+msgid "Define locations used for retrieving weather information."
+msgstr "Določite lokacijo, ki se uporablja za pridobivanje informacij o vremenu."
+
 msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36422"
+msgid "Enable hardware video decode using AMLogic decoder"
+msgstr "Vključi strojno dekodiranje videa z uporabo AMLogic dekoderja"
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Pokaži priročni meni"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Preklopi na program"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Prikaži informacije"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Snemaj"
+
+msgctxt "#36500"
+msgid "Stereoscopic mode (current)"
+msgstr "Stereoskopski način (trenutni)"
+
+msgctxt "#36501"
+msgid "Stereoscopic mode"
+msgstr "Stereoskopki način"
+
+msgctxt "#36502"
+msgid "None"
+msgstr "Brez"
+
+msgctxt "#36503"
+msgid "Over/Under"
+msgstr "Nad / Pod"
+
+msgctxt "#36504"
+msgid "Side by side"
+msgstr "Slika ob sliki"
+
+msgctxt "#36505"
+msgid "Anaglyph Red/Cyan"
+msgstr "Pasivno rdeče/modro"
+
+msgctxt "#36506"
+msgid "Anaglyph Green/Magenta"
+msgstr "Pasivno zeleno/magenta"
+
+msgctxt "#36507"
+msgid "Interlaced"
+msgstr "Prepleteni"
+
+msgctxt "#36508"
+msgid "Hardware Based"
+msgstr "Temelji na strojni opremi"
+
+msgctxt "#36509"
+msgid "Monoscopic - 2D"
+msgstr "Monoskopsko - 2D"
+
+msgctxt "#36520"
+msgid "Playback mode of stereoscopic videos"
+msgstr "Način predvajanja stereoskopskih videov"
+
+msgctxt "#36521"
+msgid "Ask me"
+msgstr "Vprašaj me"
+
+msgctxt "#36522"
+msgid "Use preferred mode"
+msgstr "Uporabi želeni način"
+
+msgctxt "#36524"
+msgid "Preferred mode"
+msgstr "Želeni način"
+
+msgctxt "#36525"
+msgid "Same as movie (autodetect)"
+msgstr "Enako kot film (samodejno)"
+
+msgctxt "#36526"
+msgid "Disable stereoscopic mode when playback is stopped"
+msgstr "Onemogoči stereoskopski način, ko je predvajanje zaustavljeno"
+
+msgctxt "#36527"
+msgid "This video is stereoscopic. Select playback mode"
+msgstr "Ta video je stereoskopski. Izberite način predvajanja"
+
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "Izberite stereoskopski način"
+
+msgctxt "#36529"
+msgid "Mono (2D)"
+msgstr "Mono (2D)"
+
+msgctxt "#36530"
+msgid "Preferred mode"
+msgstr "Želeni način"
+
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "Izberi nadomestni način ..."
+
+msgctxt "#36532"
+msgid "Same as movie"
+msgstr "Isto kot film"
+
+msgctxt "#36535"
+msgid "Stereoscopic mode of video"
+msgstr "Stereoskopski način videa"
+
+msgctxt "#36536"
+msgid "Stereoscopic mode inverted"
+msgstr "Stereoskopski način obrnjen"
+
 msgctxt "#36537"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
@@ -11421,10 +12217,82 @@ msgctxt "#36540"
 msgid "No info available yet."
 msgstr "Informacije še niso na voljo."
 
+msgctxt "#36541"
+msgid "Allows volume control from AirPlay clients."
+msgstr "Dovolite nadzor jakosti zvoka odjemalcev AirPlay."
+
+msgctxt "#36542"
+msgid "Output to both analogue (headphones) and HDMI"
+msgstr "Izhod tako analogno (slušalke) kot preko HDMI"
+
 msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Omogočite strojno dekodiranje video datotek."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Globina stereoskopskih podnapisov"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Nastavi vizualno globino podnapisov za stereoskopske video posnetke.Višja kot je vrednost, bližje bodo vidni podnapisi."
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Omeji ločljivost grafičnega uporabniškega vmesnika za prihranitev pomnilnika. Ne vpliva na predvajanje videa. Uporabite 1080 za neomejeno. Zahteva ponovni zagon."
+
+msgctxt "#37000"
+msgid "(Visually Impaired)"
+msgstr "(Slabovidni)"
+
+msgctxt "#37001"
+msgid "(Directors Comments)"
+msgstr "(Režiserjev komentar)"
+
+msgctxt "#37002"
+msgid "(Directors Comments 2)"
+msgstr "(Režiserjev komentar 2)"
+
+msgctxt "#37011"
+msgid "(CC)"
+msgstr "(CC)"
+
+msgctxt "#37012"
+msgid "(Forced)"
+msgstr "(Vsiljeni)"
+
+msgctxt "#37013"
+msgid "(Directors Comments)"
+msgstr "(Režiserjev komentar)"
+
+msgctxt "#37014"
+msgid "Last used profile"
+msgstr "Nazadnje uporabljen profil"
+
+msgctxt "#37015"
+msgid "Browse Into"
+msgstr "Brskaj v"
+
 msgctxt "#37016"
 msgid "Select this option if your receiver is capable of decoding E-AC3 streams."
 msgstr "Izberite to možnost, če vaš sprejemnik podpira dekodiranje sledi E-AC3."
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "Dvojni avdio izhod"
+
+msgctxt "#37018"
+msgid "Boost centre channel when downmixing"
+msgstr "Ojačaj glasnost sredinskega kanala pri združevanju kanalov"
+
+msgctxt "#37019"
+msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
+msgstr "Omogoči sistemske tipke kot so printscreen, atl-tab in tipke za zvok v celozaslonskem načinu"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Omogoči grafično podobo z višjo barvno globino"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Nastavi omejitev ločljivosti grafičnega uporabniškega vmesnika"
index bed0e1d..9b64b8a 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Selecciona el directorio destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Salida estéreo a todos los parlantes"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canales"
@@ -1645,10 +1641,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Apagado"
@@ -5505,10 +5497,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Grabaciones de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Directorio por defecto para vistas en miniatura de PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canales"
@@ -8269,10 +8257,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Eliminar recurso compartido"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Directorio de los subtítulos"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Directorio de los subtítulos de películas y otros"
@@ -8633,10 +8617,6 @@ msgctxt "#21457"
 msgid "Watched episode count"
 msgstr "Contador de episodios vistos"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicación de los subtítulos"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fijo"
@@ -9461,6 +9441,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "No se encuentran algunos archivos del skin"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduzca la cadena de búsqueda"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificaciones"
@@ -9829,10 +9813,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuración de altavoces"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10120,3 +10100,11 @@ msgstr "Versión de interfaz libCEC no soportada. %x es menor que la versión so
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Carpeta de items"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Cambiar al canal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Grabar"
index 80b7d3f..09ea4b0 100644 (file)
@@ -585,6 +585,10 @@ msgctxt "#170"
 msgid "Adjust display refresh rate to match video"
 msgstr "Ajustar frecuencia de refresco de pantalla al video"
 
+msgctxt "#171"
+msgid "Sort title"
+msgstr "Ordenar título"
+
 msgctxt "#172"
 msgid "Release date"
 msgstr "Fecha de publicación"
@@ -865,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleccione carpeta destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Salida estéreo a todos los altavoces"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canales"
@@ -1597,6 +1597,10 @@ msgctxt "#447"
 msgid "Autorun media"
 msgstr "Reproducir automáticamente"
 
+msgctxt "#448"
+msgid "Dolby Digital Plus (E-AC3) capable receiver"
+msgstr "Receptor Dolby Digital (AC3) compatible"
+
 msgctxt "#449"
 msgid "Enabled"
 msgstr "Activado"
@@ -1681,10 +1685,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Apagado"
@@ -2253,6 +2253,14 @@ msgctxt "#636"
 msgid "Custom"
 msgstr "Personalizado"
 
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "Ajustes de volumen ReplayGain"
+
 msgctxt "#639"
 msgid "Use track levels"
 msgstr "Usar volumen de la pista"
@@ -2261,6 +2269,18 @@ msgctxt "#640"
 msgid "Use album levels"
 msgstr "Usar volumen del álbum"
 
+msgctxt "#641"
+msgid "PreAmp Level - ReplayGained files"
+msgstr "Nivel de Preamplificacion - Archivos con ReplayGain"
+
+msgctxt "#642"
+msgid "PreAmp Level - Non ReplayGained files"
+msgstr "Nivel de Preamplificacion - Archivos sin ReplayGain"
+
+msgctxt "#643"
+msgid "Avoid clipping on ReplayGained files"
+msgstr "Evitar distorsión en archivos con ReplayGain"
+
 msgctxt "#644"
 msgid "Crop black bars"
 msgstr "Eliminar bordes negros"
@@ -2871,15 +2891,15 @@ msgstr "Favoritos"
 
 msgctxt "#1037"
 msgid "Video Add-ons"
-msgstr "Addons de Vídeo"
+msgstr "Complementos de Vídeo"
 
 msgctxt "#1038"
 msgid "Music Add-ons"
-msgstr "Addons de Música"
+msgstr "Complementos de Música"
 
 msgctxt "#1039"
 msgid "Picture Add-ons"
-msgstr "Addons de Imágenes"
+msgstr "Complementos de Imágenes"
 
 msgctxt "#1040"
 msgid "Loading directory"
@@ -2895,7 +2915,7 @@ msgstr "%i de %i elementos obtenidos"
 
 msgctxt "#1043"
 msgid "Program Add-ons"
-msgstr "Addons de Aplicaciones"
+msgstr "Complementos de Aplicaciones"
 
 msgctxt "#1045"
 msgid "Add-on settings"
@@ -3465,6 +3485,10 @@ msgctxt "#10037"
 msgid "Standard"
 msgstr "Estándar"
 
+msgctxt "#10040"
+msgid "Add-on browser"
+msgstr "Navegador de complementos"
+
 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?"
@@ -3481,6 +3505,10 @@ msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Cuadro de diálogo Sí/No"
 
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "Diálogo de Progreso"
+
 msgctxt "#10126"
 msgid "File browser"
 msgstr "Navegador de Archivos"
@@ -3621,10 +3649,18 @@ msgctxt "#10524"
 msgid "Movie info"
 msgstr "Infor de película"
 
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "Seleccionar Dialogo"
+
 msgctxt "#12001"
 msgid "Music/Info"
 msgstr "Música/info"
 
+msgctxt "#12002"
+msgid "Dialogue OK"
+msgstr "Diálogo Bien \"OK\""
+
 msgctxt "#12003"
 msgid "Videos/Info"
 msgstr "Vídeos/Info"
@@ -3641,6 +3677,10 @@ msgctxt "#12006"
 msgid "Audio visualisation"
 msgstr "Visualización de audio"
 
+msgctxt "#12008"
+msgid "File stacking dialogue"
+msgstr " Diálogo de apilado de archivos"
+
 msgctxt "#12009"
 msgid "Rebuild index..."
 msgstr "Reconstruir índice..."
@@ -4137,6 +4177,10 @@ msgctxt "#13121"
 msgid "VDPAU HQ Upscaling level"
 msgstr "Nivel de reescalado HQ VDPAU"
 
+msgctxt "#13122"
+msgid "VDPAU Studio level colour conversion"
+msgstr "Conversión de color VDPAU con calidad de estudio"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "Blanquear otras pantallas"
@@ -4189,6 +4233,10 @@ msgctxt "#13161"
 msgid "Primary DNS"
 msgstr "DNS Primario"
 
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "Fallo en inicialización"
+
 msgctxt "#13170"
 msgid "Never"
 msgstr "Nunca"
@@ -4649,10 +4697,22 @@ msgctxt "#13388"
 msgid "Preset"
 msgstr "Ajustes Predeterminados"
 
+msgctxt "#13389"
+msgid "There are no presets available\nfor this visualisation"
+msgstr "No hay plantillas predeterminadas\ndisponibles para esta visualización"
+
+msgctxt "#13390"
+msgid "There are no settings available\nfor this visualisation"
+msgstr "No hay ajustes disponibles\npara esta visualización"
+
 msgctxt "#13391"
 msgid "Eject/Load"
 msgstr "Expulsar/Cargar"
 
+msgctxt "#13392"
+msgid "Use visualisation if playing audio"
+msgstr "Usar visualización mientras se reproduce sonido"
+
 msgctxt "#13393"
 msgid "Calculate size"
 msgstr "Calcular Tamaño"
@@ -4857,6 +4917,10 @@ msgctxt "#13503"
 msgid "Video clock (Resample audio)"
 msgstr "Clock de video (Re-muestreo de audio)"
 
+msgctxt "#13504"
+msgid "Maximum speedup/slowdown amount (%)"
+msgstr "Maximo cantidad (%) de  velocidad rapida/lenta"
+
 msgctxt "#13505"
 msgid "Resample quality"
 msgstr "Calidad de Re-muestreo"
@@ -5049,6 +5113,10 @@ msgctxt "#14024"
 msgid "Enter the nearest large town"
 msgstr "Introduzca la ciudad grande más cercana"
 
+msgctxt "#14025"
+msgid "Video/Audio/DVD cache - Hard disk"
+msgstr "Cache de Video/Audio/DVD  - Discoduro"
+
 msgctxt "#14026"
 msgid "Video cache - DVD-ROM"
 msgstr "Caché de vídeo - DVD-ROM"
@@ -5393,6 +5461,10 @@ msgctxt "#15213"
 msgid "Play using..."
 msgstr "Reproducir Usando..."
 
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "Usar sincronización A/V suavizada"
+
 msgctxt "#15215"
 msgid "Hide file names in thumbs view"
 msgstr "Ocultar nombres de fichero en vista de miniaturas"
@@ -5689,6 +5761,10 @@ msgctxt "#16314"
 msgid "Inverse Telecine"
 msgstr "Telecine inverso"
 
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Lanczos3 optimizado"
+
 msgctxt "#16316"
 msgid "Auto"
 msgstr "Auto"
@@ -5717,6 +5793,10 @@ msgctxt "#16322"
 msgid "Spline36"
 msgstr "Spline36"
 
+msgctxt "#16323"
+msgid "Spline36 optimised"
+msgstr "Spline36 optimisado"
+
 msgctxt "#16324"
 msgid "Software Blend"
 msgstr "Software Blend"
@@ -5817,10 +5897,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Grabaciones de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Carpeta predeterminada para miniaturas de PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canales"
@@ -6757,6 +6833,10 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Todas las grabaciones"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "No se han encontrado Complementos PVR"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Usted necesita un sintonizador, software, y un"
@@ -7429,6 +7509,14 @@ msgctxt "#20085"
 msgid "Show system info"
 msgstr "Mostrar info de sistema"
 
+msgctxt "#20086"
+msgid "Show available disk space C: E: F:"
+msgstr "Mostrar espacio disponible en C: E: F:"
+
+msgctxt "#20087"
+msgid "Show available disk space E: F: G:"
+msgstr "Mostrar espacio disponible en E: F: G:"
+
 msgctxt "#20088"
 msgid "Weather info"
 msgstr "Información meteorológica"
@@ -8649,10 +8737,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Eliminar Compartición"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Carpeta de subtítulos"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Carpeta de subtítulos de películas y otros"
@@ -9021,10 +9105,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mezclado"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicación de subtitulos"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fijo"
@@ -9587,7 +9667,7 @@ msgstr "Add-on"
 
 msgctxt "#24001"
 msgid "Add-ons"
-msgstr "Add-ons"
+msgstr "Complementos"
 
 msgctxt "#24002"
 msgid "Add-on options"
@@ -9691,11 +9771,11 @@ msgstr "Error loading settings"
 
 msgctxt "#24032"
 msgid "All Add-ons"
-msgstr "All Add-ons"
+msgstr "Todos los Complementos"
 
 msgctxt "#24033"
 msgid "Get Add-ons"
-msgstr "Get Add-ons"
+msgstr "Obtener Complementos"
 
 msgctxt "#24034"
 msgid "Check for updates"
@@ -9719,7 +9799,7 @@ msgstr "Install"
 
 msgctxt "#24039"
 msgid "Disabled Add-ons"
-msgstr "Disabled Add-ons"
+msgstr "Deshabilitar Complementos"
 
 msgctxt "#24040"
 msgid "(Clear the current setting)"
@@ -9747,7 +9827,7 @@ msgstr "Volver a versión anterior"
 
 msgctxt "#24050"
 msgid "Available Add-ons"
-msgstr "Available Add-ons"
+msgstr "Complementos Disponibles"
 
 msgctxt "#24051"
 msgid "Version:"
@@ -9779,7 +9859,7 @@ msgstr "Hay disponible una actualización del Add-on!"
 
 msgctxt "#24062"
 msgid "Enabled Add-ons"
-msgstr "Add-ons activados"
+msgstr "Complementos Habilitados"
 
 msgctxt "#24063"
 msgid "Auto update"
@@ -9799,7 +9879,7 @@ msgstr "Cancelar descarga de Add-on?"
 
 msgctxt "#24067"
 msgid "Currently downloading Add-ons"
-msgstr "Add-ons siendo descargados"
+msgstr "Complementos  actualmente Descargandose"
 
 msgctxt "#24068"
 msgid "Update available"
@@ -9885,6 +9965,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "A la mascara le faltan algunos archivos"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduzca la cadena de búsqueda"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificaciones"
@@ -10265,10 +10349,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuración de parlantes"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10505,6 +10585,10 @@ msgctxt "#36011"
 msgid "Could not detect the CEC com port. Set it up manually."
 msgstr "No se pudo detectar puerto CEC. Configurelo manualmente."
 
+msgctxt "#36012"
+msgid "Could not initialise the CEC adaptor. Please check your settings."
+msgstr "No se pudo inicializar el adaptador CEC. favor de revisar sus ajustes."
+
 msgctxt "#36015"
 msgid "HDMI port number"
 msgstr "puerto HDMI"
@@ -10513,6 +10597,10 @@ msgctxt "#36016"
 msgid "Connected"
 msgstr "Connectado"
 
+msgctxt "#36017"
+msgid "Could not initialise the CEC adaptor: libCEC was not found on your system."
+msgstr "No se puede inicializar el adaptador CEC: libCEC no se encuentra en su sistema."
+
 msgctxt "#36018"
 msgid "Use the TV's language setting"
 msgstr "Usar configuración de idioma de la TV"
@@ -10569,6 +10657,10 @@ msgctxt "#36031"
 msgid "This user does not have permissions to open the CEC adaptor"
 msgstr "Este usuario no tiene permisos para abrir el adaptador CEC"
 
+msgctxt "#36032"
+msgid "The port is busy. Only one program can access the CEC adaptor"
+msgstr "El puerto esta ocupado. Solo un programa puede acceder al adaptador CEC"
+
 msgctxt "#36033"
 msgid "Pause playback when switching to another source"
 msgstr "Pausar la reproducción cuando se cambie a otra fuente"
@@ -10721,6 +10813,10 @@ msgctxt "#36129"
 msgid "Set the amount of idle time required before displaying the screensaver."
 msgstr "Establecer cantidad de tiempo de inactividad antes de mostrar el protector de pantalla."
 
+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 "Selecciona el protector de pantalla. XBMC debe forzar el 'brillo' del protector de pantalla cuando la reproduccion de video en pantalla completa este pausada o una caja de dialogo este activa."
+
 msgctxt "#36131"
 msgid "Change specific screensaver settings. The available options are dependent on the screensaver used."
 msgstr "Cambiar ajustes especificos del protector de pantalla. Las opciones disponibles dependen del protector de pantalla usado. "
@@ -10889,6 +10985,10 @@ msgctxt "#36176"
 msgid "No info available yet."
 msgstr "Aun no hay informacion disponible."
 
+msgctxt "#36177"
+msgid "Toggle between Choose, Play (default), Resume and Show Information. Choose will select an item, e.g. open a directory in files mode. Resume will automatically resume videos from the last position that you were viewing them, even after restarting the system."
+msgstr "Alternar entre Eleccion, Reproducir (predetermindo), Reanudar y mostrar la informacion. Elija un elemento, por ejemplo, abrir un directorio en modo de archivos. Reanudar retomará los vídeos automáticamente desde la última posición en la que estabas mirandolo, incluso cuando reinicias el sistema."
+
 msgctxt "#36178"
 msgid "No info available yet."
 msgstr "Aun no hay informacion disponible."
@@ -10975,7 +11075,7 @@ msgstr "Selecciona la fuente de informacion de peliculas predeterminada. Ver el
 
 msgctxt "#36199"
 msgid "Select the default TV show information source. See the Add-ons Manager for options."
-msgstr "Elige la fuente por omisión de la información de un programa de TV. Para opciones, mira en el administrador de Add-ons."
+msgstr "Elige la fuente predeterminada de la información de un programa de TV. Para opciones, mira en el administrador de Complementos."
 
 msgctxt "#36200"
 msgid "Default scraper used for adding music videos to your library."
@@ -11053,10 +11153,6 @@ msgctxt "#36219"
 msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Ventana EPG que se mostrará. Por omisión al Timeline."
 
-msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Número de días de los datos del EPG que se importarán desde el backend. Por omisión, 2 días."
-
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
 msgstr "Tiempo entre cada importación de EPG desde el backend. Por omisión, 120 minutos."
@@ -11109,6 +11205,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 cuando presionas el botón de grabar, o cuando creas un temporizador manual nuevo. Por omisión, 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 grabacion. Numero mas alto significa mas alta prioridad. Predeterminado a 50. No soportado por todos los complementos y backends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Borrar grabaciones despues de este tiempo. Predeterminado 99 dias. No soportado por todos los Complementos y backends."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Iniciar grabacions antes del tiempo actual. Predeterminado a 2 minutos. No soportado por todos los Complementos y backends."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Finalizar grabaciones despues del tiempo actual. Predeterminado a 10 minutos. No soportado por todos los Complementos y backends."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
 msgstr "Muestra una notificación cuando un backend añade, termina o remueve un temporizador."
@@ -11801,6 +11913,14 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Activa la decodificación por hardware utilizando el decodificador AMLogic"
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Cambiar a canal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Grabar"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Modo estereoscópico (activado)"
@@ -11821,6 +11941,14 @@ msgctxt "#36504"
 msgid "Side by side"
 msgstr "Lado a lado"
 
+msgctxt "#36505"
+msgid "Anaglyph Red/Cyan"
+msgstr "Anáglifo Rojo/Cyan"
+
+msgctxt "#36506"
+msgid "Anaglyph Green/Magenta"
+msgstr "Anáglifo Verde/Magenta"
+
 msgctxt "#36507"
 msgid "Interlaced"
 msgstr "Interlazado"
@@ -11829,6 +11957,10 @@ msgctxt "#36508"
 msgid "Hardware Based"
 msgstr "Basado en hardware"
 
+msgctxt "#36509"
+msgid "Monoscopic - 2D"
+msgstr "Monoscopio - 2D"
+
 msgctxt "#36520"
 msgid "Playback mode of stereoscopic videos"
 msgstr "Modo de reproducción de vídeos estereoscópicos."
@@ -11845,6 +11977,10 @@ msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "Modo preferido"
 
+msgctxt "#36525"
+msgid "Same as movie (autodetect)"
+msgstr "Igual como pelicula (autodetectar)"
+
 msgctxt "#36526"
 msgid "Disable stereoscopic mode when playback is stopped"
 msgstr "Deshabilite modo estereoscópico cuando se para la reproducción."
@@ -11857,10 +11993,30 @@ msgctxt "#36528"
 msgid "Select stereoscopic mode"
 msgstr "Seleccionar modo esteroscópico"
 
+msgctxt "#36529"
+msgid "Mono (2D)"
+msgstr "Mono (2D)"
+
 msgctxt "#36530"
 msgid "Preferred mode"
 msgstr "Modo preferido"
 
+msgctxt "#36531"
+msgid "Select alternate mode..."
+msgstr "Seleccione modo alternativo ..."
+
+msgctxt "#36532"
+msgid "Same as movie"
+msgstr "Igual como pelicula"
+
+msgctxt "#36535"
+msgid "Stereoscopic mode of video"
+msgstr "Modo de video estereoscopico "
+
+msgctxt "#36536"
+msgid "Stereoscopic mode inverted"
+msgstr "Modo estereoscópico invertido"
+
 msgctxt "#36537"
 msgid "No info available yet."
 msgstr "Aun no hay informacion disponible."
@@ -11877,6 +12033,10 @@ msgctxt "#36540"
 msgid "No info available yet."
 msgstr "Aun no hay informacion disponible."
 
+msgctxt "#36541"
+msgid "Allows volume control from AirPlay clients."
+msgstr "Permitir control de volumen desde clientes AirPlay ."
+
 msgctxt "#36542"
 msgid "Output to both analogue (headphones) and HDMI"
 msgstr "Emita tanto en análogo (audífonos) como en HDMI"
index c3c3b11..a5ee533 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Seleccione el directorio destino"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Salida estéreo a todos los altavoces"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Número de canales"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Créditos"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Apagado"
@@ -5473,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Detener el ripeo del CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Origen no disponible"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Qué le gustaría hacer con los elementos de %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Mantener"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Eliminar"
@@ -5897,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-procesamiento de vídeo"
@@ -5989,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Grabaciones de TV"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Directorio por defecto para vistas en miniatura de PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Canales"
@@ -6193,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ir a ahora"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Intervalo de actualización de EPG"
@@ -8089,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Falló la descarga de información de artista"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Sobreescribir las etiquetas de la canción con información online"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Con esta opción habilitada, cualquier información que se descargue de álbumes y artistas sobrescribirá todo lo que se haya establecido en las etiquetas de las canciones, como géneros, año, artistas etc. Es útil si dispones de indentificadores de MusicBrainz en las etiquetas.  "
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Música Android"
@@ -8865,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Eliminar recurso compartido"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Directorio de los subtítulos"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Directorio de los subtítulos de películas y otros"
@@ -9237,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "mezclado"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicación de los subtítulos"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fijo"
@@ -10185,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Guardar subtítulos al directorio de la película"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Servicio de TV por defecto"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Seleccionar el servicio que se usará por defecto para buscar subtítulos para programas de televisión"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Servicio de películas por defecto"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Seleccionar el servicio que se usará por defecto para buscar subtítulos para películas"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Cadena de búsqueda manual"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Introduzca la cadena de búsqueda"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notificaciones"
@@ -10569,10 +10601,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuración de altavoces"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10613,6 +10641,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 "Seleccione el comportamiento cuando no se requiere sonido tanto para la reproducción como para el interfaz. [Siempre] -La señal de salida será inaudible de forma continua, lo que podría bloquear el sonido de otras aplicaciones. [1-10 Minutos] - Igual que \"Siempre\", excepto que tras ese periodo, la señal de audio se suspende. [Apagado] - La señal de audio se suspende. Nota: Algunos sonidos pueden perderse si el audio se suspende."
+
 msgctxt "#34120"
 msgid "Play GUI sounds"
 msgstr "Reproducir sonidos de la interfaz de usuario"
@@ -11217,6 +11249,10 @@ msgctxt "#36168"
 msgid "Maximum video speed adjust to match actual screen refresh rate."
 msgstr "Máximo ajuste de la velocidad de vídeo para coincida con la frecuencia de refresco de la pantalla."
 
+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 "Selecciona la calidad del resampleado, para casos donde la salida de audio necesita una tasa de sampleado diferente de la fuente original. [Baja] es más rápida y tendrá un impacto mínimo en el uso de la CPU y otros recursos del sistema. [Media] y [Alta] usarán más recursos del sistema, de forma progresiva."
+
 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 "Permite al reproductor de video ignorar el ratio de aspecto en cierta cantidad para rellenar gran parte de la pantalla con el vídeo."
@@ -11418,8 +11454,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Ventana EPG que se muestra por defecto. Por defecto, Timeline."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Número de días de datos EPG que se importan de fuentes PVR. Por defecto, 2 días."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Número de días de datos EPG que se importan de fuentes PVR. Por defecto, 3 días."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11981,14 +12017,14 @@ msgctxt "#36360"
 msgid "No info available yet."
 msgstr "No hay información 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 "Seleccionar como se establecen las opciones de salida de audio: [Fijo] - las propiedades de salida se establecen a una frecuencia de muestreo especificada y a la configuración de los altavoces siempre; [Mejor opción] - las propiedades de salida se establecen para parecerse lo más posible a las propiedades de la fuente; [Optimizado] - las propiedades de salida se establecen al inicio de la reproducción y no cambiarán aunque varien las propiedades de la fuente de sonido-"
+
 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."
@@ -12001,6 +12037,10 @@ 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 "#36368"
+msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital."
+msgstr "Seleccione para activar passthrough en las opciones de audio para la reproducción de audio codificado como Dolby Digital."
+
 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."
@@ -12013,6 +12053,10 @@ msgctxt "#36371"
 msgid "Select the device to be used for playback of audio that has been decoded such as mp3"
 msgstr "Selecciona el dispositivo que será usado para reproducir el audio que ha 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 "Elige el dispositivo a usar para la reproducción de los distintos formatos, éstos serán algunos de los formatos abajo indicadoe en las opciones de 'receptores disponibles'"
+
 msgctxt "#36373"
 msgid "Configure how interface sounds are handled, such as menu navigation and important notifications."
 msgstr "Configurar la gestión de sonidos del interfaz, como la navegación por menús y las notificaciones importantes."
@@ -12213,6 +12257,26 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Habilitar decodificación de vídeo por hardware usando decodificador AMLogic."
 
+msgctxt "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Seleccione lo que sucederá cuando un elemento de la EPG está seleccionado: [Mostrar menú contextual] activará el menú contextual desde el que puede elegir otras acciones; [Cambiar a canal] instantáneamente sintonice el canal correspondiente; [Mostrar información] mostrará información detallada con el argumento y otras opciones; [Record] creará un temporizador de grabación para el elemento seleccionado."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Mostrar menú contextual"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Cambiar al canal"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Mostrar información"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Grabar"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Modo 3D (actual)"
@@ -12265,6 +12329,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 "Máxima frecuencia de muestreo para spdif o frecuencoa de muestreo para una configuración fija de salida"
+
 msgctxt "#36524"
 msgid "Preferred mode"
 msgstr "Modo preferido"
@@ -12301,6 +12369,10 @@ msgctxt "#36532"
 msgid "Same as movie"
 msgstr "Igual que la película"
 
+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 "Elige como el audio es reducido, por ejemplo: de 5.1 a 2.0: [Habilitado] mantiene el rango dinámico de la fuente de audio original en la reducción aunque el volumen será menor [Deshabilitado] mantiene el nivel de volumen de la fuente original del audio aunque se comprima el rango dinámico. Nota - El rango dinámico es la diferencia entre el menor y mayor sonido de la fuente de audio."
+
 msgctxt "#36535"
 msgid "Stereoscopic mode of video"
 msgstr "Modo de video estereoscópico"
@@ -12341,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Habilitar decodificación de vídeo por hardware."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Profundidad estereoscópica para los subtítulos"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Establece la profuncidad visual para los subtitulos en videos estereoscópicos. A mayor valor, más cerca aparecerán los subtitulos del espectador."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Utilice texturas de mayor calidad para las cubiertas y fanart (utiliza más memoria)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Limita la resolución de la interfaz de usuario para ahorrar memoria. No afecta a la reproducción de video. Usar 1080 para ilimitada. Requiere reiniciar."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(con problemas de visión)"
@@ -12388,3 +12476,11 @@ 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"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Habilitar mayor profundidad de color en artwork"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Establecer resolución de la interfaz de usuario"
index 985b15c..fb1cf0f 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Välj destinationsmapp"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo till alla högtalare"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Antal kanaler"
@@ -1193,6 +1189,10 @@ msgctxt "#338"
 msgid "Fixed"
 msgstr "Fast"
 
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimerad"
+
 msgctxt "#340"
 msgid "Various artists"
 msgstr "Blandade artister"
@@ -1217,10 +1217,18 @@ msgctxt "#345"
 msgid "Year"
 msgstr "År"
 
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "Normalisera nivåerna vid nedmixning"
+
 msgctxt "#347"
 msgid "DTS-HD capable receiver"
 msgstr "DTS-HD-kompatibel förstärkare"
 
+msgctxt "#348"
+msgid "Enable passthrough"
+msgstr "Aktivera genomströmning"
+
 msgctxt "#349"
 msgid "TrueHD capable receiver"
 msgstr "TrueHD-kompatibel förstärkare"
@@ -1497,6 +1505,14 @@ msgctxt "#419"
 msgid "High"
 msgstr "Hög"
 
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Bästa träff"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "Håll ljudenheten levande"
+
 msgctxt "#422"
 msgid "Delete album info"
 msgstr "Radera albuminformation"
@@ -1641,6 +1657,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Växla vy"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Begränsa samplingshastighet (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Undertexter"
@@ -1689,10 +1709,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Medverkande"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchipp"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Av"
@@ -3489,14 +3505,30 @@ msgctxt "#10035"
 msgid "Reset"
 msgstr "Återställ"
 
+msgctxt "#10036"
+msgid "Basic"
+msgstr "Grundläggande"
+
 msgctxt "#10037"
 msgid "Standard"
 msgstr "Standard"
 
+msgctxt "#10038"
+msgid "Advanced"
+msgstr "Avancerad"
+
+msgctxt "#10039"
+msgid "Expert"
+msgstr "Expert"
+
 msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Tilläggsutforskare"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Återställ ovanstående inställningar till deras standardvärde"
+
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
 msgstr "Är du säker på att du vill återställa inställningarna i denna kategori?"
@@ -3509,6 +3541,14 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "Ingen hjälp tillgänglig"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Nollställer alla synbara inställningar till deras standard-värde."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Inga kategorier tillgängliga"
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Ja/Nej-dialog"
@@ -3845,6 +3885,10 @@ msgctxt "#12346"
 msgid "Password retry limit exceeded."
 msgstr "Antal lösenordsförsök har överskridits."
 
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Systemet kommer nu att stängas av."
+
 msgctxt "#12348"
 msgid "Item locked"
 msgstr "Objekt låst"
@@ -4145,6 +4189,10 @@ msgctxt "#13110"
 msgid "Save resolution?"
 msgstr "Spara upplösning?"
 
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Vill du behålla denna ändring?"
+
 msgctxt "#13112"
 msgid "High quality upscaling"
 msgstr "Högkvalitetsuppskalning"
@@ -4189,6 +4237,10 @@ msgctxt "#13122"
 msgid "VDPAU Studio level colour conversion"
 msgstr "Studionivåfärgkonvertering (VDPAU)"
 
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Behålla skin?"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "Rensa övriga skärmar"
@@ -4993,6 +5045,14 @@ msgctxt "#13553"
 msgid "%.1f Seconds"
 msgstr "%.1f sekunder"
 
+msgctxt "#13554"
+msgid "%d Minute"
+msgstr "%d Minut"
+
+msgctxt "#13555"
+msgid "%d Minutes"
+msgstr "%d Minuter"
+
 msgctxt "#13600"
 msgid "Apple remote"
 msgstr "Apple-fjärrkontroll"
@@ -5393,6 +5453,14 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Sluta rippa CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Otillgänglig källa"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Behåll"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Ta bort"
@@ -5677,6 +5745,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "Ändra titel"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Hantera..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "Ändra sortering av titel"
@@ -5905,10 +5977,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV-inspelningar"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Standardmapp för PVR-miniatyrbilder"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanaler"
@@ -6221,6 +6289,18 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "Varning"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "Tjänst"
+
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Multiplexer"
+
+msgctxt "#19101"
+msgid "Provider"
+msgstr "Leverantör"
+
 msgctxt "#19102"
 msgid "Please switch to another channel."
 msgstr "Var god byt till en annan kanal."
@@ -6669,6 +6749,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 "Inget PVR-tillägg kunde aktiveras. Kontrollera dina inställningar eller loggen för mer information."
+
 msgctxt "#19224"
 msgid "Recording aborted"
 msgstr "Inspelning avbruten"
@@ -6729,10 +6813,18 @@ msgctxt "#19239"
 msgid "Starting background threads"
 msgstr "Startar bakgrundstrådar"
 
+msgctxt "#19240"
+msgid "No PVR Add-on enabled"
+msgstr "Inget PVR-tillägg aktiverat"
+
 msgctxt "#19241"
 msgid "The PVR manager has been enabled without any"
 msgstr "PVR-hanteraren har aktiverats utan"
 
+msgctxt "#19242"
+msgid "enabled PVR Add-on. Enable at least one Add-on"
+msgstr "aktiverade PVR-tillägg. Aktivera åtminstone ett tillägg"
+
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "för att använda PVR-funktionaliteten"
@@ -6845,10 +6937,18 @@ msgctxt "#19270"
 msgid "* All recordings"
 msgstr "* Alla inspelningar"
 
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "Inga PVR-tillägg kunde hittas"
+
 msgctxt "#19272"
 msgid "You need a tuner, backend software, and an"
 msgstr "Du behöver en mottagare, backend-mjukvara och ett"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "Tillägg för backend för att kunna använda PVR."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "Var god besök xbmc.org/pvr för att lära dig mer."
@@ -8745,10 +8845,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Ta bort mediautdelning"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Undertextsmapp"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film & alternativ undertextmapp"
@@ -9117,10 +9213,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "blandad"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Undertextsplacering"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Fast"
@@ -9153,6 +9245,18 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s till %s"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Föredra externa undertexter"
+
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr "Föredra externa undertexter framför interna."
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Externa)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Filnamn"
@@ -9833,14 +9937,30 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr "Tillgängliga uppdateringar"
 
+msgctxt "#24044"
+msgid "Dependencies not met. Please contact Add-on author."
+msgstr "Beroenden ej mötta. Vänligen kontakta upphovsmannen för tillägget."
+
 msgctxt "#24045"
 msgid "Add-on does not have the correct structure"
 msgstr "Tillägget har inte korrekt stuktur"
 
+msgctxt "#24046"
+msgid "%s is used by the following installed Add-on(s)"
+msgstr "%s används av följande installerade tillägg"
+
+msgctxt "#24047"
+msgid "This Add-on cannot be uninstalled"
+msgstr "Detta tillägg kan inte avinstalleras"
+
 msgctxt "#24048"
 msgid "Rollback"
 msgstr "Återladdning"
 
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr "Ej kompatibel"
+
 msgctxt "#24050"
 msgid "Available Add-ons"
 msgstr "Tillgängliga tillägg"
@@ -9945,6 +10065,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "Lås tilläggshanteraren"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "Detta tillägg kan inte inaktiveras"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "(nuvarande)"
@@ -9953,6 +10077,10 @@ msgctxt "#24095"
 msgid "(blacklisted)"
 msgstr "(svartlistad)"
 
+msgctxt "#24096"
+msgid "Add-on is incompatible or has been marked broken in repository."
+msgstr "Tillägget är ej kompatibelt eller har blivit markerat som trasigt i filförrådet."
+
 msgctxt "#24097"
 msgid "Would you like to disable it on your system?"
 msgstr "Vill du inaktivera det på ditt system?"
@@ -9981,6 +10109,50 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Skalet saknar några filer"
 
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr "Tillägget är ej kompatibelt på grund av ej mötta beroenden."
+
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr "Pausea vid sökning av undertexter"
+
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Söker efter undertexter ..."
+
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr "%d undertexter funna"
+
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr "Inga undertexter funna"
+
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr "Laddar ner undertexter ..."
+
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr "Språk att ladda ner undertexter för"
+
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr "Misslyckades att ladda ner undertexter"
+
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr "Inga undertexttjänster installerade"
+
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr "Spara undertexter till film-mappen"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Ange söksträng"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Notifieringar"
@@ -10085,6 +10257,10 @@ msgctxt "#33016"
 msgid "Clips"
 msgstr "Klipp"
 
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Starta om insticksprogrammet för att aktivera"
+
 msgctxt "#33018"
 msgid "Tonight"
 msgstr "I natt"
@@ -10361,10 +10537,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Högtalarkonfiguration"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10421,6 +10593,26 @@ msgctxt "#34123"
 msgid "Never"
 msgstr "Aldrig"
 
+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 inte hitta nästa objekt att spela"
@@ -11117,6 +11309,10 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Ingen info tillgänglig ännu."
 
+msgctxt "#36203"
+msgid "Enable the Personal Video Recorder (PVR) features in XBMC. This requires that at least one PVR Add-on is installed."
+msgstr "Aktivera Personliga Video Inspelaren (PVR) funktionen i XBMC. Detta kräver att minst ett PVR-tillägg är installerat."
+
 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 "Importera kanalgrupper från PVR-backenden (om det stöds). Detta kommer ta bort skapade grupper om de inte hittas på backenden."
@@ -11182,8 +11378,8 @@ msgid "Default EPG window to show. Defaults to Timeline."
 msgstr "Standard EPG-fönster att visa. Standard är tidslinje."
 
 msgctxt "#36220"
-msgid "Number of days of EPG data to import from backends. Defaults to 2 days."
-msgstr "Antal dagar av EPG-data att importera från backends. Standard är 2 dagar."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Antal dagar av EPG-data att importera från backends. Standard är 3 dagar."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11217,6 +11413,10 @@ msgctxt "#36228"
 msgid "Show the last viewed channel if switching to live tv."
 msgstr "Visa den senast visade kanalen vid byte till live-TV."
 
+msgctxt "#36229"
+msgid "Display signal quality information in the codec information window (if supported by the Add-on and backend)."
+msgstr "Visa information om signalkvalitet i codecinformationsfönstret (om det stöds av tillägget och backenden)."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Ingen info tillgänglig ännu."
@@ -11237,6 +11437,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 "Varaktighet av inspelningen när du trycker på inspelningsknappen, eller när du skapar en ny manuell timer. Standard är 180 minuter."
 
+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 för inspelningen. Högre nummer innebär högre prioritet. Standard är 50. Stöds inte av alla tillägg och backends."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "Ta bort inspelning efter den här tiden. Standard är 99 dagar. Stöds inte av alla tillägg och backends."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "Starta inspelningar före den faktiska tiden. Standard 2 minuter. Stöds inte av alla tillägg och backends."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "Avsluta inspelningar efter den faktiska tiden. Standard är 10 minuter. Stöds inte av alla tillägg och backends."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
 msgstr "Visa en notifiering när timers är tillagda, slutförda eller tas bort av backenden."
@@ -11945,6 +12161,18 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "Aktivera hårdvaruavkodning av videofiler med hjälp av AMLogic-avkodare"
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Byt till kanal"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Visa information"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Spela in"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Stereoskopiskt läge (nuvarande)"
index 26677bd..d429bb3 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Интихоби директорияи ҷои таъинот"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Барориши стерео ба ҳамаи динамикҳо"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Миқдори шабакаҳо"
@@ -1717,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Таҳиягарон"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-чип"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Хомӯш"
@@ -4981,10 +4973,6 @@ 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"
@@ -5477,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "Истодани нусхабардории диски CD"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "Манбаи дастнорас"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "Бо объектҳои мултимедиа аз %s чӣ бояд кард"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "Нигоҳ доштан"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "Тоза кардан"
@@ -5901,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Коркарди баъдӣ"
@@ -5993,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Сабтҳои ТВ"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Ҷузвдони пешфарз барои эскизҳои PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Шабакаҳо"
@@ -6197,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ҳозир гузаронед"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "Восилаи вақти навсозии EPG."
@@ -8093,6 +8097,14 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "Боргирии иттилооти ҳунарманд қатъ шудааст"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "Рӯиҳамнависии барчаспҳои суруд бо иттилооти онлайн"
+
+msgctxt "#20221"
+msgid "With this enabled, any information that is downloaded for albums and artists will override anything you have set in your song tags, such as genres, year, song artists etc. Useful if you have MusicBrainz identifiers in your song tags."
+msgstr "Агар инро фаъол кунед, ягон иттилооти боргиришуда барои албомҳо ва ҳунармандон иттилооти танзимшударо дар барчаспҳои суруд, монанди жанр, сол, ҳофизи суруд ва ғайра рӯиҳамнависӣ мекунад. Муфид аст, агар MusicBrainz-ро барои барчаспҳои суруд истифода баред."
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "Мусиқии Android"
@@ -8869,10 +8881,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Тоза кардани манбаи медиа"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Ҷузвдони зерунвонҳо"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Директорияи филмҳо ва зерунвонҳои иловагӣ"
@@ -9241,10 +9249,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "омехташуда"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ҷойгиршавии зерунвон"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Таъйиншуда"
@@ -10189,6 +10193,30 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Захира кардани зерунвонҳо ба ҷузвдони филм"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Хидмати телевизионии пешфарз"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "Хидматеро барои истифода ҳамчун хидмати пешфарз ҳангоми ҷустуҷӯи зерунвонҳои барномаҳои телевизионӣ интихоб намоед"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Хидмати филмҳои пешфарз"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "Хидматеро барои истифода ҳамчун хидмати пешфарз ҳангоми ҷустуҷӯи зерунвонҳои филмҳо интихоб намоед"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "Ҷустуҷӯи дастӣ"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Сатри ҷустуҷӯ"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Огоҳиҳо"
@@ -10573,10 +10601,6 @@ 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"
@@ -11430,8 +11454,8 @@ 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 рӯз."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "Миқдори рӯзҳо барои ворид кардани иттилооти EPG аз серверҳо. Қимати пешфарз 3 рӯз мебошад."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11997,18 +12021,10 @@ 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 "Интихоб кунед, ки чӣ тавр хусусиятҳои барориши аудио кор мекунанд: [Fixed] - хусусиятҳои барориш ҳамеша басомади садои муайян ва танзимоти динамикҳоро истифода мекунад; [Best Match] - хусусиятҳои барориш ҳамеша хуусиятҳои манбаро истифода мекунанд; [Optimized] - хусусиятҳои барориш дар оғози пахш танзим мешаванд ва тағйир дода намешавнд, агар хусусиятҳои манба тағйир дода нашаванд."
 
-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 шабака)."
 
-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-ро рамзкушоӣ кунад."
@@ -12241,9 +12257,25 @@ 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 "#36424"
+msgid "Select what will happen when an EPG item is selected: [Show context menu] will trigger the contextual menu from where you can choose further actions; [Switch to channel] will instantly tune to the related channel; [Show information] will display a detailed information with plot and further options; [Record] will create a recording timer for the selected item."
+msgstr "Амалро барои объекти интихобшудаи EPG интихоб намоед: [Намоиши менюи марбут] менюи марбутро барои интихоби амалҳои иловагӣ намоиш медиҳад; [Гузариш ба канал] канали марбутро дарҳол танзим мекунад; [Намоиши иттилоот] иттилооти ботафсилро бо сужет ва имконоти иловагӣ намоиш медиҳад; [Сабт] вақтсанҷи сабтро барои объекти интихобшуда оғоз мекунад."
+
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "Намоиши менюи марбут"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Гузаштан ба канал"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Намоиши иттилоот"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Сабт"
 
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
@@ -12381,6 +12413,22 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Фаъол кардани рамзкушоии сахтафзорӣ барои файлҳои видеоӣ."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "Қаъри стереоскопии зерунвонҳо"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "Қаъри стереоскопии зерунвонҳоро барои видеоҳои стереоскопӣ танзим мекунад. Қимати баланд зерунвонҳоро барои тамошобин наздиқтар намоиш медиҳад."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Истифодаи текстураи баландсифат барои муқова ва тасвирҳои (ҳофизаи зиёдро истифода мебарад)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Возеҳии интерфейси графикиро барои кам истифодаи ҳофиза маҳдуд мекунад. Ба сифати пахши видео таъсир намерасонад. Қимати 1080 барои номаҳдуд. Бояд бозоғозӣ карда шавад."
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(Барои нобино)"
@@ -12428,3 +12476,11 @@ msgstr "Баландкунии садои шабакаи марказӣ ҳанг
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Тугмаҳои системавиро монанди \"printscreen\", \"alt-tab\" ва \"тугмаҳои баландии садо\" дар экрани пурра фаъол мекунад"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Фаъол кардани тасвирзҳо бо ранги қаъри баланд"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Танзими ҳудуди возеҳии интерфейси графикӣ"
index 000df6e..a23ff2b 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "சேருமிடத்தை தேர்வு செய்"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ஸ்டீரியோ முறையில் அணைத்து ஒலிபெருக்கிக்கு அனுப்பவும்"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "தடங்களின் எண்ணிக்கை"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "வரவுகள்"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "நிறுத்து"
@@ -2643,7 +2635,7 @@ msgstr "தொலைநிலை கட்டுப்பாட்டு"
 
 msgctxt "#791"
 msgid "Allow programs on this system to control XBMC"
-msgstr "இந்த கணினியில் உள்ள நிரல்களை கொண்டு XMBC யை கட்டுபடுத்த அனுமதிக்கும்"
+msgstr "இந்த கணினியில் உள்ள நிரல்களை கொண்டு XBMC யை கட்டுபடுத்த அனுமதிக்கும்"
 
 msgctxt "#792"
 msgid "Port"
@@ -2655,7 +2647,7 @@ msgstr "துறை வீச்சு"
 
 msgctxt "#794"
 msgid "Allow programs on other systems to control XBMC"
-msgstr "மற்ற கணினியில் உள்ள நிரல்களை கொண்டு XMBC யை கட்டுபடுத்த அனுமதிக்கும்"
+msgstr "மற்ற கணினியில் உள்ள நிரல்களை கொண்டு XBMC யை கட்டுபடுத்த அனுமதிக்கும்"
 
 msgctxt "#795"
 msgid "Initial repeat delay (ms)"
@@ -5749,10 +5741,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "தொலைக்காட்சி பதிவகள்"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR சிறுபடத்திற்கான இயல்புநிலை கோப்புறை"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "சேனல்கள்"
@@ -8557,10 +8545,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "ஊடக பங்கு அகற்றவும்"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "வசனவரி கோப்புறை"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "திரைப்படம் & மாற்று வசனவரி கோப்புறை"
@@ -8929,10 +8913,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "கலப்பு"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "துணைத்தலைப்பு இருப்பிடம்"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "சரிசெய்யபட்டது"
@@ -9785,6 +9765,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "அலங்காரத்தில் சில கோப்புகள் காணவில்லை"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "தேடல் சொல் சரத்தை உள்ளிடவும்"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "அறிவிப்புkal"
@@ -10157,10 +10141,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "ஒலிபெருக்கி கட்டமைப்பு"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -11125,6 +11105,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "எந்த தகவலும் இதுவரை கிடைக்கவில்லை."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "சேனலுக்கு மாற்றவும்"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "பதிவுசெய்"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "சிடீரியோசுகோபிக்கு முறை (தற்போதையது)"
index e7014c1..58c3f44 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "เลือกไดเร็คทอรีเป้าหมาย"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ส่งออกไปยังลำโพงทั้งหมด"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "จำนวนของช่อง"
@@ -1195,7 +1191,11 @@ msgstr "ปรับตั้งค่า ส่งสัญญาณออก"
 
 msgctxt "#338"
 msgid "Fixed"
-msgstr "คงที่"
+msgstr "ค่าแน่นอน"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "ปรับให้เหมาะสม"
 
 msgctxt "#340"
 msgid "Various artists"
@@ -1221,10 +1221,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"
@@ -1501,6 +1509,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 "ลบข้อมูลอัลบั้ม"
@@ -1645,6 +1661,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "เปลี่ยนมุมมอง"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "จำกัด อัตราสุ่ม (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "ย่อย"
@@ -1693,10 +1713,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "เครดิต"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "ปิด"
@@ -2929,6 +2945,10 @@ msgctxt "#1043"
 msgid "Program Add-ons"
 msgstr "ส่วนเสริมโปรแกรม"
 
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "กำหนดรูปย่อของปลั๊กอิน"
+
 msgctxt "#1045"
 msgid "Add-on settings"
 msgstr "การตั้งค่าส่วนเสริม"
@@ -3493,14 +3513,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 "คุณแน่ใจหรือว่าคุณต้องการ คืนค่าเดิมของการตั้งค่า ในหมวดนี้?"
@@ -3513,6 +3549,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 "กล่องโต้ดอบ ใช่/ไม่"
@@ -3849,6 +3897,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 "ล๊อครายการ"
@@ -4149,6 +4201,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 "การปรับขนาดแบบคุณภาพสูง"
@@ -4193,6 +4249,10 @@ msgctxt "#13122"
 msgid "VDPAU Studio level colour conversion"
 msgstr "VDPAU การแปลงค่าสีระดับสตูดิโอ"
 
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "คงค่าหน้าตา?"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "ยกเลิกการแสดงผลที่จออื่น"
@@ -4997,6 +5057,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 รีโมท"
@@ -5331,7 +5399,7 @@ msgstr "แสดงข้อมูลภาพ EXIF"
 
 msgctxt "#14083"
 msgid "Use a fullscreen window rather than true fullscreen"
-msgstr "ใช้หน้าต่างเต็มจอมากกว่าการแสเงผลเต็มจอจริง"
+msgstr "ใช้หน้าต่างเต็มจอ แทนที่จะใช้การแสดงผลเต็มจอจริง"
 
 msgctxt "#14084"
 msgid "Queue songs on selection"
@@ -5397,6 +5465,18 @@ msgctxt "#14100"
 msgid "Stop ripping CD"
 msgstr "หยุดการริป แผ่นซีดี"
 
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "ไม่พบแหล่งข้อมูล"
+
+msgctxt "#15013"
+msgid "What would you like to do with media items from %s"
+msgstr "คุณต้องการทำอะไรกับ รายการสื่อจาก %s"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "เก็บ"
+
 msgctxt "#15015"
 msgid "Remove"
 msgstr "ลบ"
@@ -5681,6 +5761,10 @@ msgctxt "#16105"
 msgid "Edit title"
 msgstr "แก้ไขชื่อเรื่อง"
 
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "จัดการ..."
+
 msgctxt "#16107"
 msgid "Edit sort title"
 msgstr "แก้ไข การจัดลำดับ ชื่อเรื่อง"
@@ -5817,6 +5901,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "การประมวลผลหลัง"
@@ -5895,7 +5983,7 @@ msgstr "ออกอากาศฟรี"
 
 msgctxt "#19014"
 msgid "Fixed"
-msgstr "à¸\84à¸\87à¸\97ีà¹\88"
+msgstr "à¸\84à¹\88าà¹\81à¸\99à¹\88à¸\99อà¸\99"
 
 msgctxt "#19015"
 msgid "Encryption"
@@ -5909,10 +5997,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "บันทึกทีวี"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "โฟลเดอร์เริ่มต้นสำหรับภาพย่อของ PVR"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "ช่องสัญญาณ"
@@ -6113,6 +6197,10 @@ msgctxt "#19069"
 msgid "EPG"
 msgstr "EPG"
 
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "ไปยัง ขณะนี้"
+
 msgctxt "#19071"
 msgid "EPG update interval"
 msgstr "อยู่ในช่วงอัพเดท EPG"
@@ -6225,6 +6313,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 "โปรดเปลี่ยนไปยังช่องอื่น"
@@ -6673,6 +6773,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 ที่เปิดใช้ได้ ตรวจสอบการตั้งค่าหรือ log ของคุณ เพื่อดูข้อมูลเพิ่มเติม."
+
 msgctxt "#19224"
 msgid "Recording aborted"
 msgstr "ยกเลิกการบันทึก"
@@ -6713,6 +6817,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 "ใช้ หมายเลขช่องของ backend (ใช้ได้กับการเปิดใช้งานเพียง 1 ส่วนเสริม PVR เท่านั้น)"
+
 msgctxt "#19235"
 msgid "PVR manager is starting up"
 msgstr "การจัดการ PVR กำลังเริ่มขึ้น"
@@ -6733,10 +6841,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"
@@ -6849,10 +6965,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 "คุณต้องมีตัวรับสัญญาณ, ซอฟแวร์backendและ"
 
+msgctxt "#19273"
+msgid "Add-on for the backend to be able to use PVR."
+msgstr "ส่วนเสริม เพื่อให้ backend สามารถใช้งาน PVR ได้."
+
 msgctxt "#19274"
 msgid "Please visit xbmc.org/pvr to learn more."
 msgstr "กรุณาเยี่ยมชม xbmc.org/pvr เพื่อเรียนรู้เพิ่มเติม"
@@ -7973,6 +8097,10 @@ msgctxt "#20199"
 msgid "Downloading artist info failed"
 msgstr "ดาวน์โหลดข้อมูลศิลปินผิดพลาด"
 
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "แทนที่ tags เพลง ด้วยข้อมูลแบบออนไลน์"
+
 msgctxt "#20240"
 msgid "Android music"
 msgstr "เพลง Android"
@@ -8749,10 +8877,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "สื่อที่แบ่งปัน"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "โฟลเดอร์คำบรรยาย"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "ไดเร็กทอรี่ภาพยนต์ & คำบรรยายสำรอง"
@@ -9121,13 +9245,9 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "ผสม"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "ตำแหน่งของคำบรรยาย"
-
 msgctxt "#21461"
 msgid "Fixed"
-msgstr "à¸\84à¸\87à¸\97ีà¹\88"
+msgstr "à¸\84à¹\88าà¹\81à¸\99à¹\88à¸\99อà¸\99"
 
 msgctxt "#21462"
 msgid "Bottom of video"
@@ -9157,6 +9277,18 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s to %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 "ชื่อแฟ้ม"
@@ -9837,14 +9969,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 ถูกใช้โดย ส่วนเสริมที่ติดตั้งแล้ว ตามนี้(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 "ส่วนเสริม ที่มีอยู่"
@@ -9949,6 +10097,10 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr "ล็อคการจัดการ ส่วนเสริม"
 
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "ส่วนเสริมนี้ ไม่สามารถปิดการใช้งาน"
+
 msgctxt "#24094"
 msgid "(current)"
 msgstr "(ปัจจุบัน)"
@@ -9957,6 +10109,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 "คุณต้องการที่จะปิดมันบนระบบของคุณ?"
@@ -9985,6 +10141,78 @@ 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 "#24116"
+msgid "Default TV Service"
+msgstr "ค่าเริ่มต้น บริการทีวี"
+
+msgctxt "#24117"
+msgid "Select service that will be used as default to search for TV Show subtitles"
+msgstr "เลือกบริการที่จะใช้เป็นค่าเริ่มต้น ในการค้นหาคำบรรยายของรายการทีวี"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "ค่าเริ่มต้น บริการภาพยนตร์"
+
+msgctxt "#24119"
+msgid "Select service that will be used as default to search for Movie subtitles"
+msgstr "เลือกบริการที่จะใช้เป็นค่าเริ่มต้น ในการค้นหาคำบรรยายของภาพยนตร์"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "คำค้น ที่กำหนดเอง"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "ป้อนคำค้น"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "การแจ้งเตือน"
@@ -10089,6 +10317,10 @@ msgctxt "#33016"
 msgid "Clips"
 msgstr "คลิป"
 
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "เริ่มการใช้งานปล๊ักอินใหม่ เพื่อเปิดใช้"
+
 msgctxt "#33018"
 msgid "Tonight"
 msgstr "คืนนี้"
@@ -10365,10 +10597,6 @@ 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"
@@ -10409,6 +10637,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"
@@ -10425,6 +10657,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 "ไม่พบรายการถัดไปที่จะเล่น"
@@ -10537,6 +10789,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 "ที่ตั้ง"
@@ -10983,12 +11239,16 @@ 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 "à¹\80สียà¸\87อยูà¹\88à¹\83à¸\99à¸\81ารà¸\97ำà¹\83หà¹\89à¸\95รà¸\87à¸\81ัà¸\99, à¸\99ีà¹\89สามารถทำได้โดย เพิ่มอัตราสุ่ม, การข้าม/ทำซ้ำ ชุดข้อมูล, หรือปรับสัญญาณนาฬิกา ถ้ามันเริ่มไม่ตรงกันมากเกินไป."
+msgstr "à¹\80สียà¸\87อยูà¹\88à¹\83à¸\99à¸\81ารà¸\97ำà¹\83หà¹\89à¸\95รà¸\87à¸\81ัà¸\99, à¸\8bึà¹\88à¸\87สามารถทำได้โดย เพิ่มอัตราสุ่ม, การข้าม/ทำซ้ำ ชุดข้อมูล, หรือปรับสัญญาณนาฬิกา ถ้ามันเริ่มไม่ตรงกันมากเกินไป."
 
 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 "#36170"
 msgid "Allow video player to ignoring aspect ratio by a certain amount to fill a larger amount of the screen with video."
 msgstr "ยินยอมให้ตัวเล่นวิดีโอ ละเลยสัดส่วนของภาพด้วยปริมาณทีกำหนด เพื่อให้เต็มขนาดของจอภาพด้วยวิดีโอ."
@@ -11121,6 +11381,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 backend (ถ้ารองรับ). การกระทำนี้จะลบกลุ่มที่สร้างโดยผู้ใช้ ถ้าไม่พบกลุ่มใน backend."
@@ -11186,8 +11450,8 @@ 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 จะถูกนำเข้าจาก backends. ค่าเริ่มต้นคือ 2 วัน."
+msgid "Number of days of EPG data to import from backends. Defaults to 3 days."
+msgstr "จำนวนวัน ที่ข้อมูล EPG จะถูกนำเข้าจาก backends. ค่าเริ่มต้นคือ 3 วัน."
 
 msgctxt "#36221"
 msgid "Time between EPG data imports from backends. Defaults to 120 minutes."
@@ -11221,6 +11485,10 @@ 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 "แสดงข้อมูลคุณภาพสัญญาณ ในหน้าต่างแสดงข้อมูลการเข้ารหัส (ถ้ารองรับโดย ส่วนเสริม และ backend)."
+
 msgctxt "#36230"
 msgid "No info available yet."
 msgstr "ยังไม่มีข้อมูล."
@@ -11241,6 +11509,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 "ช่วงเวลาของการบันทึก เมื่อทำการกดปุ่มบันทึก, หรือเมื่อทำการตั้งเวลาใหม่ด้วยตนเอง. ค่าเริ่มต้นคือ 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. อาจไม่รองรับ โดย ส่วนเสริม และ backends ทั้งหมด."
+
+msgctxt "#36236"
+msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends."
+msgstr "ลบการบันทึกหลังจากเวลานี้. ค่าเริ่มต้นคือ 99 วัน. อาจไม่รองรับ โดย ส่วนเสริม และ backends ทั้งหมด."
+
+msgctxt "#36237"
+msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends."
+msgstr "เริ่มการบันทึกก่อนเวลาที่ตั้งไว้จริง. ค่าเริ่มต้นคือ 2 นาที. อาจไม่รองรับ โดย ส่วนเสริม และ backends ทั้งหมด."
+
+msgctxt "#36238"
+msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends."
+msgstr "หยุดการยันทึก หลังจากเวลาที่ตั้งไว้. ค่าเริ่มต้นคือ 10 นาที. อาจไม่รองรับ โดย ส่วนเสริม และ backends ทั้งหมด."
+
 msgctxt "#36239"
 msgid "Display a notification when timers are added, finished or removed by the backend."
 msgstr "แสดงการแจ้งเตือน เมื่อการตั้งเวลาถูก เพิ่ม, เสร็จสิ้น หรือ เอาออก โดย backend."
@@ -11729,6 +12013,10 @@ 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 "#36363"
 msgid "Boost AC3 streams that have been downmixed to 2 channels."
 msgstr "เพิ่มระดับเสียงของกระแสสัญญาณ AC3 ที่ได้ถูกรวมลงมาเป็น 2 ช่องเสียง."
@@ -11741,6 +12029,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 "เลือกจำนวนสูงสุดของช่องสัญญาณเสียง / ลำโพง เพื่อใช้ในการถอดรหัสเสียง. ถ้ามีการส่งออกสัญญาณดิจิตอล optical/coax ตรงนี้ต้องกำหนดเป็น 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."
@@ -11749,6 +12045,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 "ตั้งค่าวิธีการจัดการเสียงของส่วนติดต่อผู้ใช้, อย่างเช่น การเลื่อนเมนูและการแจ้งเตือนที่สำคัญ."
@@ -11949,6 +12253,22 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "เปิดใช้ การถอดรหัสด้วยฮาร์ดแวร์ โดยใช้ตัวถอดรหัส AMLogic"
 
+msgctxt "#36425"
+msgid "Show context menu"
+msgstr "แสดงเมนูเนื้อหา"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "เปลี่ยนช่อง"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "แสดงข้อมูล"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "บันทึก"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "โหมดภาพสามมิติ (ปัจจุบัน)"
@@ -12001,6 +12321,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 "โหมดที่กำหนดไว้"
@@ -12037,6 +12361,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 "โหมดภาพสามมิติ ของวิดีโอ"
@@ -12077,6 +12405,18 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "เปิดใช้งาน การถอดรหัสด้วยฮาร์ดแวร์สำหรับไฟล์วิดีโอ."
 
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "ความลึกของคำบรรยาย แบบสามมิติ"
+
+msgctxt "#36546"
+msgid "Sets the visual depth of subtitles for stereoscopic videos. The higher the value, the closer the subtitles will appear to the viewer."
+msgstr "กำหนดความลึกเสมือนของคำบรรยาย สำหรับวิดีโอแบบสามมิติ. ค่าที่สูงขึ้น, จะทำให้คำบรรยายในมุมมอง ปรากฎใกล้ขึ้น."
+
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "ใช้พื้นผิวคุณภาพสูงขึ้น สำหรับปกและแฟนอาร์ต (ใช้หน่วยความจำมากขึ้น)"
+
 msgctxt "#37000"
 msgid "(Visually Impaired)"
 msgstr "(มีปัญหาทางสายตา)"
@@ -12120,3 +12460,11 @@ 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 และปุ่มปรับเสียง เมื่ออยู่ในเต็มหน้าจอ"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "กำหนด ความละเอียด GUI แบบจำกัด"
index ad098d4..a7f37f3 100644 (file)
@@ -869,10 +869,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Hedef klasörü seç"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo ses çıkışını bütün hoparlörlere ver"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Kanal sayısı"
@@ -1193,6 +1189,10 @@ msgctxt "#338"
 msgid "Fixed"
 msgstr "Sabit"
 
+msgctxt "#339"
+msgid "Optimized"
+msgstr "İyileştirilmiş"
+
 msgctxt "#340"
 msgid "Various artists"
 msgstr "Çeşitli sanatçılar"
@@ -1645,6 +1645,10 @@ msgctxt "#457"
 msgid "Switch view"
 msgstr "Görünümü değiştir"
 
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Örnekleme hızını sınırla (kHz)"
+
 msgctxt "#459"
 msgid "Subs"
 msgstr "Altyazılar"
@@ -1693,10 +1697,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Jenerik"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Kapalı"
@@ -1771,7 +1771,7 @@ msgstr "Genel ses boşluk payı"
 
 msgctxt "#495"
 msgid "Upsample videos to GUI resolution"
-msgstr "Videoları arayüz çözünülürlüğüne yükselt"
+msgstr "Videoları Grafik Kullanıcı Arabirimi çözünürlüğüne yükselt"
 
 msgctxt "#496"
 msgid "Calibration"
@@ -3431,7 +3431,7 @@ msgstr "Ayarlar - Ekran"
 
 msgctxt "#10010"
 msgid "Settings - Appearance - GUI Calibration"
-msgstr "Ayarlar - Görünüm - Arayüz Ayarı"
+msgstr "Ayarlar - Görünüm - Grafik Kullanıcı Arabirimi Ayarlama"
 
 msgctxt "#10011"
 msgid "Settings - Videos - Screen Calibration"
@@ -3517,6 +3517,10 @@ msgctxt "#10040"
 msgid "Add-on browser"
 msgstr "Eklenti tarayıcısı"
 
+msgctxt "#10041"
+msgid "Reset above settings to default"
+msgstr "Yukarıdaki ayarları varsayılana sıfırla"
+
 msgctxt "#10042"
 msgid "Are you sure you want to reset the settings in this category?"
 msgstr "Bu kategorideki ayarları sıfırlamak istediğinize emin misiniz?"
@@ -3529,6 +3533,14 @@ msgctxt "#10044"
 msgid "No help available"
 msgstr "Yardım mevcut değil"
 
+msgctxt "#10045"
+msgid "Resets all the visible settings to their default values."
+msgstr "Görünen bütün ayarları varsayılan değerlerine sıfırlar."
+
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "Kategori mevcut değil."
+
 msgctxt "#10100"
 msgid "Yes/No dialogue"
 msgstr "Evet/Hayır iletişim kutusu"
@@ -3865,6 +3877,10 @@ msgctxt "#12346"
 msgid "Password retry limit exceeded."
 msgstr "Parola deneme hakkı tükendi."
 
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "Sistem şimdi kapatılacak."
+
 msgctxt "#12348"
 msgid "Item locked"
 msgstr "Öğe kilitli"
@@ -4165,6 +4181,10 @@ msgctxt "#13110"
 msgid "Save resolution?"
 msgstr "Çözünürlük kaydedilsin mi?"
 
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "Bu değişikliği korumak ister misiniz?"
+
 msgctxt "#13112"
 msgid "High quality upscaling"
 msgstr "Yüksek kalite upscaling"
@@ -4209,6 +4229,10 @@ msgctxt "#13122"
 msgid "VDPAU Studio level colour conversion"
 msgstr "VDPAU Stüdyo düzeyi renk dönüştürme"
 
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "Dış görünüm korunsun mu?"
+
 msgctxt "#13130"
 msgid "Blank other displays"
 msgstr "Diğer görüntüleri temizle"
@@ -5243,7 +5267,7 @@ msgstr "Tarih biçimi"
 
 msgctxt "#14053"
 msgid "GUI filters"
-msgstr "Arayüz filtreleri"
+msgstr "Grafik Kullanıcı Arabirimi filtreleri"
 
 msgctxt "#14055"
 msgid "Use background scanning"
@@ -5841,6 +5865,10 @@ msgctxt "#16325"
 msgid "VDPAU - Bob"
 msgstr "VDPAU - Bob"
 
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
 msgctxt "#16400"
 msgid "Post-processing"
 msgstr "Post-processing"
@@ -5933,10 +5961,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "TV kayıtları"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR küçük resimleri için varsayılan klasör"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Kanallar"
@@ -6249,6 +6273,10 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr "Uyarı"
 
+msgctxt "#19099"
+msgid "Service"
+msgstr "Hizmet"
+
 msgctxt "#19101"
 msgid "Provider"
 msgstr "Sağlayıcı"
@@ -8789,10 +8817,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Ortam paylaşımını kaldır"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Altyazı klasörü"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Film ve alternatif altyazı klasörü"
@@ -8843,7 +8867,7 @@ msgstr "480p'yi etkinleştir"
 
 msgctxt "#21379"
 msgid "Enable 720p"
-msgstr "720p'ti etkinleştir"
+msgstr "720p'yi etkinleştir"
 
 msgctxt "#21380"
 msgid "Enable 1080i"
@@ -9161,10 +9185,6 @@ msgctxt "#21459"
 msgid "mixed"
 msgstr "karışık"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Altyazı konumu"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Sabit"
@@ -9197,6 +9217,14 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr "%s ile %s arasında"
 
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr "Harici altyazıları tercih et."
+
+msgctxt "#21602"
+msgid "(External)"
+msgstr "(Harici)"
+
 msgctxt "#21800"
 msgid "File name"
 msgstr "Dosya adı"
@@ -10053,6 +10081,10 @@ msgctxt "#24104"
 msgid "Add-on is incompatible due to unmet dependencies."
 msgstr "Eklenti karşılanamayan bağımlılıklar olduğu için uyumsuz."
 
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr "Altyazılar aranıyor ..."
+
 msgctxt "#24108"
 msgid "%d subtitles found"
 msgstr "%d altyazı bulundu"
@@ -10077,6 +10109,22 @@ msgctxt "#24115"
 msgid "Save subtitles to movie folder"
 msgstr "Altyazıları film klasörüne kaydet"
 
+msgctxt "#24116"
+msgid "Default TV Service"
+msgstr "Varsayılan TV Hizmeti"
+
+msgctxt "#24118"
+msgid "Default Movie Service"
+msgstr "Varsayılan Film Hizmeti"
+
+msgctxt "#24120"
+msgid "Manual search string"
+msgstr "El ile arama dizesi"
+
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Arama dizesi girin"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Bildirimler"
@@ -10461,10 +10509,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Windows Media Audio 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Hoparlör Yapılandırması"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10507,7 +10551,7 @@ msgstr "7.1"
 
 msgctxt "#34120"
 msgid "Play GUI sounds"
-msgstr "Grafik kullanıcı arabirimi seslerini çal"
+msgstr "Grafik Kullanıcı Arabirimi seslerini çal"
 
 msgctxt "#34121"
 msgid "Only when playback stopped"
@@ -10559,7 +10603,7 @@ msgstr "Apple'ın Bonjour Hizmeti yüklü mü? Daha fazla bilgi için günlük d
 
 msgctxt "#34302"
 msgid "AirPlay requires Zeroconf to be enabled."
-msgstr "AirPlay Zeroconf un seçilebilir olmasını gerektirir."
+msgstr "AirPlay için Zeroconf'un etkin olması gerekir."
 
 msgctxt "#34303"
 msgid "Unable to stop Zeroconf"
@@ -10867,7 +10911,7 @@ msgstr "Kullanıcı arabiriminde gösterilecek yazı tipini seçiniz. Yazı tipl
 
 msgctxt "#36108"
 msgid "Resize the view of the GUI."
-msgstr "Grafiksel Kullanıcı Arabirimi görüntüsünü yeniden ölçülendir."
+msgstr "Grafik Kullanıcı Arabirimi görüntüsünü yeniden boyutlandır."
 
 msgctxt "#36109"
 msgid "Select the media window that XBMC displays on startup."
@@ -10899,7 +10943,7 @@ msgstr "Sıcaklık, tarih ve zaman formatını seçin. Mevcut seçenekler seçti
 
 msgctxt "#36116"
 msgid "Choose which character set is used for displaying text in the GUI."
-msgstr "Grafik Kullanıcı Arabirimini gösterirken hangi karakter setinin kullanılacağını seçiniz."
+msgstr "Grafik Kullanıcı Arabirimini gösterirken hangi karakter kümesinin kullanılacağını seçiniz."
 
 msgctxt "#36117"
 msgid "Select country location."
@@ -10999,7 +11043,7 @@ msgstr "Medya taranırken aktör küçük resimlerini al."
 
 msgctxt "#36146"
 msgid "Check for new media files on XBMC startup."
-msgstr "XMBC başlatılırken yeni medya dosyalarını kontrol et."
+msgstr "XBMC başlatılırken yeni medya dosyalarını kontrol et."
 
 msgctxt "#36147"
 msgid "Hide the library scanning progress bar during scans."
@@ -11023,7 +11067,7 @@ msgstr "Bilgi mevcut değil."
 
 msgctxt "#36152"
 msgid "Enable automatic playback of the next file in the list of the selected item."
-msgstr "Seçililer listesindeki bir sonraki dosyayı otomatik oynatmayı aktifleştir."
+msgstr "Seçililer listesindeki bir sonraki dosyayı otomatik oynatmayı etkinleştir."
 
 msgctxt "#36153"
 msgid "Adjust the method used to process and display video."
@@ -11185,6 +11229,10 @@ msgctxt "#36202"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
 
+msgctxt "#36206"
+msgid "Use numbering from the backend, instead of configuring them manually over XBMC."
+msgstr "XBMC üzerinde el ile yapılandırmak yerine arka uç numaralarını kullan."
+
 msgctxt "#36207"
 msgid "Open the channel manager, which allows modifying the channel order, channel name, icon, etc."
 msgstr "Kanal sırası, kanal ismi, simge vb. değiştirmeye izin veren kanal yöneticisini aç."
@@ -11245,6 +11293,10 @@ msgctxt "#36226"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
 
+msgctxt "#36227"
+msgid "Display stream of selected channel in a small box instead of fullscreen."
+msgstr "Seçilen kanalın görüntüsünü tam ekran yerine küçük bir kutuda görüntüleyin."
+
 msgctxt "#36228"
 msgid "Show the last viewed channel if switching to live tv."
 msgstr "Canlı TV ye geçildiğinde son seyredilen kanala geç."
@@ -11253,6 +11305,10 @@ msgctxt "#36230"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
 
+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 "Tam ekran modundayken bir sayı tuşlanırsa, sayı tuşlandıktan 1 saniye sonra otomatikman tuşlanan kanalı açar."
+
 msgctxt "#36232"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
@@ -11307,7 +11363,7 @@ msgstr "Varsayılan sanatçı bilgisi kaynağını seçin. Seçenekler için Ekl
 
 msgctxt "#36259"
 msgid "Check for new and removed media files on XBMC startup."
-msgstr "XMBC başlatılırken yeni ve kaldırılmış medya dosyalarını kontrol et."
+msgstr "XBMC başlatılırken yeni ve kaldırılmış medya dosyalarını kontrol et."
 
 msgctxt "#36260"
 msgid "No info available yet."
@@ -11403,7 +11459,7 @@ msgstr "Karaoke sırasında kullanılacak yazı tipi rengini seçiniz."
 
 msgctxt "#36298"
 msgid "Select the character set used during karoake."
-msgstr "Karaoke sırasında kullanılacak geçerli karakter setini seçiniz."
+msgstr "Karaoke sırasında kullanılacak karakter kümesini seçiniz."
 
 msgctxt "#36299"
 msgid "No info available yet."
@@ -11499,20 +11555,28 @@ msgstr "Bilgi mevcut değil."
 
 msgctxt "#36323"
 msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client."
-msgstr "UPnP serverı aç. Bu özellik herhangi bir UPnP istemcisine akış yapmanızı sağlar."
+msgstr "UPnP sunucusunu etkinleştir. Bu özellik herhangi bir UPnP istemcisine akış yapmanızı sağlar."
 
 msgctxt "#36324"
 msgid "When a manual or automatical library update occurs, notify UPnP clients."
-msgstr "El ile ya da otomatik kitaplık güncelleme sorunu olursa UPnP istemcilerini uyar."
+msgstr "El ile ya da otomatik kitaplık güncellemesi olduğunda UPnP istemcilerine bildir."
 
 msgctxt "#36325"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
 
+msgctxt "#36326"
+msgid "Enable the UPnP client. This will allow you to stream media from any UPnP server with a control point and control playback from that server."
+msgstr "UPnP istemcisini etkinleştir. Bu özellik herhangi bir UPnP sunucusundan akış yapmanızı ve oynatımı sunucudan kontrol etmenizi sağlar."
+
 msgctxt "#36327"
 msgid "No info available yet."
 msgstr "Bilgi mevcut değil."
 
+msgctxt "#36328"
+msgid "Enable remote users to control XBMC through the built-in webserver."
+msgstr "Dahili web sunucusu aracılığıyla XBMC kontrolü için uzak kullanıcıları etkinleştirin."
+
 msgctxt "#36329"
 msgid "Define the webserver port."
 msgstr "Web sunucu portunu belirle."
@@ -11547,7 +11611,7 @@ msgstr "Bilgi mevcut değil."
 
 msgctxt "#36338"
 msgid "Allow programs on the network to control XBMC."
-msgstr "Ağ üzerindeki programların XMBC yi kontrol etmesine izin ver."
+msgstr "Ağ üzerindeki programların XBMC yi kontrol etmesine izin ver."
 
 msgctxt "#36339"
 msgid "No info available yet."
@@ -11647,7 +11711,7 @@ msgstr "Bilgi mevcut değil."
 
 msgctxt "#36378"
 msgid "Use a joystick to control XBMC."
-msgstr "XMBC yi kontrol etmek için joystick kullan."
+msgstr "XBMC yi kontrol etmek için joystick kullan."
 
 msgctxt "#36379"
 msgid "No info available yet."
@@ -11813,6 +11877,18 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr "AMLogic kod çözücü kullanarak donanımsal video çözücüyü etkinleştir"
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Kanal değiştir"
+
+msgctxt "#36427"
+msgid "Show information"
+msgstr "Bilgileri görüntüle"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Kayıt"
+
 msgctxt "#36500"
 msgid "Stereoscopic mode (current)"
 msgstr "Stereoskopik mod (varsayılan)"
@@ -11937,6 +12013,14 @@ msgctxt "#36544"
 msgid "Enable hardware decoding of video files."
 msgstr "Video dosyalarının donanımsal çözülmesini etkinleştir."
 
+msgctxt "#36547"
+msgid "Use higher quality textures for covers and fanart (uses more memory)"
+msgstr "Kapaklar ve fanart için yüksek kaliteli dokular kullan (daha fazla bellek kullanır)"
+
+msgctxt "#36548"
+msgid "Limits resolution of GUI to save memory. Does not affect video playback. Use 1080 for unlimited. Requires restart."
+msgstr "Bellek tasarrufu için Grafik Kullanıcı Arabirimi çözünürlüğünü sınırlar. Video oynatımını etkilemez. Sınırsız için 1080 kullanın. Yeniden başlatma gerektirir."
+
 msgctxt "#37001"
 msgid "(Directors Comments)"
 msgstr "(Yönetmen Yorumları)"
@@ -11968,3 +12052,11 @@ msgstr "Çift ses çıkışı"
 msgctxt "#37019"
 msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen"
 msgstr "Tam ekranda printscreen, alt-tab ve ses ayarı tuşları gibi sistem tuşlarını etkinleştirir"
+
+msgctxt "#37020"
+msgid "Enable higher colour depth artwork"
+msgstr "Daha yüksek artwork renk derinliğini etkinleştir"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "Grafik Kullanıcı Arabirimi çözünürlük sınırını ayarla"
index 7bc516c..fc68957 100644 (file)
@@ -861,14 +861,14 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Виберіть папку призначення"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Виводити стерео на всі динаміки"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Кількість каналів"
 
+msgctxt "#254"
+msgid "DTS capable receiver"
+msgstr "Виводити звук у форматі DTS"
+
 msgctxt "#255"
 msgid "CDDB"
 msgstr "CDDB"
@@ -1041,6 +1041,18 @@ msgctxt "#298"
 msgid "Bookmarks"
 msgstr "Закладки"
 
+msgctxt "#300"
+msgid "MP1 capable receiver"
+msgstr "Виводити звук у форматі MP1"
+
+msgctxt "#301"
+msgid "MP2 capable receiver"
+msgstr "Виводити звук у форматі MP2"
+
+msgctxt "#302"
+msgid "MP3 capable receiver"
+msgstr "Виводити звук у форматі MP3"
+
 msgctxt "#303"
 msgid "Delay"
 msgstr "Затримка"
@@ -1193,6 +1205,14 @@ msgctxt "#345"
 msgid "Year"
 msgstr "Рік"
 
+msgctxt "#347"
+msgid "DTS-HD capable receiver"
+msgstr "Виводити звук у форматі DTS-HD"
+
+msgctxt "#349"
+msgid "TrueHD capable receiver"
+msgstr "Виводити звук у форматі TrueHD"
+
 msgctxt "#350"
 msgid "Programs"
 msgstr "Програми"
@@ -1249,6 +1269,10 @@ msgctxt "#363"
 msgid "Sort by: File"
 msgstr "Сорт. за файлами"
 
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Виводити звук у форматі Dolby Digital (AC3)"
+
 msgctxt "#365"
 msgid "Sort by: Name"
 msgstr "Сорт. за іменем"
@@ -1645,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Автори"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-схема"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Вимкн."
@@ -2305,6 +2325,10 @@ msgctxt "#665"
 msgid "Compression level"
 msgstr "Ступінь стиснення"
 
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Детальний журнал…"
+
 msgctxt "#700"
 msgid "Cleaning up library"
 msgstr "Очищення медіатеки…"
@@ -2341,6 +2365,10 @@ msgctxt "#713"
 msgid "HTTP proxy"
 msgstr "HTTP-проксі"
 
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Призначення"
+
 msgctxt "#716"
 msgid "Automatic (DHCP)"
 msgstr "Автоматично (DHCP)"
@@ -2353,6 +2381,18 @@ msgctxt "#719"
 msgid "IP address"
 msgstr "IP-адреса"
 
+msgctxt "#720"
+msgid "Netmask"
+msgstr "Маска мережі"
+
+msgctxt "#721"
+msgid "Default gateway"
+msgstr "Основний шлюз"
+
+msgctxt "#722"
+msgid "DNS server"
+msgstr "Сервер DNS"
+
 msgctxt "#723"
 msgid "Save & restart"
 msgstr "Зберегти та перезапустити"
@@ -2401,6 +2441,10 @@ msgctxt "#736"
 msgid "Style"
 msgstr "Стиль"
 
+msgctxt "#737"
+msgid "Colour"
+msgstr "Колір"
+
 msgctxt "#738"
 msgid "Normal"
 msgstr "Нормальний"
@@ -2533,6 +2577,14 @@ msgctxt "#776"
 msgid "Wireless network name (ESSID)"
 msgstr "Ім'я бездротової мережі (ESSID)"
 
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Пароль бездротової мережі"
+
+msgctxt "#778"
+msgid "Wireless security"
+msgstr "Захист бездротової мережі"
+
 msgctxt "#779"
 msgid "Save and apply network interface settings"
 msgstr "Зберегти та застосувати налаштування мережі"
@@ -2617,6 +2669,10 @@ msgctxt "#799"
 msgid "Library Update"
 msgstr "Оновлення медіатеки"
 
+msgctxt "#800"
+msgid "Music library needs to rescan tags from files."
+msgstr "Потрібне повторне сканування тегів музичних файлів"
+
 msgctxt "#801"
 msgid "Would you like to scan now?"
 msgstr "Сканували зараз?"
@@ -2633,6 +2689,10 @@ msgctxt "#852"
 msgid "Valid port range is 1024-65535"
 msgstr "Доступний діапазон портів: 1024–65535"
 
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "Додати фото…"
+
 msgctxt "#998"
 msgid "Add Music..."
 msgstr "Додати музику…"
@@ -2841,6 +2901,14 @@ msgctxt "#1051"
 msgid "Enter web address"
 msgstr "Уведіть веб-адресу"
 
+msgctxt "#1180"
+msgid "Proxy type"
+msgstr "Тип проксі-сервера"
+
+msgctxt "#1181"
+msgid "HTTP"
+msgstr "HTTP"
+
 msgctxt "#1182"
 msgid "SOCKS4"
 msgstr "SOCKS4"
@@ -2853,6 +2921,10 @@ msgctxt "#1184"
 msgid "SOCKS5"
 msgstr "SOCKS5"
 
+msgctxt "#1185"
+msgid "SOCKS5 with remote dns resolving"
+msgstr "SOCKS5 із віддаленим визначенням DNS"
+
 msgctxt "#1200"
 msgid "SMB client"
 msgstr "SMB-клієнт"
@@ -2989,10 +3061,18 @@ msgctxt "#1271"
 msgid "Device name"
 msgstr "Ім'я пристрою"
 
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Захист за допомогою паролю"
+
 msgctxt "#1273"
 msgid "AirPlay"
 msgstr "AirPlay"
 
+msgctxt "#1274"
+msgid "AirTunes"
+msgstr "AirTunes"
+
 msgctxt "#1275"
 msgid "Filter %s"
 msgstr "Фільтр %s"
@@ -3349,30 +3429,82 @@ msgctxt "#10034"
 msgid "Settings - Profiles"
 msgstr "Налаштування - Профілі"
 
+msgctxt "#10035"
+msgid "Reset"
+msgstr "Скинути"
+
 msgctxt "#10037"
 msgid "Standard"
 msgstr "Стандартний"
 
+msgctxt "#10040"
+msgid "Add-on browser"
+msgstr "Браузер надбудов"
+
+msgctxt "#10042"
+msgid "Are you sure you want to reset the settings in this category?"
+msgstr "Справді скинути налаштування в цій категорії?"
+
 msgctxt "#10043"
 msgid "Help"
 msgstr "Допомога"
 
+msgctxt "#10044"
+msgid "No help available"
+msgstr "Довідка відсутня"
+
+msgctxt "#10126"
+msgid "File browser"
+msgstr "Файловий браузер"
+
 msgctxt "#10128"
 msgid "Network setup"
 msgstr "Налаштування мережи"
 
+msgctxt "#10129"
+msgid "Media source"
+msgstr "Медіа-джерело"
+
+msgctxt "#10130"
+msgid "Profile settings"
+msgstr "Налаштування профілю"
+
 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 "Пошук субтитрів…"
@@ -3849,6 +3981,50 @@ msgctxt "#13025"
 msgid "Joystick unplugged"
 msgstr "Джойстик відключено"
 
+msgctxt "#13026"
+msgid "Try to wake remote servers on access"
+msgstr "Намагатися розбудити віддалені сервери"
+
+msgctxt "#13027"
+msgid "Wake on Lan (%s)"
+msgstr "Wake on Lan (%s)"
+
+msgctxt "#13028"
+msgid "Waiting for network to connect..."
+msgstr "Очікування підключення до мережі…"
+
+msgctxt "#13029"
+msgid "Failed to execute Wake on Lan!"
+msgstr "Не вдалося виконати Wake on Lan!"
+
+msgctxt "#13030"
+msgid "Waiting for server to wake up..."
+msgstr "Очікування прокидання сервера…"
+
+msgctxt "#13031"
+msgid "Extended wait for server to wake up..."
+msgstr "Тривале очікування прокидання сервера…"
+
+msgctxt "#13032"
+msgid "Waiting for services to launch..."
+msgstr "Очікування запуску служб…"
+
+msgctxt "#13033"
+msgid "MAC Discovery"
+msgstr "Виявлення MAC"
+
+msgctxt "#13034"
+msgid "Updated for %s"
+msgstr "Оновлено для %s"
+
+msgctxt "#13035"
+msgid "Found for %s"
+msgstr "Знайдено для %s"
+
+msgctxt "#13036"
+msgid "Failed for %s"
+msgstr "Не вдалося для %s"
+
 msgctxt "#13050"
 msgid "Running low on battery"
 msgstr "Низький заряд батареї"
@@ -4605,6 +4781,10 @@ msgctxt "#13434"
 msgid "Play only this"
 msgstr "Грати лише цей файл"
 
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Високоякісне масштабування більше, ніж"
+
 msgctxt "#13500"
 msgid "A/V sync method"
 msgstr "Синхронізація А/В"
@@ -4665,6 +4845,10 @@ msgctxt "#13515"
 msgid "No art"
 msgstr "Без картинки"
 
+msgctxt "#13516"
+msgid "Add art"
+msgstr "Додати картинку"
+
 msgctxt "#13550"
 msgid "Pause during refresh rate change"
 msgstr "Пауза для зміни частоти дисплею"
@@ -5565,10 +5749,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Записи ТБ"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Папка для ескізів PVR за промовчанням"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Канали"
@@ -5633,6 +5813,10 @@ 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 "Неможливо відтворити запис. Див. журнал."
@@ -6317,6 +6501,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 "Запис перервано"
@@ -6353,6 +6541,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 запускається"
@@ -6373,10 +6565,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. Активуйте принаймні 1 надбудову"
+
 msgctxt "#19243"
 msgid "in order to use the PVR functionality."
 msgstr "для використання функцій PVR."
@@ -6489,10 +6689,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."
@@ -8109,6 +8317,10 @@ msgctxt "#20417"
 msgid "Writer"
 msgstr "Сценарій"
 
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Сценаристи"
+
 msgctxt "#20419"
 msgid "Replace file names with library titles"
 msgstr "Показувати назви з медіатеки замість імен файлів"
@@ -8285,6 +8497,26 @@ 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 "Показувати приховані файли та папки"
@@ -8325,10 +8557,18 @@ 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 "Змінити медіаресурс"
@@ -8337,10 +8577,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Видалити медіаресурс"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка субтитрів"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Папка для фільмів і альтернативних субтитрів"
@@ -8705,9 +8941,9 @@ msgctxt "#21458"
 msgid "Group by"
 msgstr "Групування"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "РозмÑ\96Ñ\89еннÑ\8f Ñ\81Ñ\83бÑ\82иÑ\82Ñ\80Ñ\96в"
+msgctxt "#21459"
+msgid "mixed"
+msgstr "мÑ\96кÑ\81"
 
 msgctxt "#21461"
 msgid "Fixed"
@@ -8873,6 +9109,18 @@ msgctxt "#21843"
 msgid "Orientation"
 msgstr "Орієнтація"
 
+msgctxt "#21857"
+msgid "Sub-location"
+msgstr "Дод. розміщення"
+
+msgctxt "#21858"
+msgid "Image type"
+msgstr "Тим картинки"
+
+msgctxt "#21859"
+msgid "Time created"
+msgstr "Час створення"
+
 msgctxt "#21860"
 msgid "Supplemental categories"
 msgstr "Додаткові категорії"
@@ -9537,6 +9785,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "У обкладинці бракує файлів"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Рядок пошуку"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Сповіщення"
@@ -9905,10 +10157,6 @@ msgctxt "#34005"
 msgid "Flac"
 msgstr "Flac"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфігурація динаміків"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10349,6 +10597,14 @@ 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 "#36201"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
@@ -10433,6 +10689,10 @@ msgctxt "#36254"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
 
+msgctxt "#36258"
+msgid "Select the default artist information source. See the Add-ons Manager for options."
+msgstr "Вибір основного джерела відомостей про виконавців. Доступні варіанти див. у менеджері надбудов."
+
 msgctxt "#36264"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
@@ -10509,6 +10769,10 @@ msgctxt "#36316"
 msgid "No info available yet."
 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 "Ще немає доступної інформації."
@@ -10529,6 +10793,10 @@ msgctxt "#36327"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
 
+msgctxt "#36332"
+msgid "Select between web interfaces installed via the Add-on Manager."
+msgstr "Вибір доступних веб-інтерфейсів, встановлених за допомогою менеджера надбудов."
+
 msgctxt "#36335"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
@@ -10704,3 +10972,11 @@ msgstr "Ще немає доступної інформації."
 msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Ще немає доступної інформації."
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Переключитися на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Запис"
index 8fd8398..2aae32d 100644 (file)
@@ -797,10 +797,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Mo'ljal direktoriyasini tanlash"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Stereo hamma karnaylarga chiqarish"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Kanallar soni"
@@ -1153,6 +1149,10 @@ msgctxt "#370"
 msgid "Thunderstorms"
 msgstr "Momaqaldiroq"
 
+msgctxt "#371"
+msgid "Partly"
+msgstr "Qisman"
+
 msgctxt "#375"
 msgid "Snow"
 msgstr "Qor"
@@ -2405,6 +2405,26 @@ msgctxt "#12005"
 msgid "Fullscreen video"
 msgstr "To'liq ekran video"
 
+msgctxt "#12009"
+msgid "Rebuild index..."
+msgstr "Indeksni qayta qurish..."
+
+msgctxt "#12010"
+msgid "Return to music window"
+msgstr "Musiqa oynasiga qaytish"
+
+msgctxt "#12011"
+msgid "Return to videos window"
+msgstr "Video oynasiga qaytish"
+
+msgctxt "#12021"
+msgid "Start from beginning"
+msgstr "Boshidan boshlash"
+
+msgctxt "#12022"
+msgid "Resume from %s"
+msgstr "%s'dan davom ettirish"
+
 msgctxt "#12310"
 msgid "0"
 msgstr "0"
@@ -2453,10 +2473,22 @@ msgctxt "#12322"
 msgid "*"
 msgstr "*"
 
+msgctxt "#12325"
+msgid "Locked! Enter code..."
+msgstr "Bloklangan! Kodni kiriting..."
+
 msgctxt "#12326"
 msgid "Enter password"
 msgstr "Maxfiy so'zni kiriting"
 
+msgctxt "#12327"
+msgid "Enter master code"
+msgstr "Bosh kodni kiritish"
+
+msgctxt "#12328"
+msgid "Enter unlock code"
+msgstr "Blokdan chiqarish kodini kiritish"
+
 msgctxt "#12329"
 msgid "or press C to cancel"
 msgstr "yoki bekor qilish uchun C bosing"
@@ -4180,3 +4212,7 @@ msgstr "Qo'llab-quvvatlanmaydigan libCEC interfeysi versiyasi. %x XBMC qo'llab-q
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Element jildi"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Yozish"
index 844cdcb..c5f92f0 100644 (file)
@@ -1076,3 +1076,7 @@ msgstr "Peripherals"
 msgctxt "#35500"
 msgid "Location"
 msgstr "Địa điểm"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Ghi lại"
index b6923b9..cf299e4 100644 (file)
@@ -861,10 +861,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Chọn thư mục đích"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Phát âm stereo ra tất cả loa đang kết nối"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Số lượng kênh"
@@ -1649,10 +1645,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Credit"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Tắt"
@@ -5929,10 +5921,6 @@ msgctxt "#20464"
 msgid "Select %s"
 msgstr "Chọn %s"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Thư mục phụ đề"
-
 msgctxt "#21375"
 msgid "Normal"
 msgstr "Bình thường"
@@ -6241,6 +6229,10 @@ msgctxt "#24102"
 msgid "Unable to load skin"
 msgstr "Không thể nạp được skin"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Nhập chuỗi tìm kiếm"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Các thông báo"
@@ -6537,10 +6529,6 @@ msgctxt "#33200"
 msgid "Detected New Connection"
 msgstr "Phát hiện kết nối mới"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Cấu hình loa"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -6712,3 +6700,11 @@ msgstr "Phiên bản giao diện libCEC không được hỗ trợ. Phiên bản
 msgctxt "#36041"
 msgid "* Item folder"
 msgstr "* Thư mục item"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Chuyển tới kênh"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Thu âm"
index 9b84e5e..44c9e45 100644 (file)
@@ -865,10 +865,6 @@ msgctxt "#251"
 msgid "Select destination directory"
 msgstr "Dewis cyfeiriadur targed"
 
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Allbynnu stereo i bob seinydd"
-
 msgctxt "#253"
 msgid "Number of channels"
 msgstr "Nifer o sianeli"
@@ -1673,10 +1669,6 @@ msgctxt "#470"
 msgid "Credits"
 msgstr "Diolchiadau"
 
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
 msgctxt "#474"
 msgid "Off"
 msgstr "Diffodd"
@@ -2631,7 +2623,7 @@ msgstr "Ystod porth"
 
 msgctxt "#794"
 msgid "Allow programs on other systems to control XBMC"
-msgstr "Caniatáu i raglenni ar systemau eraill reoli XMBC"
+msgstr "Caniatáu i raglenni ar systemau eraill reoli XBMC"
 
 msgctxt "#795"
 msgid "Initial repeat delay (ms)"
@@ -5645,10 +5637,6 @@ msgctxt "#19017"
 msgid "TV recordings"
 msgstr "Recordiadau teledu"
 
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Ffolder rhagosodedig lluniau bach y Recordydd"
-
 msgctxt "#19019"
 msgid "Channels"
 msgstr "Sianeli"
@@ -8417,10 +8405,6 @@ msgctxt "#21365"
 msgid "Remove media share"
 msgstr "Tynnu rhaniad cyfrwng"
 
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Ffolder isdeitl"
-
 msgctxt "#21367"
 msgid "Movie & alternate subtitle directory"
 msgstr "Cyfeiriadur ffilmiau ac isdeitlau eraill"
@@ -8785,10 +8769,6 @@ msgctxt "#21458"
 msgid "Group by"
 msgstr "Grwpio yn ôl"
 
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lleoliad isdeitlau"
-
 msgctxt "#21461"
 msgid "Fixed"
 msgstr "Sefydlog"
@@ -9621,6 +9601,10 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr "Mae rhai ffeiliau ar goll yn y croen"
 
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Rhowch llinyn chwilio"
+
 msgctxt "#25000"
 msgid "Notifications"
 msgstr "Hysbysiadau"
@@ -9997,10 +9981,6 @@ msgctxt "#34007"
 msgid "Windows Media Audio 2 (FFmpeg wmav2)"
 msgstr "Sain Windows Media 2 (FFmpeg wmav2)"
 
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Ffurfweddu Seinydd"
-
 msgctxt "#34101"
 msgid "2.0"
 msgstr "2.0"
@@ -10825,6 +10805,14 @@ msgctxt "#36420"
 msgid "No info available yet."
 msgstr "Dim gwybodaeth ar gael ar hyn o bryd."
 
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Newid i sianel"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Recordio"
+
 msgctxt "#36502"
 msgid "None"
 msgstr "Dim"
index 5cef736..af13a15 100644 (file)
@@ -94,7 +94,7 @@ public:
   virtual AVDictionary* av_frame_get_metadata(const AVFrame* frame)=0;
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN)
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 
 // Use direct layer
 class DllAvCodec : public DllDynamic, DllAvCodecInterface
@@ -166,7 +166,7 @@ public:
   // DLL faking.
   virtual bool ResolveExports() { return true; }
   virtual bool Load() {
-#if !defined(TARGET_DARWIN)
+#if !defined(TARGET_DARWIN) && !defined(USE_STATIC_FFMPEG)
     CLog::Log(LOGDEBUG, "DllAvCodec: Using libavcodec system library");
 #endif
     return true;
index 2200bfa..05e5c6f 100644 (file)
@@ -104,7 +104,7 @@ public:
 #endif
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN)
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 // Use direct mapping
 class DllAvFilter : public DllDynamic, DllAvFilterInterface
 {
index 0016c0b..fc7e166 100644 (file)
@@ -41,7 +41,7 @@ extern "C" {
   void xbmc_read_frame_flush(AVFormatContext *s);
 #else
   #include "libavformat/avformat.h"
-  #if defined(TARGET_DARWIN)
+  #if defined(TARGET_DARWIN) || defined(USE_STATIC_FFMPEG)
     void ff_read_frame_flush(AVFormatContext *s);    // internal replacement 
     #define xbmc_read_frame_flush ff_read_frame_flush
   #endif
@@ -73,7 +73,7 @@ public:
   virtual int av_read_play(AVFormatContext *s)=0;
   virtual int av_read_pause(AVFormatContext *s)=0;
   virtual int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)=0;
-#if (!defined USE_EXTERNAL_FFMPEG) && (!defined TARGET_DARWIN)
+#if (!defined USE_EXTERNAL_FFMPEG) && (!defined TARGET_DARWIN) && (!defined USE_STATIC_FFMPEG)
   virtual int avformat_find_stream_info_dont_call(AVFormatContext *ic, AVDictionary **options)=0;
 #endif
   virtual int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)=0;
@@ -108,7 +108,7 @@ public:
 #endif
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) 
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 
 // Use direct mapping
 class DllAvFormat : public DllDynamic, DllAvFormatInterface
@@ -170,7 +170,7 @@ public:
   // DLL faking.
   virtual bool ResolveExports() { return true; }
   virtual bool Load() {
-#if !defined(TARGET_DARWIN)
+#if !defined(TARGET_DARWIN) && !defined(USE_STATIC_FFMPEG)
     CLog::Log(LOGDEBUG, "DllAvFormat: Using libavformat system library");
 #endif
     CSingleLock lock(DllAvCodec::m_critSection);
index ce5889b..0fcdf10 100644 (file)
@@ -116,7 +116,7 @@ public:
 #endif
 };
 
-#if defined (USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN)
+#if defined (USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 // Use direct layer
 class DllAvUtilBase : public DllDynamic, DllAvUtilInterface
 {
@@ -174,7 +174,7 @@ public:
    // DLL faking.
    virtual bool ResolveExports() { return true; }
    virtual bool Load() {
-#if !defined(TARGET_DARWIN)
+#if !defined(TARGET_DARWIN) && !defined(USE_STATIC_FFMPEG)
      CLog::Log(LOGDEBUG, "DllAvUtilBase: Using libavutil system library");
 #endif
      return true;
index 0265651..e9542eb 100644 (file)
@@ -78,7 +78,7 @@ public:
   virtual void pp_free_context(pp_context *ppContext)=0;
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) 
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 
 // We call directly.
 class DllPostProc : public DllDynamic, DllPostProcInterface
index 854d250..cd1452b 100644 (file)
@@ -60,7 +60,7 @@ public:
   virtual int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance) = 0;
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) 
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 
 // Use direct mapping
 class DllSwResample : public DllDynamic, DllSwResampleInterface
@@ -71,7 +71,7 @@ public:
   // DLL faking.
   virtual bool ResolveExports() { return true; }
   virtual bool Load() {
-#if !defined(TARGET_DARWIN)
+#if !defined(TARGET_DARWIN) && !defined(USE_STATIC_FFMPEG)
     CLog::Log(LOGDEBUG, "DllAvFormat: Using libswresample system library");
 #endif
     return true;
index 36bb616..97e3b40 100644 (file)
@@ -87,7 +87,7 @@ public:
    virtual void sws_freeContext(struct SwsContext *context)=0;
 };
 
-#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) 
+#if (defined USE_EXTERNAL_FFMPEG) || (defined TARGET_DARWIN) || (defined USE_STATIC_FFMPEG)
 
 // We call into this library directly.
 class DllSwScale : public DllDynamic, public DllSwScaleInterface
@@ -111,7 +111,7 @@ public:
   // DLL faking.
   virtual bool ResolveExports() { return true; }
   virtual bool Load() {
-#if !defined(TARGET_DARWIN)
+#if !defined(TARGET_DARWIN) && !defined(USE_STATIC_FFMPEG)
     CLog::Log(LOGDEBUG, "DllSwScale: Using libswscale system library");
 #endif
     return true;
index 906219c..ca18a4a 100644 (file)
@@ -27,6 +27,7 @@ endif
 
 LIBS=
 ifneq (@USE_EXTERNAL_FFMPEG@,1)
+ifneq (@USE_STATIC_FFMPEG@,1)
   LIBS+=$(AVUTIL_SO) \
        $(AVCODEC_SO) \
        $(AVFORMAT_SO) \
@@ -35,10 +36,12 @@ ifneq (@USE_EXTERNAL_FFMPEG@,1)
        $(SWSCALE_SO) \
        $(SWRESAMPLE_SO)
 endif
+endif
 
 .PHONY: $(DIRS) codecs
 
 ifneq ($(findstring osx,$(ARCH)), osx)
+ifneq (@USE_STATIC_FFMPEG@,1)
 
 codecs: $(addprefix $(SYSDIR)/, $(LIBS));
 
@@ -71,6 +74,17 @@ ffmpeg/libswscale/libswscale.so   : ffmpeg;
 ffmpeg/libpostproc/libpostproc.so : ffmpeg;
 ffmpeg/libswresample/libswresample.so : ffmpeg;
 endif
+endif
+
+ifeq (@USE_STATIC_FFMPEG@,1)
+ffmpeg/libavutil/libavutil.a     : ffmpeg;
+ffmpeg/libavcodec/libavcodec.a   : ffmpeg;
+ffmpeg/libavformat/libavformat.a : ffmpeg;
+ffmpeg/libavfilter/libavfilter.a : ffmpeg;
+ffmpeg/libswscale/libswscale.a   : ffmpeg;
+ffmpeg/libpostproc/libpostproc.a : ffmpeg;
+ffmpeg/libswresample/libswresample.a : ffmpeg;
+endif
 
 ffmpeg:
        $(MAKE) -C $@
index d6f8ac8..8e13953 100644 (file)
@@ -94,6 +94,8 @@ int DetectFileType(const BYTE* pBuffer, int nBufSize)
     // don't include the last APP0 byte (0xE0), as some (non-conforming) JPEG/JFIF files might have some other
     // APPn-specific data here, and we should skip over this.
     return CXIMAGE_FORMAT_JPG;
+  if (pBuffer[0] == 'G' && pBuffer[1] == 'I' && pBuffer[2] == 'F')
+    return CXIMAGE_FORMAT_GIF;
   return CXIMAGE_FORMAT_UNKNOWN;
 }
 
index 7a871c4..12dbfcf 100644 (file)
@@ -505,6 +505,25 @@ static int set_default_channel_config(AVCodecContext *avctx,
     }
     *tags = tags_per_config[channel_config];
     memcpy(layout_map, aac_channel_layout_map[channel_config-1], *tags * sizeof(*layout_map));
+
+    /*
+     * AAC specification has 7.1(wide) as a default layout for 8-channel streams.
+     * However, at least Nero AAC encoder encodes 7.1 streams using the default
+     * channel config 7, mapping the side channels of the original audio stream
+     * to the second AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD
+     * decodes the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding
+     * the incorrect streams as if they were correct (and as the encoder intended).
+     *
+     * As actual intended 7.1(wide) streams are very rare, default to assuming a
+     * 7.1 layout was intended.
+     */
+    if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
+        av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
+               " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
+               " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
+        layout_map[2][2] = AAC_CHANNEL_SIDE;
+    }
+
     return 0;
 }
 
index 881b48d..ac39e06 100644 (file)
@@ -86,7 +86,6 @@ struct dxva_context {
      * Private to the FFmpeg AVHWAccel implementation
      */
     unsigned report_id;
-    unsigned last_slice_count;
 };
 
 /**
index e967770..5db7316 100644 (file)
 
 #include "dxva2_internal.h"
 
+#define MAX_SLICES 1024
 struct dxva2_picture_context {
     DXVA_PictureParameters pp;
     DXVA_QmatrixData       qm;
     unsigned               slice_count;
-    DXVA_SliceInfo         *slice;
-    unsigned int           slice_alloc;
-
+    DXVA_SliceInfo         slice[MAX_SLICES];
     const uint8_t          *bitstream;
     unsigned               bitstream_size;
 };
@@ -220,20 +219,9 @@ static int dxva2_mpeg2_start_frame(AVCodecContext *avctx,
     fill_quantization_matrices(avctx, ctx, s, &ctx_pic->qm);
 
     ctx_pic->slice_count    = 0;
-    ctx_pic->slice          = NULL;
-    ctx_pic->slice_alloc    = 0;
     ctx_pic->bitstream_size = 0;
     ctx_pic->bitstream      = NULL;
 
-    if (ctx->last_slice_count > 0)
-    {
-        ctx_pic->slice = av_fast_realloc(NULL,
-                                         &ctx_pic->slice_alloc,
-                                         ctx->last_slice_count * sizeof(DXVA_SliceInfo));
-        if (!ctx_pic->slice)
-            return -1;
-    }
-
     return 0;
 }
 
@@ -244,14 +232,9 @@ static int dxva2_mpeg2_decode_slice(AVCodecContext *avctx,
     struct dxva2_picture_context *ctx_pic =
         s->current_picture_ptr->f.hwaccel_picture_private;
     unsigned position;
-    DXVA_SliceInfo* slice;
 
-    slice = av_fast_realloc(ctx_pic->slice,
-                            &ctx_pic->slice_alloc,
-                            (ctx_pic->slice_count + 1) * sizeof(DXVA_SliceInfo));
-    if (!slice)
+    if (ctx_pic->slice_count >= MAX_SLICES)
         return -1;
-    ctx_pic->slice = slice;
 
     if (!ctx_pic->bitstream)
         ctx_pic->bitstream = buffer;
@@ -268,7 +251,6 @@ static int dxva2_mpeg2_end_frame(AVCodecContext *avctx)
     struct MpegEncContext *s = avctx->priv_data;
     struct dxva2_picture_context *ctx_pic =
         s->current_picture_ptr->f.hwaccel_picture_private;
-    struct dxva_context *ctx = avctx->hwaccel_context;
     int ret;
 
     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
@@ -280,7 +262,6 @@ static int dxva2_mpeg2_end_frame(AVCodecContext *avctx)
     if (!ret)
         ff_mpeg_draw_horiz_band(s, 0, avctx->height);
 
-    ctx->last_slice_count = ctx_pic->slice_count;
     return ret;
 }
 
index 7de6059..2bfb680 100644 (file)
@@ -105,6 +105,7 @@ typedef struct HLSContext {
     AVIOInterruptCB *interrupt_callback;
     char *user_agent;                    ///< holds HTTP user agent set as an AVOption to the HTTP protocol context
     char *cookies;                       ///< holds HTTP cookie values set in either the initial response or as an AVOption to the HTTP protocol context
+    char *headers;                       ///< holds HTTP headers set as an AVOption to the HTTP protocol context (kow|mitm)
 } HLSContext;
 
 static int read_chomp_line(AVIOContext *s, char *buf, int maxlen)
@@ -224,6 +225,7 @@ static int parse_playlist(HLSContext *c, const char *url,
         // broker prior HTTP options that should be consistent across requests
         av_dict_set(&opts, "user-agent", c->user_agent, 0);
         av_dict_set(&opts, "cookies", c->cookies, 0);
+        av_dict_set(&opts, "headers", c->headers, 0); // (kow|mitm)
 
         ret = avio_open2(&in, url, AVIO_FLAG_READ,
                          c->interrupt_callback, &opts);
@@ -346,6 +348,7 @@ static int open_input(HLSContext *c, struct variant *var)
     // broker prior HTTP options that should be consistent across requests
     av_dict_set(&opts, "user-agent", c->user_agent, 0);
     av_dict_set(&opts, "cookies", c->cookies, 0);
+    av_dict_set(&opts, "headers", c->headers, 0); // (kow|mitm)
     av_dict_set(&opts, "seekable", "0", 0);
 
     if (seg->key_type == KEY_NONE) {
@@ -494,6 +497,12 @@ static int hls_read_header(AVFormatContext *s)
         av_opt_get(u->priv_data, "cookies", 0, (uint8_t**)&(c->cookies));
         if (c->cookies && !strlen(c->cookies))
             av_freep(&c->cookies);
+            
+        // get the previous headers & set back to null if string size is zero (kow|mitm)
+        av_freep(&c->headers);
+        av_opt_get(u->priv_data, "headers", 0, (uint8_t**)&(c->headers));
+        if (c->headers && !strlen(c->headers))
+            av_freep(&c->headers);
     }
 
     if ((ret = parse_playlist(c, s->filename, NULL, s->pb)) < 0)
index 1e3cff7..ef81d14 100644 (file)
@@ -409,8 +409,11 @@ static int get_cookies(HTTPContext *s, char **cookies, const char *path,
                 av_free(cpath);
                 cpath = av_strdup(&param[5]);
             } else if (!av_strncasecmp("domain=", param, 7)) {
+                // if the cookie specifies a sub-domain, skip the leading dot thereby
+                // supporting URLs that point to sub-domains and the master domain
+                int leading_dot = (param[7] == '.');
                 av_free(cdomain);
-                cdomain = av_strdup(&param[7]);
+                cdomain = av_strdup(&param[7+leading_dot]);
             } else if (!av_strncasecmp("secure",  param, 6) ||
                        !av_strncasecmp("comment", param, 7) ||
                        !av_strncasecmp("max-age", param, 7) ||
index 4f25686..1ae699b 100644 (file)
@@ -90,6 +90,9 @@ struct Program {
     unsigned int id; //program id/service id
     unsigned int nb_pids;
     unsigned int pids[MAX_PIDS_PER_PROGRAM];
+
+    /** have we found pmt for this program */
+    int pmt_found;
 };
 
 struct MpegTSContext {
@@ -186,6 +189,17 @@ typedef struct PESContext {
 
 extern AVInputFormat ff_mpegts_demuxer;
 
+static struct Program * get_program(MpegTSContext *ts, unsigned int programid)
+{
+    int i;
+    for(i=0; i<ts->nb_prg; i++) {
+        if(ts->prg[i].id == programid) {
+            return &ts->prg[i];
+        }
+    }
+    return NULL;
+}
+
 static void clear_avprogram(MpegTSContext *ts, unsigned int programid)
 {
     AVProgram *prg = NULL;
@@ -206,8 +220,10 @@ static void clear_program(MpegTSContext *ts, unsigned int programid)
 
     clear_avprogram(ts, programid);
     for(i=0; i<ts->nb_prg; i++)
-        if(ts->prg[i].id == programid)
+        if(ts->prg[i].id == programid) {
             ts->prg[i].nb_pids = 0;
+            ts->prg[i].pmt_found = 0;
+        }
 }
 
 static void clear_programs(MpegTSContext *ts)
@@ -226,19 +242,13 @@ static void add_pat_entry(MpegTSContext *ts, unsigned int programid)
     p = &ts->prg[ts->nb_prg];
     p->id = programid;
     p->nb_pids = 0;
+    p->pmt_found = 0;
     ts->nb_prg++;
 }
 
 static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned int pid)
 {
-    int i;
-    struct Program *p = NULL;
-    for(i=0; i<ts->nb_prg; i++) {
-        if(ts->prg[i].id == programid) {
-            p = &ts->prg[i];
-            break;
-        }
-    }
+    struct Program *p = get_program(ts, programid);
     if(!p)
         return;
 
@@ -247,6 +257,15 @@ static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned i
     p->pids[p->nb_pids++] = pid;
 }
 
+static void set_pmt_found(MpegTSContext *ts, unsigned int programid)
+{
+    struct Program *p = get_program(ts, programid);
+    if(!p)
+        return;
+
+    p->pmt_found = 1;
+}
+
 static void set_pcr_pid(AVFormatContext *s, unsigned int programid, unsigned int pid)
 {
     int i;
@@ -1531,6 +1550,8 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
     if (!ts->stream->nb_streams)
         ts->stop_parse = 2;
 
+    set_pmt_found(ts, h->id);
+
     for(;;) {
         st = 0;
         pes = NULL;
@@ -1847,6 +1868,21 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
                                    p, p_end - p, 0);
             }
         }
+
+        // stop find_stream_info from waiting for more streams
+        // when all programs have received a PMT
+        if( ts->stream->ctx_flags & AVFMTCTX_NOHEADER) {
+            int i;
+            for(i=0; i<ts->nb_prg; i++) {
+                if (!ts->prg[i].pmt_found)
+                    break;
+            }
+            if (i == ts->nb_prg && ts->nb_prg > 0) {
+                av_log(ts->stream, AV_LOG_DEBUG, "All programs have pmt, headers found\n");
+                ts->stream->ctx_flags &= ~AVFMTCTX_NOHEADER;
+            }
+        }
+
     } else {
         int ret;
         // Note: The position here points actually behind the current packet.
@@ -2101,10 +2137,7 @@ static int mpegts_read_header(AVFormatContext *s)
 
         av_dlog(ts->stream, "tuning done\n");
 
-        /* only flag NOHEADER if we are in file mode,
-           in streaming mode scanning may take too long for users */
-        if (pb->seekable)
-            s->ctx_flags |= AVFMTCTX_NOHEADER;
+        s->ctx_flags |= AVFMTCTX_NOHEADER;
     } else {
         AVStream *st;
         int pcr_pid, pid, nb_packets, nb_pcrs, ret, pcr_l;
index 9281558..93dafee 100644 (file)
@@ -20,18 +20,6 @@ index c374cb9..6da6db5 100644
                          pes->st = avformat_new_stream(ts->stream, NULL);
                          if (!pes->st)
                              return AVERROR(ENOMEM);
-@@ -2013,7 +2013,10 @@ static int mpegts_read_header(AVFormatContext *s,
-         av_dlog(ts->stream, "tuning done\n");
--        s->ctx_flags |= AVFMTCTX_NOHEADER;
-+        /* only flag NOHEADER if we are in file mode,
-+           in streaming mode scanning may take too long for users */
-+        if (pb->seekable)
-+            s->ctx_flags |= AVFMTCTX_NOHEADER;
-     } else {
-         AVStream *st;
-         int pcr_pid, pid, nb_packets, nb_pcrs, ret, pcr_l;
 -- 
 1.7.9.4
 
diff --git a/lib/ffmpeg/patches/0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch b/lib/ffmpeg/patches/0018-dxva-mpeg2-Allocate-slices-array-dynamically-fixes-v.patch
deleted file mode 100644 (file)
index 87e31c5..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-From 40f4c15370f7027dc5422edcb10e8a3b7e58e83d Mon Sep 17 00:00:00 2001
-From: CrystalP <CrystalP@xbmc.org>
-Date: Wed, 5 Oct 2011 12:38:30 -0400
-Subject: [PATCH 18/24] dxva-mpeg2 Allocate slices array dynamically - fixes
- videos with > 175 slices. They used to result in
- images with a black bottom.
-
-sample on team ftp samples/PR471/too_many_slices.ts
-
-Inspired by the vaapi code to reallocate the slices array for each new slice.
-Could be more efficient if the array could be preserved for all frames and
-freed only at the end of the video, but there doesn't seem to be anywhere
-appropriate to free the memory at the end.
-
-Alternative is to allocate the proper size straight away for a new frame,
-instead of realloc'ing for each slice.
----
- libavcodec/dxva2_mpeg2.c |   14 +++++++++++---
- 1 file changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/libavcodec/dxva2_mpeg2.c b/libavcodec/dxva2_mpeg2.c
-index 951305d..8ba83b6 100644
---- a/libavcodec/dxva2_mpeg2.c
-+++ b/libavcodec/dxva2_mpeg2.c
-@@ -22,12 +22,12 @@
- #include "dxva2_internal.h"
--#define MAX_SLICES (SLICE_MAX_START_CODE - SLICE_MIN_START_CODE + 1)
- struct dxva2_picture_context {
-     DXVA_PictureParameters pp;
-     DXVA_QmatrixData       qm;
-     unsigned               slice_count;
--    DXVA_SliceInfo         slice[MAX_SLICES];
-+    DXVA_SliceInfo         *slice;
-+    unsigned int           slice_alloc;
-     const uint8_t          *bitstream;
-     unsigned               bitstream_size;
-@@ -220,6 +220,8 @@ static int start_frame(AVCodecContext *avctx,
-     fill_quantization_matrices(avctx, ctx, s, &ctx_pic->qm);
-     ctx_pic->slice_count    = 0;
-+    ctx_pic->slice          = NULL;
-+    ctx_pic->slice_alloc    = 0;
-     ctx_pic->bitstream_size = 0;
-     ctx_pic->bitstream      = NULL;
-     return 0;
-@@ -232,9 +234,14 @@ static int decode_slice(AVCodecContext *avctx,
-     struct dxva2_picture_context *ctx_pic =
-         s->current_picture_ptr->f.hwaccel_picture_private;
-     unsigned position;
-+    DXVA_SliceInfo* slice;
--    if (ctx_pic->slice_count >= MAX_SLICES)
-+    slice = av_fast_realloc(ctx_pic->slice,
-+                            &ctx_pic->slice_alloc,
-+                            (ctx_pic->slice_count + 1) * sizeof(DXVA_SliceInfo));
-+    if (!slice)
-         return -1;
-+    ctx_pic->slice = slice;
-     if (!ctx_pic->bitstream)
-         ctx_pic->bitstream = buffer;
-@@ -258,6 +265,7 @@ static int end_frame(AVCodecContext *avctx)
-                                      &ctx_pic->pp, sizeof(ctx_pic->pp),
-                                      &ctx_pic->qm, sizeof(ctx_pic->qm),
-                                      commit_bitstream_and_slice_buffer);
-+    av_freep(ctx_pic->slice);
- }
- AVHWAccel ff_mpeg2_dxva2_hwaccel = {
--- 
-1.7.9.4
-
diff --git a/lib/ffmpeg/patches/0019-dxva-mpeg2-speed-up-slice-allocation.patch b/lib/ffmpeg/patches/0019-dxva-mpeg2-speed-up-slice-allocation.patch
deleted file mode 100644 (file)
index 4336c31..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-From 681f74b224e16a4df7f8c4e31a9be56975d57e10 Mon Sep 17 00:00:00 2001
-From: CrystalP <CrystalP@xbmc.org>
-Date: Mon, 10 Oct 2011 19:42:50 -0400
-Subject: [PATCH 19/24] dxva-mpeg2 speed up slice allocation
-
-The number of slices is not very likely to change from frame to frame, so
-at the beginning of a new frame, allocate memory for the amount of slices of
-the previous frame. Saves a lot of reallocation, for some TV capture samples
-there are over 200 slices.
-
-There wasn't anywhere really appropriate to store last_slice_count (needs to
-live from first frame to last frame), so this is likely to cause discussion to
-merge upstream.
-Adding members to dxva_context breaks ABI, which we don't care too much about
-since on Windows we don't support external ffmpeg.
-dxva mpeg2 code also has access to MpegEncContext, but adding there would
-likely break ABI as well.
----
- libavcodec/dxva2.h       |    1 +
- libavcodec/dxva2_mpeg2.c |   12 ++++++++++++
- 2 files changed, 13 insertions(+)
-
-diff --git a/libavcodec/dxva2.h b/libavcodec/dxva2.h
-index fc99560..16a6994 100644
---- a/libavcodec/dxva2.h
-+++ b/libavcodec/dxva2.h
-@@ -66,6 +66,7 @@ struct dxva_context {
-      * Private to the FFmpeg AVHWAccel implementation
-      */
-     unsigned report_id;
-+    unsigned last_slice_count;
- };
- #endif /* AVCODEC_DXVA_H */
-diff --git a/libavcodec/dxva2_mpeg2.c b/libavcodec/dxva2_mpeg2.c
-index 8ba83b6..90507f9 100644
---- a/libavcodec/dxva2_mpeg2.c
-+++ b/libavcodec/dxva2_mpeg2.c
-@@ -222,6 +222,16 @@
-     ctx_pic->slice_count    = 0;
-     ctx_pic->bitstream_size = 0;
-     ctx_pic->bitstream      = NULL;
-+
-+    if (ctx->last_slice_count > 0)
-+    {
-+        ctx_pic->slice = av_fast_realloc(NULL,
-+                                         &ctx_pic->slice_alloc,
-+                                         ctx->last_slice_count * sizeof(DXVA_SliceInfo));
-+        if (!ctx_pic->slice)
-+            return -1;
-+    }
-+
-     return 0;
- }
-
-@@ -251,6 +261,7 @@
-     struct MpegEncContext *s = avctx->priv_data;
-     struct dxva2_picture_context *ctx_pic =
-         s->current_picture_ptr->f.hwaccel_picture_private;
-+    struct dxva_context *ctx = avctx->hwaccel_context;
-     int ret;
-
-     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
-@@ -261,6 +272,8 @@
-                                     commit_bitstream_and_slice_buffer);
-     if (!ret)
-         ff_mpeg_draw_horiz_band(s, 0, avctx->height);
-+
-+    ctx->last_slice_count = ctx_pic->slice_count;
-     return ret;
- }
-
--- 
-1.7.9.4
-
diff --git a/lib/ffmpeg/patches/0058-backport-fixed-not-keeping-custom-http-headers.patch b/lib/ffmpeg/patches/0058-backport-fixed-not-keeping-custom-http-headers.patch
new file mode 100644 (file)
index 0000000..d57b5b5
--- /dev/null
@@ -0,0 +1,53 @@
+From 9fb6300b1cc36c8111cee017fbb8a3e37b0c4e68 Mon Sep 17 00:00:00 2001
+From: siriuzwhite <siriuz@gmx.net>
+Date: Sun, 10 Nov 2013 23:26:16 +0100
+Subject: [PATCH] [backport] fixed ffmpeg not keep custom http headers when
+ playing hls stream
+
+---
+ lib/ffmpeg/libavformat/hls.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/lib/ffmpeg/libavformat/hls.c b/lib/ffmpeg/libavformat/hls.c
+index 7de6059..2e3fd00 100644
+--- a/lib/ffmpeg/libavformat/hls.c
++++ b/lib/ffmpeg/libavformat/hls.c
+@@ -105,6 +105,7 @@ struct variant {
+     AVIOInterruptCB *interrupt_callback;
+     char *user_agent;                    ///< holds HTTP user agent set as an AVOption to the HTTP protocol context
+     char *cookies;                       ///< holds HTTP cookie values set in either the initial response or as an AVOption to the HTTP protocol context
++    char *headers;                                 ///< holds HTTP headers set as an AVOption to the HTTP protocol context (kow|mitm)
+ } HLSContext;
+ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen)
+@@ -224,6 +225,7 @@ static int parse_playlist(HLSContext *c, const char *url,
+         // broker prior HTTP options that should be consistent across requests
+         av_dict_set(&opts, "user-agent", c->user_agent, 0);
+         av_dict_set(&opts, "cookies", c->cookies, 0);
++        av_dict_set(&opts, "headers", c->headers, 0); // (kow|mitm)
+         ret = avio_open2(&in, url, AVIO_FLAG_READ,
+                          c->interrupt_callback, &opts);
+@@ -346,6 +348,7 @@ static int open_input(HLSContext *c, struct variant *var)
+     // broker prior HTTP options that should be consistent across requests
+     av_dict_set(&opts, "user-agent", c->user_agent, 0);
+     av_dict_set(&opts, "cookies", c->cookies, 0);
++    av_dict_set(&opts, "headers", c->headers, 0); // (kow|mitm)
+     av_dict_set(&opts, "seekable", "0", 0);
+     if (seg->key_type == KEY_NONE) {
+@@ -494,6 +497,12 @@ static int hls_read_header(AVFormatContext *s)
+         av_opt_get(u->priv_data, "cookies", 0, (uint8_t**)&(c->cookies));
+         if (c->cookies && !strlen(c->cookies))
+             av_freep(&c->cookies);
++            
++        // get the previous headers & set back to null if string size is zero (kow|mitm)
++        av_freep(&c->headers);
++        av_opt_get(u->priv_data, "headers", 0, (uint8_t**)&(c->headers));
++        if (c->headers && !strlen(c->headers))
++            av_freep(&c->headers);
+     }
+     if ((ret = parse_playlist(c, s->filename, NULL, s->pb)) < 0)
+-- 
+1.8.4
diff --git a/lib/ffmpeg/patches/0060-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch b/lib/ffmpeg/patches/0060-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch
new file mode 100644 (file)
index 0000000..53a385c
--- /dev/null
@@ -0,0 +1,67 @@
+From 59f16d529fdcb4c5db53ce3bd289aa8148a13de4 Mon Sep 17 00:00:00 2001
+From: Anssi Hannula <anssi.hannula@iki.fi>
+Date: Tue, 17 Dec 2013 23:04:31 +0200
+Subject: [PATCH] [ffmpeg] - backport - avcodec/aacdec: default to non-wide 7.1
+ in non-strict mode
+
+Upstream commit e10fccf62a36e09b54ad6ea3d5fa6638f298d5ae, for
+http://trac.xbmc.org/ticket/13758.
+
+AAC specification has 7.1(wide) as a default layout for 8-channel
+streams (channel config 7). However, at least Nero AAC encoder encodes
+non-wide 7.1 streams using the default channel config 7, mapping the
+side channels of the original audio stream to the second
+AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD decodes
+the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding
+the incorrect streams as if they were correct (and as the encoder
+intended).
+
+FFmpeg currently decodes such files by-the-spec, i.e. after decoding the
+original front pair will be in AV_CH_FRONT_x_OF_CENTER and the original
+side pair will be in AV_CH_FRONT_x.
+
+As actual intended 7.1(wide) streams are very rare while misencoded 7.1
+files actually exist in the wild, default to assuming a 7.1 layout was
+intended unless in strict mode.
+
+Fixes playback of e.g. 8_Channel_ID.m4a in samples.
+
+Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ lib/ffmpeg/libavcodec/aacdec.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/lib/ffmpeg/libavcodec/aacdec.c b/lib/ffmpeg/libavcodec/aacdec.c
+index 7a871c4..12dbfcf 100644
+--- a/lib/ffmpeg/libavcodec/aacdec.c
++++ b/lib/ffmpeg/libavcodec/aacdec.c
+@@ -505,6 +505,25 @@ static int set_default_channel_config(AVCodecContext *avctx,
+     }
+     *tags = tags_per_config[channel_config];
+     memcpy(layout_map, aac_channel_layout_map[channel_config-1], *tags * sizeof(*layout_map));
++
++    /*
++     * AAC specification has 7.1(wide) as a default layout for 8-channel streams.
++     * However, at least Nero AAC encoder encodes 7.1 streams using the default
++     * channel config 7, mapping the side channels of the original audio stream
++     * to the second AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD
++     * decodes the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding
++     * the incorrect streams as if they were correct (and as the encoder intended).
++     *
++     * As actual intended 7.1(wide) streams are very rare, default to assuming a
++     * 7.1 layout was intended.
++     */
++    if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
++        av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
++               " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
++               " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
++        layout_map[2][2] = AAC_CHANNEL_SIDE;
++    }
++
+     return 0;
+ }
+-- 
+1.8.1.5
+
diff --git a/lib/ffmpeg/patches/0060-mpegts-stop-analyzing-when-pmt-for-all-programs-have.patch b/lib/ffmpeg/patches/0060-mpegts-stop-analyzing-when-pmt-for-all-programs-have.patch
new file mode 100644 (file)
index 0000000..ed23469
--- /dev/null
@@ -0,0 +1,135 @@
+From 120e44f817d73572d14a3db4af24a3d517aaacd8 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <elupus@ecce.se>
+Date: Sat, 14 Dec 2013 14:55:13 +0100
+Subject: [PATCH 1/1] mpegts: stop analyzing when pmt for all programs have
+ been found
+
+This disables NOHEADER after finding PMT for all programs to
+avoid find_stream_info always exhausting probe size for mpegts.
+
+This is very important for live streams since read speed
+will be limited. rtsp, udp and any protocol streaming a live
+mpegts will have dramatically faster startup time.
+
+Note, lack of codec parameters for streams can still cause
+the full probe size to be exhausted.
+---
+ libavformat/mpegts.c | 54 +++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 45 insertions(+), 9 deletions(-)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index d67c63a..fa92fb7 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -90,6 +90,9 @@ struct Program {
+     unsigned int id; //program id/service id
+     unsigned int nb_pids;
+     unsigned int pids[MAX_PIDS_PER_PROGRAM];
++
++    /** have we found pmt for this program */
++    int pmt_found;
+ };
+ struct MpegTSContext {
+@@ -205,6 +208,17 @@ typedef struct PESContext {
+ extern AVInputFormat ff_mpegts_demuxer;
++static struct Program * get_program(MpegTSContext *ts, unsigned int programid)
++{
++    int i;
++    for(i=0; i<ts->nb_prg; i++) {
++        if(ts->prg[i].id == programid) {
++            return &ts->prg[i];
++        }
++    }
++    return NULL;
++}
++
+ static void clear_avprogram(MpegTSContext *ts, unsigned int programid)
+ {
+     AVProgram *prg = NULL;
+@@ -225,8 +239,10 @@ static void clear_program(MpegTSContext *ts, unsigned int programid)
+     clear_avprogram(ts, programid);
+     for(i=0; i<ts->nb_prg; i++)
+-        if(ts->prg[i].id == programid)
++        if(ts->prg[i].id == programid) {
+             ts->prg[i].nb_pids = 0;
++            ts->prg[i].pmt_found = 0;
++        }
+ }
+ static void clear_programs(MpegTSContext *ts)
+@@ -245,19 +261,13 @@ static void add_pat_entry(MpegTSContext *ts, unsigned int programid)
+     p = &ts->prg[ts->nb_prg];
+     p->id = programid;
+     p->nb_pids = 0;
++    p->pmt_found = 0;
+     ts->nb_prg++;
+ }
+ static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned int pid)
+ {
+-    int i;
+-    struct Program *p = NULL;
+-    for(i=0; i<ts->nb_prg; i++) {
+-        if(ts->prg[i].id == programid) {
+-            p = &ts->prg[i];
+-            break;
+-        }
+-    }
++    struct Program *p = get_program(ts, programid);
+     if(!p)
+         return;
+@@ -266,6 +276,15 @@ static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned i
+     p->pids[p->nb_pids++] = pid;
+ }
++static void set_pmt_found(MpegTSContext *ts, unsigned int programid)
++{
++    struct Program *p = get_program(ts, programid);
++    if(!p)
++        return;
++
++    p->pmt_found = 1;
++}
++
+ static void set_pcr_pid(AVFormatContext *s, unsigned int programid, unsigned int pid)
+ {
+     int i;
+@@ -1590,6 +1609,8 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
+     if (!ts->stream->nb_streams)
+         ts->stop_parse = 2;
++    set_pmt_found(ts, h->id);
++
+     for(;;) {
+         st = 0;
+         pes = NULL;
+@@ -1912,6 +1933,21 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
+                                    p, p_end - p, 0);
+             }
+         }
++
++        // stop find_stream_info from waiting for more streams
++        // when all programs have received a PMT
++        if( ts->stream->ctx_flags & AVFMTCTX_NOHEADER) {
++            int i;
++            for(i=0; i<ts->nb_prg; i++) {
++                if (!ts->prg[i].pmt_found)
++                    break;
++            }
++            if (i == ts->nb_prg && ts->nb_prg > 0) {
++                av_log(ts->stream, AV_LOG_DEBUG, "All programs have pmt, headers found\n");
++                ts->stream->ctx_flags &= ~AVFMTCTX_NOHEADER;
++            }
++        }
++
+     } else {
+         int ret;
+         int64_t pcr = -1;
+-- 
+1.8.2
+
diff --git a/lib/ffmpeg/patches/0061-ffmpeg-backport-Correctly-handle-cookies-that-specify-a-sub-domain.patch b/lib/ffmpeg/patches/0061-ffmpeg-backport-Correctly-handle-cookies-that-specify-a-sub-domain.patch
new file mode 100644 (file)
index 0000000..1e894f8
--- /dev/null
@@ -0,0 +1,29 @@
+From aa1852f88f769ee438e85cec8552ff545914885c Mon Sep 17 00:00:00 2001
+From: Eli K. <eli@algotec.co.il>
+Date: Thu, 23 Jan 2014 10:27:21 +0200
+Subject: [PATCH] Correctly handle cookies that specify a sub-domain.
+
+---
+ libavformat/http.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/libavformat/http.c b/libavformat/http.c
+index 3b655c6..69c4d6d 100644
+--- a/libavformat/http.c
++++ b/libavformat/http.c
+@@ -490,8 +490,11 @@ static int get_cookies(HTTPContext *s, char **cookies, const char *path,
+                 av_free(cpath);
+                 cpath = av_strdup(&param[5]);
+             } else if (!av_strncasecmp("domain=", param, 7)) {
++                // if the cookie specifies a sub-domain, skip the leading dot thereby
++                // supporting URLs that point to sub-domains and the master domain
++                int leading_dot = (param[7] == '.');
+                 av_free(cdomain);
+-                cdomain = av_strdup(&param[7]);
++                cdomain = av_strdup(&param[7+leading_dot]);
+             } else if (!av_strncasecmp("secure",  param, 6) ||
+                        !av_strncasecmp("comment", param, 7) ||
+                        !av_strncasecmp("max-age", param, 7) ||
+-- 
+1.8.3.msysgit.0
+
diff --git a/lib/ffmpeg/patches/0062-backport-dxva2-bump-max-number-of-slices.patch b/lib/ffmpeg/patches/0062-backport-dxva2-bump-max-number-of-slices.patch
new file mode 100644 (file)
index 0000000..9d0e5cb
--- /dev/null
@@ -0,0 +1,28 @@
+From bceeccc648baf94a02b7b2c53e44bf77a47773ef Mon Sep 17 00:00:00 2001
+From: Rainer Hochecker <fernetmenta@online.de>
+Date: Mon, 27 Jan 2014 08:16:13 +0100
+Subject: [PATCH] dxva2: bump maximum number of slieces for mpeg2
+
+Suggested by heleppkes on https://trac.ffmpeg.org/ticket/3133
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/dxva2_mpeg2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/dxva2_mpeg2.c b/libavcodec/dxva2_mpeg2.c
+index 1827dd5..e2f6b70 100644
+--- a/libavcodec/dxva2_mpeg2.c
++++ b/libavcodec/dxva2_mpeg2.c
+@@ -22,7 +22,7 @@
+ #include "dxva2_internal.h"
+-#define MAX_SLICES (SLICE_MAX_START_CODE - SLICE_MIN_START_CODE + 1)
++#define MAX_SLICES 1024
+ struct dxva2_picture_context {
+     DXVA_PictureParameters pp;
+     DXVA_QmatrixData       qm;
+-- 
+1.8.5.1
+
index d6986be..85b5856 100644 (file)
@@ -510,7 +510,7 @@ PLT_MediaObject::FromDidl(NPT_XmlElementNode* entry)
     m_People.authors.FromDidl(children);
     
     children.Clear();
-    PLT_XmlHelper::GetChildren(entry, children, "actors", didl_namespace_upnp);
+    PLT_XmlHelper::GetChildren(entry, children, "actor", didl_namespace_upnp);
     m_People.actors.FromDidl(children);
 
     children.Clear();
@@ -559,7 +559,7 @@ PLT_MediaObject::FromDidl(NPT_XmlElementNode* entry)
     if (NPT_FAILED(str.ToInteger(value))) value = 0;
     m_MiscInfo.last_position = value;
 
-    PLT_XmlHelper::GetChildText(entry, "lastPlaybackTime", m_MiscInfo.last_time, didl_namespace_dc, 256);
+    PLT_XmlHelper::GetChildText(entry, "lastPlaybackTime", m_MiscInfo.last_time, didl_namespace_upnp, 256);
     NPT_String parsed_last_time;
     for (int format=0; format<=NPT_DateTime::FORMAT_RFC_1036; format++) {
         NPT_DateTime date;
index 7dc3e30..262b0d5 100644 (file)
@@ -7,8 +7,8 @@
 
 # lib name, version
 LIBNAME=libcec
-VERSION=2.1.1
-SOURCE=$(LIBNAME)-$(VERSION)
+VERSION=2.1.4
+SOURCE=$(LIBNAME)-$(VERSION)-2
 
 # download location and format
 BASE_URL=http://mirrors.xbmc.org/build-deps/darwin-libs
index ed00ad0..3babd83 100644 (file)
@@ -64,7 +64,7 @@ echo "***** Building libdvdnav *****"
       --disable-shared \
       --enable-static \
       --extra-cflags="-D_XBMC -DNDEBUG -I`pwd`/../includes" \
-      --with-dvdread-config="`pwd`/../libdvdread/obj/dvdread-config" \
+      --with-dvdread-config="`pwd`/../dvdread-config" \
       --disable-debug
 mkdir -p ../includes/dvdnav
 cp ../libdvdnav/src/dvdnav/*.h ../includes/dvdnav
diff --git a/lib/libdvd/dvdread-config b/lib/libdvd/dvdread-config
new file mode 100755 (executable)
index 0000000..b28b1ca
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+# this configfile is based on the original libdvdread config
+# 'dvdread-config' but stripped down to not output the include
+# and libdirs to not break crosscompiling with including
+# system includes and libraries
+
+prefix=/usr
+dvdreadlib="-ldvdread"
+
+usage()
+{
+       cat <<EOF
+Usage: dvdread-config [OPTIONS] [LIBRARIES]
+Options:
+       [--prefix[=DIR]]
+        [--libs]
+       [--cflags]
+EOF
+       exit $1
+}
+
+if test $# -eq 0; then
+       usage 1 1>&2
+fi
+
+while test $# -gt 0; do
+  case "$1" in
+  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  case $1 in
+    --prefix)
+      echo_prefix=yes
+      ;;
+    --cflags)
+      echo_cflags=yes
+      ;;
+    --libs)
+      echo_libs=yes
+      ;;
+    *)
+      usage 1 1>&2
+      ;;
+  esac
+  shift
+done
+
+if test "$echo_prefix" = "yes"; then
+       echo $prefix
+fi
+
+if test "$echo_cflags" = "yes"; then
+      echo $extracflags
+fi
+
+if test "$echo_libs" = "yes"; then
+      echo $dvdreadlib
+fi
index 1fc7dfb..a0bba16 100644 (file)
@@ -201,8 +201,10 @@ bool CIptcParse::Process (const unsigned char* const Data, const unsigned short
         // there may be multiple keywords - lets join them
         size_t maxLen = MAX_IPTC_STRING - strlen(tag);
         if (maxLen > 2)
+        {
           strcat(tag, ", ");
-        strncat(tag, pos, min(length, MAX_IPTC_STRING - maxLen - 3));
+          strncat(tag, pos, min(length, maxLen - 3));
+        }
       }
 /*      if (id == SLIDE_IPTC_CAPTION)
       {
diff --git a/lib/libnfs/Makefile b/lib/libnfs/Makefile
deleted file mode 100644 (file)
index 7cc2255..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#  A quick and dirty Makefile to download/build and install
-#
-#  Usage:
-#    make
-#    sudo make install
-
-# lib name, version
-LIBNAME=libnfs
-VERSION=1.3.0
-SOURCE=$(LIBNAME)-$(VERSION)
-# download location and format
-BASE_URL=http://mirrors.xbmc.org/build-deps/darwin-libs
-ARCHIVE=$(SOURCE).tar.gz
-TARBALLS_LOCATION=.
-RETRIEVE_TOOL=/usr/bin/curl
-RETRIEVE_TOOL_FLAGS=-Ls --create-dirs --output $(TARBALLS_LOCATION)/$(ARCHIVE)
-ARCHIVE_TOOL=tar
-ARCHIVE_TOOL_FLAGS=xf
-PREFIX ?= /usr
-LIBNFS_CONFIGOPTS ?= --prefix=$(PREFIX)
-# configuration settings
-
-CONFIGURE=./configure CFLAGS=-D_FILE_OFFSET_BITS=64 $(LIBNFS_CONFIGOPTS)
-
-SO_NAME=$(SOURCE)/lib/libnfs.so
-
-CLEAN_FILES=$(ARCHIVE) $(SOURCE)
-
-all: $(SO_NAME)
-
-$(TARBALLS_LOCATION)/$(ARCHIVE):
-       $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
-
-$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE)
-       rm -rf $(SOURCE)
-       $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
-       echo $(SOURCE) > .gitignore
-       cd $(SOURCE);./bootstrap;$(CONFIGURE)
-
-$(SO_NAME): $(SOURCE)
-       make -C $(SOURCE)
-
-install:
-       make -C $(SOURCE) install
-clean:
-       make -C $(SOURCE) clean
-       rm  -f .installed
-       rm -f -r include
-       rm -f -r lib
-       rm -f *.tar.gz
-       rm -r -f nfsc
-
-distclean::
-       rm -rf $(SOURCE) .installed
index 4b09663..a592a1f 100644 (file)
@@ -112,7 +112,9 @@ void xbmc_read_frame_flush(AVFormatContext *s)
 #define RELATIVE_TS_BASE (INT64_MAX - (1LL<<48))
         if(st->first_dts == AV_NOPTS_VALUE) st->cur_dts = RELATIVE_TS_BASE;
         else                                st->cur_dts = AV_NOPTS_VALUE; /* we set the current DTS to an unspecified origin */
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55,0,0)
         st->reference_dts = AV_NOPTS_VALUE;
+#endif
 
         st->probe_packets = MAX_PROBE_PACKETS;
 #endif
index 5ae75bc..75d25da 100644 (file)
@@ -2,10 +2,10 @@ AC_DEFUN([XBMC_SETUP_ARCH_DEFINES],[
 
 # host detection and setup
 case $host in
-  i*86*-linux-gnu*)
+  i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
      AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
      ;;
-  x86_64-*-linux-gnu*)
+  x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
      AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
      ;;
   i386-*-freebsd*)
@@ -23,10 +23,10 @@ case $host in
   powerpc-apple-darwin*)
      AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
      ;;
-  powerpc-*-linux-gnu*)
+  powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
      AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC")
      ;;
-  powerpc64-*-linux-gnu*)
+  powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*)
      AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC64")
      ;;
   arm*-*-linux-gnu*)
index d4f6f03..60cfe7a 100644 (file)
@@ -13,10 +13,14 @@ lame_enc-3.99.5-win32.7z
 libass-0.10.2-win32.7z
 libbluray-0.4.0-win32.zip
 libjpeg-turbo-1.2.0-win32.7z
-libnfs-1.6.1-win32.7z
+libnfs-1.6.2-win32.7z
 libshairplay-c159ca7-win32.7z
 libssh-0.5.0-1-win32.zip
+libxml2-2.7.8_1-win32.7z
+libxslt-1.1.26_1-win32.7z
+mysqlclient-vc100-6.1.3-win32.7z
 pcre-8.33_1-win32.7z
 python-2.7.5-2-win32.7z
-sqlite-3.7.16.1-win32.7z
+sqlite-3.7.16.2-win32.7z
 taglib-1.8-win32.7z
+tinyxml-2.6.2_3-win32.7z
index 065ce3a..a126c74 100644 (file)
@@ -1,3 +1,3 @@
 ; filename                        source of the file
 
-libcec-2.1.1.zip                  http://mirrors.xbmc.org/build-deps/win32/
+libcec-2.1.4.zip                  http://mirrors.xbmc.org/build-deps/win32/
diff --git a/project/BuildDependencies/scripts/mysqlclient_d.bat b/project/BuildDependencies/scripts/mysqlclient_d.bat
deleted file mode 100644 (file)
index f6046cf..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-@ECHO OFF
-
-SET LOC_PATH=%CD%
-SET FILES=%LOC_PATH%\mysqlclient_d.txt
-
-CALL dlextract.bat mysqlclient %FILES%
-
-cd %TMP_PATH%
-
-xcopy mysql-connector-c-noinstall-6.0.2-win32\include\* "%CUR_PATH%\include\mysql\" /E /Q /I /Y
-copy mysql-connector-c-noinstall-6.0.2-win32\lib\mysqlclient.lib "%CUR_PATH%\lib\" /Y
-
-cd %LOC_PATH%
diff --git a/project/BuildDependencies/scripts/mysqlclient_d.txt b/project/BuildDependencies/scripts/mysqlclient_d.txt
deleted file mode 100644 (file)
index 112d188..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-; filename                                      mirror                                      source of the file
-mysql-connector-c-noinstall-6.0.2-win32.zip     http://mirrors.xbmc.org/build-deps/win32/   http://ftp.gwdg.de/pub/misc/mysql/Downloads/Connector-C/
diff --git a/project/BuildDependencies/scripts/tinyxml_d.bat b/project/BuildDependencies/scripts/tinyxml_d.bat
deleted file mode 100644 (file)
index f1e55e5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-@ECHO ON
-
-SET LOC_PATH=%CD%
-SET FILES=%LOC_PATH%\tinyxml_d.txt
-
-CALL dlextract.bat tinyxml %FILES%
-
-cd %TMP_PATH%
-
-xcopy tinyxml-2.6.2-win32\include\tinyxml\* "%CUR_PATH%\include\" /E /Q /I /Y
-copy tinyxml-2.6.2-win32\lib\* "%CUR_PATH%\lib\" /Y
-
-cd %LOC_PATH%
diff --git a/project/BuildDependencies/scripts/tinyxml_d.txt b/project/BuildDependencies/scripts/tinyxml_d.txt
deleted file mode 100644 (file)
index 77ba3b7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-; filename                   mirror of the file
-tinyxml-2.6.2_1-win32.7z     http://mirrors.xbmc.org/build-deps/win32/
index 22bc863..798e0b7 100644 (file)
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+# Visual C++ Express 2010
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XBMC", "XBMC.vcxproj", "{3A68081D-E8F9-4523-9436-530DE9E5530A}"
        ProjectSection(ProjectDependencies) = postProject
                {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7} = {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}
@@ -82,6 +82,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "..\..\lib\gtest\ms
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libXBMC_codec", "..\..\lib\addons\library.xbmc.codec\project\VS2010Express\libXBMC_codec.vcxproj", "{F8F1290B-1188-4810-86C9-88178A31D2AF}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visVortex", "..\..\xbmc\visualizations\Vortex\Vortex\Vortex.vcxproj", "{AFF288D5-8A77-4817-8DD9-364E183CDBF8}"
+       ProjectSection(ProjectDependencies) = postProject
+               {034B1D02-CA92-455D-8866-DB95BEE49C10} = {034B1D02-CA92-455D-8866-DB95BEE49C10}
+       EndProjectSection
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug (DirectX)|Win32 = Debug (DirectX)|Win32
@@ -460,6 +465,16 @@ Global
                {F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (DirectX)|Win32.Build.0 = Release|Win32
                {F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
                {F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (OpenGL)|Win32.Build.0 = Release|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug Testsuite|Win32.Build.0 = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release (DirectX)|Win32.Build.0 = Release|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release (OpenGL)|Win32.Build.0 = Release|Win32
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 3d3b73f..3d9875c 100644 (file)
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libcmt;msvcrtd;msvcprtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <ModuleDefinitionFile>
       </ModuleDefinitionFile>
-      <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+      <DelayLoadDLLs>libxslt.dll;dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
       <EntryPointSymbol>
       </EntryPointSymbol>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libcmt;msvcrtd;msvcprtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <ModuleDefinitionFile>
       </ModuleDefinitionFile>
-      <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+      <DelayLoadDLLs>libxslt.dll;dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
       <SubSystem>Console</SubSystem>
       <EntryPointSymbol>
       <AdditionalDependencies>D3dx9.lib;DInput8.lib;DSound.lib;winmm.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;yajl.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)XBMC.exe</OutputFile>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libci;msvcprt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
+      <DelayLoadDLLs>libxslt.dll;dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
     <ClCompile Include="..\..\xbmc\interfaces\Builtins.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\generic\LanguageInvokerThread.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\generic\ScriptInvocationManager.cpp" />
+    <ClCompile Include="..\..\xbmc\interfaces\info\InfoBool.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\info\InfoExpression.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\info\SkinVariable.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\AddonsOperations.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderNSF.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderShn.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderSPC.cpp" />
-    <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderWav.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderYM.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\TagLibVFSStream.cpp" />
     <ClCompile Include="..\..\xbmc\music\tags\TagLoaderTagLib.cpp" />
     <ClInclude Include="..\..\xbmc\utils\Utf8Utils.h" />
     <ClInclude Include="..\..\xbmc\utils\uXstrings.h" />
     <ClInclude Include="..\..\xbmc\utils\Vector.h" />
+    <ClInclude Include="..\..\xbmc\utils\XSLTUtils.h" />
     <ClInclude Include="..\..\xbmc\video\FFmpegVideoDecoder.h" />
     <ClInclude Include="..\..\xbmc\interfaces\python\swig.h" />
     <ClInclude Include="..\..\xbmc\interfaces\python\XBPython.h" />
     <ClInclude Include="..\..\xbmc\music\MusicDbUrl.h" />
-    <ClInclude Include="..\..\xbmc\music\tags\MusicInfoTagLoaderWav.h" />
     <ClInclude Include="..\..\xbmc\music\tags\TagLibVFSStream.h" />
     <ClInclude Include="..\..\xbmc\music\tags\TagLoaderTagLib.h" />
     <ClInclude Include="..\..\xbmc\network\httprequesthandler\HTTPImageHandler.h" />
     </ClCompile>
     <ClCompile Include="..\..\xbmc\utils\Utf8Utils.cpp" />
     <ClCompile Include="..\..\xbmc\utils\Vector.cpp" />
+    <ClCompile Include="..\..\xbmc\utils\XSLTUtils.cpp" />
     <ClCompile Include="..\..\xbmc\video\PlayerController.cpp" />
     <ClCompile Include="..\..\xbmc\video\VideoThumbLoader.cpp" />
     <ClCompile Include="..\..\xbmc\music\MusicThumbLoader.cpp" />
index 007ffb9..b5e72d9 100644 (file)
     <ClCompile Include="..\..\xbmc\input\InertialScrollingHandler.cpp">
       <Filter>input</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\xbmc\interfaces\info\InfoBool.cpp">
+      <Filter>interfaces\info</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\info\InfoExpression.cpp">
       <Filter>interfaces\info</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\music\tags\TagLoaderTagLib.cpp">
       <Filter>music\tags</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\music\tags\MusicInfoTagLoaderWav.cpp">
-      <Filter>music\tags</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\python\test\TestSwig.cpp">
       <Filter>interfaces\python\test</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\utils\Utf8Utils.cpp">
       <Filter>utils</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\xbmc\utils\XSLTUtils.cpp">
+      <Filter>utils</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\xbmc\win32\pch.h">
     <ClInclude Include="..\..\xbmc\music\tags\TagLoaderTagLib.h">
       <Filter>music\tags</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\music\tags\MusicInfoTagLoaderWav.h">
-      <Filter>music\tags</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\AddonsOperations.h">
       <Filter>interfaces\json-rpc</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\utils\Utf8Utils.h">
       <Filter>utils</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\xbmc\utils\XSLTUtils.h">
+      <Filter>utils</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
index 54eab2a..db32e4e 100644 (file)
@@ -217,10 +217,9 @@ IF %comp%==vs2010 (
   Echo addons\visualization.fishbmc\>>exclude.txt
   Echo addons\visualization.projectm\>>exclude.txt
   Echo addons\visualization.glspectrum\>>exclude.txt
-  rem Exclude skins if not present
-  IF NOT EXIST  addons\skin.touched\addon.xml (
-    Echo addons\skin.touched\>>exclude.txt
-  )
+  rem Exclude skins as they're copied by their own script
+  Echo addons\skin.touched\>>exclude.txt
+  Echo addons\skin.confluence\>>exclude.txt
   rem other platform stuff
   Echo lib-osx>>exclude.txt
   Echo players\mplayer>>exclude.txt
@@ -246,6 +245,10 @@ IF %comp%==vs2010 (
   
   ECHO ------------------------------------------------------------
   call buildpvraddons.bat %NET%
+  IF %errorlevel%==1 (
+    set DIETEXT="failed to build pvr addons"
+    goto DIE
+  )
     
   IF EXIST error.log del error.log > NUL
   SET build_path=%CD%
index d20c206..94358ec 100644 (file)
@@ -259,6 +259,8 @@ Section "Uninstall"
   Delete "$INSTDIR\python27.dll"
   Delete "$INSTDIR\libcdio-*.dll"
   Delete "$INSTDIR\libiconv-2.dll"
+  Delete "$INSTDIR\libxml2.dll"
+  Delete "$INSTDIR\iconv.dll"
   RMDir /r "$INSTDIR\language"
   RMDir /r "$INSTDIR\media"
   RMDir /r "$INSTDIR\plugins"
index 0b49570..699c24f 100644 (file)
@@ -9,7 +9,7 @@ SET DEPS_DIR=..\BuildDependencies
 SET TMP_DIR=%DEPS_DIR%\tmp
 
 SET LIBNAME=xbmc-pvr-addons
-SET VERSION=d4cb4d5c0e7fc1a4b9a3b911c3053df178c36944
+SET VERSION=af29425b1e171419d72fb3a0475a10f4a862f0b7
 SET SOURCE=%LIBNAME%
 SET GIT_URL=git://github.com/opdenkamp/%LIBNAME%.git
 SET SOURCE_DIR=%TMP_DIR%\%SOURCE%
@@ -64,6 +64,10 @@ REM build xbmc-pvr-addons.sln
 ECHO Building PVR addons
 %1 %OPTS_EXE%
 
+IF %errorlevel%==1 (
+  goto fail
+)
+
 REM copy the built pvr addons into ADDONS_DIR
 CD "%BUILT_ADDONS_DIR%"
 SET ADDONS_DIR=..\..\..\..\Win32BuildSetup\BUILD_WIN32\Xbmc\xbmc-pvr-addons
@@ -91,6 +95,10 @@ GOTO done
 ECHO No git command available. Unable to fetch and build xbmc-pvr-addons.
 SET EXITCODE=1
 
+:fail
+ECHO Failed to build one or more pvr addons
+SET EXITCODE=1
+
 :done
 SET GITEXE=
 EXIT /B %EXITCODE%
index 735e9b1..1b6dc14 100644 (file)
 
        <remote device="linux-input-layer">
        <altname>cx23885_remote</altname>
-       <altname>devinput</altname>
                <left>KEY_LEFT</left>
                <right>KEY_RIGHT</right>
                <up>KEY_UP</up>
                <mypictures>yellow</mypictures>
                <myvideo>blue</myvideo>
        </remote>
+
+       <remote device="devinput">
+               <left>KEY_LEFT</left>
+               <right>KEY_RIGHT</right>
+               <up>KEY_UP</up>
+               <down>KEY_DOWN</down>
+               <select>KEY_OK</select>
+               <enter>KEY_ENTER</enter>
+               <clear>KEY_DELETE</clear>
+               <start>KEY_MEDIA</start>
+               <back>KEY_EXIT</back>
+               <record>KEY_RECORD</record>
+               <play>KEY_PLAY</play>
+               <pause>KEY_PAUSE</pause>
+               <stop>KEY_STOP</stop>
+               <forward>KEY_FASTFORWARD</forward>
+               <reverse>KEY_REWIND</reverse>
+               <volumeplus>KEY_VOLUMEUP</volumeplus>
+               <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+               <channelplus>KEY_CHANNELUP</channelplus>
+               <channelminus>KEY_CHANNELDOWN</channelminus>
+               <skipplus>KEY_NEXT</skipplus>
+               <skipminus>KEY_PREVIOUS</skipminus>
+               <title>KEY_EPG</title>
+               <subtitle>KEY_SUBTITLE</subtitle>
+               <language>KEY_LANGUAGE</language>
+               <info>KEY_INFO</info>
+               <display>KEY_ZOOM</display>
+               <mute>KEY_MUTE</mute>
+               <power>KEY_POWER</power>
+               <eject>KEY_EJECT</eject>
+               <menu>KEY_DVD</menu>
+               <menu>KEY_MENU</menu>
+               <myvideo>KEY_VIDEO</myvideo>
+               <mymusic>KEY_AUDIO</mymusic>
+               <mypictures>KEY_CAMERA</mypictures>
+               <mytv>KEY_TUNER</mytv>
+               <teletext>KEY_TEXT</teletext>
+               <one>KEY_NUMERIC_1</one>
+               <two>KEY_NUMERIC_2</two>
+               <three>KEY_NUMERIC_3</three>
+               <four>KEY_NUMERIC_4</four>
+               <five>KEY_NUMERIC_5</five>
+               <six>KEY_NUMERIC_6</six>
+               <seven>KEY_NUMERIC_7</seven>
+               <eight>KEY_NUMERIC_8</eight>
+               <nine>KEY_NUMERIC_9</nine>
+               <zero>KEY_NUMERIC_0</zero>
+               <star>KEY_NUMERIC_STAR</star>
+               <hash>KEY_NUMERIC_POUND</hash>
+               <red>KEY_RED</red>
+               <green>KEY_GREEN</green>
+               <yellow>KEY_YELLOW</yellow>
+               <blue>KEY_BLUE</blue>
+               <recordedtv>KEY_PVR</recordedtv> 
+               <liveradio>KEY_RADIO</liveradio> 
+       </remote>
 </lircmap>
index 7db7973..45682a2 100644 (file)
       <l>NextSubtitle</l>
       <left>StepBack</left>
       <right>StepForward</right>
-      <up>BigStepForward</up>
-      <down>BigStepBack</down>
+      <up>ChapterOrBigStepForward</up>
+      <down>ChapterOrBigStepBack</down>
       <a>AudioDelay</a>
       <escape>Fullscreen</escape>
       <c>Playlist</c>
   <Favourites>
     <keyboard>
       <backspace>Close</backspace>
+      <u>MoveItemUp</u>
+      <d>MoveItemDown</d>
     </keyboard>
   </Favourites>
   <NumericInput>
index f3c1206..7d0061f 100644 (file)
       <nine>Number9</nine>
       <left>StepBack</left>
       <right>StepForward</right>
-      <up>BigStepForward</up>
-      <down>BigStepBack</down>
-      <back>SmallStepBack</back>
+      <up>ChapterOrBigStepForward</up>
+      <down>ChapterOrBigStepBack</down>
+      <back>Back</back>
       <menu>OSD</menu>
       <start>OSD</start>
       <select>OSD</select>
       <right>NextPreset</right>
       <up>IncreaseRating</up>
       <down>DecreaseRating</down>
-      <back>LockPreset</back>
+      <back>Back</back>
       <title>CodecInfo</title>
       <select>XBMC.ActivateWindow(VisualisationPresetList)</select>
       <menu>OSD</menu>
index 9c90e6f..a1afc90 100644 (file)
       <swipe direction="down">SwipeDown</swipe>
     </touch>
   </global>
+  <FullScreenVideo>
+    <touch>
+      <swipe direction="left">StepBack</swipe>
+      <swipe direction="right">StepForward</swipe>
+      <swipe direction="up">ChapterOrBigStepForward</swipe>
+      <swipe direction="down">ChapterOrBigStepBack</swipe>
+      <swipe direction="left" pointers="2">SmallStepBack</swipe>
+    </touch>
+  </FullScreenVideo>
   <SlideShow>
     <touch>
       <zoom>ZoomGesture</zoom>
index e72aa39..45cae4f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 <node order="5" type="filter">
   <label>132</label>
-  <icon>DefaultAlbum.png</icon>
+  <icon>DefaultMusicAlbums.png</icon>
   <content>musicvideos</content>
   <group>albums</group>
 </node>
index 34da167..4588728 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 <node order="4" type="filter">
   <label>133</label>
-  <icon>DefaultArtist.png</icon>
+  <icon>DefaultMusicArtists.png</icon>
   <content>musicvideos</content>
   <group>artists</group>
 </node>
index d121511..54d8f57 100644 (file)
   <section id="videos">
     <category id="videoplayer">
       <group id="2">
-        <setting id="videoplayer.useamcodec" type="boolean" label="13438" help="36422">
-          <requirement>HAVE_AMCODEC</requirement>
-          <level>2</level>
-          <default>true</default>
-          <updates>
-            <update type="change" />
-          </updates>
-          <control type="toggle" />
-        </setting>
         <setting id="videoplayer.usestagefright" type="boolean" label="13436" help="36260">
           <requirement>HAVE_LIBSTAGEFRIGHTDECODER</requirement>
           <level>2</level>
index b31d017..1a132a7 100644 (file)
@@ -11,6 +11,9 @@
         <setting id="audiooutput.channels" help="36367" />
       </group>
       <group id="3">
+        <setting id="audiooutput.ac3transcode">
+          <visible>false</visible>
+        </setting>
         <setting id="audiooutput.truehdpassthrough">
           <visible>false</visible>
         </setting>
index 7aeb158..9d03d79 100644 (file)
     </category>
     <category id="audiooutput">
       <group id="1">
+        <setting id="audiooutput.audiodevice" type="string">
+          <default>Default</default>
+          <visible>false</visible>
+        </setting>
+      </group>
+      <group id="3">
+        <setting id="audiooutput.passthroughdevice" type="string">
+          <default>Default</default>
+          <visible>false</visible>
+        </setting>
         <setting id="audiooutput.ac3passthrough">
           <requirement>IsAppleTV2</requirement>
         </setting>
         <setting id="audiooutput.dtspassthrough">
           <requirement>IsAppleTV2</requirement>
         </setting>
-        <setting id="audiooutput.multichannellpcm">
-          <visible>false</visible>
-        </setting>
         <setting id="audiooutput.truehdpassthrough">
           <visible>false</visible>
         </setting>
           <visible>false</visible>
         </setting>
       </group>
-      <group id="2">
-        <setting id="audiooutput.audiodevice">
-          <default>Default</default>
-          <visible>false</visible>
-        </setting>
-        <setting id="audiooutput.passthroughdevice">
-          <default>Default</default>
-          <visible>false</visible>
-        </setting>
-      </group>
     </category>
     <category id="input">
       <group id="1">
index 96edae6..b5d5b7b 100644 (file)
@@ -12,6 +12,9 @@
         <setting id="videoplayer.synctype">
           <visible>false</visible>
         </setting>
+        <setting id="videoplayer.useframemtdec">
+          <visible>false</visible>
+        </setting>
       </group>
     </category>
   </section>
         <setting id="videoscreen.fakefullscreen">
           <visible>false</visible>
         </setting>
-      </group>
-    </category>
-
-    <category id="audiooutput" label="772" help="36360">
-      <group id="1">
-        <setting id="audiooutput.audiodevice">
-          <level>1</level>
-          <default>HDMI</default>
-          <constraints>
-            <options>audiodevices</options>
-          </constraints>
-          <control type="list" format="string" />
-        </setting>
-        <setting id="audiooutput.dualaudio" type="boolean" label="37017" help="36542">
-          <level>2</level>
-          <default>false</default>
-          <dependencies>
-            <dependency type="visible">
-              <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.passthrough</condition>
-            </dependency>
-          </dependencies>
-          <control type="toggle" />
-        </setting>
-        <setting id="audiooutput.boostcentre" type="boolean" label="37018" help="36543">
+        <setting id="videoscreen.textures32" type="boolean" label="37020" help="36547">
           <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
-        <setting id="audiooutput.config">
-          <visible>false</visible>
-        </setting>
-        <setting id="audiooutput.stereoupmix">
-          <visible>false</visible>
-        </setting>
-        <setting id="audiooutput.streamsilence">
+        <setting id="videoscreen.limitgui" type="integer" label="37021" help="36548">
           <level>2</level>
-          <default>0</default>
-          <dependencies>
-            <dependency type="visible">
-              <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.streamsilence</condition>
-            </dependency>
-          </dependencies>
+          <default>1080</default>
           <constraints>
-            <options>audiostreamsilence</options>
+            <minimum>540</minimum>
+            <step>16</step>
+            <maximum>1080</maximum>
           </constraints>
-          <control type="spinner" format="string" />
+          <control type="edit" format="integer" />
         </setting>
       </group>
-      <group id="2">
-        <visible>false</visible>
-      </group>
       <group id="3">
-        <setting id="audiooutput.passthrough">
+        <setting id="videoscreen.vsync">
+          <default>2</default> <!-- VSYNC_ALWAYS -->
+        </setting>
+      </group>
+    </category>
+    <category id="audiooutput">
+      <group id="1">
+        <setting id="audiooutput.dualaudio" type="boolean" label="37017" help="36542">
           <level>2</level>
           <default>false</default>
-          <dependencies>
-            <dependency type="visible">
-              <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.passthrough</condition>
-            </dependency>
-          </dependencies>
-        </setting>
-        <setting id="audiooutput.passthroughdevice">
-          <visible>false</visible>
+          <control type="toggle" />
         </setting>
+      </group>
+      <group id="3">
         <setting id="audiooutput.truehdpassthrough">
           <visible>false</visible>
         </setting>
         <setting id="audiooutput.dtshdpassthrough">
           <visible>false</visible>
         </setting>
-        <setting id="audiooutput.eac3passthrough">
-          <visible>false</visible>
-        </setting>
-        <setting id="audiooutput.ac3passthrough">
-          <dependencies>
-            <dependency type="visible">
-              <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.ac3passthrough</condition>
-            </dependency>
-          </dependencies>
-        </setting>
-        <setting id="audiooutput.dtspassthrough">
-          <dependencies>
-            <dependency type="visible">
-              <condition on="property" name="aesettingvisible" setting="audiooutput.audiodevice">audiooutput.dtspassthrough</condition>
-            </dependency>
-          </dependencies>
-        </setting>
       </group>
     </category>
   </section>
index 4b69b38..c7ef591 100644 (file)
       </group>
       <group id="2">
         <setting id="locale.timezonecountry" type="string" label="14079" help="36117">
-          <level>2</level>
+          <level>1</level>
           <default>default</default> <!-- will be properly set on startup -->
           <constraints>
             <options>timezonecountries</options>
           <control type="list" format="string" />
         </setting>
         <setting id="locale.timezone" type="string" label="14080" help="36118">
-          <level>2</level>
+          <level>1</level>
           <default>default</default> <!-- will be properly set on startup -->
           <constraints>
             <options>timezones</options>
           </constraints>
           <control type="list" format="string" />
         </setting>
-        <setting id="locale.subtitlelanguage" type="string" label="286" help="36120">
-          <level>1</level>
-          <default>original</default>
-          <constraints>
-            <options>streamlanguages</options>
-          </constraints>
-          <control type="list" format="string" />
-        </setting>
       </group>
     </category>
     <category id="filelists" label="14081" help="36121">
             <formatlabel>14047</formatlabel>
           </control>
         </setting>
+        <setting id="videoplayer.useframemtdec" type="boolean" label="13440" help="36423">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="videoplayer.useamcodec" type="boolean" label="13438" help="36422">
+          <requirement>HAVE_AMCODEC</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
+          <level>2</level>
+          <default>true</default>
+          <updates>
+            <update type="change" />
+          </updates>
+          <control type="toggle" />
+        </setting>
         <setting id="videoplayer.usevdpau" type="boolean" label="13425" help="36155">
           <requirement>HAVE_LIBVDPAU</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
           <level>2</level>
           <default>true</default>
           <control type="toggle" />
           <level>2</level>
           <default>true</default>
           <dependencies>
-            <dependency type="enable" setting="videoplayer.usevdpau" operator="is">true</dependency> <!-- USE VDPAU -->
+            <dependency type="enable">
+              <and>
+                <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
+                <condition setting="videoplayer.useframemtdec" operator="is">false</condition> <!-- disable when frame threading is active -->
+              </and>
+            </dependency>
           </dependencies>
           <control type="toggle" />
         </setting>
         <setting id="videoplayer.usevaapi" type="boolean" label="13426" help="36156">
           <requirement>HAVE_LIBVA</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
           <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
         <setting id="videoplayer.usedxva2" type="boolean" label="13427" help="36158">
           <requirement>HasDXVA2</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
           <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
         <setting id="videoplayer.usechd" type="boolean" label="13428" help="36159">
           <requirement>HasCrystalHDDevice</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
           <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
         <setting id="videoplayer.useomx" type="boolean" label="13430" help="36161">
           <requirement>HAVE_LIBOPENMAX</requirement>
+          <dependencies>
+            <dependency type="enable" setting="videoplayer.useframemtdec" operator="is">false</dependency> <!-- disable when frame threading is active -->
+          </dependencies>
           <level>2</level>
           <default>true</default>
           <control type="toggle" />
           <default>true</default>
           <control type="toggle" />
         </setting>
-        <setting id="videoplayer.useframemtdec" type="boolean" label="13440" help="36423">
-          <level>2</level>
-          <default>false</default>
-          <control type="toggle" />
-        </setting>
         <setting id="videoplayer.adjustrefreshrate" type="integer" label="170" help="36164">
           <level>2</level>
           <default>0</default> <!-- ADJUST_REFRESHRATE_OFF -->
     </category>
     <category id="subtitles" label="287" help="36184">
       <group id="1">
+        <setting id="locale.subtitlelanguage" type="string" label="286" help="36120">
+          <level>1</level>
+          <default>original</default>
+          <constraints>
+            <options>streamlanguages</options>
+          </constraints>
+          <control type="list" format="string" />
+        </setting>
+      </group>
+      <group id="2">
+        <setting id="subtitles.preferexternal" type="boolean" label="21600" help="21601">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="subtitles.custompath" type="path" label="21366" help="36191">
+          <level>1</level>
+          <default></default>
+          <constraints>
+            <allowempty>true</allowempty>
+            <writable>false</writable>
+            <sources>
+              <source>videos</source>
+            </sources>
+          </constraints>
+          <control type="button" format="path">
+            <heading>657</heading>
+          </control>
+        </setting>
+        <setting id="subtitles.languages" type="list[string]" label="24111" help="24112">
+          <level>1</level>
+          <default>English</default>
+          <constraints>
+            <options>languages</options>
+            <delimiter>,</delimiter>
+            <minimum>1</minimum>
+            <maximum>3</maximum>
+          </constraints>
+          <control type="list" format="string">
+            <multiselect>true</multiselect>
+          </control>
+        </setting>
+        <setting id="subtitles.tv" type="addon" label="24116" help="24117">
+          <level>1</level>
+          <default>-</default>
+          <constraints>
+            <addontype>xbmc.subtitle.module</addontype>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="button" format="addon" />
+        </setting>
+        <setting id="subtitles.movie" type="addon" label="24118" help="24119">
+          <level>1</level>
+          <default>-</default>
+          <constraints>
+            <addontype>xbmc.subtitle.module</addontype>
+            <allowempty>true</allowempty>
+          </constraints>
+          <control type="button" format="addon" />
+        </setting>
+        <setting id="subtitles.pauseonsearch" type="boolean" label="24105" help="">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="subtitles.savetomoviefolder" type="boolean" label="24115" help="24106">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+      </group>
+      <group id="3">
+        <setting id="subtitles.align" type="integer" label="21460" help="36192">
+          <level>1</level>
+          <default>0</default> <!-- SUBTITLE_ALIGN_MANUAL -->
+          <constraints>
+            <options>
+              <option label="21461">0</option> <!-- SUBTITLE_ALIGN_MANUAL -->
+              <option label="21462">1</option> <!-- SUBTITLE_ALIGN_BOTTOM_INSIDE -->
+              <option label="21463">2</option> <!-- SUBTITLE_ALIGN_BOTTOM_OUTSIDE -->
+              <option label="21464">3</option> <!-- SUBTITLE_ALIGN_TOP_INSIDE -->
+              <option label="21465">4</option> <!-- SUBTITLE_ALIGN_TOP_OUTSIDE -->
+            </options>
+          </constraints>
+          <control type="spinner" format="string" />
+        </setting>
         <setting id="subtitles.font" type="string" label="14089" help="36185">
           <level>1</level>
           <default>arial.ttf</default>
           <control type="toggle" />
         </setting>
       </group>
-      <group id="2">
-        <setting id="subtitles.savetomoviefolder" type="boolean" label="24115" help="24106">
-          <level>1</level>
-          <default>true</default>
-          <control type="toggle" />
-        </setting>
-        <setting id="subtitles.pauseonsearch" type="boolean" label="24105" help="">
-          <level>1</level>
-          <default>true</default>
-          <control type="toggle" />
-        </setting>
-        <setting id="subtitles.languages" type="list[string]" label="24111" help="24112">
-          <level>1</level>
-          <default>English</default>
-          <constraints>
-            <options>languages</options>
-            <delimiter>,</delimiter>
-            <minimum>1</minimum>
-            <maximum>3</maximum>
-          </constraints>
-          <control type="list" format="string">
-            <multiselect>true</multiselect>
-          </control>
-        </setting>
-        <setting id="subtitles.tv" type="addon" label="24116" help="24117">
-          <level>1</level>
-          <default>-</default>
-          <constraints>
-            <addontype>xbmc.subtitle.module</addontype>
-          </constraints>
-          <control type="button" format="addon" />
-        </setting>
-        <setting id="subtitles.movie" type="addon" label="24118" help="24119">
-          <level>1</level>
-          <default>-</default>
-          <constraints>
-            <addontype>xbmc.subtitle.module</addontype>
-          </constraints>
-          <control type="button" format="addon" />
-        </setting>
-        <setting id="subtitles.custompath" type="path" label="21366" help="36191">
-          <level>1</level>
-          <default></default>
-          <constraints>
-            <allowempty>true</allowempty>
-            <writable>false</writable>
-            <sources>
-              <source>videos</source>
-            </sources>
-          </constraints>
-          <control type="button" format="path">
-            <heading>657</heading>
-          </control>
-        </setting>
-        <setting id="subtitles.align" type="integer" label="21460" help="36192">
+      <group id="4">
+        <setting id="subtitles.stereoscopicdepth" type="integer" label="36545" help="36546">
           <level>1</level>
-          <default>0</default> <!-- SUBTITLE_ALIGN_MANUAL -->
+          <default>0</default>
           <constraints>
-            <options>
-              <option label="21461">0</option> <!-- SUBTITLE_ALIGN_MANUAL -->
-              <option label="21462">1</option> <!-- SUBTITLE_ALIGN_BOTTOM_INSIDE -->
-              <option label="21463">2</option> <!-- SUBTITLE_ALIGN_BOTTOM_OUTSIDE -->
-              <option label="21464">3</option> <!-- SUBTITLE_ALIGN_TOP_INSIDE -->
-              <option label="21465">4</option> <!-- SUBTITLE_ALIGN_TOP_OUTSIDE -->
-            </options>
+            <minimum>0</minimum>
+            <step>1</step>
+            <maximum>10</maximum>
           </constraints>
-          <control type="spinner" format="string" />
-        </setting>
-        <setting id="subtitles.preferexternal" type="boolean" label="21600" help="21601">
-          <level>1</level>
-          <default>true</default>
-          <control type="toggle" />
+          <control type="spinner" format="integer" delayed="true"/>
         </setting>
       </group>
     </category>
     <category id="pvrmanager" label="128" help="36202">
       <group id="1">
         <setting id="pvrmanager.enabled" type="boolean" label="449" help="36203">
-          <level>1</level>
+          <level>0</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="pvrmanager.hideconnectionlostwarning" type="boolean" label="19269" help="36210">
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
           </dependencies>
           <control type="button" format="action" />
         </setting>
-        <setting id="pvrmanager.resetdb" type="action" label="19185" help="36209">
-          <level>2</level>
-          <control type="button" format="action" />
-        </setting>
       </group>
       <group id="4">
-        <setting id="pvrmanager.hideconnectionlostwarning" type="boolean" label="19269" help="36210">
+        <setting id="pvrmanager.resetdb" type="action" label="19185" help="36209">
           <level>1</level>
-          <default>false</default>
-          <control type="toggle" />
+          <control type="button" format="action" />
         </setting>
       </group>
     </category>
           <control type="toggle" />
         </setting>
         <setting id="pvrmenu.infotimeout" type="boolean" label="19179" help="36213">
-          <level>1</level>
+          <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
         <setting id="pvrmenu.closechannelosdonswitch" type="boolean" label="19229" help="36214">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="pvrmenu.infotime" type="integer" label="19184" help="36215">
-          <level>1</level>
+          <level>2</level>
           <default>5</default>
           <constraints>
             <minimum>1</minimum>
       </group>
       <group id="2">
         <setting id="pvrmenu.iconpath" type="path" label="19018" help="36216">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           <control type="spinner" format="string" />
         </setting>
         <setting id="epg.daystodisplay" type="integer" label="19182" help="36220">
-          <level>1</level>
+          <level>2</level>
           <default>3</default>
           <constraints>
             <minimum>1</minimum>
       </group>
       <group id="2">
         <setting id="epg.epgupdate" type="integer" label="19071" help="36221">
-          <level>1</level>
+          <level>2</level>
           <default>120</default>
           <constraints>
             <minimum>15</minimum>
             <formatlabel>14044</formatlabel>
           </control>
         </setting>
-        <setting id="epg.preventupdateswhileplayingtv" type="boolean" label="19230" help="36222">
+        <setting id="epg.selectaction" type="integer" label="22079" help="36424">
           <level>1</level>
+          <default>2</default> <!-- EPG_SELECT_ACTION_INFO -->
+          <constraints>
+            <options>
+              <option label="36425">0</option> <!-- EPG_SELECT_ACTION_CONTEXT_MENU -->
+              <option label="36426">1</option> <!-- EPG_SELECT_ACTION_SWITCH -->
+              <option label="36427">2</option> <!-- EPG_SELECT_ACTION_INFO -->
+              <option label="36428">3</option> <!-- EPG_SELECT_ACTION_RECORD -->
+            </options>
+          </constraints>
+          <control type="spinner" format="string" />
+        </setting>
+        <setting id="epg.preventupdateswhileplayingtv" type="boolean" label="19230" help="36222">
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="epg.ignoredbforclient" type="boolean" label="19072" help="36223">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="epg.hidenoinfoavailable" type="boolean" label="19268" help="36224">
-          <level>1</level>
+          <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
           <control type="spinner" format="string" />
         </setting>
         <setting id="pvrplayback.signalquality" type="boolean" label="19037" help="36229">
-          <level>1</level>
+          <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
       </group>
       <group id="2">
         <setting id="pvrplayback.scantime" type="integer" label="19170" help="36230">
-          <level>1</level>
+          <level>3</level>
           <default>10</default>
           <constraints>
             <minimum>1</minimum>
           <control type="toggle" />
         </setting>
         <setting id="pvrplayback.channelentrytimeout" type="integer" label="19073" help="36232">
-          <level>1</level>
+          <level>2</level>
           <default>0</default>
           <constraints>
             <minimum>0</minimum>
           </control>
         </setting>
         <setting id="pvrrecord.defaultpriority" type="integer" label="19173" help="36235">
-          <level>1</level>
+          <level>2</level>
           <default>50</default>
           <constraints>
             <minimum>1</minimum>
           <control type="spinner" format="integer" />
         </setting>
         <setting id="pvrrecord.defaultlifetime" type="integer" label="19174" help="36236">
-          <level>1</level>
+          <level>2</level>
           <default>99</default>
           <constraints>
             <minimum>1</minimum>
           </control>
         </setting>
         <setting id="pvrrecord.marginstart" type="integer" label="19175" help="36237">
-          <level>1</level>
+          <level>2</level>
           <default>0</default>
           <constraints>
             <minimum>0</minimum>
           </control>
         </setting>
         <setting id="pvrrecord.marginend" type="integer" label="19176" help="36238">
-          <level>1</level>
+          <level>2</level>
           <default>0</default>
           <constraints>
             <minimum>0</minimum>
       </group>
       <group id="2">
         <setting id="pvrrecord.timernotifications" type="boolean" label="19233" help="36239">
-          <level>1</level>
+          <level>2</level>
           <default>true</default>
           <control type="toggle" />
         </setting>
     <category id="pvrpowermanagement" label="14095" help="36240">
       <group id="1">
         <setting id="pvrpowermanagement.enabled" type="boolean" label="305" help="36241">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
       </group>
       <group id="2">
         <setting id="pvrpowermanagement.backendidletime" type="integer" label="19244" help="36242">
-          <level>1</level>
+          <level>2</level>
           <default>15</default>
           <constraints>
             <minimum label="351">0</minimum>
           </control>
         </setting>
         <setting id="pvrpowermanagement.setwakeupcmd" type="string" label="19245" help="36243">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           <control type="edit" format="string" />
         </setting>
         <setting id="pvrpowermanagement.prewakeup" type="integer" label="19246" help="36244">
-          <level>1</level>
+          <level>2</level>
           <default>15</default>
           <constraints>
             <minimum label="351">0</minimum>
       </group>
       <group id="3">
         <setting id="pvrpowermanagement.dailywakeup" type="boolean" label="19247" help="36245">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="pvrpowermanagement.dailywakeuptime" type="string" label="19248" help="36246">
-          <level>1</level>
+          <level>2</level>
           <default>00:00:00</default>
           <control type="edit" format="string" />
         </setting>
       <access>CheckPVRParentalPin</access>
       <group id="1">
         <setting id="pvrparental.enabled" type="boolean" label="449" help="36248">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
       </group>
       <group id="2">
         <setting id="pvrparental.pin" type="string" label="19261" help="36249">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           </control>
         </setting>
         <setting id="pvrparental.duration" type="integer" label="19260" help="36250">
-          <level>1</level>
+          <level>2</level>
           <default>300</default>
           <constraints>
             <minimum>5</minimum>
           </constraints>
           <control type="button" format="addon" />
         </setting>
+        <setting id="musiclibrary.overridetags" type="boolean" label="20220" help="20221">
+          <level>1</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
         <setting id="musiclibrary.updateonstartup" type="boolean" label="22000" help="36259">
           <level>1</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="services.webserverport" type="integer" parent="services.webserver" label="730" help="36329">
-          <level>2</level>
+          <level>1</level>
           <default>8080</default>
           <constraints>
             <minimum>1</minimum>
           <control type="edit" format="integer" />
         </setting>
         <setting id="services.webserverusername" type="string" parent="services.webserver" label="1048" help="36330">
-          <level>2</level>
+          <level>1</level>
           <default>xbmc</default>
           <constraints>
             <allowempty>true</allowempty>
           <control type="edit" format="string" />
         </setting>
         <setting id="services.webserverpassword" type="string" parent="services.webserver" label="733" help="36331">
-          <level>2</level>
+          <level>1</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           <level>2</level>
           <default>false</default>
           <dependencies>
-            <dependency type="visible" setting="audiooutput.channels" operator="!is">1</dependency>
+            <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.channels">audiooutput.stereoupmix</dependency>
           </dependencies>
           <control type="toggle" />
         </setting>
           </dependencies>
           <control type="toggle" />
         </setting>
+        <setting id="audiooutput.ac3transcode" type="boolean" label="667" help="36429">
+          <level>2</level>
+          <default>true</default>
+          <dependencies>
+            <dependency type="visible">
+              <and>
+                <condition setting="audiooutput.passthrough" operator="is">true</condition>
+                <condition setting="audiooutput.ac3passthrough" operator="is">true</condition>
+                <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.ac3transcode</condition>
+              </and>
+            </dependency>
+          </dependencies>
+          <control type="toggle" />
+        </setting>
         <setting id="audiooutput.eac3passthrough" type="boolean" label="448" help="37016">
           <level>2</level>
           <default>false</default>
       </group>
       <group id="2">
         <setting id="input.remoteaskeyboard" type="boolean" label="21449" help="36376">
-          <level>2</level>
+          <level>1</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
     <category id="network" label="798" help="36379">
       <group id="1">
         <setting id="network.usehttpproxy" type="boolean" label="708" help="36380">
-          <level>1</level>
+          <level>2</level>
           <default>false</default>
           <control type="toggle" />
         </setting>
         <setting id="network.httpproxytype" type="integer" parent="network.usehttpproxy" label="1180" help="36381">
-          <level>1</level>
+          <level>2</level>
           <default>0</default>
           <constraints>
             <options>
           <control type="spinner" format="string" />
         </setting>
         <setting id="network.httpproxyserver" type="string" parent="network.usehttpproxy" label="706" help="36382">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           <control type="edit" format="string" />
         </setting>
         <setting id="network.httpproxyport" type="integer" parent="network.usehttpproxy" label="730" help="36383">
-          <level>1</level>
+          <level>2</level>
           <default>8080</default>
           <constraints>
             <minimum>1</minimum>
           <control type="edit" format="integer" />
         </setting>
         <setting id="network.httpproxyusername" type="string" parent="network.usehttpproxy" label="1048" help="36384">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
           <control type="edit" format="string" />
         </setting>
         <setting id="network.httpproxypassword" type="string" parent="network.usehttpproxy" label="733" help="36385">
-          <level>1</level>
+          <level>2</level>
           <default></default>
           <constraints>
             <allowempty>true</allowempty>
index acf63d1..fce8da1 100644 (file)
           <requirement negated="true">HAS_GL</requirement>
         </setting>
       </group>
+      <group id="3">
+        <setting id="videoscreen.vsync">
+          <default>2</default> <!-- VSYNC_ALWAYS -->
+        </setting>
+      </group>
     </category>
     <category id="audiooutput" label="772" help="36360">
       <group id="1">
index fb88cf5..87af359 100644 (file)
@@ -83,7 +83,7 @@ void CWiiRemote::MessageCallback(cwiid_wiimote_t *wiiremote, int mesg_count, uni
                                           mesg[i].ir_mesg.src[1].pos[CWIID_Y]);
       }
       else if (valid_source > 2)
-      { //TODO Make this care with the strenght of the sources
+      { //TODO Make this care with the strength of the sources
         g_WiiRemote.CalculateMousePointer(mesg[i].ir_mesg.src[0].pos[CWIID_X],
                                           mesg[i].ir_mesg.src[0].pos[CWIID_Y],
                                           mesg[i].ir_mesg.src[1].pos[CWIID_X],
@@ -97,7 +97,7 @@ void CWiiRemote::MessageCallback(cwiid_wiimote_t *wiiremote, int mesg_count, uni
       g_WiiRemote.ProcessKey(mesg[i].btn_mesg.buttons);
     break;       
     case CWIID_MESG_STATUS:
-      //Here we can figure out Extensiontypes and such
+      //Here we can figure out Extension types and such
     break;
     case CWIID_MESG_NUNCHUK:
       g_WiiRemote.ProcessNunchuck(mesg[i].nunchuk_mesg);
@@ -237,12 +237,12 @@ void CWiiRemote::Initialize(CAddress Addr, int Socket)
   ToggleBit(m_ledState, CWIID_LED4_ON);
 }
 
-/* Update is run regulary and we gather the state of the Wiiremote and see if the user have pressed on a button or moved the wiiremote
+/* Update is run regularly and we gather the state of the Wiiremote and see if the user have pressed on a button or moved the wiiremote
    This could have been done with callbacks instead but it doesn't look nice in C++*/
 void CWiiRemote::Update()
 {
   if (m_DisconnectWhenPossible)
-  {//If the user have choosen to disconnect or lost comunication
+  {//If the user has chosen to disconnect or lost communication
     DisconnectNow(true);
     m_DisconnectWhenPossible = false;
   }
@@ -311,7 +311,7 @@ void CWiiRemote::Disconnect()
                
 #ifdef CWIID_OLD               
 /* This function is mostly a hack as CWIID < 6.0 doesn't report on disconnects, this function is called everytime
-   a message is sent to the callback (Will be once every 10 ms or so) this is to see if the connection is interupted. */
+   a message is sent to the callback (Will be once every 10 ms or so) this is to see if the connection is interrupted. */
 void CWiiRemote::CheckIn()
 { //This is always called from a criticalsection
   m_LastMsgTime = getTicks();
@@ -357,12 +357,12 @@ bool CWiiRemote::Connect()
       }
 #ifdef CWIID_OLD
       /* CheckIn to say that this is the last msg, If this isn't called it could give issues if we Connects -> Disconnect and then try to connect again 
-         the CWIID_OLD hack would automaticly disconnect the wiiremote as the lastmsg is too old. */
+         the CWIID_OLD hack would automatically disconnect the wiiremote as the lastmsg is too old. */
       CheckIn();
 #endif      
       m_connected = true;
 
-      CPacketLOG log(LOGNOTICE, "Sucessfully connected a WiiRemote");
+      CPacketLOG log(LOGNOTICE, "Successfully connected a WiiRemote");
       log.Send(m_Socket, m_MyAddr);
       return true;
     }
@@ -390,7 +390,7 @@ void CWiiRemote::DisconnectNow(bool startConnectThread)
       notification.Send(m_Socket, m_MyAddr);
     }
 
-    CPacketLOG log(LOGNOTICE, "Sucessfully disconnected a WiiRemote");
+    CPacketLOG log(LOGNOTICE, "Successfully disconnected a WiiRemote");
     log.Send(m_Socket, m_MyAddr);
   }
   m_connected = false;
@@ -415,7 +415,7 @@ bool CWiiRemote::CheckConnection()
 
 /* Sets rpt mode when a new wiiremote is connected */
 void CWiiRemote::SetupWiiRemote()
-{ //Lights up the apropriate led and setups the rapport mode, so buttons and IR work
+{ //Lights up the appropriate led and setups the rapport mode, so buttons and IR work
   SetRptMode();
   SetLedState();
 
index 5e86b35..077914f 100644 (file)
@@ -22,7 +22,7 @@
 #include "stdafx.h"
 #include "Xbox360Controller.h"
 #include "../../lib/c++/xbmcclient.h"
-#pragma comment(lib, "wsock32.lib")      // needed for xmbclient.h?
+#pragma comment(lib, "wsock32.lib")      // needed for xbmclient.h?
 
 // You can have up to 4 xbox360 controllers on a system
 #define MAX_NUM_CONTROLLERS 4
index 4269e31..a0bcbca 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "SDL_anigif.h"
 
 
index fce27c8..63fdfdc 100644 (file)
@@ -121,8 +121,8 @@ clean:
        rm -rf xbmc/obj
        rm -rf xbmc/res/raw
        rm -rf tmp
-       rm xbmc/res/drawable/splash.png
-       rm xbmc/src/R.java
-       rm xbmc/classes.dex
+       rm -f xbmc/res/drawable/splash.png
+       rm -f xbmc/src/R.java
+       rm -f xbmc/classes.dex
 
 .PHONY: arm armeabi-v7a x86 force extras libs
index 5ecbc96..95cac4c 100644 (file)
@@ -2,8 +2,8 @@
 <!-- BEGIN_INCLUDE(manifest) -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.xbmc.xbmc"
-    android:versionCode="17"
-    android:versionName="13.0-ALPHA11" >
+    android:versionCode="18"
+    android:versionName="13.0-ALPHA12" >
 
     <!-- This is the platform API where NativeActivity was introduced. -->
     <uses-sdk android:minSdkVersion="14" />
@@ -16,7 +16,7 @@
     <application android:icon="@drawable/ic_launcher" android:debuggable="true" android:label="@string/app_name" android:hasCode="true">
         <activity
             android:name=".Splash"
-            android:configChanges="orientation|keyboard|keyboardHidden|navigation"
+            android:configChanges="orientation|keyboard|keyboardHidden|navigation|touchscreen"
             android:finishOnTaskLaunch="true"
             android:launchMode="singleInstance"
             android:screenOrientation="sensorLandscape"
index 35ad608..43e6117 100644 (file)
@@ -4,6 +4,7 @@ import android.app.NativeActivity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.View;
 
 public class Main extends NativeActivity 
 {
@@ -31,4 +32,30 @@ public class Main extends NativeActivity
     }
   }
 
+  @Override
+  public void onResume()
+  {
+    super.onResume();
+
+    if (android.os.Build.VERSION.SDK_INT >= 19) {
+      // Immersive mode
+
+      // Constants from API > 14
+      final int API_SYSTEM_UI_FLAG_LAYOUT_STABLE = 0x00000100;
+      final int API_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x00000200;
+      final int API_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 0x00000400;
+      final int API_SYSTEM_UI_FLAG_FULLSCREEN = 0x00000004;
+      final int API_SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000;
+
+      View thisView = getWindow().getDecorView();
+      thisView.setSystemUiVisibility(
+                API_SYSTEM_UI_FLAG_LAYOUT_STABLE
+              | API_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+              | API_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+              | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+              | API_SYSTEM_UI_FLAG_FULLSCREEN
+              | API_SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+    }
+  }
+
 }
index c55b667..0e3b5ff 100644 (file)
@@ -2,17 +2,18 @@
 
 ECHO Workspace is %WORKSPACE%
 
-rem git clean the untracked files but not the directories
-rem to keep the downloaded dependencies
-rem we assume git in path as this is a requirement
-
 cd %WORKSPACE%
-ECHO running git clean -xf
-git clean -xf
+rem clean the BUILD_WIN32 at first to avoid problems with possible git files in there
+IF EXIST %WORKSPACE%\project\Win32BuildSetup\BUILD_WIN32 rmdir %WORKSPACE%\project\Win32BuildSetup\BUILD_WIN32 /S /Q
+
+rem we assume git in path as this is a requirement
+rem git clean the untracked files and directories
+rem but keep the downloaded dependencies
+ECHO running git clean -xfd -e "project/BuildDependencies/downloads" -e "project/BuildDependencies/downloads2"
+git clean -xfd -e "project/BuildDependencies/downloads" -e "project/BuildDependencies/downloads2"
 
 rem cleaning additional directories
 ECHO delete build directories
-IF EXIST %WORKSPACE%\project\Win32BuildSetup\BUILD_WIN32 rmdir %WORKSPACE%\project\Win32BuildSetup\BUILD_WIN32 /S /Q
 IF EXIST %WORKSPACE%\project\Win32BuildSetup\dependencies rmdir %WORKSPACE%\project\Win32BuildSetup\dependencies /S /Q
 
 IF EXIST %WORKSPACE%\project\BuildDependencies\include rmdir %WORKSPACE%\project\BuildDependencies\include /S /Q
index 01fa7e5..8b47106 100644 (file)
@@ -153,6 +153,11 @@ public class Helper
             ret += newline
           else if (it.name() == 'ndash')
             ret += "--"
+          else if (it.name() == 'emphasis')
+          {
+            ret += '*'
+            it.children().each handleDoc
+          }
           else
             System.out.println("WARNING: Cannot parse the following as part of the doxygen processing:" + XmlUtil.serialize(it))
         }
@@ -216,6 +221,11 @@ public class Helper
 
       if (!convertTemplate)
       {
+        // check the typedef resolution
+        String apiTypeResolved = SwigTypeParser.SwigType_resolve_all_typedefs(apiType)
+        if (!apiTypeResolved.equals(apiType))
+          return getOutConversion(apiTypeResolved, apiName, method, overrideBindings, recurse)
+
         if (recurse)
           return getOutConversion(SwigTypeParser.SwigType_ltype(apiType),apiName,method,overrideBindings,false)
         else if (!isKnownApiType(apiType,method))
@@ -334,7 +344,13 @@ public class Helper
       if (convertTemplate == null)
         convertTemplate = inTypemap.find({ key, value -> (key instanceof Pattern && key.matcher(apiLType).matches()) })?.value
 
-      if (!convertTemplate){
+      if (!convertTemplate)
+      {
+         // check the typedef resolution
+         String apiTypeResolved = SwigTypeParser.SwigType_resolve_all_typedefs(apiType)
+         if (!apiTypeResolved.equals(apiType))
+           return getInConversion(apiTypeResolved, apiName, paramName, slName, method, overrideBindings)
+
          // it's ok if this is a known type
          if (!isKnownApiType(apiType,method) && !isKnownApiType(apiLType,method))
            System.out.println("WARNING: Unknown parameter type: ${apiType} (or ${apiLType}) for the call ${Helper.findFullClassName(method) + '::' + Helper.callingName(method)}")
index c7efb3f..d079c48 100644 (file)
@@ -348,6 +348,12 @@ public class SwigTypeParser
       return t.substring(start,c)
    }
 
+  public static List SwigType_templateparmlist(String t)
+  {
+    int i = t.indexOf('<');
+    return SwigType_parmlist(t.substring(i))
+  }
+
    /* -----------------------------------------------------------------------------
     * SwigType_parmlist()
     *
index 47ae4d6..e6e4202 100644 (file)
@@ -40,6 +40,6 @@ COPY_PHASE_STRIP = NO
 DEAD_CODE_STRIPPING = NO
 OTHER_CPLUSPLUSFLAGS = $(inherited) $(OTHER_CFLAGS) -Wreorder
 
-OTHER_LDFLAGS = $(XBMC_OTHER_LDFLAGS_COMMON) -weak_framework VideoToolbox
+OTHER_LDFLAGS = $(XBMC_OTHER_LDFLAGS_COMMON) -lmpeg2 -weak_framework VideoToolbox
 
 GCC_PREPROCESSOR_DEFINITIONS = TARGET_DARWIN_IOS $(XBMC_GCC_PREPROCESSOR_DEFINITIONS_COMMON)
index e721298..dc4735e 100644 (file)
@@ -25,6 +25,6 @@ HEADER_SEARCH_PATHS = $(inherited) $SRCROOT xbmc xbmc/linux xbmc/osx xbmc/cores/
 LIBRARY_SEARCH_PATHS = $(inherited) $(SRCROOT) $(SRCROOT)/lib/libRTV $(SRCROOT)/lib/libXDAAP $(SRCROOT)/lib/cmyth/libcmyth $(SRCROOT)/lib/cmyth/librefmem $(SRCROOT)/lib/libsquish $(SRCROOT)/lib/SlingboxLib $(SRCROOT)/xbmc/interfaces/json-rpc "$(SRCROOT)/lib/ffmpeg/libavcodec" "$(SRCROOT)/lib/ffmpeg/libavutil" "$(SRCROOT)/lib/ffmpeg/libavformat" "$(SRCROOT)/lib/ffmpeg/libavfilter" "$(SRCROOT)/lib/ffmpeg/libavdevice" "$(SRCROOT)/lib/ffmpeg/libswresample" "$(SRCROOT)/lib/ffmpeg/libpostproc" "$(SRCROOT)/lib/ffmpeg/libswscale" "$(SRCROOT)/xbmc/interfaces/python" "$(SRCROOT)/xbmc/interfaces/legacy"
 FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/System/Library/PrivateFrameworks/" "$(SDKROOT)/System/Library/Frameworks/"
 
-XBMC_OTHER_LDFLAGS_COMMON = $(inherited) -Wl,-headerpad_max_install_names -Wl,-all_load -L$XBMC_DEPENDS/lib -lbz2 -lintl -lexpat -lssl -lgpg-error -lresolv -lffi -lssh -llzo2 -lpcre -lpcrecpp -lfribidi -lfreetype -lfontconfig -lsqlite3 -lsamplerate -ltinyxml -lmicrohttpd -lsmbclient -lpython2.6 -lyajl -ljpeg -lcrypto -lgcrypt -lavdevice -lavfilter -lavcodec -lavformat -lpostproc -lavutil -lswresample -lswscale -ltag -L$XBMC_DEPENDS/lib/mysql -lmysqlclient 
+XBMC_OTHER_LDFLAGS_COMMON = $(inherited) -Wl,-headerpad_max_install_names -Wl,-all_load -L$XBMC_DEPENDS/lib -lbz2 -lintl -lexpat -lssl -lgpg-error -lresolv -lffi -lssh -llzo2 -lpcre -lpcrecpp -lfribidi -lfreetype -lfontconfig -lsqlite3 -lsamplerate -ltinyxml -lmicrohttpd -lsmbclient -lpython2.6 -lyajl -ljpeg -lcrypto -lgcrypt -lavdevice -lavfilter -lavcodec -lavformat -lpostproc -lavutil -lswresample -lswscale -ltag -L$XBMC_DEPENDS/lib/mysql -lmysqlclient -lxml2 -lxslt
 
 
index 1d22f0a..051b6d1 100755 (executable)
@@ -45,7 +45,7 @@ fi
 PACKAGE=org.xbmc.xbmc-atv2
 
 VERSION=13.0
-REVISION=0~alpha11
+REVISION=0~alpha12
 ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
 
 echo Creating $PACKAGE package version $VERSION revision $REVISION
index 93e3659..1670ef1 100755 (executable)
@@ -46,7 +46,7 @@ fi
 PACKAGE=org.xbmc.xbmc-ios
 
 VERSION=13.0
-REVISION=0~alpha11
+REVISION=0~alpha12
 ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
 
 echo Creating $PACKAGE package version $VERSION revision $REVISION
@@ -58,7 +58,7 @@ mkdir -p $DIRNAME/$PACKAGE/DEBIAN
 echo "Package: $PACKAGE"                          >  $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Priority: Extra"                            >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Name: XBMC-iOS"                             >> $DIRNAME/$PACKAGE/DEBIAN/control
-echo "Depends: firmware (>= 4.1), curl, org.xbmc.xbmc-iconpack" >> $DIRNAME/$PACKAGE/DEBIAN/control
+echo "Depends: firmware (>= 4.1), curl"           >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Version: $VERSION-$REVISION"                >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Architecture: iphoneos-arm"                 >> $DIRNAME/$PACKAGE/DEBIAN/control
 echo "Description: XBMC Multimedia Center for 4.x iOS" >> $DIRNAME/$PACKAGE/DEBIAN/control
index d8ead6a..3c4ea15 100755 (executable)
@@ -25,7 +25,7 @@ ARCHITECTURE=`file $XBMC/Contents/MacOS/XBMC | awk '{print $NF}'`
 PACKAGE=org.xbmc.xbmc-osx
 
 VERSION=13.0
-REVISION=0~alpha11
+REVISION=0~alpha12
 ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_macosx-intel-${ARCHITECTURE}
 
 echo Creating $PACKAGE package version $VERSION revision $REVISION
index fb44f8d..32d86be 100644 (file)
@@ -12,11 +12,17 @@ IOS:
   ./configure --host=arm-apple-darwin # (defaults chosen)
   ./configure --host=arm-apple-darwin --with-sdk=4.3 --prefix=home/foo/xbmc-deps
 
-Android:
-  ./configure --with-toolchain=/opt/toolchains/android-ndk-r7-crystax-5.beta3-toolchain-14 --prefix=/opt/xbmc-deps --host=arm-linux-androideabi --with-sdk-path=/opt/android-sdk --with-ndk=/opt/android-ndk-r7-crystax-5.beta3 --with-sdk=android-14 --with-tarballs=/tmp/xbmc-android
+Android (the pathes are examples and have to match those of docs/READM.android):
+  arm:
+    ./configure --with-tarballs=/opt/xbmc-tarballs --host=arm-linux-androideabi --with-sdk-path=/opt/android-sdk-linux --with-ndk=/opt/android-ndk-r9 --with-toolchain=/opt/arm-linux-androideabi-4.8-vanilla/android-14 --prefix=/opt/xbmc-depends
+  x86:
+    ./configure --with-tarballs=/opt/xbmc-tarballs --host=i686-linux-android --with-sdk-path=/opt/android-sdk-linux --with-ndk=/opt/android-ndk-r9 --with-toolchain=/opt/x86-linux-4.8-vanilla/android-14 --prefix=/opt/xbmc-depends
+
+  
 
 Linux:
   ARM toolchain (codesourcery/lenaro/etc)
     ./configure --with-toolchain=/opt/toolchains/my-example-toolchain/  --prefix=/opt/xbmc-deps --host=arm-linux-gnueabi
   Native toolchain
     ./configure --with-toolchain=/usr --prefix=/opt/xbmc-deps --host=x86_64-linux-gnu
+
index 2061b81..6793c77 100644 (file)
@@ -129,12 +129,12 @@ case $host in
     platform_cxxflags="$platform_cflags"
     platform_os="linux"
   ;;
-  *i686*-linux-gnu*)
+  *i686*-linux-gnu*|i*86*-*-linux-uclibc*)
     use_cpu=$host_cpu
     use_toolchain="${use_toolchain:-/usr}"
     platform_os="linux"
   ;;
-  x86_64*-linux-gnu*)
+  x86_64*-linux-gnu*|x86_64-*-linux-uclibc*)
     use_cpu=$host_cpu
     use_toolchain="${use_toolchain:-/usr}"
     platform_cflags="-fPIC -DPIC"
index 330434d..4588917 100644 (file)
@@ -15,7 +15,7 @@ DEPENDS = \
        python26 afpfs-ng libshairplay \
        libplist libcec libbluray boost tinyxml dummy-libxbmc \
        libamplayer libssh taglib xbmc-pvr-addons libusb libnfs libmp3lame \
-        pythonmodule-pil
+       pythonmodule-pil libxslt
 
 ifeq ($(ENABLE_GPLV3),1)
   DEPENDS+=samba-gplv3 libcdio-gplv3
@@ -95,6 +95,7 @@ gnutls: nettle $(ZLIB)
 nettle: gmp
 pythonmodule-pil: $(ZLIB) libjpeg-turbo libpng freetype2 python26
 libsdl: $(LINUX_SYSTEM_LIBS)
+libxslt: libgcrypt
 
 .installed-$(PLATFORM): $(DEPENDS)
        touch $@
index f79a6d7..e46d57c 100644 (file)
@@ -1,5 +1,5 @@
 include ../../Makefile.include
-DEPS= ../../Makefile.include add-arm-mem-barrier.patch fix-deprecated-swp.patch Makefile
+DEPS= ../../Makefile.include add-arm-mem-barrier.patch fix-deprecated-swp.patch fix_shared_ptr_multithread.patch Makefile
 
 #Headers Only!
 LIBNAME=boost
@@ -21,6 +21,9 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        echo '  ;' >> $(PLATFORM)/tools/build/v2/user-config.jam
        cd $(PLATFORM); patch -p1 < ../add-arm-mem-barrier.patch
        cd $(PLATFORM); patch -p1 < ../fix-deprecated-swp.patch
+ifeq (arm, $(findstring arm, $(CPU)))
+       cd $(PLATFORM); patch -p0 < ../fix_shared_ptr_multithread.patch
+endif
        cd $(PLATFORM); ./bootstrap.sh --prefix=$(PREFIX)
 
 .installed-$(PLATFORM): $(PLATFORM)
diff --git a/tools/depends/target/boost/fix_shared_ptr_multithread.patch b/tools/depends/target/boost/fix_shared_ptr_multithread.patch
new file mode 100644 (file)
index 0000000..695dc75
--- /dev/null
@@ -0,0 +1,8 @@
+--- boost/config/user.hpp.orig 2014-01-20 11:45:10.048976867 +0100
++++ boost/config/user.hpp      2014-01-20 11:45:34.244568535 +0100
+@@ -121,4 +121,4 @@
+ // #define BOOST_WHATEVER_NO_LIB
+  
+-
++#define BOOST_SP_USE_SPINLOCK
index 0a42317..e30c549 100644 (file)
@@ -3,8 +3,8 @@ DEPS= ../../Makefile.include Makefile
 
 # lib name, version
 LIBNAME=libcec
-VERSION=2.1.1
-SOURCE=$(LIBNAME)-$(VERSION)
+VERSION=2.1.4
+SOURCE=$(LIBNAME)-$(VERSION)-2
 ARCHIVE=$(SOURCE).tar.gz
 
 # configuration settings
index 15dbd8c..bdefc33 100644 (file)
@@ -51,6 +51,11 @@ ifeq ($(OS),android)
        -$(READELF) --dynamic $(PREFIX)/lib/libxbmpeg2convert.so | grep ibrary
        #
 endif
+#on ios we link statically against libmpeg2 because of crash&burn since ios7 - 
+#so remove the dylib so the linker doesn't see it
+ifeq ($(OS),ios)
+       rm -f $(PREFIX)/lib/libmpeg2.la $(PREFIX)/lib/libmpeg2.dylib $(PREFIX)/lib/libmpeg2.0.dylib
+endif
        touch $@
 
 clean:
index 62ba1cf..3cdce19 100644 (file)
@@ -19,7 +19,7 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
        cd $(PLATFORM); patch -p1 < ../0001-dontbuildswig.patch
        cd $(PLATFORM); patch -p1 < ../0002-fixclang.diff
-       cd $(PLATFORM); sed -ie 's/TARGET_LINK_LIBRARIES( plist /TARGET_LINK_LIBRARIES( plist m z  /' src/CMakeLists.txt
+       cd $(PLATFORM); sed -ie 's/TARGET_LINK_LIBRARIES( plist \(.*\))/TARGET_LINK_LIBRARIES( plist \1 z m)  /' src/CMakeLists.txt
        cd $(PLATFORM); rm -rf build; mkdir -p build
        cd $(PLATFORM)/build; $(CMAKE) VERBOSE=1 -DCMAKE_C_FLAGS="$(CFLAGS)" -DCMAKE_LD_FLAGS="$(LDFLAGS)" ..
 
diff --git a/tools/depends/target/libsdl/05-x11-xdata32.patch b/tools/depends/target/libsdl/05-x11-xdata32.patch
new file mode 100644 (file)
index 0000000..c619929
--- /dev/null
@@ -0,0 +1,43 @@
+--- a/configure.in     Wed Apr 17 00:56:53 2013 -0700
++++ a/configure.in     Sun Jun 02 20:48:53 2013 +0600
+@@ -1169,6 +1169,17 @@ 
+             if test x$definitely_enable_video_x11_xrandr = xyes; then
+                 AC_DEFINE(SDL_VIDEO_DRIVER_X11_XRANDR)
+             fi
++            AC_MSG_CHECKING(for const parameter to _XData32)
++            have_const_param_xdata32=no
++            AC_TRY_COMPILE([
++              #include <X11/Xlibint.h>
++              extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len);
++            ],[
++            ],[
++            have_const_param_xdata32=yes
++            AC_DEFINE(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32)
++            ])
++            AC_MSG_RESULT($have_const_param_xdata32)
+         fi
+     fi
+ }
+--- a/include/SDL_config.h.in  Wed Apr 17 00:56:53 2013 -0700
++++ a/include/SDL_config.h.in  Sun Jun 02 20:48:53 2013 +0600
+@@ -283,6 +283,7 @@ 
+ #undef SDL_VIDEO_DRIVER_WINDIB
+ #undef SDL_VIDEO_DRIVER_WSCONS
+ #undef SDL_VIDEO_DRIVER_X11
++#undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32
+ #undef SDL_VIDEO_DRIVER_X11_DGAMOUSE
+ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC
+ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
+--- a/src/video/x11/SDL_x11sym.h       Wed Apr 17 00:56:53 2013 -0700
++++ a/src/video/x11/SDL_x11sym.h       Sun Jun 02 20:48:53 2013 +0600
+@@ -165,7 +165,11 @@ 
+  */
+ #ifdef LONG64
+ SDL_X11_MODULE(IO_32BIT)
++#if SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32
++SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
++#else
+ SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
++#endif
+ SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
+ #endif
index ff0879c..91a7a66 100644 (file)
@@ -1,5 +1,5 @@
 include ../../Makefile.include
-DEPS= ../../Makefile.include 01-SDL_SetWidthHeight.patch 02-OSX_interpretKeyEvents.patch 03-mavericks-compile.patch Makefile
+DEPS= ../../Makefile.include 01-SDL_SetWidthHeight.patch 02-OSX_interpretKeyEvents.patch 03-mavericks-compile.patch 05-x11-xdata32.patch Makefile
 
 # lib name, version
 LIBNAME=SDL
@@ -27,6 +27,8 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        cd $(PLATFORM); patch -p0 < ../02-OSX_interpretKeyEvents.patch
        cd $(PLATFORM); patch -p0 < ../03-mavericks-compile.patch
        cd $(PLATFORM); patch -p0 < ../04-fix_external_screen_crash.patch
+       cd $(PLATFORM); patch -p1 < ../05-x11-xdata32.patch
+       cd $(PLATFORM); ./autogen.sh
        cd $(PLATFORM); $(CONFIGURE)
 
 $(LIBDYLIB): $(PLATFORM)
diff --git a/tools/depends/target/libxslt/Makefile b/tools/depends/target/libxslt/Makefile
new file mode 100644 (file)
index 0000000..bd933ec
--- /dev/null
@@ -0,0 +1,44 @@
+include ../../Makefile.include
+DEPS= ../../Makefile.include Makefile
+
+# lib name, version
+LIBNAME=libxslt
+VERSION=1.1.28
+SOURCE=$(LIBNAME)-$(VERSION)
+ARCHIVE=$(SOURCE).tar.gz
+
+# configuration settings
+CONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) .; \
+          ./configure --prefix=$(PREFIX) --without-python --disable-shared   --with-debug --with-debugger --with-mem-debug --with-libxml-prefix=$(PREFIX)
+
+LIBDYLIB=$(PLATFORM)/.libs/$(LIBNAME).a
+
+CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
+
+all: .installed-$(PLATFORM)
+
+$(TARBALLS_LOCATION)/$(ARCHIVE):
+       cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
+
+$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
+       rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
+       cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
+       sed -ie "s|runtest$$(EXEEXT)||" "$(PLATFORM)/Makefile.in"
+       sed -ie "s|testrecurse$$(EXEEXT)||" "$(PLATFORM)/Makefile.in"
+       sed -ie "s|xsltproc||" "$(PLATFORM)/Makefile.in"
+       cd $(PLATFORM); $(CONFIGURE)
+
+$(LIBDYLIB): $(PLATFORM)
+       $(MAKE) -C $(PLATFORM)
+
+.installed-$(PLATFORM): $(LIBDYLIB)
+       $(MAKE) -C $(PLATFORM) install
+       touch $@
+
+clean:
+       $(MAKE) -C $(PLATFORM) clean
+       rm -f .installed-$(PLATFORM)
+
+distclean::
+       rm -rf $(PLATFORM) .installed-$(PLATFORM)
+
index 4dec450..18fbc24 100644 (file)
@@ -33,7 +33,7 @@ $(LIBDYLIB): $(PLATFORM)
 
 .installed-$(PLATFORM): $(LIBDYLIB)
        mkdir -p $(PREFIX)/lib/python2.6/site-packages/PIL
-       unzip -of $(LIBDYLIB) -d $(PREFIX)/lib/python2.6/site-packages/PIL/
+       unzip -oq $(LIBDYLIB) -d $(PREFIX)/lib/python2.6/site-packages/PIL/
        echo 'PIL' > $(PREFIX)/lib/python2.6/site-packages/PIL.pth
        touch $@
 
index de717b6..36128de 100644 (file)
@@ -2,7 +2,7 @@ include ../../Makefile.include
 #DEPS= ../../Makefile.include Makefile
 
 LIBNAME=xbmc-pvr-addons
-VERSION=d4cb4d5c0e7fc1a4b9a3b911c3053df178c36944
+VERSION=af29425b1e171419d72fb3a0475a10f4a862f0b7
 GIT_DIR=$(TARBALLS_LOCATION)/$(LIBNAME).git
 BASE_URL=git://github.com/opdenkamp/$(LIBNAME).git
 DYLIB=$(PLATFORM)/addons/pvr.demo/.libs/libpvrdemo-addon.so
index c1febce..bfaa534 100644 (file)
@@ -10,9 +10,11 @@ CONFIGURE = cp -f $(CONFIG_SUB) $(CONFIG_GUESS) build-aux/ ;\
   ./configure --prefix=$(PREFIX)
 
 ifeq ($(OS),android)
-CONFIGURE += --enable-codec=libstagefright
+CONFIGURE += --enable-codec=libstagefright,amcodec
 endif
 
+CONFIGURE += $(CONFIG_EXTRA)
+
 all: $(SOURCE)/libxbmc.so
 
 
index c3797f7..d310d47 100644 (file)
@@ -2630,7 +2630,8 @@ bool CApplication::OnAction(const CAction &action)
 
   // Now check with the player if action can be handled.
   if (g_windowManager.GetActiveWindow() == WINDOW_FULLSCREEN_VIDEO ||
-      (g_windowManager.GetActiveWindow() == WINDOW_DIALOG_VIDEO_OSD && (action.GetID() == ACTION_NEXT_ITEM || action.GetID() == ACTION_PREV_ITEM || action.GetID() == ACTION_CHANNEL_UP || action.GetID() == ACTION_CHANNEL_DOWN)))
+      (g_windowManager.GetActiveWindow() == WINDOW_DIALOG_VIDEO_OSD && (action.GetID() == ACTION_NEXT_ITEM || action.GetID() == ACTION_PREV_ITEM || action.GetID() == ACTION_CHANNEL_UP || action.GetID() == ACTION_CHANNEL_DOWN)) ||
+      action.GetID() == ACTION_STOP)
   {
     if (m_pPlayer->OnAction(action))
       return true;
@@ -3478,13 +3479,13 @@ void CApplication::Stop(int exitCode)
 
     CApplicationMessenger::Get().Cleanup();
 
+    CLog::Log(LOGNOTICE, "stop player");
+    m_pPlayer->ClosePlayer();
+
     StopPVRManager();
     StopServices();
     //Sleep(5000);
 
-    CLog::Log(LOGNOTICE, "stop player");
-    m_pPlayer->ClosePlayer();
-
 #if HAS_FILESYTEM_DAAP
     CLog::Log(LOGNOTICE, "stop daap clients");
     g_DaapClient.Release();
@@ -4517,14 +4518,17 @@ bool CApplication::WakeUpScreenSaver(bool bPowerOffKeyPressed /* = false */)
     m_iScreenSaveLock = 0;
     ResetScreenSaverTimer();
 
-    if (m_screenSaver->ID() == "screensaver.xbmc.builtin.dim" || m_screenSaver->ID() == "screensaver.xbmc.builtin.black" || m_screenSaver->ID().empty())
+    if (m_screenSaver->ID() == "visualization")
+    {
+      // we can just continue as usual from vis mode
+      return false;
+    }
+    else if (m_screenSaver->ID() == "screensaver.xbmc.builtin.dim" || m_screenSaver->ID() == "screensaver.xbmc.builtin.black" || m_screenSaver->ID().empty())
       return true;
     else if (!m_screenSaver->ID().empty())
     { // we're in screensaver window
-      if (g_windowManager.GetActiveWindow() == WINDOW_SCREENSAVER
-          || g_windowManager.GetActiveWindow() == WINDOW_VISUALISATION)
+      if (g_windowManager.GetActiveWindow() == WINDOW_SCREENSAVER)
         g_windowManager.PreviousWindow();  // show the previous window
-
       if (g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW)
         CApplicationMessenger::Get().SendAction(CAction(ACTION_STOP), WINDOW_SLIDESHOW);
     }
@@ -4595,6 +4599,12 @@ void CApplication::CheckScreenSaverAndDPMS()
 // the type of screensaver displayed
 void CApplication::ActivateScreenSaver(bool forceType /*= false */)
 {
+  if (m_pPlayer->IsPlayingAudio() && CSettings::Get().GetBool("screensaver.usemusicvisinstead") && !CSettings::Get().GetString("musicplayer.visualisation").empty())
+  { // just activate the visualisation if user toggled the usemusicvisinstead option
+    g_windowManager.ActivateWindow(WINDOW_VISUALISATION);
+    return;
+  }
+
   m_bScreenSave = true;
 
   // Get Screensaver Mode
@@ -4614,15 +4624,6 @@ void CApplication::ActivateScreenSaver(bool forceType /*= false */)
       if (!CAddonMgr::Get().GetAddon("screensaver.xbmc.builtin.dim", m_screenSaver))
         m_screenSaver.reset(new CScreenSaver(""));
     }
-    // Check if we are Playing Audio and Vis instead Screensaver!
-    else if (m_pPlayer->IsPlayingAudio() && CSettings::Get().GetBool("screensaver.usemusicvisinstead") && !CSettings::Get().GetString("musicplayer.visualisation").empty())
-    { // activate the visualisation
-      m_screenSaver.reset(new CScreenSaver("visualization"));
-      // prevent music info popup if vis is already running
-      if (g_windowManager.GetActiveWindow() != WINDOW_VISUALISATION)
-        g_windowManager.ActivateWindow(WINDOW_VISUALISATION);
-      return;
-    }
   }
   if (m_screenSaver->ID() == "screensaver.xbmc.builtin.dim" || m_screenSaver->ID().empty())
     return;
@@ -5128,6 +5129,7 @@ void CApplication::ProcessSlow()
     CAddonInstaller::Get().UpdateRepos();
 
   CAEFactory::GarbageCollect();
+
 }
 
 // Global Idle Time in Seconds
index 5dd1987..34dbc18 100644 (file)
@@ -1209,7 +1209,7 @@ void CApplicationMessenger::DoModal(CGUIDialog *pDialog, int iWindowID, const CS
   SendMessage(tMsg, true);
 }
 
-void CApplicationMessenger::ExecOS(const CStdString command, bool waitExit)
+void CApplicationMessenger::ExecOS(const CStdString &command, bool waitExit)
 {
   ThreadMessage tMsg = {TMSG_EXECUTE_OS};
   tMsg.strParam = command;
index 2cf0049..6457087 100644 (file)
@@ -209,7 +209,7 @@ public:
   void ActivateScreensaver();
   void SwitchToFullscreen(); //
   void Minimize(bool wait = false);
-  void ExecOS(const CStdString command, bool waitExit = false);
+  void ExecOS(const CStdString &command, bool waitExit = false);
   void UserEvent(int code);
   //! \brief Set the tag for the currently playing song
   void SetCurrentSongTag(const MUSIC_INFO::CMusicInfoTag& tag);
index 1dd8df6..83aa875 100644 (file)
@@ -49,13 +49,13 @@ void CApplicationPlayer::ClosePlayer()
   }
 }
 
-void CApplicationPlayer::CloseFile()
+void CApplicationPlayer::CloseFile(bool reopen)
 {
   boost::shared_ptr<IPlayer> player = GetInternal();
   if (player)
   {
     ++m_iPlayerOPSeq;
-    player->CloseFile();
+    player->CloseFile(reopen);
   }
 }
 
@@ -81,7 +81,7 @@ void CApplicationPlayer::ClosePlayerGapless(PLAYERCOREID newCore)
     // but if we do not stop it, we can not distingush callbacks from previous
     // item and current item, it will confused us then we can not make correct delay
     // callback after the starting state.
-    CloseFile();
+    CloseFile(true);
   }
 }
 
index 212389f..21a0b7a 100644 (file)
@@ -60,7 +60,7 @@ public:
   int m_iPlaySpeed;
 
   // player management
-  void CloseFile();
+  void CloseFile(bool reopen = false);
   void ClosePlayer();
   void ClosePlayerGapless(PLAYERCOREID newCore);
   void CreatePlayer(PLAYERCOREID newCore, IPlayerCallback& callback);
index 6a80645..d38119a 100644 (file)
@@ -685,6 +685,7 @@ void CFileItem::Serialize(CVariant& value) const
 
   value["strPath"] = m_strPath;
   value["dateTime"] = (m_dateTime.IsValid()) ? m_dateTime.GetAsRFC1123DateTime() : "";
+  value["lastmodified"] = m_dateTime.IsValid() ? m_dateTime.GetAsDBDateTime() : "";
   value["size"] = m_dwSize;
   value["DVDLabel"] = m_strDVDLabel;
   value["title"] = m_strTitle;
@@ -1377,6 +1378,7 @@ bool CFileItem::IsParentFolder() const
 
 void CFileItem::FillInMimeType(bool lookup /*= true*/)
 {
+  // TODO: adapt this to use CMime::GetMimeType()
   if (m_mimetype.empty())
   {
     if( m_bIsFolder )
@@ -1477,12 +1479,18 @@ void CFileItem::UpdateInfo(const CFileItem &item, bool replaceLabels /*=true*/)
     if (HasPVRRecordingInfoTag())
       GetPVRRecordingInfoTag()->CopyClientInfo(GetVideoInfoTag());
     SetOverlayImage(ICON_OVERLAY_UNWATCHED, GetVideoInfoTag()->m_playCount > 0);
+    SetInvalid();
   }
   if (item.HasMusicInfoTag())
+  {
     *GetMusicInfoTag() = *item.GetMusicInfoTag();
+    SetInvalid();
+  }
   if (item.HasPictureInfoTag())
+  {
     *GetPictureInfoTag() = *item.GetPictureInfoTag();
-
+    SetInvalid();
+  }
   if (replaceLabels && !item.GetLabel().empty())
     SetLabel(item.GetLabel());
   if (replaceLabels && !item.GetLabel2().empty())
@@ -2324,7 +2332,7 @@ void CFileItemList::StackFolders()
 {
   // Precompile our REs
   VECCREGEXP folderRegExps;
-  CRegExp folderRegExp(true, true);
+  CRegExp folderRegExp(true, CRegExp::autoUtf8);
   const CStdStringArray& strFolderRegExps = g_advancedSettings.m_folderStackRegExps;
 
   CStdStringArray::const_iterator strExpression = strFolderRegExps.begin();
@@ -2416,7 +2424,7 @@ void CFileItemList::StackFiles()
 {
   // Precompile our REs
   VECCREGEXP stackRegExps;
-  CRegExp tmpRegExp(true, true);
+  CRegExp tmpRegExp(true, CRegExp::autoUtf8);
   const CStdStringArray& strStackRegExps = g_advancedSettings.m_videoStackRegExps;
   CStdStringArray::const_iterator strRegExp = strStackRegExps.begin();
   while (strRegExp != strStackRegExps.end())
@@ -2459,7 +2467,7 @@ void CFileItemList::StackFiles()
 
     URIUtils::Split(item1->GetPath(), filePath, file1);
     if (URIUtils::ProtocolHasEncodedFilename(CURL(filePath).GetProtocol() ) )
-      CURL::Decode(file1);
+      file1 = CURL::Decode(file1);
 
     int j;
     while (expr != stackRegExps.end())
@@ -2492,7 +2500,7 @@ void CFileItemList::StackFiles()
           CStdString file2, filePath2;
           URIUtils::Split(item2->GetPath(), filePath2, file2);
           if (URIUtils::ProtocolHasEncodedFilename(CURL(filePath2).GetProtocol() ) )
-            CURL::Decode(file2);
+            file2 = CURL::Decode(file2);
 
           if (expr->RegFind(file2, offset) != -1)
           {
@@ -2892,10 +2900,8 @@ CStdString CFileItem::GetMovieName(bool bUseFolderNames /* = false */) const
     strMovieName = CStackDirectory::GetStackedTitlePath(strMovieName);
 
   URIUtils::RemoveSlashAtEnd(strMovieName);
-  strMovieName = URIUtils::GetFileName(strMovieName);
-  CURL::Decode(strMovieName);
 
-  return strMovieName;
+  return CURL::Decode(URIUtils::GetFileName(strMovieName));
 }
 
 CStdString CFileItem::GetBaseMoviePath(bool bUseFolderNames) const
@@ -3235,14 +3241,14 @@ CStdString CFileItem::FindTrailer() const
 
   CStdString strDir = URIUtils::GetDirectory(strFile);
   CFileItemList items;
-  CDirectory::GetDirectory(strDir, items, g_advancedSettings.m_videoExtensions, DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO);
+  CDirectory::GetDirectory(strDir, items, g_advancedSettings.m_videoExtensions, DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO | DIR_FLAG_NO_FILE_DIRS);
   URIUtils::RemoveExtension(strFile);
   strFile += "-trailer";
   CStdString strFile3 = URIUtils::AddFileToFolder(strDir, "movie-trailer");
 
   // Precompile our REs
   VECCREGEXP matchRegExps;
-  CRegExp tmpRegExp(true, true);
+  CRegExp tmpRegExp(true, CRegExp::autoUtf8);
   const CStdStringArray& strMatchRegExps = g_advancedSettings.m_trailerMatchRegExps;
 
   CStdStringArray::const_iterator strRegExp = strMatchRegExps.begin();
index 3d4cd86..346388e 100644 (file)
@@ -2162,7 +2162,6 @@ INFO::InfoPtr CGUIInfoManager::Register(const CStdString &expression, int contex
 {
   CStdString condition(CGUIInfoLabel::ReplaceLocalize(expression));
   StringUtils::Trim(condition);
-  StringUtils::ToLower(condition);
 
   if (condition.empty())
     return INFO::InfoPtr();
@@ -4034,7 +4033,7 @@ void CGUIInfoManager::SetCurrentItem(CFileItem &item)
   NotifyObservers(ObservableMessageCurrentItem);
 }
 
-void CGUIInfoManager::SetCurrentAlbumThumb(const CStdString thumbFileName)
+void CGUIInfoManager::SetCurrentAlbumThumb(const CStdString &thumbFileName)
 {
   if (CFile::Exists(thumbFileName))
     m_currentFile->SetArt("thumb", thumbFileName);
@@ -4747,7 +4746,6 @@ CStdString CGUIInfoManager::GetItemLabel(const CFileItem *item, int info, CStdSt
         URIUtils::RemoveSlashAtEnd(path);
         path=URIUtils::GetFileName(path);
       }
-      CURL::Decode(path);
       return path;
     }
   case LISTITEM_FILENAME_AND_PATH:
@@ -4760,7 +4758,6 @@ CStdString CGUIInfoManager::GetItemLabel(const CFileItem *item, int info, CStdSt
       else
         path = item->GetPath();
       path = CURL(path).GetWithoutUserDetails();
-      CURL::Decode(path);
       return path;
     }
   case LISTITEM_PICTURE_PATH:
index 1c1e34c..90b8c5a 100644 (file)
@@ -498,7 +498,7 @@ namespace INFO
 
 #define VERSION_MAJOR               13
 #define VERSION_MINOR               0
-#define VERSION_TAG                 "-ALPHA11"
+#define VERSION_TAG                 "-ALPHA12"
 
 #define LISTITEM_START              35000
 #define LISTITEM_THUMB              (LISTITEM_START)
@@ -758,7 +758,7 @@ public:
   // Current song stuff
   /// \brief Retrieves tag info (if necessary) and fills in our current song path.
   void SetCurrentSong(CFileItem &item);
-  void SetCurrentAlbumThumb(const CStdString thumbFileName);
+  void SetCurrentAlbumThumb(const CStdString &thumbFileName);
   void SetCurrentMovie(CFileItem &item);
   void SetCurrentSlide(CFileItem &item);
   const CFileItem &GetCurrentSlide() const;
index 290f729..3a413a2 100644 (file)
@@ -352,16 +352,22 @@ bool CGUIPassword::CheckSettingLevelLock(const SettingLevel& level, bool enforce
 
 }
 
+bool IsSettingsWindow(int iWindowID)
+{
+  return (iWindowID >= WINDOW_SCREEN_CALIBRATION && iWindowID <= WINDOW_SETTINGS_MYPVR)
+       || iWindowID == WINDOW_SKIN_SETTINGS;
+}
+
 bool CGUIPassword::CheckMenuLock(int iWindowID)
 {
   bool bCheckPW         = false;
   int iSwitch = iWindowID;
 
   // check if a settings subcategory was called from other than settings window
-  if (iWindowID >= WINDOW_SCREEN_CALIBRATION && iWindowID <= WINDOW_SETTINGS_MYPVR)
+  if (IsSettingsWindow(iWindowID))
   {
     int iCWindowID = g_windowManager.GetActiveWindow();
-    if (iCWindowID != WINDOW_SETTINGS_MENU && (iCWindowID < WINDOW_SCREEN_CALIBRATION || iCWindowID > WINDOW_SETTINGS_MYPVR))
+    if (iCWindowID != WINDOW_SETTINGS_MENU && !IsSettingsWindow(iCWindowID))
       iSwitch = WINDOW_SETTINGS_MENU;
   }
 
index fece2c2..4ed2461 100644 (file)
@@ -149,7 +149,7 @@ void CPasswordManager::Load()
 
 void CPasswordManager::Save() const
 {
-  if (!m_permanentCache.size())
+  if (m_permanentCache.empty())
     return;
 
   CXBMCTinyXML doc;
index 5394bd9..8b45d39 100644 (file)
@@ -66,6 +66,7 @@ bool CTextureCache::IsCachedImage(const CStdString &url) const
   if (url != "-" && !CURL::IsFullPath(url))
     return true;
   if (URIUtils::IsInPath(url, "special://skin/") ||
+      URIUtils::IsInPath(url, "special://temp/") ||
       URIUtils::IsInPath(url, "androidapp://")   ||
       URIUtils::IsInPath(url, CProfilesManager::Get().GetThumbnailsFolder()))
     return true;
@@ -145,9 +146,9 @@ CStdString CTextureCache::CacheImage(const CStdString &image, CBaseTexture **tex
 {
   CStdString url = CTextureUtils::UnwrapImageURL(image);
   CSingleLock lock(m_processingSection);
-  if (m_processing.find(url) == m_processing.end())
+  if (m_processinglist.find(url) == m_processinglist.end())
   {
-    m_processing.insert(url);
+    m_processinglist.insert(url);
     lock.Leave();
     // cache the texture directly
     CTextureCacheJob job(url);
@@ -165,7 +166,7 @@ CStdString CTextureCache::CacheImage(const CStdString &image, CBaseTexture **tex
     m_completeEvent.WaitMSec(1000);
     {
       CSingleLock lock(m_processingSection);
-      if (m_processing.find(url) == m_processing.end())
+      if (m_processinglist.find(url) == m_processinglist.end())
         break;
     }
   }
@@ -274,9 +275,9 @@ void CTextureCache::OnCachingComplete(bool success, CTextureCacheJob *job)
 
   { // remove from our processing list
     CSingleLock lock(m_processingSection);
-    std::set<CStdString>::iterator i = m_processing.find(job->m_url);
-    if (i != m_processing.end())
-      m_processing.erase(i);
+    std::set<CStdString>::iterator i = m_processinglist.find(job->m_url);
+    if (i != m_processinglist.end())
+      m_processinglist.erase(i);
   }
 
   m_completeEvent.Set();
@@ -300,10 +301,10 @@ void CTextureCache::OnJobProgress(unsigned int jobID, unsigned int progress, uns
     {
       CSingleLock lock(m_processingSection);
       const CTextureCacheJob *cacheJob = (CTextureCacheJob *)job;
-      std::set<CStdString>::iterator i = m_processing.find(cacheJob->m_url);
-      if (i == m_processing.end())
+      std::set<CStdString>::iterator i = m_processinglist.find(cacheJob->m_url);
+      if (i == m_processinglist.end())
       {
-        m_processing.insert(cacheJob->m_url);
+        m_processinglist.insert(cacheJob->m_url);
         return;
       }
     }
index be405af..af2e2c8 100644 (file)
@@ -222,7 +222,7 @@ private:
 
   CCriticalSection m_databaseSection;
   CTextureDatabase m_database;
-  std::set<CStdString> m_processing; ///< currently processing list to avoid 2 jobs being processed at once
+  std::set<CStdString> m_processinglist; ///< currently processing list to avoid 2 jobs being processed at once
   CCriticalSection     m_processingSection;
   CEvent               m_completeEvent; ///< Set whenever a job has finished
   std::vector<CTextureDetails> m_useCounts; ///< Use count tracking
index 0bb3b77..beeaa38 100644 (file)
@@ -102,7 +102,7 @@ bool CTextureCacheJob::CacheTexture(CBaseTexture **out_texture)
     return true;
   }
 #endif
-  CBaseTexture *texture = LoadImage(image, width, height, additional_info);
+  CBaseTexture *texture = LoadImage(image, width, height, additional_info, true);
   if (texture)
   {
     if (texture->HasAlpha())
@@ -177,7 +177,7 @@ CStdString CTextureCacheJob::DecodeImageURL(const CStdString &url, unsigned int
   return image;
 }
 
-CBaseTexture *CTextureCacheJob::LoadImage(const CStdString &image, unsigned int width, unsigned int height, const std::string &additional_info)
+CBaseTexture *CTextureCacheJob::LoadImage(const CStdString &image, unsigned int width, unsigned int height, const std::string &additional_info, bool requirePixels)
 {
   if (additional_info == "music")
   { // special case for embedded music images
@@ -193,7 +193,7 @@ CBaseTexture *CTextureCacheJob::LoadImage(const CStdString &image, unsigned int
       && !StringUtils::StartsWithNoCase(file.GetMimeType(), "image/") && !file.GetMimeType().Equals("application/octet-stream")) // ignore non-pictures
     return NULL;
 
-  CBaseTexture *texture = CBaseTexture::LoadFromFile(image, width, height, CSettings::Get().GetBool("pictures.useexifrotation"));
+  CBaseTexture *texture = CBaseTexture::LoadFromFile(image, width, height, CSettings::Get().GetBool("pictures.useexifrotation"), requirePixels, file.GetMimeType());
   if (!texture)
     return NULL;
 
index a1201f9..73f5756 100644 (file)
@@ -117,7 +117,7 @@ private:
    \param additional_info extra info for loading, such as whether to flip horizontally.
    \return a pointer to a CBaseTexture object, NULL if failed.
    */
-  static CBaseTexture *LoadImage(const CStdString &image, unsigned int width, unsigned int height, const std::string &additional_info);
+  static CBaseTexture *LoadImage(const CStdString &image, unsigned int width, unsigned int height, const std::string &additional_info, bool requirePixels = false);
 
   CStdString    m_cachePath;
 };
index 99fc6c2..8d48b1d 100644 (file)
 using namespace std;
 using namespace ADDON;
 
-CStdString URLEncodeInline(const CStdString& strData)
-{
-  CStdString buffer = strData;
-  CURL::Encode(buffer);
-  return buffer;
-}
-
 CURL::CURL(const CStdString& strURL1)
 {
   Parse(strURL1);
@@ -128,7 +121,7 @@ void CURL::Parse(const CStdString& strURL1)
         if (!(s.st_mode & S_IFDIR))
 #endif
         {
-          Encode(archiveName);
+          archiveName = Encode(archiveName);
           if (is_apk)
           {
             CURL c("apk://" + archiveName + "/" + strURL.substr(iPos + 1));
@@ -335,12 +328,12 @@ void CURL::Parse(const CStdString& strURL1)
   /* decode urlencoding on this stuff */
   if(URIUtils::ProtocolHasEncodedHostname(m_strProtocol))
   {
-    Decode(m_strHostName);
+    m_strHostName = Decode(m_strHostName);
     SetHostName(m_strHostName);
   }
 
-  Decode(m_strUserName);
-  Decode(m_strPassword);
+  m_strUserName = Decode(m_strUserName);
+  m_strPassword = Decode(m_strPassword);
 }
 
 void CURL::SetFileName(const CStdString& strFileName)
@@ -598,7 +591,7 @@ std::string CURL::GetWithoutUserDetails(bool redact) const
       strHostName = m_strHostName;
 
     if (URIUtils::ProtocolHasEncodedHostname(m_strProtocol))
-      strURL += URLEncodeInline(strHostName);
+      strURL += Encode(strHostName);
     else
       strURL += strHostName;
 
@@ -643,11 +636,11 @@ CStdString CURL::GetWithoutFilename() const
   }
   else if (m_strUserName != "")
   {
-    strURL += URLEncodeInline(m_strUserName);
+    strURL += Encode(m_strUserName);
     if (m_strPassword != "")
     {
       strURL += ":";
-      strURL += URLEncodeInline(m_strPassword);
+      strURL += Encode(m_strPassword);
     }
     strURL += "@";
   }
@@ -657,7 +650,7 @@ CStdString CURL::GetWithoutFilename() const
   if (m_strHostName != "")
   {
     if( URIUtils::ProtocolHasEncodedHostname(m_strProtocol) )
-      strURL += URLEncodeInline(m_strHostName);
+      strURL += Encode(m_strHostName);
     else
       strURL += m_strHostName;
     if (HasPort())
@@ -706,11 +699,11 @@ bool CURL::IsFullPath(const CStdString &url)
   return false;
 }
 
-void CURL::Decode(CStdString& strURLData)
+std::string CURL::Decode(const std::string& strURLData)
 //modified to be more accomodating - if a non hex value follows a % take the characters directly and don't raise an error.
 // However % characters should really be escaped like any other non safe character (www.rfc-editor.org/rfc/rfc1738.txt)
 {
-  CStdString strResult;
+  std::string strResult;
 
   /* result will always be less than source */
   strResult.reserve( strURLData.length() );
@@ -723,10 +716,10 @@ void CURL::Decode(CStdString& strURLData)
     {
       if (i < strURLData.size() - 2)
       {
-        CStdString strTmp;
+        std::string strTmp;
         strTmp.assign(strURLData.substr(i + 1, 2));
         int dec_num=-1;
-        sscanf(strTmp,"%x",(unsigned int *)&dec_num);
+        sscanf(strTmp.c_str(), "%x", (unsigned int *)&dec_num);
         if (dec_num<0 || dec_num>255)
           strResult += kar;
         else
@@ -740,45 +733,30 @@ void CURL::Decode(CStdString& strURLData)
     }
     else strResult += kar;
   }
-  strURLData = strResult;
+  
+  return strResult;
 }
 
-void CURL::Encode(CStdString& strURLData)
+std::string CURL::Encode(const std::string& strURLData)
 {
-  CStdString strResult;
+  std::string strResult;
 
   /* wonder what a good value is here is, depends on how often it occurs */
   strResult.reserve( strURLData.length() * 2 );
 
-  for (int i = 0; i < (int)strURLData.size(); ++i)
+  for (size_t i = 0; i < strURLData.size(); ++i)
   {
-    int kar = (unsigned char)strURLData[i];
-    //if (kar == ' ') strResult += '+'; // obsolete
-    if (isalnum(kar) || strchr("-_.!()" , kar) ) // Don't URL encode these according to RFC1738
-    {
-      strResult += kar;
-    }
+    const char kar = strURLData[i];
+    
+    // Don't URL encode "-_.!()" according to RFC1738
+    // TODO: Update it to "-_.~" after Gotham according to RFC3986
+    if (StringUtils::isasciialphanum(kar) || kar == '-' || kar == '.' || kar == '_' || kar == '!' || kar == '(' || kar == ')')
+      strResult.push_back(kar);
     else
-    {
-      CStdString strTmp = StringUtils::Format("%%%02.2x", kar);
-      strResult += strTmp;
-    }
+      strResult += StringUtils::Format("%%%02.2x", (unsigned int)((unsigned char)kar)); // TODO: Change to "%%%02.2X" after Gotham
   }
-  strURLData = strResult;
-}
 
-std::string CURL::Decode(const std::string& strURLData)
-{
-  CStdString url = strURLData;
-  Decode(url);
-  return url;
-}
-
-std::string CURL::Encode(const std::string& strURLData)
-{
-  CStdString url = strURLData;
-  Encode(url);
-  return url;
+  return strResult;
 }
 
 CStdString CURL::TranslateProtocol(const CStdString& prot)
index 1b510b1..193b0f8 100644 (file)
@@ -71,8 +71,6 @@ public:
   bool IsLocalHost() const;
   static bool IsFileOnly(const CStdString &url); ///< return true if there are no directories in the url.
   static bool IsFullPath(const CStdString &url); ///< return true if the url includes the full path
-  static void Decode(CStdString& strURLData);
-  static void Encode(CStdString& strURLData);
   static std::string Decode(const std::string& strURLData);
   static std::string Encode(const std::string& strURLData);
   static CStdString TranslateProtocol(const CStdString& prot);
index ae6eaa6..f614f17 100644 (file)
@@ -230,7 +230,7 @@ CStdString CUtil::GetTitleFromPath(const CStdString& strFileNameAndPath, bool bI
   }
   
   // URLDecode since the original path may be an URL
-  CURL::Decode(strFilename);
+  strFilename = CURL::Decode(strFilename);
   return strFilename;
 }
 
@@ -243,8 +243,8 @@ void CUtil::CleanString(const CStdString& strFileName, CStdString& strTitle, CSt
 
   const CStdStringArray &regexps = g_advancedSettings.m_videoCleanStringRegExps;
 
-  CRegExp reTags(true, true);
-  CRegExp reYear(false, true);
+  CRegExp reTags(true, CRegExp::autoUtf8);
+  CRegExp reYear(false, CRegExp::autoUtf8);
 
   if (!reYear.RegComp(g_advancedSettings.m_videoCleanDateTimeRegExp))
   {
@@ -519,7 +519,7 @@ bool CUtil::ExcludeFileOrFolder(const CStdString& strFileOrFolder, const CStdStr
   if (strFileOrFolder.empty())
     return false;
 
-  CRegExp regExExcludes(true, true);  // case insensitive regex
+  CRegExp regExExcludes(true, CRegExp::autoUtf8);  // case insensitive regex
 
   for (unsigned int i = 0; i < regexps.size(); i++)
   {
@@ -2205,7 +2205,7 @@ bool CUtil::FindVobSubPair( const std::vector<CStdString>& vecSubtitles, const C
       CStdString strSubDirectory;
       URIUtils::Split(vecSubtitles[j], strSubDirectory, strSubFile);
       if (URIUtils::IsInArchive(vecSubtitles[j]))
-        CURL::Decode(strSubDirectory);
+        strSubDirectory = CURL::Decode(strSubDirectory);
       if (URIUtils::HasExtension(strSubFile, ".sub") &&
           (URIUtils::ReplaceExtension(strIdxFile,"").Equals(URIUtils::ReplaceExtension(strSubFile,"")) ||
            (strSubDirectory.size() >= 11 &&
@@ -2229,7 +2229,7 @@ bool CUtil::IsVobSub( const std::vector<CStdString>& vecSubtitles, const CStdStr
     CStdString strSubDirectory;
     URIUtils::Split(strSubPath, strSubDirectory, strSubFile);
     if (URIUtils::IsInArchive(strSubPath))
-      CURL::Decode(strSubDirectory);
+      strSubDirectory = CURL::Decode(strSubDirectory);
     for (unsigned int j=0; j < vecSubtitles.size(); j++)
     {
       CStdString strIdxFile;
index 2edf3b0..995f9b7 100644 (file)
@@ -687,15 +687,18 @@ void CDateTime::FromULargeInt(const ULARGE_INTEGER& time)
   m_time.dwLowDateTime=time.u.LowPart;
 }
 
-void CDateTime::SetFromDateString(const CStdString &date)
+bool CDateTime::SetFromDateString(const CStdString &date)
 {
   /* TODO:STRING_CLEANUP */
   if (date.empty())
   {
     SetValid(false);
-    return;
+    return false;
   }
 
+  if (SetFromDBDate(date))
+    return true;
+
   const char* months[] = {"january","february","march","april","may","june","july","august","september","october","november","december",NULL};
   int j=0;
   size_t iDayPos = date.find("day");
@@ -709,11 +712,8 @@ void CDateTime::SetFromDateString(const CStdString &date)
     iDayPos = 0;
 
   CStdString strMonth = date.substr(iDayPos, iPos - iDayPos);
-  if (strMonth.empty()) // assume dbdate format
-  {
-    SetFromDBDate(date);
-    return;
-  }
+  if (strMonth.empty())
+    return false;
 
   size_t iPos2 = date.find(",");
   CStdString strDay = (date.size() >= iPos) ? date.substr(iPos, iPos2-iPos) : "";
@@ -721,9 +721,9 @@ void CDateTime::SetFromDateString(const CStdString &date)
   while (months[j] && stricmp(strMonth.c_str(),months[j]) != 0)
     j++;
   if (!months[j])
-    return;
+    return false;
 
-  SetDateTime(atol(strYear.c_str()),j+1,atol(strDay.c_str()),0,0,0);
+  return SetDateTime(atol(strYear.c_str()),j+1,atol(strDay.c_str()),0,0,0);
 }
 
 int CDateTime::GetDay() const
@@ -789,7 +789,7 @@ int CDateTime::GetMinuteOfDay() const
   return st.wHour*60+st.wMinute;
 }
 
-void CDateTime::SetDateTime(int year, int month, int day, int hour, int minute, int second)
+bool CDateTime::SetDateTime(int year, int month, int day, int hour, int minute, int second)
 {
   SYSTEMTIME st;
   ZeroMemory(&st, sizeof(SYSTEMTIME));
@@ -802,17 +802,18 @@ void CDateTime::SetDateTime(int year, int month, int day, int hour, int minute,
   st.wSecond=second;
 
   m_state = ToFileTime(st, m_time) ? valid : invalid;
+  return m_state == valid;
 }
 
-void CDateTime::SetDate(int year, int month, int day)
+bool CDateTime::SetDate(int year, int month, int day)
 {
-  SetDateTime(year, month, day, 0, 0, 0);
+  return SetDateTime(year, month, day, 0, 0, 0);
 }
 
-void CDateTime::SetTime(int hour, int minute, int second)
+bool CDateTime::SetTime(int hour, int minute, int second)
 {
   // 01.01.1601 00:00:00 is 0 as filetime
-  SetDateTime(1601, 1, 1, hour, minute, second);
+  return SetDateTime(1601, 1, 1, hour, minute, second);
 }
 
 void CDateTime::GetAsSystemTime(SYSTEMTIME& time) const
@@ -873,13 +874,14 @@ CStdString CDateTime::GetAsSaveString() const
   return StringUtils::Format("%04i%02i%02i_%02i%02i%02i", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);;
 }
 
-void CDateTime::SetFromUTCDateTime(const CDateTime &dateTime)
+bool CDateTime::SetFromUTCDateTime(const CDateTime &dateTime)
 {
   CDateTime tmp(dateTime);
   tmp -= GetTimezoneBias();
 
   m_time = tmp.m_time;
   m_state = tmp.m_state;
+  return m_state == valid;
 }
 
 static bool bGotTimezoneBias = false;
@@ -914,13 +916,13 @@ CDateTimeSpan CDateTime::GetTimezoneBias(void)
   return timezoneBias;
 }
 
-void CDateTime::SetFromUTCDateTime(const time_t &dateTime)
+bool CDateTime::SetFromUTCDateTime(const time_t &dateTime)
 {
   CDateTime tmp(dateTime);
-  SetFromUTCDateTime(tmp);
+  return SetFromUTCDateTime(tmp);
 }
 
-void CDateTime::SetFromW3CDate(const CStdString &dateTime)
+bool CDateTime::SetFromW3CDate(const CStdString &dateTime)
 {
   CStdString date, time, zone;
 
@@ -960,10 +962,10 @@ void CDateTime::SetFromW3CDate(const CStdString &dateTime)
   if (time.length() >= 8)
     sec  = atoi(time.substr(6, 2).c_str());
 
-  SetDateTime(year, month, day, hour, min, sec);
+  return SetDateTime(year, month, day, hour, min, sec);
 }
 
-void CDateTime::SetFromDBDateTime(const CStdString &dateTime)
+bool CDateTime::SetFromDBDateTime(const CStdString &dateTime)
 {
   // assumes format YYYY-MM-DD HH:MM:SS
   if (dateTime.size() == 19)
@@ -974,36 +976,38 @@ void CDateTime::SetFromDBDateTime(const CStdString &dateTime)
     int hour  = atoi(dateTime.substr(11, 2).c_str());
     int min   = atoi(dateTime.substr(14, 2).c_str());
     int sec   = atoi(dateTime.substr(17, 2).c_str());
-    SetDateTime(year, month, day, hour, min, sec);
+    return SetDateTime(year, month, day, hour, min, sec);
   }
+  return false;
 }
 
-void CDateTime::SetFromDBDate(const CStdString &date)
+bool CDateTime::SetFromDBDate(const CStdString &date)
 {
   if (date.size() < 10)
-    return;
+    return false;
   // assumes format:
   // YYYY-MM-DD or DD-MM-YYYY
+  const static std::string sep_chars = "-./";
   int year = 0, month = 0, day = 0;
-  if (date[2] == '-' || date[2] == '.')
+  if (sep_chars.find(date[2]) != std::string::npos)
   {
     day = atoi(date.substr(0, 2).c_str());
     month = atoi(date.substr(3, 2).c_str());
     year = atoi(date.substr(6, 4).c_str());
   }
-  else
+  else if (sep_chars.find(date[4]) != std::string::npos)
   {
     year = atoi(date.substr(0, 4).c_str());
     month = atoi(date.substr(5, 2).c_str());
     day = atoi(date.substr(8, 2).c_str());
   }
-  SetDate(year, month, day);
+  return SetDate(year, month, day);
 }
 
-void CDateTime::SetFromDBTime(const CStdString &time)
+bool CDateTime::SetFromDBTime(const CStdString &time)
 {
   if (time.size() < 8)
-    return;
+    return false;
   // assumes format:
   // HH:MM:SS
   int hour, minute, second;
@@ -1012,16 +1016,16 @@ void CDateTime::SetFromDBTime(const CStdString &time)
   minute = atoi(time.substr(3, 2).c_str());
   second = atoi(time.substr(6, 2).c_str());
 
-  SetTime(hour, minute, second);
+  return SetTime(hour, minute, second);
 }
 
-void CDateTime::SetFromRFC1123DateTime(const CStdString &dateTime)
+bool CDateTime::SetFromRFC1123DateTime(const CStdString &dateTime)
 {
   CStdString date = dateTime;
   StringUtils::Trim(date);
 
   if (date.size() != 29)
-    return;
+    return false;
 
   int day  = strtol(date.substr(5, 2).c_str(), NULL, 10);
 
@@ -1037,14 +1041,14 @@ void CDateTime::SetFromRFC1123DateTime(const CStdString &dateTime)
   }
 
   if (month < 1)
-    return;
+    return false;
 
   int year = strtol(date.substr(12, 4).c_str(), NULL, 10);
   int hour = strtol(date.substr(17, 2).c_str(), NULL, 10);
   int min  = strtol(date.substr(20, 2).c_str(), NULL, 10);
   int sec  = strtol(date.substr(23, 2).c_str(), NULL, 10);
 
-  SetDateTime(year, month, day, hour, min, sec);
+  return SetDateTime(year, month, day, hour, min, sec);
 }
 
 CStdString CDateTime::GetAsLocalizedTime(const CStdString &format, bool withSeconds) const
index 969531c..7f58692 100644 (file)
@@ -98,7 +98,7 @@ public:
   CDateTime(int year, int month, int day, int hour, int minute, int second);
   virtual ~CDateTime() {}
 
-  void SetFromDateString(const CStdString &date);
+  bool SetFromDateString(const CStdString &date);
 
   static CDateTime GetCurrentDateTime();
   static CDateTime GetUTCDateTime();
@@ -167,20 +167,20 @@ public:
   int GetDayOfWeek() const;
   int GetMinuteOfDay() const;
 
-  void SetDateTime(int year, int month, int day, int hour, int minute, int second);
-  void SetDate(int year, int month, int day);
-  void SetTime(int hour, int minute, int second);
-  void SetFromDBDate(const CStdString &date);
-  void SetFromDBTime(const CStdString &time);
-  void SetFromW3CDate(const CStdString &date);
-  void SetFromUTCDateTime(const CDateTime &dateTime);
-  void SetFromUTCDateTime(const time_t &dateTime);
-  void SetFromRFC1123DateTime(const CStdString &dateTime);
+  bool SetDateTime(int year, int month, int day, int hour, int minute, int second);
+  bool SetDate(int year, int month, int day);
+  bool SetTime(int hour, int minute, int second);
+  bool SetFromDBDate(const CStdString &date);
+  bool SetFromDBTime(const CStdString &time);
+  bool SetFromW3CDate(const CStdString &date);
+  bool SetFromUTCDateTime(const CDateTime &dateTime);
+  bool SetFromUTCDateTime(const time_t &dateTime);
+  bool SetFromRFC1123DateTime(const CStdString &dateTime);
 
   /*! \brief set from a database datetime format YYYY-MM-DD HH:MM:SS
    \sa GetAsDBDateTime()
    */
-  void SetFromDBDateTime(const CStdString &dateTime);
+  bool SetFromDBDateTime(const CStdString &dateTime);
 
   void GetAsSystemTime(SYSTEMTIME& time) const;
   void GetAsTime(time_t& time) const;
index 981a2c3..e20fd43 100644 (file)
@@ -315,8 +315,7 @@ bool CAddon::MeetsVersion(const AddonVersion &version) const
   // if the addon is one of xbmc's extension point definitions (addonid starts with "xbmc.")
   // and the minversion is "0.0.0" i.e. no <backwards-compatibility> tag has been specified
   // we need to assume that the current version is not backwards-compatible and therefore check against the actual version
-  if (StringUtils::StartsWithNoCase(m_props.id, "xbmc.") &&
-     (strlen(m_props.minversion.c_str()) == 0 || StringUtils::EqualsNoCase(m_props.minversion.c_str(), "0.0.0")))
+  if (StringUtils::StartsWithNoCase(m_props.id, "xbmc.") && m_props.minversion.empty())
     return m_props.version == version;
 
   return m_props.minversion <= version && version <= m_props.version;
index 4202363..524895a 100644 (file)
@@ -90,6 +90,10 @@ bool CAddonDatabase::CreateTables()
     CLog::Log(LOGINFO, "create blacklist table");
     m_pDS->exec("CREATE TABLE blacklist (id integer primary key, addonID text, version text)\n");
     m_pDS->exec("CREATE UNIQUE INDEX idxBlack ON blacklist(addonID)");
+
+    CLog::Log(LOGINFO, "create package table");
+    m_pDS->exec("CREATE TABLE package (id integer primary key, addonID text, filename text, hash text)\n");
+    m_pDS->exec("CREATE UNIQUE INDEX idxPackage ON package(filename)");
   }
   catch (...)
   {
@@ -116,6 +120,11 @@ bool CAddonDatabase::UpdateOldVersion(int version)
     m_pDS->exec("CREATE TABLE blacklist (id integer primary key, addonID text, version text)\n");
     m_pDS->exec("CREATE UNIQUE INDEX idxBlack ON blacklist(addonID)");
   }
+  if (version < 16)
+  {
+    m_pDS->exec("CREATE TABLE package (id integer primary key, addonID text, filename text, hash text)\n");
+    m_pDS->exec("CREATE UNIQUE INDEX idxPackage ON package(filename)");
+  }
   return true;
 }
 
@@ -172,6 +181,39 @@ int CAddonDatabase::AddAddon(const AddonPtr& addon,
   return -1;
 }
 
+AddonVersion CAddonDatabase::GetAddonVersion(const std::string &id)
+{
+  AddonVersion maxversion("0.0.0");
+  try
+  {
+    if (NULL == m_pDB.get()) return maxversion;
+    if (NULL == m_pDS2.get()) return maxversion;
+
+    // there may be multiple addons with this id (eg from different repositories) in the database,
+    // so we want to retrieve the latest version.  Order by version won't work as the database
+    // won't know that 1.10 > 1.2, so grab them all and order outside
+    CStdString sql = PrepareSQL("select version from addon where addonID='%s'",id.c_str());
+    m_pDS2->query(sql.c_str());
+
+    if (m_pDS2->eof())
+      return maxversion;
+
+    while (!m_pDS2->eof())
+    {
+      AddonVersion version(m_pDS2->fv(0).get_asString());
+      if (version > maxversion)
+        maxversion = version;
+      m_pDS2->next();
+    }
+    return maxversion;
+  }
+  catch (...)
+  {
+    CLog::Log(LOGERROR, "%s failed on addon %s", __FUNCTION__, id.c_str());
+  }
+  return maxversion;
+}
+
 bool CAddonDatabase::GetAddon(const CStdString& id, AddonPtr& addon)
 {
   try
@@ -233,49 +275,56 @@ bool CAddonDatabase::GetRepoForAddon(const CStdString& addonID, CStdString& repo
   return false;
 }
 
-bool CAddonDatabase::GetAddon(int id, AddonPtraddon)
+bool CAddonDatabase::GetAddon(int id, AddonPtr &addon)
 {
   try
   {
     if (NULL == m_pDB.get()) return false;
     if (NULL == m_pDS2.get()) return false;
 
-    CStdString sql = PrepareSQL("select * from addon where id=%i",id);
+    std::string sql = "SELECT addon.*,"
+                      "       broken.reason,"
+                      "       addonextra.key, addonextra.value,"
+                      "       dependencies.addon, dependencies.version, dependencies.optional"
+                      "  FROM addon"
+                      "    LEFT JOIN broken"
+                      "      ON broken.addonID = addon.addonID"
+                      "    LEFT JOIN addonextra"
+                      "      ON addonextra.id = addon.id"
+                      "    LEFT JOIN dependencies"
+                      "      ON dependencies.id = addon.id";
+
+    sql += PrepareSQL(" WHERE addon.id=%i", id);
+
     m_pDS2->query(sql.c_str());
     if (!m_pDS2->eof())
     {
-      AddonProps props(m_pDS2->fv("addonID" ).get_asString(),
-                       TranslateType(m_pDS2->fv("type").get_asString()),
-                       m_pDS2->fv("version").get_asString(),
-                       m_pDS2->fv("minversion").get_asString());
-      props.name = m_pDS2->fv("name").get_asString();
-      props.summary = m_pDS2->fv("summary").get_asString();
-      props.description = m_pDS2->fv("description").get_asString();
-      props.changelog = m_pDS2->fv("changelog").get_asString();
-      props.path = m_pDS2->fv("path").get_asString();
-      props.icon = m_pDS2->fv("icon").get_asString();
-      props.fanart = m_pDS2->fv("fanart").get_asString();
-      props.author = m_pDS2->fv("author").get_asString();
-      props.disclaimer = m_pDS2->fv("disclaimer").get_asString();
-      sql = PrepareSQL("select reason from broken where addonID='%s'",props.id.c_str());
-      m_pDS2->query(sql.c_str());
-      if (!m_pDS2->eof())
-        props.broken = m_pDS2->fv(0).get_asString();
-
-      sql = PrepareSQL("select key,value from addonextra where id=%i", id);
-      m_pDS2->query(sql.c_str());
-      while (!m_pDS2->eof())
-      {
-        props.extrainfo.insert(make_pair(m_pDS2->fv(0).get_asString(), m_pDS2->fv(1).get_asString()));
-        m_pDS2->next();
-      }
-
-      sql = PrepareSQL("select addon,version,optional from dependencies where id=%i", id);
-      m_pDS2->query(sql.c_str());
-      while (!m_pDS2->eof())
+      const dbiplus::query_data &data = m_pDS2->get_result_set().records;
+      const dbiplus::sql_record* const record = data[0];
+      AddonProps props(record->at(addon_addonID).get_asString(),
+                       TranslateType(record->at(addon_type).get_asString()),
+                       record->at(addon_version).get_asString(),
+                       record->at(addon_minversion).get_asString());
+      props.name = record->at(addon_name).get_asString();
+      props.summary = record->at(addon_summary).get_asString();
+      props.description = record->at(addon_description).get_asString();
+      props.changelog = record->at(addon_changelog).get_asString();
+      props.path = record->at(addon_path).get_asString();
+      props.icon = record->at(addon_icon).get_asString();
+      props.fanart = record->at(addon_fanart).get_asString();
+      props.author = record->at(addon_author).get_asString();
+      props.disclaimer = record->at(addon_disclaimer).get_asString();
+      props.broken = record->at(broken_reason).get_asString();
+
+      /* while this is a cartesion join and we'll typically get multiple rows, we rely on the fact that
+         extrainfo and dependencies are maps, so insert() will insert the first instance only */
+      for (dbiplus::query_data::const_iterator i = data.begin(); i != data.end(); ++i)
       {
-        props.dependencies.insert(make_pair(m_pDS2->fv(0).get_asString(), make_pair(AddonVersion(m_pDS2->fv(1).get_asString()), m_pDS2->fv(2).get_asBool())));
-        m_pDS2->next();
+        const dbiplus::sql_record* const record = *i;
+        if (!record->at(addonextra_key).get_asString().empty())
+          props.extrainfo.insert(make_pair(record->at(addonextra_key).get_asString(), record->at(addonextra_value).get_asString()));
+        if (!m_pDS2->fv(dependencies_addon).get_asString().empty())
+          props.dependencies.insert(make_pair(record->at(dependencies_addon).get_asString(), make_pair(AddonVersion(record->at(dependencies_version).get_asString()), record->at(dependencies_optional).get_asBool())));
       }
 
       addon = CAddonMgr::AddonFromProps(props);
@@ -301,10 +350,8 @@ bool CAddonDatabase::GetAddons(VECADDONS& addons)
     m_pDS->query(sql.c_str());
     while (!m_pDS->eof())
     {
-      sql = PrepareSQL("select id from addon where addonID='%s' order by version desc",m_pDS->fv(0).get_asString().c_str());
-      m_pDS2->query(sql.c_str());
       AddonPtr addon;
-      if (GetAddon(m_pDS2->fv(0).get_asInt(),addon))
+      if (GetAddon(m_pDS->fv(0).get_asString(),addon))
         addons.push_back(addon);
       m_pDS->next();
     }
@@ -510,7 +557,7 @@ bool CAddonDatabase::Search(const CStdString& search, VECADDONS& addons)
     if (NULL == m_pDS.get()) return false;
 
     CStdString strSQL;
-    strSQL=PrepareSQL("SELECT id FROM addon WHERE name LIKE '%%%s%%' OR summary LIKE '%%%s%%' OR description LIKE '%%%s%%'", search.c_str(), search.c_str(), search.c_str());
+    strSQL=PrepareSQL("SELECT addonID FROM addon WHERE name LIKE '%%%s%%' OR summary LIKE '%%%s%%' OR description LIKE '%%%s%%'", search.c_str(), search.c_str(), search.c_str());
     CLog::Log(LOGDEBUG, "%s query: %s", __FUNCTION__, strSQL.c_str());
 
     if (!m_pDS->query(strSQL.c_str())) return false;
@@ -519,7 +566,7 @@ bool CAddonDatabase::Search(const CStdString& search, VECADDONS& addons)
     while (!m_pDS->eof())
     {
       AddonPtr addon;
-      GetAddon(m_pDS->fv(0).get_asInt(),addon);
+      GetAddon(m_pDS->fv(0).get_asString(),addon);
       if (addon->Type() >= ADDON_UNKNOWN+1 && addon->Type() < ADDON_SCRAPER_LIBRARY)
         addons.push_back(addon);
       m_pDS->next();
@@ -620,26 +667,11 @@ bool CAddonDatabase::DisableAddon(const CStdString &addonID, bool disable /* = t
 
 bool CAddonDatabase::BreakAddon(const CStdString &addonID, const CStdString& reason)
 {
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString sql = PrepareSQL("delete from broken where addonID='%s'", addonID.c_str());
-    m_pDS->exec(sql);
-
-    if (!reason.empty())
-    { // broken
-      sql = PrepareSQL("insert into broken(id, addonID, reason) values(NULL, '%s', '%s')", addonID.c_str(),reason.c_str());
-      m_pDS->exec(sql);
-    }
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed on addon '%s'", __FUNCTION__, addonID.c_str());
-  }
-  return false;
+  if (reason.empty())
+    return ExecuteQuery(PrepareSQL("DELETE FROM broken WHERE addonID='%s'", addonID.c_str()));
+  else
+    return ExecuteQuery(PrepareSQL("REPLACE INTO broken(addonID, reason) VALUES('%s', '%s')",
+                                   addonID.c_str(), reason.c_str()));
 }
 
 bool CAddonDatabase::HasAddon(const CStdString &addonID)
@@ -680,24 +712,7 @@ bool CAddonDatabase::IsSystemPVRAddonEnabled(const CStdString &addonID)
 
 CStdString CAddonDatabase::IsAddonBroken(const CStdString &addonID)
 {
-  try
-  {
-    if (NULL == m_pDB.get()) return "";
-    if (NULL == m_pDS.get()) return "";
-
-    CStdString sql = PrepareSQL("select reason from broken where addonID='%s'", addonID.c_str());
-    m_pDS->query(sql.c_str());
-    CStdString ret;
-    if (!m_pDS->eof())
-      ret = m_pDS->fv(0).get_asString();
-    m_pDS->close();
-    return ret;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed on addon %s", __FUNCTION__, addonID.c_str());
-  }
-  return "";
+  return GetSingleValue(PrepareSQL("SELECT reason FROM broken WHERE addonID='%s'", addonID.c_str()));
 }
 
 bool CAddonDatabase::HasDisabledAddons()
@@ -764,3 +779,30 @@ bool CAddonDatabase::RemoveAddonFromBlacklist(const CStdString& addonID,
   }
   return false;
 }
+
+bool CAddonDatabase::AddPackage(const CStdString& addonID,
+                                const CStdString& packageFileName,
+                                const CStdString& hash)
+{
+  CStdString sql = PrepareSQL("insert into package(id, addonID, filename, hash)"
+                              "values(NULL, '%s', '%s', '%s')",
+                              addonID.c_str(), packageFileName.c_str(), hash.c_str());
+  return ExecuteQuery(sql);
+}
+
+bool CAddonDatabase::GetPackageHash(const CStdString& addonID,
+                                    const CStdString& packageFileName,
+                                    CStdString&       hash)
+{
+  CStdString where = PrepareSQL("addonID='%s' and filename='%s'",
+                                addonID.c_str(), packageFileName.c_str());
+  hash = GetSingleValue("package", "hash", where);
+  return !hash.empty();
+}
+
+bool CAddonDatabase::RemovePackage(const CStdString& packageFileName)
+{
+  CStdString sql = PrepareSQL("delete from package where filename='%s'", packageFileName.c_str());
+  return ExecuteQuery(sql);
+}
+
index aba44f7..0901a0b 100644 (file)
@@ -34,7 +34,9 @@ public:
   int AddAddon(const ADDON::AddonPtr& item, int idRepo);
   bool GetAddon(const CStdString& addonID, ADDON::AddonPtr& addon);
   bool GetAddons(ADDON::VECADDONS& addons);
-  bool GetAddon(int id, ADDON::AddonPtr& addon);
+
+  /*! \brief grab the (largest) add-on version for an add-on */
+  ADDON::AddonVersion GetAddonVersion(const std::string &id);
 
   /*! \brief Grab the repository from which a given addon came
    \param addonID - the id of the addon in question
@@ -106,10 +108,64 @@ public:
   bool RemoveAddonFromBlacklist(const CStdString& addonID,
                                 const CStdString& version);
 
+  /*! \brief Store an addon's package filename and that file's hash for future verification
+      \param  addonID         id of the addon we're adding a package for
+      \param  packageFileName filename of the package
+      \param  hash            MD5 checksum of the package
+      \return Whether or not the info successfully made it into the DB.
+      \sa GetPackageHash, RemovePackage
+  */
+  bool AddPackage(const CStdString& addonID,
+                  const CStdString& packageFileName,
+                  const CStdString& hash);
+  /*! \brief Query the MD5 checksum of the given given addon's given package
+      \param  addonID         id of the addon we're who's package we're querying
+      \param  packageFileName filename of the package
+      \param  hash            return the MD5 checksum of the package
+      \return Whether or not we found a hash for the given addon's given package
+      \sa AddPackage, RemovePackage
+  */
+  bool GetPackageHash(const CStdString& addonID,
+                      const CStdString& packageFileName,
+                      CStdString&       hash);
+  /*! \brief Remove a package's info from the database
+      \param  packageFileName filename of the package
+      \return Whether or not we succeeded in removing the package
+      \sa AddPackage, GetPackageHash
+  */
+  bool RemovePackage(const CStdString& packageFileName);
 protected:
   virtual bool CreateTables();
   virtual bool UpdateOldVersion(int version);
-  virtual int GetMinVersion() const { return 15; }
+  virtual int GetMinVersion() const { return 16; }
   const char *GetBaseDBName() const { return "Addons"; }
+
+  bool GetAddon(int id, ADDON::AddonPtr& addon);
+
+  /* keep in sync with the select in GetAddon */
+  enum _AddonFields
+  {
+    addon_id=0,
+    addon_type,
+    addon_name,
+    addon_summary,
+    addon_description,
+    addon_stars,
+    addon_path,
+    addon_addonID,
+    addon_icon,
+    addon_version,
+    addon_changelog,
+    addon_fanart,
+    addon_author,
+    addon_disclaimer,
+    addon_minversion,
+    broken_reason,
+    addonextra_key,
+    addonextra_value,
+    dependencies_addon,
+    dependencies_version,
+    dependencies_optional
+  } AddonFields;
 };
 
index 8c9f241..ccc8fdf 100644 (file)
@@ -240,9 +240,6 @@ bool CAddonInstaller::DoInstall(const AddonPtr &addon, const CStdString &hash, b
     return false;
 
   // check whether all the dependencies are available or not
-  // TODO: we currently assume that dependencies will install correctly (and each of their dependencies and so on).
-  //       it may be better to install the dependencies first to minimise the chance of an addon becoming orphaned due to
-  //       missing deps.
   if (!CheckDependencies(addon))
   {
     CGUIDialogKaiToast::QueueNotification(addon->Icon(), addon->Name(), g_localizeStrings.Get(24044), TOAST_DISPLAY_TIME, false);
@@ -310,20 +307,22 @@ void CAddonInstaller::InstallFromXBMCRepo(const set<CStdString> &addonIDs)
     Install(*i);
 }
 
-bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
+bool CAddonInstaller::CheckDependencies(const AddonPtr &addon, CAddonDatabase *database /* = NULL */)
 {
   std::vector<std::string> preDeps;
   preDeps.push_back(addon->ID());
-  return CheckDependencies(addon, preDeps);
+  CAddonDatabase localDB;
+  if (!database)
+    database = &localDB;
+  return CheckDependencies(addon, preDeps, *database);
 }
 
 bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
-                                        std::vector<std::string>& preDeps)
+                                        std::vector<std::string>& preDeps, CAddonDatabase &database)
 {
   if (!addon.get())
     return true; // a NULL addon has no dependencies
   ADDONDEPS deps = addon->GetDeps();
-  CAddonDatabase database;
   database.Open();
   for (ADDONDEPS::const_iterator i = deps.begin(); i != deps.end(); ++i)
   {
@@ -337,6 +336,7 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
       if (!database.GetAddon(addonID, dep) || !dep->MeetsVersion(version))
       { // we don't have it in a repo, or we have it but the version isn't good enough, so dep isn't satisfied.
         CLog::Log(LOGDEBUG, "Addon %s requires %s version %s which is not available", addon->ID().c_str(), addonID.c_str(), version.c_str());
+        database.Close();
         return false;
       }
     }
@@ -344,11 +344,15 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
     // TODO: should we assume that installed deps are OK?
     if (dep && std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end())
     {
-      if (!CheckDependencies(dep, preDeps))
+      if (!CheckDependencies(dep, preDeps, database))
+      {
+        database.Close();
         return false;
+      }
       preDeps.push_back(dep->ID());
     }
   }
+  database.Close();
   return true;
 }
 
@@ -409,7 +413,9 @@ void CAddonInstaller::PrunePackageCache()
 
   // Prune packages
   // 1. Remove the largest packages, leaving at least 2 for each add-on
-  CFileItemList items;
+  CFileItemList   items;
+  CAddonDatabase  db;
+  db.Open();
   for (std::map<CStdString,CFileItemList*>::const_iterator it  = packs.begin();
                                                           it != packs.end();++it)
   {
@@ -422,6 +428,7 @@ void CAddonInstaller::PrunePackageCache()
   while (size > limit && i < items.Size())
   {
     size -= items[i]->m_dwSize;
+    db.RemovePackage(items[i]->GetPath());
     CFileUtils::DeleteItem(items[i++],true);
   }
 
@@ -440,6 +447,7 @@ void CAddonInstaller::PrunePackageCache()
     while (size > limit && i < items.Size())
     {
       size -= items[i]->m_dwSize;
+      db.RemovePackage(items[i]->GetPath());
       CFileUtils::DeleteItem(items[i++],true);
     }
   }
@@ -499,32 +507,56 @@ bool CAddonInstallJob::DoWork()
     CStdString dest="special://home/addons/packages/";
     CStdString package = URIUtils::AddFileToFolder("special://home/addons/packages/",
                                                 URIUtils::GetFileName(m_addon->Path()));
-
     if (URIUtils::HasSlashAtEnd(m_addon->Path()))
     { // passed in a folder - all we need do is copy it across
       installFrom = m_addon->Path();
     }
     else
     {
-      // zip passed in - download + extract
-      CStdString path(m_addon->Path());
-      if (!m_referer.empty() && URIUtils::IsInternetStream(path))
+      CStdString      md5;
+      CAddonDatabase  db;
+      db.Open();
+
+      // check that we don't already have a valid copy
+      if (!m_hash.empty() && CFile::Exists(package))
       {
-        CURL url(path);
-        url.SetProtocolOptions(m_referer);
-        path = url.Get();
+        if (db.GetPackageHash(m_addon->ID(), package, md5) && m_hash != md5)
+        {
+          db.RemovePackage(package);
+          CFile::Delete(package);
+        }
       }
-      if (!CFile::Exists(package) && !DownloadPackage(path, dest))
+
+      // zip passed in - download + extract
+      if (!CFile::Exists(package))
       {
-        CFile::Delete(package);
-        return false;
+        CStdString path(m_addon->Path());
+        if (!m_referer.empty() && URIUtils::IsInternetStream(path))
+        {
+          CURL url(path);
+          url.SetProtocolOptions(m_referer);
+          path = url.Get();
+        }
+
+        if (!DownloadPackage(path, dest))
+        {
+          CFile::Delete(package);
+          return false;
+        }
       }
 
       // at this point we have the package - check that it is valid
-      if (!CFile::Exists(package) || !CheckHash(package))
+      if (!m_hash.empty())
       {
-        CFile::Delete(package);
-        return false;
+        md5 = CUtil::GetFileMD5(package);
+        if (!md5.Equals(m_hash))
+        {
+          CFile::Delete(package);
+          ReportInstallError(m_addon->ID(), URIUtils::GetFileName(package));
+          CLog::Log(LOGERROR, "MD5 mismatch after download %s", package.c_str());
+          return false;
+        }
+        db.AddPackage(m_addon->ID(), package, md5);
       }
 
       // check the archive as well - should have just a single folder in the root
@@ -536,6 +568,7 @@ bool CAddonInstallJob::DoWork()
 
       if (archivedFiles.Size() != 1 || !archivedFiles[0]->m_bIsFolder)
       { // invalid package
+        db.RemovePackage(package);
         CFile::Delete(package);
         return false;
       }
@@ -609,6 +642,38 @@ bool CAddonInstallJob::DeleteAddon(const CStdString &addonFolder)
 
 bool CAddonInstallJob::Install(const CStdString &installFrom, const AddonPtr& repo)
 {
+  // The first thing we do is install dependencies
+  ADDONDEPS deps = m_addon->GetDeps();
+  CStdString referer = StringUtils::Format("Referer=%s-%s.zip",m_addon->ID().c_str(),m_addon->Version().c_str());
+  for (ADDONDEPS::iterator it  = deps.begin(); it != deps.end(); ++it)
+  {
+    if (it->first.Equals("xbmc.metadata"))
+      continue;
+
+    const CStdString &addonID = it->first;
+    const AddonVersion &version = it->second.first;
+    bool optional = it->second.second;
+    AddonPtr dependency;
+    bool haveAddon = CAddonMgr::Get().GetAddon(addonID, dependency);
+    if ((haveAddon && !dependency->MeetsVersion(version)) || (!haveAddon && !optional))
+    { // we have it but our version isn't good enough, or we don't have it and we need it
+      bool force=(dependency != NULL);
+      // dependency is already queued up for install - ::Install will fail
+      // instead we wait until the Job has finished. note that we
+      // recall install on purpose in case prior installation failed
+      if (CAddonInstaller::Get().HasJob(addonID))
+      {
+        while (CAddonInstaller::Get().HasJob(addonID))
+          Sleep(50);
+        force = false;
+      }
+      // don't have the addon or the addon isn't new enough - grab it (no new job for these)
+      if (!CAddonInstaller::Get().Install(addonID, force, referer, false))
+        return false;
+    }
+  }
+
+  // now that we have all our dependencies, we can install our add-on
   if (repo)
   {
     CFileItemList dummy;
@@ -641,40 +706,8 @@ bool CAddonInstallJob::Install(const CStdString &installFrom, const AddonPtr& re
       return false;
     }
 
-    // resolve dependencies
-    CAddonMgr::Get().FindAddons(); // needed as GetDeps() grabs directly from c-pluff via the addon manager
-    ADDONDEPS deps = addon->GetDeps();
-    CStdString referer = StringUtils::Format("Referer=%s-%s.zip",addon->ID().c_str(),addon->Version().c_str());
-    for (ADDONDEPS::iterator it  = deps.begin(); it != deps.end(); ++it)
-    {
-      if (it->first.Equals("xbmc.metadata"))
-        continue;
-
-      const CStdString &addonID = it->first;
-      const AddonVersion &version = it->second.first;
-      bool optional = it->second.second;
-      AddonPtr dependency;
-      bool haveAddon = CAddonMgr::Get().GetAddon(addonID, dependency);
-      if ((haveAddon && !dependency->MeetsVersion(version)) || (!haveAddon && !optional))
-      { // we have it but our version isn't good enough, or we don't have it and we need it
-        bool force=(dependency != NULL);
-        // dependency is already queued up for install - ::Install will fail
-        // instead we wait until the Job has finished. note that we
-        // recall install on purpose in case prior installation failed
-        if (CAddonInstaller::Get().HasJob(addonID))
-        {
-          while (CAddonInstaller::Get().HasJob(addonID))
-            Sleep(50);
-          force = false;
-        }
-        // don't have the addon or the addon isn't new enough - grab it (no new job for these)
-        if (!CAddonInstaller::Get().Install(addonID, force, referer, false))
-        {
-          DeleteAddon(addonFolder);
-          return false;
-        }
-      }
-    }
+    // Update the addon manager so that it has the newly installed add-on.
+    CAddonMgr::Get().FindAddons();
   }
   return true;
 }
@@ -757,21 +790,6 @@ void CAddonInstallJob::ReportInstallError(const CStdString& addonID,
   }
 }
 
-bool CAddonInstallJob::CheckHash(const CStdString& zipFile)
-{
-  if (m_hash.empty())
-    return true;
-  CStdString md5 = CUtil::GetFileMD5(zipFile);
-  if (!md5.Equals(m_hash))
-  {
-    CFile::Delete(zipFile);
-    ReportInstallError(m_addon->ID(), URIUtils::GetFileName(zipFile));
-    CLog::Log(LOGERROR, "MD5 mismatch after download %s", zipFile.c_str());
-    return false;
-  }
-  return true;
-}
-
 CStdString CAddonInstallJob::AddonID() const
 {
   return (m_addon) ? m_addon->ID() : "";
index 39cab93..eb8ae11 100644 (file)
@@ -24,6 +24,8 @@
 #include "utils/Stopwatch.h"
 #include "threads/Event.h"
 
+class CAddonDatabase;
+
 class CAddonInstaller : public IJobCallback
 {
 public:
@@ -68,9 +70,10 @@ public:
    Iterates through the addon's dependencies, checking they're installed or installable.
    Each dependency must also satisfies CheckDependencies in turn.
    \param addon the addon to check
+   \param database the database instance to update. Defaults to NULL.
    \return true if dependencies are available, false otherwise.
    */
-  bool CheckDependencies(const ADDON::AddonPtr &addon);
+  bool CheckDependencies(const ADDON::AddonPtr &addon, CAddonDatabase *database = NULL);
 
   /*! \brief Update all repositories (if needed)
    Runs through all available repositories and queues an update of them if they
@@ -127,10 +130,11 @@ private:
    Each dependency must also satisfies CheckDependencies in turn.
    \param addon the addon to check
    \param preDeps previous dependencies encountered during recursion. aids in avoiding infinite recursion
+   \param database database instance to update
    \return true if dependencies are available, false otherwise.
    */
   bool CheckDependencies(const ADDON::AddonPtr &addon,
-                         std::vector<std::string>& preDeps);
+                         std::vector<std::string>& preDeps, CAddonDatabase &database);
 
   void PrunePackageCache();
   int64_t EnumeratePackageFolder(std::map<CStdString,CFileItemList*>& result);
@@ -176,12 +180,6 @@ private:
    */
   void ReportInstallError(const CStdString& addonID, const CStdString& fileName);
 
-  /*! \brief Check the hash of a downloaded addon with the hash in the repository
-   \param addonZip - filename of the zipped addon to check
-   \return true if the hash matches (or no hash is available on the repo), false otherwise
-   */
-  bool CheckHash(const CStdString& addonZip);
-
   ADDON::AddonPtr m_addon;
   CStdString m_hash;
   bool m_update;
index ba22ee1..5a6fb4d 100644 (file)
@@ -124,6 +124,11 @@ namespace ADDON
       && CompareComponent(Revision(), other.Revision()) == 0;
   }
 
+  bool AddonVersion::empty() const
+  {
+    return m_originalVersion.empty() || m_originalVersion == "0.0.0";
+  }
+
   CStdString AddonVersion::Print() const
   {
     return StringUtils::Format("%s %s", g_localizeStrings.Get(24051).c_str(), m_originalVersion.c_str());
index a4ba0f2..f804278 100644 (file)
@@ -53,6 +53,7 @@ namespace ADDON
     bool operator==(const AddonVersion& other) const;
     CStdString Print() const;
     const char *c_str() const { return m_originalVersion.c_str(); };
+    bool empty() const;
 
     static bool SplitFileName(CStdString& ID, CStdString& version,
                               const CStdString& filename);
index 69ebb05..3918682 100644 (file)
 #include "utils/FileOperationJob.h"
 #include "utils/StringUtils.h"
 #include "utils/URIUtils.h"
+#include "utils/log.h"
 #include "addons/AddonInstaller.h"
 #include "pvr/PVRManager.h"
+#include "Util.h"
 
 #define CONTROL_BTN_INSTALL          6
 #define CONTROL_BTN_ENABLE           7
@@ -407,6 +409,8 @@ void CGUIDialogAddonInfo::GrabRollbackVersions()
   CFileItemList items;
   XFILE::CDirectory::GetDirectory("special://home/addons/packages/",items,".zip",DIR_FLAG_NO_FILE_DIRS);
   items.Sort(SortByLabel, SortOrderAscending);
+  CAddonDatabase db;
+  db.Open();
   for (int i=0;i<items.Size();++i)
   {
     if (items[i]->m_bIsFolder)
@@ -414,6 +418,20 @@ void CGUIDialogAddonInfo::GrabRollbackVersions()
     CStdString ID, version;
     AddonVersion::SplitFileName(ID,version,items[i]->GetLabel());
     if (ID.Equals(m_localAddon->ID()))
-      m_rollbackVersions.push_back(version);
+    {
+      CStdString hash, path(items[i]->GetPath());
+      if (db.GetPackageHash(m_localAddon->ID(), path, hash))
+      {
+        CStdString md5 = CUtil::GetFileMD5(path);
+        if (md5 == hash)
+          m_rollbackVersions.push_back(version);
+        else /* The package has been corrupted */
+        {
+          CLog::Log(LOGWARNING, "%s: Removing corrupt addon package %s.", __FUNCTION__, path.c_str());
+          CFile::Delete(path);
+          db.RemovePackage(path);
+        }
+      }
+    }
   }
 }
index 975b1af..580dde7 100644 (file)
@@ -251,7 +251,7 @@ bool CGUIDialogAddonSettings::ShowVirtualKeyboard(int iControl)
             bEncoded = (strstr(option, "urlencoded") != NULL);
           }
           if (bEncoded)
-            CURL::Decode(value);
+            value = CURL::Decode(value);
 
           if (CGUIKeyboardFactory::ShowAndGetInput(value, label, true, bHidden))
           {
@@ -265,7 +265,7 @@ bool CGUIDialogAddonSettings::ShowVirtualKeyboard(int iControl)
             else
               ((CGUIButtonControl*) control)->SetLabel2(value);
             if (bEncoded)
-              CURL::Encode(value);
+              value = CURL::Encode(value);
           }
         }
         else if (strcmp(type, "number") == 0 && CGUIDialogNumeric::ShowAndGetNumber(value, label))
@@ -708,7 +708,7 @@ void CGUIDialogAddonSettings::CreateControls()
           // get any option to test for hidden
           const char *option = setting->Attribute("option");
           if (option && (strstr(option, "urlencoded")))
-            CURL::Decode(value);
+            value = CURL::Decode(value);
           if (option && (strstr(option, "hidden")))
           {
             CStdString hiddenText;
index 495866e..382167e 100644 (file)
@@ -80,7 +80,6 @@ private:
   const TiXmlElement *GetFirstSetting() const;
 
   ADDON::AddonPtr m_addon;
-  CStdString m_strHeading;
   std::map<CStdString,CStdString> m_buttonValues;
   bool m_changed;
   bool m_saveToDisk; // whether the addon settings should be saved to disk or just stored locally in the addon
index de67eb0..a6daf8d 100644 (file)
@@ -107,6 +107,9 @@ CRepository::~CRepository()
 
 string CRepository::Checksum() const
 {
+  /* This code is duplicated in CRepositoryUpdateJob::GrabAddons().
+   * If you make changes here, they may be applicable there, too.
+   */
   string result;
   for (DirList::const_iterator it  = m_dirs.begin(); it != m_dirs.end(); ++it)
   {
@@ -145,7 +148,7 @@ string CRepository::GetAddonHash(const AddonPtr& addon) const
   string checksum;
   DirList::const_iterator it;
   for (it = m_dirs.begin();it != m_dirs.end(); ++it)
-    if (it->datadir == addon->Path())
+    if (URIUtils::IsInPath(addon->Path(), it->datadir))
       break;
   if (it != m_dirs.end() && it->hashes)
   {
@@ -212,14 +215,31 @@ CRepositoryUpdateJob::CRepositoryUpdateJob(const VECADDONS &repos)
 {
 }
 
+void MergeAddons(map<string, AddonPtr> &addons, const VECADDONS &new_addons)
+{
+  for (VECADDONS::const_iterator it = new_addons.begin(); it != new_addons.end(); ++it)
+  {
+    map<string, AddonPtr>::iterator existing = addons.find((*it)->ID());
+    if (existing != addons.end())
+    { // already got it - replace if we have a newer version
+      if (existing->second->Version() < (*it)->Version())
+        existing->second = *it;
+    }
+    else
+      addons.insert(make_pair((*it)->ID(), *it));
+  }
+}
+
 bool CRepositoryUpdateJob::DoWork()
 {
-  VECADDONS addons;
+  map<string, AddonPtr> addons;
   for (VECADDONS::const_iterator i = m_repos.begin(); i != m_repos.end(); ++i)
   {
+    if (ShouldCancel(0, 0))
+      return false;
     RepositoryPtr repo = boost::dynamic_pointer_cast<CRepository>(*i);
     VECADDONS newAddons = GrabAddons(repo);
-    addons.insert(addons.end(), newAddons.begin(), newAddons.end());
+    MergeAddons(addons, newAddons);
   }
   if (addons.empty())
     return false;
@@ -227,39 +247,42 @@ bool CRepositoryUpdateJob::DoWork()
   // check for updates
   CAddonDatabase database;
   database.Open();
-  
+  database.BeginMultipleExecute();
+
   CTextureDatabase textureDB;
   textureDB.Open();
-  for (unsigned int i=0;i<addons.size();++i)
+  textureDB.BeginMultipleExecute();
+  for (map<string, AddonPtr>::const_iterator i = addons.begin(); i != addons.end(); ++i)
   {
     // manager told us to feck off
     if (ShouldCancel(0,0))
       break;
 
-    bool deps_met = CAddonInstaller::Get().CheckDependencies(addons[i]);
-    if (!deps_met && addons[i]->Props().broken.empty())
-      addons[i]->Props().broken = "DEPSNOTMET";
+    AddonPtr newAddon = i->second;
+    bool deps_met = CAddonInstaller::Get().CheckDependencies(newAddon, &database);
+    if (!deps_met && newAddon->Props().broken.empty())
+      newAddon->Props().broken = "DEPSNOTMET";
 
     // invalidate the art associated with this item
-    if (!addons[i]->Props().fanart.empty())
-      textureDB.InvalidateCachedTexture(addons[i]->Props().fanart);
-    if (!addons[i]->Props().icon.empty())
-      textureDB.InvalidateCachedTexture(addons[i]->Props().icon);
+    if (!newAddon->Props().fanart.empty())
+      textureDB.InvalidateCachedTexture(newAddon->Props().fanart);
+    if (!newAddon->Props().icon.empty())
+      textureDB.InvalidateCachedTexture(newAddon->Props().icon);
 
     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()) &&
+    CAddonMgr::Get().GetAddon(newAddon->ID(),addon);
+    if (addon && newAddon->Version() > addon->Version() &&
+        !database.IsAddonBlacklisted(newAddon->ID(),newAddon->Version().c_str()) &&
         deps_met)
     {
       if (CSettings::Get().GetBool("general.addonautoupdate") || addon->Type() >= ADDON_VIZ_LIBRARY)
       {
         string referer;
-        if (URIUtils::IsInternetStream(addons[i]->Path()))
+        if (URIUtils::IsInternetStream(newAddon->Path()))
           referer = StringUtils::Format("Referer=%s-%s.zip",addon->ID().c_str(),addon->Version().c_str());
 
-        if (addons[i]->Type() == ADDON_PVRDLL &&
-            !PVR::CPVRManager::Get().InstallAddonAllowed(addons[i]->ID()))
+        if (newAddon->Type() == ADDON_PVRDLL &&
+            !PVR::CPVRManager::Get().InstallAddonAllowed(newAddon->ID()))
           PVR::CPVRManager::Get().MarkAsOutdated(addon->ID(), referer);
         else
           CAddonInstaller::Get().Install(addon->ID(), true, referer);
@@ -271,22 +294,32 @@ bool CRepositoryUpdateJob::DoWork()
                                               addon->Name(),TOAST_DISPLAY_TIME,false,TOAST_DISPLAY_TIME);
       }
     }
-    if (!addons[i]->Props().broken.empty())
+
+    // Check if we should mark the add-on as broken.  We may have a newer version
+    // of this add-on in the database or installed - if so, we keep it unbroken.
+    bool haveNewer = (addon && addon->Version() > newAddon->Version()) ||
+                     database.GetAddonVersion(newAddon->ID()) > newAddon->Version();
+    if (!haveNewer)
     {
-      if (database.IsAddonBroken(addons[i]->ID()).empty())
+      if (!newAddon->Props().broken.empty())
       {
-        std::string line = g_localizeStrings.Get(24096);
-        if (addons[i]->Props().broken == "DEPSNOTMET")
-          line = g_localizeStrings.Get(24104);
-        if (addon && CGUIDialogYesNo::ShowAndGetInput(addons[i]->Name(),
-                                             line,
-                                             g_localizeStrings.Get(24097),
-                                             ""))
-          CAddonMgr::Get().DisableAddon(addons[i]->ID());
+        if (database.IsAddonBroken(newAddon->ID()).empty())
+        {
+          std::string line = g_localizeStrings.Get(24096);
+          if (newAddon->Props().broken == "DEPSNOTMET")
+            line = g_localizeStrings.Get(24104);
+          if (addon && CGUIDialogYesNo::ShowAndGetInput(newAddon->Name(),
+                                               line,
+                                               g_localizeStrings.Get(24097),
+                                               ""))
+            CAddonMgr::Get().DisableAddon(newAddon->ID());
+        }
       }
+      database.BreakAddon(newAddon->ID(), newAddon->Props().broken);
     }
-    database.BreakAddon(addons[i]->ID(), addons[i]->Props().broken);
   }
+  database.CommitMultipleExecute();
+  textureDB.CommitMultipleExecute();
 
   return true;
 }
@@ -294,28 +327,32 @@ bool CRepositoryUpdateJob::DoWork()
 VECADDONS CRepositoryUpdateJob::GrabAddons(RepositoryPtr& repo)
 {
   CAddonDatabase database;
+  VECADDONS addons;
   database.Open();
   string checksum;
   database.GetRepoChecksum(repo->ID(),checksum);
-  string reposum = repo->Checksum();
-  VECADDONS addons;
+  string reposum;
+
+  /* This for loop is duplicated in CRepository::Checksum().
+   * If you make changes here, they may be applicable there, too.
+   */
+  for (CRepository::DirList::const_iterator it  = repo->m_dirs.begin(); it != repo->m_dirs.end(); ++it)
+  {
+    if (ShouldCancel(0, 0))
+      return addons;
+    if (!it->checksum.empty())
+      reposum += CRepository::FetchChecksum(it->checksum);
+  }
+
   if (checksum != reposum || checksum.empty())
   {
     map<string, AddonPtr> uniqueAddons;
     for (CRepository::DirList::const_iterator it = repo->m_dirs.begin(); it != repo->m_dirs.end(); ++it)
     {
+      if (ShouldCancel(0, 0))
+        return addons;
       VECADDONS addons2 = CRepository::Parse(*it);
-      for (VECADDONS::const_iterator it2 = addons2.begin(); it2 != addons2.end(); ++it2)
-      {
-        map<string, AddonPtr>::iterator existing = uniqueAddons.find((*it2)->ID());
-        if (existing != uniqueAddons.end())
-        { // already got it - replace if we have a newer version
-          if (existing->second->Version() < (*it2)->Version())
-            existing->second = *it2;
-        }
-        else
-          uniqueAddons.insert(make_pair((*it2)->ID(), *it2));
-      }
+      MergeAddons(uniqueAddons, addons2);
     }
 
     if (uniqueAddons.empty())
index 8d56360..6a00379 100644 (file)
@@ -58,8 +58,8 @@ namespace ADDON
     DirList m_dirs;
 
     static VECADDONS Parse(const DirInfo& dir);
-  private:
     static std::string FetchChecksum(const std::string& url);
+  private:
     CRepository(const CRepository &rhs);
   };
 
index b4684bc..22290d9 100644 (file)
@@ -572,11 +572,9 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, const CStd
   if (!fFirst)
     StringUtils::Replace(sTitle, '-',' ');
 
-  StringUtils::ToLower(sTitle);
-
   vector<CStdString> vcsIn(1);
   g_charsetConverter.utf8To(SearchStringEncoding(), sTitle, vcsIn[0]);
-  CURL::Encode(vcsIn[0]);
+  vcsIn[0] = CURL::Encode(vcsIn[0]);
   if (!sYear.empty())
     vcsIn.push_back(sYear);
 
@@ -702,8 +700,8 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CCurlFile &fcurl, const CStdStr
   std::vector<CStdString> extras(2);
   g_charsetConverter.utf8To(SearchStringEncoding(), sAlbum, extras[0]);
   g_charsetConverter.utf8To(SearchStringEncoding(), sArtist, extras[1]);
-  CURL::Encode(extras[0]);
-  CURL::Encode(extras[1]);
+  extras[0] = CURL::Encode(extras[0]);
+  extras[1] = CURL::Encode(extras[1]);
   CScraperUrl scurl;
   vector<CStdString> vcsOut = RunNoThrow("CreateAlbumSearchUrl", scurl, fcurl, &extras);
   if (vcsOut.size() > 1)
@@ -798,7 +796,7 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CCurlFile &fcurl,
   // returns an XML <url> element parseable by CScraperUrl
   std::vector<CStdString> extras(1);
   g_charsetConverter.utf8To(SearchStringEncoding(), sArtist, extras[0]);
-  CURL::Encode(extras[0]);
+  extras[0] = CURL::Encode(extras[0]);
   CScraperUrl scurl;
   vector<CStdString> vcsOut = RunNoThrow("CreateArtistSearchUrl", scurl, fcurl, &extras);
 
@@ -1009,7 +1007,7 @@ bool CScraper::GetArtistDetails(CCurlFile &fcurl, const CScraperUrl &scurl,
   // pass in the original search string for chaining to search other sites
   vector<CStdString> vcIn;
   vcIn.push_back(sSearch);
-  CURL::Encode(vcIn[0]);
+  vcIn[0] = CURL::Encode(vcIn[0]);
 
   vector<CStdString> vcsOut = RunNoThrow("GetArtistDetails", scurl, fcurl, &vcIn);
 
index 19fcb7e..9bb1d5f 100644 (file)
@@ -116,7 +116,7 @@ bool CVisualisation::Create(int x, int y, int w, int h, void *device)
   return false;
 }
 
-void CVisualisation::Start(int iChannels, int iSamplesPerSec, int iBitsPerSample, const CStdString strSongName)
+void CVisualisation::Start(int iChannels, int iSamplesPerSec, int iBitsPerSample, const CStdString &strSongName)
 {
   // notify visz. that new song has been started
   // pass it the nr of audio channels, sample rate, bits/sample and offcourse the songname
index ccba349..ddc39ed 100644 (file)
@@ -60,7 +60,7 @@ namespace ADDON
     virtual void OnInitialize(int iChannels, int iSamplesPerSec, int iBitsPerSample);
     virtual void OnAudioData(const float* pAudioData, int iAudioDataLength);
     bool Create(int x, int y, int w, int h, void *device);
-    void Start(int iChannels, int iSamplesPerSec, int iBitsPerSample, const CStdString strSongName);
+    void Start(int iChannels, int iSamplesPerSec, int iBitsPerSample, const CStdString &strSongName);
     void AudioData(const float *pAudioData, int iAudioDataLength, float *pFreqData, int iFreqDataLength);
     void Render();
     void Stop();
index 5de81ce..927fe33 100644 (file)
  */
 
 #include "xbmc_pvr_types.h"
+#include <algorithm>
 #include <map>
 
 namespace ADDON
 {
-  class XbmcStreamProperties
+  /**
+   * Represents a single stream. It extends the PODS to provide some operators 
+   * overloads.
+   */
+  class XbmcPvrStream : public PVR_STREAM_PROPERTIES::PVR_STREAM
   {
   public:
-    XbmcStreamProperties(void)
+    XbmcPvrStream()
     {
       Clear();
     }
-
-    virtual ~XbmcStreamProperties(void)
+    
+    XbmcPvrStream(const XbmcPvrStream &other)
     {
+      memcpy(this, &other, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
     }
-
-    int GetStreamId(unsigned int iPhysicalId)
+    
+    XbmcPvrStream& operator=(const XbmcPvrStream &other)
     {
-      std::map<unsigned int, unsigned int>::iterator it = m_streamIndex.find(iPhysicalId);
-      if (it != m_streamIndex.end())
-        return it->second;
-      return -1;
+      memcpy(this, &other, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
+      return *this;
+    }
+    
+    /**
+     * Compares this stream based on another stream
+     * @param other
+     * @return
+     */
+    inline bool operator==(const XbmcPvrStream &other) const
+    {
+      return iPhysicalId == other.iPhysicalId && iCodecId == other.iCodecId;
     }
 
-    void GetStreamData(unsigned int iPhysicalId, PVR_STREAM_PROPERTIES::PVR_STREAM* stream)
+    /**
+     * Compares this stream with another one so that video streams are sorted
+     * before any other streams and the others are sorted by the physical ID
+     * @param other
+     * @return
+     */
+    bool operator<(const XbmcPvrStream &other) const
     {
-      std::map<unsigned int, unsigned int>::iterator it = m_streamIndex.find(iPhysicalId);
-      if (it != m_streamIndex.end())
-      {
-        memcpy(stream, &m_streams.stream[it->second], sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-      }
+      if (iCodecType == XBMC_CODEC_TYPE_VIDEO)
+        return true;
+      else if (other.iCodecType != XBMC_CODEC_TYPE_VIDEO)
+        return iPhysicalId < other.iPhysicalId;
       else
-      {
-        memset(stream, 0, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-        stream->iIdentifier = -1;
-        stream->iPhysicalId = iPhysicalId;
-      }
+        return false;
     }
-
-    PVR_STREAM_PROPERTIES::PVR_STREAM* GetStreamById(unsigned int iPhysicalId)
+    
+    /**
+     * Clears the stream
+     */
+    void Clear()
     {
-      std::map<unsigned int, unsigned int>::iterator it = m_streamIndex.find(iPhysicalId);
-      if (it != m_streamIndex.end())
-        return &m_streams.stream[it->second];
-      return NULL;
+      memset(this, 0, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
+      iCodecId = XBMC_INVALID_CODEC_ID;
+      iCodecType = XBMC_CODEC_TYPE_UNKNOWN;
     }
-
-    bool GetProperties(PVR_STREAM_PROPERTIES* props) const
+    
+    /**
+     * Checks whether the stream has been cleared
+     * @return 
+     */
+    inline bool IsCleared() const
     {
-      props->iStreamCount = m_streams.iStreamCount;
-      for (unsigned int i = 0; i < m_streams.iStreamCount; i++)
-      {
-        props->stream[i].iPhysicalId    = m_streams.stream[i].iPhysicalId;
-        props->stream[i].iCodecType     = m_streams.stream[i].iCodecType;
-        props->stream[i].iCodecId       = m_streams.stream[i].iCodecId;
-        props->stream[i].strLanguage[0] = m_streams.stream[i].strLanguage[0];
-        props->stream[i].strLanguage[1] = m_streams.stream[i].strLanguage[1];
-        props->stream[i].strLanguage[2] = m_streams.stream[i].strLanguage[2];
-        props->stream[i].strLanguage[3] = m_streams.stream[i].strLanguage[3];
-        props->stream[i].iIdentifier    = m_streams.stream[i].iIdentifier;
-        props->stream[i].iFPSScale      = m_streams.stream[i].iFPSScale;
-        props->stream[i].iFPSRate       = m_streams.stream[i].iFPSRate;
-        props->stream[i].iHeight        = m_streams.stream[i].iHeight;
-        props->stream[i].iWidth         = m_streams.stream[i].iWidth;
-        props->stream[i].fAspect        = m_streams.stream[i].fAspect;
-        props->stream[i].iChannels      = m_streams.stream[i].iChannels;
-        props->stream[i].iSampleRate    = m_streams.stream[i].iSampleRate;
-        props->stream[i].iBlockAlign    = m_streams.stream[i].iBlockAlign;
-        props->stream[i].iBitRate       = m_streams.stream[i].iBitRate;
-        props->stream[i].iBitsPerSample = m_streams.stream[i].iBitsPerSample;
-      }
-
-      return (props->iStreamCount > 0);
+      return iCodecId   == XBMC_INVALID_CODEC_ID &&
+             iCodecType == XBMC_CODEC_TYPE_UNKNOWN;
     }
-
-    void Clear(void)
+  };
+  
+  class XbmcStreamProperties
+  {
+  public:
+    typedef std::vector<XbmcPvrStream> stream_vector;
+    
+    XbmcStreamProperties(void)
     {
-      memset(&m_streams, 0, sizeof(PVR_STREAM_PROPERTIES));
-      for (unsigned int i = 0; i < PVR_STREAM_MAX_STREAMS; i++)
-        m_streams.stream[i].iCodecType = XBMC_CODEC_TYPE_UNKNOWN;
+      // make sure the vector won't have to resize itself later
+      m_streamVector = new stream_vector();
+      m_streamVector->reserve(PVR_STREAM_MAX_STREAMS);
     }
 
-    unsigned int NextFreeIndex(void)
+    virtual ~XbmcStreamProperties(void)
     {
-      unsigned int i;
-      for (i = 0; i < PVR_STREAM_MAX_STREAMS; i++)
-      {
-        if (m_streams.stream[i].iCodecType == XBMC_CODEC_TYPE_UNKNOWN)
-          break;
-      }
-      return i;
+      delete m_streamVector;
     }
-
-    static std::map<unsigned int, unsigned int> CreateIndex(PVR_STREAM_PROPERTIES streams)
+    
+    /**
+     * Resets the streams
+     */
+    void Clear(void)
     {
-      std::map<unsigned int, unsigned int> retval;
-      for (unsigned int i = 0; i < PVR_STREAM_MAX_STREAMS && i < streams.iStreamCount; i++)
-        retval.insert(std::make_pair(streams.stream[i].iPhysicalId, i));
-      return retval;
+      m_streamVector->clear();
+      m_streamIndex.clear();
     }
 
-    static std::map<unsigned int, unsigned int> CreateIndex(const std::vector<PVR_STREAM_PROPERTIES::PVR_STREAM>& streams)
+    /**
+     * Returns the index of the stream with the specified physical ID, or -1 if 
+     * there no stream is found. This method is called very often which is why 
+     * we keep a separate map for this.
+     * @param iPhysicalId
+     * @return
+     */
+    int GetStreamId(unsigned int iPhysicalId) const
     {
-      std::map<unsigned int, unsigned int> retval;
-      for (unsigned int i = 0; i < PVR_STREAM_MAX_STREAMS && i < streams.size(); i++)
-        retval.insert(std::make_pair(streams.at(i).iPhysicalId, i));
-      return retval;
-    }
+      std::map<unsigned int, int>::const_iterator it = m_streamIndex.find(iPhysicalId);
+      if (it != m_streamIndex.end())
+        return it->second;
 
-    static void ClearStream(PVR_STREAM_PROPERTIES::PVR_STREAM* stream)
+      return -1;
+    }
+    
+    /**
+     * Returns the stream with the specified physical ID, or null if no such 
+     * stream exists
+     * @param iPhysicalId
+     * @return
+     */
+    XbmcPvrStream* GetStreamById(unsigned int iPhysicalId) const
     {
-      memset(stream, 0, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-      stream->iCodecType = XBMC_CODEC_TYPE_UNKNOWN;
-      stream->iCodecId   = XBMC_INVALID_CODEC_ID;
+      int position = GetStreamId(iPhysicalId);
+      return position != -1 ? &m_streamVector->at(position) : NULL;
     }
 
-    void UpdateStreams(const std::vector<PVR_STREAM_PROPERTIES::PVR_STREAM>& newStreams)
+    /**
+     * Populates the specified stream with the stream having the specified 
+     * physical ID. If the stream is not found only target stream's physical ID 
+     * will be populated.
+     * @param iPhysicalId
+     * @param stream
+     */
+    void GetStreamData(unsigned int iPhysicalId, XbmcPvrStream* stream)
     {
-      std::map<unsigned int, unsigned int> newIndex = CreateIndex(newStreams);
-
-      // delete streams we don't have in newStreams
-      std::map<unsigned int, unsigned int>::iterator ito = m_streamIndex.begin();
-      std::map<unsigned int, unsigned int>::iterator itn;
-      while (ito != m_streamIndex.end())
+      XbmcPvrStream *foundStream = GetStreamById(iPhysicalId);
+      if (foundStream)
+        stream = foundStream;
+      else
       {
-        itn = newIndex.find(ito->first);
-        if (itn == newIndex.end())
-        {
-          memset(&m_streams.stream[ito->second], 0, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-          m_streams.stream[ito->second].iCodecType = XBMC_CODEC_TYPE_UNKNOWN;
-          m_streams.stream[ito->second].iCodecId   = XBMC_INVALID_CODEC_ID;
-          m_streamIndex.erase(ito);
-          ito = m_streamIndex.begin();
-        }
-        else
-          ++ito;
+        stream->iIdentifier = -1;
+        stream->iPhysicalId = iPhysicalId;
       }
+    }
 
-      // copy known streams
-      for (ito = m_streamIndex.begin(); ito != m_streamIndex.end(); ++ito)
+    /**
+     * Populates props with the current streams and returns whether there are 
+     * any streams at the moment or not.
+     * @param props
+     * @return
+     */
+    bool GetProperties(PVR_STREAM_PROPERTIES* props)
+    {
+      unsigned int i = 0;
+      for (stream_vector::const_iterator it = m_streamVector->begin(); 
+           it != m_streamVector->end(); ++it, ++i)
       {
-        itn = newIndex.find(ito->first);
-        memcpy(&m_streams.stream[ito->second], &newStreams.at(itn->second), sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-        newIndex.erase(itn);
+        memcpy(&props->stream[i], &(*it), sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
       }
+      
+      props->iStreamCount = m_streamVector->size();
+      return (props->iStreamCount > 0);
+    }
 
-      // place video stream at pos 0
-      for (itn = newIndex.begin(); itn != newIndex.end(); ++itn)
+    /**
+     * Merges new streams into the current list of streams. Identical streams 
+     * will retain their respective indexes and new streams will replace unused 
+     * indexes or be appended.
+     * @param newStreams
+     */
+    void UpdateStreams(stream_vector &newStreams)
+    {
+      // sort the new streams
+      std::sort(newStreams.begin(), newStreams.end());
+      
+      // ensure we never have more than PVR_STREAMS_MAX_STREAMS streams
+      if (newStreams.size() > PVR_STREAM_MAX_STREAMS)
+      {
+        while (newStreams.size() > PVR_STREAM_MAX_STREAMS)
+          newStreams.pop_back();
+        
+        XBMC->Log(LOG_ERROR, "%s - max amount of streams reached", __FUNCTION__);
+      }
+      
+      stream_vector::iterator newStreamPosition;
+      for (stream_vector::iterator it = m_streamVector->begin(); it != m_streamVector->end(); ++it)
       {
-        if (newStreams.at(itn->second).iCodecType == XBMC_CODEC_TYPE_VIDEO)
+        newStreamPosition = std::find(newStreams.begin(), newStreams.end(), *it);
+
+        // if the current stream no longer exists we clear it, otherwise we 
+        // copy it and remove it from newStreams
+        if (newStreamPosition == newStreams.end())
+          it->Clear();
+        else
         {
-          m_streamIndex[itn->first] = 0;
-          memcpy(&m_streams.stream[0], &newStreams.at(itn->second), sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-          newIndex.erase(itn);
-          break;
+          *it = *newStreamPosition;
+          newStreams.erase(newStreamPosition);
         }
       }
 
-      // fill the gaps or append after highest index
-      while (!newIndex.empty())
+      // replace cleared streams with new streams
+      for (stream_vector::iterator it = m_streamVector->begin();
+           it != m_streamVector->end() && !newStreams.empty(); ++it)
       {
-        // find first unused index
-        unsigned int i = NextFreeIndex();
-        itn = newIndex.begin();
-        m_streamIndex[itn->first] = i;
-        memcpy(&m_streams.stream[i], &newStreams.at(itn->second), sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM));
-        newIndex.erase(itn);
+        if (it->IsCleared())
+        {
+          *it = newStreams.front();
+          newStreams.erase(newStreams.begin());
+        }
       }
 
-      // set streamCount
-      m_streams.iStreamCount = 0;
-      for (ito = m_streamIndex.begin(); ito != m_streamIndex.end(); ++ito)
-      {
-        if (ito->second > m_streams.iStreamCount)
-          m_streams.iStreamCount = ito->second;
-      }
-      if (!m_streamIndex.empty())
-        m_streams.iStreamCount++;
+      // append any remaining new streams
+      m_streamVector->insert(m_streamVector->end(), newStreams.begin(), newStreams.end());
+      
+      // remove trailing cleared streams
+      while (m_streamVector->back().IsCleared())
+        m_streamVector->pop_back();
+      
+      // update the index
+      UpdateIndex();
     }
 
-    size_t Size(void) const
+  private:
+    stream_vector               *m_streamVector;
+    std::map<unsigned int, int> m_streamIndex;
+    
+    /**
+     * Updates the stream index
+     */
+    void UpdateIndex()
     {
-      return m_streamIndex.size();
+      m_streamIndex.clear();
+      
+      int i = 0;
+      for (stream_vector::const_iterator it = m_streamVector->begin(); it != m_streamVector->end(); ++it, ++i)
+        m_streamIndex[it->iPhysicalId] = i;
     }
-
-    std::map<unsigned int, unsigned int> m_streamIndex;
-    PVR_STREAM_PROPERTIES                m_streams;
   };
 }
index c460493..a4df15e 100644 (file)
@@ -23,6 +23,7 @@
 #include "XBMCApp.h"
 #include "guilib/Key.h"
 #include "windowing/WinEvents.h"
+#include "android/jni/KeyCharacterMap.h"
 
 
 typedef struct {
@@ -165,6 +166,10 @@ bool CAndroidKey::onKeyboardEvent(AInputEvent *event)
   int32_t repeat  = AKeyEvent_getRepeatCount(event);
   int32_t keycode = AKeyEvent_getKeyCode(event);
 
+  int32_t deviceId = AInputEvent_getDeviceId(event);
+  CJNIKeyCharacterMap map = CJNIKeyCharacterMap::load(deviceId);
+  uint16_t unicode = map.get(keycode, state);
+
   // Check if we got some special key
   uint16_t sym = XBMCK_UNKNOWN;
   for (unsigned int index = 0; index < sizeof(keyMap) / sizeof(KeyMap); index++)
@@ -203,7 +208,7 @@ bool CAndroidKey::onKeyboardEvent(AInputEvent *event)
         (state & AMETA_SHIFT_ON) ? "yes" : "no",
         (state & AMETA_SYM_ON) ? "yes" : "no");
 #endif
-      XBMC_Key((uint8_t)keycode, sym, modifiers, false);
+      XBMC_Key((uint8_t)keycode, sym, modifiers, unicode, false);
       return true;
 
     case AKEY_EVENT_ACTION_UP:
@@ -214,7 +219,7 @@ bool CAndroidKey::onKeyboardEvent(AInputEvent *event)
         (state & AMETA_SHIFT_ON) ? "yes" : "no",
         (state & AMETA_SYM_ON) ? "yes" : "no");
 #endif
-      XBMC_Key((uint8_t)keycode, sym, modifiers, true);
+      XBMC_Key((uint8_t)keycode, sym, modifiers, unicode, true);
       return true;
 
     case AKEY_EVENT_ACTION_MULTIPLE:
@@ -241,7 +246,7 @@ bool CAndroidKey::onKeyboardEvent(AInputEvent *event)
   return false;
 }
 
-void CAndroidKey::XBMC_Key(uint8_t code, uint16_t key, uint16_t modifiers, bool up)
+void CAndroidKey::XBMC_Key(uint8_t code, uint16_t key, uint16_t modifiers, uint16_t unicode, bool up)
 {
   XBMC_Event newEvent;
   memset(&newEvent, 0, sizeof(newEvent));
@@ -251,7 +256,7 @@ void CAndroidKey::XBMC_Key(uint8_t code, uint16_t key, uint16_t modifiers, bool
   newEvent.key.type = type;
   newEvent.key.keysym.scancode = code;
   newEvent.key.keysym.sym = (XBMCKey)key;
-  newEvent.key.keysym.unicode = key;
+  newEvent.key.keysym.unicode = unicode;
   newEvent.key.keysym.mod = (XBMCMod)modifiers;
 
   //CXBMCApp::android_printf("XBMC_Key(%u, %u, 0x%04X, %d)", code, key, modifiers, up);
index bcb3ee2..7ded4e6 100644 (file)
@@ -32,6 +32,6 @@ public:
  ~CAndroidKey() {};
 
   bool onKeyboardEvent(AInputEvent *event);
-  void XBMC_Key(uint8_t code, uint16_t key, uint16_t modifiers, bool up);
+  void XBMC_Key(uint8_t code, uint16_t key, uint16_t modifiers, uint16_t unicode, bool up);
   void XBMC_JoyButton(uint8_t id, uint8_t button, bool up);
 };
diff --git a/xbmc/android/jni/AudioFormat.cpp b/xbmc/android/jni/AudioFormat.cpp
new file mode 100644 (file)
index 0000000..760fe13
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *      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 "AudioFormat.h"
+#include "JNIBase.h"
+#include "jutils/jutils-details.hpp"
+
+using namespace jni;
+
+int CJNIAudioFormat::ENCODING_PCM_16BIT = 0x00000002;
+int CJNIAudioFormat::CHANNEL_OUT_STEREO = 0x0000000c;
+
+void CJNIAudioFormat::PopulateStaticFields()
+{
+  int sdk = CJNIBase::GetSDKVersion();
+  if (sdk >= 3)
+  {
+    jhclass c = find_class("android/media/AudioFormat");
+    CJNIAudioFormat::ENCODING_PCM_16BIT = get_static_field<int>(c, "ENCODING_PCM_16BIT");
+    if (sdk >= 5)
+      CJNIAudioFormat::CHANNEL_OUT_STEREO = get_static_field<int>(c, "CHANNEL_OUT_STEREO");
+  }
+}
+
diff --git a/xbmc/android/jni/AudioFormat.h b/xbmc/android/jni/AudioFormat.h
new file mode 100644 (file)
index 0000000..ab50254
--- /dev/null
@@ -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/>.
+ *
+ */
+
+namespace jni
+{
+
+class CJNIAudioFormat
+{
+  public:
+    static void PopulateStaticFields();
+
+    static int ENCODING_PCM_16BIT;
+    static int CHANNEL_OUT_STEREO;
+};
+
+};
+
index 85256f8..0eb8291 100644 (file)
@@ -33,9 +33,9 @@ public:
   void setStreamVolume(int index = 0, int flags = 0);
 
   static void PopulateStaticFields();
+  static int STREAM_MUSIC;
 
 private:
   CJNIAudioManager();
-
-  static int STREAM_MUSIC;
 };
+
diff --git a/xbmc/android/jni/AudioTrack.cpp b/xbmc/android/jni/AudioTrack.cpp
new file mode 100644 (file)
index 0000000..e28e803
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ *      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 "AudioTrack.h"
+#include "jutils/jutils-details.hpp"
+
+using namespace jni;
+
+int CJNIAudioTrack::MODE_STREAM       = 0x00000001;
+int CJNIAudioTrack::PLAYSTATE_PLAYING = 0x00000003;
+
+void CJNIAudioTrack::PopulateStaticFields()
+{
+  if (CJNIBase::GetSDKVersion() >= 3)
+  {
+    jhclass c = find_class("android/media/AudioTrack");
+    CJNIAudioTrack::PLAYSTATE_PLAYING = get_static_field<int>(c, "PLAYSTATE_PLAYING");
+    if (CJNIBase::GetSDKVersion() >= 5)
+      CJNIAudioTrack::MODE_STREAM = get_static_field<int>(c, "MODE_STREAM");
+  }
+}
+
+CJNIAudioTrack::CJNIAudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)
+  : CJNIBase("android/media/AudioTrack")
+{
+  m_object = new_object(GetClassName(), "<init>", "(IIIIII)V",
+                        streamType, sampleRateInHz, channelConfig,
+                        audioFormat, bufferSizeInBytes, mode);
+  m_buffer = jharray(xbmc_jnienv()->NewByteArray(bufferSizeInBytes));
+
+  m_object.setGlobal();
+  m_buffer.setGlobal();
+}
+
+void CJNIAudioTrack::play()
+{
+  call_method<void>(m_object, "play", "()V");
+}
+
+void CJNIAudioTrack::stop()
+{
+  call_method<void>(m_object, "stop", "()V");
+
+  JNIEnv* jenv = xbmc_jnienv();
+
+  // might toss an exception on release so catch it.
+  jthrowable exception = jenv->ExceptionOccurred();
+  if (exception)
+  {
+    jenv->ExceptionDescribe();
+    jenv->ExceptionClear();
+  }
+}
+
+void CJNIAudioTrack::flush()
+{
+  call_method<void>(m_object, "flush", "()V");
+}
+
+void CJNIAudioTrack::release()
+{
+  call_method<void>(m_object, "release", "()V");
+
+  JNIEnv* jenv  = xbmc_jnienv();
+}
+
+int CJNIAudioTrack::write(char* audioData, int offsetInBytes, int sizeInBytes)
+{
+  int     written = 0;
+  JNIEnv* jenv    = xbmc_jnienv();
+  char*   pArray;
+  
+  // Write a buffer of audio data to Java AudioTrack.
+  // Warning, no other JNI function can be called after
+  // GetPrimitiveArrayCritical until ReleasePrimitiveArrayCritical.
+  if ((pArray = (char*)jenv->GetPrimitiveArrayCritical(m_buffer, NULL)))
+  {
+    memcpy(pArray + offsetInBytes, audioData, sizeInBytes);
+    jenv->ReleasePrimitiveArrayCritical(m_buffer, pArray, 0);
+    written = call_method<int>(m_object, "write", "([BII)I", m_buffer, offsetInBytes, sizeInBytes);
+  }
+
+  return written;
+}
+
+int CJNIAudioTrack::getPlayState()
+{
+  return call_method<int>(m_object, "getPlayState", "()I");
+}
+
+int CJNIAudioTrack::getPlaybackHeadPosition()
+{
+  return call_method<int>(m_object, "getPlaybackHeadPosition", "()I");
+}
+
+int CJNIAudioTrack::getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)
+{
+  return call_static_method<int>( "android/media/AudioTrack", "getMinBufferSize", "(III)I",
+                                  sampleRateInHz, channelConfig, audioFormat);
+}
+
diff --git a/xbmc/android/jni/AudioTrack.h b/xbmc/android/jni/AudioTrack.h
new file mode 100644 (file)
index 0000000..627edac
--- /dev/null
@@ -0,0 +1,51 @@
+#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 "JNIBase.h"
+#include "ByteBuffer.h"
+
+namespace jni
+{
+
+class CJNIAudioTrack : public CJNIBase
+{
+  jharray m_buffer;
+
+  public:
+    CJNIAudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode);
+
+    void  play();
+    void  stop();
+    void  flush();
+    void  release();
+    int   write(char* audioData, int offsetInBytes, int sizeInBytes);
+    int   getPlayState();
+    int   getPlaybackHeadPosition();
+
+    static int  MODE_STREAM;
+    static int  PLAYSTATE_PLAYING;
+    
+    static void PopulateStaticFields();
+    static int  getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat);
+};
+
+};
+
index 70e26e9..d989ee9 100644 (file)
@@ -35,7 +35,9 @@
 #include "PowerManager.h"
 #include "Cursor.h"
 #include "ConnectivityManager.h"
+#include "AudioFormat.h"
 #include "AudioManager.h"
+#include "AudioTrack.h"
 #include "Surface.h"
 #include "MediaCodec.h"
 #include "MediaCodecInfo.h"
@@ -76,7 +78,9 @@ void CJNIContext::PopulateStaticFields()
   CJNICursor::PopulateStaticFields();
   CJNIContentResolver::PopulateStaticFields();
   CJNIConnectivityManager::PopulateStaticFields();
+  CJNIAudioFormat::PopulateStaticFields();
   CJNIAudioManager::PopulateStaticFields();
+  CJNIAudioTrack::PopulateStaticFields();
   CJNISurface::PopulateStaticFields();
   CJNIMediaCodec::PopulateStaticFields();
   CJNIMediaCodecInfoCodecProfileLevel::PopulateStaticFields();
diff --git a/xbmc/android/jni/KeyCharacterMap.cpp b/xbmc/android/jni/KeyCharacterMap.cpp
new file mode 100644 (file)
index 0000000..610717f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *      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 "KeyCharacterMap.h"
+#include "jutils/jutils-details.hpp"
+
+using namespace jni;
+
+CJNIKeyCharacterMap CJNIKeyCharacterMap::load(int deviceId)
+{
+  return (CJNIKeyCharacterMap)call_static_method<jhobject>("android/view/KeyCharacterMap",
+    "load", "(I)Landroid/view/KeyCharacterMap;",
+    deviceId);
+}
+
+int CJNIKeyCharacterMap::get(int keyCode, int metaState)
+{
+  return call_method<int>(m_object,
+    "get", "(II)I",
+    keyCode, metaState);
+}
diff --git a/xbmc/android/jni/KeyCharacterMap.h b/xbmc/android/jni/KeyCharacterMap.h
new file mode 100644 (file)
index 0000000..22eba95
--- /dev/null
@@ -0,0 +1,33 @@
+#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 "JNIBase.h"
+
+class CJNIURI;
+class CJNIKeyCharacterMap : public CJNIBase
+{
+public:
+  CJNIKeyCharacterMap(const jni::jhobject &object) : CJNIBase(object) {}
+  ~CJNIKeyCharacterMap() {}
+
+  static CJNIKeyCharacterMap load(int deviceId);
+  int get(int keyCode, int metaState);
+};
index 35cb840..7354df6 100644 (file)
@@ -4,7 +4,9 @@ SRCS      += Context.cpp
 SRCS      += BroadcastReceiver.cpp
 SRCS      += Intent.cpp
 SRCS      += PackageManager.cpp
+SRCS      += AudioFormat.cpp
 SRCS      += AudioManager.cpp
+SRCS      += AudioTrack.cpp
 SRCS      += PowerManager.cpp
 SRCS      += WakeLock.cpp
 SRCS      += Environment.cpp
@@ -47,6 +49,7 @@ SRCS      += SurfaceTexture.cpp
 SRCS      += View.cpp
 SRCS      += Window.cpp
 SRCS      += Build.cpp
+SRCS      += KeyCharacterMap.cpp
 
 LIB        = jni.a
 
index c03b439..3094bdf 100644 (file)
   #include "Engines/ActiveAE/ActiveAE.h"
 #endif
 
-#if defined(HAS_PULSEAUDIO)
-  #include "Engines/PulseAE/PulseAE.h"
-#endif
-
-#if defined(TARGET_RASPBERRY_PI)
-  #include "Engines/PiAudio/PiAudioAE.h"
-#endif
-
 #include "guilib/LocalizeStrings.h"
 #include "settings/lib/Setting.h"
 #include "settings/Settings.h"
@@ -53,38 +45,11 @@ IAE *CAEFactory::GetEngine()
 
 bool CAEFactory::LoadEngine()
 {
-  bool loaded = false;
-
-#if defined(TARGET_RASPBERRY_PI)
-  return CAEFactory::LoadEngine(AE_ENGINE_PIAUDIO);
-#elif defined(TARGET_DARWIN)
+#if defined(TARGET_DARWIN)
   return CAEFactory::LoadEngine(AE_ENGINE_COREAUDIO);
+#else
+  return CAEFactory::LoadEngine(AE_ENGINE_ACTIVE);
 #endif
-
-  std::string engine;
-  if (getenv("AE_ENGINE"))
-  {
-    engine = (std::string)getenv("AE_ENGINE");
-    std::transform(engine.begin(), engine.end(), engine.begin(), ::toupper);
-
-    #if defined(HAS_PULSEAUDIO)
-    if (!loaded && engine == "PULSE")
-      loaded = CAEFactory::LoadEngine(AE_ENGINE_PULSE);
-    #endif
-    
-    if (!loaded && engine == "ACTIVE")
-      loaded = CAEFactory::LoadEngine(AE_ENGINE_ACTIVE);
-  }
-
-#if defined(HAS_PULSEAUDIO)
-  if (!loaded)
-    loaded = CAEFactory::LoadEngine(AE_ENGINE_PULSE);
-#endif
-
-  if (!loaded)
-    loaded = CAEFactory::LoadEngine(AE_ENGINE_ACTIVE);
-
-  return loaded;
 }
 
 bool CAEFactory::LoadEngine(enum AEEngine engine)
@@ -101,12 +66,6 @@ bool CAEFactory::LoadEngine(enum AEEngine engine)
 #else
     case AE_ENGINE_ACTIVE   : AE = new ActiveAE::CActiveAE(); break;
 #endif
-#if defined(HAS_PULSEAUDIO)
-    case AE_ENGINE_PULSE    : AE = new CPulseAE(); break;
-#endif
-#if defined(TARGET_RASPBERRY_PI)
-    case AE_ENGINE_PIAUDIO  : AE = new PiAudioAE::CPiAudioAE(); break;
-#endif
     default:
       return false;
   }
@@ -439,3 +398,9 @@ bool CAEFactory::IsSettingVisible(const std::string &condition, const std::strin
 
   return AE->IsSettingVisible(value);
 }
+
+void CAEFactory::KeepConfiguration(unsigned int millis)
+{
+  if (AE)
+    AE->KeepConfiguration(millis);
+}
index 745ddc1..9a340cc 100644 (file)
@@ -30,7 +30,6 @@ enum AEEngine
 {
   AE_ENGINE_NULL,
   AE_ENGINE_COREAUDIO,
-  AE_ENGINE_PULSE,
   AE_ENGINE_ACTIVE,
   AE_ENGINE_PIAUDIO
 };
@@ -76,6 +75,7 @@ public:
   static void SettingOptionsAudioQualityLevelsFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int &current);
   static void SettingOptionsAudioStreamsilenceFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int &current);
   static bool IsSettingVisible(const std::string &condition, const std::string &value, const std::string &settingId);
+  static void KeepConfiguration(unsigned int millis);
 
   static void RegisterAudioCallback(IAudioCallback* pCallback);
   static void UnregisterAudioCallback();
index e7fb9a3..7b515aa 100644 (file)
   #include "Sinks/AESinkDirectSound.h"
 #elif defined(TARGET_ANDROID)
   #include "Sinks/AESinkAUDIOTRACK.h"
+#elif defined(TARGET_RASPBERRY_PI)
+  #include "Sinks/AESinkPi.h"
 #elif defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
   #if defined(HAS_ALSA)
     #include "Sinks/AESinkALSA.h"
   #endif
+  #if defined(HAS_PULSEAUDIO)
+    #include "Sinks/AESinkPULSE.h"
+  #endif
   #include "Sinks/AESinkOSS.h"
 #else
   #pragma message("NOTICE: No audio sink for target platform.  Audio output will not be available.")
@@ -55,13 +60,19 @@ void CAESinkFactory::ParseDevice(std::string &device, std::string &driver)
         driver == "DIRECTSOUND" ||
 #elif defined(TARGET_ANDROID)
         driver == "AUDIOTRACK"  ||
+#elif defined(TARGET_RASPBERRY_PI)
+        driver == "PI"          ||
 #elif defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
   #if defined(HAS_ALSA)
         driver == "ALSA"        ||
   #endif
+  #if defined(HAS_PULSEAUDIO)
+        driver == "PULSE"       ||
+  #endif
         driver == "OSS"         ||
 #endif
-        driver == "PROFILER")
+        driver == "PROFILER"    ||
+        driver == "NULL")
       device = device.substr(pos + 1, device.length() - pos - 1);
     else
       driver.clear();
@@ -70,85 +81,154 @@ void CAESinkFactory::ParseDevice(std::string &device, std::string &driver)
     driver.clear();
 }
 
-#define TRY_SINK(SINK) \
-{ \
-  tmpFormat = desiredFormat; \
-  tmpDevice = device; \
-  sink      = new CAESink ##SINK(); \
-  if (sink->Initialize(tmpFormat, tmpDevice)) \
-  { \
-    desiredFormat = tmpFormat; \
-    device        = tmpDevice; \
-    return sink; \
-  } \
-  sink->Deinitialize(); \
-  delete sink; \
-  sink = NULL; \
-}
-
-IAESink *CAESinkFactory::Create(std::string &device, AEAudioFormat &desiredFormat, bool rawPassthrough)
+IAESink *CAESinkFactory::TrySink(std::string &driver, std::string &device, AEAudioFormat &format)
 {
-  // extract the driver from the device string if it exists
-  std::string driver;
-  ParseDevice(device, driver);
-
-  AEAudioFormat  tmpFormat;
-  IAESink       *sink;
-  std::string    tmpDevice;
-
-  if (driver == "PROFILER")
-    TRY_SINK(Profiler);
+  IAESink *sink = NULL;
 
+  if (driver == "NULL")
+    sink = new CAESinkNULL();
 
 #if defined(TARGET_WINDOWS)
-  if (driver == "WASAPI")
-    TRY_SINK(WASAPI)
-  else
-    TRY_SINK(DirectSound) // always fall back to DirectSound
-
+  else if (driver == "WASAPI")
+    sink = new CAESinkWASAPI();
+  else if (driver == "DIRECTSOUND")
+    sink = new CAESinkDirectSound();
 #elif defined(TARGET_ANDROID)
-  if (driver.empty() || driver == "AUDIOTRACK")
-    TRY_SINK(AUDIOTRACK)
-
+  sink = new CAESinkAUDIOTRACK();
+#elif defined(TARGET_RASPBERRY_PI)
+  sink = new CAESinkPi();
 #elif defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
+  #if defined(HAS_PULSEAUDIO)
+  else if (driver == "PULSE")
+    sink = new CAESinkPULSE();
+  #endif
   #if defined(HAS_ALSA)
-  if (driver.empty() || driver == "ALSA")
-    TRY_SINK(ALSA)
+  else if (driver == "ALSA")
+    sink = new CAESinkALSA();
   #endif
-
-  if (driver.empty() || driver == "OSS")
-    TRY_SINK(OSS)
+  else if (driver == "OSS")
+    sink = new CAESinkOSS();
 #endif
 
-  // complete failure.
-  TRY_SINK(NULL);
+  if (!sink)
+    return NULL;
 
-  // should never get here
-  ASSERT(false);
+  if (sink->Initialize(format, device))
+  {
+    return sink;
+  }
+  sink->Deinitialize();
+  delete sink;
   return NULL;
 }
 
-#define ENUMERATE_SINK(SINK, force) { \
-  AESinkInfo info; \
-  info.m_sinkName = #SINK; \
-  CAESink ##SINK::EnumerateDevicesEx(info.m_deviceInfoList, force); \
-  if(!info.m_deviceInfoList.empty()) \
-    list.push_back(info); \
+IAESink *CAESinkFactory::Create(std::string &device, AEAudioFormat &desiredFormat, bool rawPassthrough)
+{
+  // extract the driver from the device string if it exists
+  std::string driver;
+  ParseDevice(device, driver);
+
+  AEAudioFormat  tmpFormat = desiredFormat;
+  IAESink       *sink;
+  std::string    tmpDevice = device;
+
+  sink = TrySink(driver, tmpDevice, tmpFormat);
+  if (sink)
+  {
+    desiredFormat = tmpFormat;
+    return sink;
+  }
+
+  return NULL;
 }
 
 void CAESinkFactory::EnumerateEx(AESinkInfoList &list, bool force)
 {
+  AESinkInfo info;
 #if defined(TARGET_WINDOWS)
-  ENUMERATE_SINK(DirectSound, force);
-  ENUMERATE_SINK(WASAPI, force);
+
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "DirectSound";
+  CAESinkDirectSound::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "WASAPI";
+  CAESinkWASAPI::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+
 #elif defined(TARGET_ANDROID)
-    ENUMERATE_SINK(AUDIOTRACK, force);
+
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "AUDIOTRACK";
+  CAESinkAUDIOTRACK::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+
+#elif defined(TARGET_RASPBERRY_PI)
+
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "PI";
+  CAESinkPi::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+
 #elif defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
+  // check if user wants us to do something specific
+  if (getenv("AE_SINK"))
+  {
+    std::string envSink = (std::string)getenv("AE_SINK");
+    std::transform(envSink.begin(), envSink.end(), envSink.begin(), ::toupper);
+    info.m_deviceInfoList.clear();
+    #if defined(HAS_PULSEAUDIO)
+    if (envSink == "PULSE")
+      CAESinkPULSE::EnumerateDevicesEx(info.m_deviceInfoList, force);
+    #endif
+    #if defined(HAS_ALSA)
+    if (envSink == "ALSA")
+      CAESinkALSA::EnumerateDevicesEx(info.m_deviceInfoList, force);
+    #endif
+    if (envSink == "OSS")
+      CAESinkOSS::EnumerateDevicesEx(info.m_deviceInfoList, force);
+
+    if(!info.m_deviceInfoList.empty())
+    {
+      info.m_sinkName = envSink;
+      list.push_back(info);
+      return;
+    }
+    else
+      CLog::Log(LOGNOTICE, "User specified Sink %s could not be enumerated", envSink.c_str());
+  }
+
+  #if defined(HAS_PULSEAUDIO)
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "PULSE";
+  CAESinkPULSE::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+  {
+    list.push_back(info);
+    return;
+  }
+  #endif
+
   #if defined(HAS_ALSA)
-    ENUMERATE_SINK(ALSA, force);
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "ALSA";
+  CAESinkALSA::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+    return;
   #endif
 
-    ENUMERATE_SINK(OSS, force);
+  info.m_deviceInfoList.clear();
+  info.m_sinkName = "OSS";
+  CAESinkOSS::EnumerateDevicesEx(info.m_deviceInfoList, force);
+  if(!info.m_deviceInfoList.empty())
+    list.push_back(info);
+
 #endif
 
 }
index 5444d2c..a87e58e 100644 (file)
@@ -23,7 +23,7 @@
 #include <string>
 #include <vector>
 
-#include "Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 
 class IAESink;
 
@@ -41,5 +41,8 @@ public:
   static void     ParseDevice(std::string &device, std::string &driver);
   static IAESink *Create(std::string &device, AEAudioFormat &desiredFormat, bool rawPassthrough);
   static void     EnumerateEx(AESinkInfoList &list, bool force = false); /* The force flag can be used to indicate the rescan devices */
+
+protected:
+  static IAESink *TrySink(std::string &driver, std::string &device, AEAudioFormat &format);
 };
 
index 2f305b1..b91ed43 100644 (file)
@@ -21,7 +21,7 @@
 #define AC3_ENCODE_BITRATE 640000
 #define DTS_ENCODE_BITRATE 1411200
 
-#include "AEEncoderFFmpeg.h"
+#include "cores/AudioEngine/Encoders/AEEncoderFFmpeg.h"
 #include "cores/AudioEngine/Utils/AEUtil.h"
 #include "utils/log.h"
 #include "settings/AdvancedSettings.h"
index a3a6164..fc6a964 100644 (file)
@@ -23,8 +23,8 @@
 using namespace ActiveAE;
 #include "ActiveAESound.h"
 #include "ActiveAEStream.h"
-#include "Utils/AEUtil.h"
-#include "Encoders/AEEncoderFFmpeg.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
+#include "cores/AudioEngine/Encoders/AEEncoderFFmpeg.h"
 
 #include "settings/Settings.h"
 #include "settings/AdvancedSettings.h"
@@ -89,11 +89,13 @@ float CEngineStats::GetDelay()
   return delay;
 }
 
+// this is used to sync a/v so we need to add sink latency here
 float CEngineStats::GetDelay(CActiveAEStream *stream)
 {
   CSingleLock lock(m_lock);
   unsigned int now = XbmcThreads::SystemClockMillis();
   float delay = m_sinkDelay - (double)(now-m_sinkUpdate) / 1000;
+  delay += m_sinkLatency;
   delay += (float)m_bufferedSamples / m_sinkSampleRate;
 
   if (delay < 0)
@@ -220,9 +222,6 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
         case CActiveAEControlProtocol::GETSTATE:
           msg->Reply(CActiveAEControlProtocol::ACC, &m_state, sizeof(m_state));
           return;
-        case CActiveAEControlProtocol::SOUNDMODE:
-          m_soundMode = *(int*)msg->data;
-          return;
         case CActiveAEControlProtocol::VOLUME:
           m_volume = *(float*)msg->data;
           if (m_sinkHasVolume)
@@ -231,6 +230,11 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
         case CActiveAEControlProtocol::MUTE:
           m_muted = *(bool*)msg->data;
           return;
+        case CActiveAEControlProtocol::KEEPCONFIG:
+          m_extKeepConfig = *(unsigned int*)msg->data;
+          return;
+        case CActiveAEControlProtocol::DISPLAYRESET:
+          return;
         default:
           break;
         }
@@ -268,7 +272,7 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           break;
         }
       }
-      else if (&m_sink.m_dataPort)
+      else if (port == &m_sink.m_dataPort)
       {
         switch (signal)
         {
@@ -419,6 +423,7 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
             m_state = AE_TOP_CONFIGURED_SUSPEND;
             m_extDeferData = true;
           }
+          msg->Reply(CActiveAEControlProtocol::ACC);
           return;
         case CActiveAEControlProtocol::PAUSESTREAM:
           CActiveAEStream *stream;
@@ -430,14 +435,12 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
         case CActiveAEControlProtocol::RESUMESTREAM:
           stream = *(CActiveAEStream**)msg->data;
           stream->m_paused = false;
-          m_state = AE_TOP_CONFIGURED_PLAY;
           m_extTimeout = 0;
           return;
         case CActiveAEControlProtocol::FLUSHSTREAM:
           stream = *(CActiveAEStream**)msg->data;
           SFlushStream(stream);
           msg->Reply(CActiveAEControlProtocol::ACC);
-          m_state = AE_TOP_CONFIGURED_PLAY;
           m_extTimeout = 0;
           return;
         case CActiveAEControlProtocol::STREAMAMP:
@@ -485,8 +488,8 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
         case CActiveAEDataProtocol::PLAYSOUND:
           CActiveAESound *sound;
           sound = *(CActiveAESound**)msg->data;
-          if (m_soundMode == AE_SOUND_OFF ||
-             (m_soundMode == AE_SOUND_IDLE && !m_streams.empty()))
+          if (m_settings.guisoundmode == AE_SOUND_OFF ||
+             (m_settings.guisoundmode == AE_SOUND_IDLE && !m_streams.empty()))
             return;
           if (sound)
           {
@@ -540,7 +543,10 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           DiscardStream(stream);
           if (m_streams.empty())
           {
-            m_extDrainTimer.Set(m_stats.GetDelay() * 1000);
+            if (m_extKeepConfig)
+              m_extDrainTimer.Set(m_extKeepConfig);
+            else
+              m_extDrainTimer.Set(m_stats.GetDelay() * 1000);
             m_extDrain = true;
           }
           m_extTimeout = 0;
@@ -558,7 +564,7 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           break;
         }
       }
-      else if (&m_sink.m_dataPort)
+      else if (port == &m_sink.m_dataPort)
       {
         switch (signal)
         {
@@ -613,7 +619,7 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           break;
         }
       }
-      else if (&m_sink.m_dataPort)
+      else if (port == &m_sink.m_dataPort)
       {
         switch (signal)
         {
@@ -629,6 +635,17 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           break;
         }
       }
+      else if (port == NULL) // timeout
+      {
+        switch (signal)
+        {
+        case CActiveAEControlProtocol::TIMEOUT:
+          m_extTimeout = 1000;
+          return;
+        default:
+          break;
+        }
+      }
       break;
 
     case AE_TOP_CONFIGURED_IDLE:
@@ -636,6 +653,20 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
       {
         switch (signal)
         {
+        case CActiveAEControlProtocol::RESUMESTREAM:
+          CActiveAEStream *stream;
+          stream = *(CActiveAEStream**)msg->data;
+          stream->m_paused = false;
+          m_state = AE_TOP_CONFIGURED_PLAY;
+          m_extTimeout = 0;
+          return;
+        case CActiveAEControlProtocol::FLUSHSTREAM:
+          stream = *(CActiveAEStream**)msg->data;
+          SFlushStream(stream);
+          msg->Reply(CActiveAEControlProtocol::ACC);
+          m_state = AE_TOP_CONFIGURED_PLAY;
+          m_extTimeout = 0;
+          return;
         case CActiveAEControlProtocol::TIMEOUT:
           ResampleSounds();
           ClearDiscardedBuffers();
@@ -686,7 +717,6 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg)
           }
           if (!m_extDrain && HasWork())
           {
-            ResampleSounds();
             ClearDiscardedBuffers();
             m_extTimeout = 100;
             return;
@@ -719,6 +749,7 @@ void CActiveAE::Process()
   m_bStateMachineSelfTrigger = false;
   m_extDrain = false;
   m_extDeferData = false;
+  m_extKeepConfig = 0;
 
   // start sink
   m_sink.Start();
@@ -849,22 +880,36 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
 
   AEAudioFormat sinkInputFormat, inputFormat;
   AEAudioFormat oldInternalFormat = m_internalFormat;
+  AEAudioFormat oldSinkRequestFormat = m_sinkRequestFormat;
 
   inputFormat = GetInputFormat(desiredFmt);
 
   m_sinkRequestFormat = inputFormat;
   ApplySettingsToFormat(m_sinkRequestFormat, m_settings, (int*)&m_mode);
+  m_extKeepConfig = 0;
+
   std::string device = AE_IS_RAW(m_sinkRequestFormat.m_dataFormat) ? m_settings.passthoughdevice : m_settings.device;
   std::string driver;
   CAESinkFactory::ParseDevice(device, driver);
-  if (!IsSinkCompatible(m_sinkRequestFormat, device) || m_settings.driver.compare(driver) != 0)
+  if ((!CompareFormat(m_sinkRequestFormat, m_sinkFormat) && !CompareFormat(m_sinkRequestFormat, oldSinkRequestFormat)) ||
+      m_currDevice.compare(device) != 0 ||
+      m_settings.driver.compare(driver) != 0)
   {
     if (!InitSink())
       return;
     m_settings.driver = driver;
+    m_currDevice = device;
     initSink = true;
     m_stats.Reset(m_sinkFormat.m_sampleRate);
     m_sink.m_controlPort.SendOutMessage(CSinkControlProtocol::VOLUME, &m_volume, sizeof(float));
+
+    // limit buffer size in case of sink returns large buffer
+    unsigned int buffertime = (m_sinkFormat.m_frames*1000) / m_sinkFormat.m_sampleRate;
+    if (buffertime > 80)
+    {
+      CLog::Log(LOGWARNING, "ActiveAE::%s - sink returned large buffer of %d ms, reducing to 80 ms", __FUNCTION__, buffertime);
+      m_sinkFormat.m_frames = 80 * m_sinkFormat.m_sampleRate / 1000;
+    }
   }
 
   if (m_silenceBuffers)
@@ -877,8 +922,6 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
   if (m_streams.empty())
   {
     inputFormat = m_sinkFormat;
-    inputFormat.m_channelLayout = m_sinkRequestFormat.m_channelLayout;
-    inputFormat.m_channelLayout.ResolveChannels(m_sinkFormat.m_channelLayout);
     inputFormat.m_dataFormat = AE_FMT_FLOAT;
     inputFormat.m_frameSize = inputFormat.m_channelLayout.Count() *
                               (CAEUtil::DataFormatToBits(inputFormat.m_dataFormat) >> 3);
@@ -918,6 +961,7 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
     AEAudioFormat outputFormat;
     if (m_mode == MODE_RAW)
     {
+      inputFormat.m_frames = m_sinkFormat.m_frames;
       outputFormat = inputFormat;
       sinkInputFormat = m_sinkFormat;
     }
@@ -950,6 +994,7 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
         format.m_frameSize = 2* (CAEUtil::DataFormatToBits(format.m_dataFormat) >> 3);
         format.m_frames = AC3_FRAME_SIZE;
         format.m_sampleRate = 48000;
+        format.m_encodedRate = m_encoderFormat.m_sampleRate;
         if (m_encoderBuffers && initSink)
         {
           m_discardBufferPools.push_back(m_encoderBuffers);
@@ -967,8 +1012,6 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
     else
     {
       outputFormat = m_sinkFormat;
-      outputFormat.m_channelLayout = m_sinkRequestFormat.m_channelLayout;
-      outputFormat.m_channelLayout.ResolveChannels(m_sinkFormat.m_channelLayout);
       outputFormat.m_dataFormat = AE_FMT_FLOAT;
       outputFormat.m_frameSize = outputFormat.m_channelLayout.Count() *
                                  (CAEUtil::DataFormatToBits(outputFormat.m_dataFormat) >> 3);
@@ -997,6 +1040,10 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
         // create buffer pool
         (*it)->m_inputBuffers = new CActiveAEBufferPool((*it)->m_format);
         (*it)->m_inputBuffers->Create(MAX_CACHE_LEVEL*1000);
+        (*it)->m_streamSpace = (*it)->m_format.m_frameSize * (*it)->m_format.m_frames;
+
+        // if input format does not follow ffmpeg channel mask, we may need to remap channels
+        (*it)->InitRemapper();
       }
       if (initSink && (*it)->m_resampleBuffers)
       {
@@ -1016,6 +1063,9 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
       (*it)->m_limiter.SetSamplerate(outputFormat.m_sampleRate);
     }
 
+    // update buffered time of streams
+    m_stats.AddSamples(0, m_streams);
+
     // buffers for viz
     if (!AE_IS_RAW(inputFormat.m_dataFormat))
     {
@@ -1061,10 +1111,14 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
   // reset gui sounds
   if (!CompareFormat(oldInternalFormat, m_internalFormat))
   {
-    std::vector<CActiveAESound*>::iterator it;
-    for (it = m_sounds.begin(); it != m_sounds.end(); ++it)
+    if (m_settings.guisoundmode == AE_SOUND_ALWAYS ||
+       (m_settings.guisoundmode == AE_SOUND_IDLE && m_streams.empty()))
     {
-      (*it)->SetConverted(false);
+      std::vector<CActiveAESound*>::iterator it;
+      for (it = m_sounds.begin(); it != m_sounds.end(); ++it)
+      {
+        (*it)->SetConverted(false);
+      }
     }
     m_sounds_playing.clear();
   }
@@ -1173,7 +1227,7 @@ void CActiveAE::FlushEngine()
   if (m_sink.m_controlPort.SendOutMessageSync(CSinkControlProtocol::FLUSH,
                                            &reply, 2000))
   {
-    bool success = reply->signal == CSinkControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CSinkControlProtocol::ACC;
     if (!success)
     {
       CLog::Log(LOGERROR, "ActiveAE::%s - returned error on flush", __FUNCTION__);
@@ -1264,6 +1318,7 @@ void CActiveAE::ChangeResamplers()
 
 void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, int *mode)
 {
+  int oldMode = m_mode;
   if (mode)
     *mode = MODE_PCM;
 
@@ -1285,6 +1340,7 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett
   else if (settings.channels <= AE_CH_LAYOUT_2_0 && // no multichannel pcm
            settings.passthrough &&
            settings.ac3passthrough &&
+           settings.ac3transcode &&
            !m_streams.empty() &&
            (format.m_channelLayout.Count() > 2 || settings.stereoupmix))
   {
@@ -1324,8 +1380,10 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett
 
       if (m_settings.config == AE_CONFIG_FIXED || (settings.stereoupmix && format.m_channelLayout.Count() <= 2))
         format.m_channelLayout = stdLayout;
+      else if (m_extKeepConfig && (settings.config == AE_CONFIG_AUTO) && (oldMode != MODE_RAW))
+        format.m_channelLayout = m_internalFormat.m_channelLayout;
       else
-        format.m_channelLayout.ResolveChannels(stdLayout);;
+        format.m_channelLayout.ResolveChannels(stdLayout);
     }
     // don't change from multi to stereo in AUTO mode
     else if ((settings.config == AE_CONFIG_AUTO) &&
@@ -1379,10 +1437,10 @@ bool CActiveAE::NeedReconfigureSink()
   std::string device = AE_IS_RAW(newFormat.m_dataFormat) ? m_settings.passthoughdevice : m_settings.device;
   std::string driver;
   CAESinkFactory::ParseDevice(device, driver);
-  if (m_settings.driver.compare(driver) != 0)
-    return true;
 
-  if (!IsSinkCompatible(newFormat, device))
+  if (!CompareFormat(newFormat, m_sinkFormat) ||
+      m_currDevice.compare(device) != 0 ||
+      m_settings.driver.compare(driver) != 0)
     return true;
 
   return false;
@@ -1403,7 +1461,7 @@ bool CActiveAE::InitSink()
                                                  5000,
                                                  &config, sizeof(config)))
   {
-    bool success = reply->signal == CSinkControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CSinkControlProtocol::ACC;
     if (!success)
     {
       reply->Release();
@@ -1411,18 +1469,22 @@ bool CActiveAE::InitSink()
       m_extError = true;
       return false;
     }
-    AEAudioFormat *data;
-    data = (AEAudioFormat*)reply->data;
+    SinkReply *data;
+    data = (SinkReply*)reply->data;
     if (data)
     {
-      m_sinkFormat = *data;
+      m_sinkFormat = data->format;
+      m_sinkHasVolume = data->hasVolume;
+      m_stats.SetSinkCacheTotal(data->cacheTotal);
+      m_stats.SetSinkLatency(data->latency);
     }
-    m_sinkHasVolume = m_sink.HasVolume();
     reply->Release();
   }
   else
   {
     CLog::Log(LOGERROR, "ActiveAE::%s - failed to init", __FUNCTION__);
+    m_stats.SetSinkCacheTotal(0);
+    m_stats.SetSinkLatency(0);
     m_extError = true;
     return false;
   }
@@ -1439,7 +1501,7 @@ void CActiveAE::DrainSink()
                                                  &reply,
                                                  2000))
   {
-    bool success = reply->signal == CSinkDataProtocol::ACC ? true : false;
+    bool success = reply->signal == CSinkDataProtocol::ACC;
     if (!success)
     {
       reply->Release();
@@ -1457,40 +1519,6 @@ void CActiveAE::DrainSink()
   }
 }
 
-bool CActiveAE::IsSinkCompatible(const AEAudioFormat format, const std::string &device)
-{
-  bool compatible = false;
-  SinkConfig config;
-  config.format = format;
-  config.device = &device;
-
-  // send message to sink
-  Message *reply;
-  if (m_sink.m_controlPort.SendOutMessageSync(CSinkControlProtocol::ISCOMPATIBLE,
-                                                 &reply,
-                                                 1000,
-                                                 &config, sizeof(config)))
-  {
-    bool success = reply->signal == CSinkControlProtocol::ACC ? true : false;
-    if (!success)
-    {
-      reply->Release();
-      CLog::Log(LOGERROR, "ActiveAE::%s - returned error", __FUNCTION__);
-      m_extError = true;
-      return false;
-    }
-    compatible = *(bool*)reply->data;
-    reply->Release();
-  }
-  else
-  {
-    CLog::Log(LOGERROR, "ActiveAE::%s - failed to query compatibility", __FUNCTION__);
-    m_extError = true;
-    return false;
-  }
-  return compatible;
-}
-
 void CActiveAE::UnconfigureSink()
 {
   // send message to sink
@@ -1499,7 +1527,7 @@ void CActiveAE::UnconfigureSink()
                                                  &reply,
                                                  2000))
   {
-    bool success = reply->signal == CSinkControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CSinkControlProtocol::ACC;
     if (!success)
     {
       CLog::Log(LOGERROR, "ActiveAE::%s - returned error", __FUNCTION__);
@@ -1513,6 +1541,9 @@ void CActiveAE::UnconfigureSink()
     m_extError = true;
   }
 
+  // make sure we open sink on next configure
+  m_currDevice = "";
+
   m_inMsgEvent.Reset();
 }
 
@@ -1999,11 +2030,15 @@ void CActiveAE::LoadSettings()
   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;
+  m_settings.stereoupmix = IsSettingVisible("audiooutput.stereoupmix") ? CSettings::Get().GetBool("audiooutput.stereoupmix") : false;
   m_settings.normalizelevels = CSettings::Get().GetBool("audiooutput.normalizelevels");
+  m_settings.guisoundmode = CSettings::Get().GetInt("audiooutput.guisoundmode");
 
   m_settings.passthrough = m_settings.config == AE_CONFIG_FIXED ? false : CSettings::Get().GetBool("audiooutput.passthrough");
+  if (!m_sink.HasPassthroughDevice())
+    m_settings.passthrough = false;
   m_settings.ac3passthrough = CSettings::Get().GetBool("audiooutput.ac3passthrough");
+  m_settings.ac3transcode = CSettings::Get().GetBool("audiooutput.ac3transcode");
   m_settings.eac3passthrough = CSettings::Get().GetBool("audiooutput.eac3passthrough");
   m_settings.truehdpassthrough = CSettings::Get().GetBool("audiooutput.truehdpassthrough");
   m_settings.dtspassthrough = CSettings::Get().GetBool("audiooutput.dtspassthrough");
@@ -2027,7 +2062,7 @@ bool CActiveAE::Initialize()
                                                  &reply,
                                                  5000))
   {
-    bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CActiveAEControlProtocol::ACC;
     reply->Release();
     if (!success)
     {
@@ -2068,6 +2103,7 @@ void CActiveAE::OnSettingsChange(const std::string& setting)
       setting == "audiooutput.audiodevice"       ||
       setting == "audiooutput.config"            ||
       setting == "audiooutput.ac3passthrough"    ||
+      setting == "audiooutput.ac3transcode"      ||
       setting == "audiooutput.eac3passthrough"   ||
       setting == "audiooutput.dtspassthrough"    ||
       setting == "audiooutput.truehdpassthrough" ||
@@ -2078,7 +2114,8 @@ void CActiveAE::OnSettingsChange(const std::string& setting)
       setting == "audiooutput.processquality"    ||
       setting == "audiooutput.passthrough"       ||
       setting == "audiooutput.samplerate"        ||
-      setting == "audiooutput.normalizelevels")
+      setting == "audiooutput.normalizelevels"   ||
+      setting == "audiooutput.guisoundmode")
   {
     m_controlPort.SendOutMessage(CActiveAEControlProtocol::RECONFIGURE);
   }
@@ -2146,6 +2183,20 @@ bool CActiveAE::IsSettingVisible(const std::string &settingId)
         m_sink.GetDeviceType(CSettings::Get().GetString("audiooutput.passthroughdevice")) == AE_DEVTYPE_HDMI)
       return true;
   }
+  else if (settingId == "audiooutput.stereoupmix")
+  {
+    if (m_sink.HasPassthroughDevice() ||
+        CSettings::Get().GetInt("audiooutput.channels") > AE_CH_LAYOUT_2_0)
+    return true;
+  }
+  else if (settingId == "audiooutput.ac3transcode")
+  {
+    if (m_sink.HasPassthroughDevice() &&
+        CSettings::Get().GetBool("audiooutput.ac3passthrough") &&
+        CSettings::Get().GetInt("audiooutput.config") != AE_CONFIG_FIXED &&
+        (CSettings::Get().GetInt("audiooutput.channels") <= AE_CH_LAYOUT_2_0 || m_sink.GetDeviceType(CSettings::Get().GetString("audiooutput.audiodevice")) == AE_DEVTYPE_IEC958))
+      return true;
+  }
   return false;
 }
 
@@ -2166,7 +2217,7 @@ bool CActiveAE::Resume()
                                                  &reply,
                                                  5000))
   {
-    bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CActiveAEControlProtocol::ACC;
     reply->Release();
     if (!success)
     {
@@ -2213,19 +2264,38 @@ bool CActiveAE::IsMuted()
 
 void CActiveAE::SetSoundMode(const int mode)
 {
-  int soundmode = mode;
-  m_controlPort.SendOutMessage(CActiveAEControlProtocol::SOUNDMODE, &soundmode, sizeof(int));
+  return;
 }
 
+void CActiveAE::KeepConfiguration(unsigned int millis)
+{
+  unsigned int timeMs = millis;
+  m_controlPort.SendOutMessage(CActiveAEControlProtocol::KEEPCONFIG, &timeMs, sizeof(unsigned int));
+}
 
 void CActiveAE::OnLostDevice()
 {
-//  m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYLOST);
+  Message *reply;
+  if (m_controlPort.SendOutMessageSync(CActiveAEControlProtocol::DISPLAYLOST,
+                                                 &reply,
+                                                 5000))
+  {
+    bool success = reply->signal == CActiveAEControlProtocol::ACC;
+    reply->Release();
+    if (!success)
+    {
+      CLog::Log(LOGERROR, "ActiveAE::%s - returned error", __FUNCTION__);
+    }
+  }
+  else
+  {
+    CLog::Log(LOGERROR, "ActiveAE::%s - timed out", __FUNCTION__);
+  }
 }
 
 void CActiveAE::OnResetDevice()
 {
-//  m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYRESET);
+  m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYRESET);
 }
 
 //-----------------------------------------------------------------------------
@@ -2255,8 +2325,7 @@ bool CActiveAE::CompareFormat(AEAudioFormat &lhs, AEAudioFormat &rhs)
 {
   if (lhs.m_channelLayout != rhs.m_channelLayout ||
       lhs.m_dataFormat != rhs.m_dataFormat ||
-      lhs.m_sampleRate != rhs.m_sampleRate ||
-      lhs.m_frames != rhs.m_frames)
+      lhs.m_sampleRate != rhs.m_sampleRate)
     return false;
   else
     return true;
@@ -2415,6 +2484,10 @@ void CActiveAE::StopSound(CActiveAESound *sound)
  */
 void CActiveAE::ResampleSounds()
 {
+  if (m_settings.guisoundmode == AE_SOUND_OFF ||
+     (m_settings.guisoundmode == AE_SOUND_IDLE && !m_streams.empty()))
+    return;
+
   std::vector<CActiveAESound*>::iterator it;
   for (it = m_sounds.begin(); it != m_sounds.end(); ++it)
   {
@@ -2461,7 +2534,7 @@ bool CActiveAE::ResampleSound(CActiveAESound *sound)
                   false,
                   true,
                   NULL,
-                  AE_QUALITY_MID);
+                  m_settings.resampleQuality);
 
   dst_samples = resampler->CalcDstSampleCount(sound->GetSound(true)->nb_samples,
                                               m_internalFormat.m_sampleRate,
@@ -2511,7 +2584,7 @@ IAEStream *CActiveAE::MakeStream(enum AEDataFormat dataFormat, unsigned int samp
                                     &reply,10000,
                                     &msg, sizeof(MsgStreamNew)))
   {
-    bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CActiveAEControlProtocol::ACC;
     if (success)
     {
       CActiveAEStream *stream = *(CActiveAEStream**)reply->data;
@@ -2538,7 +2611,7 @@ void CActiveAE::FlushStream(CActiveAEStream *stream)
                                        &reply,1000,
                                        &stream, sizeof(CActiveAEStream*)))
   {
-    bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+    bool success = reply->signal == CActiveAEControlProtocol::ACC;
     reply->Release();
     if (!success)
     {
index 2955bb8..debc8e1 100644 (file)
@@ -24,9 +24,9 @@
 
 #include "ActiveAESink.h"
 #include "ActiveAEResample.h"
-#include "Interfaces/AEStream.h"
-#include "Interfaces/AESound.h"
-#include "AEFactory.h"
+#include "cores/AudioEngine/Interfaces/AEStream.h"
+#include "cores/AudioEngine/Interfaces/AESound.h"
+#include "cores/AudioEngine/AEFactory.h"
 #include "guilib/DispResource.h"
 
 // ffmpeg
@@ -50,6 +50,7 @@ struct AudioSettings
   std::string passthoughdevice;
   int channels;
   bool ac3passthrough;
+  bool ac3transcode;
   bool eac3passthrough;
   bool dtspassthrough;
   bool truehdpassthrough;
@@ -58,6 +59,7 @@ struct AudioSettings
   bool normalizelevels;
   bool passthrough;
   int config;
+  int guisoundmode;
   unsigned int samplerate;
   AEQuality resampleQuality;
 };
@@ -82,10 +84,10 @@ public:
     STREAMRESAMPLERATIO,
     STREAMFADE,
     STOPSOUND,
-    SOUNDMODE,
     GETSTATE,
     DISPLAYLOST,
     DISPLAYRESET,
+    KEEPCONFIG,
     TIMEOUT,
   };
   enum InSignal
@@ -162,11 +164,13 @@ public:
   float GetWaterLevel();
   void SetSuspended(bool state);
   void SetSinkCacheTotal(float time) { m_sinkCacheTotal = time; }
+  void SetSinkLatency(float time) { m_sinkLatency = time; }
   bool IsSuspended();
   CCriticalSection *GetLock() { return &m_lock; }
 protected:
   float m_sinkDelay;
   float m_sinkCacheTotal;
+  float m_sinkLatency;
   int m_bufferedSamples;
   unsigned int m_sinkSampleRate;
   unsigned int m_sinkUpdate;
@@ -219,6 +223,7 @@ public:
   virtual bool SupportsSilenceTimeout();
   virtual bool SupportsQualityLevel(enum AEQuality level);
   virtual bool IsSettingVisible(const std::string &settingId);
+  virtual void KeepConfiguration(unsigned int millis);
 
   virtual void RegisterAudioCallback(IAudioCallback* pCallback);
   virtual void UnregisterAudioCallback();
@@ -248,7 +253,6 @@ protected:
   bool InitSink();
   void DrainSink();
   void UnconfigureSink();
-  bool IsSinkCompatible(const AEAudioFormat format, const std::string &device);
   void Start();
   void Dispose();
   void LoadSettings();
@@ -286,6 +290,7 @@ protected:
   bool m_extError;
   bool m_extDrain;
   XbmcThreads::EndTime m_extDrainTimer;
+  unsigned int m_extKeepConfig;
   bool m_extDeferData;
 
   enum
@@ -304,6 +309,7 @@ protected:
   AudioSettings m_settings;
   CEngineStats m_stats;
   IAEEncoder *m_encoder;
+  std::string m_currDevice;
 
   // buffers
   CActiveAEBufferPoolResample *m_sinkBuffers;
@@ -324,7 +330,6 @@ protected:
   };
   std::list<SoundState> m_sounds_playing;
   std::vector<CActiveAESound*> m_sounds;
-  int m_soundMode;
 
   float m_volume;
   bool m_muted;
index b5daee6..f2fd023 100644 (file)
@@ -19,9 +19,9 @@
  */
 
 #include "ActiveAEBuffer.h"
-#include "AEFactory.h"
-#include "ActiveAE.h"
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/AEFactory.h"
+#include "cores/AudioEngine/Engines/ActiveAE/ActiveAE.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 
 using namespace ActiveAE;
 
index 8475918..58205a4 100644 (file)
@@ -21,8 +21,8 @@
 
 #include "DllAvUtil.h"
 #include "DllSwResample.h"
-#include "Utils/AEAudioFormat.h"
-#include "Interfaces/AE.h"
+#include "cores/AudioEngine/Utils/AEAudioFormat.h"
+#include "cores/AudioEngine/Interfaces/AE.h"
 #include <deque>
 
 namespace ActiveAE
index e2e4aa5..ca19263 100644 (file)
@@ -25,6 +25,9 @@ using namespace ActiveAE;
 CActiveAEResample::CActiveAEResample()
 {
   m_pContext = NULL;
+  m_loaded = false;
+  if (m_dllAvUtil.Load() && m_dllSwResample.Load())
+    m_loaded = true;
 }
 
 CActiveAEResample::~CActiveAEResample()
@@ -38,7 +41,7 @@ CActiveAEResample::~CActiveAEResample()
 
 bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst_rate, AVSampleFormat dst_fmt, int dst_bits, uint64_t src_chan_layout, int src_channels, int src_rate, AVSampleFormat src_fmt, int src_bits, bool upmix, bool normalize, CAEChannelInfo *remapLayout, AEQuality quality)
 {
-  if (!m_dllAvUtil.Load() || !m_dllSwResample.Load())
+  if (!m_loaded)
     return false;
 
   m_dst_chan_layout = dst_chan_layout;
index 792ff12..1e0e342 100644 (file)
 
 #include "DllAvUtil.h"
 #include "DllSwResample.h"
-#include "Utils/AEChannelInfo.h"
-#include "Utils/AEAudioFormat.h"
-#include "ActiveAEBuffer.h"
-#include "Interfaces/AE.h"
+#include "cores/AudioEngine/Utils/AEChannelInfo.h"
+#include "cores/AudioEngine/Utils/AEAudioFormat.h"
+#include "cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h"
+#include "cores/AudioEngine/Interfaces/AE.h"
 
 namespace ActiveAE
 {
@@ -51,6 +51,7 @@ public:
 protected:
   DllAvUtil m_dllAvUtil;
   DllSwResample m_dllSwResample;
+  bool m_loaded;
   uint64_t m_src_chan_layout, m_dst_chan_layout;
   int m_src_rate, m_dst_rate;
   int m_src_channels, m_dst_channels;
index d175e7d..55e2ca9 100644 (file)
@@ -21,7 +21,7 @@
 #include <sstream>
 
 #include "ActiveAESink.h"
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 #include "utils/EndianSwap.h"
 #include "ActiveAE.h"
 
@@ -76,20 +76,6 @@ void CActiveAESink::Dispose()
   }
 }
 
-bool CActiveAESink::IsCompatible(const AEAudioFormat format, const std::string &device)
-{
-  if (!m_sink)
-    return false;
-  return m_sink->IsCompatible(format, device);
-}
-
-bool CActiveAESink::HasVolume()
-{
-  if (!m_sink)
-    return false;
-  return m_sink->HasVolume();
-}
-
 AEDeviceType CActiveAESink::GetDeviceType(const std::string &device)
 {
   std::string dev = device;
@@ -169,10 +155,14 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg)
 
           if (!m_extError)
           {
-            m_stats->SetSinkCacheTotal(m_sink->GetCacheTotal());
+            SinkReply reply;
+            reply.format = m_sinkFormat;
+            reply.cacheTotal = m_sink->GetCacheTotal();
+            reply.latency = m_sink->GetLatency();
+            reply.hasVolume = m_sink->HasVolume();
             m_state = S_TOP_CONFIGURED_IDLE;
             m_extTimeout = 10000;
-            msg->Reply(CSinkControlProtocol::ACC, &m_sinkFormat, sizeof(AEAudioFormat));
+            msg->Reply(CSinkControlProtocol::ACC, &reply, sizeof(SinkReply));
           }
           else
           {
@@ -199,13 +189,6 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg)
           msg->Reply(CSinkControlProtocol::ACC);
           return;
 
-        case CSinkControlProtocol::ISCOMPATIBLE:
-          data = (SinkConfig*)msg->data;
-          bool compatible;
-          compatible = IsCompatible(data->format, *(data->device));
-          msg->Reply(CSinkControlProtocol::ACC, &compatible, sizeof(bool));
-          return;
-
         default:
           break;
         }
@@ -451,7 +434,7 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg)
       break;
 
     default: // we are in no state, should not happen
-      CLog::Log(LOGERROR, "CActiveSink::%s - no valid state: %d", __FUNCTION__, m_state);
+      CLog::Log(LOGERROR, "CActiveAESink::%s - no valid state: %d", __FUNCTION__, m_state);
       return;
     }
   } // for
@@ -652,73 +635,81 @@ void CActiveAESink::OpenSink()
   if (driver.empty() && m_sink)
     driver = m_sink->GetName();
 
-  std::string sinkName;
+  CLog::Log(LOGINFO, "CActiveAESink::OpenSink - initialize sink");
+
   if (m_sink)
   {
-    sinkName = m_sink->GetName();
-    std::transform(sinkName.begin(), sinkName.end(), sinkName.begin(), ::toupper);
+    m_sink->Drain();
+    m_sink->Deinitialize();
+    delete m_sink;
+    m_sink = NULL;
   }
 
-  if (!m_sink || sinkName != driver || !m_sink->IsCompatible(m_requestedFormat, device))
-  {
-    CLog::Log(LOGINFO, "CActiveAE::OpenSink - sink incompatible, re-starting");
+  // get the display name of the device
+  GetDeviceFriendlyName(device);
 
-    if (m_sink)
-    {
-      m_sink->Drain();
-      m_sink->Deinitialize();
-      delete m_sink;
-      m_sink = NULL;
-    }
+  // if we already have a driver, prepend it to the device string
+  if (!driver.empty())
+    device = driver + ":" + device;
 
-    // get the display name of the device
-    GetDeviceFriendlyName(device);
+  // WARNING: this changes format and does not use passthrough
+  m_sinkFormat = m_requestedFormat;
+  CLog::Log(LOGDEBUG, "CActiveAESink::OpenSink - trying to open device %s", device.c_str());
+  m_sink = CAESinkFactory::Create(device, m_sinkFormat, passthrough);
 
-    // if we already have a driver, prepend it to the device string
+  // try first device in out list
+  if (!m_sink && !m_sinkInfoList.empty())
+  {
+    driver = m_sinkInfoList.front().m_sinkName;
+    device = m_sinkInfoList.front().m_deviceInfoList.front().m_deviceName;
+    GetDeviceFriendlyName(device);
     if (!driver.empty())
       device = driver + ":" + device;
+    m_sinkFormat = m_requestedFormat;
+    CLog::Log(LOGDEBUG, "CActiveAESink::OpenSink - trying to open device %s", device.c_str());
+    m_sink = CAESinkFactory::Create(device, m_sinkFormat, passthrough);
+  }
 
-    // WARNING: this changes format and does not use passthrough
+  // open NULL sink
+  // TODO: should not be required by ActiveAE
+  if (!m_sink)
+  {
+    device = "NULL:NULL";
     m_sinkFormat = m_requestedFormat;
-    CLog::Log(LOGDEBUG, "CActiveAE::OpenSink - trying to open device %s", device.c_str());
+    CLog::Log(LOGDEBUG, "CActiveAESink::OpenSink - open NULL sink");
     m_sink = CAESinkFactory::Create(device, m_sinkFormat, passthrough);
+  }
 
-    if (!m_sink)
-    {
-      CLog::Log(LOGERROR, "CActiveAE::OpenSink - no sink was returned");
-      m_extError = true;
-      return;
-    }
+  if (!m_sink)
+  {
+    CLog::Log(LOGERROR, "CActiveAESink::OpenSink - no sink was returned");
+    m_extError = true;
+    return;
+  }
 
-    m_sink->SetVolume(m_volume);
+  m_sink->SetVolume(m_volume);
 
 #ifdef WORDS_BIGENDIAN
-    if (m_sinkFormat.m_dataFormat == AE_FMT_S16BE)
-      m_sinkFormat.m_dataFormat = AE_FMT_S16NE;
-    else if (m_sinkFormat.m_dataFormat == AE_FMT_S32BE)
-      m_sinkFormat.m_dataFormat = AE_FMT_S32NE;
+  if (m_sinkFormat.m_dataFormat == AE_FMT_S16BE)
+    m_sinkFormat.m_dataFormat = AE_FMT_S16NE;
+  else if (m_sinkFormat.m_dataFormat == AE_FMT_S32BE)
+    m_sinkFormat.m_dataFormat = AE_FMT_S32NE;
 #else
-    if (m_sinkFormat.m_dataFormat == AE_FMT_S16LE)
-      m_sinkFormat.m_dataFormat = AE_FMT_S16NE;
-    else if (m_sinkFormat.m_dataFormat == AE_FMT_S32LE)
-      m_sinkFormat.m_dataFormat = AE_FMT_S32NE;
+  if (m_sinkFormat.m_dataFormat == AE_FMT_S16LE)
+    m_sinkFormat.m_dataFormat = AE_FMT_S16NE;
+  else if (m_sinkFormat.m_dataFormat == AE_FMT_S32LE)
+    m_sinkFormat.m_dataFormat = AE_FMT_S32NE;
 #endif
 
-    CLog::Log(LOGDEBUG, "CActiveAE::OpenSink - %s Initialized:", m_sink->GetName());
-    CLog::Log(LOGDEBUG, "  Output Device : %s", m_deviceFriendlyName.c_str());
-    CLog::Log(LOGDEBUG, "  Sample Rate   : %d", m_sinkFormat.m_sampleRate);
-    CLog::Log(LOGDEBUG, "  Sample Format : %s", CAEUtil::DataFormatToStr(m_sinkFormat.m_dataFormat));
-    CLog::Log(LOGDEBUG, "  Channel Count : %d", m_sinkFormat.m_channelLayout.Count());
-    CLog::Log(LOGDEBUG, "  Channel Layout: %s", ((std::string)m_sinkFormat.m_channelLayout).c_str());
-    CLog::Log(LOGDEBUG, "  Frames        : %d", m_sinkFormat.m_frames);
-    CLog::Log(LOGDEBUG, "  Frame Samples : %d", m_sinkFormat.m_frameSamples);
-    CLog::Log(LOGDEBUG, "  Frame Size    : %d", m_sinkFormat.m_frameSize);
-  }
-  else
-    CLog::Log(LOGINFO, "CActiveAE::OpenSink - keeping old sink with : %s, %s, %dhz",
-                          CAEUtil::DataFormatToStr(m_sinkFormat.m_dataFormat),
-                          ((std::string)m_sinkFormat.m_channelLayout).c_str(),
-                          m_sinkFormat.m_sampleRate);
+  CLog::Log(LOGDEBUG, "CActiveAESink::OpenSink - %s Initialized:", m_sink->GetName());
+  CLog::Log(LOGDEBUG, "  Output Device : %s", m_deviceFriendlyName.c_str());
+  CLog::Log(LOGDEBUG, "  Sample Rate   : %d", m_sinkFormat.m_sampleRate);
+  CLog::Log(LOGDEBUG, "  Sample Format : %s", CAEUtil::DataFormatToStr(m_sinkFormat.m_dataFormat));
+  CLog::Log(LOGDEBUG, "  Channel Count : %d", m_sinkFormat.m_channelLayout.Count());
+  CLog::Log(LOGDEBUG, "  Channel Layout: %s", ((std::string)m_sinkFormat.m_channelLayout).c_str());
+  CLog::Log(LOGDEBUG, "  Frames        : %d", m_sinkFormat.m_frames);
+  CLog::Log(LOGDEBUG, "  Frame Samples : %d", m_sinkFormat.m_frameSamples);
+  CLog::Log(LOGDEBUG, "  Frame Size    : %d", m_sinkFormat.m_frameSize);
 
   // init sample of silence
   SampleConfig config;
index 52f4a17..d62b863 100644 (file)
 #include "threads/Event.h"
 #include "threads/Thread.h"
 #include "utils/ActorProtocol.h"
-#include "Interfaces/AE.h"
-#include "Interfaces/AESink.h"
-#include "AESinkFactory.h"
-#include "ActiveAEResample.h"
-#include "Utils/AEConvert.h"
+#include "cores/AudioEngine/Interfaces/AE.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/AESinkFactory.h"
+#include "cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h"
+#include "cores/AudioEngine/Utils/AEConvert.h"
 
 namespace ActiveAE
 {
@@ -41,6 +41,14 @@ struct SinkConfig
   const std::string *device;
 };
 
+struct SinkReply
+{
+  AEAudioFormat format;
+  float cacheTotal;
+  float latency;
+  bool hasVolume;
+};
+
 class CSinkControlProtocol : public Protocol
 {
 public:
@@ -50,7 +58,6 @@ public:
     CONFIGURE,
     UNCONFIGURE,
     SILENCEMODE,
-    ISCOMPATIBLE,
     VOLUME,
     FLUSH,
     TIMEOUT,
@@ -88,7 +95,6 @@ public:
   std::string GetDefaultDevice(bool passthrough);
   void Start();
   void Dispose();
-  bool HasVolume();
   AEDeviceType GetDeviceType(const std::string &device);
   bool HasPassthroughDevice();
   CSinkControlProtocol m_controlPort;
@@ -101,7 +107,6 @@ protected:
   void GetDeviceFriendlyName(std::string &device);
   void OpenSink();
   void ReturnBuffers();
-  bool IsCompatible(const AEAudioFormat format, const std::string &device);
 
   unsigned int OutputSamples(CSampleBuffer* samples);
   void ConvertInit(CSampleBuffer* samples);
@@ -116,7 +121,7 @@ protected:
   bool m_bStateMachineSelfTrigger;
   int m_extTimeout;
   bool m_extError;
-  int m_extSilenceTimeout;
+  unsigned int m_extSilenceTimeout;
   XbmcThreads::EndTime m_extSilenceTimer;
 
   CSampleBuffer m_sampleOfSilence;
index 496ca0e..b8805d3 100644 (file)
  *
  */
 
-#include "Interfaces/AESound.h"
+#include "cores/AudioEngine/Interfaces/AESound.h"
 
-#include "AEFactory.h"
-#include "Utils/AEAudioFormat.h"
+#include "cores/AudioEngine/AEFactory.h"
+#include "cores/AudioEngine/Utils/AEAudioFormat.h"
 #include "ActiveAE.h"
 #include "ActiveAESound.h"
 #include "utils/log.h"
index 7cdf76c..75227ab 100644 (file)
@@ -20,8 +20,8 @@
  */
 
 #include "utils/StdString.h"
-#include "Interfaces/AESound.h"
-#include "ActiveAEResample.h"
+#include "cores/AudioEngine/Interfaces/AESound.h"
+#include "cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.h"
 #include "filesystem/File.h"
 
 class DllAvUtil;
index d5b01ea..99989b3 100644 (file)
@@ -23,8 +23,8 @@
 #include "utils/log.h"
 #include "utils/MathUtils.h"
 
-#include "AEFactory.h"
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/AEFactory.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 
 #include "ActiveAE.h"
 #include "ActiveAEStream.h"
@@ -56,11 +56,15 @@ CActiveAEStream::CActiveAEStream(AEAudioFormat *format)
   m_leftoverBuffer = new uint8_t[m_format.m_frameSize];
   m_leftoverBytes = 0;
   m_forceResampler = false;
+  m_remapper = NULL;
+  m_remapBuffer = NULL;
 }
 
 CActiveAEStream::~CActiveAEStream()
 {
   delete [] m_leftoverBuffer;
+  delete m_remapper;
+  delete m_remapBuffer;
 }
 
 void CActiveAEStream::IncFreeBuffers()
@@ -81,6 +85,105 @@ void CActiveAEStream::ResetFreeBuffers()
   m_streamFreeBuffers = 0;
 }
 
+void CActiveAEStream::InitRemapper()
+{
+  // check if input format follows ffmpeg channel mask
+  bool needRemap = false;
+  unsigned int avLast, avCur = 0;
+  for(unsigned int i=0; i<m_format.m_channelLayout.Count(); i++)
+  {
+    avLast = avCur;
+    avCur = CActiveAEResample::GetAVChannel(m_format.m_channelLayout[i]);
+    if(avCur < avLast)
+    {
+      needRemap = true;
+      break;
+    }
+  }
+
+  if(needRemap)
+  {
+    CLog::Log(LOGDEBUG, "CActiveAEStream::%s - initialize remapper", __FUNCTION__);
+
+    m_remapper = new CActiveAEResample();
+    uint64_t avLayout = CActiveAEResample::GetAVChannelLayout(m_format.m_channelLayout);
+
+    // build layout according to ffmpeg channel order
+    // we need this for reference
+    CAEChannelInfo ffmpegLayout;
+    ffmpegLayout.Reset();
+    int idx = 0;
+    for(unsigned int i=0; i<m_format.m_channelLayout.Count(); i++)
+    {
+      for(unsigned int j=0; j<m_format.m_channelLayout.Count(); j++)
+      {
+        idx = m_remapper->GetAVChannelIndex(m_format.m_channelLayout[j], avLayout);
+        if (idx == (int)i)
+        {
+          ffmpegLayout += m_format.m_channelLayout[j];
+          break;
+        }
+      }
+    }
+
+    // build remap layout we can pass to resampler as destination layout
+    CAEChannelInfo remapLayout;
+    remapLayout.Reset();
+    for(unsigned int i=0; i<m_format.m_channelLayout.Count(); i++)
+    {
+      for(unsigned int j=0; j<m_format.m_channelLayout.Count(); j++)
+      {
+        idx = m_remapper->GetAVChannelIndex(m_format.m_channelLayout[j], avLayout);
+        if (idx == (int)i)
+        {
+          remapLayout += ffmpegLayout[j];
+          break;
+        }
+      }
+    }
+
+    // initialize resampler for only doing remapping
+    m_remapper->Init(avLayout,
+                     m_format.m_channelLayout.Count(),
+                     m_format.m_sampleRate,
+                     CActiveAEResample::GetAVSampleFormat(m_format.m_dataFormat),
+                     CAEUtil::DataFormatToUsedBits(m_format.m_dataFormat),
+                     avLayout,
+                     m_format.m_channelLayout.Count(),
+                     m_format.m_sampleRate,
+                     CActiveAEResample::GetAVSampleFormat(m_format.m_dataFormat),
+                     CAEUtil::DataFormatToUsedBits(m_format.m_dataFormat),
+                     false,
+                     false,
+                     &remapLayout,
+                     AE_QUALITY_LOW); // not used for remapping
+
+    // extra sound packet, we can't resample to the same buffer
+    m_remapBuffer = new CSoundPacket(m_inputBuffers->m_allSamples[0]->pkt->config, m_inputBuffers->m_allSamples[0]->pkt->max_nb_samples);
+  }
+}
+
+void CActiveAEStream::RemapBuffer()
+{
+  if(m_remapper)
+  {
+    int samples = m_remapper->Resample(m_remapBuffer->data, m_remapBuffer->max_nb_samples,
+                                       m_currentBuffer->pkt->data, m_currentBuffer->pkt->nb_samples,
+                                       1.0);
+
+    if (samples != m_currentBuffer->pkt->nb_samples)
+    {
+      CLog::Log(LOGERROR, "CActiveAEStream::%s - error remapping", __FUNCTION__);
+    }
+
+    // swap sound packets
+    CSoundPacket *tmp = m_remapBuffer;
+    tmp = m_currentBuffer->pkt;
+    m_currentBuffer->pkt = m_remapBuffer;
+    m_remapBuffer = tmp;
+  }
+}
+
 unsigned int CActiveAEStream::GetSpace()
 {
   CSingleLock lock(m_streamLock);
@@ -96,7 +199,7 @@ unsigned int CActiveAEStream::AddData(void *data, unsigned int size)
 
   while(copied < size)
   {
-    buf = (uint8_t*)data;
+    buf = ((uint8_t*)data) + copied;
     bytesToCopy = size - copied;
 
     if (m_currentBuffer)
@@ -105,9 +208,8 @@ unsigned int CActiveAEStream::AddData(void *data, unsigned int size)
       if (m_leftoverBytes && bytesToCopy >= (m_format.m_frameSize - m_leftoverBytes))
       {
         int fillbytes = m_format.m_frameSize - m_leftoverBytes;
-        memcpy(m_leftoverBuffer+m_leftoverBytes, (uint8_t*)data, fillbytes);
-        data = (uint8_t*)data + fillbytes;
-        size -= fillbytes;
+        memcpy(m_leftoverBuffer+m_leftoverBytes, buf, fillbytes);
+        copied += fillbytes;
         // leftover buffer will be copied on next cycle
         buf = m_leftoverBuffer;
         bytesToCopy = m_format.m_frameSize;
@@ -125,7 +227,7 @@ unsigned int CActiveAEStream::AddData(void *data, unsigned int size)
       // if we don't have a full frame, copy to leftover buffer
       if (!availableSamples && bytesToCopy)
       {
-        memcpy(m_leftoverBuffer+m_leftoverBytes, buf+copied, bytesToCopy);
+        memcpy(m_leftoverBuffer+m_leftoverBytes, buf, bytesToCopy);
         m_leftoverBytes = bytesToCopy;
         copied += bytesToCopy;
       }
@@ -135,9 +237,9 @@ unsigned int CActiveAEStream::AddData(void *data, unsigned int size)
 
       //TODO: handle planar formats
       if (m_convertFn)
-        m_convertFn(buf+copied, samples*m_currentBuffer->pkt->config.channels, (float*)(m_currentBuffer->pkt->data[0] + start));
+        m_convertFn(buf, samples*m_currentBuffer->pkt->config.channels, (float*)(m_currentBuffer->pkt->data[0] + start));
       else
-        memcpy(m_currentBuffer->pkt->data[0] + start, buf+copied, bytes);
+        memcpy(m_currentBuffer->pkt->data[0] + start, buf, bytes);
       {
         CSingleLock lock(*m_statsLock);
         m_currentBuffer->pkt->nb_samples += samples;
@@ -150,6 +252,7 @@ unsigned int CActiveAEStream::AddData(void *data, unsigned int size)
         MsgStreamSample msgData;
         msgData.buffer = m_currentBuffer;
         msgData.stream = this;
+        RemapBuffer();
         m_streamPort->SendOutMessage(CActiveAEDataProtocol::STREAMSAMPLE, &msgData, sizeof(MsgStreamSample));
         m_currentBuffer = NULL;
       }
@@ -234,6 +337,7 @@ void CActiveAEStream::Drain(bool wait)
     MsgStreamSample msgData;
     msgData.buffer = m_currentBuffer;
     msgData.stream = this;
+    RemapBuffer();
     m_streamPort->SendOutMessage(CActiveAEDataProtocol::STREAMSAMPLE, &msgData, sizeof(MsgStreamSample));
     m_currentBuffer = NULL;
   }
index 607e4ca..dd44972 100644 (file)
  *
  */
 
-#include "Interfaces/AEStream.h"
-#include "Utils/AEAudioFormat.h"
-#include "Utils/AELimiter.h"
-#include "Utils/AEConvert.h"
+#include "cores/AudioEngine/Interfaces/AEStream.h"
+#include "cores/AudioEngine/Utils/AEAudioFormat.h"
+#include "cores/AudioEngine/Utils/AELimiter.h"
+#include "cores/AudioEngine/Utils/AEConvert.h"
 
 namespace ActiveAE
 {
@@ -38,6 +38,8 @@ protected:
   void IncFreeBuffers();
   void DecFreeBuffers();
   void ResetFreeBuffers();
+  void InitRemapper();
+  void RemapBuffer();
 
 public:
   virtual unsigned int GetSpace();
@@ -94,12 +96,14 @@ protected:
   CCriticalSection m_streamLock;
   uint8_t *m_leftoverBuffer;
   int m_leftoverBytes;
+  CSampleBuffer *m_currentBuffer;
+  CSoundPacket *m_remapBuffer;
+  CActiveAEResample *m_remapper;
 
   // only accessed by engine
   CActiveAEBufferPool *m_inputBuffers;
   CActiveAEBufferPoolResample *m_resampleBuffers;
   std::deque<CSampleBuffer*> m_processingSamples;
-  CSampleBuffer *m_currentBuffer;
   CActiveAEDataProtocol *m_streamPort;
   CEvent m_inMsgEvent;
   CCriticalSection *m_statsLock;
index d57dd5a..1cd49cb 100644 (file)
@@ -83,6 +83,7 @@ void RegisterDeviceChangedCB(bool bRegister, void *ref){}
 
 CCoreAudioAE::CCoreAudioAE() :
   m_Initialized        (false         ),
+  m_deviceLost         (false         ),
   m_callbackRunning    (false         ),
   m_lastStreamFormat   (AE_FMT_INVALID),
   m_lastChLayoutCount  (0             ),
@@ -141,20 +142,26 @@ void CCoreAudioAE::Shutdown()
 
 void CCoreAudioAE::AudioDevicesChanged()
 {
-  if (!m_Initialized)
+  if (!m_Initialized && !m_deviceLost)
     return;
 
-  // give CA a bit time to realise that maybe the 
-  // default device might have changed now - else
-  // OpenCoreAudio might open the old default device
-  // again (yeah that really is the case - duh)
-  Sleep(500);
   CSingleLock engineLock(m_engineLock);
 
   // re-check initialized since it can have changed when we waited and grabbed the lock
-  if (!m_Initialized)
+  if (!m_Initialized && !m_deviceLost)
     return;
+
   OpenCoreAudio(m_lastSampleRate, COREAUDIO_IS_RAW(m_lastStreamFormat), m_lastStreamFormat, m_transcode);
+
+  // when we tried to open the default device or the last device
+  // again there was an error preventing us from doing it (mostly
+  // the device couldn't be found) - in that case
+  // mark our device as lost and hope that another callback
+  // for changed device list fires (e.x. device reappears)
+  if (!m_Initialized)
+      m_deviceLost = true;
+  else
+      m_deviceLost = false;
 }
 
 bool CCoreAudioAE::Initialize()
@@ -530,6 +537,11 @@ bool CCoreAudioAE::IsSettingVisible(const std::string &settingId)
     else
       return false;
   }
+  else if (settingId == "audiooutput.stereoupmix")
+  {
+    if (CSettings::Get().GetInt("audiooutput.channels") > AE_CH_LAYOUT_2_0)
+      return true;
+  }
 
   return true;
 }
index f31dada..3f465c4 100644 (file)
@@ -148,6 +148,7 @@ private:
 
   // Prevent multiple init/deinit
   bool              m_Initialized;
+  bool              m_deviceLost;
   bool              m_callbackRunning;
 
   AEAudioFormat     m_format;
index 3728d5f..10025bb 100644 (file)
@@ -85,7 +85,7 @@ CCoreAudioAEHALOSX::~CCoreAudioAEHALOSX()
   delete m_OutputStream;
 }
 
-bool CCoreAudioAEHALOSX::InitializePCM(ICoreAudioSource *pSource, AEAudioFormat &format, bool allowMixing, AudioDeviceID outputDevice)
+bool CCoreAudioAEHALOSX::InitializePCM(ICoreAudioSource *pSource, AEAudioFormat &format, bool allowMixing, AudioDeviceID outputDevice, bool encoded)
 {
   if (m_audioGraph)
     m_audioGraph->Close(), delete m_audioGraph;
@@ -98,7 +98,7 @@ bool CCoreAudioAEHALOSX::InitializePCM(ICoreAudioSource *pSource, AEAudioFormat
   if (!m_Passthrough && CSettings::Get().GetInt("audiooutput.channels") ==  AE_CH_LAYOUT_2_0)
     layout = g_LayoutMap[1];
 
-  if (!m_audioGraph->Open(pSource, format, outputDevice, allowMixing, layout, m_initVolume ))
+  if (!m_audioGraph->Open(pSource, format, outputDevice, allowMixing, layout, m_initVolume, encoded ))
   {
     CLog::Log(LOGDEBUG, "CCoreAudioAEHALOSX::Initialize: "
       "Unable to initialize audio due a missconfiguration. Try 2.0 speaker configuration.");
@@ -121,7 +121,7 @@ bool CCoreAudioAEHALOSX::InitializePCMEncoded(ICoreAudioSource *pSource, AEAudio
   // Set the Sample Rate as defined by the spec.
   m_AudioDevice->SetNominalSampleRate((float)format.m_sampleRate);
 
-  if (!InitializePCM(pSource, format, false, outputDevice))
+  if (!InitializePCM(pSource, format, false, outputDevice, true))
     return false;
 
   return true;
index 4c1c175..c96a4e1 100644 (file)
@@ -55,7 +55,7 @@ public:
   CCoreAudioAEHALOSX();
   virtual ~CCoreAudioAEHALOSX();
 
-  virtual bool  InitializePCM(ICoreAudioSource *pSource, AEAudioFormat &format, bool allowMixing, AudioDeviceID outputDevice);
+  virtual bool  InitializePCM(ICoreAudioSource *pSource, AEAudioFormat &format, bool allowMixing, AudioDeviceID outputDevice, bool encoded = false);
   virtual bool  InitializePCMEncoded(ICoreAudioSource *pSource, AEAudioFormat &format, AudioDeviceID outputDevice);
   virtual bool  InitializeEncoded(AudioDeviceID outputDevice, AEAudioFormat &format);
   virtual bool  Initialize(ICoreAudioSource *ae, bool passThrough, AEAudioFormat &format, AEDataFormat rawDataFormat, std::string &device, float initVolume);
index d606d83..581daf9 100644 (file)
@@ -628,7 +628,7 @@ unsigned int CCoreAudioAEStream::GetSpace()
 
 double CCoreAudioAEStream::GetDelay()
 {
-  if (m_delete || !m_Buffer)
+  if (m_delete || !m_Buffer || m_flushRequested)
     return 0.0f;
 
   double delayBuffer = (double)(m_Buffer->GetReadSize()) / (double)m_AvgBytesPerSec;
@@ -647,7 +647,7 @@ bool CCoreAudioAEStream::IsBuffering()
 
 double CCoreAudioAEStream::GetCacheTime()
 {
-  if (m_delete || !m_Buffer)
+  if (m_delete || !m_Buffer || m_flushRequested)
     return 0.0f;
   double delayBuffer = (double)(m_Buffer->GetReadSize()) / (double)m_AvgBytesPerSec;
   double delayTranscoder = 0.0;
index 3a4ac58..e55e300 100644 (file)
@@ -51,7 +51,7 @@ CCoreAudioGraph::~CCoreAudioGraph()
 }
 
 bool CCoreAudioGraph::Open(ICoreAudioSource *pSource, AEAudioFormat &format,
-  AudioDeviceID deviceId, bool allowMixing, AudioChannelLayoutTag layoutTag, float initVolume)
+  AudioDeviceID deviceId, bool allowMixing, AudioChannelLayoutTag layoutTag, float initVolume, bool encoded)
 {
   AudioStreamBasicDescription fmt = {0};
   AudioStreamBasicDescription inputFormat = {0};
@@ -89,7 +89,7 @@ bool CCoreAudioGraph::Open(ICoreAudioSource *pSource, AEAudioFormat &format,
     return false;
   m_audioUnit->SetBus(GetFreeBus());
 
-  m_audioUnit->GetFormatDesc(format, &inputFormat, &fmt);
+  m_audioUnit->GetFormatDesc(format, &inputFormat, &fmt, encoded);
 
   if (!m_audioUnit->EnableInputOuput())
     return false;
index 06106e8..d704ac6 100644 (file)
@@ -42,7 +42,7 @@ public:
   ~CCoreAudioGraph();
 
   bool             Open(ICoreAudioSource *pSource, AEAudioFormat &format, AudioDeviceID deviceId,
-                     bool allowMixing, AudioChannelLayoutTag layoutTag, float initVolume);
+                     bool allowMixing, AudioChannelLayoutTag layoutTag, float initVolume, bool encoded);
   bool             Close();
   bool             Start();
   bool             Stop();
index 9b9f5a7..5198444 100644 (file)
@@ -58,173 +58,59 @@ void CCoreAudioHardware::SetAutoHogMode(bool enable)
       "Unable to set auto 'hog' mode. Error = %s", GetError(ret).c_str());
 }
 
-AudioStreamBasicDescription* CCoreAudioHardware::FormatsList(AudioStreamID stream)
-{
-  // Retrieve all the stream formats supported by this output stream
-
-  AudioObjectPropertyAddress propertyAddress; 
-  propertyAddress.mScope    = kAudioObjectPropertyScopeGlobal; 
-  propertyAddress.mElement  = kAudioObjectPropertyElementMaster;
-  propertyAddress.mSelector = kAudioStreamPropertyPhysicalFormats; 
-
-  UInt32 listSize = 0;
-  OSStatus ret = AudioObjectGetPropertyDataSize(stream, &propertyAddress, 0, NULL, &listSize); 
-  if (ret != noErr)
-  {
-    CLog::Log(LOGDEBUG, "CCoreAudioHardware::FormatsList: "
-      "Unable to get list size. Error = %s", GetError(ret).c_str());
-    return NULL;
-  }
-
-  // Space for a terminating ID:
-  listSize += sizeof(AudioStreamBasicDescription);
-  AudioStreamBasicDescription *list = (AudioStreamBasicDescription*)malloc(listSize);
-  if (list == NULL)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::FormatsList: Out of memory?");
-    return NULL;
-  }
-
-  ret = AudioObjectGetPropertyData(stream, &propertyAddress, 0, NULL, &listSize, list); 
-  if (ret != noErr)
-  {
-    CLog::Log(LOGDEBUG, "CCoreAudioHardware::FormatsList: "
-      "Unable to get list. Error = %s", GetError(ret).c_str());
-    free(list);
-    return NULL;
-  }
-
-  // Add a terminating ID:
-  list[listSize/sizeof(AudioStreamBasicDescription)].mFormatID = 0;
-
-  return list;
-}
-
-AudioStreamID* CCoreAudioHardware::StreamsList(AudioDeviceID device)
-{
-  // Get a list of all the streams on this device
-  AudioObjectPropertyAddress  propertyAddress;
-  propertyAddress.mScope    = kAudioObjectPropertyScopeGlobal;
-  propertyAddress.mElement  = kAudioObjectPropertyElementMaster;
-  propertyAddress.mSelector = kAudioDevicePropertyStreams;
-
-  UInt32 listSize;
-  OSStatus ret = AudioObjectGetPropertyDataSize(device, &propertyAddress, 0, NULL, &listSize); 
-  if (ret != noErr)
-    return NULL;
-
-  // Space for a terminating ID:
-  listSize += sizeof(AudioStreamID);
-  AudioStreamID *list = (AudioStreamID*)malloc(listSize);
-  if (list == NULL)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::StreamsList: Out of memory?");
-    return NULL;
-  }
-
-  propertyAddress.mScope = kAudioDevicePropertyScopeInput;
-  ret = AudioObjectGetPropertyData(device, &propertyAddress, 0, NULL, &listSize, list);
-  if (ret != noErr)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::StreamsList: "
-      "Unable to get list. Error = %s", GetError(ret).c_str());
-    return NULL;
-  }
-
-  // Add a terminating ID:
-  list[listSize/sizeof(AudioStreamID)] = kAudioHardwareBadStreamError;
-
-  return list;
-}
-
 void CCoreAudioHardware::ResetAudioDevices()
 {
-  // Reset any devices with an AC3 stream back to a Linear PCM
-  // so that they can become a default output device
-  AudioObjectPropertyAddress propertyAddress; 
-  propertyAddress.mScope    = kAudioObjectPropertyScopeGlobal; 
-  propertyAddress.mElement  = kAudioObjectPropertyElementMaster;
-  propertyAddress.mSelector = kAudioHardwarePropertyDevices; 
-
-  UInt32 size;
-  OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size); 
-  if (ret != noErr)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::ResetAudioDevices: ResetAudioDevices - unknown size");
-    return;
-  }
-
-  AudioDeviceID *devices = (AudioDeviceID*)malloc(size);
-  if (!devices)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::ResetAudioDevices: ResetAudioDevices - out of memory?");
-    return;
-  }
-  int numDevices = size / sizeof(AudioDeviceID);
-  ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size, devices); 
-  if (ret != noErr)
-  {
-    CLog::Log(LOGERROR, "CCoreAudioHardware::ResetAudioDevices: ResetAudioDevices - cannot get device list");
-    return;
-  }
-
-  for (int i = 0; i < numDevices; i++)
+  CLog::Log(LOGDEBUG, "CCoreAudioHardware::ResetAudioDevices resetting our devices to LPCM");
+  CoreAudioDeviceList list;
+  if (GetOutputDevices(&list))
   {
-    AudioStreamID *streams = StreamsList(devices[i]);
-    if (streams)
+    for (CoreAudioDeviceList::iterator it = list.begin(); it != list.end(); it ++)
     {
-      for (int j = 0; streams[j] != kAudioHardwareBadStreamError; j++)
-        ResetStream(streams[j]);
-      free(streams);
+      CCoreAudioDevice device = *it;
+
+      AudioStreamIdList streams;
+      if (device.GetStreams(&streams))
+      {
+        CLog::Log(LOGDEBUG, "CCoreAudioHardware::ResetAudioDevices %lu streams for device %s", streams.size(), device.GetName().c_str());
+        for (AudioStreamIdList::iterator ait = streams.begin(); ait != streams.end(); ait ++)
+          ResetStream(*ait);
+      }
     }
   }
-  free(devices);
 }
 
-void CCoreAudioHardware::ResetStream(AudioStreamID stream)
+void CCoreAudioHardware::ResetStream(AudioStreamID streamId)
 {
-  // Find the streams current physical format
-  AudioObjectPropertyAddress propertyAddress; 
-  propertyAddress.mScope    = kAudioObjectPropertyScopeGlobal; 
-  propertyAddress.mElement  = kAudioObjectPropertyElementMaster;
-  propertyAddress.mSelector = kAudioStreamPropertyPhysicalFormat; 
-
-  AudioStreamBasicDescription currentFormat;
-  UInt32 paramSize = sizeof(currentFormat);
-  OSStatus ret = AudioObjectGetPropertyData(stream, &propertyAddress, 0, NULL, &paramSize, &currentFormat);
-  if (ret != noErr)
-    return;
-
-  // If it's currently AC-3/SPDIF then reset it to some mixable format
-  if (currentFormat.mFormatID == 'IAC3' ||
-      currentFormat.mFormatID == kAudioFormat60958AC3)
+  CCoreAudioStream stream;
+  stream.Open(streamId);
+  
+  AudioStreamBasicDescription desc;
+  if (stream.GetPhysicalFormat(&desc))
   {
-    AudioStreamBasicDescription *formats = CCoreAudioHardware::FormatsList(stream);
-    bool streamReset = false;
-
-    if (!formats)
-      return;
-
-    for (int i = 0; !streamReset && formats[i].mFormatID != 0; i++)
+    if (desc.mFormatID == 'IAC3' || desc.mFormatID == kAudioFormat60958AC3)
     {
-      if (formats[i].mFormatID == kAudioFormatLinearPCM)
+      CLog::Log(LOGDEBUG, "CCoreAudioHardware::ResetStream stream 0x%x is in encoded format.. setting to LPCM", (unsigned int)streamId);
+
+      StreamFormatList availableFormats;
+      if (stream.GetAvailablePhysicalFormats(&availableFormats))
       {
-        ret = AudioObjectSetPropertyData(stream, &propertyAddress, 0, NULL, sizeof(formats[i]), &(formats[i])); 
-        if (ret != noErr)
-        {
-          CLog::Log(LOGDEBUG, "CCoreAudioHardware::ResetStream: "
-            "Unable to retrieve the list of available devices. Error = %s", GetError(ret).c_str());
-          continue;
-        }
-        else
+        for (StreamFormatList::iterator fmtIt = availableFormats.begin(); fmtIt != availableFormats.end() ; fmtIt ++)
         {
-          streamReset = true;
-          Sleep(10);
+          AudioStreamRangedDescription fmtDesc = *fmtIt;
+          if (fmtDesc.mFormat.mFormatID == kAudioFormatLinearPCM)
+          {
+            AudioStreamBasicDescription newFmt = { 0 };
+            newFmt = fmtDesc.mFormat;
+
+            if (stream.SetPhysicalFormat(&newFmt))
+              break;
+          }
         }
       }
     }
-    free(formats);
   }
+
+  stream.Close(false);
 }
 
 AudioDeviceID CCoreAudioHardware::FindAudioDevice(const std::string &searchName)
index fc0f13b..95d33f6 100644 (file)
@@ -35,11 +35,11 @@ public:
   static AudioStreamBasicDescription* FormatsList(AudioStreamID stream);
   static AudioStreamID* StreamsList(AudioDeviceID device);
   static void           ResetAudioDevices();
-  static void           ResetStream(AudioStreamID stream);
+  static void           ResetStream(AudioStreamID streamId);
   static AudioDeviceID  FindAudioDevice(const std::string &deviceName);
   static AudioDeviceID  GetDefaultOutputDevice();
   static void           GetOutputDeviceName(std::string &name);
   static UInt32         GetOutputDevices(CoreAudioDeviceList *pList);
 };
 
-#endif
\ No newline at end of file
+#endif
index 39a2469..0e25987 100644 (file)
@@ -61,7 +61,7 @@ bool CCoreAudioStream::Open(AudioStreamID streamId)
 
 // TODO: Should it even be possible to change both the 
 // physical and virtual formats, since the devices do it themselves?
-void CCoreAudioStream::Close()
+void CCoreAudioStream::Close(bool restore)
 {
   if (!m_StreamId)
     return;
@@ -84,7 +84,7 @@ void CCoreAudioStream::Close()
     CLog::Log(LOGDEBUG, "CCoreAudioStream::Close: Couldn't remove property listener.");
 
   // Revert any format changes we made
-  if (m_OriginalVirtualFormat.mFormatID && m_StreamId)
+  if (restore && m_OriginalVirtualFormat.mFormatID && m_StreamId)
   {
     CLog::Log(LOGDEBUG, "CCoreAudioStream::Close: "
       "Restoring original virtual format for stream 0x%04x. (%s)",
@@ -92,7 +92,7 @@ void CCoreAudioStream::Close()
     AudioStreamBasicDescription setFormat = m_OriginalVirtualFormat;
     SetVirtualFormat(&setFormat);
   }
-  if (m_OriginalPhysicalFormat.mFormatID && m_StreamId)
+  if (restore && m_OriginalPhysicalFormat.mFormatID && m_StreamId)
   {
     CLog::Log(LOGDEBUG, "CCoreAudioStream::Close: "
       "Restoring original physical format for stream 0x%04x. (%s)",
index 1f79124..008800e 100644 (file)
@@ -38,7 +38,7 @@ public:
   virtual ~CCoreAudioStream();
   
   bool    Open(AudioStreamID streamId);
-  void    Close();
+  void    Close(bool restore = true);
   
   AudioStreamID GetId() {return m_StreamId;}
   UInt32  GetDirection();
index 25d54fc..03b2fdc 100644 (file)
@@ -278,7 +278,7 @@ OSStatus CCoreAudioUnit::RenderCallback(void *inRefCon, AudioUnitRenderActionFla
 }
 
 void CCoreAudioUnit::GetFormatDesc(AEAudioFormat format,
-  AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc)
+  AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc, bool encoded)
 {
   unsigned int bps = CAEUtil::DataFormatToBits(format.m_dataFormat);
 
@@ -303,15 +303,24 @@ void CCoreAudioUnit::GetFormatDesc(AEAudioFormat format,
       streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
       break;
     case AE_FMT_S16LE:
-      streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
+      if (encoded)
+        streamDesc->mFormatFlags |= kAudioFormatFlagIsSignedInteger;
+      else
+        streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
       break;
     case AE_FMT_S16BE:
       streamDesc->mFormatFlags |= kAudioFormatFlagIsBigEndian;
-      streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
+      if (encoded)
+        streamDesc->mFormatFlags |= kAudioFormatFlagIsSignedInteger;
+      else
+        streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
       break;
     default:
       streamDesc->mFormatFlags |= kAudioFormatFlagsNativeEndian;
-      streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
+      if (encoded)
+        streamDesc->mFormatFlags |= kAudioFormatFlagIsSignedInteger;
+      else
+        streamDesc->mFormatFlags |= kAudioFormatFlagsAudioUnitCanonical;
       break;
   }
   streamDesc->mChannelsPerFrame = format.m_channelLayout.Count();               // Number of interleaved audiochannels
index 649d2c1..d300a18 100644 (file)
@@ -50,7 +50,7 @@ public:
   virtual bool      SetMaxFramesPerSlice(UInt32 maxFrames);
   virtual bool      GetSupportedChannelLayouts(AudioChannelLayoutList* pLayouts);
   virtual void      GetFormatDesc(AEAudioFormat format, 
-                      AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc);
+                      AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc, bool encoded = false);
   virtual float     GetLatency();
   virtual bool      Stop();
   virtual bool      Start();
diff --git a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp
deleted file mode 100644 (file)
index ccf40b0..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "PiAudioAE.h"
-
-using namespace PiAudioAE;
-#include "Utils/AEUtil.h"
-
-#include "settings/Settings.h"
-#include "settings/AdvancedSettings.h"
-#include "windowing/WindowingFactory.h"
-
-#if defined(TARGET_RASPBERRY_PI)
-#include "linux/RBP.h"
-#endif
-
-CPiAudioAE::CPiAudioAE()
-: CThread("CPiAudio")
-{
-}
-
-CPiAudioAE::~CPiAudioAE()
-{
-}
-
-bool CPiAudioAE::Initialize()
-{
-  UpdateStreamSilence();
-  Create();
-  return true;
-}
-
-void CPiAudioAE::Process()
-{
-  while(!m_bStop)
-  {
-    /* thread just currently checks once a second if it's time to disable streamsilence */
-    Sleep(1000);
-
-    if (m_extSilenceTimer.IsTimePast())
-    {
-      UpdateStreamSilence(false);
-      m_extSilenceTimer.Set(XbmcThreads::EndTime::InfiniteValue);
-    }
-  }
-}
-
-void CPiAudioAE::UpdateStreamSilence()
-{
-  if (CSettings::Get().GetInt("audiooutput.streamsilence") > 0)
-    m_extSilenceTimeout = CSettings::Get().GetInt("audiooutput.streamsilence") * 60000;
-  else
-    m_extSilenceTimeout = XbmcThreads::EndTime::InfiniteValue;
-  m_extSilenceTimer.Set(m_extSilenceTimeout);
-  UpdateStreamSilence(CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI" &&
-              CSettings::Get().GetInt("audiooutput.streamsilence") != 0);
-}
-
-void CPiAudioAE::UpdateStreamSilence(bool enable)
-{
-#if defined(TARGET_RASPBERRY_PI)
-  char response[80] = "";
-  char command[80] = "";
-  sprintf(command, "force_audio hdmi %d", enable);
-  vc_gencmd(response, sizeof response, command);
-#endif
-}
-
-bool CPiAudioAE::Suspend()
-{
-  return true;
-}
-
-bool CPiAudioAE::Resume()
-{
-  return true;
-}
-
-float CPiAudioAE::GetVolume()
-{
-  return m_aeVolume;
-}
-
-void CPiAudioAE::SetVolume(const float volume)
-{
-  m_aeVolume = std::max( 0.0f, std::min(1.0f, volume));
-}
-
-void CPiAudioAE::SetMute(const bool enabled)
-{
-  m_aeMuted = enabled;
-}
-
-bool CPiAudioAE::IsMuted()
-{
-  return m_aeMuted;
-}
-
-IAEStream *CPiAudioAE::MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, unsigned int encodedSampleRate, CAEChannelInfo channelLayout, unsigned int options)
-{
-  return NULL;
-}
-
-IAEStream *CPiAudioAE::FreeStream(IAEStream *stream)
-{
-  // will retrigger the streamsilence timer
-  UpdateStreamSilence();
-  return NULL;
-}
-
-IAESound *CPiAudioAE::MakeSound(const std::string& file)
-{
-  return NULL;
-}
-
-void CPiAudioAE::FreeSound(IAESound *sound)
-{
-}
-
-bool CPiAudioAE::SupportsRaw(AEDataFormat format)
-{
-  bool supported = false;
-#if defined(TARGET_RASPBERRY_PI)
-  if (CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI")
-  {
-    if (!CSettings::Get().GetBool("audiooutput.dualaudio"))
-    {
-      DllBcmHost m_DllBcmHost;
-      m_DllBcmHost.Load();
-      if (format == AE_FMT_AC3 && CSettings::Get().GetBool("audiooutput.ac3passthrough") &&
-          m_DllBcmHost.vc_tv_hdmi_audio_supported(EDID_AudioFormat_eAC3, 2, EDID_AudioSampleRate_e44KHz, EDID_AudioSampleSize_16bit ) == 0)
-        supported = true;
-      if (format == AE_FMT_DTS && CSettings::Get().GetBool("audiooutput.dtspassthrough") &&
-          m_DllBcmHost.vc_tv_hdmi_audio_supported(EDID_AudioFormat_eDTS, 2, EDID_AudioSampleRate_e44KHz, EDID_AudioSampleSize_16bit ) == 0)
-        supported = true;
-      m_DllBcmHost.Unload();
-    }
-  }
-#endif
-  return supported;
-}
-
-bool CPiAudioAE::SupportsSilenceTimeout()
-{
-  return true;
-}
-
-void CPiAudioAE::OnSettingsChange(const std::string& setting)
-{
-  if (setting == "audiooutput.streamsilence" || setting == "audiooutput.audiodevice")
-    UpdateStreamSilence();
-}
-
-void CPiAudioAE::EnumerateOutputDevices(AEDeviceList &devices, bool passthrough)
-{
-   if (!passthrough)
-   {
-     devices.push_back(AEDevice("Analogue", "Analogue"));
-     devices.push_back(AEDevice("HDMI", "HDMI"));
-   }
-}
-
-std::string CPiAudioAE::GetDefaultDevice(bool passthrough)
-{
-  return "HDMI";
-}
-
-bool CPiAudioAE::IsSettingVisible(const std::string &settingId)
-{
-  if (settingId == "audiooutput.samplerate")
-    return true;
-
-  if (CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI")
-  {
-    if (settingId == "audiooutput.passthrough")
-      return true;
-    if (settingId == "audiooutput.dtspassthrough")
-      return true;
-    if (settingId == "audiooutput.ac3passthrough")
-      return true;
-    if (settingId == "audiooutput.channels")
-      return true;
-    if (settingId == "audiooutput.dualaudio")
-      return true;
-    if (settingId == "audiooutput.streamsilence")
-      return true;
-  }
-  return false;
-}
diff --git a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h
deleted file mode 100644 (file)
index 944fba8..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#include "threads/Thread.h"
-
-#include "Interfaces/AEStream.h"
-#include "Interfaces/AESound.h"
-#include "AEFactory.h"
-
-namespace PiAudioAE
-{
-
-class CPiAudioAE : public IAE, public CThread
-{
-protected:
-  friend class ::CAEFactory;
-  CPiAudioAE();
-  virtual ~CPiAudioAE();
-  virtual bool  Initialize();
-  virtual void Process();
-
-public:
-  virtual bool   Suspend();
-  virtual bool   Resume();
-  virtual void   OnSettingsChange(const std::string& setting);
-
-  virtual float GetVolume();
-  virtual void  SetVolume(const float volume);
-  virtual void  SetMute(const bool enabled);
-  virtual bool  IsMuted();
-  virtual void  SetSoundMode(const int mode) {}
-
-  /* returns a new stream for data in the specified format */
-  virtual IAEStream *MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, unsigned int encodedSampleRate, CAEChannelInfo channelLayout, unsigned int options = 0);
-  virtual IAEStream *FreeStream(IAEStream *stream);
-
-  /* returns a new sound object */
-  virtual IAESound *MakeSound(const std::string& file);
-  virtual void      FreeSound(IAESound *sound);
-
-  virtual void GarbageCollect() {};
-  virtual void EnumerateOutputDevices(AEDeviceList &devices, bool passthrough);
-  virtual std::string GetDefaultDevice(bool passthrough);
-  virtual bool IsSettingVisible(const std::string &settingId);
-
-  virtual bool SupportsRaw(AEDataFormat format);
-  virtual bool SupportsSilenceTimeout();
-
-  virtual void OnLostDevice() {}
-  virtual void OnResetDevice() {}
-
-protected:
-  void UpdateStreamSilence();
-  void UpdateStreamSilence(bool enable);
-  // polled via the interface
-  float m_aeVolume;
-  bool m_aeMuted;
-  int m_extSilenceTimeout;
-  XbmcThreads::EndTime m_extSilenceTimer;
-};
-};
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.cpp b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.cpp
deleted file mode 100644 (file)
index 5138a9b..0000000
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#ifdef HAS_PULSEAUDIO
-
-#include "PulseAE.h"
-#include "PulseAEStream.h"
-#include "PulseAESound.h"
-#include "Application.h"
-#include "threads/SingleLock.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "settings/Settings.h"
-#include <pulse/pulseaudio.h>
-#include <pulse/simple.h>
-#include "guilib/LocalizeStrings.h"
-
-/* Static helpers */
-static const char *ContextStateToString(pa_context_state s)
-{
-  switch (s)
-  {
-    case PA_CONTEXT_UNCONNECTED:
-      return "unconnected";
-    case PA_CONTEXT_CONNECTING:
-      return "connecting";
-    case PA_CONTEXT_AUTHORIZING:
-      return "authorizing";
-    case PA_CONTEXT_SETTING_NAME:
-      return "setting name";
-    case PA_CONTEXT_READY:
-      return "ready";
-    case PA_CONTEXT_FAILED:
-      return "failed";
-    case PA_CONTEXT_TERMINATED:
-      return "terminated";
-    default:
-      return "none";
-  }
-}
-
-#if 0
-static const char *StreamStateToString(pa_stream_state s)
-{
-  switch(s)
-  {
-    case PA_STREAM_UNCONNECTED:
-      return "unconnected";
-    case PA_STREAM_CREATING:
-      return "creating";
-    case PA_STREAM_READY:
-      return "ready";
-    case PA_STREAM_FAILED:
-      return "failed";
-    case PA_STREAM_TERMINATED:
-      return "terminated";
-    default:
-      return "none";
-  }
-}
-#endif
-
-CPulseAE::CPulseAE()
-{
-  m_Context = NULL;
-  m_MainLoop = NULL;
-  m_muted = false;
-  m_Volume = 0.0f;
-}
-
-CPulseAE::~CPulseAE()
-{
-  if (m_Context)
-  {
-    pa_context_disconnect(m_Context);
-    pa_context_unref(m_Context);
-    m_Context = NULL;
-  }
-
-  if (m_MainLoop)
-  {
-    pa_threaded_mainloop_stop(m_MainLoop);
-    pa_threaded_mainloop_free(m_MainLoop);
-  }
-
-}
-
-bool CPulseAE::CanInit()
-{
-  pa_simple *s;
-  pa_sample_spec ss;
-  ss.format = PA_SAMPLE_S16NE;
-  ss.channels = 2;
-  ss.rate = 48000;
-  //create a pulse client, if this returns NULL, pulseaudio isn't running
-  s = pa_simple_new(NULL, "XBMC-test", PA_STREAM_PLAYBACK, NULL,"test", &ss, NULL, NULL, NULL);
-  if (s)
-  {
-    pa_simple_free(s);
-    return true;
-  }
-  else
-  {
-    return false;
-  }
-}
-
-bool CPulseAE::Initialize()
-{
-  m_Volume = g_application.GetVolume(false);
-
-  if ((m_MainLoop = pa_threaded_mainloop_new()) == NULL)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Failed to allocate main loop");
-    return false;
-  }
-
-  if ((m_Context = pa_context_new(pa_threaded_mainloop_get_api(m_MainLoop), "XBMC")) == NULL)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Failed to allocate context");
-    return false;
-  }
-
-  pa_context_set_state_callback(m_Context, ContextStateCallback, m_MainLoop);
-
-  if (pa_context_connect(m_Context, NULL, (pa_context_flags_t)0, NULL) < 0)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Failed to connect context");
-    return false;
-  }
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-  if (pa_threaded_mainloop_start(m_MainLoop) < 0)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Failed to start MainLoop");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    return false;
-  }
-
-  /* Wait until the context is ready */
-  do
-  {
-    pa_threaded_mainloop_wait(m_MainLoop);
-    CLog::Log(LOGDEBUG, "PulseAudio: Context %s", ContextStateToString(pa_context_get_state(m_Context)));
-  }
-  while (pa_context_get_state(m_Context) != PA_CONTEXT_READY && pa_context_get_state(m_Context) != PA_CONTEXT_FAILED);
-
-  if (pa_context_get_state(m_Context) == PA_CONTEXT_FAILED)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Waited for the Context but it failed");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    return false;
-  }
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-  return true;
-}
-
-bool CPulseAE::Suspend()
-{
-  /* TODO: add implementation here. See SoftAE for example. Code should */
-  /* release exclusive or hog mode and sleep each time packets would    */
-  /* normally be written to sink if m_isSuspended = true. False return  */
-  /* here will simply generate a debug log entry in externalplayer.cpp  */
-
-  return false;
-}
-
-bool CPulseAE::IsSuspended()
-{
-  return false;
-}
-
-bool CPulseAE::Resume()
-{
-  /* TODO: see comments in Suspend() above */
-
-  return false;
-}
-
-void CPulseAE::OnSettingsChange(const std::string& setting)
-{
-}
-
-float CPulseAE::GetVolume()
-{
-  return m_Volume;
-}
-
-void CPulseAE::SetVolume(float volume)
-{
-  CSingleLock lock(m_lock);
-  m_Volume = volume;
-  std::list<CPulseAEStream*>::iterator itt;
-  for (itt = m_streams.begin(); itt != m_streams.end(); ++itt)
-    (*itt)->UpdateVolume(volume);
-}
-
-IAEStream *CPulseAE::MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, unsigned int encodedSampleRate,CAEChannelInfo channelLayout, unsigned int options)
-{
-  CPulseAEStream *st = new CPulseAEStream(m_Context, m_MainLoop, dataFormat, sampleRate, channelLayout, options);
-
-  CSingleLock lock(m_lock);
-  m_streams.push_back(st);
-  return st;
-}
-
-void CPulseAE::RemoveStream(IAEStream *stream)
-{
-  CSingleLock lock(m_lock);
-  std::list<CPulseAEStream*>::iterator itt;
-
-  m_streams.remove((CPulseAEStream *)stream);
-
-  for (itt = m_streams.begin(); itt != m_streams.end(); ++itt)
-  {
-    if (*itt == stream)
-    {
-      m_streams.erase(itt);
-      return;
-    }
-  }
-}
-
-IAEStream *CPulseAE::FreeStream(IAEStream *stream)
-{
-  RemoveStream(stream);
-
-  CPulseAEStream *istream = (CPulseAEStream *)stream;
-
-  delete istream;
-
-  return NULL;
-}
-
-IAESound *CPulseAE::MakeSound(const std::string& file)
-{
-  CSingleLock lock(m_lock);
-
-  CPulseAESound *sound = new CPulseAESound(file, m_Context, m_MainLoop);
-  if (!sound->Initialize())
-  {
-    delete sound;
-    return NULL;
-  }
-
-  m_sounds.push_back(sound);
-  return sound;
-}
-
-void CPulseAE::FreeSound(IAESound *sound)
-{
-  if (!sound)
-    return;
-
-  sound->Stop();
-  CSingleLock lock(m_lock);
-  for (std::list<CPulseAESound*>::iterator itt = m_sounds.begin(); itt != m_sounds.end(); ++itt)
-    if (*itt == sound)
-    {
-      m_sounds.erase(itt);
-      break;
-    }
-
-  delete (CPulseAESound*)sound;
-}
-
-void CPulseAE::GarbageCollect()
-{
-  CSingleLock lock(m_lock);
-  std::list<CPulseAEStream*>::iterator itt;
-  for (itt = m_streams.begin(); itt != m_streams.end();)
-  {
-    if ((*itt)->IsDestroyed())
-    {
-      delete (*itt);
-      itt = m_streams.erase(itt);
-      continue;
-    }
-    ++itt;
-  }
-}
-
-struct SinkInfoStruct
-{
-  bool passthrough;
-  AEDeviceList *list;
-  pa_threaded_mainloop *mainloop;
-};
-
-static bool WaitForOperation(pa_operation *op, pa_threaded_mainloop *mainloop, const char *LogEntry = "")
-{
-  if (op == NULL)
-    return false;
-
-  bool sucess = true;
-
-  while (pa_operation_get_state(op) == PA_OPERATION_RUNNING)
-    pa_threaded_mainloop_wait(mainloop);
-
-  if (pa_operation_get_state(op) != PA_OPERATION_DONE)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: %s Operation failed", LogEntry);
-    sucess = false;
-  }
-
-  pa_operation_unref(op);
-  return sucess;
-}
-
-static void SinkInfo(pa_context *c, const pa_sink_info *i, int eol, void *userdata)
-{
-  SinkInfoStruct *sinkStruct = (SinkInfoStruct *)userdata;
-
-  if (i && i->name)
-  {
-    bool       add  = false;
-    if(sinkStruct->passthrough)
-    {
-#if PA_CHECK_VERSION(1,0,0)
-      for(int idx = 0; idx < i->n_formats; ++idx)
-      {
-        if(!pa_format_info_is_pcm(i->formats[idx]))
-        {
-          add = true;
-          break;
-        }
-      }
-#endif
-    }
-    else
-      add = true;
-
-    if (add)
-    {
-      CStdString desc = StringUtils::Format("%s (PulseAudio)", i->description);
-      CStdString sink = StringUtils::Format("pulse:%s@default", i->name);
-      sinkStruct->list->push_back(AEDevice(desc, sink));
-      CLog::Log(LOGDEBUG, "PulseAudio: Found %s with devicestring %s", desc.c_str(), sink.c_str());
-    }
-  }
-
-  pa_threaded_mainloop_signal(sinkStruct->mainloop, 0);
-}
-
-void CPulseAE::EnumerateOutputDevices(AEDeviceList &devices, bool passthrough)
-{
-  if (!m_MainLoop || ! m_Context)
-    return;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  SinkInfoStruct sinkStruct;
-  sinkStruct.passthrough = passthrough;
-  sinkStruct.mainloop = m_MainLoop;
-  sinkStruct.list = &devices;
-  CStdString def = StringUtils::Format("%s (PulseAudio)",g_localizeStrings.Get(409).c_str());
-  devices.push_back(AEDevice(def, "pulse:default@default"));
-  WaitForOperation(pa_context_get_sink_info_list(m_Context,
-                   SinkInfo, &sinkStruct), m_MainLoop, "EnumerateAudioSinks");
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-}
-
-void CPulseAE::ContextStateCallback(pa_context *c, void *userdata)
-{
-  pa_threaded_mainloop *m = (pa_threaded_mainloop *)userdata;
-  switch (pa_context_get_state(c))
-  {
-    case PA_CONTEXT_READY:
-    case PA_CONTEXT_TERMINATED:
-    case PA_CONTEXT_UNCONNECTED:
-    case PA_CONTEXT_CONNECTING:
-    case PA_CONTEXT_AUTHORIZING:
-    case PA_CONTEXT_SETTING_NAME:
-    case PA_CONTEXT_FAILED:
-      pa_threaded_mainloop_signal(m, 0);
-      break;
-  }
-}
-
-void CPulseAE::SetMute(const bool enabled)
-{
-  CSingleLock lock(m_lock);
-  std::list<CPulseAEStream*>::iterator itt;
-  for (itt = m_streams.begin(); itt != m_streams.end(); ++itt)
-    (*itt)->SetMute(enabled);
-
-  m_muted = enabled;
-}
-
-#endif
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.h b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.h
deleted file mode 100644 (file)
index 3daaf32..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#ifdef HAS_PULSEAUDIO
-
-#include "Interfaces/AE.h"
-#include "PulseAEStream.h"
-#include "PulseAESound.h"
-#include "threads/CriticalSection.h"
-#include <list>
-
-struct pa_context;
-struct pa_threaded_mainloop;
-struct pa_stream;
-
-class CPulseAEStream;
-class CPulseAESound;
-class CPulseAE : public IAE
-{
-protected:
-  friend class CAEFactory;
-  CPulseAE();
-  virtual ~CPulseAE();
-
-public:
-  virtual bool  CanInit();
-  virtual bool  Initialize      ();
-  virtual void  OnSettingsChange(const std::string& setting);
-
-  virtual bool  Suspend(); /* Suspend output and de-initialize exclusive sink for external players and power savings */
-
-  virtual bool  IsSuspended();
-  virtual bool  Resume();  /* Resume ouput and re-initialize sink after Suspend() above */
-
-  virtual float GetVolume();
-  virtual void  SetVolume(float volume);
-
-  /* returns a new stream for data in the specified format */
-  virtual IAEStream *MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, unsigned int encodedSampleRate, CAEChannelInfo channelLayout, unsigned int options = 0);
-  virtual IAEStream *FreeStream(IAEStream *stream);
-  void RemoveStream(IAEStream *stream);
-
-  /* returns a new sound object */
-  virtual IAESound *MakeSound(const std::string& file);
-  virtual void      FreeSound(IAESound *sound);
-
-  /* free's sounds that have expired */
-  virtual void GarbageCollect();
-
-  virtual void SetMute(const bool enabled);
-  virtual bool IsMuted() { return m_muted; }
-  virtual void SetSoundMode(const int mode) {}
-#if PA_CHECK_VERSION(1,0,0)
-  virtual bool SupportsRaw() { return true; }
-#endif
-
-  virtual void EnumerateOutputDevices(AEDeviceList &devices, bool passthrough);
-private:
-  CCriticalSection m_lock;
-  std::list<CPulseAEStream*> m_streams;
-  std::list<CPulseAESound* > m_sounds;
-
-  static void ContextStateCallback(pa_context *c, void *userdata);
-
-  pa_context *m_Context;
-  pa_threaded_mainloop *m_MainLoop;
-  float m_Volume;
-  bool m_muted;
-};
-
-#endif
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.cpp b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.cpp
deleted file mode 100644 (file)
index 37b3754..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#ifdef HAS_PULSEAUDIO
-
-#include "PulseAESound.h"
-#include "AEFactory.h"
-#include "utils/log.h"
-#include "MathUtils.h"
-#include "StringUtils.h"
-
-CPulseAESound::CPulseAESound(const std::string &filename, pa_context *context, pa_threaded_mainloop *mainLoop) :
-  IAESound         (filename),
-  m_pulseName      (StringUtils::CreateUUID()),
-  m_filename       (filename),
-  m_dataSent       (0       ),
-  m_context        (context ),
-  m_mainLoop       (mainLoop),
-  m_stream         (NULL    ),
-  m_op             (NULL    ),
-  m_maxVolume      (0.0f    ),
-  m_volume         (0.0f    )  
-{
-  m_wavLoader.Load(filename);
-}
-
-CPulseAESound::~CPulseAESound()
-{
-  DeInitialize();
-}
-
-bool CPulseAESound::Initialize()
-{
-  /* we dont re-init the wav loader in PA as PA handles the samplerate */
-  if (!m_wavLoader.IsValid())
-    return false;
-
-  m_sampleSpec.format   = PA_SAMPLE_FLOAT32NE;
-  m_sampleSpec.rate     = m_wavLoader.GetSampleRate();
-  m_sampleSpec.channels = m_wavLoader.GetChannelLayout().Count();
-
-  if (!pa_sample_spec_valid(&m_sampleSpec))
-  {
-    CLog::Log(LOGERROR, "CPulseAESound::Initialize - Invalid sample spec");
-    return false;
-  }
-
-  struct pa_channel_map map;
-  map.channels = m_sampleSpec.channels;
-  switch (map.channels)
-  {
-    case 1:
-      map.map[0] = PA_CHANNEL_POSITION_MONO;
-      break;
-
-    case 2:
-      map.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
-      map.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
-      break;
-
-    default:
-      CLog::Log(LOGERROR, "CPulseAESound::Initialize - We do not yet support multichannel sounds");
-      return false;
-  }
-
-  m_maxVolume     = CAEFactory::GetEngine()->GetVolume();
-  m_volume        = 1.0f;
-  pa_volume_t paVolume = pa_sw_volume_from_linear((double)(m_volume * m_maxVolume));
-  pa_cvolume_set(&m_chVolume, m_sampleSpec.channels, paVolume);
-
-  pa_threaded_mainloop_lock(m_mainLoop);
-  if ((m_stream = pa_stream_new(m_context, m_pulseName.c_str(), &m_sampleSpec, &map)) == NULL)
-  {
-    CLog::Log(LOGERROR, "CPulseAESound::Initialize - Could not create a stream");
-    pa_threaded_mainloop_unlock(m_mainLoop);
-    return false;
-  }
-
-  pa_stream_set_state_callback(m_stream, CPulseAESound::StreamStateCallback, this);
-  pa_stream_set_write_callback(m_stream, CPulseAESound::StreamWriteCallback, this);
-
-  if (pa_stream_connect_upload(m_stream, m_wavLoader.GetFrameCount() * pa_frame_size(&m_sampleSpec)) != 0)
-  {
-    CLog::Log(LOGERROR, "CPulseAESound::Initialize - Could not initialize the stream");
-    pa_stream_disconnect(m_stream);
-    m_stream = NULL;
-    pa_threaded_mainloop_unlock(m_mainLoop);
-    return false;
-  }
-
-  /* check if the stream failed */
-  if (pa_stream_get_state(m_stream) == PA_STREAM_FAILED)
-  {
-    CLog::Log(LOGERROR, "CPulseAESound::Initialize - Waited for the stream but it failed");
-    pa_stream_disconnect(m_stream);
-    m_stream = NULL;
-    pa_threaded_mainloop_unlock(m_mainLoop);
-    return false;
-  }
-
-  pa_threaded_mainloop_unlock(m_mainLoop);
-  return true;
-}
-
-void CPulseAESound::DeInitialize()
-{
-  pa_threaded_mainloop_lock(m_mainLoop);
-  pa_operation *op = pa_context_remove_sample(m_context, m_pulseName.c_str(), NULL, NULL);
-  if (op)
-    pa_operation_unref(op);
-  pa_threaded_mainloop_unlock(m_mainLoop);
-
-  m_wavLoader.DeInitialize();
-}
-
-void CPulseAESound::Play()
-{
-  pa_threaded_mainloop_lock(m_mainLoop);
-  /* we only keep the most recent operation as it is the only one needed for IsPlaying to function */
-  if (m_op)
-    pa_operation_unref(m_op);
-  m_op = pa_context_play_sample(m_context, m_pulseName.c_str(), NULL, PA_VOLUME_INVALID, NULL, NULL);
-  pa_threaded_mainloop_unlock(m_mainLoop);
-}
-
-void CPulseAESound::Stop()
-{
-  if (m_op)
-  {
-    pa_operation_cancel(m_op);
-    pa_operation_unref(m_op);
-    m_op = NULL;
-  }
-}
-
-bool CPulseAESound::IsPlaying()
-{
-  if (m_op)
-  {
-    if (pa_operation_get_state(m_op) == PA_OPERATION_RUNNING)
-      return true;
-
-    pa_operation_unref(m_op);
-    m_op = NULL;
-  }
-
-  return false;
-}
-
-void CPulseAESound::SetVolume(float volume)
-{
-}
-
-float CPulseAESound::GetVolume()
-{
-  return 1.0f;
-}
-
-void CPulseAESound::StreamStateCallback(pa_stream *s, void *userdata)
-{
-  CPulseAESound *sound = (CPulseAESound*)userdata;
-  pa_stream_state_t state = pa_stream_get_state(s);
-
-  switch (state)
-  {
-    case PA_STREAM_FAILED:
-      CLog::Log(LOGERROR, "CPulseAESound::StreamStateCallback - %s", pa_strerror(pa_context_errno(sound->m_context)));
-
-    case PA_STREAM_UNCONNECTED:
-    case PA_STREAM_CREATING:
-    case PA_STREAM_READY:
-    case PA_STREAM_TERMINATED:
-      pa_threaded_mainloop_signal(sound->m_mainLoop, 0);
-      break;
-  }
-}
-
-void CPulseAESound::StreamWriteCallback(pa_stream *s, size_t length, void *userdata)
-{
-  CPulseAESound *sound = (CPulseAESound*)userdata;
-  sound->Upload(length);
-}
-
-void CPulseAESound::Upload(size_t length)
-{
-  float *samples = m_wavLoader.GetSamples();
-  size_t left    = (m_wavLoader.GetSampleCount() * sizeof(float)) - m_dataSent;
-  size_t send    = std::min(length, left);
-
-  if (pa_stream_write(m_stream, samples + m_dataSent, send, 0, 0, PA_SEEK_RELATIVE) == 0)
-    m_dataSent += send;
-
-  /* if we have no more data disable the callback */
-  if (left == send)
-  {
-    pa_stream_set_write_callback(m_stream, NULL, NULL);
-    if (pa_stream_finish_upload(m_stream) != 0)
-    {
-      CLog::Log(LOGERROR, "CPulseAESound::Upload - Error occured");
-      /* FIXME: Better error handling */
-    }
-
-    /* disconnect the stream as we dont need it anymore */
-    pa_stream_disconnect(m_stream);
-    m_stream = NULL;
-  }
-}
-
-#endif
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.h b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.h
deleted file mode 100644 (file)
index 705e535..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#ifdef HAS_PULSEAUDIO
-
-#include "Interfaces/AESound.h"
-#include "Utils/AEWAVLoader.h"
-#include <pulse/pulseaudio.h>
-
-class CPulseAESound : public IAESound
-{
-public:
-  /* this should NEVER be called directly, use AE.GetSound */
-  CPulseAESound(const std::string &filename, pa_context *context, pa_threaded_mainloop *mainLoop);
-  virtual ~CPulseAESound();
-
-  virtual void DeInitialize();
-  virtual bool Initialize();
-
-  virtual void Play();
-  virtual void Stop();
-  virtual bool IsPlaying();
-
-  virtual void  SetVolume(float volume);
-  virtual float GetVolume();
-private:
-  static void StreamStateCallback(pa_stream *s, void *userdata);
-  static void StreamWriteCallback(pa_stream *s, size_t length, void *userdata);
-  void Upload(size_t length);
-
-  std::string    m_pulseName;
-  std::string    m_filename;
-  CAEWAVLoader  m_wavLoader;
-  size_t        m_dataSent;
-
-  pa_context           *m_context;
-  pa_threaded_mainloop *m_mainLoop;
-  pa_stream            *m_stream;
-  pa_sample_spec        m_sampleSpec;
-  pa_cvolume            m_chVolume;
-  pa_operation         *m_op;
-
-  float m_maxVolume, m_volume;
-};
-
-#endif
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.cpp b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.cpp
deleted file mode 100644 (file)
index e1e1903..0000000
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-#ifdef HAS_PULSEAUDIO
-
-#include "PulseAEStream.h"
-#include "AEFactory.h"
-#include "Utils/AEUtil.h"
-#include "utils/log.h"
-#include "utils/MathUtils.h"
-#include "threads/SingleLock.h"
-
-static const char *StreamStateToString(pa_stream_state s)
-{
-  switch(s)
-  {
-    case PA_STREAM_UNCONNECTED:
-      return "unconnected";
-    case PA_STREAM_CREATING:
-      return "creating";
-    case PA_STREAM_READY:
-      return "ready";
-    case PA_STREAM_FAILED:
-      return "failed";
-    case PA_STREAM_TERMINATED:
-      return "terminated";
-    default:
-      return "none";
-  }
-}
-
-CPulseAEStream::CPulseAEStream(pa_context *context, pa_threaded_mainloop *mainLoop, enum AEDataFormat format, unsigned int sampleRate, CAEChannelInfo channelLayout, unsigned int options) : m_fader(this)
-{
-  ASSERT(channelLayout.Count());
-  m_Destroyed = false;
-  m_Initialized = false;
-  m_Paused = false;
-  m_ResumeCallback = false;
-
-  m_Stream = NULL;
-  m_Context = context;
-  m_MainLoop = mainLoop;
-
-  m_format = format;
-  m_sampleRate = sampleRate;
-  m_channelLayout = channelLayout;
-  m_options = options;
-
-  m_DrainOperation = NULL;
-  m_slave = NULL;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  m_SampleSpec.channels = channelLayout.Count();
-  m_SampleSpec.rate = m_sampleRate;
-
-  switch (m_format)
-  {
-    case AE_FMT_U8    : m_SampleSpec.format = PA_SAMPLE_U8; break;
-    case AE_FMT_S16NE : m_SampleSpec.format = PA_SAMPLE_S16NE; break;
-    case AE_FMT_S16LE : m_SampleSpec.format = PA_SAMPLE_S16LE; break;
-    case AE_FMT_S16BE : m_SampleSpec.format = PA_SAMPLE_S16BE; break;
-    case AE_FMT_S24NE3: m_SampleSpec.format = PA_SAMPLE_S24NE; break;
-    case AE_FMT_S24NE4: m_SampleSpec.format = PA_SAMPLE_S24_32NE; break;
-    case AE_FMT_S32NE : m_SampleSpec.format = PA_SAMPLE_S32NE; break;
-    case AE_FMT_S32LE : m_SampleSpec.format = PA_SAMPLE_S32LE; break;
-    case AE_FMT_S32BE : m_SampleSpec.format = PA_SAMPLE_S32BE; break;
-    case AE_FMT_FLOAT : m_SampleSpec.format = PA_SAMPLE_FLOAT32NE; break;
-#if PA_CHECK_VERSION(1,0,0)
-    case AE_FMT_DTS   :
-    case AE_FMT_EAC3  :
-    case AE_FMT_AC3   : m_SampleSpec.format = PA_SAMPLE_S16NE; break;
-#endif
-
-    default:
-      CLog::Log(LOGERROR, "PulseAudio: Invalid format %i", format);
-      pa_threaded_mainloop_unlock(m_MainLoop);
-      m_format = AE_FMT_INVALID;
-      return;
-  }
-
-  if (!pa_sample_spec_valid(&m_SampleSpec))
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Invalid sample spec");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    Destroy();
-    return /*false*/;
-  }
-
-  m_frameSize = pa_frame_size(&m_SampleSpec);
-
-  struct pa_channel_map map;
-  map.channels = m_channelLayout.Count();
-
-  for (unsigned int ch = 0; ch < m_channelLayout.Count(); ++ch)
-    switch(m_channelLayout[ch])
-    {
-      case AE_CH_NULL: break;
-      case AE_CH_MAX : break;
-      case AE_CH_RAW : break;
-      case AE_CH_FL  : map.map[ch] = PA_CHANNEL_POSITION_FRONT_LEFT           ; break;
-      case AE_CH_FR  : map.map[ch] = PA_CHANNEL_POSITION_FRONT_RIGHT          ; break;
-      case AE_CH_FC  : map.map[ch] = PA_CHANNEL_POSITION_FRONT_CENTER         ; break;
-      case AE_CH_BC  : map.map[ch] = PA_CHANNEL_POSITION_REAR_CENTER          ; break;
-      case AE_CH_BL  : map.map[ch] = PA_CHANNEL_POSITION_REAR_LEFT            ; break;
-      case AE_CH_BR  : map.map[ch] = PA_CHANNEL_POSITION_REAR_RIGHT           ; break;
-      case AE_CH_LFE : map.map[ch] = PA_CHANNEL_POSITION_LFE                  ; break;
-      case AE_CH_FLOC: map.map[ch] = PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER ; break;
-      case AE_CH_FROC: map.map[ch] = PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER; break;
-      case AE_CH_SL  : map.map[ch] = PA_CHANNEL_POSITION_SIDE_LEFT            ; break;
-      case AE_CH_SR  : map.map[ch] = PA_CHANNEL_POSITION_SIDE_RIGHT           ; break;
-      case AE_CH_TC  : map.map[ch] = PA_CHANNEL_POSITION_TOP_CENTER           ; break;
-      case AE_CH_TFL : map.map[ch] = PA_CHANNEL_POSITION_TOP_FRONT_LEFT       ; break;
-      case AE_CH_TFR : map.map[ch] = PA_CHANNEL_POSITION_TOP_FRONT_RIGHT      ; break;
-      case AE_CH_TFC : map.map[ch] = PA_CHANNEL_POSITION_TOP_CENTER           ; break;
-      case AE_CH_TBL : map.map[ch] = PA_CHANNEL_POSITION_TOP_REAR_LEFT        ; break;
-      case AE_CH_TBR : map.map[ch] = PA_CHANNEL_POSITION_TOP_REAR_RIGHT       ; break;
-      case AE_CH_TBC : map.map[ch] = PA_CHANNEL_POSITION_TOP_REAR_CENTER      ; break;
-      default: break;
-    }
-
-  m_MaxVolume     = CAEFactory::GetEngine()->GetVolume();
-  m_Volume        = 1.0f;
-  pa_volume_t paVolume = pa_sw_volume_from_linear((double)(m_Volume * m_MaxVolume));
-  pa_cvolume_set(&m_ChVolume, m_SampleSpec.channels, paVolume);
-
-#if PA_CHECK_VERSION(1,0,0)
-  pa_format_info *info[1];
-  info[0] = pa_format_info_new();
-  switch(m_format)
-  {
-    case AE_FMT_DTS : info[0]->encoding = PA_ENCODING_DTS_IEC61937 ; break;
-    case AE_FMT_EAC3: info[0]->encoding = PA_ENCODING_EAC3_IEC61937; break;
-    case AE_FMT_AC3 : info[0]->encoding = PA_ENCODING_AC3_IEC61937 ; break;
-    default:          info[0]->encoding = PA_ENCODING_PCM          ; break;
-  }
-  pa_format_info_set_rate         (info[0], m_SampleSpec.rate);
-  pa_format_info_set_channels     (info[0], m_SampleSpec.channels);
-  pa_format_info_set_channel_map  (info[0], &map);
-  pa_format_info_set_sample_format(info[0], m_SampleSpec.format);
-  m_Stream = pa_stream_new_extended(m_Context, "audio stream", info, 1, NULL);
-  pa_format_info_free(info[0]);
-#else
-  m_Stream = pa_stream_new(m_Context, "audio stream", &m_SampleSpec, &map);
-#endif
-
-  if (m_Stream == NULL)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Could not create a stream");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    Destroy();
-    return /*false*/;
-  }
-
-  pa_stream_set_state_callback(m_Stream, CPulseAEStream::StreamStateCallback, this);
-  pa_stream_set_write_callback(m_Stream, CPulseAEStream::StreamRequestCallback, this);
-  pa_stream_set_latency_update_callback(m_Stream, CPulseAEStream::StreamLatencyUpdateCallback, this);
-  pa_stream_set_underflow_callback(m_Stream, CPulseAEStream::StreamUnderflowCallback, this);
-
-  int flags = PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE;
-  if (options && AESTREAM_FORCE_RESAMPLE)
-    flags |= PA_STREAM_VARIABLE_RATE;
-
-  if (pa_stream_connect_playback(m_Stream, NULL, NULL, (pa_stream_flags)flags, &m_ChVolume, NULL) < 0)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Failed to connect stream to output");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    Destroy();
-    return /*false*/;
-  }
-
-  /* Wait until the stream is ready */
-  do
-  {
-    pa_threaded_mainloop_wait(m_MainLoop);
-    CLog::Log(LOGDEBUG, "PulseAudio: Stream %s", StreamStateToString(pa_stream_get_state(m_Stream)));
-  }
-  while (pa_stream_get_state(m_Stream) != PA_STREAM_READY && pa_stream_get_state(m_Stream) != PA_STREAM_FAILED);
-
-  if (pa_stream_get_state(m_Stream) == PA_STREAM_FAILED)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: Waited for the stream but it failed");
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    Destroy();
-    return /*false*/;
-  }
-
-  const pa_buffer_attr *streamBuffer;
-  streamBuffer = pa_stream_get_buffer_attr(m_Stream);
-  m_cacheSize = streamBuffer->maxlength;
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-
-  m_Initialized = true;
-
-  CLog::Log(LOGINFO, "PulseAEStream::Initialized");
-  CLog::Log(LOGINFO, "  Sample Rate   : %d", m_sampleRate);
-  CLog::Log(LOGINFO, "  Sample Format : %s", CAEUtil::DataFormatToStr(m_format));
-  CLog::Log(LOGINFO, "  Channel Count : %d", m_channelLayout.Count());
-  CLog::Log(LOGINFO, "  Channel Layout: %s", ((std::string)m_channelLayout).c_str());
-  CLog::Log(LOGINFO, "  Frame Size    : %d", m_frameSize);
-  CLog::Log(LOGINFO, "  Cache Size    : %d", m_cacheSize);
-
-  Resume();
-
-  return /*true*/;
-}
-
-CPulseAEStream::~CPulseAEStream()
-{
-  Destroy();
-}
-
-/*
-  this method may be called inside the pulse main loop,
-  so be VERY careful with locking
-*/
-void CPulseAEStream::Destroy()
-{
-  if (!m_Initialized)
-    return;
-
-  if (m_Destroyed)
-    return;
-
-  m_fader.StopThread(true);
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  if (m_DrainOperation)
-  {
-    pa_operation_cancel(m_DrainOperation);
-    pa_operation_unref(m_DrainOperation);
-    m_DrainOperation = NULL;
-  }
-
-  if (m_Stream)
-  {
-    pa_stream_set_state_callback(m_Stream, NULL, NULL);
-    pa_stream_set_write_callback(m_Stream, NULL, NULL);
-    pa_stream_set_latency_update_callback(m_Stream, NULL, NULL);
-    pa_stream_set_underflow_callback(m_Stream, NULL, NULL);
-    pa_stream_disconnect(m_Stream);
-    pa_stream_unref(m_Stream);
-    m_Stream = NULL;
-  }
-
-  /* signal CPulseAE to free us */
-  m_Destroyed = true;
-  m_Initialized = false;
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-}
-
-unsigned int CPulseAEStream::GetSpace()
-{
-  if (!m_Initialized)
-    return 0;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-  unsigned int size = pa_stream_writable_size(m_Stream);
-  pa_threaded_mainloop_unlock(m_MainLoop);
-
-  if(size > m_cacheSize)
-    m_cacheSize = size;
-
-  return size;
-}
-
-unsigned int CPulseAEStream::AddData(void *data, unsigned int size)
-{
-  if (!m_Initialized)
-    return size;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  int length = std::min((int)pa_stream_writable_size(m_Stream), (int)size);
-  if (length == 0)
-  {
-    pa_threaded_mainloop_unlock(m_MainLoop);
-    return 0;
-  }
-
-  int written = pa_stream_write(m_Stream, data, length, NULL, 0, PA_SEEK_RELATIVE);
-  pa_threaded_mainloop_unlock(m_MainLoop);
-
-  if (written < 0)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: AddPackets - pa_stream_write failed\n");
-    return 0;
-  }
-
-  return length;
-}
-
-double CPulseAEStream::GetDelay()
-{
-  if (!m_Initialized)
-    return 0.0;
-
-  pa_usec_t latency = 0;
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  if (pa_stream_get_latency(m_Stream, &latency, NULL) == PA_ERR_NODATA)
-    CLog::Log(LOGERROR, "PulseAudio: pa_stream_get_latency() failed");
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-  return (double)((double)latency / 1000000.0);
-}
-
-double CPulseAEStream::GetCacheTime()
-{
-  if (!m_Initialized)
-    return 0.0;
-
-  return (double)(m_cacheSize - GetSpace()) / (double)(m_sampleRate * m_frameSize);
-}
-
-double CPulseAEStream::GetCacheTotal()
-{
-  if (!m_Initialized)
-    return 0.0;
-
-  return (double)m_cacheSize / (double)(m_sampleRate * m_frameSize);
-}
-
-bool CPulseAEStream::IsPaused()
-{
-  return m_Paused;
-}
-
-bool CPulseAEStream::IsDraining()
-{
-  if (m_DrainOperation)
-  {
-    if (pa_operation_get_state(m_DrainOperation) == PA_OPERATION_RUNNING)
-      return true;
-
-    pa_operation_unref(m_DrainOperation);
-    m_DrainOperation = NULL;
-  }
-  ProcessCallbacks();
-  return false;
-}
-
-bool CPulseAEStream::IsDrained()
-{
-  bool ret = (m_DrainOperation == NULL);
-  ProcessCallbacks();
-
-  return ret;
-}
-
-bool CPulseAEStream::IsDestroyed()
-{
-  return m_Destroyed;
-}
-
-void CPulseAEStream::Pause()
-{
-  if (m_Initialized)
-    m_Paused = Cork(true);
-}
-
-void CPulseAEStream::Resume()
-{
-  if (m_Initialized)
-    m_Paused = Cork(false);
-}
-
-void CPulseAEStream::Drain(bool wait)
-{
-  if (!m_Initialized)
-    return;
-
-  if (m_DrainOperation)
-    return;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-  m_DrainOperation = pa_stream_drain(m_Stream, CPulseAEStream::StreamDrainComplete, this);
-  pa_threaded_mainloop_unlock(m_MainLoop);
-}
-
-void CPulseAEStream::Flush()
-{
-  if (!m_Initialized)
-    return;
-
-  pa_threaded_mainloop_lock(m_MainLoop);
-  pa_operation_unref(pa_stream_flush(m_Stream, NULL, NULL));
-  pa_threaded_mainloop_unlock(m_MainLoop);
-}
-
-float CPulseAEStream::GetVolume()
-{
-  return m_Volume;
-}
-
-float CPulseAEStream::GetReplayGain()
-{
-  return 0.0f;
-}
-
-void CPulseAEStream::SetVolume(float volume)
-{
-  if (!m_Initialized)
-    return;
-
-  if (!pa_threaded_mainloop_in_thread(m_MainLoop))
-    pa_threaded_mainloop_lock(m_MainLoop);
-
-  if (volume > 0.f)
-  {
-    m_Volume = volume;
-    pa_volume_t paVolume = pa_sw_volume_from_linear((double)(m_Volume * m_MaxVolume));
-
-    pa_cvolume_set(&m_ChVolume, m_SampleSpec.channels, paVolume);
-  } 
-  else
-    pa_cvolume_mute(&m_ChVolume,m_SampleSpec.channels);
-
-  pa_operation *op = pa_context_set_sink_input_volume(m_Context, pa_stream_get_index(m_Stream), &m_ChVolume, NULL, NULL);
-
-  if (op == NULL)
-    CLog::Log(LOGERROR, "PulseAudio: Failed to set volume");
-  else
-    pa_operation_unref(op);
-
-  if (!pa_threaded_mainloop_in_thread(m_MainLoop))
-    pa_threaded_mainloop_unlock(m_MainLoop);
-}
-
-void CPulseAEStream::UpdateVolume(float max)
-{
-   if (!m_Initialized)
-    return;
-
-  m_MaxVolume = max;
-  SetVolume(m_Volume);
-}
-
-void CPulseAEStream::SetMute(const bool mute)
-{
-  if (mute)
-    SetVolume(-1.f);
-  else
-    SetVolume(m_Volume);
-}
-
-void CPulseAEStream::SetReplayGain(float factor)
-{
-}
-
-const unsigned int CPulseAEStream::GetFrameSize() const
-{
-  return m_frameSize;
-}
-
-const unsigned int CPulseAEStream::GetChannelCount() const
-{
-  return m_channelLayout.Count();
-}
-
-const unsigned int CPulseAEStream::GetSampleRate() const
-{
-  return m_sampleRate;
-}
-
-const enum AEDataFormat CPulseAEStream::GetDataFormat() const
-{
-  return m_format;
-}
-
-double CPulseAEStream::GetResampleRatio()
-{
-  return 1.0;
-}
-
-bool CPulseAEStream::SetResampleRatio(double ratio)
-{
-  return false;
-}
-
-void CPulseAEStream::RegisterAudioCallback(IAudioCallback* pCallback)
-{
-  m_AudioCallback = pCallback;
-}
-
-void CPulseAEStream::UnRegisterAudioCallback()
-{
-  m_AudioCallback = NULL;
-}
-
-void CPulseAEStream::FadeVolume(float from, float target, unsigned int time)
-{
-  if (!m_Initialized)
-    return;
-
-  m_fader.SetupFader(from, target, time);
-}
-
-bool CPulseAEStream::IsFading()
-{
-  return m_fader.IsRunning();
-}
-
-void CPulseAEStream::StreamRequestCallback(pa_stream *s, size_t length, void *userdata)
-{
-  CPulseAEStream *stream = (CPulseAEStream *)userdata;
-  pa_threaded_mainloop_signal(stream->m_MainLoop, 0);
-}
-
-void CPulseAEStream::StreamLatencyUpdateCallback(pa_stream *s, void *userdata)
-{
-  CPulseAEStream *stream = (CPulseAEStream *)userdata;
-  pa_threaded_mainloop_signal(stream->m_MainLoop, 0);
-}
-
-void CPulseAEStream::StreamStateCallback(pa_stream *s, void *userdata)
-{
-  CPulseAEStream *stream = (CPulseAEStream *)userdata;
-  pa_stream_state_t state = pa_stream_get_state(s);
-
-  switch (state)
-  {
-    case PA_STREAM_UNCONNECTED:
-    case PA_STREAM_CREATING:
-    case PA_STREAM_READY:
-    case PA_STREAM_FAILED:
-    case PA_STREAM_TERMINATED:
-      pa_threaded_mainloop_signal(stream->m_MainLoop, 0);
-      break;
-  }
-}
-
-void CPulseAEStream::StreamUnderflowCallback(pa_stream *s, void *userdata)
-{
-  CPulseAEStream *stream = (CPulseAEStream *)userdata;
-  CLog::Log(LOGWARNING, "PulseAudio: Stream underflow");
-  pa_threaded_mainloop_signal(stream->m_MainLoop, 0);
-}
-
-void CPulseAEStream::StreamDrainComplete(pa_stream *s, int success, void *userdata)
-{
-  CPulseAEStream *stream = (CPulseAEStream *)userdata;
-  if(stream)
-  {
-    stream->SetDrained();
-    pa_threaded_mainloop_signal(stream->m_MainLoop, 0);
-  }
-}
-
-void CPulseAEStream::ProcessCallbacks()
-{
-  if(m_ResumeCallback && m_slave)
-    m_slave->Resume();
-
-  m_ResumeCallback = false;
-}
-
-inline bool CPulseAEStream::WaitForOperation(pa_operation *op, pa_threaded_mainloop *mainloop, const char *LogEntry = "")
-{
-  if (op == NULL)
-    return false;
-
-  bool sucess = true;
-  ASSERT(!pa_threaded_mainloop_in_thread(mainloop));
-
-  while (pa_operation_get_state(op) == PA_OPERATION_RUNNING)
-    pa_threaded_mainloop_wait(mainloop);
-
-  if (pa_operation_get_state(op) != PA_OPERATION_DONE)
-  {
-    CLog::Log(LOGERROR, "PulseAudio: %s Operation failed", LogEntry);
-    sucess = false;
-  }
-
-  pa_operation_unref(op);
-  return sucess;
-}
-
-bool CPulseAEStream::Cork(bool cork)
-{
-  pa_threaded_mainloop_lock(m_MainLoop);
-
-  pa_operation *op = pa_stream_cork(m_Stream, cork ? 1 : 0, NULL, NULL);
-  if (!WaitForOperation(op, m_MainLoop, cork ? "Pause" : "Resume"))
-    cork = !cork;
-
-  pa_threaded_mainloop_unlock(m_MainLoop);
-  return cork;
-}
-
-void CPulseAEStream::RegisterSlave(IAEStream *stream)
-{
-  m_slave = stream;
-}
-
-CPulseAEStream::CLinearFader::CLinearFader(IAEStream *stream) : CThread("AEStream"), m_stream(stream)
-{
-  m_from = 0;
-  m_target = 0;
-  m_time = 0;
-  m_isRunning = false;
-}
-
-void CPulseAEStream::CLinearFader::SetupFader(float from, float target, unsigned int time)
-{
-  StopThread(true);
-
-  m_from = from;
-  m_target = target;
-  m_time = time;
-
-  if (m_time > 0)
-    Create();
-  else
-    m_stream->SetVolume(m_target);
-}
-
-void CPulseAEStream::CLinearFader::Process()
-{
-  if (m_stream == NULL)
-    return;
-
-  m_isRunning = true;
-  m_stream->SetVolume(m_from);
-  float k = m_target - m_from;
-
-  unsigned int begin = XbmcThreads::SystemClockMillis();
-  unsigned int end = begin + m_time;
-  unsigned int current = begin;
-  unsigned int step = std::max(1u, m_time / 100);
-
-  do
-  {
-    float x = ((float)current - (float)begin) / (float)m_time;
-
-    m_stream->SetVolume(m_from + k * x);
-    usleep(step * 1000);
-    current = XbmcThreads::SystemClockMillis();
-  } while (current <= end && !m_bStop);
-
-  m_stream->SetVolume(m_target);
-  m_isRunning = false;
-}
-
-bool CPulseAEStream::CLinearFader::IsRunning()
-{
-  return !m_isRunning;
-}
-#endif
diff --git a/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.h b/xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.h
deleted file mode 100644 (file)
index 8d9435b..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2010-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifdef HAS_PULSEAUDIO
-
-#include "Interfaces/AEStream.h"
-#include "threads/Thread.h"
-#include <pulse/pulseaudio.h>
-
-class CPulseAEStream : public IAEStream
-{
-public:
-  /* this should NEVER be called directly, use AE.GetStream */
-  CPulseAEStream(pa_context *context, pa_threaded_mainloop *mainLoop, enum AEDataFormat format, unsigned int sampleRate, CAEChannelInfo channelLayout, unsigned int options);
-  virtual ~CPulseAEStream();
-
-  virtual void Destroy();
-
-  virtual unsigned int GetSpace();
-  virtual unsigned int AddData(void *data, unsigned int size);
-  virtual double GetDelay();
-  virtual double GetCacheTime ();
-  virtual double GetCacheTotal();
-
-  virtual bool IsPaused     ();
-  virtual bool IsDraining   ();
-  virtual bool IsDrained    ();
-  virtual bool IsDestroyed  ();
-  virtual bool IsBuffering() { return false; }
-
-  virtual void Pause   ();
-  virtual void Resume  ();
-  virtual void Drain   (bool wait);
-  virtual void Flush   ();
-
-  virtual float GetVolume    ();
-  virtual float GetReplayGain();
-  virtual float GetAmplification() { return 1.0f; }
-  virtual void  SetVolume    (float volume);
-  virtual void  SetReplayGain(float factor);
-  virtual void  SetAmplification(float amplify){}
-  void SetMute(const bool muted);
-
-  virtual const unsigned int      GetFrameSize   () const;
-  virtual const unsigned int      GetChannelCount() const;
-  virtual const unsigned int      GetSampleRate  () const;
-  virtual const enum AEDataFormat GetDataFormat  () const;
-  virtual const unsigned int GetEncodedSampleRate() const { return GetSampleRate(); }
-
-  /* for dynamic sample rate changes (smoothvideo) */
-  virtual double GetResampleRatio();
-  virtual bool   SetResampleRatio(double ratio);
-
-  /* vizualization callback register function */
-  virtual void RegisterAudioCallback(IAudioCallback* pCallback);
-  virtual void UnRegisterAudioCallback();
-
-  virtual void FadeVolume(float from, float target, unsigned int time);
-  virtual bool IsFading();
-
-  /* trigger the stream to update its volume relative to AE */
-  void UpdateVolume(float max);
-
-  /* used to prepare a stream for resume */
-  void SetDrained() { m_ResumeCallback = true; };
-
-  /* Process the Resume of streams */
-  void ProcessCallbacks();
-
-  virtual void RegisterSlave(IAEStream *stream);
-private:
-  static void StreamRequestCallback(pa_stream *s, size_t length, void *userdata);
-  static void StreamLatencyUpdateCallback(pa_stream *s, void *userdata);
-  static void StreamStateCallback(pa_stream *s, void *userdata);
-  static void StreamUnderflowCallback(pa_stream *s, void *userdata);
-  static void StreamDrainComplete(pa_stream *s, int success, void *userdata);
-
-  static inline bool WaitForOperation(pa_operation *op, pa_threaded_mainloop *mainloop, const char *LogEntry);
-  bool Cork(bool cork);
-
-  bool m_Destroyed;
-  bool m_Initialized;
-  bool m_Paused;
-  bool m_ResumeCallback;
-
-  pa_stream *m_Stream;
-  pa_sample_spec m_SampleSpec;
-
-  float       m_MaxVolume;
-  float       m_Volume;
-  pa_cvolume  m_ChVolume;
-
-  pa_context *m_Context;
-  pa_threaded_mainloop *m_MainLoop;
-
-  IAudioCallback* m_AudioCallback;
-
-  enum AEDataFormat m_format;
-  unsigned int      m_sampleRate;
-  CAEChannelInfo    m_channelLayout;
-  unsigned int m_options;
-  unsigned int m_frameSize;
-  unsigned int m_cacheSize;
-
-  pa_operation *m_DrainOperation;
-  IAEStream    *m_slave;
-
-  class CLinearFader : public CThread
-  {
-  public:
-    CLinearFader(IAEStream *stream);
-    void SetupFader(float from, float target, unsigned int time);
-    bool IsRunning();
-  protected:
-    virtual void Process();
-  private:
-    IAEStream *m_stream;
-    float m_from;
-    float m_target;
-    unsigned int m_time;
-    volatile bool m_isRunning;
-  } m_fader;
-};
-
-#endif
index d2f895c..f91dc4c 100644 (file)
@@ -226,5 +226,11 @@ public:
    * @return true if AudioEngine wants to display this setting
    */
   virtual bool IsSettingVisible(const std::string &settingId) {return false; }
+
+  /**
+   * Instruct AE to keep configuration for a specified time
+   * @param millis time for which old configuration should be kept
+   */
+  virtual void KeepConfiguration(unsigned int millis) {return; }
 };
 
index fae222f..0f460f4 100644 (file)
  *
  */
 
-#include "threads/Thread.h"
-#include "AE.h"
-#include "Utils/AEAudioFormat.h"
-#include "utils/StdString.h"
+#include <string>
 #include <stdint.h>
+#include "cores/AudioEngine/Interfaces/AE.h" // for typedef's used in derived classes
+#include "cores/AudioEngine/Utils/AEAudioFormat.h"
 
 class IAESink
 {
@@ -47,26 +46,20 @@ public:
   virtual void Deinitialize() = 0;
 
   /*
-    Return true if the supplied format and device are compatible with the current open sink
-  */
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device) = 0;
-
-  /*
     This method returns the time in seconds that it will take
     for the next added packet to be heard from the speakers.
   */
   virtual double GetDelay() = 0;
 
   /*
-    This method returns the time in seconds that it will take
-    to underrun the cache if no sample is added.
+    This method returns the total time in seconds of the cache.
   */
-  virtual double GetCacheTime() = 0;
+  virtual double GetCacheTotal() = 0;
 
   /*
-    This method returns the total time in seconds of the cache.
+    This method returns latency of hardware.
   */
-  virtual double GetCacheTotal() = 0;
+  virtual double GetLatency() { return 0.0; };
 
   /*
     Adds packets to be sent out, this routine MUST block or sleep.
index ebbcc0d..e20b77d 100644 (file)
@@ -19,8 +19,7 @@
  *
  */
 
-#include "utils/StdString.h"
-#include "AE.h"
+#include <string>
 
 class IAESound
 {
index c1d53f5..3815a16 100644 (file)
@@ -39,6 +39,8 @@ SRCS += AESinkFactory.cpp
 SRCS += Sinks/AESinkNULL.cpp
 SRCS += Sinks/AESinkProfiler.cpp
 
+SRCS += Sinks/AESinkPi.cpp
+
 SRCS += Engines/ActiveAE/ActiveAE.cpp
 SRCS += Engines/ActiveAE/ActiveAESink.cpp
 SRCS += Engines/ActiveAE/ActiveAEStream.cpp
@@ -46,17 +48,13 @@ SRCS += Engines/ActiveAE/ActiveAESound.cpp
 SRCS += Engines/ActiveAE/ActiveAEResample.cpp
 SRCS += Engines/ActiveAE/ActiveAEBuffer.cpp
 
-SRCS += Engines/PiAudio/PiAudioAE.cpp
-
 ifeq (@USE_ANDROID@,1)
 SRCS += Sinks/AESinkAUDIOTRACK.cpp
 else
 SRCS += Sinks/AESinkALSA.cpp
 SRCS += Sinks/AESinkOSS.cpp
 ifeq (@USE_PULSE@,1)
-SRCS += Engines/PulseAE/PulseAE.cpp
-SRCS += Engines/PulseAE/PulseAEStream.cpp
-SRCS += Engines/PulseAE/PulseAESound.cpp
+SRCS += Sinks/AESinkPULSE.cpp
 endif
 endif
 endif
index 4f63535..c9ab554 100644 (file)
@@ -26,8 +26,8 @@
 #include <sstream>
 
 #include "AESinkALSA.h"
-#include "Utils/AEUtil.h"
-#include "Utils/AEELDParser.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AEELDParser.h"
 #include "utils/StdString.h"
 #include "utils/log.h"
 #include "utils/MathUtils.h"
@@ -45,12 +45,18 @@ static enum AEChannel ALSAChannelMap[ALSA_MAX_CHANNELS + 1] = {
   AE_CH_NULL
 };
 
-static enum AEChannel ALSAChannelMapWide[ALSA_MAX_CHANNELS + 1] = {
+static enum AEChannel ALSAChannelMap51Wide[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 enum AEChannel ALSAChannelMapPassthrough[ALSA_MAX_CHANNELS + 1] = {
+  AE_CH_RAW     , AE_CH_RAW     , AE_CH_RAW     , AE_CH_RAW     , AE_CH_RAW     , AE_CH_RAW     , AE_CH_RAW      , AE_CH_RAW      ,
+  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,
@@ -87,37 +93,55 @@ CAESinkALSA::~CAESinkALSA()
   Deinitialize();
 }
 
-inline CAEChannelInfo CAESinkALSA::GetChannelLayout(AEAudioFormat format)
+inline CAEChannelInfo CAESinkALSA::GetChannelLayout(AEAudioFormat format, unsigned int minChannels, unsigned int maxChannels)
 {
+  enum AEChannel* channelMap = ALSAChannelMap;
   unsigned int count = 0;
 
-       if (format.m_dataFormat == AE_FMT_AC3 ||
-           format.m_dataFormat == AE_FMT_DTS ||
-           format.m_dataFormat == AE_FMT_EAC3)
-           count = 2;
+  if (format.m_dataFormat == AE_FMT_AC3 ||
+      format.m_dataFormat == AE_FMT_DTS ||
+      format.m_dataFormat == AE_FMT_EAC3)
+  {
+    count = 2;
+    channelMap = ALSAChannelMapPassthrough;
+  }
   else if (format.m_dataFormat == AE_FMT_TRUEHD ||
            format.m_dataFormat == AE_FMT_DTSHD)
-           count = 8;
+  {
+    count = 8;
+    channelMap = ALSAChannelMapPassthrough;
+  }
   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;
+    {
+      channelMap = ALSAChannelMap51Wide;
+    }
     for (unsigned int c = 0; c < 8; ++c)
+    {
       for (unsigned int i = 0; i < format.m_channelLayout.Count(); ++i)
+      {
         if (format.m_channelLayout[i] == channelMap[c])
         {
           count = c + 1;
           break;
         }
+      }
+    }
+    count = std::max(count, minChannels);
   }
 
   CAEChannelInfo info;
+  count = std::min(count, maxChannels);
   for (unsigned int i = 0; i < count; ++i)
-    info += ALSAChannelMap[i];
+    info += channelMap[i];
+
+  CLog::Log(LOGDEBUG, "CAESinkALSA::GetChannelLayout - Input Channel Count: %d Output Channel Count: %d", format.m_channelLayout.Count(), count);
+  CLog::Log(LOGDEBUG, "CAESinkALSA::GetChannelLayout - Requested Layout: %s", std::string(format.m_channelLayout).c_str());
+  CLog::Log(LOGDEBUG, "CAESinkALSA::GetChannelLayout - Got Layout: %s", std::string(info).c_str());
 
   return info;
 }
@@ -143,20 +167,22 @@ void CAESinkALSA::GetAESParams(AEAudioFormat format, std::string& params)
 
 bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
 {
-  CAEChannelInfo channelLayout;
+  CAEChannelInfo channelLayout = GetChannelLayout(format, 2, 8);
   m_initDevice = device;
   m_initFormat = format;
+  ALSAConfig inconfig, outconfig;
+  inconfig.format = format.m_dataFormat;
+  inconfig.sampleRate = format.m_sampleRate;
+  inconfig.channels = channelLayout.Count();
 
   /* if we are raw, correct the data format */
   if (AE_IS_RAW(format.m_dataFormat))
   {
-    channelLayout     = GetChannelLayout(format);
-    format.m_dataFormat = AE_FMT_S16NE;
-    m_passthrough       = true;
+    inconfig.format   = AE_FMT_S16NE;
+    m_passthrough     = true;
   }
   else
   {
-    channelLayout = GetChannelLayout(format);
     m_passthrough   = false;
   }
 #if defined(HAS_LIBAMCODEC)
@@ -167,14 +193,12 @@ bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
   }
 #endif
 
-  if (channelLayout.Count() == 0)
+  if (inconfig.channels == 0)
   {
     CLog::Log(LOGERROR, "CAESinkALSA::Initialize - Unable to open the requested channel layout");
     return false;
   }
 
-  format.m_channelLayout = channelLayout;
-
   AEDeviceType devType = AEDeviceTypeFromName(device);
 
   std::string AESParams;
@@ -189,7 +213,7 @@ bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
   snd_config_t *config;
   snd_config_copy(&config, snd_config);
 
-  if (!OpenPCMDevice(device, AESParams, channelLayout.Count(), &m_pcm, config))
+  if (!OpenPCMDevice(device, AESParams, inconfig.channels, &m_pcm, config))
   {
     CLog::Log(LOGERROR, "CAESinkALSA::Initialize - failed to initialize device \"%s\"", device.c_str());
     snd_config_delete(config);
@@ -205,30 +229,32 @@ bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
   /* free the sound config */
   snd_config_delete(config);
 
-  if (!InitializeHW(format) || !InitializeSW(format))
+  if (!InitializeHW(inconfig, outconfig) || !InitializeSW(outconfig))
     return false;
 
   // we want it blocking
   snd_pcm_nonblock(m_pcm, 0);
   snd_pcm_prepare (m_pcm);
 
+  if (m_passthrough && inconfig.channels != outconfig.channels)
+  {
+    CLog::Log(LOGINFO, "CAESinkALSA::Initialize - could not open required number of channels");
+    return false;
+  }
+  // adjust format to the configuration we got
+  format.m_channelLayout = GetChannelLayout(format, outconfig.channels, outconfig.channels);
+  format.m_sampleRate = outconfig.sampleRate;
+  format.m_frames = outconfig.periodSize;
+  format.m_frameSize = outconfig.frameSize;
+  format.m_frameSamples = outconfig.periodSize * outconfig.channels;
+  format.m_dataFormat = outconfig.format;
+
   m_format              = format;
   m_formatSampleRateMul = 1.0 / (double)m_format.m_sampleRate;
 
   return true;
 }
 
-bool CAESinkALSA::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  return (
-      /* compare against the requested format and the real format */
-      (m_initFormat.m_sampleRate    == format.m_sampleRate    || m_format.m_sampleRate    == format.m_sampleRate   ) &&
-      (m_initFormat.m_dataFormat    == format.m_dataFormat    || m_format.m_dataFormat    == format.m_dataFormat   ) &&
-      (m_initFormat.m_channelLayout == format.m_channelLayout || m_format.m_channelLayout == format.m_channelLayout) &&
-      (m_initDevice == device)
-  );
-}
-
 snd_pcm_format_t CAESinkALSA::AEFormatToALSAFormat(const enum AEDataFormat format)
 {
   if (AE_IS_RAW(format))
@@ -255,7 +281,7 @@ snd_pcm_format_t CAESinkALSA::AEFormatToALSAFormat(const enum AEDataFormat forma
   }
 }
 
-bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
+bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig)
 {
   snd_pcm_hw_params_t *hw_params;
 
@@ -265,35 +291,35 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
   snd_pcm_hw_params_any(m_pcm, hw_params);
   snd_pcm_hw_params_set_access(m_pcm, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
 
-  unsigned int sampleRate   = format.m_sampleRate;
-  unsigned int channelCount = format.m_channelLayout.Count();
+  unsigned int sampleRate   = inconfig.sampleRate;
+  unsigned int channelCount = inconfig.channels;
   snd_pcm_hw_params_set_rate_near    (m_pcm, hw_params, &sampleRate, NULL);
   snd_pcm_hw_params_set_channels_near(m_pcm, hw_params, &channelCount);
 
   /* ensure we opened X channels or more */
-  if (format.m_channelLayout.Count() > channelCount)
+  if (inconfig.channels > channelCount)
   {
     CLog::Log(LOGINFO, "CAESinkALSA::InitializeHW - Unable to open the required number of channels");
   }
 
-  /* update the channelLayout to what we managed to open */
-  format.m_channelLayout.Reset();
-  for (unsigned int i = 0; i < channelCount; ++i)
-    format.m_channelLayout += ALSAChannelMap[i];
+  /* update outconfig */
+  outconfig.channels = channelCount;
+
+  snd_pcm_format_t fmt = AEFormatToALSAFormat(inconfig.format);
+  outconfig.format = inconfig.format;
 
-  snd_pcm_format_t fmt = AEFormatToALSAFormat(format.m_dataFormat);
   if (fmt == SND_PCM_FORMAT_UNKNOWN)
   {
     /* if we dont support the requested format, fallback to float */
-    format.m_dataFormat = AE_FMT_FLOAT;
-    fmt                 = SND_PCM_FORMAT_FLOAT;
+    fmt = SND_PCM_FORMAT_FLOAT;
+    outconfig.format = AE_FMT_FLOAT;
   }
 
   /* try the data format */
   if (snd_pcm_hw_params_set_format(m_pcm, hw_params, fmt) < 0)
   {
     /* if the chosen format is not supported, try each one in decending order */
-    CLog::Log(LOGINFO, "CAESinkALSA::InitializeHW - Your hardware does not support %s, trying other formats", CAEUtil::DataFormatToStr(format.m_dataFormat));
+    CLog::Log(LOGINFO, "CAESinkALSA::InitializeHW - Your hardware does not support %s, trying other formats", CAEUtil::DataFormatToStr(outconfig.format));
     for (enum AEDataFormat i = AE_FMT_MAX; i > AE_FMT_INVALID; i = (enum AEDataFormat)((int)i - 1))
     {
       if (AE_IS_RAW(i) || i == AE_FMT_MAX)
@@ -322,8 +348,8 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
       }
 
       /* record that the format fell back to X */
-      format.m_dataFormat = i;
-      CLog::Log(LOGINFO, "CAESinkALSA::InitializeHW - Using data format %s", CAEUtil::DataFormatToStr(format.m_dataFormat));
+      outconfig.format = i;
+      CLog::Log(LOGINFO, "CAESinkALSA::InitializeHW - Using data format %s", CAEUtil::DataFormatToStr(outconfig.format));
       break;
     }
 
@@ -418,10 +444,9 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
   CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Got: periodSize %lu, bufferSize %lu", periodSize, bufferSize);
 
   /* set the format parameters */
-  format.m_sampleRate   = sampleRate;
-  format.m_frames       = periodSize;
-  format.m_frameSamples = periodSize * format.m_channelLayout.Count();
-  format.m_frameSize    = snd_pcm_frames_to_bytes(m_pcm, 1);
+  outconfig.sampleRate   = sampleRate;
+  outconfig.periodSize   = periodSize;
+  outconfig.frameSize    = snd_pcm_frames_to_bytes(m_pcm, 1);
 
   m_bufferSize = (unsigned int)bufferSize;
   m_timeout    = std::ceil((double)(bufferSize * 1000) / (double)sampleRate);
@@ -431,7 +456,7 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
   return true;
 }
 
-bool CAESinkALSA::InitializeSW(AEAudioFormat &format)
+bool CAESinkALSA::InitializeSW(const ALSAConfig &inconfig)
 {
   snd_pcm_sw_params_t *sw_params;
   snd_pcm_uframes_t boundary;
@@ -444,7 +469,7 @@ bool CAESinkALSA::InitializeSW(AEAudioFormat &format)
   snd_pcm_sw_params_set_silence_threshold(m_pcm, sw_params, 0);
   snd_pcm_sw_params_get_boundary         (sw_params, &boundary);
   snd_pcm_sw_params_set_silence_size     (m_pcm, sw_params, boundary);
-  snd_pcm_sw_params_set_avail_min        (m_pcm, sw_params, format.m_frames);
+  snd_pcm_sw_params_set_avail_min        (m_pcm, sw_params, inconfig.periodSize);
 
   if (snd_pcm_sw_params(m_pcm, sw_params) < 0)
   {
@@ -490,28 +515,6 @@ double CAESinkALSA::GetDelay()
   return (double)frames * m_formatSampleRateMul;
 }
 
-double CAESinkALSA::GetCacheTime()
-{
-  if (!m_pcm)
-    return 0.0;
-
-  int space = snd_pcm_avail_update(m_pcm);
-  if (space == 0)
-  {
-    snd_pcm_state_t state = snd_pcm_state(m_pcm);
-    if (state < 0)
-    {
-      HandleError("snd_pcm_state", state);
-      space = m_bufferSize;
-    }
-
-    if (state != SND_PCM_STATE_RUNNING && state != SND_PCM_STATE_PREPARED)
-      space = m_bufferSize;
-  }
-
-  return (double)(m_bufferSize - space) * m_formatSampleRateMul;
-}
-
 double CAESinkALSA::GetCacheTotal()
 {
   return (double)m_bufferSize * m_formatSampleRateMul;
index d920fdb..6099297 100644 (file)
@@ -22,8 +22,8 @@
 #include "system.h"
 #ifdef HAS_ALSA
 
-#include "Interfaces/AESink.h"
-#include "Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 #include <stdint.h>
 
 #define ALSA_PCM_NEW_HW_PARAMS_API
@@ -41,18 +41,16 @@ public:
 
   virtual bool Initialize  (AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual void         Stop            ();
   virtual double       GetDelay        ();
-  virtual double       GetCacheTime    ();
   virtual double       GetCacheTotal   ();
   virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   virtual void         Drain           ();
 
   static void EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false);
 private:
-  CAEChannelInfo GetChannelLayout(AEAudioFormat format);
+  CAEChannelInfo GetChannelLayout(AEAudioFormat format, unsigned int minChannels, unsigned int maxChannels);
   void           GetAESParams(const AEAudioFormat format, std::string& params);
   void           HandleError(const char* name, int err);
 
@@ -66,10 +64,19 @@ private:
   snd_pcm_t        *m_pcm;
   int               m_timeout;
 
+  struct ALSAConfig
+  {
+    unsigned int sampleRate;
+    unsigned int periodSize;
+    unsigned int frameSize;
+    unsigned int channels;
+    AEDataFormat format;
+  };
+
   static snd_pcm_format_t AEFormatToALSAFormat(const enum AEDataFormat format);
 
-  bool InitializeHW(AEAudioFormat &format);
-  bool InitializeSW(AEAudioFormat &format);
+  bool InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig);
+  bool InitializeSW(const ALSAConfig &inconfig);
 
   static void AppendParams(std::string &device, const std::string &params);
   static bool TryDevice(const std::string &name, snd_pcm_t **pcmp, snd_config_t *lconf);
index 2bd9619..46a0f3a 100644 (file)
@@ -19,8 +19,8 @@
  */
 
 #include "AESinkAUDIOTRACK.h"
-#include "Utils/AEUtil.h"
-#include "Utils/AERingBuffer.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AERingBuffer.h"
 #include "android/activity/XBMCApp.h"
 #include "settings/Settings.h"
 #if defined(HAS_LIBAMCODEC)
 #endif
 #include "utils/log.h"
 
-#include <jni.h>
+#include "android/jni/AudioFormat.h"
+#include "android/jni/AudioManager.h"
+#include "android/jni/AudioTrack.h"
 
-#if defined(__ARM_NEON__)
+using namespace jni;
+
+#if 0 //defined(__ARM_NEON__)
 #include <arm_neon.h>
 #include "utils/CPUInfo.h"
-#include "android/jni/JNIThreading.h"
 
 // LGPLv2 from PulseAudio
 // float values from AE are pre-clamped so we do not need to clamp again here
@@ -58,46 +61,28 @@ static void pa_sconv_s16le_from_f32ne_neon(unsigned n, const float32_t *a, int16
 }
 #endif
 
-static jint GetStaticIntField(JNIEnv *jenv, std::string class_name, std::string field_name)
-{
-  class_name.insert(0, "android/media/");
-  jclass cls = jenv->FindClass(class_name.c_str());
-  jfieldID field = jenv->GetStaticFieldID(cls, field_name.c_str(), "I");
-  jint int_field = jenv->GetStaticIntField(cls, field);
-  jenv->DeleteLocalRef(cls);
-  return int_field;
-}
-
 CAEDeviceInfo CAESinkAUDIOTRACK::m_info;
 ////////////////////////////////////////////////////////////////////////////////////////////
 CAESinkAUDIOTRACK::CAESinkAUDIOTRACK()
-  : CThread("AudioTrack")
 {
-  m_sinkbuffer = NULL;
   m_alignedS16 = NULL;
-  m_volume_changed = false;
   m_min_frames = 0;
   m_sink_frameSize = 0;
-  m_sinkbuffer_sec = 0.0;
-  m_sinkbuffer_sec_per_byte = 0.0;
-  m_draining = false;
   m_audiotrackbuffer_sec = 0.0;
-  m_audiotrack_empty_sec = 0.0;
-  m_audiotrack_empty_sec_tweaks = 0.0;
-#if defined(HAS_LIBAMCODEC)
-  if (aml_present())
-    m_audiotrack_empty_sec_tweaks = 0.250;
-#endif
   m_volume = 1.0;
+  m_at_jni = NULL;
+  m_frames_written = 0;
 }
 
 CAESinkAUDIOTRACK::~CAESinkAUDIOTRACK()
 {
+  Deinitialize();
 }
 
 bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device)
 {
-  m_format = format;
+  m_lastFormat  = format;
+  m_format      = format;
 
   if (AE_IS_RAW(m_format.m_dataFormat))
     m_passthrough = true;
@@ -133,126 +118,117 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device)
       break;
     }
   }
-  m_format.m_dataFormat = dataFormat;
-
-  m_format.m_channelLayout = m_info.m_channels;
-  m_format.m_frameSize = m_format.m_channelLayout.Count() * (CAEUtil::DataFormatToBits(m_format.m_dataFormat) >> 3);
-
-  m_draining = false;
-  m_volume_changed = false;
-  // launch the process thread and wait for the
-  // AutoTrack jni object to get created and setup.
-  m_wake.Reset();
-  m_inited.Reset();
-  Create();
-  if(!m_inited.WaitMSec(100))
-  {
-    while(!m_inited.WaitMSec(1))
-      Sleep(10);
-  }
 
-  // m_min_frames is volatile and has been setup by Process()
-  m_format.m_frames = m_min_frames;
-  m_format.m_frameSamples = m_format.m_frames * m_format.m_channelLayout.Count();
-  format = m_format;
+  m_format.m_dataFormat     = dataFormat;
+  m_format.m_channelLayout  = m_info.m_channels;
+  m_format.m_frameSize      = m_format.m_channelLayout.Count() *
+                              (CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8);
+  int min_buffer_size       = CJNIAudioTrack::getMinBufferSize( m_format.m_sampleRate,
+                                                                CJNIAudioFormat::CHANNEL_OUT_STEREO,
+                                                                CJNIAudioFormat::ENCODING_PCM_16BIT);
+  m_sink_frameSize          = m_format.m_channelLayout.Count() *
+                              (CAEUtil::DataFormatToBits(AE_FMT_S16LE) / 8);
+  m_min_frames              = min_buffer_size / m_sink_frameSize;
+  m_audiotrackbuffer_sec    = (double)m_min_frames / (double)m_format.m_sampleRate;
+  m_at_jni                  = new CJNIAudioTrack( CJNIAudioManager::STREAM_MUSIC,
+                                                  m_format.m_sampleRate,
+                                                  CJNIAudioFormat::CHANNEL_OUT_STEREO,
+                                                  CJNIAudioFormat::ENCODING_PCM_16BIT,
+                                                  min_buffer_size,
+                                                  CJNIAudioTrack::MODE_STREAM);
+  m_format.m_frames         = m_min_frames / 2;
+
+  m_format.m_frameSamples   = m_format.m_frames * m_format.m_channelLayout.Count();
+  format                    = m_format;
+
+  JNIEnv* jenv = xbmc_jnienv();
+  // Set the initial volume
+  float volume = 1.0;
+  if (!m_passthrough)
+    volume = m_volume;
+  CXBMCApp::SetSystemVolume(jenv, volume);
 
   return true;
 }
 
 void CAESinkAUDIOTRACK::Deinitialize()
 {
-  // force m_bStop and set m_wake, if might be sleeping.
-  m_bStop = true;
-  m_wake.Set();
-  StopThread();
-  delete m_sinkbuffer, m_sinkbuffer = NULL;
-  if (m_alignedS16)
-    _aligned_free(m_alignedS16), m_alignedS16 = NULL;
-}
+  if (!m_at_jni)
+    return;
 
-bool CAESinkAUDIOTRACK::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  return ((m_format.m_sampleRate    == format.m_sampleRate) &&
-          (m_format.m_dataFormat    == format.m_dataFormat) &&
-          (m_format.m_channelLayout == format.m_channelLayout));
+  m_at_jni->stop();
+  m_at_jni->flush();
+  m_at_jni->release();
+  
+  m_frames_written = 0;
+
+  delete m_at_jni;
+  m_at_jni = NULL;
 }
 
 double CAESinkAUDIOTRACK::GetDelay()
 {
-  // this includes any latency due to AudioTrack buffer,
-  // AudioMixer (if any) and audio hardware driver.
-
-  double sinkbuffer_seconds_to_empty = m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer->GetReadSize();
-  sinkbuffer_seconds_to_empty += m_audiotrack_empty_sec;
-  if (sinkbuffer_seconds_to_empty > 0.0)
-    sinkbuffer_seconds_to_empty += m_audiotrack_empty_sec_tweaks;
-  return sinkbuffer_seconds_to_empty;
+  if (!m_at_jni)
+    return 0.0;
+
+  // In their infinite wisdom, Google decided to make getPlaybackHeadPosition
+  // return a 32bit "int" that you should "interpret as unsigned."  As such,
+  // for wrap saftey, we need to do all ops on it in 32bit integer math.
+  uint32_t head_pos = (uint32_t)m_at_jni->getPlaybackHeadPosition();
+
+  double delay = (double)(m_frames_written - head_pos) / m_format.m_sampleRate;
+
+  return delay;
 }
 
-double CAESinkAUDIOTRACK::GetCacheTime()
+double CAESinkAUDIOTRACK::GetLatency()
 {
-  // returns the time in seconds that it will take
-  // to underrun the buffer if no sample is added.
-
-  double sinkbuffer_seconds_to_empty = m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer->GetReadSize();
-  sinkbuffer_seconds_to_empty += m_audiotrack_empty_sec;
-  if (sinkbuffer_seconds_to_empty > 0.0)
-    sinkbuffer_seconds_to_empty += m_audiotrack_empty_sec_tweaks;
-  return sinkbuffer_seconds_to_empty;
+#if defined(HAS_LIBAMCODEC)
+  if (aml_present())
+    return 0.250;
+#endif
+  return 0.0;
 }
 
 double CAESinkAUDIOTRACK::GetCacheTotal()
 {
   // total amount that the audio sink can buffer in units of seconds
-
-  return m_sinkbuffer_sec + m_audiotrackbuffer_sec;
+  return m_audiotrackbuffer_sec;
 }
 
+// this method is supposed to block until all frames are written to the device buffer
+// when it returns ActiveAESink will take the next buffer out of a queue
 unsigned int CAESinkAUDIOTRACK::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio, bool blocking)
 {
-  // write as many frames of audio as we can fit into our internal buffer.
-
-  // our internal sink buffer is always AE_FMT_S16
-  unsigned int write_frames = m_sinkbuffer->GetWriteSize() / m_sink_frameSize;
-  if (write_frames > frames)
-    write_frames = frames;
+  if (!m_at_jni)
+    return INT_MAX;
 
-  if (hasAudio && write_frames)
+  // write as many frames of audio as we can fit into our internal buffer.
+  int written = 0;
+  if (frames)
   {
-    switch(m_format.m_dataFormat)
-    {
-      case AE_FMT_S16LE:
-        m_sinkbuffer->Write(data, write_frames * m_sink_frameSize);
-        m_wake.Set();
-        break;
-#if defined(__ARM_NEON__)
-      case AE_FMT_FLOAT:
-        if (!m_alignedS16)
-          m_alignedS16 = (int16_t*)_aligned_malloc(m_format.m_frames * m_sink_frameSize, 16);
-        // neon convert AE_FMT_S16LE to AE_FMT_FLOAT
-        pa_sconv_s16le_from_f32ne_neon(write_frames * m_format.m_channelLayout.Count(), (const float32_t *)data, m_alignedS16);
-        m_sinkbuffer->Write((unsigned char*)m_alignedS16, write_frames * m_sink_frameSize);
-        m_wake.Set();
-        break;
-#endif
-      default:
-        break;
-    }
+    // android will auto pause the playstate when it senses idle,
+    // check it and set playing if it does this. Do this before
+    // writing into its buffer.
+    if (m_at_jni->getPlayState() != CJNIAudioTrack::PLAYSTATE_PLAYING)
+      m_at_jni->play();
+
+    written = m_at_jni->write((char*)data, 0, frames * m_sink_frameSize);
+    m_frames_written += written / m_sink_frameSize;
   }
-  // AddPackets runs under a non-idled AE thread we must block or sleep.
-  // Trying to calc the optimal sleep is tricky so just a minimal sleep.
-  if(blocking)
-    Sleep(10);
 
-  return hasAudio ? write_frames:frames;
+  return (unsigned int)(written/m_sink_frameSize);
 }
 
 void CAESinkAUDIOTRACK::Drain()
 {
-  CLog::Log(LOGDEBUG, "CAESinkAUDIOTRACK::Drain");
-  CSingleLock lock(m_drain_lock);
-  m_draining = true;
-  m_wake.Set();
+  if (!m_at_jni)
+    return;
+
+  // TODO: does this block until last samples played out?
+  // we should not return from drain as long the device is in playing state
+  m_at_jni->stop();
+  m_frames_written = 0;
 }
 
 bool CAESinkAUDIOTRACK::HasVolume()
@@ -262,13 +238,15 @@ bool CAESinkAUDIOTRACK::HasVolume()
 
 void  CAESinkAUDIOTRACK::SetVolume(float scale)
 {
+  if (!m_at_jni)
+    return;
+
   // Android uses fixed steps, reverse scale back to percent
   float gain = CAEUtil::ScaleToGain(scale);
   m_volume = CAEUtil::GainToPercent(gain);
   if (!m_passthrough)
   {
-    CSingleLock lock(m_volume_lock);
-    m_volume_changed = true;
+    CXBMCApp::SetSystemVolume(xbmc_jnienv(), m_volume);
   }
 }
 
@@ -279,6 +257,11 @@ void CAESinkAUDIOTRACK::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
   m_info.m_sampleRates.clear();
 
   m_info.m_deviceType = AE_DEVTYPE_PCM;
+#if defined(HAS_LIBAMCODEC)
+  // AML devices can do passthough
+  if (aml_present())
+    m_info.m_deviceType = AE_DEVTYPE_HDMI;
+#endif
   m_info.m_deviceName = "AudioTrack";
   m_info.m_displayName = "android";
   m_info.m_displayNameExtra = "audiotrack";
@@ -287,7 +270,7 @@ void CAESinkAUDIOTRACK::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
   m_info.m_sampleRates.push_back(44100);
   m_info.m_sampleRates.push_back(48000);
   m_info.m_dataFormats.push_back(AE_FMT_S16LE);
-#if defined(__ARM_NEON__)
+#if 0 //defined(__ARM_NEON__)
   if (g_cpuInfo.GetCPUFeatures() & CPU_FEATURE_NEON)
     m_info.m_dataFormats.push_back(AE_FMT_FLOAT);
 #endif
@@ -295,157 +278,3 @@ void CAESinkAUDIOTRACK::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
   list.push_back(m_info);
 }
 
-void CAESinkAUDIOTRACK::Process()
-{
-  CLog::Log(LOGDEBUG, "CAESinkAUDIOTRACK::Process");
-
-  JNIEnv *jenv = xbmc_jnienv();
-
-  jclass jcAudioTrack = jenv->FindClass("android/media/AudioTrack");
-
-  jmethodID jmInit              = jenv->GetMethodID(jcAudioTrack, "<init>", "(IIIIII)V");
-  jmethodID jmPlay              = jenv->GetMethodID(jcAudioTrack, "play", "()V");
-  jmethodID jmStop              = jenv->GetMethodID(jcAudioTrack, "stop", "()V");
-  jmethodID jmFlush             = jenv->GetMethodID(jcAudioTrack, "flush", "()V");
-  jmethodID jmRelease           = jenv->GetMethodID(jcAudioTrack, "release", "()V");
-  jmethodID jmWrite             = jenv->GetMethodID(jcAudioTrack, "write", "([BII)I");
-  jmethodID jmPlayState         = jenv->GetMethodID(jcAudioTrack, "getPlayState", "()I");
-  jmethodID jmPlayHeadPosition  = jenv->GetMethodID(jcAudioTrack, "getPlaybackHeadPosition", "()I");
-  jmethodID jmGetMinBufferSize  = jenv->GetStaticMethodID(jcAudioTrack, "getMinBufferSize", "(III)I");
-
-  jint audioFormat    = GetStaticIntField(jenv, "AudioFormat", "ENCODING_PCM_16BIT");
-  jint channelConfig  = GetStaticIntField(jenv, "AudioFormat", "CHANNEL_OUT_STEREO");
-
-  jint min_buffer_size = jenv->CallStaticIntMethod(jcAudioTrack, jmGetMinBufferSize,
-    m_format.m_sampleRate, channelConfig, audioFormat);
-
-  m_sink_frameSize = m_format.m_channelLayout.Count() * CAEUtil::DataFormatToBits(AE_FMT_S16LE) >> 3;
-  m_min_frames = min_buffer_size / m_sink_frameSize;
-
-  m_audiotrackbuffer_sec = (double)m_min_frames / (double)m_format.m_sampleRate;
-  m_audiotrack_empty_sec = 0.0;
-
-  // setup a 1/4 second internal sink lockless ring buffer
-  m_sinkbuffer = new AERingBuffer(m_sink_frameSize * m_format.m_sampleRate / 4);
-  m_sinkbuffer_sec_per_byte = 1.0 / (double)(m_sink_frameSize * m_format.m_sampleRate);
-  m_sinkbuffer_sec = (double)m_sinkbuffer_sec_per_byte * m_sinkbuffer->GetMaxSize();
-
-  jobject joAudioTrack = jenv->NewObject(jcAudioTrack, jmInit,
-    GetStaticIntField(jenv, "AudioManager", "STREAM_MUSIC"),
-    m_format.m_sampleRate,
-    channelConfig,
-    audioFormat,
-    min_buffer_size,
-    GetStaticIntField(jenv, "AudioTrack", "MODE_STREAM"));
-
-  // Set the initial volume
-  float volume = 1.0;
-  if (!m_passthrough)
-    volume = m_volume;
-  CXBMCApp::SetSystemVolume(jenv, volume);
-
-  // The AudioTrack object has been created and waiting to play,
-  m_inited.Set();
-  // yield to give other threads a chance to do some work.
-  sched_yield();
-
-  // cache the playing int value.
-  jint playing = GetStaticIntField(jenv, "AudioTrack", "PLAYSTATE_PLAYING");
-
-  // create a java byte buffer for writing pcm data to AudioTrack.
-  jarray jbuffer = jenv->NewByteArray(min_buffer_size);
-
-  int64_t frames_written = 0;
-  int64_t frame_position = 0;
-
-  while (!m_bStop)
-  {
-    if (m_volume_changed && !m_passthrough)
-    {
-      // check of volume changes and make them,
-      // do it here to keep jni calls local to this thread.
-      CXBMCApp::SetSystemVolume(jenv, m_volume);
-      CSingleLock lock(m_volume_lock);
-      m_volume_changed = false;
-    }
-    if (m_draining)
-    {
-      unsigned char byte_drain[1024];
-      unsigned int  byte_drain_size = m_sinkbuffer->GetReadSize();
-      if (byte_drain_size > 1024)
-        byte_drain_size = 1024;
-      while (byte_drain_size)
-      {
-        m_sinkbuffer->Read(byte_drain, byte_drain_size);
-        byte_drain_size = m_sinkbuffer->GetReadSize();
-        if (byte_drain_size > 1024)
-          byte_drain_size = 1024;
-      }
-      jenv->CallVoidMethod(joAudioTrack, jmStop);
-      jenv->CallVoidMethod(joAudioTrack, jmFlush);
-      CSingleLock lock(m_drain_lock);
-      m_draining = false;
-    }
-
-    unsigned int read_bytes = m_sinkbuffer->GetReadSize();
-    if (read_bytes > (unsigned int)min_buffer_size)
-      read_bytes = min_buffer_size;
-
-    if (read_bytes > 0)
-    {
-      // android will auto pause the playstate when it senses idle,
-      // check it and set playing if it does this. Do this before
-      // writing into its buffer.
-      if (jenv->CallIntMethod(joAudioTrack, jmPlayState) != playing)
-        jenv->CallVoidMethod( joAudioTrack, jmPlay);
-
-      // Write a buffer of audio data to Java AudioTrack.
-      // Warning, no other JNI function can be called after
-      // GetPrimitiveArrayCritical until ReleasePrimitiveArrayCritical.
-      void *pBuffer = jenv->GetPrimitiveArrayCritical(jbuffer, NULL);
-      if (pBuffer)
-      {
-        m_sinkbuffer->Read((unsigned char*)pBuffer, read_bytes);
-        jenv->ReleasePrimitiveArrayCritical(jbuffer, pBuffer, 0);
-        // jmWrite is blocking and returns when the data has been transferred
-        // from the Java layer and queued for playback.
-        jenv->CallIntMethod(joAudioTrack, jmWrite, jbuffer, 0, read_bytes);
-      }
-    }
-    // calc the number of seconds until audiotrack buffer is empty.
-    frame_position = jenv->CallIntMethod(joAudioTrack, jmPlayHeadPosition);
-    if (frame_position == 0)
-      frames_written = 0;
-    frames_written += read_bytes / m_sink_frameSize;
-    m_audiotrack_empty_sec = (double)(frames_written - frame_position) / m_format.m_sampleRate;
-    // some times, we can get frame_position
-    // ahead of frames_written, not a clue why. clamp it.
-    if (m_audiotrack_empty_sec < 0.0f)
-      m_audiotrack_empty_sec = 0.0f;
-
-    if (m_sinkbuffer->GetReadSize() == 0)
-    {
-      // the sink buffer is empty, stop playback.
-      // Audiotrack will playout any written contents.
-      jenv->CallVoidMethod(joAudioTrack, jmStop);
-      // sleep this audio thread, we will get woken when we have audio data.
-      m_wake.WaitMSec(250);
-    }
-  }
-
-  jenv->CallVoidMethod(joAudioTrack, jmStop);
-  jenv->CallVoidMethod(joAudioTrack, jmFlush);
-  jenv->CallVoidMethod(joAudioTrack, jmRelease);
-
-  // might toss an exception on jmRelease so catch it.
-  jthrowable exception = jenv->ExceptionOccurred();
-  if (exception)
-  {
-    jenv->ExceptionDescribe();
-    jenv->ExceptionClear();
-  }
-
-  jenv->DeleteLocalRef(jbuffer);
-  jenv->DeleteLocalRef(joAudioTrack);
-  jenv->DeleteLocalRef(jcAudioTrack);
-}
index 30c6f59..e63778d 100644 (file)
  *
  */
 
-#include "Interfaces/AESink.h"
-#include "Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 #include "threads/CriticalSection.h"
 
 class AERingBuffer;
+namespace jni
+{
+class CJNIAudioTrack;
+};
 
-class CAESinkAUDIOTRACK : public CThread, public IAESink
+class CAESinkAUDIOTRACK : public IAESink
 {
 public:
   virtual const char *GetName() { return "AUDIOTRACK"; }
@@ -35,10 +39,9 @@ public:
 
   virtual bool Initialize(AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual double       GetDelay        ();
-  virtual double       GetCacheTime    ();
+  virtual double       GetLatency      ();
   virtual double       GetCacheTotal   ();
   virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   virtual void         Drain           ();
@@ -47,27 +50,17 @@ public:
   static void          EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false);
 
 private:
-  virtual void Process();
+  jni::CJNIAudioTrack  *m_at_jni;
+  // m_frames_written must wrap at UINT32_MAX
+  uint32_t              m_frames_written;
 
   static CAEDeviceInfo m_info;
   AEAudioFormat      m_format;
+  AEAudioFormat      m_lastFormat;
   double             m_volume;
-  bool               m_volume_changed;
-  CCriticalSection   m_volume_lock;
   volatile int       m_min_frames;
   int16_t           *m_alignedS16;
-  AERingBuffer      *m_sinkbuffer;
   unsigned int       m_sink_frameSize;
-  double             m_sinkbuffer_sec;
-  double             m_sinkbuffer_sec_per_byte;
-
-  CEvent             m_wake;
-  CEvent             m_inited;
-  volatile bool      m_draining;
-  CCriticalSection   m_drain_lock;
   bool               m_passthrough;
-
   double             m_audiotrackbuffer_sec;
-  double             m_audiotrack_empty_sec;
-  double             m_audiotrack_empty_sec_tweaks;
 };
index 1170d32..9ebb61e 100644 (file)
@@ -26,6 +26,7 @@
 #include <Mmreg.h>
 #include <list>
 #include "threads/SingleLock.h"
+#include "threads/SystemClock.h"
 #include "utils/SystemInfo.h"
 #include "utils/TimeUtils.h"
 #include "utils/CharsetConverter.h"
@@ -334,47 +335,6 @@ void CAESinkDirectSound::Deinitialize()
   m_dwBufferLen = 0;
 }
 
-bool CAESinkDirectSound::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  if (!m_initialized || m_isDirtyDS)
-    return false;
-
-  u_int notCompatible         = 0;
-  const u_int numTests        = 6;
-  std::string strDiffBecause ("");
-  static const char* compatibleParams[numTests] = {":Devices",
-                                                   ":Channels",
-                                                   ":Sample Rates",
-                                                   ":Data Formats",
-                                                   ":Bluray Formats",
-                                                   ":Passthrough Formats"};
-
-  notCompatible = (notCompatible  +!((AE_IS_RAW(format.m_dataFormat)  == AE_IS_RAW(m_encodedFormat))        ||
-                                     (!AE_IS_RAW(format.m_dataFormat) == !AE_IS_RAW(m_encodedFormat))))     << 1;
-  notCompatible = (notCompatible  + ((format.m_dataFormat             == AE_FMT_EAC3)                       ||
-                                     (format.m_dataFormat             == AE_FMT_DTSHD                       ||
-                                     (format.m_dataFormat             == AE_FMT_TRUEHD))))                  << 1;
-  notCompatible = (notCompatible  + !(format.m_dataFormat             == m_format.m_dataFormat))            << 1;
-  notCompatible = (notCompatible  + !(format.m_sampleRate             == m_format.m_sampleRate))            << 1;
-  notCompatible = (notCompatible  + !(format.m_channelLayout.Count()  == m_format.m_channelLayout.Count())) << 1;
-  notCompatible = (notCompatible  + !(m_device                        == device));
-
-  if (!notCompatible)
-  {
-    CLog::Log(LOGDEBUG, __FUNCTION__": Formats compatible - reusing existing sink");
-    return true;
-  }
-
-  for (int i = 0; i < numTests ; i++)
-  {
-    strDiffBecause += (notCompatible & 0x01) ? (std::string) compatibleParams[i] : "";
-    notCompatible    = notCompatible >> 1;
-  }
-
-  CLog::Log(LOGDEBUG, __FUNCTION__": Formats Incompatible due to different %s", strDiffBecause.c_str());
-  return false;
-}
-
 unsigned int CAESinkDirectSound::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio, bool blocking)
 {
   if (!m_initialized)
@@ -481,19 +441,6 @@ double CAESinkDirectSound::GetDelay()
   return delay;
 }
 
-double CAESinkDirectSound::GetCacheTime()
-{
-  if (!m_initialized)
-    return 0.0;
-
-  /* Make sure we know how much data is in the cache */
-  UpdateCacheStatus();
-
-  /** returns current cached data duration in seconds */
-  double delay = (double)m_CacheLen / (double)m_AvgBytesPerSec;
-  return delay;
-}
-
 double CAESinkDirectSound::GetCacheTotal()
 {
   /** returns total cache capacity in seconds */
index fc81fb6..417a151 100644 (file)
  *
  */
 
-#include "Interfaces/AESink.h"
 #include <stdint.h>
 #include <dsound.h>
-#include "../Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 
 #include "threads/CriticalSection.h"
 
@@ -36,12 +36,10 @@ public:
 
   virtual bool Initialize  (AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual void         Stop               ();
   virtual void         Drain              ();
   virtual double       GetDelay           ();
-  virtual double       GetCacheTime       ();
   virtual double       GetCacheTotal      ();
   virtual unsigned int AddPackets         (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   static  std::string  GetDefaultDevice   ();
index dfa5753..74ffb05 100644 (file)
@@ -75,25 +75,12 @@ void CAESinkNULL::Deinitialize()
   StopThread();
 }
 
-bool CAESinkNULL::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  return ((m_format.m_sampleRate    == format.m_sampleRate) &&
-          (m_format.m_dataFormat    == format.m_dataFormat) &&
-          (m_format.m_channelLayout == format.m_channelLayout));
-}
-
 double CAESinkNULL::GetDelay()
 {
   double sinkbuffer_seconds_to_empty = m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer_level;
   return sinkbuffer_seconds_to_empty;
 }
 
-double CAESinkNULL::GetCacheTime()
-{
-  double sinkbuffer_seconds_to_empty = m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer_level;
-  return sinkbuffer_seconds_to_empty;
-}
-
 double CAESinkNULL::GetCacheTotal()
 {
   return m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer_size;
index 8b49f00..f796028 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include "system.h"
-
+#include "threads/Thread.h"
 #include "cores/AudioEngine/Interfaces/AESink.h"
 
 class CAESinkNULL : public CThread, public IAESink
@@ -33,10 +33,8 @@ public:
 
   virtual bool Initialize(AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual double       GetDelay        ();
-  virtual double       GetCacheTime    ();
   virtual double       GetCacheTotal   ();
   virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   virtual void         Drain           ();
index 1f88326..f6ec980 100644 (file)
@@ -22,7 +22,7 @@
 #include <stdint.h>
 #include <limits.h>
 
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 #include "utils/StdString.h"
 #include "utils/log.h"
 #include "threads/SingleLock.h"
@@ -374,19 +374,6 @@ inline CAEChannelInfo CAESinkOSS::GetChannelLayout(AEAudioFormat format)
   return info;
 }
 
-bool CAESinkOSS::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  AEAudioFormat tmp  = format;
-  tmp.m_channelLayout = GetChannelLayout(format);
-
-  return (
-    tmp.m_sampleRate    == m_initFormat.m_sampleRate    &&
-    tmp.m_dataFormat    == m_initFormat.m_dataFormat    &&
-    tmp.m_channelLayout == m_initFormat.m_channelLayout &&
-    GetDeviceUse(tmp, device) == m_device
-  );
-}
-
 void CAESinkOSS::Stop()
 {
 #ifdef SNDCTL_DSP_RESET
index 2f9a1ee..1454b3c 100644 (file)
@@ -19,8 +19,8 @@
  *
  */
 
-#include "Interfaces/AESink.h"
-#include "Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 #include <stdint.h>
 
 #include "threads/CriticalSection.h"
@@ -35,11 +35,9 @@ public:
 
   virtual bool Initialize  (AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual void         Stop            ();
   virtual double       GetDelay        ();
-  virtual double       GetCacheTime    () { return 0.0; } /* FIXME */
   virtual double       GetCacheTotal   () { return 0.0; } /* FIXME */
   virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   virtual void         Drain           ();
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp
new file mode 100644 (file)
index 0000000..d227b2d
--- /dev/null
@@ -0,0 +1,844 @@
+/*
+ *      Copyright (C) 2010-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+#include "system.h"
+#ifdef HAS_PULSEAUDIO
+#include "AESinkPULSE.h"
+#include "utils/log.h"
+#include "Util.h"
+#include "guilib/LocalizeStrings.h"
+
+using namespace std;
+
+static const char *ContextStateToString(pa_context_state s)
+{
+  switch (s)
+  {
+    case PA_CONTEXT_UNCONNECTED:
+      return "unconnected";
+    case PA_CONTEXT_CONNECTING:
+      return "connecting";
+    case PA_CONTEXT_AUTHORIZING:
+      return "authorizing";
+    case PA_CONTEXT_SETTING_NAME:
+      return "setting name";
+    case PA_CONTEXT_READY:
+      return "ready";
+    case PA_CONTEXT_FAILED:
+      return "failed";
+    case PA_CONTEXT_TERMINATED:
+      return "terminated";
+    default:
+      return "none";
+  }
+}
+
+static const char *StreamStateToString(pa_stream_state s)
+{
+  switch(s)
+  {
+    case PA_STREAM_UNCONNECTED:
+      return "unconnected";
+    case PA_STREAM_CREATING:
+      return "creating";
+    case PA_STREAM_READY:
+      return "ready";
+    case PA_STREAM_FAILED:
+      return "failed";
+    case PA_STREAM_TERMINATED:
+      return "terminated";
+    default:
+      return "none";
+  }
+}
+
+static pa_sample_format AEFormatToPulseFormat(AEDataFormat format)
+{
+  switch (format)
+  {
+    case AE_FMT_U8    : return PA_SAMPLE_U8;
+    case AE_FMT_S16LE : return PA_SAMPLE_S16LE;
+    case AE_FMT_S16BE : return PA_SAMPLE_S16BE;
+    case AE_FMT_S16NE : return PA_SAMPLE_S16NE;
+    case AE_FMT_S24LE3: return PA_SAMPLE_S24LE;
+    case AE_FMT_S24BE3: return PA_SAMPLE_S24BE;
+    case AE_FMT_S24NE3: return PA_SAMPLE_S24NE;
+    case AE_FMT_S24LE4: return PA_SAMPLE_S24_32LE;
+    case AE_FMT_S24BE4: return PA_SAMPLE_S24_32BE;
+    case AE_FMT_S24NE4: return PA_SAMPLE_S24_32NE;
+    case AE_FMT_S32BE : return PA_SAMPLE_S32BE;
+    case AE_FMT_S32LE : return PA_SAMPLE_S32LE;
+    case AE_FMT_S32NE : return PA_SAMPLE_S32NE;
+    case AE_FMT_FLOAT : return PA_SAMPLE_FLOAT32;
+
+    case AE_FMT_AC3:
+    case AE_FMT_DTS:
+    case AE_FMT_EAC3:
+      return PA_SAMPLE_S16NE;
+
+    default:
+      return PA_SAMPLE_INVALID;
+  }
+}
+
+static pa_encoding AEFormatToPulseEncoding(AEDataFormat format)
+{
+  switch (format)
+  {
+    case AE_FMT_AC3   : return PA_ENCODING_AC3_IEC61937;
+    case AE_FMT_DTS   : return PA_ENCODING_DTS_IEC61937;
+    case AE_FMT_EAC3  : return PA_ENCODING_EAC3_IEC61937;
+
+    default:
+      return PA_ENCODING_PCM;
+  }
+}
+
+static AEDataFormat defaultDataFormats[] = {
+  AE_FMT_U8,
+  AE_FMT_S16LE,
+  AE_FMT_S16BE,
+  AE_FMT_S16NE,
+  AE_FMT_S24LE3,
+  AE_FMT_S24BE3,
+  AE_FMT_S24NE3,
+  AE_FMT_S24LE4,
+  AE_FMT_S24BE4,
+  AE_FMT_S24NE4,
+  AE_FMT_S32BE,
+  AE_FMT_S32LE,
+  AE_FMT_S32NE,
+  AE_FMT_FLOAT
+};
+
+static unsigned int defaultSampleRates[] = {
+  5512,
+  8000,
+  11025,
+  16000,
+  22050,
+  32000,
+  44100,
+  48000,
+  64000,
+  88200,
+  96000,
+  176400,
+  192000,
+  384000
+};
+
+/* Static callback functions */
+
+static void ContextStateCallback(pa_context *c, void *userdata)
+{
+  pa_threaded_mainloop *m = (pa_threaded_mainloop *)userdata;
+  switch (pa_context_get_state(c))
+  {
+    case PA_CONTEXT_READY:
+    case PA_CONTEXT_TERMINATED:
+    case PA_CONTEXT_UNCONNECTED:
+    case PA_CONTEXT_CONNECTING:
+    case PA_CONTEXT_AUTHORIZING:
+    case PA_CONTEXT_SETTING_NAME:
+    case PA_CONTEXT_FAILED:
+      pa_threaded_mainloop_signal(m, 0);
+      break;
+  }
+}
+
+static void StreamStateCallback(pa_stream *s, void *userdata)
+{
+  pa_threaded_mainloop *m = (pa_threaded_mainloop *)userdata;
+  switch (pa_stream_get_state(s))
+  {
+    case PA_STREAM_UNCONNECTED:
+    case PA_STREAM_CREATING:
+    case PA_STREAM_READY:
+    case PA_STREAM_FAILED:
+    case PA_STREAM_TERMINATED:
+      pa_threaded_mainloop_signal(m, 0);
+      break;
+  }
+}
+
+static void StreamRequestCallback(pa_stream *s, size_t length, void *userdata)
+{
+  pa_threaded_mainloop *m = (pa_threaded_mainloop *)userdata;
+  pa_threaded_mainloop_signal(m, 0);
+}
+
+static void StreamLatencyUpdateCallback(pa_stream *s, void *userdata)
+{
+  pa_threaded_mainloop *m = (pa_threaded_mainloop *)userdata;
+  pa_threaded_mainloop_signal(m, 0);
+}
+struct SinkInfoStruct
+{
+  AEDeviceInfoList *list;
+  bool isHWDevice;
+  bool device_found;
+  pa_threaded_mainloop *mainloop;
+  SinkInfoStruct()
+  {
+    list = NULL;
+    isHWDevice = false;
+    device_found = true;
+    mainloop = NULL;
+  }
+};
+
+static void SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata)
+{
+  SinkInfoStruct *sinkStruct = (SinkInfoStruct *)userdata;
+  if(i)
+  {
+    if (i->flags && (i->flags & PA_SINK_HARDWARE))
+      sinkStruct->isHWDevice = true;
+
+    sinkStruct->device_found = true;
+  }
+  pa_threaded_mainloop_signal(sinkStruct->mainloop, 0);
+}
+
+static AEChannel PAChannelToAEChannel(pa_channel_position_t channel)
+{
+  AEChannel ae_channel;
+  switch (channel)
+  {
+    case PA_CHANNEL_POSITION_FRONT_LEFT:            ae_channel = AE_CH_FL; break;
+    case PA_CHANNEL_POSITION_FRONT_RIGHT:           ae_channel = AE_CH_FR; break;
+    case PA_CHANNEL_POSITION_FRONT_CENTER:          ae_channel = AE_CH_FC; break;
+    case PA_CHANNEL_POSITION_LFE:                   ae_channel = AE_CH_LFE; break;
+    case PA_CHANNEL_POSITION_REAR_LEFT:             ae_channel = AE_CH_BL; break;
+    case PA_CHANNEL_POSITION_REAR_RIGHT:            ae_channel = AE_CH_BR; break;
+    case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:  ae_channel = AE_CH_FLOC; break;
+    case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: ae_channel = AE_CH_FROC; break;
+    case PA_CHANNEL_POSITION_REAR_CENTER:           ae_channel = AE_CH_BC; break;
+    case PA_CHANNEL_POSITION_SIDE_LEFT:             ae_channel = AE_CH_SL; break;
+    case PA_CHANNEL_POSITION_SIDE_RIGHT:            ae_channel = AE_CH_SR; break;
+    case PA_CHANNEL_POSITION_TOP_FRONT_LEFT:        ae_channel = AE_CH_TFL; break;
+    case PA_CHANNEL_POSITION_TOP_FRONT_RIGHT:       ae_channel = AE_CH_TFR; break;
+    case PA_CHANNEL_POSITION_TOP_FRONT_CENTER:      ae_channel = AE_CH_TFC; break;
+    case PA_CHANNEL_POSITION_TOP_CENTER:            ae_channel = AE_CH_TC; break;
+    case PA_CHANNEL_POSITION_TOP_REAR_LEFT:         ae_channel = AE_CH_TBL; break;
+    case PA_CHANNEL_POSITION_TOP_REAR_RIGHT:        ae_channel = AE_CH_TBR; break;
+    case PA_CHANNEL_POSITION_TOP_REAR_CENTER:       ae_channel = AE_CH_TBC; break;
+    default:                                        ae_channel = AE_CH_NULL; break;
+  }
+  return ae_channel;
+}
+
+static pa_channel_position_t AEChannelToPAChannel(AEChannel ae_channel)
+{
+  pa_channel_position_t pa_channel;
+  switch (ae_channel)
+  {
+    case AE_CH_FL:    pa_channel = PA_CHANNEL_POSITION_FRONT_LEFT; break;
+    case AE_CH_FR:    pa_channel = PA_CHANNEL_POSITION_FRONT_RIGHT; break;
+    case AE_CH_FC:    pa_channel = PA_CHANNEL_POSITION_FRONT_CENTER; break;
+    case AE_CH_LFE:   pa_channel = PA_CHANNEL_POSITION_LFE; break;
+    case AE_CH_BL:    pa_channel = PA_CHANNEL_POSITION_REAR_LEFT; break;
+    case AE_CH_BR:    pa_channel = PA_CHANNEL_POSITION_REAR_RIGHT; break;
+    case AE_CH_FLOC:  pa_channel = PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER; break;
+    case AE_CH_FROC:  pa_channel = PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER; break;
+    case AE_CH_BC:    pa_channel = PA_CHANNEL_POSITION_REAR_CENTER; break;
+    case AE_CH_SL:    pa_channel = PA_CHANNEL_POSITION_SIDE_LEFT; break;
+    case AE_CH_SR:    pa_channel = PA_CHANNEL_POSITION_SIDE_RIGHT; break;
+    case AE_CH_TFL:   pa_channel = PA_CHANNEL_POSITION_TOP_FRONT_LEFT; break;
+    case AE_CH_TFR:   pa_channel = PA_CHANNEL_POSITION_TOP_FRONT_RIGHT; break;
+    case AE_CH_TFC:   pa_channel = PA_CHANNEL_POSITION_TOP_FRONT_CENTER; break;
+    case AE_CH_TC:    pa_channel = PA_CHANNEL_POSITION_TOP_CENTER; break;
+    case AE_CH_TBL:   pa_channel = PA_CHANNEL_POSITION_TOP_REAR_LEFT; break;
+    case AE_CH_TBR:   pa_channel = PA_CHANNEL_POSITION_TOP_REAR_RIGHT; break;
+    case AE_CH_TBC:   pa_channel = PA_CHANNEL_POSITION_TOP_REAR_CENTER; break;
+    default:          pa_channel = PA_CHANNEL_POSITION_INVALID; break;
+  }
+  return pa_channel;
+}
+
+static pa_channel_map AEChannelMapToPAChannel(CAEChannelInfo info)
+{
+  pa_channel_map map;
+  pa_channel_map_init(&map);
+  pa_channel_position_t pos;
+  for (unsigned int i = 0; i < info.Count(); ++i)
+  {
+    pos = AEChannelToPAChannel(info[i]);
+    if(pos != PA_CHANNEL_POSITION_INVALID)
+    {
+      // remember channel name and increase channel count
+      map.map[map.channels++] = pos;
+    }
+  }
+  return map;
+}
+
+static CAEChannelInfo PAChannelToAEChannelMap(pa_channel_map channels)
+{
+  CAEChannelInfo info;
+  AEChannel ch;
+  info.Reset();
+  for (unsigned int i=0; i<channels.channels; i++)
+  {
+    ch = PAChannelToAEChannel(channels.map[i]);
+    if(ch != AE_CH_NULL)
+      info += ch;
+  }
+  return info;
+}
+
+static void SinkInfoRequestCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata)
+{
+
+  SinkInfoStruct *sinkStruct = (SinkInfoStruct *)userdata;
+
+  if(sinkStruct && sinkStruct->list->empty())
+  {
+    //add a default device first
+    CAEDeviceInfo defaultDevice;
+    defaultDevice.m_deviceName = std::string("Default");
+    defaultDevice.m_displayName = std::string("Default");
+    defaultDevice.m_displayNameExtra = std::string("Default Output Device (PULSEAUDIO)");
+    defaultDevice.m_dataFormats.insert(defaultDevice.m_dataFormats.end(), defaultDataFormats, defaultDataFormats + sizeof(defaultDataFormats) / sizeof(defaultDataFormats[0]));
+    defaultDevice.m_channels = CAEChannelInfo(AE_CH_LAYOUT_2_0);
+    defaultDevice.m_sampleRates.assign(defaultSampleRates, defaultSampleRates + sizeof(defaultSampleRates) / sizeof(defaultSampleRates[0]));
+    defaultDevice.m_deviceType = AE_DEVTYPE_PCM;
+    sinkStruct->list->push_back(defaultDevice);
+  }
+  bool valid = true;
+  if (i && i->name)
+  {
+    CAEDeviceInfo device;
+
+    device.m_deviceName = string(i->name);
+    device.m_displayName = string(i->description);
+    if (i->active_port && i->active_port->description)
+      device.m_displayNameExtra = std::string((i->active_port->description)).append(" (PULSEAUDIO)");
+    else
+      device.m_displayNameExtra = std::string((i->description)).append(" (PULSEAUDIO)");
+    unsigned int device_type = AE_DEVTYPE_PCM; //0
+
+    device.m_channels = PAChannelToAEChannelMap(i->channel_map);
+
+    // Don't add devices that would not have a channel map
+    if(device.m_channels.Count() == 0)
+      valid = false;
+
+    device.m_sampleRates.assign(defaultSampleRates, defaultSampleRates + sizeof(defaultSampleRates) / sizeof(defaultSampleRates[0]));
+
+    for (unsigned int j = 0; j < i->n_formats; j++)
+    {
+      switch(i->formats[j]->encoding)
+      {
+        case PA_ENCODING_AC3_IEC61937:
+          device.m_dataFormats.push_back(AE_FMT_AC3);
+          device_type = AE_DEVTYPE_IEC958;
+          break;
+        case PA_ENCODING_DTS_IEC61937:
+          device.m_dataFormats.push_back(AE_FMT_DTS);
+          device_type = AE_DEVTYPE_IEC958;
+          break;
+        case PA_ENCODING_EAC3_IEC61937:
+          device.m_dataFormats.push_back(AE_FMT_EAC3);
+          device_type = AE_DEVTYPE_IEC958;
+          break;
+        case PA_ENCODING_PCM:
+          device.m_dataFormats.insert(device.m_dataFormats.end(), defaultDataFormats, defaultDataFormats + sizeof(defaultDataFormats) / sizeof(defaultDataFormats[0]));
+          break;
+        default:
+          break;
+      }
+    }
+    // passthrough is only working when device has Stereo channel config
+    if (device_type > AE_DEVTYPE_PCM && device.m_channels.Count() == 2)
+      device.m_deviceType = AE_DEVTYPE_IEC958;
+    else
+      device.m_deviceType = AE_DEVTYPE_PCM;
+    if(valid)
+    {
+      CLog::Log(LOGDEBUG, "PulseAudio: Found %s with devicestring %s", device.m_displayName.c_str(), device.m_deviceName.c_str());
+      sinkStruct->list->push_back(device);
+    }
+    else
+    {
+      CLog::Log(LOGDEBUG, "PulseAudio: Skipped %s with devicestring %s", device.m_displayName.c_str(), device.m_deviceName.c_str());
+    }
+ }
+  pa_threaded_mainloop_signal(sinkStruct->mainloop, 0);
+}
+
+/* PulseAudio class memberfunctions*/
+
+
+CAESinkPULSE::CAESinkPULSE()
+{
+  m_IsAllocated = false;
+  m_MainLoop = NULL;
+  m_BytesPerSecond = 0;
+  m_BufferSize = 0;
+  m_Channels = 0;
+  m_Stream = NULL;
+  m_Context = NULL;
+}
+
+CAESinkPULSE::~CAESinkPULSE()
+{
+  Deinitialize();
+}
+
+bool CAESinkPULSE::Initialize(AEAudioFormat &format, std::string &device)
+{
+  m_IsAllocated = false;
+  m_BytesPerSecond = 0;
+  m_BufferSize = 0;
+  m_Channels = 0;
+  m_Stream = NULL;
+  m_Context = NULL;
+
+  if (!SetupContext(NULL, &m_Context, &m_MainLoop))
+  {
+    CLog::Log(LOGNOTICE, "PulseAudio might not be running. Context was not created.");
+    Deinitialize();
+    return false;
+  }
+
+  pa_threaded_mainloop_lock(m_MainLoop);
+
+  struct pa_channel_map map;
+  pa_channel_map_init(&map);
+
+  bool passthrough = AE_IS_RAW(format.m_dataFormat);
+
+  if(passthrough)
+  {
+    map.channels = 2;
+    format.m_channelLayout = AE_CH_LAYOUT_2_0;
+  }
+  else
+  {
+    map = AEChannelMapToPAChannel(format.m_channelLayout);
+    // if count has changed we need to fit the AE Map
+    if(map.channels != format.m_channelLayout.Count())
+      format.m_channelLayout = PAChannelToAEChannelMap(map);
+  }
+  m_Channels = format.m_channelLayout.Count();
+
+  pa_cvolume_reset(&m_Volume, m_Channels);
+
+  pa_format_info *info[1];
+  info[0] = pa_format_info_new();
+  info[0]->encoding = AEFormatToPulseEncoding(format.m_dataFormat);
+  if(!passthrough)
+  {
+    pa_format_info_set_sample_format(info[0], AEFormatToPulseFormat(format.m_dataFormat));
+    pa_format_info_set_channel_map(info[0], &map);
+  }
+  pa_format_info_set_channels(info[0], m_Channels);
+
+  // PA requires m_encodedRate in order to do EAC3
+  unsigned int samplerate;
+  if (passthrough)
+  {
+    if (format.m_encodedRate == 0)
+    {
+      CLog::Log(LOGNOTICE, "PulseAudio: Passthrough in use but m_encodedRate is not set - fallback to m_sampleRate");
+      samplerate = format.m_sampleRate;
+    }
+    else
+      samplerate = format.m_encodedRate;
+  }
+  else
+    samplerate = format.m_sampleRate;
+
+  pa_format_info_set_rate(info[0], samplerate);
+
+  if (!pa_format_info_valid(info[0]))
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Invalid format info");
+    pa_format_info_free(info[0]);
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  pa_sample_spec spec;
+  #if PA_CHECK_VERSION(2,0,0)
+    pa_format_info_to_sample_spec(info[0], &spec, NULL);
+  #else
+    spec.rate = (AEFormatToPulseEncoding(format.m_dataFormat) == PA_ENCODING_EAC3_IEC61937) ? 4 * samplerate : samplerate;
+    spec.format = AEFormatToPulseFormat(format.m_dataFormat);
+    spec.channels = m_Channels;
+  #endif
+  if (!pa_sample_spec_valid(&spec))
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Invalid sample spec");
+    pa_format_info_free(info[0]);
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  m_BytesPerSecond = pa_bytes_per_second(&spec);
+  unsigned int frameSize = pa_frame_size(&spec);
+
+  m_Stream = pa_stream_new_extended(m_Context, "audio stream", info, 1, NULL);
+  pa_format_info_free(info[0]);
+
+  if (m_Stream == NULL)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Could not create a stream");
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  pa_stream_set_state_callback(m_Stream, StreamStateCallback, m_MainLoop);
+  pa_stream_set_write_callback(m_Stream, StreamRequestCallback, m_MainLoop);
+  pa_stream_set_latency_update_callback(m_Stream, StreamLatencyUpdateCallback, m_MainLoop);
+
+  bool isDefaultDevice = (device == "Default");
+
+  pa_buffer_attr buffer_attr;
+  SinkInfoStruct sinkStruct;
+  sinkStruct.mainloop = m_MainLoop;
+  sinkStruct.isHWDevice = false;
+  sinkStruct.device_found = true; // needed to get default device opened
+
+  if (!isDefaultDevice)
+  {
+    // we need to check if the device we want to open really exists
+    // default device is handled in a special manner
+    sinkStruct.device_found = false; // if sink is valid it will be set true in pa_context_get_sink_info_by_name
+    WaitForOperation(pa_context_get_sink_info_by_name(m_Context, device.c_str(),SinkInfoCallback, &sinkStruct), m_MainLoop, "Get Sink Info");
+  }
+
+  if(!sinkStruct.device_found) // ActiveAE will open us again with a valid device name
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Sink %s not found", device.c_str());
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  // 200ms max latency
+  // 50ms min packet size
+  if(sinkStruct.isHWDevice || isDefaultDevice)
+  {
+    unsigned int latency = m_BytesPerSecond / 5;
+    unsigned int process_time = latency / 4;
+    memset(&buffer_attr, 0, sizeof(buffer_attr));
+    buffer_attr.tlength = (uint32_t) latency;
+    buffer_attr.minreq = (uint32_t) process_time;
+    buffer_attr.maxlength = (uint32_t) -1;
+    buffer_attr.prebuf = (uint32_t) -1;
+    buffer_attr.fragsize = (uint32_t) latency;
+  }
+
+  if (pa_stream_connect_playback(m_Stream, isDefaultDevice ? NULL : device.c_str(), sinkStruct.isHWDevice ? &buffer_attr : NULL, ((pa_stream_flags)(PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY)), &m_Volume, NULL) < 0)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Failed to connect stream to output");
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  /* Wait until the stream is ready */
+  do
+  {
+    pa_threaded_mainloop_wait(m_MainLoop);
+    CLog::Log(LOGDEBUG, "PulseAudio: Stream %s", StreamStateToString(pa_stream_get_state(m_Stream)));
+  }
+  while (pa_stream_get_state(m_Stream) != PA_STREAM_READY && pa_stream_get_state(m_Stream) != PA_STREAM_FAILED);
+
+  if (pa_stream_get_state(m_Stream) == PA_STREAM_FAILED)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Waited for the stream but it failed");
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+
+  const pa_buffer_attr *a;
+
+  if (!(a = pa_stream_get_buffer_attr(m_Stream)))
+  {
+    CLog::Log(LOGERROR, "PulseAudio: %s", pa_strerror(pa_context_errno(m_Context)));
+    pa_threaded_mainloop_unlock(m_MainLoop);
+    Deinitialize();
+    return false;
+  }
+  else
+  {
+    unsigned int packetSize = a->minreq;
+    m_BufferSize = a->tlength;
+
+    format.m_frames = packetSize / frameSize;
+  }
+
+  pa_threaded_mainloop_unlock(m_MainLoop);
+
+  m_IsAllocated = true;
+  format.m_frameSize = frameSize;
+  format.m_frameSamples = format.m_frames * format.m_channelLayout.Count();
+  m_format = format;
+  format.m_dataFormat = passthrough ? AE_FMT_S16NE : format.m_dataFormat;
+
+  Pause(false);
+
+  return true;
+}
+
+void CAESinkPULSE::Deinitialize()
+{
+  m_IsAllocated = false;
+
+  if (m_Stream)
+    Drain();
+
+  if (m_MainLoop)
+    pa_threaded_mainloop_stop(m_MainLoop);
+
+  if (m_Stream)
+  {
+    pa_stream_disconnect(m_Stream);
+    pa_stream_unref(m_Stream);
+    m_Stream = NULL;
+  }
+
+  if (m_Context)
+  {
+    pa_context_disconnect(m_Context);
+    pa_context_unref(m_Context);
+    m_Context = NULL;
+  }
+
+  if (m_MainLoop)
+  {
+    pa_threaded_mainloop_free(m_MainLoop);
+    m_MainLoop = NULL;
+  }
+}
+
+double CAESinkPULSE::GetDelay()
+{
+  if (!m_IsAllocated)
+    return 0;
+
+  int error = 0;
+  pa_usec_t latency = (pa_usec_t) -1;
+  pa_threaded_mainloop_lock(m_MainLoop);
+  if ((error = pa_stream_get_latency(m_Stream, &latency, NULL)) < 0)
+  {
+    if (error == -PA_ERR_NODATA)
+    {
+      WaitForOperation(pa_stream_update_timing_info(m_Stream, NULL,NULL), m_MainLoop, "Update Timing Information");
+      if ((error = pa_stream_get_latency(m_Stream, &latency, NULL)) < 0)
+      {
+        CLog::Log(LOGDEBUG, "GetDelay - Failed to get Latency %d", error); 
+      }
+    }
+  }
+  if (error < 0 )
+    latency = (pa_usec_t) 0;
+
+  pa_threaded_mainloop_unlock(m_MainLoop);
+  return latency / 1000000.0;
+}
+
+double CAESinkPULSE::GetCacheTotal()
+{
+  return (float)m_BufferSize / (float)m_BytesPerSecond;
+}
+
+unsigned int CAESinkPULSE::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio, bool blocking)
+{
+  if (!m_IsAllocated)
+    return frames;
+
+  pa_threaded_mainloop_lock(m_MainLoop);
+
+  unsigned int available = frames * m_format.m_frameSize;
+  unsigned int length = 0;
+  // revisit me after Gotham - should use a callback for the write function
+  while ((length = pa_stream_writable_size(m_Stream)) == 0)
+    pa_threaded_mainloop_wait(m_MainLoop);
+
+  length =  std::min((unsigned int)length, available);
+
+  int error = pa_stream_write(m_Stream, data, length, NULL, 0, PA_SEEK_RELATIVE);
+  pa_threaded_mainloop_unlock(m_MainLoop);
+
+  if (error)
+  {
+    CLog::Log(LOGERROR, "CPulseAudioDirectSound::AddPackets - pa_stream_write failed\n");
+    return 0;
+  }
+
+  return (unsigned int)(length / m_format.m_frameSize);
+}
+
+void CAESinkPULSE::Drain()
+{
+  if (!m_IsAllocated)
+    return;
+
+  pa_threaded_mainloop_lock(m_MainLoop);
+  WaitForOperation(pa_stream_drain(m_Stream, NULL, NULL), m_MainLoop, "Drain");
+  pa_threaded_mainloop_unlock(m_MainLoop);
+}
+
+void CAESinkPULSE::SetVolume(float volume)
+{
+  if (m_IsAllocated)
+  {
+    pa_threaded_mainloop_lock(m_MainLoop);
+    pa_volume_t pavolume = pa_sw_volume_from_linear(volume);
+    if ( pavolume <= 0 )
+      pa_cvolume_mute(&m_Volume, m_Channels);
+    else
+      pa_cvolume_set(&m_Volume, m_Channels, pavolume);
+    pa_operation *op = pa_context_set_sink_input_volume(m_Context, pa_stream_get_index(m_Stream), &m_Volume, NULL, NULL);
+    if (op == NULL)
+      CLog::Log(LOGERROR, "PulseAudio: Failed to set volume");
+    else
+      pa_operation_unref(op);
+
+    pa_threaded_mainloop_unlock(m_MainLoop);
+  }
+}
+
+void CAESinkPULSE::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
+{
+  pa_context *context;
+  pa_threaded_mainloop *mainloop;
+
+  if (!SetupContext(NULL, &context, &mainloop))
+  {
+    CLog::Log(LOGNOTICE, "PulseAudio might not be running. Context was not created.");
+    return;
+  }
+
+  pa_threaded_mainloop_lock(mainloop);
+
+  SinkInfoStruct sinkStruct;
+  sinkStruct.mainloop = mainloop;
+  sinkStruct.list = &list;
+  WaitForOperation(pa_context_get_sink_info_list(context, SinkInfoRequestCallback, &sinkStruct), mainloop, "EnumerateAudioSinks");
+
+  pa_threaded_mainloop_unlock(mainloop);
+
+  if (mainloop)
+    pa_threaded_mainloop_stop(mainloop);
+
+  if (context)
+  {
+    pa_context_disconnect(context);
+    pa_context_unref(context);
+    context = NULL;
+  }
+
+  if (mainloop)
+  {
+    pa_threaded_mainloop_free(mainloop);
+    mainloop = NULL;
+  }
+}
+
+bool CAESinkPULSE::Pause(bool pause)
+{
+  pa_threaded_mainloop_lock(m_MainLoop);
+
+  if (!WaitForOperation(pa_stream_cork(m_Stream, pause ? 1 : 0, NULL, NULL), m_MainLoop, pause ? "Pause" : "Resume"))
+    pause = !pause;
+
+  pa_threaded_mainloop_unlock(m_MainLoop);
+
+  return pause;
+}
+
+inline bool CAESinkPULSE::WaitForOperation(pa_operation *op, pa_threaded_mainloop *mainloop, const char *LogEntry = "")
+{
+  if (op == NULL)
+    return false;
+
+  bool sucess = true;
+
+  while (pa_operation_get_state(op) == PA_OPERATION_RUNNING)
+    pa_threaded_mainloop_wait(mainloop);
+
+  if (pa_operation_get_state(op) != PA_OPERATION_DONE)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: %s Operation failed", LogEntry);
+    sucess = false;
+  }
+
+  pa_operation_unref(op);
+  return sucess;
+}
+
+bool CAESinkPULSE::SetupContext(const char *host, pa_context **context, pa_threaded_mainloop **mainloop)
+{
+  if ((*mainloop = pa_threaded_mainloop_new()) == NULL)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Failed to allocate main loop");
+    return false;
+  }
+
+  if (((*context) = pa_context_new(pa_threaded_mainloop_get_api(*mainloop), "XBMC")) == NULL)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Failed to allocate context");
+    return false;
+  }
+
+  pa_context_set_state_callback(*context, ContextStateCallback, *mainloop);
+
+  if (pa_context_connect(*context, host, (pa_context_flags_t)0, NULL) < 0)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Failed to connect context");
+    return false;
+  }
+  pa_threaded_mainloop_lock(*mainloop);
+
+  if (pa_threaded_mainloop_start(*mainloop) < 0)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Failed to start MainLoop");
+    pa_threaded_mainloop_unlock(*mainloop);
+    return false;
+  }
+
+  /* Wait until the context is ready */
+  do
+  {
+    pa_threaded_mainloop_wait(*mainloop);
+    CLog::Log(LOGDEBUG, "PulseAudio: Context %s", ContextStateToString(pa_context_get_state(*context)));
+  }
+  while (pa_context_get_state(*context) != PA_CONTEXT_READY && pa_context_get_state(*context) != PA_CONTEXT_FAILED);
+
+  if (pa_context_get_state(*context) == PA_CONTEXT_FAILED)
+  {
+    CLog::Log(LOGERROR, "PulseAudio: Waited for the Context but it failed");
+    pa_threaded_mainloop_unlock(*mainloop);
+    return false;
+  }
+
+  pa_threaded_mainloop_unlock(*mainloop);
+  return true;
+}
+#endif
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h
new file mode 100644 (file)
index 0000000..2992d81
--- /dev/null
@@ -0,0 +1,66 @@
+#pragma once
+/*
+ *      Copyright (C) 2010-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "system.h"
+
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "Utils/AEDeviceInfo.h"
+#include "Utils/AEUtil.h"
+#include <pulse/pulseaudio.h>
+
+class CAESinkPULSE : public IAESink
+{
+public:
+  virtual const char *GetName() { return "PULSE"; }
+
+  CAESinkPULSE();
+  virtual ~CAESinkPULSE();
+
+  virtual bool Initialize(AEAudioFormat &format, std::string &device);
+  virtual void Deinitialize();
+
+  virtual double       GetDelay        ();
+  virtual double       GetCacheTotal   ();
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
+  virtual void         Drain           ();
+
+  virtual bool HasVolume() { return true; };
+  virtual void SetVolume(float volume);
+
+  static void EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false);
+private:
+  bool Pause(bool pause);
+  static inline bool WaitForOperation(pa_operation *op, pa_threaded_mainloop *mainloop, const char *LogEntry);
+  static bool SetupContext(const char *host, pa_context **context, pa_threaded_mainloop **mainloop);
+
+  bool m_IsAllocated;
+
+  AEAudioFormat m_format;
+  unsigned int m_BytesPerSecond;
+  unsigned int m_BufferSize;
+  unsigned int m_Channels;
+  
+  pa_stream *m_Stream;
+  pa_cvolume m_Volume;
+
+  pa_context *m_Context;
+  pa_threaded_mainloop *m_MainLoop;
+};
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkPi.cpp
new file mode 100644 (file)
index 0000000..54c8ac8
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ *      Copyright (C) 2010-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "system.h"
+
+#if defined(TARGET_RASPBERRY_PI)
+
+#include <stdint.h>
+#include <limits.h>
+
+#include "AESinkPi.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
+#include "utils/log.h"
+#include "settings/Settings.h"
+#include "linux/RBP.h"
+
+#define CLASSNAME "CAESinkPi"
+
+#define NUM_OMX_BUFFERS 2
+#define AUDIO_PLAYBUFFER (1.0/20.0)
+
+CAEDeviceInfo CAESinkPi::m_info;
+
+CAESinkPi::CAESinkPi() :
+    m_sinkbuffer_size(0),
+    m_sinkbuffer_sec_per_byte(0),
+    m_Initialized(false),
+    m_submitted(0)
+{
+}
+
+CAESinkPi::~CAESinkPi()
+{
+}
+
+void CAESinkPi::SetAudioDest()
+{
+  OMX_ERRORTYPE omx_err   = OMX_ErrorNone;
+  OMX_CONFIG_BRCMAUDIODESTINATIONTYPE audioDest;
+  OMX_INIT_STRUCTURE(audioDest);
+  if (CSettings::Get().GetString("audiooutput.audiodevice") == "PI:Analogue")
+    strncpy((char *)audioDest.sName, "local", strlen("local"));
+  else
+    strncpy((char *)audioDest.sName, "hdmi", strlen("hdmi"));
+  omx_err = m_omx_render.SetConfig(OMX_IndexConfigBrcmAudioDestination, &audioDest);
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s::%s - m_omx_render.SetConfig omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+}
+
+bool CAESinkPi::Initialize(AEAudioFormat &format, std::string &device)
+{
+  char response[80];
+  /* if we are raw need to let gpu know */
+  if (AE_IS_RAW(format.m_dataFormat))
+  {
+    vc_gencmd(response, sizeof response, "hdmi_stream_channels 1");
+    m_passthrough = true;
+  }
+  else
+  {
+    vc_gencmd(response, sizeof response, "hdmi_stream_channels 0");
+    m_passthrough = false;
+  }
+
+  m_initDevice = device;
+  m_initFormat = format;
+  // setup for a 50ms sink feed from SoftAE
+  format.m_dataFormat    = AE_FMT_S16NE;
+  format.m_frames        = format.m_sampleRate * AUDIO_PLAYBUFFER;
+  format.m_frameSamples  = format.m_channelLayout.Count();
+  format.m_frameSize     = format.m_frameSamples * (CAEUtil::DataFormatToBits(format.m_dataFormat) >> 3);
+  format.m_sampleRate    = std::max(8000U, std::min(96000U, format.m_sampleRate));
+
+  m_format = format;
+
+  m_sinkbuffer_size = format.m_frameSize * format.m_frames * NUM_OMX_BUFFERS;
+  m_sinkbuffer_sec_per_byte = 1.0 / (double)(format.m_frameSize * format.m_sampleRate);
+
+  CLog::Log(LOGDEBUG, "%s:%s Format:%d Channels:%d Samplerate:%d framesize:%d bufsize:%d bytes/s=%.2f", CLASSNAME, __func__,
+                format.m_dataFormat, format.m_channelLayout.Count(), format.m_sampleRate, format.m_frameSize, m_sinkbuffer_size, 1.0/m_sinkbuffer_sec_per_byte);
+
+  // This may be called before Application calls g_RBP.Initialise, so call it here too
+  g_RBP.Initialize();
+
+  CLog::Log(LOGDEBUG, "%s:%s", CLASSNAME, __func__);
+
+  OMX_ERRORTYPE omx_err   = OMX_ErrorNone;
+
+  if (!m_omx_render.Initialize("OMX.broadcom.audio_render", OMX_IndexParamAudioInit))
+    CLog::Log(LOGERROR, "%s::%s - m_omx_render.Initialize omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+
+  OMX_INIT_STRUCTURE(m_pcm_input);
+  m_pcm_input.nPortIndex            = m_omx_render.GetInputPort();
+  m_pcm_input.eNumData              = OMX_NumericalDataSigned;
+  m_pcm_input.eEndian               = OMX_EndianLittle;
+  m_pcm_input.bInterleaved          = OMX_TRUE;
+  m_pcm_input.nBitPerSample         = 16;
+  m_pcm_input.ePCMMode              = OMX_AUDIO_PCMModeLinear;
+  m_pcm_input.nChannels             = m_format.m_frameSamples;
+  m_pcm_input.nSamplingRate         = m_format.m_sampleRate;
+  m_pcm_input.eChannelMapping[0] = OMX_AUDIO_ChannelLF;
+  m_pcm_input.eChannelMapping[1] = OMX_AUDIO_ChannelRF;
+  m_pcm_input.eChannelMapping[2] = OMX_AUDIO_ChannelMax;
+
+  omx_err = m_omx_render.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_input);
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s::%s - error m_omx_render SetParameter omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+
+  m_omx_render.ResetEos();
+
+  SetAudioDest();
+
+  // set up the number/size of buffers for decoder input
+  OMX_PARAM_PORTDEFINITIONTYPE port_param;
+  OMX_INIT_STRUCTURE(port_param);
+  port_param.nPortIndex = m_omx_render.GetInputPort();
+
+  omx_err = m_omx_render.GetParameter(OMX_IndexParamPortDefinition, &port_param);
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s:%s - error get OMX_IndexParamPortDefinition (input) omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+
+  port_param.nBufferCountActual = std::max((unsigned int)port_param.nBufferCountMin, (unsigned int)NUM_OMX_BUFFERS);
+  port_param.nBufferSize = m_sinkbuffer_size / port_param.nBufferCountActual;
+
+  omx_err = m_omx_render.SetParameter(OMX_IndexParamPortDefinition, &port_param);
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s:%s - error set OMX_IndexParamPortDefinition (intput) omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+
+  omx_err = m_omx_render.AllocInputBuffers();
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s:%s - Error alloc buffers 0x%08x", CLASSNAME, __func__, omx_err);
+
+  omx_err = m_omx_render.SetStateForComponent(OMX_StateExecuting);
+  if (omx_err != OMX_ErrorNone)
+    CLog::Log(LOGERROR, "%s:%s - m_omx_render OMX_StateExecuting omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+
+  m_Initialized = true;
+  return true;
+}
+
+
+void CAESinkPi::Deinitialize()
+{
+  CLog::Log(LOGDEBUG, "%s:%s", CLASSNAME, __func__);
+  if (m_Initialized)
+  {
+    m_omx_render.FlushAll();
+    m_omx_render.Deinitialize();
+    m_Initialized = false;
+  }
+}
+
+bool CAESinkPi::IsCompatible(const AEAudioFormat &format, const std::string &device)
+{
+  bool compatible =
+      /* compare against the requested format and the real format */
+      (m_initFormat.m_sampleRate    == format.m_sampleRate    || m_format.m_sampleRate    == format.m_sampleRate   ) &&
+      (m_initFormat.m_dataFormat    == format.m_dataFormat    || m_format.m_dataFormat    == format.m_dataFormat   ) &&
+      (m_initFormat.m_channelLayout == format.m_channelLayout || m_format.m_channelLayout == format.m_channelLayout) &&
+      (m_initDevice == device);
+  CLog::Log(LOGDEBUG, "%s:%s Format:%d Channels:%d Samplerate:%d = %d", CLASSNAME, __func__, format.m_dataFormat, format.m_channelLayout.Count(), format.m_sampleRate, compatible);
+  return compatible;
+}
+
+double CAESinkPi::GetDelay()
+{
+  OMX_PARAM_U32TYPE param;
+  OMX_INIT_STRUCTURE(param);
+
+  if (!m_Initialized)
+    return 0.0;
+
+  param.nPortIndex = m_omx_render.GetInputPort();
+
+  OMX_ERRORTYPE omx_err = m_omx_render.GetConfig(OMX_IndexConfigAudioRenderingLatency, &param);
+
+  if (omx_err != OMX_ErrorNone)
+  {
+    CLog::Log(LOGERROR, "%s::%s - error getting OMX_IndexConfigAudioRenderingLatency error 0x%08x",
+      CLASSNAME, __func__, omx_err);
+  }
+  double sinkbuffer_seconds_to_empty = m_sinkbuffer_sec_per_byte * param.nU32 * m_format.m_frameSize;
+  return sinkbuffer_seconds_to_empty;
+}
+
+double CAESinkPi::GetCacheTime()
+{
+  return GetDelay();
+}
+
+double CAESinkPi::GetCacheTotal()
+{
+  double audioplus_buffer = AUDIO_PLAYBUFFER;
+  return m_sinkbuffer_sec_per_byte * (double)m_sinkbuffer_size + audioplus_buffer;
+}
+
+unsigned int CAESinkPi::AddPackets(uint8_t *data, unsigned int frames, bool hasAudio, bool blocking)
+{
+  unsigned int sent = 0;
+
+  if (!m_Initialized)
+    return frames;
+
+  OMX_ERRORTYPE omx_err   = OMX_ErrorNone;
+  OMX_BUFFERHEADERTYPE *omx_buffer = NULL;
+  while (sent < frames)
+  {
+    int timeout = blocking ? 1000 : 0;
+
+    // delay compared to maximum we'd like (to keep lag low)
+    double delay = GetDelay();
+    bool too_laggy = delay - AUDIO_PLAYBUFFER > 0.0;
+    omx_buffer = too_laggy ? NULL : m_omx_render.GetInputBuffer(timeout);
+
+    if (omx_buffer == NULL)
+    {
+      if (too_laggy)
+      {
+        Sleep((int)((delay - AUDIO_PLAYBUFFER) * 1000.0));
+        continue;
+      }
+      if (blocking)
+        CLog::Log(LOGERROR, "COMXAudio::Decode timeout");
+      break;
+    }
+
+    omx_buffer->nFilledLen = std::min(omx_buffer->nAllocLen, (frames - sent) * m_format.m_frameSize);
+    omx_buffer->nTimeStamp = ToOMXTime(0);
+    omx_buffer->nFlags = 0;
+    memcpy(omx_buffer->pBuffer, (uint8_t *)data + sent * m_format.m_frameSize, omx_buffer->nFilledLen);
+    sent += omx_buffer->nFilledLen / m_format.m_frameSize;
+
+    if (sent == frames)
+      omx_buffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+
+    if (delay <= 0.0 && m_submitted)
+      CLog::Log(LOGERROR, "%s:%s Underrun (delay:%.2f frames:%d)", CLASSNAME, __func__, delay, frames);
+
+    omx_err = m_omx_render.EmptyThisBuffer(omx_buffer);
+    if (omx_err != OMX_ErrorNone)
+      CLog::Log(LOGERROR, "%s:%s frames=%d err=%x", CLASSNAME, __func__, frames, omx_err);
+    m_submitted += omx_buffer->nFilledLen;
+  }
+
+  return sent;
+}
+
+void CAESinkPi::Drain()
+{
+  int delay = (int)(GetDelay() * 1000.0);
+  if (delay)
+    Sleep(delay);
+  CLog::Log(LOGDEBUG, "%s:%s delay:%dms now:%dms", CLASSNAME, __func__, delay, (int)(GetDelay() * 1000.0));
+}
+
+void CAESinkPi::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
+{
+  m_info.m_channels.Reset();
+  m_info.m_dataFormats.clear();
+  m_info.m_sampleRates.clear();
+
+  m_info.m_deviceType = AE_DEVTYPE_HDMI;
+  m_info.m_deviceName = "HDMI";
+  m_info.m_displayName = "HDMI";
+  m_info.m_displayNameExtra = "";
+  m_info.m_channels += AE_CH_FL;
+  m_info.m_channels += AE_CH_FR;
+  m_info.m_sampleRates.push_back(48000);
+  m_info.m_dataFormats.push_back(AE_FMT_S16LE);
+
+  list.push_back(m_info);
+
+  m_info.m_channels.Reset();
+  m_info.m_dataFormats.clear();
+  m_info.m_sampleRates.clear();
+
+  m_info.m_deviceType = AE_DEVTYPE_PCM;
+  m_info.m_deviceName = "Analogue";
+  m_info.m_displayName = "Analogue";
+  m_info.m_displayNameExtra = "";
+  m_info.m_channels += AE_CH_FL;
+  m_info.m_channels += AE_CH_FR;
+  m_info.m_sampleRates.push_back(48000);
+  m_info.m_dataFormats.push_back(AE_FMT_S16LE);
+
+  list.push_back(m_info);
+}
+
+#endif
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPi.h b/xbmc/cores/AudioEngine/Sinks/AESinkPi.h
new file mode 100644 (file)
index 0000000..4cca143
--- /dev/null
@@ -0,0 +1,66 @@
+#pragma once
+/*
+ *      Copyright (C) 2010-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "system.h"
+
+#if defined(TARGET_RASPBERRY_PI)
+
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
+
+#include "cores/omxplayer/OMXAudio.h"
+
+class CAESinkPi : public IAESink
+{
+public:
+  virtual const char *GetName() { return "SinkPi"; }
+
+  CAESinkPi();
+  virtual ~CAESinkPi();
+
+  virtual bool Initialize(AEAudioFormat &format, std::string &device);
+  virtual void Deinitialize();
+  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
+
+  virtual double       GetDelay        ();
+  virtual double       GetCacheTime    ();
+  virtual double       GetCacheTotal   ();
+  virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
+  virtual void         Drain           ();
+
+  static void          EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false);
+private:
+  void                 SetAudioDest();
+
+  std::string          m_initDevice;
+  AEAudioFormat        m_initFormat;
+  AEAudioFormat        m_format;
+  unsigned int         m_sinkbuffer_size;  ///< total size of the buffer
+  double               m_sinkbuffer_sec_per_byte;
+  static CAEDeviceInfo m_info;
+  bool                 m_Initialized;
+  uint32_t             m_submitted;
+  OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_input;
+  COMXCoreComponent    m_omx_render;
+  bool                 m_passthrough;
+};
+
+#endif
index 2daf846..381fa12 100644 (file)
 
 #include "system.h"
 
-#include "AESinkProfiler.h"
 #include <stdint.h>
 #include <limits.h>
 
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/Sinks/AESinkProfiler.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 #include "utils/StdString.h"
 #include "utils/log.h"
 #include "utils/TimeUtils.h"
@@ -55,17 +55,6 @@ void CAESinkProfiler::Deinitialize()
 {
 }
 
-bool CAESinkProfiler::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  if (AE_IS_RAW(format.m_dataFormat))
-    return false;
-
-  if (format.m_dataFormat != AE_FMT_FLOAT)
-    return false;
-
-  return true;
-}
-
 double CAESinkProfiler::GetDelay()
 {
   return 0.0f;
index 07fa76c..eaa8699 100644 (file)
@@ -21,7 +21,7 @@
 
 #include "system.h"
 
-#include "Interfaces/AESink.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
 #include <stdint.h>
 
 class CAESinkProfiler : public IAESink
@@ -34,10 +34,8 @@ public:
 
   virtual bool Initialize  (AEAudioFormat &format, std::string &device);
   virtual void Deinitialize();
-  virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
   virtual double       GetDelay        ();
-  virtual double       GetCacheTime    () { return 0.0; }
   virtual double       GetCacheTotal   () { return 0.0; }
   virtual unsigned int AddPackets      (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
   virtual void         Drain           ();
index 2e774b4..cc3804a 100644 (file)
 #include <Mmreg.h>
 #include <stdint.h>
 
-#include "../Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
 #include "settings/AdvancedSettings.h"
 #include "utils/StdString.h"
 #include "utils/log.h"
 #include "threads/SingleLock.h"
+#include "threads/SystemClock.h"
 #include "utils/CharsetConverter.h"
-#include "../Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 #include <Mmreg.h>
 #include <mmdeviceapi.h>
 #include "utils/StringUtils.h"
@@ -375,44 +376,6 @@ void CAESinkWASAPI::Deinitialize()
   m_bufferPtr = 0;
 }
 
-bool CAESinkWASAPI::IsCompatible(const AEAudioFormat &format, const std::string &device)
-{
-  if (!m_initialized || m_isDirty)
-    return false;
-
-  u_int notCompatible         = 0;
-  const u_int numTests        = 5;
-  std::string strDiffBecause ("");
-  static const char* compatibleParams[numTests] = {":Devices",
-                                                   ":Channels",
-                                                   ":Sample Rates",
-                                                   ":Data Formats",
-                                                   ":Passthrough Formats"};
-
-  notCompatible = (notCompatible  +!((AE_IS_RAW(format.m_dataFormat)  == AE_IS_RAW(m_encodedFormat))        ||
-                                     (!AE_IS_RAW(format.m_dataFormat) == !AE_IS_RAW(m_encodedFormat))))     << 1;
-  notCompatible = (notCompatible  +!((sinkReqFormat                   == format.m_dataFormat)               &&
-                                     (sinkRetFormat                   == m_format.m_dataFormat)))           << 1;
-  notCompatible = (notCompatible  + !(format.m_sampleRate             == m_format.m_sampleRate))            << 1;
-  notCompatible = (notCompatible  + !(format.m_channelLayout.Count()  == m_format.m_channelLayout.Count())) << 1;
-  notCompatible = (notCompatible  + !(m_device                        == device));
-
-  if (!notCompatible)
-  {
-    CLog::Log(LOGDEBUG, __FUNCTION__": Formats compatible - reusing existing sink");
-    return true;
-  }
-
-  for (int i = 0; i < numTests ; i++)
-  {
-    strDiffBecause += (notCompatible & 0x01) ? (std::string) compatibleParams[i] : "";
-    notCompatible    = notCompatible >> 1;
-  }
-
-  CLog::Log(LOGDEBUG, __FUNCTION__": Formats Incompatible due to different %s", strDiffBecause.c_str());
-  return false;
-}
-
 double CAESinkWASAPI::GetDelay()
 {
   if (!m_initialized)
@@ -433,22 +396,6 @@ double CAESinkWASAPI::GetDelay()
   return delay;
 }
 
-double CAESinkWASAPI::GetCacheTime()
-{
-  /* This function deviates from the defined usage due to the event-driven */
-  /* mode of WASAPI utilizing twin buffers which are written to in single  */
-  /* buffer chunks. Therefore the buffers are either 100% full or 50% full */
-  /* At 50% issues arise with water levels in the stream and player. For   */
-  /* this reason the cache is shown as 100% full at all times, and control */
-  /* of the buffer filling is assumed in AddPackets() and by the WASAPI    */
-  /* implementation of the WaitforSingleObject event indicating one of the */
-  /* buffers is ready for filling via AddPackets                           */
-  if (!m_initialized)
-    return 0.0;
-
-  return m_sinkLatency;
-}
-
 double CAESinkWASAPI::GetCacheTotal()
 {
   if (!m_initialized)
@@ -1060,51 +1007,72 @@ bool CAESinkWASAPI::InitializeExclusive(AEAudioFormat &format)
   CLog::Log(LOGERROR, __FUNCTION__": IsFormatSupported failed (%s) - trying to find a compatible format", WASAPIErrToStr(hr));
 
   int closestMatch;
+  unsigned int requestedChannels = wfxex.Format.nChannels;
+  unsigned int noOfCh;
 
   /* The requested format is not supported by the device.  Find something that works */
-  for (int j = 0; j < sizeof(testFormats)/sizeof(sampleFormat); j++)
+  for (int layout = -1; layout <= (int)ARRAYSIZE(layoutsList); layout++)
   {
-    closestMatch = -1;
-
-    wfxex.Format.wFormatTag           = WAVE_FORMAT_EXTENSIBLE;
-    wfxex.SubFormat                   = testFormats[j].subFormat;
-    wfxex.Format.wBitsPerSample       = testFormats[j].bitsPerSample;
-    wfxex.Samples.wValidBitsPerSample = testFormats[j].validBitsPerSample;
-    wfxex.Format.nBlockAlign          = wfxex.Format.nChannels * (wfxex.Format.wBitsPerSample >> 3);
+    // if requested layout is not suppported, try standard layouts with at least
+    // the number of channels as requested
+    // as the last resort try stereo
+    if (layout == ARRAYSIZE(layoutsList))
+    {
+      wfxex.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT;
+      wfxex.Format.nChannels = 2;
+    }
+    else if (layout >= 0)
+    {
+      wfxex.dwChannelMask = ChLayoutToChMask(layoutsList[layout], &noOfCh);
+      wfxex.Format.nChannels = noOfCh;
+      if (noOfCh < requestedChannels)
+        continue;
+    }
 
-    for (int i = 0 ; i < WASAPISampleRateCount; i++)
+    for (int j = 0; j < sizeof(testFormats)/sizeof(sampleFormat); j++)
     {
-      wfxex.Format.nSamplesPerSec    = WASAPISampleRates[i];
-      wfxex.Format.nAvgBytesPerSec   = wfxex.Format.nSamplesPerSec * wfxex.Format.nBlockAlign;
-
-      /* Trace format match iteration loop via log */
-      #if 0
-      CLog::Log(LOGDEBUG, "WASAPI: Trying Format: %s, %d, %d, %d", CAEUtil::DataFormatToStr(testFormats[j].subFormatType),
-                                                                   wfxex.Format.nSamplesPerSec,
-                                                                   wfxex.Format.wBitsPerSample,
-                                                                   wfxex.Samples.wValidBitsPerSample);
-      #endif
+      closestMatch = -1;
 
-      hr = m_pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, &wfxex.Format, NULL);
+      wfxex.Format.wFormatTag           = WAVE_FORMAT_EXTENSIBLE;
+      wfxex.SubFormat                   = testFormats[j].subFormat;
+      wfxex.Format.wBitsPerSample       = testFormats[j].bitsPerSample;
+      wfxex.Samples.wValidBitsPerSample = testFormats[j].validBitsPerSample;
+      wfxex.Format.nBlockAlign          = wfxex.Format.nChannels * (wfxex.Format.wBitsPerSample >> 3);
 
-      if (SUCCEEDED(hr))
+      for (int i = 0 ; i < WASAPISampleRateCount; i++)
       {
-        /* If the current sample rate matches the source then stop looking and use it */
-        if ((WASAPISampleRates[i] == format.m_sampleRate) && (testFormats[j].subFormatType <= format.m_dataFormat))
-          goto initialize;
-        /* If this rate is closer to the source then the previous one, save it */
-        else if (closestMatch < 0 || abs((int)WASAPISampleRates[i] - (int)format.m_sampleRate) < abs((int)WASAPISampleRates[closestMatch] - (int)format.m_sampleRate))
-          closestMatch = i;
-      }
-      else if (hr != AUDCLNT_E_UNSUPPORTED_FORMAT)
+        wfxex.Format.nSamplesPerSec    = WASAPISampleRates[i];
+        wfxex.Format.nAvgBytesPerSec   = wfxex.Format.nSamplesPerSec * wfxex.Format.nBlockAlign;
+
+        /* Trace format match iteration loop via log */
+#if 0
+        CLog::Log(LOGDEBUG, "WASAPI: Trying Format: %s, %d, %d, %d", CAEUtil::DataFormatToStr(testFormats[j].subFormatType),
+          wfxex.Format.nSamplesPerSec,
+          wfxex.Format.wBitsPerSample,
+          wfxex.Samples.wValidBitsPerSample);
+#endif
+
+        hr = m_pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, &wfxex.Format, NULL);
+
+        if (SUCCEEDED(hr))
+        {
+          /* If the current sample rate matches the source then stop looking and use it */
+          if ((WASAPISampleRates[i] == format.m_sampleRate) && (testFormats[j].subFormatType <= format.m_dataFormat))
+            goto initialize;
+          /* If this rate is closer to the source then the previous one, save it */
+          else if (closestMatch < 0 || abs((int)WASAPISampleRates[i] - (int)format.m_sampleRate) < abs((int)WASAPISampleRates[closestMatch] - (int)format.m_sampleRate))
+            closestMatch = i;
+        }
+        else if (hr != AUDCLNT_E_UNSUPPORTED_FORMAT)
           CLog::Log(LOGERROR, __FUNCTION__": IsFormatSupported failed (%s)", WASAPIErrToStr(hr));
-    }
+      }
 
-    if (closestMatch >= 0)
-    {
-      wfxex.Format.nSamplesPerSec    = WASAPISampleRates[closestMatch];
-      wfxex.Format.nAvgBytesPerSec   = wfxex.Format.nSamplesPerSec * wfxex.Format.nBlockAlign;
-      goto initialize;
+      if (closestMatch >= 0)
+      {
+        wfxex.Format.nSamplesPerSec    = WASAPISampleRates[closestMatch];
+        wfxex.Format.nAvgBytesPerSec   = wfxex.Format.nSamplesPerSec * wfxex.Format.nBlockAlign;
+        goto initialize;
+      }
     }
   }
 
index 83492ec..24b96b7 100644 (file)
 *
 */
 
-#include "../Interfaces/AESink.h"
 #include <stdint.h>
 #include <mmdeviceapi.h>
 #include <Audioclient.h>
-#include "../Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
 
 #include "threads/CriticalSection.h"
 
@@ -37,10 +37,8 @@ public:
 
     virtual bool Initialize  (AEAudioFormat &format, std::string &device);
     virtual void Deinitialize();
-    virtual bool IsCompatible(const AEAudioFormat &format, const std::string &device);
 
     virtual double       GetDelay                    ();
-    virtual double       GetCacheTime                ();
     virtual double       GetCacheTotal               ();
     virtual unsigned int AddPackets                  (uint8_t *data, unsigned int frames, bool hasAudio, bool blocking = false);
     virtual void         Drain                       ();
index 88abac7..9ac5c79 100644 (file)
@@ -125,6 +125,17 @@ typedef struct AEAudioFormat{
     m_frameSamples = 0;
     m_frameSize = 0;
   }
+
+  bool operator==(const AEAudioFormat& fmt) const
+  {
+    return  m_dataFormat    ==  fmt.m_dataFormat    &&
+            m_sampleRate    ==  fmt.m_sampleRate    &&
+            m_encodedRate   ==  fmt.m_encodedRate   &&
+            m_channelLayout ==  fmt.m_channelLayout &&
+            m_frames        ==  fmt.m_frames        &&
+            m_frameSamples  ==  fmt.m_frameSamples  &&
+            m_frameSize     ==  fmt.m_frameSize;
+  }
  
 } AEAudioFormat;
 
index 69b37b4..a051cf5 100644 (file)
@@ -55,11 +55,13 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs)
   bool srcHasSR = false;
   bool srcHasRL = false;
   bool srcHasRR = false;
+  bool srcHasBC = false;
 
   bool dstHasSL = false;
   bool dstHasSR = false;
   bool dstHasRL = false;
   bool dstHasRR = false;
+  bool dstHasBC = false;
 
   for (unsigned int c = 0; c < rhs.m_channelCount; ++c)
     switch(rhs.m_channels[c])
@@ -68,6 +70,7 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs)
       case AE_CH_SR: dstHasSR = true; break;
       case AE_CH_BL: dstHasRL = true; break;
       case AE_CH_BR: dstHasRR = true; break;
+      case AE_CH_BC: dstHasBC = true; break;
       default:
         break;
     }
@@ -81,6 +84,7 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs)
       case AE_CH_SR: srcHasSR = true; break;
       case AE_CH_BL: srcHasRL = true; break;
       case AE_CH_BR: srcHasRR = true; break;
+      case AE_CH_BC: srcHasBC = true; break;
       default:
         break;
     }
@@ -107,6 +111,21 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs)
   if (srcHasRR && !dstHasRR && dstHasSR)
     newInfo += AE_CH_SR;
 
+  // mix back center if not available in destination layout
+  // prefer mixing into backs if available
+  if (srcHasBC && !dstHasBC)
+  {
+    if (dstHasRL && !newInfo.HasChannel(AE_CH_BL))
+      newInfo += AE_CH_BL;
+    else if (dstHasSL && !newInfo.HasChannel(AE_CH_SL))
+      newInfo += AE_CH_SL;
+
+    if (dstHasRR && !newInfo.HasChannel(AE_CH_BR))
+      newInfo += AE_CH_BR;
+    else if (dstHasSR && !newInfo.HasChannel(AE_CH_SR))
+      newInfo += AE_CH_SR;
+  }
+
   *this = newInfo;
 }
 
@@ -169,7 +188,7 @@ CAEChannelInfo& CAEChannelInfo::operator=(const enum AEStdChLayout rhs)
   return *this;
 }
 
-bool CAEChannelInfo::operator==(const CAEChannelInfo& rhs)
+bool CAEChannelInfo::operator==(const CAEChannelInfo& rhs) const
 {
   /* if the channel count doesnt match, no need to check further */
   if (m_channelCount != rhs.m_channelCount)
index ab114ea..2f1bca6 100644 (file)
@@ -78,7 +78,7 @@ public:
   CAEChannelInfo& operator=(const CAEChannelInfo& rhs);
   CAEChannelInfo& operator=(const enum AEChannel* rhs);
   CAEChannelInfo& operator=(const enum AEStdChLayout rhs);
-  bool operator==(const CAEChannelInfo& rhs);
+  bool operator==(const CAEChannelInfo& rhs) const;
   bool operator!=(const CAEChannelInfo& rhs);
   CAEChannelInfo& operator+=(const enum AEChannel& rhs);
   CAEChannelInfo& operator-=(const enum AEChannel& rhs);
index 42dfe6e..e7772be 100644 (file)
@@ -161,11 +161,21 @@ bool Win32DllLoader::Load()
   m_dllHandle = LoadLibraryExW(strDllW.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
   if (!m_dllHandle)
   {
-    LPVOID lpMsgBuf;
     DWORD dw = GetLastError(); 
+    wchar_t* lpMsgBuf = NULL;
+    DWORD strLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPWSTR)&lpMsgBuf, 0, NULL);
+    if (strLen == 0)
+      strLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPWSTR)&lpMsgBuf, 0, NULL);
 
-    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, 0, (LPTSTR) &lpMsgBuf, 0, NULL );
-    CLog::Log(LOGERROR, "%s: Failed to load %s with error %d:%s", __FUNCTION__, CSpecialProtocol::TranslatePath(strFileName).c_str(), dw, lpMsgBuf);
+    if (strLen != 0)
+    {
+      std::string strMessage;
+      g_charsetConverter.wToUTF8(std::wstring(lpMsgBuf, strLen), strMessage);
+      CLog::Log(LOGERROR, "%s: Failed to load \"%s\" with error %lu: \"%s\"", __FUNCTION__, CSpecialProtocol::TranslatePath(strFileName).c_str(), dw, strMessage.c_str());
+    }
+    else
+      CLog::Log(LOGERROR, "%s: Failed to load \"%s\" with error %lu", __FUNCTION__, CSpecialProtocol::TranslatePath(strFileName).c_str(), dw);
+    
     LocalFree(lpMsgBuf);
     return false;
   }
index 1c3ae17..ae9b1c4 100644 (file)
@@ -41,9 +41,9 @@ typedef fpos_t fpos64_t;
 
 typedef void ( *PFV)(void);
 
-#define __IS_STDIN_STREAM(stream)   (stream == stdin  || stream->_file == stdin->_file || stream->_file == 0)
-#define __IS_STDOUT_STREAM(stream)  (stream == stdout || stream->_file == stdout->_file || stream->_file == 1)
-#define __IS_STDERR_STREAM(stream)  (stream == stderr || stream->_file == stderr->_file || stream->_file == 2)
+#define __IS_STDIN_STREAM(stream)  (stream == stdin || fileno(stream) == fileno(stdin) || fileno(stream) == 0)
+#define __IS_STDOUT_STREAM(stream) (stream == stdout || fileno(stream) == fileno(stdout) || fileno(stream) == 1)
+#define __IS_STDERR_STREAM(stream) (stream == stderr || fileno(stream) == fileno(stderr) || fileno(stream) == 2)
 #define IS_STDIN_STREAM(stream)     (stream != NULL && __IS_STDIN_STREAM(stream))
 #define IS_STDOUT_STREAM(stream)    (stream != NULL && __IS_STDOUT_STREAM(stream))
 #define IS_STDERR_STREAM(stream)    (stream != NULL && __IS_STDERR_STREAM(stream))
index 22653f1..3d79c7a 100644 (file)
 #include "system.h"
 #include "threads/CriticalSection.h"
 
-#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID)
+#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
 #define _file _fileno
+#elif defined(__UCLIBC__)
+#define _file __filedes
 #endif
 
 #define MAX_EMULATED_FILES    50
index 7b72a19..81b717e 100644 (file)
@@ -120,7 +120,7 @@ bool CExternalPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &opti
   }
 }
 
-bool CExternalPlayer::CloseFile()
+bool CExternalPlayer::CloseFile(bool reopen)
 {
   m_bAbortRequest = true;
 
@@ -185,7 +185,7 @@ void CExternalPlayer::Process()
       CStdString strMatch = vecSplit[0];
       StringUtils::Replace(strMatch, ",,",",");
       bool bCaseless = vecSplit[3].find('i') != std::string::npos;
-      CRegExp regExp(bCaseless, true);
+      CRegExp regExp(bCaseless, CRegExp::autoUtf8);
 
       if (!regExp.RegComp(strMatch.c_str()))
       { // invalid regexp - complain in logs
index 11a32a5..f30352b 100644 (file)
@@ -36,7 +36,7 @@ public:
   virtual void RegisterAudioCallback(IAudioCallback* pCallback) {}
   virtual void UnRegisterAudioCallback()                        {}
   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options);
-  virtual bool CloseFile();
+  virtual bool CloseFile(bool reopen = false);
   virtual bool IsPlaying() const;
   virtual void Pause();
   virtual bool IsPaused() const;
index 21345ae..62cd1be 100644 (file)
@@ -133,7 +133,7 @@ public:
   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions& options){ return false;}
   virtual bool QueueNextFile(const CFileItem &file) { return false; }
   virtual void OnNothingToQueueNotify() {}
-  virtual bool CloseFile(){ return true;}
+  virtual bool CloseFile(bool reopen = false) = 0;
   virtual bool IsPlaying() const { return false;}
   virtual bool CanPause() { return true; };
   virtual void Pause() = 0;
index 40a2a80..970b822 100644 (file)
@@ -57,6 +57,8 @@ CBaseRenderer::CBaseRenderer()
 
   m_RenderUpdateCallBackFn = NULL;
   m_RenderUpdateCallBackCtx = NULL;
+  m_RenderFeaturesCallBackFn = NULL;
+  m_RenderFeaturesCallBackCtx = NULL;
 }
 
 CBaseRenderer::~CBaseRenderer()
@@ -578,10 +580,21 @@ void CBaseRenderer::ManageDisplay()
   switch(stereo_mode)
   {
     case CONF_FLAGS_STEREO_MODE_TAB:
-      if     (stereo_view == RENDER_STEREO_VIEW_LEFT)
-        m_sourceRect.y2 *= 0.5f;
-      else if(stereo_view == RENDER_STEREO_VIEW_RIGHT)
-        m_sourceRect.y1 += m_sourceRect.y2*0.5f;
+      // Those are flipped in y
+      if (m_format == RENDER_FMT_CVBREF || m_format == RENDER_FMT_EGLIMG || m_format == RENDER_FMT_MEDIACODEC)
+      {
+        if (stereo_view == RENDER_STEREO_VIEW_LEFT)
+          m_sourceRect.y1 += m_sourceRect.y2*0.5f;
+        else if(stereo_view == RENDER_STEREO_VIEW_RIGHT)
+          m_sourceRect.y2 *= 0.5f;
+      }
+      else
+      {
+        if (stereo_view == RENDER_STEREO_VIEW_LEFT)
+          m_sourceRect.y2 *= 0.5f;
+        else if(stereo_view == RENDER_STEREO_VIEW_RIGHT)
+          m_sourceRect.y1 += m_sourceRect.y2*0.5f;
+      }
       break;
 
     case CONF_FLAGS_STEREO_MODE_SBS:
index 5a21fec..dc2712a 100644 (file)
@@ -140,6 +140,7 @@ protected:
 
   // rendering flags
   unsigned m_iFlags;
+  ERenderFormat m_format;
 
   const void* m_RenderUpdateCallBackCtx;
   RenderUpdateCallBackFn m_RenderUpdateCallBackFn;
index aa52f72..0ecaecf 100644 (file)
@@ -71,6 +71,9 @@
   #include "osx/CocoaInterface.h"
   #include <CoreVideo/CoreVideo.h>
   #include <OpenGL/CGLIOSurface.h>
+  #ifdef TARGET_DARWIN_OSX
+    #include "osx/DarwinUtils.h"
+  #endif
 #endif
 
 #ifdef HAS_GLX
@@ -319,6 +322,19 @@ bool CLinuxRendererGL::Configure(unsigned int width, unsigned int height, unsign
 
   m_pboSupported = glewIsSupported("GL_ARB_pixel_buffer_object") && CSettings::Get().GetBool("videoplayer.usepbo");
 
+#ifdef TARGET_DARWIN_OSX
+  // on osx 10.9 mavericks we get a strange ripple
+  // effect when rendering with pbo
+  // when used on intel gpu - we have to quirk it here
+  if (DarwinIsMavericks())
+  {
+    std::string rendervendor = g_Windowing.GetRenderVendor();
+    StringUtils::ToLower(rendervendor);
+    if (rendervendor.find("intel") != std::string::npos)
+      m_pboSupported = false;
+  }
+#endif
+
   return true;
 }
 
@@ -730,6 +746,22 @@ unsigned int CLinuxRendererGL::PreInit()
   GLint size;
   glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_LUMINANCE16, NP2(1920), NP2(1080), 0, GL_LUMINANCE, GL_UNSIGNED_SHORT, NULL);
   glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_LUMINANCE_SIZE, &size);
+#ifdef TARGET_DARWIN_OSX
+  /* From VLC commit 701d1347faa29f52b0a04c587724deb6de1ae28e
+   * OpenGL 1.x on OS X does _not_ support 16bit shaders, but pretends to.
+   * That's why we enforce return false here, even though the actual code below
+   * would return true.
+   * This fixes playback of 10bit content on the Intel GMA 950 chipset, which is
+   * the only "GPU" supported by 10.6 and 10.7 with just an OpenGL 1.4 driver.
+   *
+   * Presumely, this also improves playback on the GMA 3100, GeForce FX 5200,
+   * GeForce4 Ti, GeForce3, GeForce2 MX/4 MX and the Radeon 8500 when
+   * running OS X 10.5. */
+  unsigned int maj, min;
+  g_Windowing.GetRenderVersion(maj, min);
+  if (maj < 2)
+    size = 8;
+#endif
   if(size >= 16)
   {
     m_formats.push_back(RENDER_FMT_YUV420P10);
@@ -830,6 +862,15 @@ void CLinuxRendererGL::UpdateVideoFilter()
         break;
       }
     }
+    else
+    {
+      m_pVideoFilterShader = new DefaultFilterShader();
+      if (!m_pVideoFilterShader->CompileAndLink())
+      {
+        CLog::Log(LOGERROR, "GL: Error compiling and linking video filter shader");
+        break;
+      }
+    }
     return;
 
   case VS_SCALINGMETHOD_LANCZOS2:
@@ -1536,7 +1577,6 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field)
 
   // make sure we know the correct texture size
   GetPlaneTextureSize(plane);
-  CalculateTextureSourceRects(index, 1);
 
   // Try some clamping or wrapping
   glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
@@ -1583,10 +1623,10 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field)
   }
   else
   {
-    glTexCoord2f(m_rotatedDestCoords[0].x, m_rotatedDestCoords[0].y); glVertex4f(m_rotatedDestCoords[0].x, m_rotatedDestCoords[0].y, 0.0f, 0.0f);
-    glTexCoord2f(m_rotatedDestCoords[1].x, m_rotatedDestCoords[1].y); glVertex4f(m_rotatedDestCoords[1].x, m_rotatedDestCoords[1].y, 1.0f, 0.0f);
-    glTexCoord2f(m_rotatedDestCoords[2].x, m_rotatedDestCoords[2].y); glVertex4f(m_rotatedDestCoords[2].x, m_rotatedDestCoords[2].y, 1.0f, 1.0f);
-    glTexCoord2f(m_rotatedDestCoords[3].x, m_rotatedDestCoords[3].y); glVertex4f(m_rotatedDestCoords[3].x, m_rotatedDestCoords[3].y, 0.0f, 1.0f);
+    glTexCoord2f(plane.rect.x1, plane.rect.y1); glVertex4f(m_rotatedDestCoords[0].x, m_rotatedDestCoords[0].y, 0.0f, 0.0f);
+    glTexCoord2f(plane.rect.x2, plane.rect.y1); glVertex4f(m_rotatedDestCoords[1].x, m_rotatedDestCoords[1].y, 1.0f, 0.0f);
+    glTexCoord2f(plane.rect.x2, plane.rect.y2); glVertex4f(m_rotatedDestCoords[2].x, m_rotatedDestCoords[2].y, 1.0f, 1.0f);
+    glTexCoord2f(plane.rect.x1, plane.rect.y2); glVertex4f(m_rotatedDestCoords[3].x, m_rotatedDestCoords[3].y, 0.0f, 1.0f);
   }
   glEnd();
   VerifyGLState();
@@ -2407,23 +2447,27 @@ bool CLinuxRendererGL::UploadVDPAUTexture(int index)
 
   plane.id = vdpau->texture[0];
 
+  // in stereoscopic mode sourceRect may only
+  // be a part of the source video surface
   plane.rect = m_sourceRect;
-  plane.width  = im.width;
-  plane.height = im.height;
 
-  plane.height  /= plane.pixpertex_y;
-  plane.rect.y1 /= plane.pixpertex_y;
-  plane.rect.y2 /= plane.pixpertex_y;
-  plane.width   /= plane.pixpertex_x;
-  plane.rect.x1 /= plane.pixpertex_x;
-  plane.rect.x2 /= plane.pixpertex_x;
+  // clip rect
+  if (vdpau->crop.x1 > plane.rect.x1)
+    plane.rect.x1 = vdpau->crop.x1;
+  if (vdpau->crop.x2 < plane.rect.x2)
+    plane.rect.x2 = vdpau->crop.x2;
+  if (vdpau->crop.y1 > plane.rect.y1)
+    plane.rect.y1 = vdpau->crop.y1;
+  if (vdpau->crop.y2 < plane.rect.y2)
+    plane.rect.y2 = vdpau->crop.y2;
+
+  plane.texheight = vdpau->texHeight;
+  plane.texwidth  = vdpau->texWidth;
 
   if (m_textureTarget == GL_TEXTURE_2D)
   {
-    plane.height  /= plane.texheight;
     plane.rect.y1 /= plane.texheight;
     plane.rect.y2 /= plane.texheight;
-    plane.width   /= plane.texwidth;
     plane.rect.x1 /= plane.texwidth;
     plane.rect.x2 /= plane.texwidth;
   }
index 3311ee6..63ea287 100644 (file)
@@ -238,7 +238,6 @@ protected:
   bool m_bValidated;
   std::vector<ERenderFormat> m_formats;
   bool m_bImageReady;
-  ERenderFormat m_format;
   GLenum m_textureTarget;
   unsigned short m_renderMethod;
   RenderQuality m_renderQuality;
index 4d4a8a6..452a958 100644 (file)
@@ -1417,10 +1417,10 @@ void CLinuxRendererGLES::RenderEglImage(int index, int field)
   }
 
   // Set texture coordinates (is flipped in y)
-  tex[0][0] = tex[3][0] = 0;
-  tex[0][1] = tex[1][1] = 1;
-  tex[1][0] = tex[2][0] = 1;
-  tex[2][1] = tex[3][1] = 0;
+  tex[0][0] = tex[3][0] = plane.rect.x1;
+  tex[0][1] = tex[1][1] = plane.rect.y2;
+  tex[1][0] = tex[2][0] = plane.rect.x2;
+  tex[2][1] = tex[3][1] = plane.rect.y1;
 
   glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, idx);
 
@@ -1558,10 +1558,10 @@ void CLinuxRendererGLES::RenderCoreVideoRef(int index, int field)
   }
 
   // Set texture coordinates (corevideo is flipped in y)
-  tex[0][0] = tex[3][0] = 0;
-  tex[0][1] = tex[1][1] = 1;
-  tex[1][0] = tex[2][0] = 1;
-  tex[2][1] = tex[3][1] = 0;
+  tex[0][0] = tex[3][0] = plane.rect.x1;
+  tex[0][1] = tex[1][1] = plane.rect.y2;
+  tex[1][0] = tex[2][0] = plane.rect.x2;
+  tex[2][1] = tex[3][1] = plane.rect.y1;
 
   glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, idx);
 
index 01db517..45e9c20 100644 (file)
@@ -233,7 +233,6 @@ protected:
   bool m_bValidated;
   std::vector<ERenderFormat> m_formats;
   bool m_bImageReady;
-  ERenderFormat m_format;
   GLenum m_textureTarget;
   unsigned short m_renderMethod;
   unsigned short m_oldRenderMethod;
index 0a29482..bd56d8b 100644 (file)
@@ -33,6 +33,7 @@
 #include "guilib/GUIFont.h"
 #include "cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayText.h"
 #include "cores/VideoRenderers/RenderManager.h"
+#include "cores/VideoRenderers/OverlayRendererUtil.h"
 
 using namespace OVERLAY;
 
@@ -165,7 +166,7 @@ void COverlayText::Render(OVERLAY::SRenderState &state)
   mat.m[0][3] = rd.x1;
   mat.m[1][3] = rd.y1;
 
-  float x = state.x, y = state.y;
+  float x = state.x + GetStereoscopicDepth(), y = state.y;
   mat.InverseTransformPosition(x, y);
 
   g_graphicsContext.SetTransform(mat, 1.0f, 1.0f);
index 14203d9..07e1ca1 100644 (file)
@@ -25,6 +25,8 @@
 #include "cores/dvdplayer/DVDCodecs/Overlay/DVDOverlaySpu.h"
 #include "cores/dvdplayer/DVDCodecs/Overlay/DVDOverlaySSA.h"
 #include "windowing/WindowingFactory.h"
+#include "guilib/GraphicContext.h"
+#include "settings/Settings.h"
 
 namespace OVERLAY {
 
@@ -295,4 +297,13 @@ bool convert_quad(ASS_Image* images, SQuads& quads)
   return true;
 }
 
+int GetStereoscopicDepth()
+{
+  int depth = CSettings::Get().GetInt("subtitles.stereoscopicdepth");
+  if (depth && g_graphicsContext.GetStereoMode() && g_graphicsContext.GetStereoMode() != RENDER_STEREO_MODE_MONO)
+    depth *= (g_graphicsContext.GetStereoView() == RENDER_STEREO_VIEW_LEFT ? 1 : -1);
+
+  return depth;
+}
+
 }
index 394994f..a132149 100644 (file)
@@ -64,5 +64,6 @@ namespace OVERLAY {
                        , int& min_x, int& max_x
                        , int& min_y, int& max_y);
   bool      convert_quad(ASS_Image* images, SQuads& quads);
+  int       GetStereoscopicDepth();
 
 }
index 7dc5014..8c2c3e0 100644 (file)
@@ -65,6 +65,16 @@ BaseVideoFilterShader::BaseVideoFilterShader()
     "gl_FrontColor = gl_Color;"
     "}";
   VertexShader()->SetSource(shaderv);
+
+  string shaderp =
+    "uniform sampler2D img;"
+    "varying vec2 cord;"
+    "void main()"
+    "{"
+    "gl_FragColor.rgb = texture2D(img, cord).rgb;"
+    "gl_FragColor.a = gl_Color.a;"
+    "}";
+  PixelShader()->SetSource(shaderp);
 }
 
 ConvolutionFilterShader::ConvolutionFilterShader(ESCALINGMETHOD method, bool stretch)
@@ -230,4 +240,16 @@ bool StretchFilterShader::OnEnabled()
   return true;
 }
 
+void DefaultFilterShader::OnCompiledAndLinked()
+{
+  m_hSourceTex = glGetUniformLocation(ProgramHandle(), "img");
+}
+
+bool DefaultFilterShader::OnEnabled()
+{
+  glUniform1i(m_hSourceTex, m_sourceTexUnit);
+  VerifyGLState();
+  return true;
+}
+
 #endif
index 2473da7..a489865 100644 (file)
@@ -87,6 +87,13 @@ namespace Shaders {
       bool  OnEnabled();
   };
 
+  class DefaultFilterShader : public BaseVideoFilterShader
+  {
+    public:
+      void  OnCompiledAndLinked();
+      bool  OnEnabled();
+  };
+
 } // end namespace
 
 #endif
index 525027d..7c4ac0d 100644 (file)
@@ -93,6 +93,7 @@ CWinRenderer::CWinRenderer()
   m_clearColour = 0;
   m_format = RENDER_FMT_NONE;
   m_processor = NULL;
+  m_neededBuffers = 0;
 }
 
 CWinRenderer::~CWinRenderer()
index ca0d788..7486464 100644 (file)
@@ -235,7 +235,6 @@ protected:
 
   // clear colour for "black" bars
   DWORD                m_clearColour;
-  ERenderFormat        m_format;
   unsigned int         m_extended_format;
 
   // Width and height of the render target
index 69992cc..2453c65 100644 (file)
@@ -46,7 +46,6 @@ CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
   m_layout = 0;
   
   m_bLpcmMode = false;
-  m_bNeedConversion = false;
 
   m_pFrame1 = NULL;
   m_iSampleFormat = AV_SAMPLE_FMT_NONE;
@@ -117,6 +116,7 @@ bool CDVDAudioCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
   m_pFrame1 = m_dllAvCodec.avcodec_alloc_frame();
   m_bOpenedCodec = true;
   m_iSampleFormat = AV_SAMPLE_FMT_NONE;
+
   return true;
 }
 
@@ -169,7 +169,7 @@ int CDVDAudioCodecFFmpeg::Decode(uint8_t* pData, int iSize)
     m_iBufferSize1 = 0;
     return iBytesUsed;
   }
-  m_iBufferSize1 = m_dllAvUtil.av_samples_get_buffer_size(NULL, m_pCodecContext->channels, m_pFrame1->nb_samples, m_pCodecContext->sample_fmt, 1);
+  m_iBufferSize1 = m_pFrame1->nb_samples * m_pCodecContext->channels * m_dllAvUtil.av_get_bytes_per_sample(m_pCodecContext->sample_fmt);
 
   /* some codecs will attempt to consume more data than what we gave */
   if (iBytesUsed > iSize)
@@ -182,8 +182,23 @@ int CDVDAudioCodecFFmpeg::Decode(uint8_t* pData, int iSize)
     m_iBuffered += iBytesUsed;
   else
     m_iBuffered = 0;
-    
-  if(m_bLpcmMode || m_bNeedConversion)
+  
+  bool convert = false;
+  switch(m_pCodecContext->sample_fmt)
+  {
+    case AV_SAMPLE_FMT_U8:
+    case AV_SAMPLE_FMT_S16:
+    case AV_SAMPLE_FMT_S32:
+    case AV_SAMPLE_FMT_FLT:
+    case AV_SAMPLE_FMT_DBL:
+      break;
+    case AV_SAMPLE_FMT_NONE:
+      CLog::Log(LOGERROR, "CDVDAudioCodecFFmpeg::Decode - invalid data format");
+      return -1;
+    default:
+      convert = true;
+  }
+  if(m_bLpcmMode || convert)
     ConvertToFloat();
 
   return iBytesUsed;
@@ -245,7 +260,7 @@ void CDVDAudioCodecFFmpeg::ConvertToFloat()
     }
 
     m_iBufferSize1 = 0;
-    m_iBufferSize2 = m_dllAvUtil.av_samples_get_buffer_size(NULL, m_pCodecContext->channels, m_pFrame1->nb_samples, AV_SAMPLE_FMT_FLT, 0);
+    m_iBufferSize2 = m_pFrame1->nb_samples * m_pCodecContext->channels * m_dllAvUtil.av_get_bytes_per_sample(AV_SAMPLE_FMT_FLT);
   }
 }
 
@@ -309,10 +324,9 @@ enum AEDataFormat CDVDAudioCodecFFmpeg::GetDataFormat()
       case AV_SAMPLE_FMT_FLT: return AE_FMT_FLOAT;
       case AV_SAMPLE_FMT_DBL: return AE_FMT_DOUBLE;
       case AV_SAMPLE_FMT_NONE:
-        assert(false);
+        CLog::Log(LOGERROR, "CDVDAudioCodecFFmpeg::GetDataFormat - invalid data format");
         return AE_FMT_INVALID;
       default:
-        m_bNeedConversion = true;
         return AE_FMT_FLOAT;
     }
   }
index 3028b24..ab461ab 100644 (file)
@@ -50,8 +50,7 @@ protected:
   SwrContext*         m_pConvert;
   enum AVSampleFormat m_iSampleFormat;  
   CAEChannelInfo      m_channelLayout;
-  bool                m_bLpcmMode;  
-  bool                m_bNeedConversion;
+  bool                m_bLpcmMode;
 
   AVFrame* m_pFrame1;
   int      m_iBufferSize1;
index e1b57ce..a973389 100644 (file)
 #include "utils/StringUtils.h"
 #include "utils/TimeUtils.h"
 
+#if defined(TARGET_ANDROID)
+#include "android/activity/AndroidFeatures.h"
+#include "utils/BitstreamConverter.h"
+#endif
+
 #include <unistd.h>
 #include <queue>
 #include <vector>
@@ -48,6 +53,22 @@ extern "C" {
 #include <amcodec/codec.h>
 }  // extern "C"
 
+typedef struct {
+  bool          noblock;
+  int           video_pid;
+  int           video_type;
+  stream_type_t stream_type;
+  unsigned int  format;
+  unsigned int  width;
+  unsigned int  height;
+  unsigned int  rate;
+  unsigned int  extra;
+  unsigned int  status;
+  unsigned int  ratio;
+  unsigned long long ratio64;
+  void *param;
+} aml_generic_param;
+
 class DllLibamCodecInterface
 {
 public:
@@ -125,6 +146,96 @@ class DllLibAmCodec : public DllDynamic, DllLibamCodecInterface
 
     RESOLVE_METHOD(av_d2q)
   END_METHOD_RESOLVE()
+
+public:
+  void codec_init_para(aml_generic_param *p_in, codec_para_t *p_out)
+  {
+    memset(p_out, 0x00, sizeof(codec_para_t));
+
+#ifdef TARGET_ANDROID
+    bits_writer_t bs = {0};
+
+    // we are always as large as codec_para_t from headers.
+    CBitstreamConverter::init_bits_writer(&bs, (uint8_t*)p_out, sizeof(codec_para_t), 1);
+
+    // order matters, so pay attention
+    // to codec_para_t in codec_types.h
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // CODEC_HANDLE handle
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // CODEC_HANDLE cntl_handle
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // CODEC_HANDLE sub_handle
+
+    // added in JellyBean 4.2
+    if (CAndroidFeatures::GetVersion() > 16)
+      CBitstreamConverter::write_bits(&bs, 32, 0);                 // CODEC_HANDLE audio_utils_handle
+
+    CBitstreamConverter::write_bits(&bs, 32, p_in->stream_type);   // stream_type_t stream_type
+
+    // watch these, using bit fields (which is stupid)
+    CBitstreamConverter::write_bits(&bs,  1, 1);                   // unsigned int has_video:1
+    CBitstreamConverter::write_bits(&bs,  1, 0);                   // unsigned int has_audio:1
+    CBitstreamConverter::write_bits(&bs,  1, 0);                   // unsigned int has_sub:1
+    unsigned int value =  p_in->noblock > 0 ? 1:0;
+    CBitstreamConverter::write_bits(&bs,  1, value);               // unsigned int noblock:1
+    CBitstreamConverter::write_bits(&bs, 28, 0);                   // align back to next word boundary
+
+    CBitstreamConverter::write_bits(&bs, 32, p_in->video_type);    // int video_type
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int audio_type
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int sub_type
+
+    CBitstreamConverter::write_bits(&bs, 32, p_in->video_pid);     // int video_pid
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int audio_pid
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int sub_pid
+
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int audio_channels
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int audio_samplerate
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int vbuf_size
+    CBitstreamConverter::write_bits(&bs, 32, 0);                   // int abuf_size
+
+    // ARM requires 8-byte alignment for 64-bit members (ratio64)
+    // and this will force am_sysinfo to be also have 8-byte alignment.
+    // Since the inclusion of audio_utils_handle for JellyBean 4.2
+    // 'naturally' aligns am_sysinfo to 8-byte, we need to compensate
+    // when we are NOT JellyBean 4.2. If these member values get changed,
+    // then make sure you check that am_sysinfo has 8-byte alignment.
+    if (CAndroidFeatures::GetVersion() < 17)
+      CBitstreamConverter::write_bits(&bs, 32, 0);
+
+    CBitstreamConverter::write_bits(&bs, 32, p_in->format);        // am_sysinfo, unsigned int format
+    CBitstreamConverter::write_bits(&bs, 32, p_in->width);         // am_sysinfo, unsigned int width
+    CBitstreamConverter::write_bits(&bs, 32, p_in->height);        // am_sysinfo, unsigned int height
+    CBitstreamConverter::write_bits(&bs, 32, p_in->rate);          // am_sysinfo, unsigned int rate
+    CBitstreamConverter::write_bits(&bs, 32, p_in->extra);         // am_sysinfo, unsigned int extra
+    CBitstreamConverter::write_bits(&bs, 32, p_in->status);        // am_sysinfo, unsigned int status
+    CBitstreamConverter::write_bits(&bs, 32, p_in->ratio);         // am_sysinfo, unsigned int ratio
+    CBitstreamConverter::write_bits(&bs, 32, (unsigned int)p_in->param); // am_sysinfo, unsigned int param
+    unsigned int lo = 0x00000000ffffffff & p_in->ratio64;
+    unsigned int hi = p_in->ratio64 >> 32;
+    CBitstreamConverter::write_bits(&bs, 32, lo);                  // am_sysinfo, unsigned long long ratio64
+    CBitstreamConverter::write_bits(&bs, 32, hi);                  // am_sysinfo, unsigned long long ratio64
+
+    // we do not care about the rest, flush and go.
+    // FYI there are 4.0 to 4.1 differences here.
+    CBitstreamConverter::flush_bits(&bs);
+    //CLog::MemDump((char*)p_out, 0xFF);
+#else
+    // direct struct usage, we do not know which flavor
+    // so just use what we get from headers and pray.
+    p_out->has_video          = 1;
+    p_out->noblock            = p_in->noblock;
+    p_out->video_pid          = p_in->video_pid;
+    p_out->video_type         = p_in->video_type;
+    p_out->stream_type        = p_in->stream_type;
+    p_out->am_sysinfo.format  = p_in->format;
+    p_out->am_sysinfo.width   = p_in->width;
+    p_out->am_sysinfo.height  = p_in->height;
+    p_out->am_sysinfo.rate    = p_in->rate;
+    p_out->am_sysinfo.extra   = p_in->extra;
+    p_out->am_sysinfo.status  = p_in->status;
+    p_out->am_sysinfo.ratio   = p_in->ratio;
+    p_out->am_sysinfo.ratio64 = p_in->ratio64;
+    p_out->am_sysinfo.param   = p_in->param;
+#endif
+  }
 };
 
 //-----------------------------------------------------------------------------------
@@ -205,6 +316,7 @@ typedef enum {
 typedef struct am_private_t
 {
   am_packet_t       am_pkt;
+  aml_generic_param gcodec;
   codec_para_t      vcodec;
 
   pstream_type      stream_type;
@@ -1303,7 +1415,10 @@ CAMLCodec::~CAMLCodec()
 
 bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
 {
-  CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder");
+#ifdef TARGET_ANDROID
+  CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder, android version %d", CAndroidFeatures::GetVersion());
+#endif
+
   m_speed = DVD_PLAYSPEED_NORMAL;
   m_1st_pts = 0;
   m_cur_pts = 0;
@@ -1421,33 +1536,32 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
     hints.orientation, hints.forced_aspect, hints.extrasize);
 
   // default video codec params
-  am_private->vcodec.has_video   = 1;
-  am_private->vcodec.noblock     = 0;
-  am_private->vcodec.video_pid   = am_private->video_pid;
-  am_private->vcodec.video_type  = am_private->video_format;
-  am_private->vcodec.stream_type = STREAM_TYPE_ES_VIDEO;
-  am_private->vcodec.am_sysinfo.format  = am_private->video_codec_type;
-  am_private->vcodec.am_sysinfo.width   = am_private->video_width;
-  am_private->vcodec.am_sysinfo.height  = am_private->video_height;
-  am_private->vcodec.am_sysinfo.rate    = am_private->video_rate;
-  am_private->vcodec.am_sysinfo.ratio   = am_private->video_ratio;
-  am_private->vcodec.am_sysinfo.ratio64 = am_private->video_ratio64;
-  am_private->vcodec.am_sysinfo.param   = NULL;
+  am_private->gcodec.noblock     = 0;
+  am_private->gcodec.video_pid   = am_private->video_pid;
+  am_private->gcodec.video_type  = am_private->video_format;
+  am_private->gcodec.stream_type = STREAM_TYPE_ES_VIDEO;
+  am_private->gcodec.format      = am_private->video_codec_type;
+  am_private->gcodec.width       = am_private->video_width;
+  am_private->gcodec.height      = am_private->video_height;
+  am_private->gcodec.rate        = am_private->video_rate;
+  am_private->gcodec.ratio       = am_private->video_ratio;
+  am_private->gcodec.ratio64     = am_private->video_ratio64;
+  am_private->gcodec.param       = NULL;
 
   switch(am_private->video_format)
   {
     default:
       break;
     case VFORMAT_MPEG4:
-      am_private->vcodec.am_sysinfo.param = (void*)EXTERNAL_PTS;
+      am_private->gcodec.param = (void*)EXTERNAL_PTS;
       break;
     case VFORMAT_H264:
     case VFORMAT_H264MVC:
-      am_private->vcodec.am_sysinfo.format = VIDEO_DEC_FORMAT_H264;
-      am_private->vcodec.am_sysinfo.param  = (void*)EXTERNAL_PTS;
+      am_private->gcodec.format = VIDEO_DEC_FORMAT_H264;
+      am_private->gcodec.param  = (void*)EXTERNAL_PTS;
       // h264 in an avi file
       if (m_hints.ptsinvalid)
-        am_private->vcodec.am_sysinfo.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
+        am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
       break;
     case VFORMAT_REAL:
       am_private->stream_type = AM_STREAM_RM;
@@ -1459,26 +1573,29 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
         static unsigned short tbl[9] = {0};
         if (VIDEO_DEC_FORMAT_REAL_8 == am_private->video_codec_type)
         {
-          am_private->vcodec.am_sysinfo.extra = am_private->extradata[1] & 7;
-          tbl[0] = (((am_private->vcodec.am_sysinfo.width  >> 2) - 1) << 8)
-                 | (((am_private->vcodec.am_sysinfo.height >> 2) - 1) & 0xff);
+          am_private->gcodec.extra = am_private->extradata[1] & 7;
+          tbl[0] = (((am_private->gcodec.width  >> 2) - 1) << 8)
+                 | (((am_private->gcodec.height >> 2) - 1) & 0xff);
           unsigned int j;
-          for (unsigned int i = 1; i <= am_private->vcodec.am_sysinfo.extra; i++)
+          for (unsigned int i = 1; i <= am_private->gcodec.extra; i++)
           {
             j = 2 * (i - 1);
             tbl[i] = ((am_private->extradata[8 + j] - 1) << 8) | ((am_private->extradata[8 + j + 1] - 1) & 0xff);
           }
         }
-        am_private->vcodec.am_sysinfo.param = &tbl;
+        am_private->gcodec.param = &tbl;
       }
       break;
     case VFORMAT_VC1:
       // vc1 in an avi file
       if (m_hints.ptsinvalid)
-        am_private->vcodec.am_sysinfo.param = (void*)EXTERNAL_PTS;
+        am_private->gcodec.param = (void*)EXTERNAL_PTS;
       break;
   }
-  am_private->vcodec.am_sysinfo.param = (void *)((unsigned int)am_private->vcodec.am_sysinfo.param | (am_private->video_rotation_degree << 16));
+  am_private->gcodec.param = (void *)((unsigned int)am_private->gcodec.param | (am_private->video_rotation_degree << 16));
+
+  // translate from generic to firemware version dependent
+  m_dll->codec_init_para(&am_private->gcodec, &am_private->vcodec);
 
   int ret = m_dll->codec_init(&am_private->vcodec);
   if (ret != CODEC_ERROR_NONE)
@@ -1836,10 +1953,10 @@ void CAMLCodec::Process()
 
         double error = app_pts - (double)pts_video/PTS_FREQ;
         double abs_error = fabs(error);
-        if (abs_error > 0.150)
+        if (abs_error > 0.125)
         {
           //CLog::Log(LOGDEBUG, "CAMLCodec::Process pts diff = %f", error);
-          if (abs_error > 0.125)
+          if (abs_error > 0.150)
           {
             // big error so try to reset pts_pcrscr
             SetVideoPtsSeconds(app_pts);
index 64af921..967f6ab 100644 (file)
@@ -58,6 +58,7 @@ static bool CanSurfaceRenderWhiteList(const std::string &name)
     "OMX.Nvidia",
     "OMX.rk",
     "OMX.qcom",
+    "OMX.Intel",
     NULL
   };
   for (const char **ptr = cansurfacerender_decoders; *ptr; ptr++)
@@ -336,11 +337,15 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
     case AV_CODEC_ID_H264:
       m_mime = "video/avc";
       m_formatname = "amc-h264";
-      m_bitstream = new CBitstreamConverter;
-      if (!m_bitstream->Open(m_hints.codec, (uint8_t*)m_hints.extradata, m_hints.extrasize, true))
+      // check for h264-avcC and convert to h264-annex-b
+      if (m_hints.extradata && *(uint8_t*)m_hints.extradata == 1)
       {
-        SAFE_DELETE(m_bitstream);
-        return false;
+        m_bitstream = new CBitstreamConverter;
+        if (!m_bitstream->Open(m_hints.codec, (uint8_t*)m_hints.extradata, m_hints.extrasize, true))
+        {
+          SAFE_DELETE(m_bitstream);
+          return false;
+        }
       }
       break;
     case AV_CODEC_ID_VC1:
@@ -422,7 +427,12 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
     }
   }
 
-  ConfigureMediaCodec();
+  if (!ConfigureMediaCodec())
+  {
+    m_codec.reset();
+    SAFE_DELETE(m_bitstream);
+    return false;
+  }
 
   // setup a YUV420P DVDVideoPicture buffer.
   // first make sure all properties are reset.
@@ -687,7 +697,7 @@ void CDVDVideoCodecAndroidMediaCodec::FlushInternal()
   }
 }
 
-void CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
+bool CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
 {
   // setup a MediaFormat to match the video content,
   // used by codec during configure
@@ -736,12 +746,23 @@ void CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
   {
     m_codec->configure(mediaformat, *m_surface, crypto, flags);
   }
+  // always, check/clear jni exceptions.
+  if (xbmc_jnienv()->ExceptionOccurred())
+  {
+    xbmc_jnienv()->ExceptionClear();
+    return false;
+  }
 
-  m_codec->start();
 
+  m_codec->start();
   // always, check/clear jni exceptions.
   if (xbmc_jnienv()->ExceptionOccurred())
+  {
     xbmc_jnienv()->ExceptionClear();
+    return false;
+  }
+
+  return true;
 }
 
 int CDVDVideoCodecAndroidMediaCodec::GetOutputPicture(void)
@@ -821,8 +842,11 @@ int CDVDVideoCodecAndroidMediaCodec::GetOutputPicture(void)
           if (i > 0)
             height = (m_videobuffer.iHeight + 1) / 2;
 
-          for (int j = 0; j < height; j++, src += src_stride, dst += dst_stride)
-            memcpy(dst, src, dst_stride);
+          if (src_stride == dst_stride)
+            memcpy(dst, src, dst_stride * height);
+          else
+            for (int j = 0; j < height; j++, src += src_stride, dst += dst_stride)
+              memcpy(dst, src, dst_stride);
         }
       }
       m_codec->releaseOutputBuffer(index, false);
@@ -896,9 +920,16 @@ void CDVDVideoCodecAndroidMediaCodec::OutputFormatChanged(void)
   else
   {
     // Android device quirks and fixes
-    if (stride <= 0)
+
+    // Samsung Quirk: ignore width/height/stride/slice: http://code.google.com/p/android/issues/detail?id=37768#c3
+    if (strstr(m_codecname.c_str(), "OMX.SEC.avc.dec") != NULL || strstr(m_codecname.c_str(), "OMX.SEC.avcdec") != NULL)
+    {
+      width = stride = m_hints.width;
+      height = slice_height = m_hints.height;
+    }
+    if (stride <= width)
         stride = width;
-    if (slice_height <= 0)
+    if (slice_height <= height)
     {
       slice_height = height;
       if (color_format == CJNIMediaCodecInfoCodecCapabilities::COLOR_FormatYUV420Planar)
@@ -906,7 +937,7 @@ void CDVDVideoCodecAndroidMediaCodec::OutputFormatChanged(void)
         // NVidia Tegra 3 on Nexus 7 does not set slice_heights
         if (strstr(m_codecname.c_str(), "OMX.Nvidia.") != NULL)
         {
-          slice_height = (((height) + 31) & ~31);
+          slice_height = (((height) + 15) & ~15);
           CLog::Log(LOGDEBUG, "CDVDVideoCodecAndroidMediaCodec:: NVidia Tegra 3 quirk, slice_height(%d)", slice_height);
         }
       }
index 930d445..3f7d1c4 100644 (file)
@@ -104,7 +104,7 @@ public:
 
 protected:
   void            FlushInternal(void);
-  void            ConfigureMediaCodec(void);
+  bool            ConfigureMediaCodec(void);
   int             GetOutputPicture(void);
   void            OutputFormatChanged(void);
 
index 5692faf..e0cfb0e 100644 (file)
@@ -69,7 +69,8 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
 {
   CDVDVideoCodecFFmpeg* ctx  = (CDVDVideoCodecFFmpeg*)avctx->opaque;
 
-  if(!ctx->IsHardwareAllowed())
+  // if frame threading is enabled hw accel is not allowed
+  if(!ctx->IsHardwareAllowed() || CSettings::Get().GetBool("videoplayer.useframemtdec"))
     return ctx->m_dllAvCodec.avcodec_default_get_format(avctx, fmt);
 
   const PixelFormat * cur = fmt;
index bd46a38..593a7cd 100644 (file)
@@ -1025,7 +1025,7 @@ void CProcessor::Close()
 bool CProcessor::UpdateSize(const DXVA2_VideoDesc& dsc)
 {
   // TODO: print the D3FORMAT text version in log
-  CLog::Log(LOGDEBUG, "DXVA - cheking samples array size using %d render target", dsc.Format);
+  CLog::Log(LOGDEBUG, "DXVA - checking samples array size using %d render target", dsc.Format);
 
   GUID* deint_guid_list = NULL;
   unsigned guid_count = 0;
index becd55b..02952a2 100644 (file)
 #if (defined HAVE_CONFIG_H) && (!defined TARGET_WINDOWS)
   #include "config.h"
 #endif
+
+#if defined(TARGET_DARWIN_IOS)
+#define STATIC_LINK 1
+#endif//TARGET_DARWIN_IOS
+
 extern "C" {
 #if defined(TARGET_WINDOWS)
   #include "libmpeg2/mpeg2.h"
@@ -53,6 +58,31 @@ public:
   virtual void mpeg2_skip(mpeg2dec_t * mpeg2dec, int skip)=0;
 };
 
+#if defined(STATIC_LINK)
+//use direct mapping
+class DllLibMpeg2 : public DllDynamic, DllLibMpeg2Interface
+{
+public:
+  virtual ~DllLibMpeg2() {}
+  virtual uint32_t mpeg2_accel (uint32_t accel) { return ::mpeg2_accel(accel); }
+  virtual mpeg2dec_t * mpeg2_init (void) { return ::mpeg2_init(); }
+  virtual const mpeg2_info_t * mpeg2_info (mpeg2dec_t * mpeg2dec) { return ::mpeg2_info(mpeg2dec); }
+  virtual void mpeg2_close (mpeg2dec_t * mpeg2dec) { ::mpeg2_close(mpeg2dec); }
+  virtual void mpeg2_buffer (mpeg2dec_t * mpeg2dec, uint8_t * start, uint8_t * end) { ::mpeg2_buffer(mpeg2dec, start, end); }
+  virtual void mpeg2_tag_picture (mpeg2dec_t * mpeg2dec, uint32_t tag, uint32_t tag2){ ::mpeg2_tag_picture(mpeg2dec, tag, tag2); }
+  virtual mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec) { return ::mpeg2_parse(mpeg2dec); }
+  virtual void mpeg2_reset (mpeg2dec_t * mpeg2dec, int full_reset) { return ::mpeg2_reset(mpeg2dec, full_reset); }
+  virtual void mpeg2_set_buf (mpeg2dec_t * mpeg2dec, uint8_t * buf[3], void * id) { ::mpeg2_set_buf(mpeg2dec, buf, id); }
+  virtual void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf) { ::mpeg2_custom_fbuf(mpeg2dec, custom_fbuf); }
+  virtual int mpeg2_convert (mpeg2dec_t * mpeg2dec, mpeg2_convert_t convert, void * arg) { return ::mpeg2_convert(mpeg2dec, convert, arg); }
+  virtual void mpeg2_skip(mpeg2dec_t * mpeg2dec, int skip) { ::mpeg2_skip(mpeg2dec, skip); }
+  
+  // DLL faking.
+  virtual bool ResolveExports() { return true; }
+  virtual bool Load() { return true; }
+  virtual void Unload() { }
+};
+#else
 class DllLibMpeg2 : public DllDynamic, DllLibMpeg2Interface
 {
   DECLARE_DLL_WRAPPER(DllLibMpeg2, DLL_PATH_LIBMPEG2)
@@ -83,3 +113,4 @@ class DllLibMpeg2 : public DllDynamic, DllLibMpeg2Interface
     RESOLVE_METHOD(mpeg2_skip)
   END_METHOD_RESOLVE()
 };
+#endif//STATIC_LINK
index 97dea48..277802f 100644 (file)
@@ -1682,11 +1682,6 @@ void CMixer::CreateVdpauMixer()
                                 &m_videoMixer);
   CheckStatus(vdp_st, __LINE__);
 
-  // create 3 pitches of black lines needed for clipping top
-  // and bottom lines when de-interlacing
-  m_BlackBar = new uint32_t[3*m_config.outWidth];
-  memset(m_BlackBar, 0, 3*m_config.outWidth*sizeof(uint32_t));
-
 }
 
 void CMixer::InitCSCMatrix(int Width)
@@ -2223,6 +2218,8 @@ void CMixer::Init()
   m_Sharpness = 0.0;
   m_DeintMode = 0;
   m_Deint = 0;
+  m_Upscale = 0;
+  m_SeenInterlaceFlag = false;
   m_ColorMatrix = 0;
   m_PostProc = false;
   m_vdpError = false;
@@ -2241,8 +2238,6 @@ void CMixer::Uninit()
     m_outputSurfaces.pop();
   }
   m_config.context->GetProcs().vdp_video_mixer_destroy(m_videoMixer);
-
-  delete [] m_BlackBar;
 }
 
 void CMixer::Flush()
@@ -2294,6 +2289,7 @@ void CMixer::InitCycle()
   EDEINTERLACEMODE   mode = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode;
   EINTERLACEMETHOD method = GetDeinterlacingMethod();
   bool interlaced = m_mixerInput[1].DVDPic.iFlags & DVP_FLAG_INTERLACED;
+  m_SeenInterlaceFlag |= interlaced;
 
   // TODO
   if (//!(flags & DVP_FLAG_NO_POSTPROC) &&
@@ -2377,6 +2373,12 @@ void CMixer::InitCycle()
     m_processPicture.outputSurface = m_outputSurfaces.front();
     m_mixerInput[1].DVDPic.iWidth = m_config.outWidth;
     m_mixerInput[1].DVDPic.iHeight = m_config.outHeight;
+    if (m_SeenInterlaceFlag)
+    {
+      double ratio = (double)m_mixerInput[1].DVDPic.iDisplayHeight / m_mixerInput[1].DVDPic.iHeight;
+      m_mixerInput[1].DVDPic.iHeight -= 6;
+      m_mixerInput[1].DVDPic.iDisplayHeight = lrint(ratio*m_mixerInput[1].DVDPic.iHeight);
+    }
   }
   else
   {
@@ -2511,32 +2513,6 @@ void CMixer::ProcessPicture()
                                 0,
                                 NULL);
   CheckStatus(vdp_st, __LINE__);
-
-  if (m_mixerfield != VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME)
-  {
-    // in order to clip top and bottom lines when de-interlacing
-    // we black those lines as a work around for not working
-    // background colour using the mixer
-    // pixel perfect is preferred over overscanning or zooming
-
-    VdpRect clipRect = destRect;
-    clipRect.y1 = clipRect.y0 + 2;
-    uint32_t *data[] = {m_BlackBar};
-    uint32_t pitches[] = {destRect.x1};
-    vdp_st = m_config.context->GetProcs().vdp_output_surface_put_bits_native(m_processPicture.outputSurface,
-                                            (void**)data,
-                                            pitches,
-                                            &clipRect);
-    CheckStatus(vdp_st, __LINE__);
-
-    clipRect = destRect;
-    clipRect.y0 = clipRect.y1 - 2;
-    vdp_st = m_config.context->GetProcs().vdp_output_surface_put_bits_native(m_processPicture.outputSurface,
-                                            (void**)data,
-                                            pitches,
-                                            &clipRect);
-    CheckStatus(vdp_st, __LINE__);
-  }
 }
 
 
@@ -3067,7 +3043,12 @@ CVdpauRenderPicture* COutput::ProcessMixerPicture()
       GLMapSurfaces();
       retPic->sourceIdx = procPic.outputSurface;
       retPic->texture[0] = m_bufferPool.glOutputSurfaceMap[procPic.outputSurface].texture[0];
-      retPic->crop = CRect(0,0,0,0);
+      retPic->texWidth = m_config.outWidth;
+      retPic->texHeight = m_config.outHeight;
+      retPic->crop.x1 = 0;
+      retPic->crop.y1 = (m_config.outHeight - retPic->DVDPic.iHeight) / 2;
+      retPic->crop.x2 = m_config.outWidth;
+      retPic->crop.y2 = m_config.outHeight - retPic->crop.y1;
     }
     else
     {
index abe8da2..2dd3c28 100644 (file)
@@ -330,8 +330,8 @@ protected:
   int m_DeintMode;
   int m_Deint;
   int m_Upscale;
+  bool m_SeenInterlaceFlag;
   unsigned int m_ColorMatrix       : 4;
-  uint32_t *m_BlackBar;
   VdpVideoMixerPictureStructure m_mixerfield;
   int m_mixerstep;
   int m_mixersteps;
index 2862fee..6d274fd 100644 (file)
@@ -317,8 +317,10 @@ void CDVDDemuxHTSP::SubscriptionStart (htsmsg_t *m)
       {
         st.s->ExtraData = new uint8_t[4];
         st.s->ExtraSize = 4;
-        ((uint16_t*)st.s->ExtraData)[0] = composition_id;
-        ((uint16_t*)st.s->ExtraData)[1] = ancillary_id;
+        st.s->ExtraData[0] = (composition_id >> 8) & 0xff;
+        st.s->ExtraData[1] = (composition_id >> 0) & 0xff;
+        st.s->ExtraData[2] = (ancillary_id   >> 8) & 0xff;
+        st.s->ExtraData[3] = (ancillary_id   >> 0) & 0xff;
       }
     } else if(!strcmp(type, "TEXTSUB")) {
       st.s = new CDemuxStreamSubtitle();
index b96d520..e5f8234 100644 (file)
@@ -414,8 +414,10 @@ void CDVDDemuxPVRClient::RequestStreams()
       {
         st->ExtraData = new uint8_t[4];
         st->ExtraSize = 4;
-        ((uint16_t*)st->ExtraData)[0] = (props.stream[i].iIdentifier >> 0) & 0xFFFFu;
-        ((uint16_t*)st->ExtraData)[1] = (props.stream[i].iIdentifier >> 4) & 0xFFFFu;
+        st->ExtraData[0] = (props.stream[i].iIdentifier >> 8) & 0xff;
+        st->ExtraData[1] = (props.stream[i].iIdentifier >> 0) & 0xff;
+        st->ExtraData[2] = (props.stream[i].iIdentifier >> 24) & 0xff;
+        st->ExtraData[3] = (props.stream[i].iIdentifier >> 16) & 0xff;
       }
       m_streams[i] = st;
     }
index 4491945..7c38dfd 100644 (file)
@@ -118,6 +118,7 @@ public:
     virtual void OnPrevious() = 0;
     virtual bool OnMouseMove(const CPoint &point) = 0;
     virtual bool OnMouseClick(const CPoint &point) = 0;
+    virtual bool HasMenu() = 0;
     virtual bool IsInMenu() = 0;
     virtual void SkipStill() = 0;
     virtual double GetTimeStampCorrection() = 0;
index f50c413..41a8112 100644 (file)
@@ -35,6 +35,8 @@
 #include "URL.h"
 #include "guilib/Geometry.h"
 #include "utils/StringUtils.h"
+#include "dialogs/GUIDialogKaiToast.h"
+#include "guilib/LocalizeStrings.h"
 
 #define LIBBLURAY_BYTESEEK 0
 
@@ -556,15 +558,21 @@ void CDVDInputStreamBluray::ProcessEvent() {
     m_player->OnDVDNavResult((void*) &pid, 3);
     break;
 
-#ifdef HAVE_LIBBLURAY_BDJ
+#if (BLURAY_VERSION >= BLURAY_VERSION_CODE(0,2,2))
   case BD_EVENT_MENU:
-    CLog::Log(LOGDEBUG, "CDVDInputStreamBluray - BD_EVENT_PG_TEXTST %d",
+    CLog::Log(LOGDEBUG, "CDVDInputStreamBluray - BD_EVENT_MENU %d",
         m_event.param);
     m_menu = !!m_event.param;
     break;
-
+#endif
+#if (BLURAY_VERSION >= BLURAY_VERSION_CODE(0,3,0))
   case BD_EVENT_IDLE:
+#ifdef HAVE_LIBBLURAY_BDJ
     Sleep(100);
+#else
+    m_hold = HOLD_ERROR;
+    m_player->OnDVDNavResult(NULL, 6);
+#endif
     break;
 #endif
 
@@ -599,8 +607,17 @@ int CDVDInputStreamBluray::Read(uint8_t* buf, int buf_size)
       if(m_hold == HOLD_HELD)
         return 0;
 
+      if(m_hold == HOLD_ERROR)
+        return -1;
+
       result = m_dll->bd_read_ext (m_bd, buf, buf_size, &m_event);
 
+      if(result < 0)
+      {
+        m_hold = HOLD_ERROR;
+        return result;
+      }
+
       /* Check for holding events */
       switch(m_event.event) {
         case BD_EVENT_SEEK:
@@ -678,7 +695,7 @@ void CDVDInputStreamBluray::OverlayInit(SPlane& plane, int w, int h)
 void CDVDInputStreamBluray::OverlayClear(SPlane& plane, int x, int y, int w, int h)
 {
 #if(BD_OVERLAY_INTERFACE_VERSION >= 2)
-  CRect ovr(x
+  CRectInt ovr(x
           , y
           , x + w
           , y + h);
@@ -686,12 +703,12 @@ void CDVDInputStreamBluray::OverlayClear(SPlane& plane, int x, int y, int w, int
   /* fixup existing overlays */
   for(SOverlays::iterator it = plane.o.begin(); it != plane.o.end();)
   {
-    CRect old((*it)->x
+    CRectInt old((*it)->x
             , (*it)->y
             , (*it)->x + (*it)->width
             , (*it)->y + (*it)->height);
 
-    vector<CRect> rem = old.SubtractRect(ovr);
+    vector<CRectInt> rem = old.SubtractRect(ovr);
 
     /* if no overlap we are done */
     if(rem.size() == 1 && !(rem[0] != old))
@@ -701,7 +718,7 @@ void CDVDInputStreamBluray::OverlayClear(SPlane& plane, int x, int y, int w, int
     }
 
     SOverlays add;
-    for(vector<CRect>::iterator itr = rem.begin(); itr != rem.end(); ++itr)
+    for(vector<CRectInt>::iterator itr = rem.begin(); itr != rem.end(); ++itr)
     {
       SOverlay overlay(new CDVDOverlayImage(*(*it)
                                             , itr->x1
@@ -984,6 +1001,15 @@ CDVDInputStream::ENextStream CDVDInputStreamBluray::NextStream()
   if(!m_navmode)
     return NEXTSTREAM_NONE;
 
+  if (m_hold == HOLD_ERROR)
+  {
+#if (BLURAY_VERSION < BLURAY_VERSION_CODE(0,3,0))
+    CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::NextStream - libbluray navigation mode read error");
+    CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(25008), g_localizeStrings.Get(25009));
+#endif
+    return NEXTSTREAM_NONE;
+  }
+
   /* process any current event */
   ProcessEvent();
 
@@ -1008,7 +1034,10 @@ void CDVDInputStreamBluray::UserInput(bd_vk_key_e vk)
 void CDVDInputStreamBluray::OnMenu()
 {
   if(m_bd == NULL || !m_navmode)
+  {
+    CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::OnMenu - navigation mode not enabled");
     return;
+  }
 
   if(m_dll->bd_user_input(m_bd, -1, BD_VK_POPUP) >= 0)
     return;
@@ -1018,9 +1047,8 @@ void CDVDInputStreamBluray::OnMenu()
     return;
 
   CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::OnMenu - root failed, trying explicit");
-  if(m_dll->bd_menu_call(m_bd, -1) >= 0)
-    return;
-  CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::OnMenu - root failed");
+  if(m_dll->bd_menu_call(m_bd, -1) <= 0)
+    CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::OnMenu - root failed");
 }
 
 bool CDVDInputStreamBluray::IsInMenu()
@@ -1044,4 +1072,9 @@ void CDVDInputStreamBluray::SkipStill()
   }
 }
 
+bool CDVDInputStreamBluray::HasMenu()
+{
+  return m_navmode;
+}
+
 #endif
index e323115..262c7b8 100644 (file)
@@ -27,6 +27,7 @@
 extern "C"
 {
 #include <libbluray/bluray.h>
+#include <libbluray/bluray-version.h>
 #include <libbluray/keys.h>
 #include <libbluray/overlay.h>
 }
@@ -77,6 +78,7 @@ public:
   }
   virtual void OnNext()                  {}
   virtual void OnPrevious()              {}
+  virtual bool HasMenu();
   virtual bool IsInMenu();
   virtual bool OnMouseMove(const CPoint &point)  { return false; }
   virtual bool OnMouseClick(const CPoint &point) { return false; }
@@ -117,15 +119,15 @@ protected:
   static void OverlayClear(SPlane& plane, int x, int y, int w, int h);
   static void OverlayInit (SPlane& plane, int w, int h);
 
-  IDVDPlayer*   m_player;
-  DllLibbluray *m_dll;
-  BLURAY* m_bd;
-  BLURAY_TITLE_INFO* m_title;
-  uint32_t           m_playlist;
-  uint32_t           m_clip;
-  uint32_t           m_angle;
-  bool               m_menu;
-  bool m_navmode;
+  IDVDPlayer*         m_player;
+  DllLibbluray*       m_dll;
+  BLURAY*             m_bd;
+  BLURAY_TITLE_INFO*  m_title;
+  uint32_t            m_playlist;
+  uint32_t            m_clip;
+  uint32_t            m_angle;
+  bool                m_menu;
+  bool                m_navmode;
 
   typedef boost::shared_ptr<CDVDOverlayImage> SOverlay;
   typedef std::list<SOverlay>                 SOverlays;
@@ -148,6 +150,7 @@ protected:
     HOLD_HELD,
     HOLD_DATA,
     HOLD_STILL,
+    HOLD_ERROR
   } m_hold;
   BD_EVENT m_event;
 #ifdef HAVE_LIBBLURAY_BDJ
index 1f780f5..c6674ad 100644 (file)
  */
 
 #include "DVDInputStreamFFmpeg.h"
+#include "xbmc/playlists/PlayListM3U.h"
+#include "settings/Settings.h"
+#include "Util.h"
+#include "utils/log.h"
 
 using namespace XFILE;
 
@@ -46,6 +50,21 @@ bool CDVDInputStreamFFmpeg::IsEOF()
 
 bool CDVDInputStreamFFmpeg::Open(const char* strFile, const std::string& content)
 {
+  CFileItem item(strFile, false);
+  if (item.IsInternetStream() && item.IsType(".m3u8"))
+  {
+    // get the available bandwidth and  determine the most appropriate stream
+    int bandwidth = CSettings::Get().GetInt("network.bandwidth");
+    if(bandwidth <= 0)
+      bandwidth = INT_MAX;
+    std::string selected = PLAYLIST::CPlayListM3U::GetBestBandwidthStream(strFile, bandwidth);
+    if (selected.compare(strFile) != 0)
+    {
+      CLog::Log(LOGINFO, "CDVDInputStreamFFmpeg: Auto-selecting %s based on configured bandwidth.", selected.c_str());
+      strFile = selected.c_str();
+    }
+  }
+
   if (!CDVDInputStream::Open(strFile, content))
     return false;
 
index 6c05ece..122e922 100644 (file)
@@ -54,10 +54,30 @@ bool CDVDInputStreamFile::Open(const char* strFile, const std::string& content)
 
   unsigned int flags = READ_TRUNCATED | READ_BITRATE | READ_CHUNKED;
 
-  if (URIUtils::IsOnDVD(strFile) || URIUtils::IsBluray(strFile))
-    flags |= READ_NO_CACHE; // Never cache these
+  /*
+   * There are 4 buffer modes available (configurable in as.xml)
+   * 0) Buffer all internet filesystems (like 2 but additionally also ftp, webdav, etc.) (default)
+   * 1) Buffer all filesystems (including local)
+   * 2) Only buffer true internet filesystems (streams) (http, etc.)
+   * 3) No buffer
+   */
+  if (!URIUtils::IsOnDVD(strFile) && !URIUtils::IsBluray(strFile)) // Never cache these
+  {
+    if (g_advancedSettings.m_networkBufferMode == 0 || g_advancedSettings.m_networkBufferMode == 2)
+    {
+      if (URIUtils::IsInternetStream(CURL(strFile), (g_advancedSettings.m_networkBufferMode == 0) ) )
+        flags |= READ_CACHED;
+    }
+    else if (g_advancedSettings.m_networkBufferMode == 1)
+    {
+      flags |= READ_CACHED; // In buffer mode 1 force cache for (almost) all files
+    }
+  }
+
+  if (!(flags & READ_CACHED))
+    flags |= READ_NO_CACHE; // Make sure CFile honors our no-cache hint
 
-  if (content == "video/mp4" || content == "video/x-msvideo" || content == "video/avi")
+  if (content == "video/mp4" || content == "video/x-msvideo" || content == "video/avi" || content == "video/x-matroska")
     flags |= READ_MULTI_STREAM;
 
   // open file in binary mode
index 5aba64b..f9a6d0f 100644 (file)
@@ -106,6 +106,7 @@ public:
   int GetTotalButtons();
   bool GetCurrentButtonInfo(CDVDOverlaySpu* pOverlayPicture, CDVDDemuxSPU* pSPU, int iButtonType /* 0 = selection, 1 = action (clicked)*/);
 
+  bool HasMenu() { return true; }
   bool IsInMenu() { return m_bInMenu; }
 
   int GetActiveSubtitleStream();
index dd50844..b9ce479 100644 (file)
@@ -24,6 +24,7 @@
 #include "DVDCodecs/Overlay/DVDOverlayText.h"
 #include "DVDCodecs/Overlay/DVDOverlayImage.h"
 #include "DVDCodecs/Overlay/DVDOverlaySSA.h"
+#include "cores/VideoRenderers/OverlayRendererUtil.h"
 
 #define CLAMP(a, min, max) ((a) > (max) ? (max) : ( (a) < (min) ? (min) : a ))
 
@@ -72,6 +73,8 @@ void CDVDOverlayRenderer::Render(DVDPictureRenderer* pPicture, CDVDOverlaySSA* p
 
   ASS_Image* img = pOverlay->m_libass->RenderImage(width, height, pts);
 
+  int depth = OVERLAY::GetStereoscopicDepth();
+
   while(img)
   {
     unsigned int color = img->color;
@@ -94,7 +97,7 @@ void CDVDOverlayRenderer::Render(DVDPictureRenderer* pPicture, CDVDOverlaySSA* p
     uint8_t u     = (uint8_t)(127.5 + 255 * CLAMP(-0.169 * r - 0.331 * g + 0.500 * b, -0.5, 0.5));
 
     int y = std::max(0,std::min(img->dst_y, pPicture->height-img->h));
-    int x = std::max(0,std::min(img->dst_x, pPicture->width-img->w));
+    int x = std::max(0,std::min(img->dst_x + depth, pPicture->width-img->w));
 
     for(int i=0; i<img->h; i++)
     {
index f9375c6..e8f637c 100644 (file)
@@ -455,6 +455,9 @@ void CSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
     for(int i=0;i<count;i++)
     {
       CDemuxStream* stream = demuxer->GetStream(i);
+      /* skip streams with no type */
+      if (stream->type == STREAM_NONE)
+        continue;
       /* make sure stream is marked with right source */
       stream->source = source;
 
@@ -590,7 +593,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options)
   }
 }
 
-bool CDVDPlayer::CloseFile()
+bool CDVDPlayer::CloseFile(bool reopen)
 {
   CLog::Log(LOGNOTICE, "CDVDPlayer::CloseFile()");
 
@@ -659,20 +662,6 @@ bool CDVDPlayer::OpenInputStream()
     m_filename = g_mediaManager.TranslateDevicePath("");
   }
 
-  // before creating the input stream, if this is an HLS playlist then get the
-  // most appropriate bitrate based on our network settings
-  // ensure to strip off the url options by using a temp CURL object
-  if (StringUtils::StartsWith(filename, "http://") &&
-      StringUtils::EndsWith(CURL(filename).GetFileName(), ".m3u8"))
-  {
-    // get the available bandwidth (as per user settings)
-    int maxrate = CSettings::Get().GetInt("network.bandwidth");
-    if(maxrate <= 0)
-      maxrate = INT_MAX;
-
-    // determine the most appropriate stream
-    m_filename = PLAYLIST::CPlayListM3U::GetBestBandwidthStream(m_filename, (size_t)maxrate);
-  }
   m_pInputStream = CDVDFactoryInputStream::CreateInputStream(this, m_filename, m_mimetype);
   if(m_pInputStream == NULL)
   {
@@ -1037,7 +1026,8 @@ void CDVDPlayer::Process()
   if (CDVDInputStream::IMenus* ptr = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
   {
     CLog::Log(LOGNOTICE, "DVDPlayer: playing a file with menu's");
-    m_PlayerOptions.starttime = 0;
+    if(CDVDInputStreamNavigator* nav = dynamic_cast<CDVDInputStreamNavigator*>(m_pInputStream))
+      m_PlayerOptions.starttime = 0;
 
     if(m_PlayerOptions.state.size() > 0)
       ptr->SetState(m_PlayerOptions.state);
@@ -3429,6 +3419,12 @@ int CDVDPlayer::OnDVDNavResult(void* pData, int iMessage)
                   m_dvd.iDVDStillTime, time / 1000);
       }
     }
+    else if (iMessage == 6)
+    {
+      m_dvd.state = DVDSTATE_NORMAL;
+      CLog::Log(LOGDEBUG, "CDVDPlayer::OnDVDNavResult - libbluray read error (DVDSTATE_NORMAL)");
+      CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(25008), g_localizeStrings.Get(25009));
+    }
 
     return 0;
   }
@@ -3865,7 +3861,7 @@ bool CDVDPlayer::HasMenu()
 {
   CDVDInputStream::IMenus* pStream = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream);
   if (pStream)
-    return true;
+    return pStream->HasMenu();
   else
     return false;
 }
@@ -4068,6 +4064,11 @@ void CDVDPlayer::UpdatePlayState(double timeout)
     state.dts = m_CurrentVideo.dts;
   else if(m_CurrentAudio.dts != DVD_NOPTS_VALUE)
     state.dts = m_CurrentAudio.dts;
+  else if(m_CurrentVideo.startpts != DVD_NOPTS_VALUE)
+    state.dts = m_CurrentVideo.startpts;
+  else if(m_CurrentAudio.startpts != DVD_NOPTS_VALUE)
+    state.dts = m_CurrentAudio.startpts;
+
 
   if(m_pDemuxer)
   {
index 5ae5f9f..dfe679f 100644 (file)
@@ -181,7 +181,7 @@ public:
   CDVDPlayer(IPlayerCallback& callback);
   virtual ~CDVDPlayer();
   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options);
-  virtual bool CloseFile();
+  virtual bool CloseFile(bool reopen = false);
   virtual bool IsPlaying() const;
   virtual void Pause();
   virtual bool IsPaused() const;
index 2d7d0f1..99b3155 100644 (file)
@@ -256,6 +256,7 @@ void CDVDPlayerVideo::OpenStream(CDVDStreamInfo &hint, CDVDVideoCodec* codec)
   m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
   m_started = false;
   m_codecname = m_pVideoCodec->GetName();
+  m_packets.clear();
 }
 
 void CDVDPlayerVideo::CloseStream(bool bWaitForBuffers)
@@ -939,7 +940,7 @@ void CDVDPlayerVideo::ProcessOverlays(DVDVideoPicture* pSource, double pts)
     VecOverlaysIter it = pVecOverlays->begin();
 
     //Check all overlays and render those that should be rendered, based on time and forced
-    //Both forced and subs should check timeing, pts == 0 in the stillframe case
+    //Both forced and subs should check timing
     while (it != pVecOverlays->end())
     {
       CDVDOverlay* pOverlay = *it++;
@@ -948,7 +949,7 @@ void CDVDPlayerVideo::ProcessOverlays(DVDVideoPicture* pSource, double pts)
 
       double pts2 = pOverlay->bForced ? pts : pts - m_iSubtitleDelay;
 
-      if((pOverlay->iPTSStartTime <= pts2 && (pOverlay->iPTSStopTime > pts2 || pOverlay->iPTSStopTime == 0LL)) || pts == 0)
+      if((pOverlay->iPTSStartTime <= pts2 && (pOverlay->iPTSStopTime > pts2 || pOverlay->iPTSStopTime == 0LL)))
       {
         if(pOverlay->IsOverlayType(DVDOVERLAY_TYPE_GROUP))
           overlays.insert(overlays.end(), static_cast<CDVDOverlayGroup*>(pOverlay)->m_overlays.begin()
@@ -1156,11 +1157,9 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
     iFrameSleep = 0;
   }
 
-  // dropping to a very low framerate is not correct (it should not happen at all)
-  iClockSleep = min(iClockSleep, DVD_MSEC_TO_TIME(500));
-  iFrameSleep = min(iFrameSleep, DVD_MSEC_TO_TIME(500));
-
-  if( m_stalled )
+  if( m_started == false )
+    iSleepTime = 0.0;
+  else if( m_stalled )
     iSleepTime = iFrameSleep;
   else
     iSleepTime = iClockSleep;
@@ -1217,7 +1216,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
 
   AutoCrop(pPicture);
 
-  int buffer = g_renderManager.WaitForBuffer(m_bStop, std::max(DVD_TIME_TO_MSEC(iSleepTime) + 500, 0));
+  int buffer = g_renderManager.WaitForBuffer(m_bStop, std::max(DVD_TIME_TO_MSEC(iSleepTime) + 500, 1));
   if (buffer < 0)
     return EOS_DROPPED;
 
index 30756cf..5218d01 100644 (file)
 #include "DVDInputStreams/DVDInputStream.h"
 #include "utils/CharsetConverter.h"
 #include "utils/Utf8Utils.h"
+#include "utils/CharsetDetection.h"
+#include "filesystem/File.h"
 
 using namespace std;
+using XFILE::auto_buffer;
 
 CDVDSubtitleStream::CDVDSubtitleStream()
 {
@@ -40,60 +43,51 @@ bool CDVDSubtitleStream::Open(const string& strFile)
   pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, strFile, "");
   if (pInputStream && pInputStream->Open(strFile.c_str(), ""))
   {
-    unsigned char buffer[16384];
-    int size_read = 0;
-    size_read = pInputStream->Read(buffer,3);
-    bool isUTF8 = false;
-    bool isUTF16 = false;
-    if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
-      isUTF8 = true;
-    else if (buffer[0] == 0xFF && buffer[1] == 0xFE)
+    static const size_t chunksize = 64 * 1024;
+    auto_buffer buf;
+
+    // read content
+    size_t totalread = 0;
+    int read;
+    do
     {
-      isUTF16 = true;
-      pInputStream->Seek(2, SEEK_SET);
-    }
-    else
-      pInputStream->Seek(0, SEEK_SET);
+      if (totalread == buf.size())
+        buf.resize(buf.size() + chunksize);
+
+      read = pInputStream->Read((uint8_t*)buf.get() + totalread, buf.size() - totalread);
+      if (read > 0)
+        totalread += read;
+    } while (read > 0);
+
+    delete pInputStream;
+    if (!totalread)
+      return false;
 
-    if (isUTF16)
+    std::string tmpStr(buf.get(), totalread);
+    buf.clear();
+
+    std::string enc(CCharsetDetection::GetBomEncoding(tmpStr));
+    if (enc == "UTF-8" || (enc.empty() && CUtf8Utils::isValidUtf8(tmpStr)))
+      m_stringstream << tmpStr;
+    else if (!enc.empty())
     {
-      std::wstringstream wstringstream;
-      while( (size_read = pInputStream->Read(buffer, sizeof(buffer)-2) ) > 0 )
-      {
-        buffer[size_read] = buffer[size_read + 1] = '\0';
-        CStdStringW temp; 
-        g_charsetConverter.utf16LEtoW(std::u16string((char16_t*)buffer),temp); 
-        wstringstream << temp; 
-      }
-      delete pInputStream;
-
-      CStdString strUTF8;
-      g_charsetConverter.wToUTF8(CStdStringW(wstringstream.str()),strUTF8);
-      m_stringstream.str("");
-      m_stringstream << strUTF8;
+      std::string converted;
+      g_charsetConverter.ToUtf8(enc, tmpStr, converted);
+      if (converted.empty())
+        return false;
+
+      m_stringstream << converted;
     }
     else
     {
-      while( (size_read = pInputStream->Read(buffer, sizeof(buffer)-1) ) > 0 )
-      {
-        buffer[size_read] = '\0';
-        m_stringstream << buffer;
-      }
-      delete pInputStream;
-
-      if (!isUTF8)
-        isUTF8 = CUtf8Utils::isValidUtf8(m_stringstream.str());
-
-      if (!isUTF8)
-      {
-        CStdStringW strUTF16;
-        CStdString strUTF8;
-        g_charsetConverter.subtitleCharsetToW(m_stringstream.str(), strUTF16);
-        g_charsetConverter.wToUTF8(strUTF16,strUTF8);
-        m_stringstream.str("");
-        m_stringstream << strUTF8;
-      }
+      std::string converted;
+      g_charsetConverter.subtitleCharsetToUtf8(tmpStr, converted);
+      if (converted.empty())
+        return false;
+
+      m_stringstream << converted;
     }
+
     return true;
   }
 
index 5f0ccc1..dd80412 100644 (file)
@@ -83,17 +83,16 @@ COMXAudio::COMXAudio() :
   m_submitted_eos   (false  ),
   m_failed_eos      (false  )
 {
-  m_vizBufferSize   = m_vizRemapBufferSize = VIS_PACKET_SIZE * sizeof(float);
-  m_vizRemapBuffer  = (uint8_t *)_aligned_malloc(m_vizRemapBufferSize,16);
-  m_vizBuffer       = (uint8_t *)_aligned_malloc(m_vizBufferSize,16);
+  CAEFactory::Suspend();
+  while (!CAEFactory::IsSuspended())
+    Sleep(10);
 }
 
 COMXAudio::~COMXAudio()
 {
   Deinitialize();
 
-  _aligned_free(m_vizRemapBuffer);
-  _aligned_free(m_vizBuffer);
+  CAEFactory::Resume();
 }
 
 bool COMXAudio::PortSettingsChanged()
@@ -118,12 +117,12 @@ bool COMXAudio::PortSettingsChanged()
     if(!m_omx_splitter.Initialize("OMX.broadcom.audio_splitter", OMX_IndexParamAudioInit))
       return false;
   }
-  if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "Analogue")
+  if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "PI:Analogue")
   {
     if(!m_omx_render_analog.Initialize("OMX.broadcom.audio_render", OMX_IndexParamAudioInit))
       return false;
   }
-  if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI")
+  if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") != "PI:Analogue")
   {
     if(!m_omx_render_hdmi.Initialize("OMX.broadcom.audio_render", OMX_IndexParamAudioInit))
       return false;
@@ -471,7 +470,7 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo
     enum PCMChannels outLayout[OMX_AUDIO_MAXCHANNELS];
     enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1);
     // ignore layout setting for analogue
-    if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "Analogue")
+    if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "PI:Analogue")
       layout = PCM_LAYOUT_2_0;
 
     // force out layout to stereo if input is not multichannel - it gives the receiver a chance to upmix
@@ -487,8 +486,6 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo
     m_wave_header.dwChannelMask = channelMap;
     BuildChannelMapOMX(m_input_channels, channelMap);
     BuildChannelMapOMX(m_output_channels, GetChannelLayout(layout));
-
-    m_vizRemap.Initialize(GetAEChannelLayout(channelMap), CAEChannelInfo(AE_CH_LAYOUT_2_0), false, true);
   }
 
   m_SampleRate    = m_format.m_sampleRate;
@@ -690,9 +687,6 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo
   CLog::Log(LOGDEBUG, "COMXAudio::Initialize device passthrough %d hwdecode %d",
      m_Passthrough, m_HWDecode);
 
-  /* dummy call to inform PiAudioAE that audo is active */
-  CAEFactory::MakeStream((enum AEDataFormat)0, 0, 0, (CAEChannelInfo)0, 0);
-
   return true;
 }
 
@@ -752,9 +746,6 @@ bool COMXAudio::Deinitialize()
   m_extradata = NULL;
   m_extrasize = 0;
 
-  while(!m_vizqueue.empty())
-    m_vizqueue.pop();
-
   m_dllAvUtil.Unload();
 
   while(!m_ampqueue.empty())
@@ -764,9 +755,6 @@ bool COMXAudio::Deinitialize()
   m_submitted     = 0.0f;
   m_maxLevel      = 0.0f;
 
-  /* dummy call to inform PiAudioAE that audo is inactive */
-  CAEFactory::FreeStream(0);
-
   return true;
 }
 
@@ -874,62 +862,6 @@ bool COMXAudio::ApplyVolume(void)
   return true;
 }
 
-void COMXAudio::VizPacket(const void* data, unsigned int len, double pts)
-{
-    /* input samples */
-    unsigned int vizBufferSamples = len / (CAEUtil::DataFormatToBits(m_format.m_dataFormat) >> 3);
-
-    /* input frames */
-    unsigned int frames = vizBufferSamples / m_InputChannels;
-    float *floatBuffer = (float *)data;
-
-    if (m_format.m_dataFormat != AE_FMT_FLOAT)
-    {
-      CAEConvert::AEConvertToFn m_convertFn = CAEConvert::ToFloat(m_format.m_dataFormat);
-
-      /* check convert buffer */
-      CheckOutputBufferSize((void **)&m_vizBuffer, &m_vizBufferSize, vizBufferSamples * (CAEUtil::DataFormatToBits(AE_FMT_FLOAT) >> 3));
-
-      /* convert to float */
-      m_convertFn((uint8_t *)data, vizBufferSamples, (float *)m_vizBuffer);
-      floatBuffer = (float *)m_vizBuffer;
-    }
-
-    // Viz channel count is 2
-    CheckOutputBufferSize((void **)&m_vizRemapBuffer, &m_vizRemapBufferSize, frames * 2 * sizeof(float));
-
-    /* remap */
-    m_vizRemap.Remap(floatBuffer, (float*)m_vizRemapBuffer, frames);
-
-    /* output samples */
-    vizBufferSamples = vizBufferSamples / m_InputChannels * 2;
-
-    /* viz size is limited */
-    if(vizBufferSamples > VIS_PACKET_SIZE)
-      vizBufferSamples = VIS_PACKET_SIZE;
-
-    vizblock_t v;
-    v.pts = pts;
-    v.num_samples = vizBufferSamples;
-    memcpy(v.samples, m_vizRemapBuffer, vizBufferSamples * sizeof(float));
-    m_vizqueue.push(v);
-
-    double stamp = m_av_clock->OMXMediaTime();
-    while(!m_vizqueue.empty())
-    {
-      vizblock_t &v = m_vizqueue.front();
-      /* if packet has almost reached media time (allow time for rendering delay) then display it */
-      /* we'll also consume if queue gets unexpectedly long to avoid filling memory */
-      if (v.pts == DVD_NOPTS_VALUE || v.pts - stamp < DVD_SEC_TO_TIME(1.0/30.0) || v.pts - stamp > DVD_SEC_TO_TIME(15.0))
-      {
-         m_pCallback->OnAudioData(v.samples, v.num_samples);
-         m_vizqueue.pop();
-      }
-      else break;
-   }
-}
-
-
 //***********************************************************************************************
 unsigned int COMXAudio::AddPackets(const void* data, unsigned int len)
 {
@@ -947,9 +879,6 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
     return len;
   }
 
-  if (m_pCallback && len && !(m_Passthrough || m_HWDecode))
-    VizPacket(data, len, pts);
-
   if(m_eEncoding == OMX_AUDIO_CodingDTS && m_LostSync && (m_Passthrough || m_HWDecode))
   {
     int skip = SyncDTS((uint8_t *)data, len);
@@ -1018,6 +947,9 @@ 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);
@@ -1198,6 +1130,7 @@ int COMXAudio::SetPlaySpeed(int iSpeed)
 
 void COMXAudio::RegisterAudioCallback(IAudioCallback *pCallback)
 {
+  CSingleLock lock (m_critSection);
   if(!m_Passthrough && !m_HWDecode)
   {
     m_pCallback = pCallback;
@@ -1210,6 +1143,7 @@ void COMXAudio::RegisterAudioCallback(IAudioCallback *pCallback)
 
 void COMXAudio::UnRegisterAudioCallback()
 {
+  CSingleLock lock (m_critSection);
   m_pCallback = NULL;
 }
 
index 1a223e1..804bd2a 100644 (file)
@@ -98,7 +98,6 @@ public:
   bool BadState() { return !m_Initialized; };
   unsigned int GetAudioRenderingLatency();
   float GetMaxLevel(double &pts);
-  void VizPacket(const void* data, unsigned int len, double pts);
 
   void BuildChannelMap(enum PCMChannels *channelMap, uint64_t layout);
   int BuildChannelMapCEA(enum PCMChannels *channelMap, uint64_t layout);
@@ -135,19 +134,8 @@ private:
   int           m_extrasize;
   // stuff for visualisation
   double        m_last_pts;
-  int           m_vizBufferSize;
-  uint8_t       *m_vizBuffer;
-  int           m_vizRemapBufferSize;
-  uint8_t       *m_vizRemapBuffer;
-  CAERemap      m_vizRemap;
   bool          m_submitted_eos;
   bool          m_failed_eos;
-  typedef struct {
-    int num_samples;
-    float samples[VIS_PACKET_SIZE];
-    double pts;
-  } vizblock_t;
-  std::queue<vizblock_t> m_vizqueue;
 
   typedef struct {
     double pts;
index 16fc05c..4b584ac 100644 (file)
@@ -169,9 +169,6 @@ bool COMXImage::ClampLimits(unsigned int &width, unsigned int &height, unsigned
     height = max_height;
     clamped = true;
   }
-  // Texture.cpp wants even width/height
-  width  = (width  + 15) & ~15;
-  height = (height + 15) & ~15;
 
   return clamped;
 }
@@ -206,7 +203,8 @@ void COMXImage::AllocTextureInternal(struct textureinfo *tex)
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex->width, tex->height, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0);
+  GLenum type = CSettings::Get().GetBool("videoscreen.textures32") ? GL_UNSIGNED_BYTE:GL_UNSIGNED_SHORT_5_6_5;
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex->width, tex->height, 0, GL_RGB, type, 0);
   tex->egl_image = eglCreateImageKHR(m_egl_display, m_egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)tex->texture, NULL);
   tex->sync.Set();
   GLint m_result;
@@ -922,7 +920,7 @@ void COMXImageDec::Close()
     m_omx_resize.Deinitialize();
 }
 
-bool COMXImageDec::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height)
+bool COMXImageDec::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, unsigned int resize_stride)
 {
   OMX_ERRORTYPE omx_err = OMX_ErrorNone;
   // on the first port settings changed event, we create the tunnel and alloc the buffer
@@ -962,7 +960,7 @@ bool COMXImageDec::HandlePortSettingChange(unsigned int resize_width, unsigned i
     port_def.format.image.eColorFormat = OMX_COLOR_Format32bitARGB8888;
     port_def.format.image.nFrameWidth = resize_width;
     port_def.format.image.nFrameHeight = resize_height;
-    port_def.format.image.nStride = resize_width*4;
+    port_def.format.image.nStride = resize_stride;
     port_def.format.image.nSliceHeight = 0;
     port_def.format.image.bFlagErrorConcealment = OMX_FALSE;
 
@@ -1135,7 +1133,7 @@ bool COMXImageDec::Decode(const uint8_t *demuxer_content, unsigned demuxer_bytes
     omx_err = m_omx_decoder.WaitForEvent(OMX_EventPortSettingsChanged, timeout);
     if(omx_err == OMX_ErrorNone)
     {
-      if (!HandlePortSettingChange(width, height))
+      if (!HandlePortSettingChange(width, height, stride))
       {
         CLog::Log(LOGERROR, "%s::%s HandlePortSettingChange() failed\n", CLASSNAME, __func__);
         return false;
@@ -1163,8 +1161,7 @@ bool COMXImageDec::Decode(const uint8_t *demuxer_content, unsigned demuxer_bytes
   if(m_omx_decoder.BadState())
     return false;
 
-  assert(m_decoded_buffer->nFilledLen <= stride * height);
-  memcpy( (char*)pixels, m_decoded_buffer->pBuffer, m_decoded_buffer->nFilledLen);
+  memcpy( (char*)pixels, m_decoded_buffer->pBuffer, stride * height);
 
   Close();
   return true;
@@ -1444,7 +1441,7 @@ void COMXImageReEnc::Close()
 
 
 
-bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, bool port_settings_changed)
+bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, int orientation, bool port_settings_changed)
 {
   OMX_ERRORTYPE omx_err = OMX_ErrorNone;
   // on the first port settings changed event, we create the tunnel and alloc the buffer
@@ -1567,6 +1564,37 @@ bool COMXImageReEnc::HandlePortSettingChange(unsigned int resize_width, unsigned
       return false;
     }
 
+    if (orientation)
+    {
+      struct {
+        // metadata, these two fields need to be together
+        OMX_CONFIG_METADATAITEMTYPE metadata;
+        char metadata_space[64];
+      } item;
+      OMX_INIT_STRUCTURE(item.metadata);
+
+      item.metadata.nSize = sizeof(item);
+      item.metadata.eScopeMode = OMX_MetadataScopePortLevel;
+      item.metadata.nScopeSpecifier = m_omx_encoder.GetOutputPort();
+      item.metadata.nMetadataItemIndex = 0;
+      item.metadata.eSearchMode = OMX_MetadataSearchValueSizeByIndex;
+      item.metadata.eKeyCharset = OMX_MetadataCharsetASCII;
+      strcpy((char *)item.metadata.nKey, "IFD0.Orientation");
+      item.metadata.nKeySizeUsed = strlen((char *)item.metadata.nKey);
+
+      item.metadata.eValueCharset = OMX_MetadataCharsetASCII;
+      item.metadata.sLanguageCountry = 0;
+      item.metadata.nValueMaxSize = sizeof(item.metadata_space);
+      sprintf((char *)item.metadata.nValue, "%d", orientation);
+      item.metadata.nValueSizeUsed = strlen((char *)item.metadata.nValue);
+
+      omx_err = m_omx_encoder.SetParameter(OMX_IndexConfigMetadataItem, &item);
+      if (omx_err != OMX_ErrorNone)
+      {
+        CLog::Log(LOGERROR, "%s::%s m_omx_encoder.SetParameter:OMX_IndexConfigMetadataItem omx_err(0x%08x)\n", CLASSNAME, __func__, omx_err);
+        return false;
+      }
+    }
     omx_err = m_omx_encoder.AllocOutputBuffers();
     if(omx_err != OMX_ErrorNone)
     {
@@ -1733,7 +1761,7 @@ bool COMXImageReEnc::ReEncode(COMXImageFile &srcFile, unsigned int maxWidth, uns
     omx_err = m_omx_decoder.WaitForEvent(OMX_EventPortSettingsChanged, timeout);
     if(omx_err == OMX_ErrorNone)
     {
-      if (!HandlePortSettingChange(maxWidth, maxHeight, port_settings_changed))
+      if (!HandlePortSettingChange(maxWidth, maxHeight, srcFile.GetOrientation(), port_settings_changed))
       {
         CLog::Log(LOGERROR, "%s::%s %s HandlePortSettingChange() failed\n", srcFile.GetFilename(), CLASSNAME, __func__);
         return false;
index 843d8e3..ae4c15d 100644 (file)
@@ -125,7 +125,7 @@ public:
   unsigned int GetDecodedHeight() { return (unsigned int)m_decoded_format.format.image.nFrameHeight; };
   unsigned int GetDecodedStride() { return (unsigned int)m_decoded_format.format.image.nStride; };
 protected:
-  bool HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height);
+  bool HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, unsigned int resize_stride);
   // Components
   COMXCoreComponent             m_omx_decoder;
   COMXCoreComponent             m_omx_resize;
@@ -163,7 +163,7 @@ public:
   void Close();
   bool ReEncode(COMXImageFile &srcFile, unsigned int width, unsigned int height, void * &pDestBuffer, unsigned int &nDestSize);
 protected:
-  bool HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, bool port_settings_changed);
+  bool HandlePortSettingChange(unsigned int resize_width, unsigned int resize_height, int orientation, bool port_settings_changed);
   // Components
   COMXCoreComponent             m_omx_decoder;
   COMXCoreComponent             m_omx_resize;
index 5e77059..58f32d1 100644 (file)
@@ -234,6 +234,10 @@ static bool PredicateAudioPriority(const OMXSelectionStream& lh, const OMXSelect
   PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream
                  , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream);
 
+  // TrueHD never has enough cpu to decode on Pi, so prefer to avoid that
+  PREDICATE_RETURN(lh.codec != "truehd"
+                 , rh.codec != "truehd");
+
   if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.audiolanguage"), "original"))
   {
     CStdString audio_language = g_langInfo.GetAudioLanguage();
@@ -495,6 +499,9 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
     for(int i=0;i<count;i++)
     {
       CDemuxStream* stream = demuxer->GetStream(i);
+      /* skip streams with no type */
+      if (stream->type == STREAM_NONE)
+        continue;
       /* make sure stream is marked with right source */
       stream->source = source;
 
@@ -636,7 +643,7 @@ bool COMXPlayer::OpenFile(const CFileItem &file, const CPlayerOptions &options)
   }
 }
 
-bool COMXPlayer::CloseFile()
+bool COMXPlayer::CloseFile(bool reopen)
 {
   CLog::Log(LOGDEBUG, "COMXPlayer::CloseFile");
 
@@ -666,7 +673,7 @@ bool COMXPlayer::CloseFile()
   m_HasVideo = false;
   m_HasAudio = false;
 
-  CLog::Log(LOGNOTICE, "DVDPlayer: finished waiting");
+  CLog::Log(LOGNOTICE, "COMXPlayer: finished waiting");
 #if defined(HAS_VIDEO_PLAYBACK)
   g_renderManager.UnInit();
 #endif
@@ -705,19 +712,6 @@ bool COMXPlayer::OpenInputStream()
     m_filename = g_mediaManager.TranslateDevicePath("");
   }
 
-  // before creating the input stream, if this is an HLS playlist then get the
-  // most appropriate bitrate based on our network settings
-  // ensure to strip off the url options by using a temp CURL object
-  if (StringUtils::StartsWith(filename, "http://") && StringUtils::EndsWith(CURL(filename).GetFileName(), ".m3u8"))
-  {
-    // get the available bandwidth (as per user settings)
-    int maxrate = CSettings::Get().GetInt("network.bandwidth");
-    if(maxrate <= 0)
-      maxrate = INT_MAX;
-
-    // determine the most appropriate stream
-    m_filename = PLAYLIST::CPlayListM3U::GetBestBandwidthStream(m_filename, (size_t)maxrate);
-  }
   m_pInputStream = CDVDFactoryInputStream::CreateInputStream(this, m_filename, m_mimetype);
   if(m_pInputStream == NULL)
   {
@@ -1093,7 +1087,8 @@ void COMXPlayer::Process()
   if (CDVDInputStream::IMenus* ptr = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
   {
     CLog::Log(LOGNOTICE, "OMXPlayer: playing a file with menu's");
-    m_PlayerOptions.starttime = 0;
+    if(CDVDInputStreamNavigator* nav = dynamic_cast<CDVDInputStreamNavigator*>(m_pInputStream))
+      m_PlayerOptions.starttime = 0;
 
     if(m_PlayerOptions.state.size() > 0)
       ptr->SetState(m_PlayerOptions.state);
@@ -2170,7 +2165,7 @@ void COMXPlayer::CheckAutoSceneSkip()
   || m_CurrentVideo.dts == DVD_NOPTS_VALUE)
     return;
 
-  const int64_t clock = DVD_TIME_TO_MSEC(min(m_CurrentAudio.dts, m_CurrentVideo.dts) + m_offset_pts);
+  const int64_t clock = GetTime();
 
   CEdl::Cut cut;
   if(!m_Edl.InCut(clock, &cut))
@@ -3303,17 +3298,7 @@ bool COMXPlayer::OpenVideoStream(int iStream, int source, bool reset)
   if(m_CurrentVideo.id    < 0
   || m_CurrentVideo.hint != hint)
   {
-    // for music file, don't open artwork as video
-    bool disabled = false;
-    CStdString extension = URIUtils::GetExtension(m_filename);
-    StringUtils::ToLower(extension);
-    if (!extension.empty() && g_advancedSettings.m_musicExtensions.find(extension) != std::string::npos)
-    {
-      CLog::Log(LOGWARNING, "%s - Ignoring video in audio filetype:%s", __FUNCTION__, m_filename.c_str());
-      disabled = true;
-    }
-
-    if (disabled || !m_omxPlayerVideo.OpenStream(hint))
+    if (!m_omxPlayerVideo.OpenStream(hint))
     {
       /* mark stream as disabled, to disallaw further attempts */
       CLog::Log(LOGWARNING, "%s - Unsupported stream %d. Stream disabled.", __FUNCTION__, iStream);
index 96eed11..f34764d 100644 (file)
@@ -177,7 +177,7 @@ public:
   virtual ~COMXPlayer();
   
   virtual bool  OpenFile(const CFileItem &file, const CPlayerOptions &options);
-  virtual bool  CloseFile();
+  virtual bool  CloseFile(bool reopen = false);
   virtual bool  IsPlaying() const;
   virtual void  Pause();
   virtual bool  IsPaused() const;
index 7949ebc..27dbb5d 100644 (file)
@@ -511,12 +511,12 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints)
   /* check our audio capabilties */
 
   /* pathrought is overriding hw decode*/
-  if(hints.codec == AV_CODEC_ID_AC3 && CAEFactory::SupportsRaw(AE_FMT_AC3))
+  if(hints.codec == AV_CODEC_ID_AC3 && CAEFactory::SupportsRaw(AE_FMT_AC3) && !CSettings::Get().GetBool("audiooutput.dualaudio"))
   {
     dataFormat = AE_FMT_AC3;
     m_passthrough = true;
   }
-  if(hints.codec == AV_CODEC_ID_DTS && CAEFactory::SupportsRaw(AE_FMT_DTS))
+  if(hints.codec == AV_CODEC_ID_DTS && CAEFactory::SupportsRaw(AE_FMT_DTS) && !CSettings::Get().GetBool("audiooutput.dualaudio"))
   {
     dataFormat = AE_FMT_DTS;
     m_passthrough = true;
index 4421e04..a5620da 100644 (file)
@@ -95,12 +95,12 @@ OMXPlayerVideo::OMXPlayerVideo(OMXClock *av_clock,
   m_messageQueue.SetMaxDataSize((small_mem ? 10:40) * 1024 * 1024);
   m_messageQueue.SetMaxTimeSize(8.0);
 
+  m_src_rect.SetRect(0, 0, 0, 0);
   m_dst_rect.SetRect(0, 0, 0, 0);
   m_started = false;
   m_iCurrentPts = DVD_NOPTS_VALUE;
   m_nextOverlay = DVD_NOPTS_VALUE;
   m_flush = false;
-  m_view_mode = 0;
   m_history_valid_pts = 0;
 }
 
@@ -118,6 +118,7 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints)
   m_stalled     = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
   m_nextOverlay = DVD_NOPTS_VALUE;
   // force SetVideoRect to be called initially
+  m_src_rect.SetRect(0, 0, 0, 0);
   m_dst_rect.SetRect(0, 0, 0, 0);
 
   if (!m_DllBcmHost.Load())
@@ -233,7 +234,7 @@ void OMXPlayerVideo::ProcessOverlays(double pts)
   VecOverlaysIter it = pVecOverlays->begin();
 
   //Check all overlays and render those that should be rendered, based on time and forced
-  //Both forced and subs should check timeing, pts == 0 in the stillframe case
+  //Both forced and subs should check timing
   while (it != pVecOverlays->end())
   {
     CDVDOverlay* pOverlay = *it++;
@@ -242,7 +243,7 @@ void OMXPlayerVideo::ProcessOverlays(double pts)
 
     double pts2 = pOverlay->bForced ? pts : pts - m_iSubtitleDelay;
 
-    if((pOverlay->iPTSStartTime <= pts2 && (pOverlay->iPTSStopTime > pts2 || pOverlay->iPTSStopTime == 0LL)) || pts == 0)
+    if((pOverlay->iPTSStartTime <= pts2 && (pOverlay->iPTSStopTime > pts2 || pOverlay->iPTSStopTime == 0LL)))
     {
       if(pOverlay->IsOverlayType(DVDOVERLAY_TYPE_GROUP))
         overlays.insert(overlays.end(), static_cast<CDVDOverlayGroup*>(pOverlay)->m_overlays.begin()
@@ -299,9 +300,6 @@ void OMXPlayerVideo::Output(double pts, bool bDropPacket)
   double subtitle_pts = m_nextOverlay;
   double time = subtitle_pts != DVD_NOPTS_VALUE ? subtitle_pts - media_pts : 0.0;
 
-  if (m_nextOverlay != DVD_NOPTS_VALUE)
-    media_pts = m_nextOverlay;
-
   m_nextOverlay = NextOverlay(media_pts);
 
   ProcessOverlays(media_pts);
@@ -644,18 +642,37 @@ int OMXPlayerVideo::GetFreeSpace()
   return m_omxVideo.GetFreeSpace();
 }
 
-void OMXPlayerVideo::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
+void OMXPlayerVideo::SetVideoRect(const CRect &InSrcRect, const CRect &InDestRect)
 {
+  CRect SrcRect = InSrcRect, DestRect = InDestRect;
+
   // in 3d modes skip this - we get called as the gui switches from left eye to right eye
-  unsigned flags = GetStereoModeFlags(m_hints.stereo_mode);
+  unsigned flags = GetStereoModeFlags(GetStereoMode());
+
   if (CONF_FLAGS_STEREO_MODE_MASK(flags))
-    return;
+  {
+    if (g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_MONO)
+    {
+       if (GetStereoMode() == "left_right")
+         SrcRect.SetRect(0, 0, m_hints.width>>1, m_hints.height);
+       else if (GetStereoMode() == "right_left")
+         SrcRect.SetRect(m_hints.width>>1, 0, m_hints.width, m_hints.height);
+       else if (GetStereoMode() == "top_bottom")
+         SrcRect.SetRect(0, 0, m_hints.width, m_hints.height>>1);
+       else if (GetStereoMode() == "bottom_top")
+         SrcRect.SetRect(0, m_hints.height>>1, m_hints.width, m_hints.height);
+    }
+    else
+      SrcRect.SetRect(0, 0, m_hints.width, m_hints.height);
+    // interpreted as fullscreen
+    DestRect.SetRect(0, 0, 0, 0);
+  }
 
   // check if destination rect or video view mode has changed
-  if ((m_dst_rect != DestRect) || (m_view_mode != CMediaSettings::Get().GetCurrentVideoSettings().m_ViewMode))
+  if (m_dst_rect != DestRect || m_src_rect != SrcRect)
   {
+    m_src_rect  = SrcRect;
     m_dst_rect  = DestRect;
-    m_view_mode = CMediaSettings::Get().GetCurrentVideoSettings().m_ViewMode;
   }
   else
   {
@@ -664,12 +681,11 @@ void OMXPlayerVideo::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
 
   // might need to scale up m_dst_rect to display size as video decodes
   // to separate video plane that is at display size.
-  CRect gui, display, dst_rect;
   RESOLUTION res = g_graphicsContext.GetVideoResolution();
-  gui.SetRect(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iWidth, CDisplaySettings::Get().GetResolutionInfo(res).iHeight);
-  display.SetRect(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iScreenWidth, CDisplaySettings::Get().GetResolutionInfo(res).iScreenHeight);
-  
-  dst_rect = m_dst_rect;
+  CRect gui(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iWidth, CDisplaySettings::Get().GetResolutionInfo(res).iHeight);
+  CRect display(0, 0, CDisplaySettings::Get().GetResolutionInfo(res).iScreenWidth, CDisplaySettings::Get().GetResolutionInfo(res).iScreenHeight);
+  CRect dst_rect(m_dst_rect);
+
   if (gui != display)
   {
     float xscale = display.Width()  / gui.Width();
@@ -703,7 +719,7 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, f
     m_bAllowFullscreen = false; // only allow on first configure
   }
 
-  flags |= GetStereoModeFlags(m_hints.stereo_mode);
+  flags |= GetStereoModeFlags(GetStereoMode());
 
   if(flags & CONF_FLAGS_STEREO_MODE_SBS)
   {
index 2b3c831..b49748f 100644 (file)
@@ -67,8 +67,8 @@ protected:
   float                     m_fForcedAspectRatio;
   unsigned                  m_flags;
 
+  CRect                     m_src_rect;
   CRect                     m_dst_rect;
-  int                       m_view_mode;
 
   uint32_t                  m_history_valid_pts;
   DllBcmHost                m_DllBcmHost;
index 03ffb94..e0ea992 100644 (file)
@@ -361,9 +361,6 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
   m_submitted_eos = false;
   m_failed_eos    = false;
 
-  if(!m_decoded_width || !m_decoded_height)
-    return false;
-
   if(hints.extrasize > 0 && hints.extradata != NULL)
   {
     m_extrasize = hints.extrasize;
@@ -756,7 +753,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;
       }
-      else if(pts == DVD_NOPTS_VALUE)
+      if(pts == DVD_NOPTS_VALUE)
         omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN;
 
       omx_buffer->nTimeStamp = ToOMXTime((uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts);
@@ -852,6 +849,8 @@ void COMXVideo::SetVideoRect(const CRect& SrcRect, const CRect& DestRect)
   configDisplay.src_rect.width      = (int)(SrcRect.Width()+0.5f);
   configDisplay.src_rect.height     = (int)(SrcRect.Height()+0.5f);
 
+  configDisplay.fullscreen          = configDisplay.dest_rect.width == 0 || configDisplay.dest_rect.width == 0 ? OMX_TRUE : OMX_FALSE;
+
   m_omx_render.SetConfig(OMX_IndexConfigDisplayRegion, &configDisplay);
 
   CLog::Log(LOGDEBUG, "dest_rect.x_offset %d dest_rect.y_offset %d dest_rect.width %d dest_rect.height %d\n",
index 4995b32..77c6a15 100644 (file)
@@ -4,8 +4,4 @@
     <defaultplayer>omxplayer</defaultplayer>
     <defaultdvdplayer>omxplayer</defaultdvdplayer>
   </video>
-  <audio>
-    <defaultplayer>omxplayer</defaultplayer>
-    <streamsilence>false</streamsilence>
-  </audio>
 </advancedsettings>
index fb4aa21..0ae7bea 100644 (file)
  */
 
 #include "ICodec.h"
-#include "filesystem/File.h"
 
 class CachingCodec : public ICodec
 {
 public:
   virtual ~CachingCodec() {}
   virtual int GetCacheLevel() const { return -1; }
-
-protected:
-  XFILE::CFile m_file;
 };
index 6d3d229..995c4be 100644 (file)
@@ -109,6 +109,8 @@ ICodec* CodecFactory::CreateCodec(const CStdString& strFileType)
 #endif
   else if (strFileType.Equals("tta"))
     return new DVDPlayerCodec();
+  else if (strFileType.Equals("tak"))
+    return new DVDPlayerCodec();
 
   return NULL;
 }
index cea9844..2c4d93f 100644 (file)
@@ -208,7 +208,10 @@ FLAC__StreamDecoderReadStatus FLACCodec::DecoderReadCallback(const FLAC__StreamD
 
   *bytes=pThis->m_file.Read(buffer, *bytes);
 
-  return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
+  if (*bytes==0)
+    return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
+  else
+    return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
 }
 
 FLAC__StreamDecoderSeekStatus FLACCodec::DecoderSeekCallback(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
index 1785b73..c08f823 100644 (file)
@@ -509,14 +509,29 @@ inline bool PAPlayer::PrepareStream(StreamInfo *si)
   return true;
 }
 
-bool PAPlayer::CloseFile()
+bool PAPlayer::CloseFile(bool reopen)
 {
+  if (reopen)
+    CAEFactory::KeepConfiguration(3000);
+
   if (!m_isPaused)
     SoftStop(true, true);
   CloseAllStreams(false);
 
   /* wait for the thread to terminate */
   StopThread(true);//true - wait for end of thread
+
+  // wait for any pending jobs to complete
+  {
+    CSharedLock lock(m_streamsLock);
+    while (m_jobCounter > 0)
+    {
+      lock.Leave();
+      m_jobEvent.WaitMSec(100);
+      lock.Enter();
+    }
+  }
+
   return true;
 }
 
@@ -538,37 +553,16 @@ void PAPlayer::Process()
       m_signalSpeedChange = false;
     }
 
-    double delay  = 100.0;
-    double buffer = 100.0;
-    ProcessStreams(delay, buffer);
-
-    double watermark = buffer * 0.5;
-#if defined(TARGET_DARWIN)
-    // In CoreAudio the delay can be bigger then the buffer
-    // because of delay from the HAL/Hardware
-    // This is the case when the buffer is full (e.x. 1 sec)
-    // and there is a HAL-Delay. In that case we would never sleep
-    // but load one cpu core up to 100% (happens on osx/ios whenever
-    // the first stream is finished and a prebuffered second stream
-    // starts to play. A BIG FIXME HERE.
-    if ((delay < buffer || buffer == 1) && delay > watermark)
-#else
-    if ((delay < buffer) && delay > watermark)
-#endif
-      CThread::Sleep(MathUtils::round_int((delay - watermark) * 1000.0));
+    double freeBufferTime = 0.0;
+    ProcessStreams(freeBufferTime);
 
-    GetTimeInternal(); //update for GUI
-  }
-
-  // wait for any pending jobs to complete
-  {
-    CSharedLock lock(m_streamsLock);
-    while (m_jobCounter > 0)
+    // if none of our streams wants at least 10ms of data, we sleep
+    if (freeBufferTime < 0.01)
     {
-      lock.Leave();
-      m_jobEvent.WaitMSec(100);
-      lock.Enter();
+      CThread::Sleep(10);
     }
+
+    GetTimeInternal(); //update for GUI
   }
 
   if(m_isFinished && !m_bStop)
@@ -577,13 +571,13 @@ void PAPlayer::Process()
     m_callback.OnPlayBackStopped();
 }
 
-inline void PAPlayer::ProcessStreams(double &delay, double &buffer)
+inline void PAPlayer::ProcessStreams(double &freeBufferTime)
 {
   CSharedLock sharedLock(m_streamsLock);
   if (m_isFinished && m_streams.empty() && m_finishing.empty())
   {
     m_isPlaying = false;
-    delay       = 0;
+    freeBufferTime = 1.0;
     return;
   }
 
@@ -614,7 +608,7 @@ inline void PAPlayer::ProcessStreams(double &delay, double &buffer)
       UpdateGUIData(si); //update for GUI
     }
     /* if the stream is finishing */
-    if ((si->m_playNextTriggered && si->m_stream && !si->m_stream->IsFading()) || !ProcessStream(si, delay, buffer))
+    if ((si->m_playNextTriggered && si->m_stream && !si->m_stream->IsFading()) || !ProcessStream(si, freeBufferTime))
     {
       if (!si->m_prepareTriggered)
       {
@@ -700,7 +694,7 @@ inline void PAPlayer::ProcessStreams(double &delay, double &buffer)
   }
 }
 
-inline bool PAPlayer::ProcessStream(StreamInfo *si, double &delay, double &buffer)
+inline bool PAPlayer::ProcessStream(StreamInfo *si, double &freeBufferTime)
 {
   /* if playback needs to start on this stream, do it */
   if (si == m_currentStream && !si->m_started)
@@ -798,14 +792,16 @@ inline bool PAPlayer::ProcessStream(StreamInfo *si, double &delay, double &buffe
   if (!QueueData(si))
     return false;
 
-  /* update the delay time if we are running */
+  /* update free buffer time if we are running */
   if (si->m_started)
   {
     if (si->m_stream->IsBuffering())
-      delay = 0.0;
+      freeBufferTime = 1.0;
     else
-      delay = std::min(delay , si->m_stream->GetDelay());
-    buffer = std::min(buffer, si->m_stream->GetCacheTotal());
+    {
+      double free_space = (double)(si->m_stream->GetSpace() / si->m_bytesPerSample) / si->m_sampleRate;
+      freeBufferTime = std::max(freeBufferTime , free_space);
+    }
   }
 
   return true;
index 8321ce2..8e97823 100644 (file)
@@ -46,7 +46,7 @@ public:
   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options);
   virtual bool QueueNextFile(const CFileItem &file);
   virtual void OnNothingToQueueNotify();
-  virtual bool CloseFile();
+  virtual bool CloseFile(bool reopen = false);
   virtual bool IsPlaying() const;
   virtual void Pause();
   virtual bool IsPaused() const;
@@ -147,9 +147,9 @@ private:
   void SoftStart(bool wait = false);
   void SoftStop(bool wait = false, bool close = true);
   void CloseAllStreams(bool fade = true);
-  void ProcessStreams(double &delay, double &buffer);
+  void ProcessStreams(double &freeBufferTime);
   bool PrepareStream(StreamInfo *si);
-  bool ProcessStream(StreamInfo *si, double &delay, double &buffer);
+  bool ProcessStream(StreamInfo *si, double &freeBufferTime);
   bool QueueData(StreamInfo *si);
   int64_t GetTotalTime64();
   void UpdateCrossfadeTime(const CFileItem& file);
index 7a5d4e7..27f0bec 100644 (file)
@@ -93,14 +93,10 @@ public:
         pPlayer = new COMXPlayer(callback); 
         CLog::Log(LOGINFO, "Created player %s for core %d / OMXPlayer forced as DVDPlayer", "OMXPlayer", m_eCore);
         break;
-      case EPC_PAPLAYER: 
-        pPlayer = new COMXPlayer(callback); 
-        CLog::Log(LOGINFO, "Created player %s for core %d / OMXPlayer forced as PAPLayer", "OMXPlayer", m_eCore);
-        break;
 #else
       case EPC_DVDPLAYER: pPlayer = new CDVDPlayer(callback); break;
-      case EPC_PAPLAYER: pPlayer = new PAPlayer(callback); break;
 #endif
+      case EPC_PAPLAYER: pPlayer = new PAPlayer(callback); break;
       case EPC_EXTPLAYER: pPlayer = new CExternalPlayer(callback); break;
 #if defined(HAS_OMXPLAYER)
       case EPC_OMXPLAYER: pPlayer = new COMXPlayer(callback); break;
index a0add7c..63a0125 100644 (file)
@@ -118,7 +118,7 @@ void CPlayerSelectionRule::GetPlayers(const CFileItem& item, VECPLAYERCORES &vec
   if (m_tDVDFile >= 0 && (m_tDVDFile > 0) != item.IsDVDFile()) return;
   if (m_tDVDImage >= 0 && (m_tDVDImage > 0) != item.IsDVDImage()) return;
 
-  CRegExp regExp(false, true);
+  CRegExp regExp(false, CRegExp::autoUtf8);
 
   if (m_bStreamDetails)
   {
index 9bcf633..1deb4c9 100644 (file)
@@ -106,6 +106,7 @@ CDatabase::CDatabase(void)
   m_openCount = 0;
   m_sqlite = true;
   m_bMultiWrite = false;
+  m_multipleExecute = false;
 }
 
 CDatabase::~CDatabase(void)
@@ -135,30 +136,6 @@ uint32_t CDatabase::ComputeCRC(const CStdString &text)
   return crc;
 }
 
-
-CStdString CDatabase::FormatSQL(CStdString strStmt, ...)
-{
-  //  %q is the sqlite format string for %s.
-  //  Any bad character, like "'", will be replaced with a proper one
-  StringUtils::Replace(strStmt, "%s", "%q");
-  //  the %I64 enhancement is not supported by sqlite3_vmprintf
-  //  must be %ll instead
-  StringUtils::Replace(strStmt, "%I64", "%ll");
-
-  va_list args;
-  va_start(args, strStmt);
-  char *szSql = sqlite3_vmprintf(strStmt.c_str(), args);
-  va_end(args);
-
-  CStdString strResult;
-  if (szSql) {
-    strResult = szSql;
-    sqlite3_free(szSql);
-  }
-
-  return strResult;
-}
-
 CStdString CDatabase::PrepareSQL(CStdString strStmt, ...) const
 {
   CStdString strResult = "";
@@ -210,23 +187,42 @@ CStdString CDatabase::GetSingleValue(const CStdString &query)
   return GetSingleValue(query, m_pDS);
 }
 
-bool CDatabase::DeleteValues(const CStdString &strTable, const CStdString &strWhereClause /* = CStdString() */)
+bool CDatabase::DeleteValues(const CStdString &strTable, const Filter &filter /* = Filter() */)
 {
-  bool bReturn = true;
-
-  CStdString strQueryBase = "DELETE FROM %s";
-  if (!strWhereClause.empty())
-    strQueryBase += StringUtils::Format(" WHERE %s", strWhereClause.c_str());
-
-  CStdString strQuery = FormatSQL(strQueryBase, strTable.c_str());
+  CStdString strQuery;
+  BuildSQL(PrepareSQL("DELETE FROM %s ", strTable.c_str()), filter, strQuery);
+  return ExecuteQuery(strQuery);
+}
 
-  bReturn = ExecuteQuery(strQuery);
+bool CDatabase::BeginMultipleExecute()
+{
+  m_multipleExecute = true;
+  return true;
+}
 
-  return bReturn;
+bool CDatabase::CommitMultipleExecute()
+{
+  m_multipleExecute = false;
+  BeginTransaction();
+  for (std::vector<std::string>::const_iterator i = m_multipleQueries.begin(); i != m_multipleQueries.end(); ++i)
+  {
+    if (!ExecuteQuery(*i))
+    {
+      RollbackTransaction();
+      return false;
+    }
+  }
+  return true;
 }
 
 bool CDatabase::ExecuteQuery(const CStdString &strQuery)
 {
+  if (m_multipleExecute)
+  {
+    m_multipleQueries.push_back(strQuery);
+    return true;
+  }
+
   bool bReturn = false;
 
   try
@@ -579,6 +575,7 @@ void CDatabase::Close()
   }
 
   m_openCount = 0;
+  m_multipleExecute = false;
 
   if (NULL == m_pDB.get() ) return ;
   if (NULL != m_pDS.get()) m_pDS->close();
index ec9f0ea..a270f08 100644 (file)
@@ -71,7 +71,6 @@ public:
   void RollbackTransaction();
   bool InTransaction();
 
-  static CStdString FormatSQL(CStdString strStmt, ...);
   CStdString PrepareSQL(CStdString strStmt, ...) const;
 
   /*!
@@ -95,17 +94,19 @@ public:
 
   /*!
    * @brief Delete values from a table.
-   * @remarks The value of the strWhereClause parameter has to be FormatSQL'ed when used.
    * @param strTable The table to delete the values from.
-   * @param strWhereClause If set, use this WHERE clause.
+   * @param filter The Filter to apply to this query.
    * @return True if the query was executed successfully, false otherwise.
    */
-  bool DeleteValues(const CStdString &strTable, const CStdString &strWhereClause = CStdString());
+  bool DeleteValues(const CStdString &strTable, const Filter &filter = Filter());
 
   /*!
    * @brief Execute a query that does not return any result.
+   *        Note that if BeginMultipleExecute() has been called, the
+   *        query will be queued until CommitMultipleExecute() is called.
    * @param strQuery The query to execute.
    * @return True if the query was executed successfully, false otherwise.
+   * @sa BeginMultipleExecute, CommitMultipleExecute
    */
   bool ExecuteQuery(const CStdString &strQuery);
 
@@ -118,6 +119,26 @@ public:
   bool ResultQuery(const CStdString &strQuery);
 
   /*!
+   * @brief Start a multiple execution queue. Any ExecuteQuery() function
+   *        following this call will be queued rather than executed until
+   *        CommitMultipleExecute() is performed.
+   *          NOTE: Queries that rely on any queued execute query will not
+   *                function as expected during this period!
+   * @return true if we could start a multiple execution queue, false otherwise.
+   * @sa CommitMultipleExecute, ExecuteQuery
+   */
+  bool BeginMultipleExecute();
+
+  /*!
+   * @brief Commit the multiple execution queue to the database.
+   *        Queries are performed within a transaction, and the transaction
+   *        is rolled back should any one query fail.
+   * @return True if the queries were executed successfully, false otherwise.
+   * @sa BeginMultipleExecute, ExecuteQuery
+   */
+  bool CommitMultipleExecute();
+
+  /*!
    * @brief Open a new dataset.
    * @return True if the dataset was created successfully, false otherwise.
    */
@@ -173,4 +194,7 @@ private:
 
   bool m_bMultiWrite; /*!< True if there are any queries in the queue, false otherwise */
   unsigned int m_openCount;
+
+  bool m_multipleExecute;
+  std::vector<std::string> m_multipleQueries;
 };
index 9db5970..d2fcd9a 100644 (file)
@@ -147,7 +147,7 @@ bool CDatabaseQueryRule::Load(const CVariant &obj)
     return false;
 
   const CVariant &value = obj["value"];
-  if (value.isString() && !value.asString().empty())
+  if (value.isString())
     m_parameter.push_back(value.asString());
   else if (value.isArray())
   {
@@ -156,6 +156,8 @@ bool CDatabaseQueryRule::Load(const CVariant &obj)
       if (val->isString() && !val->asString().empty())
         m_parameter.push_back(val->asString());
     }
+    if (m_parameter.empty())
+      m_parameter.push_back("");
   }
   else
     return false;
@@ -243,6 +245,14 @@ void CDatabaseQueryRule::SetParameter(const std::vector<CStdString> &values)
   m_parameter.assign(values.begin(), values.end());
 }
 
+CStdString CDatabaseQueryRule::ValidateParameter(const CStdString &parameter) const
+{
+  if ((GetFieldType(m_field) == NUMERIC_FIELD ||
+       GetFieldType(m_field) == SECONDS_FIELD) && parameter.empty())
+    return "0"; // interpret empty fields as 0
+  return parameter;
+}
+
 CStdString CDatabaseQueryRule::FormatParameter(const CStdString &operatorString, const CStdString &param, const CDatabase &db, const CStdString &strType) const
 {
   CStdString parameter;
@@ -259,7 +269,7 @@ CStdString CDatabaseQueryRule::FormatParameter(const CStdString &operatorString,
     parameter = " IN (" + parameter + ")";
   }
   else
-    parameter = db.PrepareSQL(operatorString.c_str(), param.c_str());
+    parameter = db.PrepareSQL(operatorString.c_str(), ValidateParameter(param).c_str());
 
   if (GetFieldType(m_field) == DATE_FIELD)
   {
@@ -392,6 +402,11 @@ CStdString CDatabaseQueryRule::FormatWhereClause(const CStdString &negate, const
 
     query = StringUtils::Format(fmt.c_str(), GetField(m_field,strType).c_str());
     query += negate + parameter;
+
+    // special case for matching parameters in fields that might be either empty or NULL.
+    if ((  param.empty() &&  negate.empty() ) ||
+        ( !param.empty() && !negate.empty() ))
+      query += " OR " + GetField(m_field,strType) + " IS NULL";
   }
 
   if (query.Equals(negate + parameter))
index 7e684a5..61428e7 100644 (file)
@@ -86,6 +86,7 @@ protected:
   virtual FIELD_TYPE          GetFieldType(int field) const=0;
   virtual int                 TranslateField(const char *field) const=0;
   virtual CStdString          TranslateField(int field) const=0;
+  CStdString                  ValidateParameter(const CStdString &parameter) const;
   virtual CStdString          FormatParameter(const CStdString &negate, const CStdString &oper, const CDatabase &db, const CStdString &type) const;
   virtual CStdString          FormatWhereClause(const CStdString &negate, const CStdString &oper, const CStdString &param,
                                                 const CDatabase &db, const CStdString &type) const;
index b29975f..523e621 100644 (file)
@@ -128,7 +128,8 @@ int MysqlDatabase::connect(bool create_new) {
         ciphers.empty() ? NULL : ciphers.c_str());
     }
 
-    CWakeOnAccess::Get().WakeUpHost(host, "MySQL : " + db);
+    if (!CWakeOnAccess::Get().WakeUpHost(host, "MySQL : " + db))
+      return DB_CONNECTION_NONE;
 
     // establish connection with just user credentials
     if (mysql_real_connect(conn, host.c_str(),login.c_str(),passwd.c_str(), NULL, atoi(port.c_str()),NULL,0) != NULL)
@@ -154,7 +155,7 @@ int MysqlDatabase::connect(bool create_new) {
         char sqlcmd[512];
         int ret;
 
-        sprintf(sqlcmd, "CREATE DATABASE `%s`", db.c_str());
+        sprintf(sqlcmd, "CREATE DATABASE `%s` CHARACTER SET utf8 COLLATE utf8_general_ci", db.c_str());
         if ( (ret=query_with_reconnect(sqlcmd)) != MYSQL_OK )
         {
           throw DbErrors("Can't create new database: '%s' (%d)", db.c_str(), ret);
@@ -249,7 +250,7 @@ int MysqlDatabase::copy(const char *backup_name) {
     }
 
     // create the new database
-    sprintf(sql, "CREATE DATABASE `%s`", backup_name);
+    sprintf(sql, "CREATE DATABASE `%s` CHARACTER SET utf8 COLLATE utf8_general_ci", backup_name);
     if ( (ret=query_with_reconnect(sql)) != MYSQL_OK )
     {
       mysql_free_result(res);
@@ -1374,7 +1375,8 @@ int MysqlDataset::exec(const string &sql) {
   }
 
   // force the charset and collation to UTF-8
-  if ( ci_find(qry, "CREATE TABLE") != string::npos )
+  if ( ci_find(qry, "CREATE TABLE") != string::npos 
+    || ci_find(qry, "CREATE TEMPORARY TABLE") != string::npos )
   {
     qry += " CHARACTER SET utf8 COLLATE utf8_general_ci";
   }
index cd9aa48..4e6f36f 100644 (file)
@@ -83,17 +83,14 @@ void CGUIDialogBoxBase::SetLine(unsigned int iLine, const CVariant& line)
     lines.resize(iLine+1);
   lines[iLine] = label;
   std::string text = StringUtils::Join(lines, "\n");
-  if (text != m_text)
-  {
-    m_text = StringUtils::Join(lines, "\n");
-    SetInvalid();
-  }
+  SetText(text);
 }
 
 void CGUIDialogBoxBase::SetText(const CVariant& text)
 {
   std::string label = GetLocalized(text);
   CSingleLock lock(m_section);
+  StringUtils::Trim(label, "\n");
   if (label != m_text)
   {
     m_text = label;
index fff3b24..f0c614b 100644 (file)
@@ -110,6 +110,7 @@ enum CONTEXT_BUTTON { CONTEXT_BUTTON_CANCELLED = 0,
                       CONTEXT_BUTTON_SET_MOVIESET_ART,
                       CONTEXT_BUTTON_BEGIN,
                       CONTEXT_BUTTON_END,
+                      CONTEXT_BUTTON_NOW,
                       CONTEXT_BUTTON_FIND,
                       CONTEXT_BUTTON_DELETE_PLUGIN,
                       CONTEXT_BUTTON_SORTASC,
index e28e337..8b8c675 100644 (file)
@@ -169,7 +169,7 @@ bool CGUIDialogGamepad::OnMessage(CGUIMessage& message)
 // \param aTextString String to preload into the keyboard accumulator. Overwritten with user input if return=true.
 // \param dlgHeading String shown on dialog title. Converts to localized string if contains a positive integer.
 // \param bHideUserInput Masks user input as asterisks if set as true.  Currently not yet implemented.
-// \return true if successful display and user input. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIDialogGamepad::ShowAndGetInput(CStdString& aTextString, const CStdString &dlgHeading, bool bHideUserInput)
 {
   // Prompt user for input
@@ -192,7 +192,7 @@ bool CGUIDialogGamepad::ShowAndGetInput(CStdString& aTextString, const CStdStrin
 
 // \brief Show gamepad keypad twice to get and confirm a user-entered password string.
 // \param strNewPassword String to preload into the keyboard accumulator. Overwritten with user input if return=true.
-// \return true if successful display and user input entry/re-entry. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input entry/re-entry. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIDialogGamepad::ShowAndVerifyNewPassword(CStdString& strNewPassword)
 {
   // Prompt user for password input
@@ -225,7 +225,7 @@ bool CGUIDialogGamepad::ShowAndVerifyNewPassword(CStdString& strNewPassword)
 // \param strPassword Value to compare against user input.
 // \param dlgHeading String shown on dialog title. Converts to localized string if contains a positive integer.
 // \param iRetries If greater than 0, shows "Incorrect password, %d retries left" on dialog line 2, else line 2 is blank.
-// \return 0 if successful display and user input. 1 if unsucessful input. -1 if no user input or canceled editing.
+// \return 0 if successful display and user input. 1 if unsuccessful input. -1 if no user input or canceled editing.
 int CGUIDialogGamepad::ShowAndVerifyPassword(CStdString& strPassword, const CStdString& dlgHeading, int iRetries)
 {
   CStdString strLine2 = "";
@@ -259,7 +259,7 @@ int CGUIDialogGamepad::ShowAndVerifyPassword(CStdString& strPassword, const CStd
 // \param dlgLine2 String shown on dialog line 2. Converts to localized string if contains a positive integer.
 // \param bGetUserInput If set as true and return=true, strToVerify is overwritten with user input string.
 // \param bHideInputChars Masks user input as asterisks if set as true.  Currently not yet implemented.
-// \return true if successful display and user input. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIDialogGamepad::ShowAndVerifyInput(CStdString& strToVerify, const CStdString& dlgHeading,
     const CStdString& dlgLine0, const CStdString& dlgLine1,
     const CStdString& dlgLine2, bool bGetUserInput, bool bHideInputChars)
index 6978fcc..3eed5d6 100644 (file)
@@ -693,7 +693,7 @@ bool CGUIDialogNumeric::ShowAndGetNumber(CStdString& strInput, const CStdString
 
 // \brief Show numeric keypad twice to get and confirm a user-entered password string.
 // \param strNewPassword String to preload into the keyboard accumulator. Overwritten with user input if return=true.
-// \return true if successful display and user input entry/re-entry. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input entry/re-entry. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIDialogNumeric::ShowAndVerifyNewPassword(CStdString& strNewPassword)
 {
   // Prompt user for password input
@@ -726,7 +726,7 @@ bool CGUIDialogNumeric::ShowAndVerifyNewPassword(CStdString& strNewPassword)
 // \param strPassword Value to compare against user input.
 // \param strHeading String shown on dialog title. Converts to localized string if contains a positive integer.
 // \param iRetries If greater than 0, shows "Incorrect password, %d retries left" on dialog line 2, else line 2 is blank.
-// \return 0 if successful display and user input. 1 if unsucessful input. -1 if no user input or canceled editing.
+// \return 0 if successful display and user input. 1 if unsuccessful input. -1 if no user input or canceled editing.
 int CGUIDialogNumeric::ShowAndVerifyPassword(CStdString& strPassword, const CStdString& strHeading, int iRetries)
 {
   CStdString strTempHeading = strHeading;
@@ -747,7 +747,7 @@ int CGUIDialogNumeric::ShowAndVerifyPassword(CStdString& strPassword, const CStd
 // \param strToVerify Value to compare against user input.
 // \param dlgHeading String shown on dialog title.
 // \param bVerifyInput If set as true we verify the users input versus strToVerify.
-// \return true if successful display and user input. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIDialogNumeric::ShowAndVerifyInput(CStdString& strToVerify, const CStdString& dlgHeading, bool bVerifyInput)
 {
   // Prompt user for password input
index 70e12ec..27966fb 100644 (file)
@@ -325,7 +325,7 @@ void CGUIDialogSmartPlaylistRule::OnBrowse()
   }
 
   // sort the items
-  items.Sort(SortByLabel, SortOrderAscending);
+  items.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle);
 
   CGUIDialogSelect* pDialog = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
   pDialog->Reset();
index 8fad897..5440f82 100644 (file)
@@ -628,7 +628,7 @@ bool CEpg::FixOverlappingEvents(bool bUpdateDb /* = false */)
       it->second->ClearTimer();
       m_tags.erase(it++);
     }
-    else if (previousTag->EndAsUTC() != currentTag->StartAsUTC())
+    else if (previousTag->EndAsUTC() > currentTag->StartAsUTC())
     {
       previousTag->SetEndFromUTC(currentTag->StartAsUTC());
       if (bUpdateDb)
index eaa4605..91699a0 100644 (file)
@@ -170,10 +170,10 @@ bool CEpgDatabase::Delete(const CEpg &table)
     return false;
   }
 
-  CStdString strWhereClause;
-  strWhereClause = FormatSQL("idEpg = %u", table.EpgID());
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idEpg = %u", table.EpgID()));
 
-  return DeleteValues("epg", strWhereClause);
+  return DeleteValues("epg", filter);
 }
 
 bool CEpgDatabase::DeleteOldEpgEntries(void)
@@ -183,9 +183,10 @@ bool CEpgDatabase::DeleteOldEpgEntries(void)
       CDateTimeSpan(0, g_advancedSettings.m_iEpgLingerTime / 60, g_advancedSettings.m_iEpgLingerTime % 60, 0);
   cleanupTime.GetAsTime(iCleanupTime);
 
-  CStdString strWhereClause = FormatSQL("iEndTime < %u", iCleanupTime);
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("iEndTime < %u", iCleanupTime));
 
-  return DeleteValues("epgtags", strWhereClause);
+  return DeleteValues("epgtags", filter);
 }
 
 bool CEpgDatabase::Delete(const CEpgInfoTag &tag)
@@ -194,16 +195,17 @@ bool CEpgDatabase::Delete(const CEpgInfoTag &tag)
   if (tag.BroadcastId() <= 0)
     return false;
 
-  CStdString strWhereClause = FormatSQL("idBroadcast = %u", tag.BroadcastId());
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idBroadcast = %u", tag.BroadcastId()));
 
-  return DeleteValues("epgtags", strWhereClause);
+  return DeleteValues("epgtags", filter);
 }
 
 int CEpgDatabase::Get(CEpgContainer &container)
 {
   int iReturn(-1);
 
-  CStdString strQuery = FormatSQL("SELECT idEpg, sName, sScraperName FROM epg;");
+  CStdString strQuery = PrepareSQL("SELECT idEpg, sName, sScraperName FROM epg;");
   if (ResultQuery(strQuery))
   {
     iReturn = 0;
@@ -235,7 +237,7 @@ int CEpgDatabase::Get(CEpg &epg)
 {
   int iReturn(-1);
 
-  CStdString strQuery = FormatSQL("SELECT * FROM epgtags WHERE idEpg = %u;", epg.EpgID());
+  CStdString strQuery = PrepareSQL("SELECT * FROM epgtags WHERE idEpg = %u;", epg.EpgID());
   if (ResultQuery(strQuery))
   {
     iReturn = 0;
@@ -292,7 +294,7 @@ int CEpgDatabase::Get(CEpg &epg)
 bool CEpgDatabase::GetLastEpgScanTime(int iEpgId, CDateTime *lastScan)
 {
   bool bReturn = false;
-  CStdString strWhereClause = FormatSQL("idEpg = %u", iEpgId);
+  CStdString strWhereClause = PrepareSQL("idEpg = %u", iEpgId);
   CStdString strValue = GetSingleValue("lastepgscan", "sLastScan", strWhereClause);
 
   if (!strValue.empty())
@@ -310,7 +312,7 @@ bool CEpgDatabase::GetLastEpgScanTime(int iEpgId, CDateTime *lastScan)
 
 bool CEpgDatabase::PersistLastEpgScanTime(int iEpgId /* = 0 */, bool bQueueWrite /* = false */)
 {
-  CStdString strQuery = FormatSQL("REPLACE INTO lastepgscan(idEpg, sLastScan) VALUES (%u, '%s');",
+  CStdString strQuery = PrepareSQL("REPLACE INTO lastepgscan(idEpg, sLastScan) VALUES (%u, '%s');",
       iEpgId, CDateTime::GetCurrentDateTime().GetAsUTCDateTime().GetAsDBDateTime().c_str());
 
   return bQueueWrite ? QueueInsertQuery(strQuery) : ExecuteQuery(strQuery);
@@ -334,10 +336,10 @@ int CEpgDatabase::Persist(const CEpg &epg, bool bQueueWrite /* = false */)
 
   CStdString strQuery;
   if (epg.EpgID() > 0)
-    strQuery = FormatSQL("REPLACE INTO epg (idEpg, sName, sScraperName) "
+    strQuery = PrepareSQL("REPLACE INTO epg (idEpg, sName, sScraperName) "
         "VALUES (%u, '%s', '%s');", epg.EpgID(), epg.Name().c_str(), epg.ScraperName().c_str());
   else
-    strQuery = FormatSQL("INSERT INTO epg (sName, sScraperName) "
+    strQuery = PrepareSQL("INSERT INTO epg (sName, sScraperName) "
         "VALUES ('%s', '%s');", epg.Name().c_str(), epg.ScraperName().c_str());
 
   if (bQueueWrite)
@@ -377,7 +379,7 @@ int CEpgDatabase::Persist(const CEpgInfoTag &tag, bool bSingleUpdate /* = true *
 
   if (iBroadcastId < 0)
   {
-    strQuery = FormatSQL("REPLACE INTO epgtags (idEpg, iStartTime, "
+    strQuery = PrepareSQL("REPLACE INTO epgtags (idEpg, iStartTime, "
         "iEndTime, sTitle, sPlotOutline, sPlot, iGenreType, iGenreSubType, sGenre, "
         "iFirstAired, iParentalRating, iStarRating, bNotify, iSeriesId, "
         "iEpisodeId, iEpisodePart, sEpisodeName, iBroadcastUid) "
@@ -390,7 +392,7 @@ int CEpgDatabase::Persist(const CEpgInfoTag &tag, bool bSingleUpdate /* = true *
   }
   else
   {
-    strQuery = FormatSQL("REPLACE INTO epgtags (idEpg, iStartTime, "
+    strQuery = PrepareSQL("REPLACE INTO epgtags (idEpg, iStartTime, "
         "iEndTime, sTitle, sPlotOutline, sPlot, iGenreType, iGenreSubType, sGenre, "
         "iFirstAired, iParentalRating, iStarRating, bNotify, iSeriesId, "
         "iEpisodeId, iEpisodePart, sEpisodeName, iBroadcastUid, idBroadcast) "
@@ -418,7 +420,7 @@ int CEpgDatabase::Persist(const CEpgInfoTag &tag, bool bSingleUpdate /* = true *
 
 int CEpgDatabase::GetLastEPGId(void)
 {
-  CStdString strQuery = FormatSQL("SELECT MAX(idEpg) FROM epg");
+  CStdString strQuery = PrepareSQL("SELECT MAX(idEpg) FROM epg");
   CStdString strValue = GetSingleValue(strQuery);
   if (!strValue.empty())
     return atoi(strValue.c_str());
index 56824bd..5ca2e9d 100644 (file)
@@ -204,6 +204,7 @@ CEpgInfoTag &CEpgInfoTag::operator =(const CEpgInfoTag &other)
 void CEpgInfoTag::Serialize(CVariant &value) const
 {
   value["broadcastid"] = m_iUniqueBroadcastID;
+  value["parentalrating"] = m_iParentalRating;
   value["rating"] = m_iStarRating;
   value["title"] = m_strTitle;
   value["plotoutline"] = m_strPlotOutline;
index 4183d00..c9b1eb8 100644 (file)
@@ -675,6 +675,7 @@ bool CGUIEPGGridContainer::OnAction(const CAction &action)
   case ACTION_MOVE_RIGHT:
   case ACTION_MOVE_DOWN:
   case ACTION_MOVE_UP:
+  case ACTION_NAV_BACK:
     { // use base class implementation
 
       return CGUIControl::OnAction(action);
@@ -961,22 +962,25 @@ void CGUIEPGGridContainer::UpdateItems()
 
     for (int block = 0; block < m_blocks; block++)
     {
-      if (m_gridIndex[row][block].item != m_gridIndex[row][block+1].item)
+      CGUIListItemPtr item = m_gridIndex[row][block].item;
+
+      if (item != m_gridIndex[row][block+1].item)
       {
-        if (!m_gridIndex[row][block].item)
+        if (!item)
         {
-          CEpgInfoTag broadcast;
-          CFileItemPtr unknown(new CFileItem(broadcast));
+          CEpgInfoTag gapTag;
+          CFileItemPtr gapItem(new CFileItem(gapTag));
           for (int i = block ; i > block - itemSize; i--)
           {
-            m_gridIndex[row][i].item = unknown;
+            m_gridIndex[row][i].item = gapItem;
           }
         }
+        else
+        {
+          const CEpgInfoTag* tag = ((CFileItem *)item.get())->GetEPGInfoTag();
+          m_gridIndex[row][savedBlock].item->SetProperty("GenreType", tag->GenreType());
+        }
 
-        CGUIListItemPtr item = m_gridIndex[row][block].item;
-        CFileItem *fileItem = (CFileItem *)item.get();
-
-        m_gridIndex[row][savedBlock].item->SetProperty("GenreType", fileItem->GetEPGInfoTag()->GenreType());
         if (m_orientation == VERTICAL)
         {
           m_gridIndex[row][savedBlock].width   = itemSize*m_blockSize;
@@ -1008,6 +1012,7 @@ void CGUIEPGGridContainer::UpdateItems()
     SetBlock(GetBlock(m_item->item, m_channelCursor));
 
   SetInvalid();
+  GoToNow();
 }
 
 void CGUIEPGGridContainer::ChannelScroll(int amount)
@@ -1479,18 +1484,18 @@ int CGUIEPGGridContainer::GetSelectedItem() const
       m_epgItemsPtr.empty() ||
       m_channelCursor + m_channelOffset >= m_channels ||
       m_blockCursor + m_blockOffset >= m_blocks)
-    return 0;
+    return -1;
 
   CGUIListItemPtr currentItem = m_gridIndex[m_channelCursor + m_channelOffset][m_blockCursor + m_blockOffset].item;
   if (!currentItem)
-    return 0;
+    return -1;
 
   for (int i = 0; i < (int)m_programmeItems.size(); i++)
   {
     if (currentItem == m_programmeItems[i])
       return i;
   }
-  return 0;
+  return -1;
 }
 
 CGUIListItemPtr CGUIEPGGridContainer::GetListItem(int offset, unsigned int flag) const
@@ -1870,6 +1875,13 @@ void CGUIEPGGridContainer::GoToEnd()
   SetBlock(m_blocksPerPage - 1);    // select the last epg element
 }
 
+void CGUIEPGGridContainer::GoToNow()
+{
+  CDateTime currentDate = CDateTime::GetCurrentDateTime().GetAsUTCDateTime();
+  int offset = ((currentDate - m_gridStart).GetSecondsTotal() / 60 - 30) / MINSPERBLOCK;
+  ScrollToBlockOffset(offset);
+}
+
 void CGUIEPGGridContainer::SetStartEnd(CDateTime start, CDateTime end)
 {
   m_gridStart = CDateTime(start.GetYear(), start.GetMonth(), start.GetDay(), start.GetHour(), start.GetMinute() >= 30 ? 30 : 0, 0);
index f609bb2..0322790 100644 (file)
@@ -34,7 +34,7 @@ namespace PVR
 namespace EPG
 {
   #define MAXCHANNELS 20
-  #define MAXBLOCKS   2304 //! !!_EIGHT_!! days of 5 minute blocks
+  #define MAXBLOCKS   (16 * 24 * 60 / 5) //! 16 days of 5 minute blocks (14 days for upcoming data + 1 day for past data + 1 day for fillers)
 
   struct GridItemsPtr
   {
@@ -92,6 +92,7 @@ namespace EPG
 
     void GoToBegin();
     void GoToEnd();
+    void GoToNow();
     void SetStartEnd(CDateTime start, CDateTime end);
     void SetChannel(const PVR::CPVRChannel &channel);
     void SetChannel(const CStdString &channel);
index 20935ad..97a09e8 100644 (file)
@@ -38,13 +38,6 @@ using namespace XFILE;
 
 #define AFP_MAX_READ_SIZE 131072
 
-CStdString URLEncode(const CStdString value)
-{
-  CStdString encoded(value);
-  CURL::Encode(encoded);
-  return encoded;
-}
-
 void AfpConnectionLog(void *priv, enum loglevels loglevel, int logtype, const char *message)
 {
   if (!message) return;
@@ -221,7 +214,7 @@ CAfpConnection::afpConnnectError CAfpConnection::Connect(const CURL& url)
     CLog::Log(LOGDEBUG, "AFP: Could not parse url: %s!\n", nonConstUrl.Get().c_str());
     return AfpFailed;
   }
-  else // parsed sucessfull
+  else // parsed successfully
   {
     // this is our current url object whe are connected to (at least we try)
     *m_pAfpUrl = tmpurl;
@@ -466,7 +459,7 @@ bool CAFPFile::Open(const CURL& url)
 
   if (gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, strPath.c_str(), O_RDONLY, &m_pFp))
   {
-    if (gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, URLEncode(strPath.c_str()).c_str(), O_RDONLY, &m_pFp))
+    if (gAfpConnection.GetImpl()->afp_wrap_open(m_pAfpVol, CURL::Encode(strPath.c_str()).c_str(), O_RDONLY, &m_pFp))
     {
       // write error to logfile
       CLog::Log(LOGINFO, "CAFPFile::Open: Unable to open file : '%s'\nunix_err:'%x' error : '%s'", strPath.c_str(), errno, strerror(errno));
index ab097dc..fa5be3c 100644 (file)
@@ -38,8 +38,6 @@ extern "C" {
 }
 #endif
 
-CStdString URLEncode(CStdString str);
-
 class CAfpConnection : public CCriticalSection
 {
 public:
index e00e4e1..05d96fa 100644 (file)
@@ -17,7 +17,8 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
-
+#include "system.h"
+#ifdef HAVE_LIBBLURAY
 #include "BlurayDirectory.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
@@ -58,16 +59,20 @@ void CBlurayDirectory::Dispose()
 CFileItemPtr CBlurayDirectory::GetTitle(const BLURAY_TITLE_INFO* title, const CStdString& label)
 {
   CStdString buf;
+  CStdString chap;
   CFileItemPtr item(new CFileItem("", false));
   CURL path(m_url);
   buf = StringUtils::Format("BDMV/PLAYLIST/%05d.mpls", title->playlist);
   path.SetFileName(buf);
   item->SetPath(path.Get());
-  item->GetVideoInfoTag()->m_duration = (int)(title->duration / 90000);
+  int duration = (int)(title->duration / 90000);
+  item->GetVideoInfoTag()->m_duration = duration;
   item->GetVideoInfoTag()->m_iTrack = title->playlist;
   buf = StringUtils::Format(label.c_str(), title->playlist);
   item->m_strTitle = buf;
   item->SetLabel(buf);
+  chap = StringUtils::Format(g_localizeStrings.Get(25007), title->chapter_count, StringUtils::SecondsToTimeString(duration).c_str());
+  item->SetProperty("Addon.Summary", chap);
   item->m_dwSize = 0;
   item->SetIconImage("DefaultVideo.png");
   for(unsigned int i = 0; i < title->clip_count; ++i)
@@ -184,3 +189,4 @@ bool CBlurayDirectory::GetDirectory(const CStdString& path, CFileItemList &items
 
 
 } /* namespace XFILE */
+#endif
\ No newline at end of file
index 2197c44..9e3d598 100644 (file)
@@ -674,7 +674,7 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2)
     /* url encoded. if handed from ftpdirectory */
     /* it won't be so let's handle that case    */
 
-    CStdString partial, filename(url2.GetFileName());
+    CStdString filename(url2.GetFileName());
     std::vector<std::string> array;
 
     // if server sent us the filename in non-utf8, we need send back with same encoding.
@@ -689,9 +689,7 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2)
       if(it != array.begin())
         filename += "/";
 
-      partial = *it;
-      CURL::Encode(partial);
-      filename += partial;
+      filename += CURL::Encode(*it);
     }
 
     /* make sure we keep slashes */
@@ -772,6 +770,8 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2)
           m_seekable = false;
         else if (name.Equals("Accept-Charset"))
           SetAcceptCharset(value);
+        else if (name.Equals("HttpProxy"))
+          SetStreamProxy(value, PROXY_HTTP);
         else
           SetRequestHeader(name, value);
       }
@@ -784,6 +784,17 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2)
     m_url = url2.Get();
 }
 
+void CCurlFile::SetStreamProxy(const CStdString &proxy, ProxyType type)
+{
+  CURL url(proxy);
+  m_proxy = url.GetWithoutUserDetails();
+  m_proxyuserpass = url.GetUserName();
+  if (!url.GetPassWord().empty())
+    m_proxyuserpass += ":" + url.GetPassWord();
+  m_proxytype = type;
+  CLog::Log(LOGDEBUG, "Overriding proxy from URL parameter: %s, type %d", m_proxy.c_str(), proxyType2CUrlProxyType[m_proxytype]);
+}
+
 bool CCurlFile::Post(const CStdString& strURL, const CStdString& strPostData, CStdString& strHTML)
 {
   m_postdata = strPostData;
index e16c255..ead7662 100644 (file)
@@ -74,6 +74,7 @@ namespace XFILE
       void SetProxy(CStdString &proxy)                           { m_proxy = proxy; }
       void SetProxyUserPass(CStdString &proxyuserpass)           { m_proxyuserpass = proxyuserpass; }
       void SetProxyType(ProxyType proxytype)                     { m_proxytype = proxytype; }
+      void SetStreamProxy(const CStdString &proxy, ProxyType type);
       void SetCustomRequest(CStdString &request)                 { m_customrequest = request; }
       void UseOldHttpVersion(bool bUse)                          { m_useOldHttpVersion = bUse; }
       void SetContentEncoding(CStdString encoding)               { m_contentencoding = encoding; }
index 2385544..c0729dc 100644 (file)
@@ -167,8 +167,7 @@ bool CDAVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
       {
         CStdString name(itemPath);
         URIUtils::RemoveSlashAtEnd(name);
-        CURL::Decode(name);
-        item.SetLabel(URIUtils::GetFileName(name));
+        item.SetLabel(URIUtils::GetFileName(CURL::Decode(name)));
       }
 
       if (item.m_bIsFolder)
index ff5a92e..260d53c 100644 (file)
@@ -125,7 +125,8 @@ using namespace XFILE;
 IDirectory* CDirectoryFactory::Create(const CStdString& strPath)
 {
   CURL url(strPath);
-  CWakeOnAccess::Get().WakeUpHost(url);
+  if (!CWakeOnAccess::Get().WakeUpHost(url))
+    return NULL;
 
   CFileItem item(strPath, false);
   IFileDirectory* pDir=CFileDirectoryFactory::Create(strPath, &item);
@@ -169,6 +170,9 @@ IDirectory* CDirectoryFactory::Create(const CStdString& strPath)
   if (strProtocol == "favourites") return new CFavouritesDirectory();
   if (strProtocol == "filereader")
     return CDirectoryFactory::Create(url.GetFileName());
+#if defined(TARGET_ANDROID)
+  if (strProtocol == "androidapp") return new CAndroidAppDirectory();
+#endif
 
   if( g_application.getNetwork().IsAvailable(true) )  // true to wait for the network (if possible)
   {
@@ -226,9 +230,6 @@ IDirectory* CDirectoryFactory::Create(const CStdString& strPath)
 #ifdef HAVE_LIBBLURAY
       if (strProtocol == "bluray") return new CBlurayDirectory();
 #endif
-#if defined(TARGET_ANDROID)
-      if (strProtocol == "androidapp") return new CAndroidAppDirectory();
-#endif
   }
 
   CLog::Log(LOGWARNING, "%s - Unsupported protocol(%s) in %s", __FUNCTION__, strProtocol.c_str(), url.Get().c_str() );
index 1f5df53..4b5ba29 100644 (file)
@@ -30,6 +30,13 @@ extern "C" {
 }
 #endif
 
+#if defined(TARGET_WINDOWS)
+struct __stat64;
+#define NFSSTAT struct __stat64
+#else
+#define NFSSTAT struct stat
+#endif
+
 class DllLibNfsInterface
 {
 public:
@@ -54,8 +61,8 @@ public:
   virtual void nfs_closedir(struct nfs_context *nfs,      struct nfsdir *nfsdir)=0;      
   virtual struct nfsdirent *nfs_readdir(struct nfs_context *nfs, struct nfsdir *nfsdir)=0;  
   virtual int nfs_mount(struct nfs_context *nfs,     const char *server,   const char *exportname)=0;
-  virtual int nfs_stat(struct nfs_context *nfs,      const char *path,     struct stat *st)=0;
-  virtual int nfs_fstat(struct nfs_context *nfs,     struct nfsfh *nfsfh,  struct stat *st)=0;
+  virtual int nfs_stat(struct nfs_context *nfs,      const char *path,     NFSSTAT *st)=0;
+  virtual int nfs_fstat(struct nfs_context *nfs,     struct nfsfh *nfsfh,  NFSSTAT *st)=0;
   virtual int nfs_truncate(struct nfs_context *nfs,  const char *path,     uint64_t length)=0;
   virtual int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh,  uint64_t length)=0;
   virtual int nfs_opendir(struct nfs_context *nfs,   const char *path,     struct nfsdir **nfsdir)=0;
@@ -100,8 +107,8 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
   DEFINE_METHOD2(void,nfs_closedir,  (struct nfs_context *p1, struct nfsdir *p2))        
   DEFINE_METHOD2(int, nfs_close,     (struct nfs_context *p1, struct nfsfh *p2)) 
   DEFINE_METHOD3(int, nfs_mount,     (struct nfs_context *p1, const char *p2,    const char *p3))
-  DEFINE_METHOD3(int, nfs_stat,      (struct nfs_context *p1, const char *p2,    struct stat *p3))
-  DEFINE_METHOD3(int, nfs_fstat,     (struct nfs_context *p1, struct nfsfh *p2,  struct stat *p3))
+  DEFINE_METHOD3(int, nfs_stat,      (struct nfs_context *p1, const char *p2,    NFSSTAT *p3))
+  DEFINE_METHOD3(int, nfs_fstat,     (struct nfs_context *p1, struct nfsfh *p2,  NFSSTAT *p3))
   DEFINE_METHOD3(int, nfs_truncate,  (struct nfs_context *p1, const char *p2,    uint64_t p3))
   DEFINE_METHOD3(int, nfs_ftruncate, (struct nfs_context *p1, struct nfsfh *p2,  uint64_t p3))
   DEFINE_METHOD3(int, nfs_opendir,   (struct nfs_context *p1, const char *p2,    struct nfsdir **p3))
index 523ec47..a1a2c37 100644 (file)
@@ -39,18 +39,18 @@ bool CFavouritesDirectory::GetDirectory(const CStdString& strPath, CFileItemList
 {
   items.Clear();
   CURL url(strPath);
-  
+
   if (url.GetProtocol() == "favourites")
   {
-    Load(items); //load the default favourite files
+    return Load(items); //load the default favourite files
   }
   return LoadFavourites(strPath, items); //directly load the given file
 }
-  
+
 bool CFavouritesDirectory::Exists(const char* strPath)
 {
   CURL url(strPath);
-  
+
   if (url.GetProtocol() == "favourites")
   {
     return XFILE::CFile::Exists("special://xbmc/system/favourites.xml") 
index 5c80df7..a63d6e0 100644 (file)
@@ -33,7 +33,6 @@
 #include "Util.h"
 #include "URL.h"
 #include "utils/StringUtils.h"
-#include "settings/AdvancedSettings.h"
 
 #include "commons/Exception.h"
 
@@ -289,33 +288,19 @@ bool CFile::Open(const CStdString& strFileName, const unsigned int flags)
 
     CURL url(URIUtils::SubstitutePath(strFileName));
 
-    /* 
-     * There are 4 buffer modes available (configurable in as.xml)
-     * 0) Buffer all internet filesystems (like 2 but additionally also ftp, webdav, etc.) (default)
-     * 1) Buffer all filesystems (including local)
-     * 2) Only buffer true internet filesystems (streams) (http, etc.)
-     * 3) No buffer
-     */
-    if ( (m_flags & READ_NO_CACHE) == 0 && !CUtil::IsPicture(strFileName) )
+    if (!(m_flags & READ_NO_CACHE))
     {
-      if (g_advancedSettings.m_networkBufferMode == 0 || g_advancedSettings.m_networkBufferMode == 2)
-      {
-        if (URIUtils::IsInternetStream(url, (g_advancedSettings.m_networkBufferMode == 0) ) )
-          m_flags |= READ_CACHED;
-      }
-      else if (g_advancedSettings.m_networkBufferMode == 1)
+      if (URIUtils::IsInternetStream(url, true) && !CUtil::IsPicture(strFileName) )
+        m_flags |= READ_CACHED;
+
+      if (m_flags & READ_CACHED)
       {
-        m_flags |= READ_CACHED; // Force cache for all others (in buffer mode 1)
+        // for internet stream, if it contains multiple stream, file cache need handle it specially.
+        m_pFile = new CFileCache(m_flags & READ_MULTI_STREAM);
+        return m_pFile->Open(url);
       }
     }
 
-    if (m_flags & READ_CACHED)
-    {
-      // for internet stream, if it contains multiple stream, file cache need handle it specially.
-      m_pFile = new CFileCache((m_flags & READ_MULTI_STREAM) != 0 && URIUtils::IsInternetStream(url, true));
-      return m_pFile->Open(url);
-    }
-
     m_pFile = CFileFactory::CreateLoader(url);
     if (!m_pFile)
       return false;
index 7c89586..d64acc2 100644 (file)
@@ -100,7 +100,7 @@ class CFile
 {
 public:
   CFile();
-  virtual ~CFile();
+  ~CFile();
 
   bool Open(const CStdString& strFileName, const unsigned int flags = 0);
   bool OpenForWrite(const CStdString& strFileName, bool bOverWrite = false);
index 2c2d865..b4e8b89 100644 (file)
@@ -132,7 +132,7 @@ IFileDirectory* CFileDirectoryFactory::Create(const CStdString& strPath, CFileIt
     CDirectory::GetDirectory(strUrl, items, strMask);
     if (items.Size() == 0) // no files
       pItem->m_bIsFolder = true;
-    else if (items.Size() == 1 && items[0]->m_idepth == 0)
+    else if (items.Size() == 1 && items[0]->m_idepth == 0 && !items[0]->m_bIsFolder)
     {
       // one STORED file - collapse it down
       *pItem = *items[0];
@@ -154,7 +154,7 @@ IFileDirectory* CFileDirectoryFactory::Create(const CStdString& strPath, CFileIt
     CDirectory::GetDirectory(strUrl, items, strMask);
     if (items.Size() == 0) // no files
       pItem->m_bIsFolder = true;
-    else if (items.Size() == 1 && items[0]->m_idepth == 0)
+    else if (items.Size() == 1 && items[0]->m_idepth == 0 && !items[0]->m_bIsFolder)
     {
       // one STORED file - collapse it down
       *pItem = *items[0];
@@ -202,7 +202,7 @@ IFileDirectory* CFileDirectoryFactory::Create(const CStdString& strPath, CFileIt
     CDirectory::GetDirectory(strUrl, items, strMask);
     if (items.Size() == 0) // no files - hide this
       pItem->m_bIsFolder = true;
-    else if (items.Size() == 1 && items[0]->m_idepth == 0x30)
+    else if (items.Size() == 1 && items[0]->m_idepth == 0x30 && !items[0]->m_bIsFolder)
     {
       // one STORED file - collapse it down
       *pItem = *items[0];
index 835e71a..573d50e 100644 (file)
@@ -115,7 +115,8 @@ IFile* CFileFactory::CreateLoader(const CStdString& strFileName)
 
 IFile* CFileFactory::CreateLoader(const CURL& url)
 {
-  CWakeOnAccess::Get().WakeUpHost(url);
+  if (!CWakeOnAccess::Get().WakeUpHost(url))
+    return NULL;
 
   CStdString strProtocol = url.GetProtocol();
   StringUtils::ToLower(strProtocol);
@@ -146,6 +147,9 @@ IFile* CFileFactory::CreateLoader(const CURL& url)
   else if (strProtocol == "iso9660") return new CISOFile();
 #endif
   else if(strProtocol == "udf") return new CUDFFile();
+#if defined(TARGET_ANDROID)
+  else if (strProtocol == "androidapp") return new CFileAndroidApp();
+#endif
 
   if( g_application.getNetwork().IsAvailable() )
   {
@@ -197,9 +201,6 @@ IFile* CFileFactory::CreateLoader(const CURL& url)
 #ifdef HAS_UPNP
     else if (strProtocol == "upnp") return new CUPnPFile();
 #endif
-#if defined(TARGET_ANDROID)
-    else if (strProtocol == "androidapp") return new CFileAndroidApp();
-#endif
   }
 
   CLog::Log(LOGWARNING, "%s - Unsupported protocol(%s) in %s", __FUNCTION__, strProtocol.c_str(), url.Get().c_str() );
index e8900eb..a40f2ab 100644 (file)
@@ -113,7 +113,7 @@ bool CHTTPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &item
       CStdString strLinkTemp = strLinkBase;
 
       URIUtils::RemoveSlashAtEnd(strLinkTemp);
-      CURL::Decode(strLinkTemp);
+      strLinkTemp = CURL::Decode(strLinkTemp);
       if (fileCharset.empty())
         g_charsetConverter.unknownToUTF8(strLinkTemp);
       g_charsetConverter.utf8ToW(strLinkTemp, wLink, false);
index d273c4c..41f4c46 100644 (file)
@@ -150,11 +150,7 @@ CStdString CMultiPathDirectory::GetFirstPath(const CStdString &strPath)
 {
   size_t pos = strPath.find("/", 12);
   if (pos != std::string::npos)
-  {
-    CStdString firstPath = strPath.substr(12, pos - 12);
-    CURL::Decode(firstPath);
-    return firstPath;
-  }
+    return CURL::Decode(strPath.substr(12, pos - 12));
   return "";
 }
 
@@ -176,9 +172,7 @@ bool CMultiPathDirectory::GetPaths(const CStdString& strPath, vector<CStdString>
   // check each item
   for (unsigned int i = 0; i < vecTemp.size(); i++)
   {
-    CStdString tempPath = vecTemp[i];
-    CURL::Decode(tempPath);
-    vecPaths.push_back(tempPath);
+    vecPaths.push_back(CURL::Decode(vecTemp[i]));
   }
   return true;
 }
@@ -198,9 +192,7 @@ bool CMultiPathDirectory::HasPath(const CStdString& strPath, const CStdString& s
   // check each item
   for (unsigned int i = 0; i < vecTemp.size(); i++)
   {
-    CStdString tempPath = vecTemp[i];
-    CURL::Decode(tempPath);
-    if(tempPath == strPathToFind)
+    if (CURL::Decode(vecTemp[i]) == strPathToFind)
       return true;
   }
   return false;
@@ -222,11 +214,9 @@ CStdString CMultiPathDirectory::ConstructMultiPath(const CFileItemList& items, c
 
 void CMultiPathDirectory::AddToMultiPath(CStdString& strMultiPath, const CStdString& strPath)
 {
-  CStdString strPath1 = strPath;
   URIUtils::AddSlashAtEnd(strMultiPath);
   //CLog::Log(LOGDEBUG, "-- adding path: %s", strPath.c_str());
-  CURL::Encode(strPath1);
-  strMultiPath += strPath1;
+  strMultiPath += CURL::Encode(strPath);
   strMultiPath += "/";
 }
 
index a850aa5..5dc9105 100644 (file)
@@ -56,6 +56,7 @@ CStdString CMusicDatabaseFile::TranslateUrl(const CURL& url)
   if (!musicDatabase.GetSong(idSong, song))
     return "";
 
+  StringUtils::ToLower(strExtension);
   if (!URIUtils::HasExtension(song.strFileName, strExtension))
     return "";
 
index 12b3586..ceb089e 100644 (file)
@@ -127,7 +127,7 @@ bool CNFSDirectory::ResolveSymlink( const CStdString &dirName, struct nfsdirent
   
   if(ret == 0)
   {
-    struct stat tmpBuffer = {0};      
+    NFSSTAT tmpBuffer = {0};
     fullpath = dirName;
     URIUtils::AddSlashAtEnd(fullpath);
     fullpath.append(resolvedLink);
@@ -350,7 +350,7 @@ bool CNFSDirectory::Exists(const char* strPath)
   if(!gNfsConnection.Connect(url,folderName))
     return false;
   
-  struct stat info;
+  NFSSTAT info;
   ret = gNfsConnection.GetImpl()->nfs_stat(gNfsConnection.GetNfsContext(), folderName.c_str(), &info);
   
   if (ret != 0)
index 3f04a34..41d4d47 100644 (file)
@@ -24,7 +24,6 @@
 #include "system.h"
 
 #ifdef HAS_FILESYSTEM_NFS
-#include "DllLibNfs.h"
 #include "NFSFile.h"
 #include "threads/SingleLock.h"
 #include "utils/log.h"
@@ -95,11 +94,13 @@ std::list<std::string> CNfsConnection::GetExportList(const CURL &url)
       for(tmp = exportlist; tmp!=NULL; tmp=tmp->ex_next)
       {
         std::string exportStr = std::string(tmp->ex_dir);
-        URIUtils::AddSlashAtEnd(exportStr);
+        
         retList.push_back(exportStr);
       }      
 
       gNfsConnection.GetImpl()->mount_free_export_list(exportlist);
+      retList.sort();
+      retList.reverse();
     }
     
     return retList;
@@ -225,15 +226,20 @@ int CNfsConnection::getContextForExport(const CStdString &exportname)
 
 bool CNfsConnection::splitUrlIntoExportAndPath(const CURL& url, CStdString &exportPath, CStdString &relativePath)
 {
-    bool ret = false;
-    
-    //refresh exportlist if empty or hostname change
-    if(m_exportList.empty() || !url.GetHostName().Equals(m_hostName,false))
-    {
-      m_exportList = GetExportList(url);
-    }
+  //refresh exportlist if empty or hostname change
+  if(m_exportList.empty() || !StringUtils::EqualsNoCase(url.GetHostName(), m_hostName))
+  {
+    m_exportList = GetExportList(url);
+  }
 
-    if(!m_exportList.empty())
+  return splitUrlIntoExportAndPath(url, exportPath, relativePath, m_exportList);
+}
+
+bool CNfsConnection::splitUrlIntoExportAndPath(const CURL& url,CStdString &exportPath, CStdString &relativePath, std::list<std::string> &exportList)
+{
+    bool ret = false;
+  
+    if(!exportList.empty())
     {
       relativePath = "";
       exportPath = "";
@@ -243,26 +249,35 @@ bool CNfsConnection::splitUrlIntoExportAndPath(const CURL& url, CStdString &expo
       //GetFileName returns path without leading "/"
       //but we need it because the export paths start with "/"
       //and path.Find(*it) wouldn't work else
-      if(!path.empty() && path[0] != '/')
+      if(path[0] != '/')
       {
         path = "/" + path;
       }
       
       std::list<std::string>::iterator it;
       
-      for(it=m_exportList.begin();it!=m_exportList.end();it++)
+      for(it=exportList.begin();it!=exportList.end();it++)
       {
         //if path starts with the current export path
         if(StringUtils::StartsWith(path, *it))
         {
+          //its possible that StartsWith may not find the correct match first
+          //as an example, if /path/ & and /path/sub/ are exported, but
+          //the user specifies the path /path/subdir/ (from /path/ export).
+          //If the path is longer than the exportpath, make sure / is next.
+          if( (path.length() > (*it).length()) &&
+              (path[(*it).length()] != '/') && (*it) != "/")
+            continue;
           exportPath = *it;
           //handle special case where root is exported
           //in that case we don't want to stripp off to
           //much from the path
-          if( exportPath == "/" )
-            relativePath = "//" + path.substr(exportPath.length()-1);
-          else
+          if( exportPath == path )
+            relativePath = "//";
+          else if( exportPath == "/" )
             relativePath = "//" + path.substr(exportPath.length());
+          else
+            relativePath = "//" + path.substr(exportPath.length()+1);
           ret = true;
           break;          
         }
@@ -414,7 +429,7 @@ void CNfsConnection::keepAlive(std::string _exportPath, struct nfsfh  *_pFileHan
   m_pLibNfs->nfs_lseek(pContext, _pFileHandle, offset, SEEK_SET, &offset);
 }
 
-int CNfsConnection::stat(const CURL &url, struct stat *statbuff)
+int CNfsConnection::stat(const CURL &url, NFSSTAT *statbuff)
 {
   CSingleLock lock(*this);
   int nfsRet = 0;
@@ -582,7 +597,7 @@ int CNFSFile::Stat(const CURL& url, struct __stat64* buffer)
     return -1;
    
 
-  struct stat tmpBuffer = {0};
+  NFSSTAT tmpBuffer = {0};
 
   ret = gNfsConnection.GetImpl()->nfs_stat(gNfsConnection.GetNfsContext(), filename.c_str(), &tmpBuffer);
   
@@ -596,6 +611,9 @@ int CNFSFile::Stat(const CURL& url, struct __stat64* buffer)
   {  
     if(buffer)
     {
+#if defined(TARGET_WINDOWS)// TODO get rid of this define after gotham
+      memcpy(buffer, &tmpBuffer, sizeof(struct __stat64));
+#else
       memset(buffer, 0, sizeof(struct __stat64));
       buffer->st_dev = tmpBuffer.st_dev;
       buffer->st_ino = tmpBuffer.st_ino;
@@ -608,6 +626,7 @@ int CNFSFile::Stat(const CURL& url, struct __stat64* buffer)
       buffer->st_atime = tmpBuffer.st_atime;
       buffer->st_mtime = tmpBuffer.st_mtime;
       buffer->st_ctime = tmpBuffer.st_ctime;
+#endif
     }
   }
   return ret;
index 0972a7d..35f358a 100644 (file)
@@ -28,6 +28,7 @@
 #include <list>
 #include "SectionLoader.h"
 #include <map>
+#include "DllLibNfs.h" // for define NFSSTAT
 
 #ifdef TARGET_WINDOWS
 #define S_IRGRP 0
@@ -75,11 +76,12 @@ public:
   std::list<std::string> GetExportList(const CURL &url);
   //this functions splits the url into the exportpath (feed to mount) and the rest of the path
   //relative to the mounted export
+  bool splitUrlIntoExportAndPath(const CURL& url, CStdString &exportPath, CStdString &relativePath, std::list<std::string> &exportList);
   bool splitUrlIntoExportAndPath(const CURL& url, CStdString &exportPath, CStdString &relativePath);
   
   //special stat which uses its own context
   //needed for getting intervolume symlinks to work
-  int stat(const CURL &url, struct stat *statbuff);
+  int stat(const CURL &url, NFSSTAT *statbuff);
 
   void AddActiveConnection();
   void AddIdleConnection();
index 7b2ffb3..88091ef 100644 (file)
@@ -257,7 +257,7 @@ bool CRTVDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items
         CFileItemPtr pItem(new CFileItem(szName));
         pItem->m_dateTime=dtDateTime;
         pItem->SetPath(strRoot + szPath);
-        // Hack to show duration of show in minutes as KB in XMBC because
+        // Hack to show duration of show in minutes as KB in XBMC because
         // it doesn't currently permit showing duration in minutes.
         // E.g., a 30 minute show will show as 29.3 KB in XBMC.
         pItem->m_dwSize = dwFileSize * 1000;
index 4069fba..0f84e24 100644 (file)
@@ -365,7 +365,7 @@ bool CSAPSessions::ParseAnnounce(char* data, int len)
 
   // add a new session to our buffer
   CStdString user = origin.username;
-  CURL::Encode(user);
+  user = CURL::Encode(user);
   CStdString path = StringUtils::Format("sap://%s/%s/0x%x.sdp", header.origin.c_str(), desc.origin.c_str(), header.msgid);
   CSession session;
   session.path           = path;
index a9d6339..74cba65 100644 (file)
@@ -349,7 +349,7 @@ CStdString CSMBDirectory::MountShare(const CStdString &smbPath, const CStdString
 
 #if defined(TARGET_DARWIN)
   // Create the directory.
-  CURL::Decode(strMountPoint);
+  strMountPoint = CURL::Decode(strMountPoint);
   CreateDirectory(strMountPoint, NULL);
 
   // Massage the path.
@@ -398,8 +398,7 @@ void CSMBDirectory::UnMountShare(const CStdString &strType, const CStdString &st
 {
 #if defined(TARGET_DARWIN)
   // Decode the path.
-  CStdString strMountPoint = GetMountPoint(strType, strName);
-  CURL::Decode(strMountPoint);
+  CStdString strMountPoint(CURL::Decode(GetMountPoint(strType, strName)));
 
   // Make the unmount command.
   CStdStringArray args;
@@ -416,8 +415,7 @@ void CSMBDirectory::UnMountShare(const CStdString &strType, const CStdString &st
 
 CStdString CSMBDirectory::GetMountPoint(const CStdString &strType, const CStdString &strName)
 {
-  CStdString strPath = strType + strName;
-  CURL::Encode(strPath);
+  CStdString strPath(CURL::Encode(strType + strName));
 
 #if defined(TARGET_DARWIN)
   CStdString str = getenv("HOME");
index 5d6a621..f523e06 100644 (file)
@@ -244,9 +244,7 @@ CStdString CSMB::URLEncode(const CURL &url)
 
 CStdString CSMB::URLEncode(const CStdString &value)
 {
-  CStdString encoded(value);
-  CURL::Encode(encoded);
-  return encoded;
+  return CURL::Encode(value);
 }
 
 /* This is called from CApplication::ProcessSlow() and is used to tell if smbclient have been idle for too long */
@@ -575,7 +573,7 @@ int CSmbFile::Write(const void* lpBuf, int64_t uiBufSize)
   if (m_fd == -1) return -1;
   DWORD dwNumberOfBytesWritten = 0;
 
-  // lpBuf can be safely casted to void* since xmbc_write will only read from it.
+  // lpBuf can be safely casted to void* since xbmc_write will only read from it.
   smb.Init();
   CSingleLock lock(smb);
   dwNumberOfBytesWritten = smbc_write(m_fd, (void*)lpBuf, (DWORD)uiBufSize);
index 8b06ce8..d9adc5a 100644 (file)
@@ -59,7 +59,7 @@ namespace XFILE
   {
     // Load up our REs
     VECCREGEXP  RegExps;
-    CRegExp     tempRE(true, true);
+    CRegExp     tempRE(true, CRegExp::autoUtf8);
     const CStdStringArray& strRegExps = g_advancedSettings.m_videoStackRegExps;
     CStdStringArray::const_iterator itRegExp = strRegExps.begin();
     vector<pair<int, CStdString> > badStacks;
@@ -93,8 +93,8 @@ namespace XFILE
       // Check if source path uses URL encoding
       if (URIUtils::ProtocolHasEncodedFilename(CURL(strCommonDir).GetProtocol()))
       {
-        CURL::Decode(File1);
-        CURL::Decode(File2);
+        File1 = CURL::Decode(File1);
+        File2 = CURL::Decode(File2);
       }
 
       std::vector<CRegExp>::iterator itRegExp = RegExps.begin();
@@ -128,7 +128,7 @@ namespace XFILE
                   strStackTitle = Title1 + Ignore1 + Extension1;
                   // Check if source path uses URL encoding
                   if (URIUtils::ProtocolHasEncodedFilename(CURL(strCommonDir).GetProtocol()))
-                    CURL::Encode(strStackTitle);
+                    strStackTitle = CURL::Encode(strStackTitle);
 
                   itRegExp = RegExps.end();
                   break;
index 4dd2fe0..57824b3 100644 (file)
@@ -50,7 +50,7 @@ CUDFFile::~CUDFFile()
 //*********************************************************************************************
 bool CUDFFile::Open(const CURL& url)
 {
-  if(!m_udfIsoReaderLocal.Open(url.GetHostName()))
+  if(!m_udfIsoReaderLocal.Open(url.GetHostName()) || url.GetFileName().empty())
      return false;
 
   m_hFile = m_udfIsoReaderLocal.OpenFile(url.GetFileName());
@@ -125,6 +125,12 @@ int CUDFFile::Stat(const CURL& url, struct __stat64* buffer)
   if(!m_udfIsoReaderLocal.Open(url.GetHostName()))
      return -1;
 
+  if (url.GetFileName().empty())
+  {
+    buffer->st_mode = _S_IFDIR;
+    return 0;
+  }
+
   m_hFile = m_udfIsoReaderLocal.OpenFile(url.GetFileName());
   if (m_hFile != INVALID_HANDLE_VALUE)
   {
index 7be5af2..dfc1105 100644 (file)
@@ -152,7 +152,7 @@ bool CUPnPDirectory::GetResource(const CURL& path, CFileItem &item)
     CStdString uuid   = path.GetHostName();
     CStdString object = path.GetFileName();
     StringUtils::TrimRight(object, "/");
-    CURL::Decode(object);
+    object = CURL::Decode(object);
 
     PLT_DeviceDataReference device;
     if(!FindDeviceWait(upnp, uuid.c_str(), device)) {
@@ -225,9 +225,7 @@ CUPnPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
         NPT_String object_id = (next_slash==-1)?"":path.SubString(next_slash+1);
         object_id.TrimRight("/");
         if (object_id.GetLength()) {
-            CStdString tmp = (char*) object_id;
-            CURL::Decode(tmp);
-            object_id = tmp;
+            object_id = CStdString(CURL::Decode((char*)object_id));
         }
 
         // try to find the device with wait on startup
@@ -333,7 +331,7 @@ CUPnPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
             else
                 id = (const char*) (*entry)->m_ReferenceID;
 
-            CURL::Encode(id);
+            id = CURL::Encode(id);
             URIUtils::AddSlashAtEnd(id);
             pItem->SetPath(CStdString((const char*) "upnp://" + uuid + "/" + id.c_str()));
 
index bf9cfb9..bb62dc7 100644 (file)
@@ -21,6 +21,7 @@
 #include "DirectoryNodeGrouped.h"
 #include "QueryParams.h"
 #include "video/VideoDatabase.h"
+#include "video/VideoDbUrl.h"
 
 using namespace XFILE::VIDEODATABASEDIRECTORY;
 
@@ -68,7 +69,12 @@ bool CDirectoryNodeGrouped::GetContent(CFileItemList& items) const
   if (itemType.empty())
     return false;
 
-  return videodatabase.GetItems(BuildPath(), (VIDEODB_CONTENT_TYPE)params.GetContentType(), itemType, items);
+  // make sure to translate all IDs in the path into URL parameters
+  CVideoDbUrl videoUrl;
+  if (!videoUrl.FromString(BuildPath()))
+    return false;
+
+  return videodatabase.GetItems(videoUrl.ToString(), (VIDEODB_CONTENT_TYPE)params.GetContentType(), itemType, items);
 }
 
 std::string CDirectoryNodeGrouped::GetContentType() const
index 5d2f133..6a4734a 100644 (file)
@@ -77,6 +77,7 @@ bool CDirectoryNodeMusicVideosOverview::GetContent(CFileItemList& items) const
 
     pItem->m_bIsFolder = true;
     pItem->SetCanQueue(false);
+    pItem->SetSpecialSort(SortSpecialOnTop);
     items.Add(pItem);
   }
 
index 70ec722..1ec84bd 100644 (file)
@@ -71,36 +71,7 @@ bool CDirectoryNodeSeasons::GetContent(CFileItemList& items) const
   CQueryParams params;
   CollectQueryParams(params);
 
-  int iFlatten = CSettings::Get().GetInt("videolibrary.flattentvshows");
   bool bSuccess=videodatabase.GetSeasonsNav(BuildPath(), items, params.GetActorId(), params.GetDirectorId(), params.GetGenreId(), params.GetYear(), params.GetTvShowId());
-  bool bFlatten = (items.GetObjectCount() == 1 && iFlatten == 1) || iFlatten == 2;
-  if (items.GetObjectCount() == 2 && iFlatten == 1)
-    if (items[0]->GetVideoInfoTag()->m_iSeason == 0 || items[1]->GetVideoInfoTag()->m_iSeason == 0)
-      bFlatten = true; // flatten if one season + specials
-
-  if (iFlatten > 0 && !bFlatten && CMediaSettings::Get().GetWatchedMode("tvshows") == WatchedModeUnwatched)
-  {
-    int count = 0;
-    for(int i = 0; i < items.Size(); i++) 
-    {
-      if (items[i]->GetProperty("unwatchedepisodes").asInteger() != 0 && items[i]->GetVideoInfoTag()->m_iSeason != 0)
-        count++;
-    }
-    bFlatten = (count < 2); // flatten if there is only 1 unwatched season (not counting specials)
-  }
-
-  if (bFlatten)
-  { // flatten if one season or flatten always
-    items.Clear();
-
-    CVideoDbUrl videoUrl;
-    if (!videoUrl.FromString(BuildPath()))
-      return false;
-  
-    videoUrl.AppendPath("-2/");
-    bSuccess=videodatabase.GetEpisodesNav(videoUrl.ToString(), items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(), params.GetTvShowId());
-    items.SetPath(videoUrl.ToString());
-  }
 
   videodatabase.Close();
 
index aaa61ca..0c85e58 100644 (file)
@@ -186,8 +186,7 @@ bool CZeroconfDirectory::GetDirectory(const CStdString& strPath, CFileItemList &
         CFileItemPtr item(new CFileItem("", true));
         CURL url;
         url.SetProtocol("zeroconf");
-        CStdString service_path = CZeroconfBrowser::ZeroconfService::toPath(*it);
-        CURL::Encode(service_path);
+        CStdString service_path(CURL::Encode(CZeroconfBrowser::ZeroconfService::toPath(*it)));
         url.SetFileName(service_path);
         item->SetPath(url.Get());
 
@@ -205,8 +204,7 @@ bool CZeroconfDirectory::GetDirectory(const CStdString& strPath, CFileItemList &
   else
   {
     //decode the path first
-    CStdString decoded = path;
-    CURL::Decode(decoded);
+    CStdString decoded(CURL::Decode(path));
     try
     {
       CZeroconfBrowser::ZeroconfService zeroconf_service = CZeroconfBrowser::ZeroconfService::fromPath(decoded);
index 8841293..6589d71 100644 (file)
@@ -2,6 +2,7 @@ SRCS= \
   TestDirectory.cpp \
   TestFile.cpp \
   TestFileFactory.cpp \
+  TestNfsFile.cpp \
   TestRarFile.cpp \
   TestZipFile.cpp
 
diff --git a/xbmc/filesystem/test/TestNfsFile.cpp b/xbmc/filesystem/test/TestNfsFile.cpp
new file mode 100644 (file)
index 0000000..2106bc8
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ *      Copyright (C) 2005-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "filesystem/NfsFile.h"
+#include "test/TestUtils.h"
+
+#include <errno.h>
+#include <string>
+#include "URL.h"
+
+#include "gtest/gtest.h"
+
+using ::testing::Test;
+using ::testing::WithParamInterface;
+using ::testing::ValuesIn;
+
+struct SplitPath
+{
+  std::string url;
+  CStdString exportPath;
+  CStdString relativePath;
+  bool expectedResultExport;
+  bool expectedResultPath;
+} g_TestData[] = { 
+                   {"nfs://192.168.0.1:2049/srv/test/tvmedia/foo.txt", "/srv/test", "//tvmedia/foo.txt", true, true},
+                   {"nfs://192.168.0.1/srv/test/tv/media/foo.txt", "/srv/test/tv", "//media/foo.txt", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/tvmedia", "/srv/test", "//tvmedia", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/tvmedia/", "/srv/test", "//tvmedia/", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/tv/media", "/srv/test/tv", "//media", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/tv/media/", "/srv/test/tv", "//media/", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/tv", "/srv/test/tv", "//", true, true},
+                   {"nfs://192.168.0.1:2049/srv/test/", "/srv/test", "//", true, true},
+                   {"nfs://192.168.0.1:2049/", "/", "//", true, true},
+                   {"nfs://192.168.0.1:2049/notexported/foo.txt", "/", "//notexported/foo.txt", true, true},
+
+                   {"nfs://192.168.0.1:2049/notexported/foo.txt", "/notexported", "//foo.txt", false, false},
+                 };
+
+class TestNfs : public Test,
+                public WithParamInterface<SplitPath>
+{
+};
+
+class ExportList
+{
+  public: 
+    std::list<std::string> data;
+
+    ExportList()
+    {
+      data.push_back("/srv/test");
+      data.push_back("/srv/test/tv");
+      data.push_back("/");
+      data.sort();
+      data.reverse();
+    }
+};
+
+static ExportList exportList;
+
+TEST_P(TestNfs, splitUrlIntoExportAndPath)
+{
+  CURL url(GetParam().url);
+  CStdString exportPath;
+  CStdString relativePath;
+  gNfsConnection.splitUrlIntoExportAndPath(url, exportPath, relativePath, exportList.data);
+
+  if (GetParam().expectedResultExport)    
+    EXPECT_STREQ(GetParam().exportPath, exportPath);
+  else
+    EXPECT_STRNE(GetParam().exportPath, exportPath);
+
+  if (GetParam().expectedResultPath)
+    EXPECT_STREQ(GetParam().relativePath, relativePath);
+  else
+    EXPECT_STRNE(GetParam().relativePath, relativePath);
+}
+
+INSTANTIATE_TEST_CASE_P(NfsFile, TestNfs, ValuesIn(g_TestData));
index 49adac7..ee1c7c2 100644 (file)
@@ -718,6 +718,7 @@ int udf25::UDFFindPartition( int partnum, struct Partition *part )
         /* Partition Descriptor */
         UDFPartition( LogBlock, &part->Flags, &part->Number,
                       part->Contents, &part->Start, &part->Length );
+        part->Start_Correction = 0;
         part->valid = ( partnum == part->Number );
       } else if( ( TagID == 6 ) && ( !volvalid ) ) {
         /* Logical Volume Descriptor */
@@ -762,6 +763,8 @@ int udf25::UDFFindPartition( int partnum, struct Partition *part )
       UDFExtFileEntry( LogBlock, &File );
       if (File.Type == 250) {
         part->Start  += File.AD_chain[0].Location;
+        // we need to remember this correction because read positions are relative to the non-indirected partition start
+        part->Start_Correction = File.AD_chain[0].Location;
         part->Length  = File.AD_chain[0].Length;
         break;
       }
@@ -792,6 +795,7 @@ int udf25::UDFMapICB( struct AD ICB, struct Partition *partition, struct FileAD
   memset(File, 0, sizeof(*File));
   File->Partition       = partition->Number;
   File->Partition_Start = partition->Start;
+  File->Partition_Start_Correction = partition->Start_Correction;
 
   do {
     if( DVDReadLBUDF( lbnum++, 1, LogBlock, 0 ) <= 0 )
@@ -1109,7 +1113,8 @@ long udf25::ReadFile(HANDLE hFile, unsigned char *pBuffer, long lSize)
     if(len == 0)
       break;
 
-    pos -= 32 * DVD_VIDEO_LB_LEN; /* why? */
+    // correct for partition indirection if applicable
+    pos -= bdfile->file->Partition_Start_Correction * DVD_VIDEO_LB_LEN;
 
     if((uint32_t)lSize < len)
       len = lSize;
index 9213da9..c3a45f3 100644 (file)
@@ -46,6 +46,7 @@ struct Partition {
   uint32_t AccessType;
   uint32_t Start;
   uint32_t Length;
+  uint32_t Start_Correction;
 };
 
 struct AD {
@@ -75,6 +76,7 @@ struct FileAD {
     uint32_t num_AD;
     uint16_t Partition;
     uint32_t Partition_Start;
+    uint32_t Partition_Start_Correction;
     uint8_t  Type;
     uint16_t Flags;
     struct AD AD_chain[UDF_MAX_AD_CHAINS];
index 29a7a5b..82b051e 100644 (file)
@@ -58,6 +58,10 @@ CGUIBaseContainer::CGUIBaseContainer(int parentID, int controlID, float posX, fl
   m_scrollItemsPerFrame = 0.0f;
   m_type = VIEW_TYPE_NONE;
   m_listProvider = NULL;
+  m_autoScrollMoveTime = 0;
+  m_autoScrollDelayTime = 0;
+  m_autoScrollIsReversed = false;
+  m_lastRenderTime = 0;
 }
 
 CGUIBaseContainer::~CGUIBaseContainer(void)
@@ -72,10 +76,19 @@ void CGUIBaseContainer::DoProcess(unsigned int currentTime, CDirtyRegionList &di
   if (m_pageChangeTimer.GetElapsedMilliseconds() > 200)
     m_pageChangeTimer.Stop();
   m_wasReset = false;
+
+  // if not visible, we reset the autoscroll timer
+  if (!IsVisible() && m_autoScrollMoveTime)
+  {
+    ResetAutoScrolling();
+  }
 }
 
 void CGUIBaseContainer::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
 {
+  // update our auto-scrolling as necessary
+  UpdateAutoScrolling(currentTime);
+
   ValidateOffset();
 
   if (m_bInvalidated)
@@ -131,6 +144,8 @@ void CGUIBaseContainer::Process(unsigned int currentTime, CDirtyRegionList &dirt
   // to have same behaviour when scrolling down, we need to set page control to offset+1
   UpdatePageControl(offset + (m_scroller.IsScrollingDown() ? 1 : 0));
 
+  m_lastRenderTime = currentTime;
+
   CGUIControl::Process(currentTime, dirtyregions);
 }
 
@@ -607,6 +622,7 @@ bool CGUIBaseContainer::MoveDown(bool wrapAround)
 // scrolls the said amount
 void CGUIBaseContainer::Scroll(int amount)
 {
+  ResetAutoScrolling();
   ScrollToOffset(GetOffset() + amount);
 }
 
@@ -974,6 +990,42 @@ void CGUIBaseContainer::ScrollToOffset(int offset)
   SetOffset(offset);
 }
 
+void CGUIBaseContainer::SetAutoScrolling(const TiXmlNode *node)
+{
+  if (!node) return;
+  const TiXmlElement *scroll = node->FirstChildElement("autoscroll");
+  if (scroll)
+  {
+    scroll->Attribute("time", &m_autoScrollMoveTime);
+    if (scroll->Attribute("reverse"))
+      m_autoScrollIsReversed = true;
+    if (scroll->FirstChild())
+      m_autoScrollCondition = g_infoManager.Register(scroll->FirstChild()->ValueStr(), GetParentID());
+  }
+}
+
+void CGUIBaseContainer::ResetAutoScrolling()
+{
+  m_autoScrollDelayTime = 0;
+}
+
+void CGUIBaseContainer::UpdateAutoScrolling(unsigned int currentTime)
+{
+  if (m_autoScrollCondition && m_autoScrollCondition->Get())
+  {
+    if (m_lastRenderTime)
+      m_autoScrollDelayTime += currentTime - m_lastRenderTime;
+    if (m_autoScrollDelayTime > (unsigned int)m_autoScrollMoveTime && !m_scroller.IsScrolling())
+    { // delay is finished - start moving
+      m_autoScrollDelayTime = 0;
+      // Move up or down whether reversed moving is true or false
+      m_autoScrollIsReversed ? MoveUp(true) : MoveDown(true);
+    }
+  }
+  else
+    ResetAutoScrolling();
+}
+
 void CGUIBaseContainer::SetContainerMoving(int direction)
 {
   if (direction)
@@ -1001,6 +1053,7 @@ void CGUIBaseContainer::Reset()
   m_wasReset = true;
   m_items.clear();
   m_lastItem.reset();
+  ResetAutoScrolling();
 }
 
 void CGUIBaseContainer::LoadLayout(TiXmlElement *layout)
index 0006dd2..fcba8a0 100644 (file)
@@ -89,6 +89,10 @@ public:
    */
   void SetRenderOffset(const CPoint &offset);
 
+  void SetAutoScrolling(const TiXmlNode *node);
+  void ResetAutoScrolling();
+  void UpdateAutoScrolling(unsigned int currentTime);
+
 #ifdef _DEBUG
   virtual void DumpTextureUse();
 #endif
@@ -194,6 +198,14 @@ protected:
   */
   inline int GetItemOffset() const { return CorrectOffset(GetOffset(), 0); }
 
+  // autoscrolling
+  INFO::InfoPtr m_autoScrollCondition;
+  int           m_autoScrollMoveTime;   // time between to moves
+  unsigned int  m_autoScrollDelayTime;  // current offset into the delay
+  bool          m_autoScrollIsReversed; // scroll backwards
+
+  unsigned int m_lastRenderTime;
+
 private:
   int m_cursor;
   int m_offset;
index ce6a310..d590623 100644 (file)
@@ -137,8 +137,10 @@ void CGUIButtonControl::ProcessText(unsigned int currentTime)
                   m_label2.GetRenderRect() != label2RenderRect);
 
     changed |= m_label2.SetColor(GetTextColor());
+    changed |= m_label2.Process(currentTime);
   }
   changed |= m_label.SetColor(GetTextColor());
+  changed |= m_label.Process(currentTime);
   if (changed)
     MarkDirtyRegion();
 }
index 3bc59bd..dd81c83 100644 (file)
@@ -806,7 +806,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
           (labelInfo.align & XBFONT_RIGHT))
         posX -= width;
     }
-    if (!width)
+    if (!width) // no width specified, so compute from parent
       width = max(rect.Width() - posX, 0.0f);
   }
   if (!GetDimensions(pControlNode, "top", "bottom", "centertop", "centerbottom", "height", rect.Height(), posY, height, minHeight))
@@ -1328,6 +1328,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
     ((CGUIListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIListContainer *)control)->SetPageControl(pageControl);
     ((CGUIListContainer *)control)->SetRenderOffset(offset);
+    ((CGUIListContainer *)control)->SetAutoScrolling(pControlNode);
   }
   else if (type == CGUIControl::GUICONTAINER_WRAPLIST)
   {
@@ -1340,6 +1341,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
     ((CGUIWrappingListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIWrappingListContainer *)control)->SetPageControl(pageControl);
     ((CGUIWrappingListContainer *)control)->SetRenderOffset(offset);
+    ((CGUIWrappingListContainer *)control)->SetAutoScrolling(pControlNode);
   }
   else if (type == CGUIControl::GUICONTAINER_EPGGRID)
   {
@@ -1359,6 +1361,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
     ((CGUIFixedListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIFixedListContainer *)control)->SetPageControl(pageControl);
     ((CGUIFixedListContainer *)control)->SetRenderOffset(offset);
+    ((CGUIFixedListContainer *)control)->SetAutoScrolling(pControlNode);
   }
   else if (type == CGUIControl::GUICONTAINER_PANEL)
   {
@@ -1371,6 +1374,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
     ((CGUIPanelContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIPanelContainer *)control)->SetPageControl(pageControl);
     ((CGUIPanelContainer *)control)->SetRenderOffset(offset);
+    ((CGUIPanelContainer *)control)->SetAutoScrolling(pControlNode);
   }
   else if (type == CGUIControl::GUICONTROL_TEXTBOX)
   {
@@ -1382,6 +1386,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
     if (infoLabels.size())
       ((CGUITextBox *)control)->SetInfo(infoLabels[0]);
     ((CGUITextBox *)control)->SetAutoScrolling(pControlNode);
+    ((CGUITextBox *)control)->SetMinHeight(minHeight);
   }
   else if (type == CGUIControl::GUICONTROL_SELECTBUTTON)
   {
index 1e69cda..3358a5a 100644 (file)
@@ -146,8 +146,12 @@ void CGUIFontTTFGL::End()
   glDrawArrays(GL_QUADS, 0, m_vertex_count);
   glPopClientAttrib();
 
+  glActiveTexture(GL_TEXTURE1);
   glBindTexture(GL_TEXTURE_2D, 0);
+  glDisable(GL_TEXTURE_2D);
   glActiveTexture(GL_TEXTURE0);
+  glBindTexture(GL_TEXTURE_2D, 0);
+  glDisable(GL_TEXTURE_2D);
 #else
   // GLES 2.0 version. Cannot draw quads. Convert to triangles.
   GLint posLoc  = g_Windowing.GUIShaderGetPos();
index 5648a77..6977e0f 100644 (file)
@@ -199,59 +199,66 @@ bool CGUIInfoLabel::IsConstant() const
   return m_info.size() == 0 || (m_info.size() == 1 && m_info[0].m_info == 0);
 }
 
-CStdString CGUIInfoLabel::ReplaceLocalize(const CStdString &label)
+typedef CStdString (*StringReplacerFunc) (const CStdString &str);
+
+void ReplaceString(CStdString &work, const std::string &str, StringReplacerFunc func)
 {
-  CStdString work(label);
-  // Replace all $LOCALIZE[number] with the real string
-  size_t pos1 = work.find("$LOCALIZE[");
+  // Replace all $str[number] with the real string
+  size_t pos1 = work.find("$" + str + "[");
   while (pos1 != std::string::npos)
   {
-    size_t pos2 = StringUtils::FindEndBracket(work, '[', ']', pos1 + 10);
-    if (pos2 != std::string::npos)
+    size_t pos2 = pos1 + str.length() + 2;
+    size_t pos3 = StringUtils::FindEndBracket(work, '[', ']', pos2);
+    if (pos3 != std::string::npos)
     {
       CStdString left = work.substr(0, pos1);
-      CStdString right = work.substr(pos2 + 1);
-      CStdString replace = g_localizeStringsTemp.Get(atoi(work.substr(pos1 + 10).c_str()));
-      if (replace == "")
-         replace = g_localizeStrings.Get(atoi(work.substr(pos1 + 10).c_str()));
+      CStdString right = work.substr(pos3 + 1);
+      CStdString replace = func(work.substr(pos2, pos3 - pos2));
       work = left + replace + right;
     }
     else
     {
-      CLog::Log(LOGERROR, "Error parsing label - missing ']' in \"%s\"", label.c_str());
-      return "";
+      CLog::Log(LOGERROR, "Error parsing label - missing ']' in \"%s\"", work.c_str());
+      return;
     }
-    pos1 = work.find("$LOCALIZE[", pos1);
+    pos1 = work.find("$" + str + "[", pos1);
   }
+}
+
+CStdString LocalizeReplacer(const CStdString &str)
+{
+  CStdString replace = g_localizeStringsTemp.Get(atoi(str.c_str()));
+  if (replace == "")
+    replace = g_localizeStrings.Get(atoi(str.c_str()));
+  return replace;
+}
+
+CStdString AddonReplacer(const CStdString &str)
+{
+  // assumes "addon.id #####"
+  size_t length = str.find(" ");
+  CStdString id = str.substr(0, length);
+  int stringid = atoi(str.substr(length + 1).c_str());
+  return CAddonMgr::Get().GetString(id, stringid);
+}
+
+CStdString NumberReplacer(const CStdString &str)
+{
+  return str;
+}
+
+CStdString CGUIInfoLabel::ReplaceLocalize(const CStdString &label)
+{
+  CStdString work(label);
+  ReplaceString(work, "LOCALIZE", LocalizeReplacer);
+  ReplaceString(work, "NUMBER", NumberReplacer);
   return work;
 }
 
 CStdString CGUIInfoLabel::ReplaceAddonStrings(const CStdString &label)
 {
   CStdString work(label);
-  //FIXME why not use RE here?
-  // Replace all $ADDON[id number] with the real string
-  size_t pos1 = work.find("$ADDON[");
-  while (pos1 != std::string::npos)
-  {
-    size_t pos2 = StringUtils::FindEndBracket(work, '[', ']', pos1 + 7);
-    if (pos2 != std::string::npos)
-    {
-      CStdString left = work.substr(0, pos1);
-      CStdString right = work.substr(pos2 + 1);
-      size_t length = work.find(" ", pos1 + 7) - (pos1 + 7);
-      CStdString id = work.substr(pos1 + 7, length);
-      int stringid = atoi(work.substr(pos1 + 7 + id.length() + 1, 5).c_str());
-      CStdString replace = CAddonMgr::Get().GetString(id, stringid);
-      work = left + replace + right;
-    }
-    else
-    {
-      CLog::Log(LOGERROR, "Error parsing label - missing ']' in \"%s\"", label.c_str());
-      return "";
-    }
-    pos1 = work.find("$ADDON[", pos1);
-  }
+  ReplaceString(work, "ADDON", AddonReplacer);
   return work;
 }
 
index 178d5c3..822f079 100644 (file)
@@ -70,7 +70,7 @@ void CGUIKeyboardFactory::keyTypedCB(CGUIKeyboard *ref, const std::string &typed
 
 // Show keyboard with initial value (aTextString) and replace with result string.
 // Returns: true  - successful display and input (empty result may return true or false depending on parameter)
-//          false - unsucessful display of the keyboard or cancelled editing
+//          false - unsuccessful display of the keyboard or cancelled editing
 bool CGUIKeyboardFactory::ShowAndGetInput(CStdString& aTextString, const CVariant &heading, bool allowEmptyResult, bool hiddenInput /* = false */, unsigned int autoCloseMs /* = 0 */)
 {
   bool confirmed = false;
@@ -142,7 +142,7 @@ bool CGUIKeyboardFactory::ShowAndGetFilter(CStdString &filter, bool searching, u
 // \param newPassword Overwritten with user input if return=true.
 // \param heading Heading to display
 // \param allowEmpty Whether a blank password is valid or not.
-// \return true if successful display and user input entry/re-entry. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input entry/re-entry. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIKeyboardFactory::ShowAndVerifyNewPassword(CStdString& newPassword, const CVariant &heading, bool allowEmpty, unsigned int autoCloseMs /* = 0 */)
 {
   // Prompt user for password input
@@ -172,7 +172,7 @@ bool CGUIKeyboardFactory::ShowAndVerifyNewPassword(CStdString& newPassword, cons
 
 // \brief Show keyboard twice to get and confirm a user-entered password string.
 // \param strNewPassword Overwritten with user input if return=true.
-// \return true if successful display and user input entry/re-entry. false if unsucessful display, no user input, or canceled editing.
+// \return true if successful display and user input entry/re-entry. false if unsuccessful display, no user input, or canceled editing.
 bool CGUIKeyboardFactory::ShowAndVerifyNewPassword(CStdString& newPassword, unsigned int autoCloseMs /* = 0 */)
 {
   CStdString heading = g_localizeStrings.Get(12340);
@@ -183,7 +183,7 @@ bool CGUIKeyboardFactory::ShowAndVerifyNewPassword(CStdString& newPassword, unsi
 // \param strPassword Value to compare against user input.
 // \param dlgHeading String shown on dialog title. Converts to localized string if contains a positive integer.
 // \param iRetries If greater than 0, shows "Incorrect password, %d retries left" on dialog line 2, else line 2 is blank.
-// \return 0 if successful display and user input. 1 if unsucessful input. -1 if no user input or canceled editing.
+// \return 0 if successful display and user input. 1 if unsuccessful input. -1 if no user input or canceled editing.
 int CGUIKeyboardFactory::ShowAndVerifyPassword(CStdString& strPassword, const CStdString& strHeading, int iRetries, unsigned int autoCloseMs /* = 0 */)
 {
   CStdString strHeadingTemp;
index 44f4bfd..0599cce 100644 (file)
@@ -230,6 +230,8 @@ void CGUIListGroup::SetState(bool selected, bool focused)
       label->SetSelected(selected);
       label->SetScrolling(focused);
     }
+    else if ((*it)->GetControlType() == CGUIControl::GUICONTROL_LISTGROUP)
+      ((CGUIListGroup *)(*it))->SetState(selected, focused);
   }
 }
 
index f00ae61..f104231 100644 (file)
@@ -327,6 +327,7 @@ void CGUIListItem::Archive(CArchive &ar)
       ar >> value;
       m_artFallbacks.insert(make_pair(key, value));
     }
+    SetInvalid();
   }
 }
 void CGUIListItem::Serialize(CVariant &value)
@@ -400,7 +401,17 @@ void CGUIListItem::SetInvalid()
 
 void CGUIListItem::SetProperty(const CStdString &strKey, const CVariant &value)
 {
-  m_mapProperties[strKey] = value;
+  PropertyMap::iterator iter = m_mapProperties.find(strKey);
+  if (iter == m_mapProperties.end())
+  {
+    m_mapProperties.insert(make_pair(strKey, value));
+    SetInvalid();
+  }
+  else if (iter->second != value)
+  {
+    iter->second = value;
+    SetInvalid();
+  }
 }
 
 CVariant CGUIListItem::GetProperty(const CStdString &strKey) const
@@ -425,12 +436,19 @@ void CGUIListItem::ClearProperty(const CStdString &strKey)
 {
   PropertyMap::iterator iter = m_mapProperties.find(strKey);
   if (iter != m_mapProperties.end())
+  {
     m_mapProperties.erase(iter);
+    SetInvalid();
+  }
 }
 
 void CGUIListItem::ClearProperties()
 {
-  m_mapProperties.clear();
+  if (!m_mapProperties.empty())
+  {
+    m_mapProperties.clear();
+    SetInvalid();
+  }
 }
 
 void CGUIListItem::IncrementProperty(const CStdString &strKey, int nVal)
index 4483474..de3b275 100644 (file)
@@ -45,6 +45,8 @@ CGUITextBox::CGUITextBox(int parentID, int controlID, float posX, float posY, fl
   m_autoScrollDelay = 3000;
   m_autoScrollDelayTime = 0;
   m_autoScrollRepeatAnim = NULL;
+  m_minHeight = 0;
+  m_renderHeight = height;
 }
 
 CGUITextBox::CGUITextBox(const CGUITextBox &from)
@@ -55,6 +57,8 @@ CGUITextBox::CGUITextBox(const CGUITextBox &from)
   m_autoScrollCondition = from.m_autoScrollCondition;
   m_autoScrollTime = from.m_autoScrollTime;
   m_autoScrollDelay = from.m_autoScrollDelay;
+  m_minHeight = from.m_minHeight;
+  m_renderHeight = from.m_renderHeight;
   m_autoScrollRepeatAnim = NULL;
   if (from.m_autoScrollRepeatAnim)
     m_autoScrollRepeatAnim = new CAnimation(*from.m_autoScrollRepeatAnim);
@@ -85,6 +89,8 @@ bool CGUITextBox::UpdateColors()
   return changed;
 }
 
+#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+
 void CGUITextBox::UpdateInfo(const CGUIListItem *item)
 {
   m_textColor = m_label.textColor;
@@ -98,7 +104,10 @@ void CGUITextBox::UpdateInfo(const CGUIListItem *item)
   ResetAutoScrolling();
 
   m_itemHeight = m_font ? m_font->GetLineHeight() : 10;
-  m_itemsPerPage = (unsigned int)(m_height / m_itemHeight);
+  float textHeight = m_itemHeight * m_lines.size();
+  float maxHeight = m_height ? m_height : textHeight;
+  m_renderHeight = m_minHeight ? CLAMP(textHeight, m_minHeight, maxHeight) : m_height;
+  m_itemsPerPage = (unsigned int)(m_renderHeight / m_itemHeight);
 
   UpdatePageControl();
 }
@@ -195,7 +204,7 @@ void CGUITextBox::Render()
   if (m_autoScrollRepeatAnim)
     g_graphicsContext.SetTransform(m_cachedTextMatrix);
 
-  if (g_graphicsContext.SetClipRegion(m_posX, m_posY, m_width, m_height))
+  if (g_graphicsContext.SetClipRegion(m_posX, m_posY, m_width, m_renderHeight))
   {
     // we offset our draw position to take into account scrolling and whether or not our focused
     // item is offscreen "above" the list.
@@ -213,7 +222,7 @@ void CGUITextBox::Render()
     {
       m_font->Begin();
       int current = offset;
-      while (posY < m_posY + m_height && current < (int)m_lines.size())
+      while (posY < m_posY + m_renderHeight && current < (int)m_lines.size())
       {
         uint32_t align = m_label.align;
         if (m_lines[current].m_text.size() && m_lines[current].m_carriageReturn)
@@ -271,6 +280,19 @@ bool CGUITextBox::OnMessage(CGUIMessage& message)
   return CGUIControl::OnMessage(message);
 }
 
+float CGUITextBox::GetHeight() const
+{
+  return m_renderHeight;
+}
+
+void CGUITextBox::SetMinHeight(float minHeight)
+{
+  if (m_minHeight != minHeight)
+    SetInvalid();
+  
+  m_minHeight = minHeight;
+}
+
 void CGUITextBox::UpdatePageControl()
 {
   if (m_pageControl)
index 40edfb4..7e683ec 100644 (file)
@@ -52,6 +52,8 @@ public:
   virtual void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
   virtual void Render();
   virtual bool OnMessage(CGUIMessage& message);
+  virtual float GetHeight() const;
+  void SetMinHeight(float minHeight);
 
   void SetPageControl(int pageControl);
 
@@ -72,6 +74,10 @@ protected:
   unsigned int GetRows() const;
   int GetCurrentPage() const;
 
+  // auto-height
+  float m_minHeight;
+  float m_renderHeight;
+
   // offset of text in the control for scrolling
   unsigned int m_offset;
   float m_scrollOffset;
index ee0775b..ade799d 100644 (file)
@@ -217,19 +217,28 @@ void CGUITextLayout::RenderOutline(float x, float y, color_t color, color_t outl
 
 bool CGUITextLayout::Update(const CStdString &text, float maxWidth, bool forceUpdate /*= false*/, bool forceLTRReadingOrder /*= false*/)
 {
-  // convert to utf16
+  if (text == m_lastUtf8Text && !forceUpdate)
+    return false;
+
+  m_lastUtf8Text = text;
   CStdStringW utf16;
   utf8ToW(text, utf16);
-
-  // update
-  return UpdateW(utf16, maxWidth, forceUpdate, forceLTRReadingOrder);
+  UpdateCommon(utf16, maxWidth, forceLTRReadingOrder);
+  return true;
 }
 
 bool CGUITextLayout::UpdateW(const CStdStringW &text, float maxWidth /*= 0*/, bool forceUpdate /*= false*/, bool forceLTRReadingOrder /*= false*/)
 {
-  if (text.Equals(m_lastText) && !forceUpdate)
+  if (text == m_lastText && !forceUpdate)
     return false;
 
+  m_lastText = text;
+  UpdateCommon(text, maxWidth, forceLTRReadingOrder);
+  return true;
+}
+
+void CGUITextLayout::UpdateCommon(const CStdStringW &text, float maxWidth, bool forceLTRReadingOrder)
+{
   // parse the text for style information
   vecText parsedText;
   vecColors colors;
@@ -237,8 +246,6 @@ bool CGUITextLayout::UpdateW(const CStdStringW &text, float maxWidth /*= 0*/, bo
 
   // and update
   UpdateStyled(parsedText, colors, maxWidth, forceLTRReadingOrder);
-  m_lastText = text;
-  return true;
 }
 
 void CGUITextLayout::UpdateStyled(const vecText &text, const vecColors &colors, float maxWidth, bool forceLTRReadingOrder)
@@ -668,6 +675,7 @@ void CGUITextLayout::Reset()
 {
   m_lines.clear();
   m_lastText.clear();
+  m_lastUtf8Text.clear();
   m_textWidth = m_textHeight = 0;
 }
 
index bc2bdfe..2c98e85 100644 (file)
@@ -116,6 +116,7 @@ protected:
   static void BidiTransform(std::vector<CGUIString> &lines, bool forceLTRReadingOrder);
   static CStdStringW BidiFlip(const CStdStringW &text, bool forceLTRReadingOrder);
   void CalcTextExtent();
+  void UpdateCommon(const CStdStringW &text, float maxWidth, bool forceLTRReadingOrder);
 
   // our text to render
   vecColors m_colors;
@@ -131,6 +132,7 @@ protected:
   // the default color (may differ from the font objects defaults)
   color_t m_textColor;
 
+  std::string m_lastUtf8Text;
   CStdStringW m_lastText;
   float m_textWidth;
   float m_textHeight;
index 433c173..7302f83 100644 (file)
@@ -462,10 +462,10 @@ void CGUITextureBase::FreeResources(bool immediately /* = false */)
   if (m_isAllocated == LARGE || m_isAllocated == LARGE_FAILED)
     g_largeTextureManager.ReleaseImage(m_info.filename, immediately || (m_isAllocated == LARGE_FAILED));
   else if (m_isAllocated == NORMAL && m_texture.size())
-    g_TextureManager.ReleaseTexture(m_info.filename);
+    g_TextureManager.ReleaseTexture(m_info.filename, immediately);
 
   if (m_diffuse.size())
-    g_TextureManager.ReleaseTexture(m_info.diffuse);
+    g_TextureManager.ReleaseTexture(m_info.diffuse, immediately);
   m_diffuse.Reset();
 
   m_texture.Reset();
index 7e54c74..44e19a3 100644 (file)
@@ -118,9 +118,14 @@ void CGUITextureGL::Begin(color_t color)
 void CGUITextureGL::End()
 {
   glEnd();
-  if (m_diffuse.size())
-    glDisable(GL_TEXTURE_2D);
+  glActiveTexture(GL_TEXTURE2_ARB);
+  glBindTexture(GL_TEXTURE_2D, 0);
+  glDisable(GL_TEXTURE_2D);
+  glActiveTexture(GL_TEXTURE1_ARB);
+  glBindTexture(GL_TEXTURE_2D, 0);
+  glDisable(GL_TEXTURE_2D);
   glActiveTexture(GL_TEXTURE0_ARB);
+  glBindTexture(GL_TEXTURE_2D, 0);
   glDisable(GL_TEXTURE_2D);
 }
 
index c736700..612cdd7 100644 (file)
@@ -257,7 +257,7 @@ bool CGUIWindow::Load(TiXmlElement* pRootElement)
       {
         if (strcmpi(pControl->Value(), "control") == 0)
         {
-          LoadControl(pControl, NULL);
+          LoadControl(pControl, NULL, CRect(0, 0, (float)m_coordsRes.iWidth, (float)m_coordsRes.iHeight));
         }
         pControl = pControl->NextSiblingElement();
       }
@@ -279,19 +279,11 @@ bool CGUIWindow::Load(TiXmlElement* pRootElement)
   return true;
 }
 
-void CGUIWindow::LoadControl(TiXmlElement* pControl, CGUIControlGroup *pGroup)
+void CGUIWindow::LoadControl(TiXmlElement* pControl, CGUIControlGroup *pGroup, const CRect &rect)
 {
   // get control type
   CGUIControlFactory factory;
 
-  CRect rect(0, 0, (float)m_coordsRes.iWidth, (float)m_coordsRes.iHeight);
-  if (pGroup)
-  {
-    rect.x1 = pGroup->GetXPosition();
-    rect.y1 = pGroup->GetYPosition();
-    rect.x2 = rect.x1 + pGroup->GetWidth();
-    rect.y2 = rect.y1 + pGroup->GetHeight();
-  }
   CGUIControl* pGUIControl = factory.Create(GetID(), rect, pControl);
   if (pGUIControl)
   {
@@ -314,10 +306,13 @@ void CGUIWindow::LoadControl(TiXmlElement* pControl, CGUIControlGroup *pGroup)
     // if the new control is a group, then add it's controls
     if (pGUIControl->IsGroup())
     {
+      CGUIControlGroup *grp = (CGUIControlGroup *)pGUIControl;
       TiXmlElement *pSubControl = pControl->FirstChildElement("control");
+      CRect grpRect(grp->GetXPosition(), grp->GetYPosition(),
+                    grp->GetXPosition() + grp->GetWidth(), grp->GetYPosition() + grp->GetHeight());
       while (pSubControl)
       {
-        LoadControl(pSubControl, (CGUIControlGroup *)pGUIControl);
+        LoadControl(pSubControl, grp, grpRect);
         pSubControl = pSubControl->NextSiblingElement("control");
       }
     }
index 34dd833..10739a5 100644 (file)
@@ -230,7 +230,7 @@ protected:
   typedef std::map<int, SELECTED_EVENT> MAPCONTROLSELECTEDEVENTS;
   MAPCONTROLSELECTEDEVENTS m_mapSelectedEvents;
 
-  void LoadControl(TiXmlElement* pControl, CGUIControlGroup *pGroup);
+  void LoadControl(TiXmlElement* pControl, CGUIControlGroup *pGroup, const CRect &rect);
 
 //#ifdef PRE_SKIN_VERSION_9_10_COMPATIBILITY
   void ChangeButtonToEdit(int id, bool singleLabel = false);
index a8ab387..744baaa 100644 (file)
@@ -186,6 +186,7 @@ void CGUIWindowManager::Add(CGUIWindow* pWindow)
   }
   // push back all the windows if there are more than one covered by this class
   CSingleLock lock(g_graphicsContext);
+  m_idCache.Invalidate();
   const vector<int>& idRange = pWindow->GetIDRange();
   for (vector<int>::const_iterator idIt = idRange.begin(); idIt != idRange.end() ; ++idIt)
   {
@@ -219,6 +220,7 @@ void CGUIWindowManager::AddModeless(CGUIWindow* dialog)
 void CGUIWindowManager::Remove(int id)
 {
   CSingleLock lock(g_graphicsContext);
+  m_idCache.Invalidate();
   WindowMap::iterator it = m_mapWindows.find(id);
   if (it != m_mapWindows.end())
   {
@@ -642,16 +644,21 @@ void CGUIWindowManager::FrameMove()
 
 CGUIWindow* CGUIWindowManager::GetWindow(int id) const
 {
-  if (id == WINDOW_INVALID)
-  {
+  CGUIWindow *window;
+  if (id == 0 || id == WINDOW_INVALID)
     return NULL;
-  }
+  window = m_idCache.Get(id);
+  if (window)
+    return window;
 
   CSingleLock lock(g_graphicsContext);
   WindowMap::const_iterator it = m_mapWindows.find(id);
   if (it != m_mapWindows.end())
-    return (*it).second;
-  return NULL;
+    window = (*it).second;
+  else
+    window = NULL;
+  m_idCache.Set(id, window);
+  return window;
 }
 
 void CGUIWindowManager::ProcessRenderLoop(bool renderOnly /*= false*/)
index 70d9b9a..0654996 100644 (file)
@@ -33,6 +33,7 @@
 #include "IMsgTargetCallback.h"
 #include "DirtyRegionTracker.h"
 #include "utils/GlobalsHandling.h"
+#include "guilib/WindowIDs.h"
 #include <list>
 
 class CGUIDialog;
@@ -177,6 +178,32 @@ private:
   bool m_initialized;
 
   CDirtyRegionTracker m_tracker;
+
+private:
+  class CGUIWindowManagerIdCache
+  {
+  public:
+    CGUIWindowManagerIdCache(void) : m_id(WINDOW_INVALID) {}
+    CGUIWindow *Get(int id)
+    {
+      if (id == m_id)
+        return m_window;
+      return NULL;
+    }
+    void Set(int id, CGUIWindow *window)
+    {
+      m_id = id;
+      m_window = window;
+    }
+    void Invalidate(void)
+    {
+      m_id = WINDOW_INVALID;
+    }
+  private:
+    int m_id;
+    CGUIWindow *m_window;
+  };
+  mutable CGUIWindowManagerIdCache m_idCache;
 };
 
 /*!
index a7c1229..0b92ffd 100644 (file)
@@ -260,7 +260,7 @@ public:
 
   T x1, y1, x2, y2;
 private:
-  inline static float clamp_range(T x, T l, T h) XBMC_FORCE_INLINE
+  inline static T clamp_range(T x, T l, T h) XBMC_FORCE_INLINE
   {
     return (x > h) ? h : ((x < l) ? l : x);
   }
index 57d7c4e..d16b861 100644 (file)
@@ -175,7 +175,7 @@ void CBaseTexture::ClampToEdge()
   }
 }
 
-CBaseTexture *CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int idealWidth, unsigned int idealHeight, bool autoRotate, bool requirePixels)
+CBaseTexture *CBaseTexture::LoadFromFile(const CStdString& texturePath, unsigned int idealWidth, unsigned int idealHeight, bool autoRotate, bool requirePixels, const std::string& strMimeType)
 {
 #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, requirePixels))
+  if (texture->LoadFromFileInternal(texturePath, idealWidth, idealHeight, autoRotate, requirePixels, strMimeType))
     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 requirePixels)
+bool CBaseTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels, const std::string& strMimeType)
 {
   if (URIUtils::HasExtension(texturePath, ".dds"))
   { // special case for DDS images
@@ -241,8 +241,13 @@ bool CBaseTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned
   if (inputBuffSize == 0)
     return false;
 
-  CURL url(texturePath);
-  IImage* pImage = ImageFactory::CreateLoader(url);
+  IImage* pImage;
+
+  if(strMimeType.empty())
+    pImage = ImageFactory::CreateLoader(texturePath);
+  else
+    pImage = ImageFactory::CreateLoaderFromMimeType(strMimeType);
+
   if(!LoadIImage(pImage, (unsigned char *) inputBuff, inputBuffSize, width, height, autoRotate))
   {
     delete pImage;
index 112d6ba..02de47d 100644 (file)
@@ -54,10 +54,11 @@ public:
    \param idealWidth the ideal width of the texture (defaults to 0, no ideal width).
    \param idealHeight the ideal height of the texture (defaults to 0, no ideal height).
    \param autoRotate whether the textures should be autorotated based on EXIF information (defaults to false).
+   \param strMimeType mimetype of the given texture if available (defaults to empty)
    \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 requirePixels = false);
+                                    bool autoRotate = false, bool requirePixels = false, const std::string& strMimeType = "");
 
   /*! \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 +112,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 requirePixels);
+  bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels, const std::string& strMimeType = "");
   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;
index 6a3829f..9e0e05d 100644 (file)
@@ -302,7 +302,7 @@ const CTextureArray& CGUITextureManager::Load(const CStdString& strTextureName,
   for (ilistUnused i = m_unusedTextures.begin(); i != m_unusedTextures.end(); ++i)
   {
     CTextureMap* pMap = i->first;
-    if (pMap->GetName() == strTextureName)
+    if (pMap->GetName() == strTextureName && i->second > 0)
     {
       m_vecTextures.push_back(pMap);
       m_unusedTextures.erase(i);
@@ -435,7 +435,7 @@ const CTextureArray& CGUITextureManager::Load(const CStdString& strTextureName,
 }
 
 
-void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
+void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName, bool immediately /*= false */)
 {
   CSingleLock lock(g_graphicsContext);
 
@@ -450,7 +450,7 @@ void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
       {
         //CLog::Log(LOGINFO, "  cleanup:%s", strTextureName.c_str());
         // add to our textures to free
-        m_unusedTextures.push_back(make_pair(pMap, XbmcThreads::SystemClockMillis()));
+        m_unusedTextures.push_back(make_pair(pMap, immediately ? 0 : XbmcThreads::SystemClockMillis()));
         i = m_vecTextures.erase(i);
       }
       return;
index 33a33bf..aca7774 100644 (file)
@@ -110,7 +110,7 @@ public:
   bool HasTexture(const CStdString &textureName, CStdString *path = NULL, int *bundle = NULL, int *size = NULL);
   static bool CanLoad(const CStdString &texturePath); ///< Returns true if the texture manager can load this texture
   const CTextureArray& Load(const CStdString& strTextureName, bool checkBundleOnly = false);
-  void ReleaseTexture(const CStdString& strTextureName);
+  void ReleaseTexture(const CStdString& strTextureName, bool immediately = false);
   void Cleanup();
   void Dump() const;
   uint32_t GetMemoryUsage() const;
index 4e7430c..3950b3f 100644 (file)
@@ -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 requirePixels)
+bool CPiTexture::LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels, const std::string& strMimeType)
 {
   if (URIUtils::HasExtension(texturePath, ".jpg|.tbn"))
   {
index 47095b9..b0fa8e4 100644 (file)
@@ -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 requirePixels);
+  bool LoadFromFileInternal(const CStdString& texturePath, unsigned int maxWidth, unsigned int maxHeight, bool autoRotate, bool requirePixels, const std::string& strMimeType = "");
 
 protected:
 
index 2aa68e4..1033a82 100644 (file)
@@ -21,6 +21,7 @@
 #include "imagefactory.h"
 #include "guilib/JpegIO.h"
 #include "guilib/cximage.h"
+#include "utils/Mime.h"
 
 IImage* ImageFactory::CreateLoader(const std::string& strFileName)
 {
@@ -30,7 +31,10 @@ IImage* ImageFactory::CreateLoader(const std::string& strFileName)
 
 IImage* ImageFactory::CreateLoader(const CURL& url)
 {
-  return CreateLoaderFromMimeType("image/"+url.GetFileType());
+  if(!url.GetFileType().empty())
+    return CreateLoaderFromMimeType("image/"+url.GetFileType());
+
+  return CreateLoaderFromMimeType(CMime::GetMimeType(url));
 }
 
 IImage* ImageFactory::CreateLoaderFromMimeType(const std::string& strMimeType)
@@ -44,8 +48,3 @@ IImage* ImageFactory::CreateFallbackLoader(const std::string& strMimeType)
 {
   return new CXImage(strMimeType);
 }
-
-IImage* ImageFactory::CreateFallbackLoader(const CURL& url)
-{
-  return new CXImage("image/"+url.GetFileType());
-}
\ No newline at end of file
index 5333ed9..ef3ca69 100644 (file)
@@ -32,5 +32,4 @@ public:
   static IImage* CreateLoader(const CURL& url);
   static IImage* CreateLoaderFromMimeType(const std::string& strMimeType);
   static IImage* CreateFallbackLoader(const std::string& strMimeType);
-  static IImage* CreateFallbackLoader(const CURL& url);
 };
\ No newline at end of file
index f2af9ce..3b3ebba 100644 (file)
@@ -168,7 +168,7 @@ void CRemoteControl::Initialize()
                   if ((m_inotify_wd = inotify_add_watch(m_inotify_fd, m_deviceName.c_str(), IN_DELETE_SELF)) != -1)
                   {
                     m_bInitialized = true;
-                    CLog::Log(LOGINFO, "LIRC %s: sucessfully started", __FUNCTION__);
+                    CLog::Log(LOGINFO, "LIRC %s: successfully started", __FUNCTION__);
                   }
                   else
                     CLog::Log(LOGDEBUG, "LIRC: Failed to initialize Inotify. LIRC device will not be monitored.");
@@ -177,7 +177,7 @@ void CRemoteControl::Initialize()
             }
 #else
             m_bInitialized = true;
-            CLog::Log(LOGINFO, "LIRC %s: sucessfully started", __FUNCTION__);
+            CLog::Log(LOGINFO, "LIRC %s: successfully started", __FUNCTION__);
 #endif
           }
           else
index 3123454..8669901 100644 (file)
@@ -392,10 +392,6 @@ int CBuiltins::Execute(const CStdString& execString)
     {
       // disable the screensaver
       g_application.WakeUpScreenSaverAndDPMS();
-#if defined(TARGET_DARWIN_IOS)
-      if (params[0].Equals("shutdownmenu"))
-        CBuiltins::Execute("Quit");
-#endif     
       g_windowManager.ActivateWindow(iWindow, params, !execute.Equals("activatewindow"));
     }
     else
@@ -421,10 +417,6 @@ int CBuiltins::Execute(const CStdString& execString)
     {
       // disable the screensaver
       g_application.WakeUpScreenSaverAndDPMS();
-#if defined(TARGET_DARWIN_IOS)
-      if (params[0].Equals("shutdownmenu"))
-        CBuiltins::Execute("Quit");
-#endif
       vector<CStdString> dummy;
       g_windowManager.ActivateWindow(iWindow, dummy, !execute.Equals("activatewindowandfocus"));
 
@@ -1441,6 +1433,8 @@ int CBuiltins::Execute(const CStdString& execString)
     CStdString path;
     VECSOURCES shares;
     g_mediaManager.GetLocalDrives(shares);
+    g_mediaManager.GetNetworkLocations(shares);
+    g_mediaManager.GetRemovableDrives(shares);
     bool singleFile;
     bool thumbs=false;
     bool actorThumbs=false;
diff --git a/xbmc/interfaces/info/InfoBool.cpp b/xbmc/interfaces/info/InfoBool.cpp
new file mode 100644 (file)
index 0000000..7e42eb5
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *      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 "InfoBool.h"
+#include "utils/StringUtils.h"
+
+namespace INFO
+{
+  InfoBool::InfoBool(const std::string &expression, int context)
+    : m_value(false),
+      m_context(context),
+      m_listItemDependent(false),
+      m_expression(expression),
+      m_dirty(true)
+  {
+    StringUtils::ToLower(m_expression);
+  }
+}
index 86a1696..a60e167 100644 (file)
@@ -34,15 +34,7 @@ namespace INFO
 class InfoBool
 {
 public:
-  InfoBool(const std::string &expression, int context)
-    : m_value(false),
-      m_context(context),
-      m_listItemDependent(false),
-      m_expression(expression),
-      m_dirty(true)
-  {
-  };
-
+  InfoBool(const std::string &expression, int context);
   virtual ~InfoBool() {};
 
   /*! \brief Set the info bool dirty.
index 01fdca7..ba719c5 100644 (file)
@@ -1,4 +1,5 @@
-SRCS=InfoExpression.cpp \
+SRCS=InfoBool.cpp \
+     InfoExpression.cpp \
      SkinVariable.cpp \
      
 LIB=info.a
index bbc5c0d..55c2d81 100644 (file)
@@ -179,7 +179,7 @@ JSONRPC_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITranspo
     return InternalError;
 
   CAlbum album;
-  if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
+  if (!musicdatabase.GetAlbum(albumID, album, false))
     return InvalidParams;
 
   CStdString path;
@@ -397,7 +397,7 @@ JSONRPC_STATUS CAudioLibrary::SetArtistDetails(const CStdString &method, ITransp
     return InternalError;
 
   CArtist artist;
-  if (!musicdatabase.GetArtistInfo(id, artist) || artist.idArtist <= 0)
+  if (!musicdatabase.GetArtist(id, artist) || artist.idArtist <= 0)
     return InvalidParams;
 
   if (ParameterNotNull(parameterObject, "artist"))
@@ -423,7 +423,7 @@ JSONRPC_STATUS CAudioLibrary::SetArtistDetails(const CStdString &method, ITransp
   if (ParameterNotNull(parameterObject, "yearsactive"))
     CopyStringArray(parameterObject["yearsactive"], artist.yearsActive);
 
-  if (musicdatabase.SetArtistInfo(id, artist) <= 0)
+  if (!musicdatabase.UpdateArtist(artist))
     return InternalError;
 
   CJSONRPCUtils::NotifyItemUpdated();
@@ -439,8 +439,7 @@ JSONRPC_STATUS CAudioLibrary::SetAlbumDetails(const CStdString &method, ITranspo
     return InternalError;
 
   CAlbum album;
-  VECSONGS songs;
-  if (!musicdatabase.GetAlbumInfo(id, album, &songs) || album.idAlbum <= 0)
+  if (!musicdatabase.GetAlbum(id, album) || album.idAlbum <= 0)
     return InvalidParams;
 
   if (ParameterNotNull(parameterObject, "title"))
@@ -466,7 +465,7 @@ JSONRPC_STATUS CAudioLibrary::SetAlbumDetails(const CStdString &method, ITranspo
   if (ParameterNotNull(parameterObject, "year"))
     album.iYear = (int)parameterObject["year"].asInteger();
 
-  if (musicdatabase.SetAlbumInfo(id, album, songs) <= 0)
+  if (musicdatabase.UpdateAlbum(album) <= 0)
     return InternalError;
 
   CJSONRPCUtils::NotifyItemUpdated();
@@ -510,7 +509,7 @@ JSONRPC_STATUS CAudioLibrary::SetSongDetails(const CStdString &method, ITranspor
   if (ParameterNotNull(parameterObject, "musicbrainztrackid"))
     song.strMusicBrainzTrackID = parameterObject["musicbrainztrackid"].asString();
 
-  if (musicdatabase.UpdateSong(id, song.strTitle, song.strMusicBrainzTrackID, song.strFileName, song.strComment, song.strThumb, song.artist, song.genre, song.iTrack, song.iDuration, song.iYear, song.iTimesPlayed, song.iStartOffset, song.iEndOffset, song.lastPlayed, song.rating, song.iKaraokeNumber) <= 0)
+  if (musicdatabase.UpdateSong(id, song) <= 0)
     return InternalError;
 
   CJSONRPCUtils::NotifyItemUpdated();
@@ -563,7 +562,7 @@ bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItemPtr &it
     {
       CAlbum album;
       int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
-      if (musicdatabase.GetAlbumInfo(albumid, album, NULL))
+      if (musicdatabase.GetAlbum(albumid, album, false))
       {
         item->SetFromAlbum(album);
 
index 3a952f9..e1a871e 100644 (file)
@@ -173,12 +173,6 @@ bool CFileItemHandler::GetField(const std::string &field, const CVariant &info,
         return true;
       }
     }
-    
-    if (field == "lastmodified" && item->m_dateTime.IsValid())
-    {
-      result[field] = item->m_dateTime.GetAsLocalizedDateTime();
-      return true;
-    }
 
     if (item->HasProperty(field))
     {
index 32881c7..b8e895c 100644 (file)
@@ -321,7 +321,7 @@ namespace JSONRPC
      \brief Parses the given json schema description and evaluates
      and stores the defined type
      \param jsonType json schema description to parse
-     \return True if the json schema description has been parsed sucessfully otherwise false
+     \return True if the json schema description has been parsed successfully otherwise false
      */
     static bool AddType(const std::string &jsonType);
 
@@ -330,7 +330,7 @@ namespace JSONRPC
      and stores the defined method
      \param jsonMethod json schema description to parse
      \param method pointer to the implementation
-     \return True if the json schema description has been parsed sucessfully otherwise false
+     \return True if the json schema description has been parsed successfully otherwise false
      */
     static bool AddMethod(const std::string &jsonMethod, MethodCall method);
 
@@ -338,7 +338,7 @@ namespace JSONRPC
      \brief Parses the given json schema description and evaluates
      and stores the defined builtin method
      \param jsonMethod json schema description to parse
-     \return True if the json schema description has been parsed sucessfully otherwise false
+     \return True if the json schema description has been parsed successfully otherwise false
      */
     static bool AddBuiltinMethod(const std::string &jsonMethod);
 
@@ -346,7 +346,7 @@ namespace JSONRPC
      \brief Parses the given json schema description and evaluates
      and stores the defined notification
      \param jsonNotification json schema description to parse
-     \return True if the json schema description has been parsed sucessfully otherwise false
+     \return True if the json schema description has been parsed successfully otherwise false
      */
     static bool AddNotification(const std::string &jsonNotification);
 
index 59d7708..b45b692 100644 (file)
@@ -22,7 +22,7 @@
 namespace JSONRPC
 {
   const char* const JSONRPC_SERVICE_ID          = "http://xbmc.org/jsonrpc/ServiceDescription.json";
-  const char* const JSONRPC_SERVICE_VERSION     = "6.13.0";
+  const char* const JSONRPC_SERVICE_VERSION     = "6.13.5";
   const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
 
   const char* const JSONRPC_SERVICE_TYPES[] = {  
@@ -581,6 +581,7 @@ namespace JSONRPC
         "\"properties\": {"
           "\"name\": { \"type\": \"string\", \"required\": true },"
           "\"role\": { \"type\": \"string\", \"required\": true },"
+          "\"order\": { \"type\": \"integer\", \"required\": true },"
           "\"thumbnail\": { \"type\": \"string\" }"
         "},"
         "\"additionalProperties\": false"
@@ -825,7 +826,7 @@ namespace JSONRPC
                   "\"endtime\", \"runtime\", \"progress\", \"progresspercentage\","
                   "\"genre\", \"episodename\", \"episodenum\", \"episodepart\","
                   "\"firstaired\", \"hastimer\", \"isactive\", \"parentalrating\","
-                  "\"wasactive\", \"thumbnail\" ]"
+                  "\"wasactive\", \"thumbnail\", \"rating\" ]"
       "}"
     "}",
     "\"PVR.Details.Broadcast\": {"
@@ -847,9 +848,10 @@ namespace JSONRPC
         "\"firstaired\": { \"type\": \"string\" },"
         "\"hastimer\": { \"type\": \"boolean\" },"
         "\"isactive\": { \"type\": \"boolean\" },"
-        "\"rating\": { \"type\": \"integer\" },"
+        "\"parentalrating\": { \"type\": \"integer\" },"
         "\"wasactive\": { \"type\": \"boolean\" },"
-        "\"thumbnail\": { \"type\": \"string\" }"
+        "\"thumbnail\": { \"type\": \"string\" },"
+        "\"rating\": { \"type\": \"integer\" }"
       "}"
     "}",
     "\"Textures.Details.Size\": {"
@@ -1665,9 +1667,13 @@ namespace JSONRPC
       "\"returns\": {"
         "\"type\": \"object\","
         "\"properties\": {"
-          "\"major\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards incompatible changes to the API definition\" },"
-          "\"minor\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards compatible additions/changes to the API definition\" },"
-          "\"patch\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on any changes to the internal implementation but not to the API definition\" }"
+          "\"version\": { \"type\": \"object\", \"required\": true,"
+            "\"properties\": {"
+              "\"major\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards incompatible changes to the API definition\" },"
+              "\"minor\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on backwards compatible additions/changes to the API definition\" },"
+              "\"patch\": { \"type\": \"integer\", \"minimum\": 0, \"required\": true, \"description\": \"Bumped on any changes to the internal implementation but not to the API definition\" }"
+            "}"
+          "}"
         "}"
       "}"
     "}",
index 98fe1e1..fdb1633 100644 (file)
@@ -980,15 +980,14 @@ void CVideoLibrary::UpdateResumePoint(const CVariant &parameterObject, CVideoInf
     else
     {
       CBookmark bookmark;
-      if (videodatabase.GetResumeBookMark(details.m_strFileNameAndPath, bookmark))
-      {
-        bookmark.timeInSeconds = position;
-      
-        int total = (int)parameterObject["resume"]["total"].asInteger();
-        if (total > 0)
-          bookmark.totalTimeInSeconds = total;
-        videodatabase.AddBookMarkToFile(details.m_strFileNameAndPath, bookmark, CBookmark::RESUME);
-      }
+      int total = (int)parameterObject["resume"]["total"].asInteger();
+      if (total <= 0 && !videodatabase.GetResumeBookMark(details.m_strFileNameAndPath, bookmark))
+        bookmark.totalTimeInSeconds = details.m_streamDetails.GetVideoDuration();
+      else
+        bookmark.totalTimeInSeconds = total;
+
+      bookmark.timeInSeconds = position;
+      videodatabase.AddBookMarkToFile(details.m_strFileNameAndPath, bookmark, CBookmark::RESUME);
     }
   }
 }
index 1ffaa48..1737e59 100644 (file)
     "returns": {
       "type": "object",
       "properties": {
-        "major": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards incompatible changes to the API definition" },
-        "minor": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards compatible additions/changes to the API definition" },
-        "patch": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on any changes to the internal implementation but not to the API definition" }
+        "version": { "type": "object", "required": true,
+          "properties": {
+            "major": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards incompatible changes to the API definition" },
+            "minor": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on backwards compatible additions/changes to the API definition" },
+            "patch": { "type": "integer", "minimum": 0, "required": true, "description": "Bumped on any changes to the internal implementation but not to the API definition" }
+          }
+        }
       }
     }
   },
index 1bba2ea..872b220 100644 (file)
       "properties": {
         "name": { "type": "string", "required": true },
         "role": { "type": "string", "required": true },
+        "order": { "type": "integer", "required": true },
         "thumbnail": { "type": "string" }
       },
       "additionalProperties": false
                 "endtime", "runtime", "progress", "progresspercentage",
                 "genre", "episodename", "episodenum", "episodepart",
                 "firstaired", "hastimer", "isactive", "parentalrating",
-                "wasactive", "thumbnail" ]
+                "wasactive", "thumbnail", "rating" ]
     }
   },
   "PVR.Details.Broadcast": {
       "firstaired": { "type": "string" },
       "hastimer": { "type": "boolean" },
       "isactive": { "type": "boolean" },
-      "rating": { "type": "integer" },
+      "parentalrating": { "type": "integer" },
       "wasactive": { "type": "boolean" },
-      "thumbnail": { "type": "string" }
+      "thumbnail": { "type": "string" },
+      "rating": { "type": "integer" }
     }
   },
   "Textures.Details.Size": {
index db0e978..ae9831e 100644 (file)
@@ -403,9 +403,9 @@ namespace XBMCAddon
     // ============================================================
     // ============================================================
     ControlImage::ControlImage(long x, long y, long width, long height, 
-                               const char* filename, long aspectRatio,
+                               const char* filename, long aRatio,
                                const char* _colorDiffuse):
-      colorDiffuse(0)
+      aspectRatio(aRatio), colorDiffuse(0)
     {
       dwPosX = x;
       dwPosY = y;
@@ -585,8 +585,7 @@ namespace XBMCAddon
                                            long _textOffsetX, long _textOffsetY, 
                                            long alignment, const char* font, const char* _textColor,
                                            const char* _disabledColor, long angle,
-                                           const char* _shadowColor, const char* _focusedColor,
-                                           const char* TextureRadioFocus, const char* TextureRadioNoFocus) :
+                                           const char* _shadowColor, const char* _focusedColor) :
       strFont("font13"), textColor(0xffffffff), disabledColor(0x60ffffff), 
       textOffsetX(_textOffsetX), textOffsetY(_textOffsetY), align(alignment), iAngle(angle), 
       shadowColor(0), focusedColor(0xffffffff)
index b01ea46..55a4d4b 100644 (file)
@@ -1295,30 +1295,30 @@ namespace XBMCAddon
     /**
      * ControlRadioButton class.
      * 
-     * ControlRadioButton(x, y, width, height, label[, focusOnTexture, noFocusOnTexture,
-     *                   focusOffTexture, noFocusOffTexture, focusTexture, noFocusTexture,
+     * ControlRadioButton(x, y, width, height, label[, focusOnTexture, noFocusOnTexture,\n
+     *                   focusOffTexture, noFocusOffTexture, focusTexture, noFocusTexture,\n
      *                   textOffsetX, textOffsetY, alignment, font, textColor, disabledColor])
      * 
-     * x                 : integer - x coordinate of control.
-     * y                 : integer - y coordinate of control.
-     * width             : integer - width of control.
-     * height            : integer - height of control.
-     * label             : string or unicode - text string.
-     * focusOnTexture    : [opt] string - filename for radio ON focused texture.
-     * noFocusOnTexture  : [opt] string - filename for radio ON not focused texture.
-     * focusOfTexture    : [opt] string - filename for radio OFF focused texture.
-     * noFocusOffTexture : [opt] string - filename for radio OFF not focused texture.
-     * focusTexture      : [opt] string - filename for radio ON texture (deprecated, use focusOnTexture and noFocusOnTexture).
-     * noFocusTexture    : [opt] string - filename for radio OFF texture (deprecated, use focusOffTexture and noFocusOffTexture).
-     * textOffsetX       : [opt] integer - horizontal text offset
-     * textOffsetY       : [opt] integer - vertical text offset
-     * alignment         : [opt] integer - alignment of label - *Note, see xbfont.h
-     * font              : [opt] string - font used for label text. (e.g. 'font13')
-     * textColor         : [opt] hexstring - color of enabled checkmark's label. (e.g. '0xFFFFFFFF')
+     * x                 : integer - x coordinate of control.\n
+     * y                 : integer - y coordinate of control.\n
+     * width             : integer - width of control.\n
+     * height            : integer - height of control.\n
+     * label             : string or unicode - text string.\n
+     * focusOnTexture    : [opt] string - filename for radio ON focused texture.\n
+     * noFocusOnTexture  : [opt] string - filename for radio ON not focused texture.\n
+     * focusOfTexture    : [opt] string - filename for radio OFF focused texture.\n
+     * noFocusOffTexture : [opt] string - filename for radio OFF not focused texture.\n
+     * focusTexture      : [opt] string - filename for radio ON texture (deprecated, use focusOnTexture and noFocusOnTexture).\n
+     * noFocusTexture    : [opt] string - filename for radio OFF texture (deprecated, use focusOffTexture and noFocusOffTexture).\n
+     * textOffsetX       : [opt] integer - horizontal text offset\n
+     * textOffsetY       : [opt] integer - vertical text offset\n
+     * alignment         : [opt] integer - alignment of label - *Note, see xbfont.h\n
+     * font              : [opt] string - font used for label text. (e.g. 'font13')\n
+     * textColor         : [opt] hexstring - color of enabled checkmark's label. (e.g. '0xFFFFFFFF')\n
      * disabledColor     : [opt] hexstring - color of disabled checkmark's label. (e.g. '0xFFFF3300')
      * 
-     * *Note, You can use the above as keywords for arguments and skip certain optional arguments.
-     *        Once you use a keyword, all following arguments require the keyword.
+     * *Note, You can use the above as keywords for arguments and skip certain optional arguments.\n
+     *        Once you use a keyword, all following arguments require the keyword.\n
      *        After you create the control, you need to add it to the window with addControl().
      * 
      * example:
@@ -1336,9 +1336,7 @@ namespace XBMCAddon
                          long _alignment = (XBFONT_LEFT | XBFONT_CENTER_Y), 
                          const char* font = NULL, const char* textColor = NULL,
                          const char* disabledColor = NULL, long angle = 0,
-                         const char* shadowColor = NULL, const char* focusedColor = NULL,
-                         const char* TextureRadioFocus = NULL, 
-                         const char* TextureRadioNoFocus = NULL);
+                         const char* shadowColor = NULL, const char* focusedColor = NULL);
 
       // setSelected() Method
       /**
index 5b0d98e..fd8eaa2 100644 (file)
@@ -359,7 +359,7 @@ namespace XBMCAddon
     {
       XBMC_TRACE;
 
-      if (dlg)
+      if (dlg && open)
       {
         DelayedCallGuard dg;
         dlg->Close();
@@ -377,6 +377,7 @@ namespace XBMCAddon
         throw WindowException("Error: Window is NULL, this is not possible :-)");
 
       dlg = pDialog;
+      open = true;
 
       pDialog->SetHeading(heading);
 
@@ -422,6 +423,7 @@ namespace XBMCAddon
     {
       DelayedCallGuard dcguard(languageHook);
       dlg->Close();
+      open = false;
     }
 
     bool DialogProgress::iscanceled()
index 8cc0e04..af63323 100644 (file)
@@ -291,13 +291,14 @@ namespace XBMCAddon
     class DialogProgress : public AddonClass
     {
       CGUIDialogProgress* dlg;
+      bool                open;
 
     protected:
       virtual void deallocating();
 
     public:
 
-      DialogProgress() : dlg(NULL) {}
+      DialogProgress() : dlg(NULL), open(false) {}
       virtual ~DialogProgress();
 
 
index 021c30b..35d677c 100644 (file)
 
 namespace XBMCAddon
 {
+  // This is a hack in order to handle int's as strings. The correct fix for
+  // this is to get rid of Alternative all togther and make the codegenerator
+  // finally handle overloading correctly.
+  typedef String StringOrInt;
+
   /**
    * This is a bit of a hack for dynamically typed languages. In somce
    * cases python addon api calls handle dictionaries with variable
@@ -34,5 +39,7 @@ namespace XBMCAddon
    * native api handles these calls by converting the string to the
    * appropriate types.
    */
-  typedef std::map<String,String> Dictionary;
+  template<class T> class Dictionary : public std::map<String,T> {};
+
+  typedef Dictionary<StringOrInt> Properties;
 }
index 2222921..84c2b0c 100644 (file)
@@ -129,6 +129,21 @@ namespace XBMCAddon
       }
     }
 
+    void ListItem::setArt(const Properties& dictionary)
+    {
+      if (!item) return;
+      {
+        LOCKGUI;
+        for (Properties::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
+        {
+          CStdString artName = it->first;
+          StringUtils::ToLower(artName);
+          const CStdString artFilename(it->second.c_str());
+          item->SetArt(artName, artFilename);
+        }
+      }
+    }
+
     void ListItem::select(bool selected)
     {
       if (!item) return;
@@ -155,7 +170,7 @@ namespace XBMCAddon
     void ListItem::setProperty(const char * key, const String& value)
     {
       LOCKGUI;
-      CStdString lowerKey = key;
+      String lowerKey = key;
       StringUtils::ToLower(lowerKey);
       if (lowerKey == "startoffset")
       { // special case for start offset - don't actually store in a property,
@@ -186,7 +201,7 @@ namespace XBMCAddon
     String ListItem::getProperty(const char* key)
     {
       LOCKGUI;
-      CStdString lowerKey = key;
+      String lowerKey = key;
       StringUtils::ToLower(lowerKey);
       CStdString value;
       if (lowerKey == "startoffset")
@@ -246,17 +261,19 @@ namespace XBMCAddon
       return item->GetPath();
     }
 
-    void ListItem::setInfo(const char* type, const Dictionary& infoLabels)
+    void ListItem::setInfo(const char* type, const InfoLabelDict& infoLabels) throw (WrongTypeException)
     {
       LOCKGUI;
 
       if (strcmpi(type, "video") == 0)
       {
-        for (Dictionary::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
+        for (InfoLabelDict::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
         {
-          CStdString key = it->first;
+          String key = it->first;
           StringUtils::ToLower(key);
-          const CStdString value(it->second.c_str());
+
+          const InfoLabelValue& alt = it->second;
+          const String value(alt.which() == first ? alt.former() : emptyString);
 
           if (key == "year")
             item->GetVideoInfoTag()->m_iYear = strtol(value.c_str(), NULL, 10);
@@ -284,45 +301,42 @@ namespace XBMCAddon
             if (overlay >= 0 && overlay <= 8)
               item->SetOverlayImage((CGUIListItem::GUIIconOverlay)overlay);
           }
-// TODO: This is a dynamic type for the value where a list is expected as the 
-//   Dictionary value.
-//          else if (key == "cast" || key == "castandrole")
-//          {
-//            if (!PyObject_TypeCheck(value, &PyList_Type)) continue;
-//            item->GetVideoInfoTag()->m_cast.clear();
-//            for (int i = 0; i < PyList_Size(value); i++)
-//            {
-//              PyObject *pTuple = NULL;
-//              pTuple = PyList_GetItem(value, i);
-//              if (pTuple == NULL) continue;
-//              PyObject *pActor = NULL;
-//              PyObject *pRole = NULL;
-//              if (PyObject_TypeCheck(pTuple, &PyTuple_Type))
-//              {
-//                if (!PyArg_ParseTuple(pTuple, (char*)"O|O", &pActor, &pRole)) continue;
-//              }
-//              else
-//                pActor = pTuple;
-//              SActorInfo info;
-//              if (!PyXBMCGetUnicodeString(info.strName, pActor, 1)) continue;
-//              if (pRole != NULL)
-//                PyXBMCGetUnicodeString(info.strRole, pRole, 1);
-//              item->GetVideoInfoTag()->m_cast.push_back(info);
-//            }
-//          }
-//          else if (strcmpi(PyString_AsString(key), "artist") == 0)
-//          {
-//            if (!PyObject_TypeCheck(value, &PyList_Type)) continue;
-//            self->item->GetVideoInfoTag()->m_artist.clear();
-//            for (int i = 0; i < PyList_Size(value); i++)
-//            {
-//              PyObject *pActor = PyList_GetItem(value, i);
-//              if (pActor == NULL) continue;
-//              String actor;
-//              if (!PyXBMCGetUnicodeString(actor, pActor, 1)) continue;
-//              self->item->GetVideoInfoTag()->m_artist.push_back(actor);
-//            }
-//          }
+          else if (key == "cast" || key == "castandrole")
+          {
+            if (alt.which() != second)
+              throw WrongTypeException("When using \"cast\" or \"castandrole\" you need to supply a list of tuples for the value in the dictionary");
+
+            item->GetVideoInfoTag()->m_cast.clear();
+            const std::vector<InfoLabelStringOrTuple>& listValue = alt.later();
+            for (std::vector<InfoLabelStringOrTuple>::const_iterator viter = listValue.begin(); viter != listValue.end(); ++viter)
+            {
+              const InfoLabelStringOrTuple& castEntry = *viter;
+              // castEntry can be a string meaning it's the actor or it can be a tuple meaning it's the 
+              //  actor and the role.
+              const String& actor = castEntry.which() == first ? castEntry.former() : castEntry.later().first();
+              SActorInfo info;
+              info.strName = actor;
+              if (castEntry.which() == second)
+                info.strRole = (const String&)(castEntry.later().second());
+              item->GetVideoInfoTag()->m_cast.push_back(info);
+            }
+          }
+          else if (key == "artist")
+          {
+            if (alt.which() != second)
+              throw WrongTypeException("When using \"artist\" you need to supply a list of strings for the value in the dictionary");
+            
+            item->GetVideoInfoTag()->m_artist.clear();
+
+            const std::vector<InfoLabelStringOrTuple>& listValue = alt.later();
+            for (std::vector<InfoLabelStringOrTuple>::const_iterator viter = listValue.begin(); viter != listValue.end(); ++viter)
+            {
+              
+              const InfoLabelStringOrTuple& castEntry = *viter;
+              const String& actor = castEntry.which() == first ? castEntry.former() : castEntry.later().first();
+              item->GetVideoInfoTag()->m_artist.push_back(actor);
+            }
+          }
           else if (key == "genre")
             item->GetVideoInfoTag()->m_genre = StringUtils::Split(value, g_advancedSettings.m_videoItemSeparator);
           else if (key == "director")
@@ -385,28 +399,29 @@ namespace XBMCAddon
       }
       else if (strcmpi(type, "music") == 0)
       {
-        for (Dictionary::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
+        for (InfoLabelDict::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
         {
-          CStdString key = it->first;
-
+          String key = it->first;
           StringUtils::ToLower(key);
-          const CStdString value(it->second.c_str());
+
+          const InfoLabelValue& alt = it->second;
+          const String value(alt.which() == first ? alt.former() : emptyString);
 
           // TODO: add the rest of the infolabels
           if (key == "tracknumber")
-            item->GetMusicInfoTag()->SetTrackNumber(strtol(value, NULL, 10));
+            item->GetMusicInfoTag()->SetTrackNumber(strtol(value.c_str(), NULL, 10));
           else if (key == "count")
-            item->m_iprogramCount = strtol(value, NULL, 10);
+            item->m_iprogramCount = strtol(value.c_str(), NULL, 10);
           else if (key == "size")
-            item->m_dwSize = (int64_t)strtoll(value, NULL, 10);
+            item->m_dwSize = (int64_t)strtoll(value.c_str(), NULL, 10);
           else if (key == "duration")
-            item->GetMusicInfoTag()->SetDuration(strtol(value, NULL, 10));
+            item->GetMusicInfoTag()->SetDuration(strtol(value.c_str(), NULL, 10));
           else if (key == "year")
-            item->GetMusicInfoTag()->SetYear(strtol(value, NULL, 10));
+            item->GetMusicInfoTag()->SetYear(strtol(value.c_str(), NULL, 10));
           else if (key == "listeners")
-            item->GetMusicInfoTag()->SetListeners(strtol(value, NULL, 10));
+            item->GetMusicInfoTag()->SetListeners(strtol(value.c_str(), NULL, 10));
           else if (key == "playcount")
-            item->GetMusicInfoTag()->SetPlayCount(strtol(value, NULL, 10));
+            item->GetMusicInfoTag()->SetPlayCount(strtol(value.c_str(), NULL, 10));
           else if (key == "genre")
             item->GetMusicInfoTag()->SetGenre(value);
           else if (key == "album")
@@ -416,7 +431,7 @@ namespace XBMCAddon
           else if (key == "title")
             item->GetMusicInfoTag()->SetTitle(value);
           else if (key == "rating")
-            item->GetMusicInfoTag()->SetRating(*value);
+            item->GetMusicInfoTag()->SetRating(value[0]);
           else if (key == "lyrics")
             item->GetMusicInfoTag()->SetLyrics(value);
           else if (key == "lastplayed")
@@ -435,12 +450,13 @@ namespace XBMCAddon
             item->GetMusicInfoTag()->SetComment(value);
           else if (key == "date")
           {
-            if (strlen(value) == 10)
+            if (strlen(value.c_str()) == 10)
             {
               int year = atoi(value.substr(value.size() - 4).c_str());
               int month = atoi(value.substr(3, 4).c_str());
               int day = atoi(value.substr(0, 2).c_str());
-              item->m_dateTime.SetDate(year, month, day);            }
+              item->m_dateTime.SetDate(year, month, day);
+            }
           }
           else
             CLog::Log(LOGERROR,"NEWADDON Unknown Music Info Key \"%s\"", key.c_str());
@@ -452,23 +468,25 @@ namespace XBMCAddon
       }
       else if (strcmpi(type,"pictures") == 0)
       {
-        for (Dictionary::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
+        for (InfoLabelDict::const_iterator it = infoLabels.begin(); it != infoLabels.end(); ++it)
         {
-          CStdString key = it->first;
+          String key = it->first;
           StringUtils::ToLower(key);
-          const CStdString value(it->second.c_str());
+
+          const InfoLabelValue& alt = it->second;
+          const String value(alt.which() == first ? alt.former() : emptyString);
 
           if (key == "count")
-            item->m_iprogramCount = strtol(value, NULL, 10);
+            item->m_iprogramCount = strtol(value.c_str(), NULL, 10);
           else if (key == "size")
-            item->m_dwSize = (int64_t)strtoll(value, NULL, 10);
+            item->m_dwSize = (int64_t)strtoll(value.c_str(), NULL, 10);
           else if (key == "title")
             item->m_strTitle = value;
           else if (key == "picturepath")
             item->SetPath(value);
           else if (key == "date")
           {
-            if (strlen(value) == 10)
+            if (strlen(value.c_str()) == 10)
             {
               int year = atoi(value.substr(value.size() - 4).c_str());
               int month = atoi(value.substr(3, 4).c_str());
@@ -478,37 +496,37 @@ namespace XBMCAddon
           }
           else
           {
-            const CStdString& exifkey = key;
+            const String& exifkey = key;
             if (!StringUtils::StartsWithNoCase(exifkey, "exif:") || exifkey.length() < 6) continue;
-            int info = CPictureInfoTag::TranslateString(exifkey.substr(5));
+            int info = CPictureInfoTag::TranslateString(StringUtils::Mid(exifkey,5));
             item->GetPictureInfoTag()->SetInfo(info, value);
           }
         }
       }
     } // end ListItem::setInfo
 
-    void ListItem::addStreamInfo(const char* cType, const Dictionary& dictionary)
+    void ListItem::addStreamInfo(const char* cType, const Properties& dictionary)
     {
       LOCKGUI;
 
       if (strcmpi(cType, "video") == 0)
       {
         CStreamDetailVideo* video = new CStreamDetailVideo;
-        for (Dictionary::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
+        for (Properties::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
         {
           const String& key = it->first;
-          const CStdString value(it->second.c_str());
+          const String value(it->second.c_str());
 
           if (key == "codec")
             video->m_strCodec = value;
           else if (key == "aspect")
-            video->m_fAspect = (float)atof(value);
+            video->m_fAspect = (float)atof(value.c_str());
           else if (key == "width")
-            video->m_iWidth = strtol(value, NULL, 10);
+            video->m_iWidth = strtol(value.c_str(), NULL, 10);
           else if (key == "height")
-            video->m_iHeight = strtol(value, NULL, 10);
+            video->m_iHeight = strtol(value.c_str(), NULL, 10);
           else if (key == "duration")
-            video->m_iDuration = strtol(value, NULL, 10);
+            video->m_iDuration = strtol(value.c_str(), NULL, 10);
           else if (key == "stereomode")
             video->m_strStereoMode = value;
         }
@@ -517,7 +535,7 @@ namespace XBMCAddon
       else if (strcmpi(cType, "audio") == 0)
       {
         CStreamDetailAudio* audio = new CStreamDetailAudio;
-        for (Dictionary::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
+        for (Properties::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
         {
           const String& key = it->first;
           const String& value = it->second;
@@ -534,7 +552,7 @@ namespace XBMCAddon
       else if (strcmpi(cType, "subtitle") == 0)
       {
         CStreamDetailSubtitle* subtitle = new CStreamDetailSubtitle;
-        for (Dictionary::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
+        for (Properties::const_iterator it = dictionary.begin(); it != dictionary.end(); ++it)
         {
           const String& key = it->first;
           const String& value = it->second;
@@ -559,7 +577,7 @@ namespace XBMCAddon
         std::string uAction = tuple.second();
 
         LOCKGUI;
-        CStdString property;
+        String property;
         property = StringUtils::Format("contextmenulabel(%i)", itemCount);
         item->SetProperty(property, uText);
 
index f88bbdf..cc2ec4c 100644 (file)
@@ -26,7 +26,9 @@
 #include "cores/playercorefactory/PlayerCoreFactory.h"
 
 #include "AddonClass.h"
+#include "Tuple.h"
 #include "Dictionary.h"
+#include "Alternative.h"
 #include "CallbackHandler.h"
 #include "ListItem.h"
 #include "music/tags/MusicInfoTag.h"
@@ -42,6 +44,17 @@ namespace XBMCAddon
   {
     XBMCCOMMONS_STANDARD_EXCEPTION(ListItemException);
 
+    // This is a type that represents either a String or a String Tuple
+    typedef Alternative<StringOrInt,Tuple<String, StringOrInt> > InfoLabelStringOrTuple;
+
+    // This type is either a String or a list of InfoLabelStringOrTuple types
+    typedef Alternative<StringOrInt, std::vector<InfoLabelStringOrTuple> > InfoLabelValue;
+
+    // The type contains the dictionary values for the ListItem::setInfo call. 
+    // The values in the dictionary can be either a String, or a list of items.
+    // If it's a list of items then the items can be either a String or a Tuple.
+    typedef Dictionary<InfoLabelValue> InfoLabelDict;
+
     class ListItem : public AddonClass
     {
     public:
@@ -125,6 +138,25 @@ namespace XBMCAddon
       void setThumbnailImage(const String& thumbFilename);
 
       /**
+       * setArt(values) -- Sets the listitem's art
+       * \n
+       * values              : dictionary - pairs of { label: value }.\n
+       *
+       * - Some default art values (any string possible):
+       *     - thumb         : string - image filename
+       *     - poster        : string - image filename
+       *     - banner        : string - image filename
+       *     - fanart        : string - image filename
+       *     - clearart      : string - image filename
+       *     - clearlogo     : string - image filename
+       *     - landscape     : string - image filename
+       *
+       * example:
+       *   - self.list.getSelectedItem().setArt({ 'poster': 'poster.png', 'banner' : 'banner.png' })
+       */
+      void setArt(const Properties& dictionary);
+
+      /**
        * select(selected) -- Sets the listitem's selected status.\n
        * \n
        * selected        : bool - True=selected/False=not selected\n
@@ -215,7 +247,7 @@ namespace XBMCAddon
        * example:\n
        *   - self.list.getSelectedItem().setInfo('video', { 'Genre': 'Comedy' })n\n
        */
-      void setInfo(const char* type, const Dictionary& infoLabels);
+      void setInfo(const char* type, const InfoLabelDict& infoLabels) throw (WrongTypeException);
 
       /**
        * addStreamInfo(type, values) -- Add a stream with details.\n
@@ -239,7 +271,7 @@ namespace XBMCAddon
        * example:
        *   - self.list.getSelectedItem().addStreamInfo('video', { 'Codec': 'h264', 'Width' : 1280 })
        */
-      void addStreamInfo(const char* cType, const Dictionary& dictionary);
+      void addStreamInfo(const char* cType, const Properties& dictionary);
 
       /**
        * addContextMenuItems([(label, action,)*], replaceItems) -- Adds item(s) to the context menu for media lists.\n
index 9044a50..9192808 100644 (file)
@@ -83,7 +83,7 @@ namespace XBMCAddon
 
     CGUIWindow* ProxyExistingWindowInterceptor::get() { XBMC_TRACE; return cguiwindow; }
 
-    Window::Window() throw (WindowException): 
+    Window::Window(bool discrim) throw (WindowException): 
       isDisposed(false), window(NULL), iWindowId(-1),
       iOldWindowId(0), iCurrentControlId(3000), bModal(false), m_actionEvent(true),
       canPulse(true), existingWindow(false), destroyAfterDeInit(false)
@@ -683,7 +683,10 @@ namespace XBMCAddon
         PulseActionEvent();
 
       std::vector<CStdString> params;
-      CApplicationMessenger::Get().ActivateWindow(iOldWindowId, params, false);
+      {
+        DelayedCallGuard dcguard(languageHook);
+        CApplicationMessenger::Get().ActivateWindow(iOldWindowId, params, false);
+      }
 
       iOldWindowId = 0;
     }
index c508e4a..9816213 100644 (file)
@@ -134,7 +134,10 @@ namespace XBMCAddon
       bool existingWindow;
       bool destroyAfterDeInit;
 
-      Window() throw (WindowException);
+      // This only takes a boolean to allow subclasses to explicitly use it. A default
+      //  constructor can be used as a concrete class and we need to tell the difference.
+      //  subclasses should use this constructor and not the other.
+      Window(bool discrim) throw (WindowException);
 
       virtual void deallocating();
 
@@ -169,7 +172,7 @@ namespace XBMCAddon
 #endif
 
     public:
-      Window(int existingWindowId) throw (WindowException);
+      Window(int existingWindowId = -1) throw (WindowException);
 
       virtual ~Window();
 
index c312cb3..6606c52 100644 (file)
@@ -28,7 +28,7 @@ namespace XBMCAddon
   namespace xbmcgui
   {
     WindowDialog::WindowDialog() throw(WindowException) :
-      WindowDialogMixin(this)
+      Window(true), WindowDialogMixin(this)
     {
       CSingleLock lock(g_graphicsContext);
       setWindow(new Interceptor<CGUIWindow>("CGUIWindow",this,getNextAvailalbeWindowId()));
index b52a972..da8dceb 100644 (file)
@@ -97,7 +97,8 @@ namespace XBMCAddon
     WindowXML::WindowXML(const String& xmlFilename,
                          const String& scriptPath,
                          const String& defaultSkin,
-                         const String& defaultRes) throw(WindowException)
+                         const String& defaultRes) throw(WindowException) :
+      Window(true)
     {
       XBMC_TRACE;
       RESOLUTION_INFO res;
index 5550113..c84447a 100644 (file)
@@ -56,7 +56,6 @@ Helper.setup(this,classes,
      * This is meant to contain mini-templates for converting the return type
      * of the native call to be returned to the python caller.
      */
-//      'p.void' : '${result} = Py_BuildValue((char*)"s#",${api},readBytes);',
     [ 'void' : 'Py_INCREF(Py_None);\n    ${result} = Py_None;',
       'long': '${result} = PyInt_FromLong(${api});',
       'unsigned long': '${result} = PyInt_FromLong(${api});',
@@ -65,7 +64,7 @@ Helper.setup(this,classes,
       'int': '${result} = Py_BuildValue((char*)"i", ${api});',
       'double': '${result} = PyFloat_FromDouble(${api});',
       'float': '${result} = Py_BuildValue((char*)"f", ${api});',
-      'String' : new File('typemaps/python.string.outtm'),
+      'std::string' : new File('typemaps/python.string.outtm'),
       'p.q(const).char' : '${result} = PyString_FromString(${api});',
       (Pattern.compile('''(p.){0,1}XbmcCommons::Buffer''')) : new File('typemaps/python.buffer.outtm'),
       (Pattern.compile('''boost::shared_ptr<\\(.*\\)>''')) : new File('typemaps/python.boost_shared_ptr.outtm'),
@@ -82,16 +81,13 @@ Helper.setup(this,classes,
      * call.
      */
     [ 
-      'String' : 'if (${slarg}) PyXBMCGetUnicodeString(${api},${slarg},false,"${api}","${method.@name}");',
+      'std::string' : 'if (${slarg}) PyXBMCGetUnicodeString(${api},${slarg},false,"${api}","${method.@name}");',
       (Pattern.compile('''(p.){0,1}std::vector<\\(.*\\)>''')) : new File('typemaps/python.vector.intm'),
       (Pattern.compile('''(p.){0,1}Tuple(3){0,1}<\\(.*\\)>''')) : new File('typemaps/python.Tuple.intm'),
       (Pattern.compile('''(p.){0,1}Alternative<\\(.*\\)>''')) : new File('typemaps/python.Alternative.intm'),
-      // I shouldn't need both of these but my parser doesn't resolve namespaces within
-      //  parameter declarations. TODO: Maybe I should fix this.
-      'r.q(const).Dictionary' : new File('typemaps/python.dict.intm'),
-      'r.q(const).XBMCAddon::Dictionary' : new File('typemaps/python.dict.intm'),
       (Pattern.compile('''(r.){0,1}XbmcCommons::Buffer''')) : new File('typemaps/python.buffer.intm'),
       (Pattern.compile('''(p.){0,1}std::map<\\(.*\\)>''')) : new File('typemaps/python.map.intm'),
+      (Pattern.compile('''(r.){0,1}XBMCAddon::Dictionary<\\(.*\\)>''')) : new File('typemaps/python.dict.intm'),
       'bool' : '${api} = (PyInt_AsLong(${slarg}) == 0L ? false : true);',
       'long' : '${api} = PyInt_AsLong(${slarg});',
       'unsigned long' : '${api} = PyLong_AsUnsignedLong(${slarg});',
@@ -99,7 +95,8 @@ Helper.setup(this,classes,
       'unsigned long long' : '${api} = PyLong_AsUnsignedLongLong(${slarg});',
       'int' : '${api} = (int)PyInt_AsLong(${slarg});',
       'double' : '${api} = PyFloat_AsDouble(${slarg});',
-      'float' : '${api} = (float)PyFloat_AsDouble(${slarg});'
+      'float' : '${api} = (float)PyFloat_AsDouble(${slarg});',
+      'XBMCAddon::StringOrInt' : 'if (${slarg}) PyXBMCGetUnicodeString(${api},${slarg},PyInt_Check(${slarg}) || PyLong_Check(${slarg}) || PyFloat_Check(${slarg}),"${api}","${method.@name}");'
     ], '${api} = (${swigTypeParser.SwigType_str(ltype)})retrieveApiInstance(${slarg},"${ltype}","${helper.findNamespace(method)}","${helper.callingName(method)}");')
 // ---------------------------------------------------------
 
@@ -827,7 +824,7 @@ namespace PythonBindings
    // constants
    PyModule_AddStringConstant(module, (char*)"__author__", (char*)"Team XBMC <http://xbmc.org>");
    PyModule_AddStringConstant(module, (char*)"__date__", (char*)"${new Date().toString()}");
-   PyModule_AddStringConstant(module, (char*)"__version__", (char*)"2.13.0");
+   PyModule_AddStringConstant(module, (char*)"__version__", (char*)"2.14.0");
    PyModule_AddStringConstant(module, (char*)"__credits__", (char*)"Team XBMC");
    PyModule_AddStringConstant(module, (char*)"__platform__", (char*)"ALL");
 
index 76ee9b5..8808f1e 100644 (file)
@@ -21,6 +21,7 @@
 #include "LanguageHook.h"
 #include "swig.h"
 #include "utils/StringUtils.h"
+#include "interfaces/legacy/AddonString.h"
 
 #include <string>
 
@@ -46,6 +47,14 @@ namespace PythonBindings
   void PyXBMCGetUnicodeString(std::string& buf, PyObject* pObject, bool coerceToString,
                               const char* argumentName, const char* methodname) throw (XBMCAddon::WrongTypeException)
   {
+    // It's okay for a string to be "None". In this case the buf returned
+    // will be the emptyString.
+    if (pObject == Py_None)
+    {
+      buf = XBMCAddon::emptyString;
+      return;
+    }
+
     // TODO: UTF-8: Does python use UTF-16?
     //              Do we need to convert from the string charset to UTF-8
     //              for non-unicode data?
index e8bd15d..d2bfdd2 100644 (file)
 
 namespace PythonBindings
 {
+  /**
+   * This call will convert the python object passed to a string. The object
+   * passed must be a python str or unicode object unless coerceToString is
+   * true. If coerceToString is true then the type must be castable to a string
+   * using the python call str(pObject).
+   *
+   * This method will handle a 'None' that's passed in. If 'None' is passed then
+   * the resulting buf will contain the value of XBMCAddon::emptyString (which 
+   * is simply a std::string instantiated with the default constructor.
+   */
   void PyXBMCGetUnicodeString(std::string& buf, PyObject* pObject, bool coerceToString = false,
                               const char* pos = "unknown", 
                               const char* methodname = "unknown") throw (XBMCAddon::WrongTypeException);
index 0a3c34a..1ccffad 100644 (file)
  */
 %>
 <%
-    type = swigTypeParser.SwigType_resolve_all_typedefs(type)
-    matcher = type =~ /Alternative<\((.*)\)>/
-    vectype = '(' + matcher[0][1] + ')'
-    boolean ispointer = swigTypeParser.SwigType_ispointer(type)
+    boolean ispointer = swigTypeParser.SwigType_ispointer(ltype)
     String accessor = ispointer ? '->' : '.'
     int seq = sequence.increment()
     altAccess = [ 'former', 'later' ]
     altSwitch = [ 'first', 'second' ]
 
-    List types = swigTypeParser.SwigType_parmlist(vectype)
+    List types = swigTypeParser.SwigType_templateparmlist(ltype)
 %>
     {
       // we need to check the parameter type and see if it matches
       {
         ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(types[0]))} entry0_${seq};
         ${helper.getInConversion(types[0], 'entry0' + '_' + seq, 'pyentry' + '_' + seq, method,
-                                 [ 'type' : vectype,
-                                   'ltype' : swigTypeParser.SwigType_ltype(types[0]),
-                                   'sequence' : sequence
-                                   ])}
+                                 [ 'sequence' : sequence ])}
         ${api}${accessor}${altAccess[0]}() = entry0_${seq};
       }
       catch (XBMCAddon::WrongTypeException wte)
         {
           ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(types[1]))} entry1_${seq};
           ${helper.getInConversion(types[1], 'entry1' + '_' + seq, 'pyentry' + '_' + seq, method,
-                                   [ 'type' : vectype,
-                                     'ltype' : swigTypeParser.SwigType_ltype(types[1]),
-                                     'sequence' : sequence
-                                     ])}
+                                   [ 'sequence' : sequence ])}
           ${api}${accessor}${altAccess[1]}() = entry1_${seq};
         }
         catch (XBMCAddon::WrongTypeException wte2)
index 8c7b80b..20cef34 100644 (file)
@@ -20,8 +20,7 @@
  */
 %>
 <%
-    matcher = type =~ /Alternative<\((.*)\)>/
-    vectype = '(' + matcher[0][1] + ')'
+    List types = swigTypeParser.SwigType_templateparmlist(type)
     boolean ispointer = swigTypeParser.SwigType_ispointer(type)
     int seq = sequence.increment()
     String accessor = ispointer ? '->' : '.'
@@ -32,7 +31,7 @@
 
     if (<%if (ispointer) { %>${api} != NULL && <%}%>pos != XBMCAddon::none)
     { <%
-      swigTypeParser.SwigType_parmlist(vectype).eachWithIndex { curType, entryIndex -> 
+      types.eachWithIndex { curType, entryIndex -> 
 %>
       if (pos == XBMCAddon::${altSwitch[entryIndex]})
       {
index 01e1fb7..d164893 100644 (file)
@@ -20,8 +20,7 @@
  */
 %>
 <%
-matcher = ltype =~ /Tuple<\((.*)\)>/
-    vectype = '(' + matcher[0][1] + ')'
+    List types = swigTypeParser.SwigType_templateparmlist(ltype)
     boolean ispointer = swigTypeParser.SwigType_ispointer(type)
     String accessor = ispointer ? '->' : '.'
     int seq = sequence.increment()
@@ -30,24 +29,17 @@ matcher = ltype =~ /Tuple<\((.*)\)>/
     {
       bool isTuple = PyObject_TypeCheck(${slarg},&PyTuple_Type);
       if (!isTuple && !PyObject_TypeCheck(${slarg},&PyList_Type))
-      {
-        PyErr_SetString(PyExc_TypeError, "the parameter \"${api}\" must be either a Tuple or a List.");
-        return NULL; // short circuit the rest of this python method
-      }
+        throw WrongTypeException("The parameter \"${api}\" must be either a Tuple or a List.");
       int vecSize = (isTuple ? PyTuple_Size(${slarg}) : PyList_Size(${slarg}));
 <%
-      swigTypeParser.SwigType_parmlist(vectype).eachWithIndex { curType, entryIndex -> 
+      types.eachWithIndex { curType, entryIndex -> 
 %>
       if (vecSize > ${entryIndex})
       {
         PyObject *pyentry${entryIndex}_${seq} = NULL;
         pyentry${entryIndex}_${seq} = (isTuple ? PyTuple_GetItem(${slarg}, ${entryIndex}) : PyList_GetItem(${slarg}, ${entryIndex}));
         ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(curType))} entry${entryIndex}_${seq};
-        ${helper.getInConversion(curType, 'entry' + entryIndex + '_' + seq, 'pyentry' + entryIndex + '_' + seq, method,
-                                 [ 'type' : vectype,
-                                   'ltype' : swigTypeParser.SwigType_ltype(curType),
-                                   'sequence' : sequence
-                                   ])}
+        ${helper.getInConversion(curType, 'entry' + entryIndex + '_' + seq, 'pyentry' + entryIndex + '_' + seq, method,[ 'sequence' : sequence ])}
         ${api}${accessor}${tupleAccess[entryIndex]}() = entry${entryIndex}_${seq};
       }
 <%
index 2e5f41a..1355059 100644 (file)
@@ -20,8 +20,7 @@
  */
 %>
 <%
-    matcher = type =~ /Tuple<\((.*)\)>/
-    vectype = '(' + matcher[0][1] + ')'
+    List types = swigTypeParser.SwigType_templateparmlist(type)
     boolean ispointer = swigTypeParser.SwigType_ispointer(type)
     int seq = sequence.increment()
     String accessor = ispointer ? '->' : '.'
@@ -38,7 +37,7 @@
 <%  }  // this ends the if (ispointer)
 %>    {
       PyObject* pyentry${seq}; <%
-      swigTypeParser.SwigType_parmlist(vectype).eachWithIndex { curType, entryIndex -> 
+      types.eachWithIndex { curType, entryIndex -> 
 %>
 
       if (vecSize > ${entryIndex})
index f625e16..0e01849 100644 (file)
@@ -20,8 +20,7 @@
  */
 %>
 <%
-    matcher = type =~ /shared_ptr<\((.*)\)>/
-    itype = matcher[0][1]
+    itype = swigTypeParser.SwigType_templateparmlist(type)[0]
     pointertype = swigTypeParser.SwigType_makepointer(itype)
     int seq = sequence.increment()
 %>
index 99716c6..e9a6560 100644 (file)
  *
  */
 %>
+<%
+    List templateArgs = swigTypeParser.SwigType_templateparmlist(ltype)
+    valtype = templateArgs[0]
+%>
     {
       PyObject *pykey, *pyvalue;
       Py_ssize_t pos = 0;
       while(PyDict_Next(${slarg}, &pos, &pykey, &pyvalue))
       {
-        CStdString key;
-        CStdString value;
+        std::string key;
         PyXBMCGetUnicodeString(key,pykey,false,"${api}","${method.@name}");
-        PyXBMCGetUnicodeString(value,pyvalue,true,"${api}","${method.@name}");
+        ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(valtype))} value;
+        ${helper.getInConversion(valtype, 'value', 'pyvalue' ,method)}
         ${api}[key] = value;
       }
     }
index 1a1ad80..3e13677 100644 (file)
@@ -20,9 +20,9 @@
  */
 %>
 <%
-    matcher = ltype =~ /std::map<\((.*),(.*)\)>/
-    keytype = matcher[0][1]
-    valtype = matcher[0][2]
+    List templateArgs = swigTypeParser.SwigType_templateparmlist(ltype)
+    keytype = templateArgs[0]
+    valtype = templateArgs[1]
 %>
 
     {
       {
         ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(keytype))} key;
         ${swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(valtype))} value;
-        ${helper.getInConversion(keytype, 'key', 'pykey', method,
-                                 [ 'type' : swigTypeParser.SwigType_str(keytype),
-                                   'ltype' : swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(keytype))
-                                   ])}
-        ${helper.getInConversion(valtype, 'value', 'pyvalue' ,method,
-                                 [ 'type' : swigTypeParser.SwigType_str(valtype),
-                                   'ltype' : swigTypeParser.SwigType_str(swigTypeParser.SwigType_ltype(valtype))
-                                   ])}
+        ${helper.getInConversion(keytype, 'key', 'pykey', method)}
+        ${helper.getInConversion(valtype, 'value', 'pyvalue' ,method)}
         ${api}[key] = value;
       }
     }
index 4086e52..4181b7b 100644 (file)
@@ -20,8 +20,8 @@
  */
 %>
 <%
-    matcher = ltype =~ /std::vector<\((.*)\)>/
-    vectype = matcher[0][1]
+    List templateArgs = swigTypeParser.SwigType_templateparmlist(ltype)
+    vectype = templateArgs[0]
     boolean ispointer = swigTypeParser.SwigType_ispointer(type)
     String accessor = ispointer ? '->' : '.'
     int seq = sequence.increment()
     {
       bool isTuple = PyObject_TypeCheck(${slarg},&PyTuple_Type);
       if (!isTuple && !PyObject_TypeCheck(${slarg},&PyList_Type))
-      {
-        PyErr_SetString(PyExc_TypeError, "the parameter \"${api}\" must be either a Tuple or a List.");
-        return NULL; // short circuit the rest of this python method
-      }
+        throw WrongTypeException("The parameter \"${api}\" must be either a Tuple or a List.");
 
       <%  if (ispointer) print("${api} = new std::vector<${swigTypeParser.SwigType_str(vectype)}>();") %>
       PyObject *pyentry${seq} = NULL;
index d147b61..a841283 100644 (file)
@@ -20,8 +20,8 @@
  */
 %>
 <%
-    matcher = type =~ /std::vector<\((.*)\)>/
-    vectype = matcher[0][1]
+    List templateArgs = swigTypeParser.SwigType_templateparmlist(type)
+    vectype = templateArgs[0]
     boolean ispointer = swigTypeParser.SwigType_ispointer(type)
     String accessor = ispointer ? '->' : '.'
     seq = sequence.increment()
index 7a0e27f..9628e2e 100644 (file)
@@ -44,6 +44,7 @@ using namespace xbmc;
 
 %feature("python:coerceToUnicode") XBMCAddon::xbmc::getLocalizedString "true"
 
+%include "interfaces/legacy/AddonString.h"
 %include "interfaces/legacy/ModuleXbmc.h"
 
 %feature("director") Player;
index 23135b0..f42169a 100644 (file)
@@ -37,6 +37,7 @@ using namespace xbmcaddon;
 %feature("knownbasetypes") XBMCAddon::xbmcaddon "AddonClass"
 
 %include "interfaces/legacy/swighelper.h"
+%include "interfaces/legacy/AddonString.h"
 
 %feature("python:coerceToUnicode") XBMCAddon::xbmcaddon::Addon::getLocalizedString "true"
 %include "interfaces/legacy/Addon.h"
index b8e8fbc..1a6f91d 100644 (file)
@@ -44,11 +44,14 @@ using namespace xbmcgui;
 %feature("knownbasetypes") XBMCAddon::xbmcgui "AddonClass,AddonCallback"
 
 %include "interfaces/legacy/swighelper.h"
+%include "interfaces/legacy/AddonString.h"
 
 %include "interfaces/legacy/ModuleXbmcgui.h"
 
 %include "interfaces/legacy/Exception.h"
 
+%include "interfaces/legacy/Dictionary.h"
+
 %include "interfaces/legacy/ListItem.h"
 
 %feature("python:coerceToUnicode") XBMCAddon::xbmcgui::ControlButton::getLabel "true"
index 37a0d86..32a144d 100644 (file)
@@ -35,5 +35,6 @@ using namespace xbmcplugin;
 %feature("knownapitypes") XBMCAddon::xbmcplugin "XBMCAddon::xbmcgui::ListItem"
 
 %include "interfaces/legacy/swighelper.h"
+%include "interfaces/legacy/AddonString.h"
 %include "interfaces/legacy/ModuleXbmcplugin.h"
 
index ac09158..78a010c 100644 (file)
@@ -36,7 +36,7 @@ using namespace xbmcvfs;
 %}
 
 %include "interfaces/legacy/swighelper.h"
-
+%include "interfaces/legacy/AddonString.h"
 %include "interfaces/legacy/File.h"
 
 %rename ("st_atime") XBMCAddon::xbmcvfs::Stat::atime;
index aed9c07..cfb699c 100644 (file)
@@ -175,7 +175,7 @@ void CHALManager::Initialize()
 
   GenerateGDL();
 
-  CLog::Log(LOGINFO, "HAL: Sucessfully initialized");
+  CLog::Log(LOGINFO, "HAL: Successfully initialized");
   m_Notifications = true;
 }
 
index ef48935..49dcbb8 100644 (file)
@@ -42,6 +42,10 @@ CRBP::~CRBP()
 
 bool CRBP::Initialize()
 {
+  CSingleLock lock (m_critSection);
+  if (m_initialized)
+    return true;
+
   m_initialized = m_DllBcmHost->Load();
   if(!m_initialized)
     return false;
@@ -55,11 +59,19 @@ bool CRBP::Initialize()
   char response[80] = "";
   m_arm_mem = 0;
   m_gpu_mem = 0;
+  m_codec_mpg2_enabled = false;
+  m_codec_wvc1_enabled = false;
+
   if (vc_gencmd(response, sizeof response, "get_mem arm") == 0)
     vc_gencmd_number_property(response, "arm", &m_arm_mem);
   if (vc_gencmd(response, sizeof response, "get_mem gpu") == 0)
     vc_gencmd_number_property(response, "gpu", &m_gpu_mem);
 
+  if (vc_gencmd(response, sizeof response, "codec_enabled MPG2") == 0)
+    m_codec_mpg2_enabled = strcmp("MPG2=enabled", response) == 0;
+  if (vc_gencmd(response, sizeof response, "codec_enabled WVC1") == 0)
+    m_codec_wvc1_enabled = strcmp("WVC1=enabled", response) == 0;
+
   g_OMXImage.Initialize();
   m_omx_image_init = true;
   return true;
@@ -71,7 +83,7 @@ void CRBP::LogFirmwareVerison()
   m_DllBcmHost->vc_gencmd(response, sizeof response, "version");
   response[sizeof(response) - 1] = '\0';
   CLog::Log(LOGNOTICE, "Raspberry PI firmware version: %s", response);
-  CLog::Log(LOGNOTICE, "ARM mem: %dMB GPU mem: %dMB", m_arm_mem, m_gpu_mem);
+  CLog::Log(LOGNOTICE, "ARM mem: %dMB GPU mem: %dMB MPG2:%d WVC1:%d", m_arm_mem, m_gpu_mem, m_codec_mpg2_enabled, m_codec_wvc1_enabled);
 }
 
 void CRBP::GetDisplaySize(int &width, int &height)
index f742934..2aae579 100644 (file)
@@ -37,6 +37,7 @@
 #if defined(TARGET_RASPBERRY_PI)
 #include "DllBCM.h"
 #include "OMXCore.h"
+#include "threads/CriticalSection.h"
 
 class CRBP
 {
@@ -49,6 +50,8 @@ public:
   void Deinitialize();
   int GetArmMem() { return m_arm_mem; }
   int GetGpuMem() { return m_gpu_mem; }
+  bool GetCodecMpg2() { return m_codec_mpg2_enabled; }
+  bool GetCodecWvc1() { return m_codec_wvc1_enabled; }
   void GetDisplaySize(int &width, int &height);
   // stride can be null for packed output
   unsigned char *CaptureDisplay(int width, int height, int *stride, bool swap_red_blue, bool video_only = true);
@@ -61,8 +64,11 @@ private:
   bool       m_omx_image_init;
   int        m_arm_mem;
   int        m_gpu_mem;
+  bool       m_codec_mpg2_enabled;
+  bool       m_codec_wvc1_enabled;
   COMXCore   *m_OMX;
   class DllLibOMXCore;
+  CCriticalSection m_critSection;
 };
 
 extern CRBP g_RBP;
index b546780..43ebd61 100644 (file)
@@ -100,10 +100,15 @@ int CStaticListProvider::GetDefaultItem() const
 {
   if (m_defaultItem >= 0)
   {
+    unsigned int offset = 0;
     for (vector<CGUIStaticItemPtr>::const_iterator i = m_items.begin(); i != m_items.end(); ++i)
     {
-      if ((*i)->m_iprogramCount == m_defaultItem && (*i)->IsVisible())
-        return i - m_items.begin();
+      if ((*i)->IsVisible())
+      {
+        if ((*i)->m_iprogramCount == m_defaultItem && (*i)->IsVisible())
+          return offset;
+        offset++;
+      }
     }
   }
   return -1;
index 3580901..66d1b25 100644 (file)
@@ -53,6 +53,60 @@ CAlbum::CAlbum(const CFileItem& item)
   iTimesPlayed = 0;
 }
 
+void CAlbum::MergeScrapedAlbum(const CAlbum& source, bool override /* = true */)
+{
+  /*
+   We don't merge musicbrainz album ID so that a refresh of album information
+   allows a lookup based on name rather than directly (re)using musicbrainz.
+   In future, we may wish to be able to override lookup by musicbrainz so
+   this might be dropped.
+   */
+//  strMusicBrainzAlbumID = source.strMusicBrainzAlbumID;
+  if ((override && !source.genre.empty()) || genre.empty())
+    genre = source.genre;
+  if ((override && !source.strAlbum.empty()) || strAlbum.empty())
+    strAlbum = source.strAlbum;
+  if ((override && source.iYear > 0) || iYear == 0)
+    iYear = source.iYear;
+  if (override)
+    bCompilation = source.bCompilation;
+  //  iTimesPlayed = source.iTimesPlayed; // times played is derived from songs
+  for (std::map<std::string, std::string>::const_iterator i = source.art.begin(); i != source.art.end(); ++i)
+  {
+    if (override || art.find(i->first) == art.end())
+      art[i->first] = i->second;
+  }
+  strLabel = source.strLabel;
+  thumbURL = source.thumbURL;
+  moods = source.moods;
+  styles = source.styles;
+  themes = source.themes;
+  strReview = source.strReview;
+  strType = source.strType;
+//  strPath = source.strPath; // don't merge the path
+  m_strDateOfRelease = source.m_strDateOfRelease;
+  iRating = source.iRating;
+  if (override)
+  {
+    artistCredits = source.artistCredits;
+    artist = source.artist; // artist information is read-only from the database. artistCredits is what counts on scan
+  }
+  else if (source.artistCredits.size() > artistCredits.size())
+    artistCredits.insert(artistCredits.end(), source.artistCredits.begin()+artistCredits.size(), source.artistCredits.end());
+  if (!strMusicBrainzAlbumID.empty())
+  {
+    /* update local songs with MB information */
+    for (VECSONGS::iterator song = songs.begin(); song != songs.end(); ++song)
+    {
+      if (!song->strMusicBrainzTrackID.empty())
+        for (VECSONGS::const_iterator sourceSong = source.infoSongs.begin(); sourceSong != source.infoSongs.end(); ++sourceSong)
+          if (sourceSong->strMusicBrainzTrackID == song->strMusicBrainzTrackID)
+            song->MergeScrapedSong(*sourceSong, override);
+    }
+  }
+  infoSongs = source.infoSongs;
+}
+
 CStdString CAlbum::GetArtistString() const
 {
   return StringUtils::Join(artist, g_advancedSettings.m_musicItemSeparator);
@@ -173,7 +227,7 @@ bool CAlbum::Load(const TiXmlElement *album, bool append, bool prioritise)
 
   const TiXmlElement* node = album->FirstChildElement("track");
   if (node)
-    songs.clear();  // this means that the tracks can't be spread over separate pages
+    infoSongs.clear();  // this means that the tracks can't be spread over separate pages
                     // but this is probably a reasonable limitation
   bool bIncrement = false;
   while (node)
@@ -198,7 +252,7 @@ bool CAlbum::Load(const TiXmlElement *album, bool append, bool prioritise)
           song.artistCredits.push_back(artistCredit);
         }
         
-        songArtistCreditsNode = songArtistCreditsNode->NextSiblingElement("albumArtistCredits");
+        songArtistCreditsNode = songArtistCreditsNode->NextSiblingElement("songArtistCredits");
       }
 
       XMLUtils::GetString(node,   "musicBrainzTrackID",   song.strMusicBrainzTrackID);
@@ -215,7 +269,7 @@ bool CAlbum::Load(const TiXmlElement *album, bool append, bool prioritise)
       if (bIncrement)
         song.iTrack = song.iTrack + 1;
 
-      songs.push_back(song);
+      infoSongs.push_back(song);
     }
     node = node->NextSiblingElement("track");
   }
@@ -274,7 +328,7 @@ bool CAlbum::Save(TiXmlNode *node, const CStdString &tag, const CStdString& strP
     XMLUtils::SetString(albumArtistCreditsNode,            "featuring", artistCredit->GetArtist());
   }
 
-  for( VECSONGS::const_iterator song = songs.begin(); song != songs.end(); ++song)
+  for( VECSONGS::const_iterator song = infoSongs.begin(); song != infoSongs.end(); ++song)
   {
     // add a <song> tag
     TiXmlElement cast("track");
index 2cd331e..116aa08 100644 (file)
@@ -38,6 +38,7 @@ public:
   CAlbum(const CFileItem& item);
   CAlbum() { idAlbum = 0; iRating = 0; iYear = 0; iTimesPlayed = 0; };
   bool operator<(const CAlbum &a) const;
+  void MergeScrapedAlbum(const CAlbum& album, bool override = true);
 
   void Reset()
   {
@@ -62,6 +63,7 @@ public:
     bCompilation = false;
     iTimesPlayed = 0;
     songs.clear();
+    infoSongs.clear();
   }
 
   CStdString GetArtistString() const;
@@ -97,7 +99,8 @@ public:
   int iYear;
   bool bCompilation;
   int iTimesPlayed;
-  VECSONGS songs;
+  VECSONGS songs;     ///< Local songs
+  VECSONGS infoSongs; ///< Scraped songs
 };
 
 typedef std::vector<CAlbum> VECALBUMS;
index b718b9a..e864fd8 100644 (file)
 
 using namespace std;
 
+void CArtist::MergeScrapedArtist(const CArtist& source, bool override /* = true */)
+{
+  /*
+   We don't merge musicbrainz artist ID so that a refresh of artist information
+   allows a lookup based on name rather than directly (re)using musicbrainz.
+   In future, we may wish to be able to override lookup by musicbrainz so
+   this might be dropped.
+   */
+  //  strMusicBrainzArtistID = source.strMusicBrainzArtistID;
+  if ((override && !source.strArtist.empty()) || strArtist.empty())
+    strArtist = source.strArtist;
+
+  genre = source.genre;
+  strBiography = source.strBiography;
+  styles = source.styles;
+  moods = source.moods;
+  instruments = source.instruments;
+  strBorn = source.strBorn;
+  strFormed = source.strFormed;
+  strDied = source.strDied;
+  strDisbanded = source.strDisbanded;
+  yearsActive = source.yearsActive;
+  thumbURL = source.thumbURL;
+  fanart = source.fanart;
+  discography = source.discography;
+}
+
+
 bool CArtist::Load(const TiXmlElement *artist, bool append, bool prioritise)
 {
   if (!artist) return false;
index e43634b..daa28a0 100644 (file)
@@ -47,6 +47,8 @@ public:
     if (strMusicBrainzArtistID > a.strMusicBrainzArtistID) return false;
     return false;
   }
+  
+  void MergeScrapedArtist(const CArtist& source, bool override = true);
 
   void Reset()
   {
@@ -122,9 +124,11 @@ public:
   std::string GetArtist() const                { return m_strArtist; }
   std::string GetMusicBrainzArtistID() const   { return m_strMusicBrainzArtistID; }
   std::string GetJoinPhrase() const            { return m_strJoinPhrase; }
+  int         GetArtistId() const              { return idArtist; }
   void SetArtist(const std::string &strArtist) { m_strArtist = strArtist; }
   void SetMusicBrainzArtistID(const std::string &strMusicBrainzArtistID) { m_strMusicBrainzArtistID = strMusicBrainzArtistID; }
   void SetJoinPhrase(const std::string &strJoinPhrase) { m_strJoinPhrase = strJoinPhrase; }
+  void SetArtistId(int idArtist)               { this->idArtist = idArtist; }
 
 private:
   long idArtist;
index 6eacb19..0f14c1a 100644 (file)
@@ -118,11 +118,28 @@ bool CMusicDatabase::CreateTables()
     CDatabase::CreateTables();
 
     CLog::Log(LOGINFO, "create artist table");
-    m_pDS->exec("CREATE TABLE artist ( idArtist integer primary key, strArtist varchar(256), strMusicBrainzArtistID text)\n");
+    m_pDS->exec("CREATE TABLE artist ( idArtist integer primary key, "
+                " strArtist varchar(256), strMusicBrainzArtistID text, "
+                " strBorn text, strFormed text, strGenres text, strMoods text, "
+                " strStyles text, strInstruments text, strBiography text, "
+                " strDied text, strDisbanded text, strYearsActive text, "
+                " strImage text, strFanart text, "
+                " lastScraped varchar(20) default NULL, "
+                " dateAdded varchar (20) default NULL)");
     CLog::Log(LOGINFO, "create album table");
-    m_pDS->exec("CREATE TABLE album ( idAlbum integer primary key, strAlbum varchar(256), strArtists text, strGenres text, iYear integer, idThumb integer, bCompilation integer not null default '0', strMusicBrainzAlbumID text )\n");
+    m_pDS->exec("CREATE TABLE album (idAlbum integer primary key, "
+                " strAlbum varchar(256), strMusicBrainzAlbumID text, "
+                " strArtists text, strGenres text, "
+                " iYear integer, idThumb integer, "
+                " bCompilation integer not null default '0', "
+                " strMoods text, strStyles text, strThemes text, "
+                " strReview text, strImage text, strLabel text, "
+                " strType text, "
+                " iRating integer, "
+                " lastScraped varchar(20) default NULL, "
+                " dateAdded varchar (20) default NULL)");
     CLog::Log(LOGINFO, "create album_artist table");
-    m_pDS->exec("CREATE TABLE album_artist ( idArtist integer, idAlbum integer, strJoinPhrase text, boolFeatured integer, iOrder integer )\n");
+    m_pDS->exec("CREATE TABLE album_artist ( idArtist integer, idAlbum integer, strJoinPhrase text, boolFeatured integer, iOrder integer, strArtist text )\n");
     CLog::Log(LOGINFO, "create album_genre table");
     m_pDS->exec("CREATE TABLE album_genre ( idGenre integer, idAlbum integer, iOrder integer )\n");
 
@@ -131,18 +148,24 @@ bool CMusicDatabase::CreateTables()
     CLog::Log(LOGINFO, "create path table");
     m_pDS->exec("CREATE TABLE path ( idPath integer primary key, strPath varchar(512), strHash text)\n");
     CLog::Log(LOGINFO, "create song table");
-    m_pDS->exec("CREATE TABLE song ( idSong integer primary key, idAlbum integer, idPath integer, strArtists text, strGenres text, strTitle varchar(512), iTrack integer, iDuration integer, iYear integer, dwFileNameCRC text, strFileName text, strMusicBrainzTrackID text, iTimesPlayed integer, iStartOffset integer, iEndOffset integer, idThumb integer, lastplayed varchar(20) default NULL, rating char default '0', comment text)\n");
+    m_pDS->exec("CREATE TABLE song ( idSong integer primary key, "
+                " idAlbum integer, idPath integer, "
+                " strArtists text, strGenres text, strTitle varchar(512), "
+                " iTrack integer, iDuration integer, iYear integer, "
+                " dwFileNameCRC text, "
+                " strFileName text, strMusicBrainzTrackID text, "
+                " iTimesPlayed integer, iStartOffset integer, iEndOffset integer, "
+                " idThumb integer, "
+                " lastplayed varchar(20) default NULL, "
+                " rating char default '0', comment text)");
     CLog::Log(LOGINFO, "create song_artist table");
-    m_pDS->exec("CREATE TABLE song_artist ( idArtist integer, idSong integer, strJoinPhrase text, boolFeatured integer, iOrder integer )\n");
+    m_pDS->exec("CREATE TABLE song_artist ( idArtist integer, idSong integer, strJoinPhrase text, boolFeatured integer, iOrder integer, strArtist text )\n");
     CLog::Log(LOGINFO, "create song_genre table");
     m_pDS->exec("CREATE TABLE song_genre ( idGenre integer, idSong integer, iOrder integer )\n");
 
-    CLog::Log(LOGINFO, "create albuminfo table");
-    m_pDS->exec("CREATE TABLE albuminfo ( idAlbumInfo integer primary key, idAlbum integer, iYear integer, strMoods text, strStyles text, strThemes text, strReview text, strImage text, strLabel text, strType text, iRating integer)\n");
     CLog::Log(LOGINFO, "create albuminfosong table");
     m_pDS->exec("CREATE TABLE albuminfosong ( idAlbumInfoSong integer primary key, idAlbumInfo integer, iTrack integer, strTitle text, iDuration integer)\n");
-    CLog::Log(LOGINFO, "create artistnfo table");
-    m_pDS->exec("CREATE TABLE artistinfo ( idArtistInfo integer primary key, idArtist integer, strBorn text, strFormed text, strGenres text, strMoods text, strStyles text, strInstruments text, strBiography text, strDied text, strDisbanded text, strYearsActive text, strImage text, strFanart text)\n");
+
     CLog::Log(LOGINFO, "create content table");
     m_pDS->exec("CREATE TABLE content (strPath text, strScraperPath text, strContent text, strSettings text)\n");
     CLog::Log(LOGINFO, "create discography table");
@@ -153,7 +176,7 @@ bool CMusicDatabase::CreateTables()
                 "strKaralyrics text, strKaraLyrFileCRC text )\n");
 
     CLog::Log(LOGINFO, "create album index");
-    m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum)");
+    m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum(255))");
     CLog::Log(LOGINFO, "create album compilation index");
     m_pDS->exec("CREATE INDEX idxAlbum_1 ON album(bCompilation)");
     CLog::Log(LOGINFO, "create unique album name index");
@@ -169,17 +192,17 @@ bool CMusicDatabase::CreateTables()
     m_pDS->exec("CREATE UNIQUE INDEX idxAlbumGenre_2 ON album_genre ( idGenre, idAlbum )\n");
 
     CLog::Log(LOGINFO, "create genre index");
-    m_pDS->exec("CREATE INDEX idxGenre ON genre(strGenre)");
+    m_pDS->exec("CREATE INDEX idxGenre ON genre(strGenre(255))");
 
     CLog::Log(LOGINFO, "create artist indexes");
-    m_pDS->exec("CREATE INDEX idxArtist ON artist(strArtist)");
+    m_pDS->exec("CREATE INDEX idxArtist ON artist(strArtist(255))");
     m_pDS->exec("CREATE UNIQUE INDEX idxArtist1 ON artist(strMusicBrainzArtistID(36))");
 
     CLog::Log(LOGINFO, "create path index");
-    m_pDS->exec("CREATE INDEX idxPath ON path(strPath)");
+    m_pDS->exec("CREATE INDEX idxPath ON path(strPath(255))");
 
     CLog::Log(LOGINFO, "create song index");
-    m_pDS->exec("CREATE INDEX idxSong ON song(strTitle)");
+    m_pDS->exec("CREATE INDEX idxSong ON song(strTitle(255))");
     CLog::Log(LOGINFO, "create song index1");
     m_pDS->exec("CREATE INDEX idxSong1 ON song(iTimesPlayed)");
     CLog::Log(LOGINFO, "create song index2");
@@ -199,27 +222,42 @@ bool CMusicDatabase::CreateTables()
     CLog::Log(LOGINFO, "create song_genre indexes");
     m_pDS->exec("CREATE UNIQUE INDEX idxSongGenre_1 ON song_genre ( idSong, idGenre )\n");
     m_pDS->exec("CREATE UNIQUE INDEX idxSongGenre_2 ON song_genre ( idGenre, idSong )\n");
-
     //m_pDS->exec("CREATE INDEX idxSong ON song(dwFileNameCRC)");
-    CLog::Log(LOGINFO, "create artistinfo index");
-    m_pDS->exec("CREATE INDEX idxArtistInfo on artistinfo(idArtist)");
-    CLog::Log(LOGINFO, "create albuminfo index");
-    m_pDS->exec("CREATE INDEX idxAlbumInfo on albuminfo(idAlbum)");
+
+    CLog::Log(LOGINFO, "create albuminfosong indexes");
+    m_pDS->exec("CREATE INDEX idxAlbumInfoSong_1 ON albuminfosong ( idAlbumInfo )\n");
 
     CLog::Log(LOGINFO, "create karaokedata index");
     m_pDS->exec("CREATE INDEX idxKaraNumber on karaokedata(iKaraNumber)");
     m_pDS->exec("CREATE INDEX idxKarSong on karaokedata(idSong)");
 
-    // Trigger
-    CLog::Log(LOGINFO, "create albuminfo trigger");
-    m_pDS->exec("CREATE TRIGGER tgrAlbumInfo AFTER delete ON albuminfo FOR EACH ROW BEGIN delete from albuminfosong where albuminfosong.idAlbumInfo=old.idAlbumInfo; END");
+    CLog::Log(LOGINFO, "create discography indexes");
+    m_pDS->exec("CREATE INDEX idxDiscography_1 ON discography ( idArtist )\n");
 
-    CLog::Log(LOGINFO, "create art table, index and triggers");
+    CLog::Log(LOGINFO, "create art table and index");
     m_pDS->exec("CREATE TABLE art(art_id INTEGER PRIMARY KEY, media_id INTEGER, media_type TEXT, type TEXT, url TEXT)");
     m_pDS->exec("CREATE INDEX ix_art ON art(media_id, media_type(20), type(20))");
-    m_pDS->exec("CREATE TRIGGER delete_song AFTER DELETE ON song FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idSong AND media_type='song'; END");
-    m_pDS->exec("CREATE TRIGGER delete_album AFTER DELETE ON album FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idAlbum AND media_type='album'; END");
-    m_pDS->exec("CREATE TRIGGER delete_artist AFTER DELETE ON artist FOR EACH ROW BEGIN DELETE FROM art WHERE media_id=old.idArtist AND media_type='artist'; END");
+
+    CLog::Log(LOGINFO, "create triggers");
+    m_pDS->exec("CREATE TRIGGER tgrDeleteAlbum AFTER delete ON album FOR EACH ROW BEGIN"
+                "  DELETE FROM song WHERE song.idAlbum = old.idAlbum;"
+                "  DELETE FROM album_artist WHERE album_artist.idAlbum = old.idAlbum;"
+                "  DELETE FROM album_genre WHERE album_genre.idAlbum = old.idAlbum;"
+                "  DELETE FROM albuminfosong WHERE albuminfosong.idAlbumInfo=old.idAlbum;"
+                "  DELETE FROM art WHERE media_id=old.idAlbum AND media_type='album';"
+                " END");
+    m_pDS->exec("CREATE TRIGGER tgrDeleteArtist AFTER delete ON artist FOR EACH ROW BEGIN"
+                "  DELETE FROM album_artist WHERE album_artist.idArtist = old.idArtist;"
+                "  DELETE FROM song_artist WHERE song_artist.idArtist = old.idArtist;"
+                "  DELETE FROM discography WHERE discography.idArtist = old.idArtist;"
+                "  DELETE FROM art WHERE media_id=old.idArtist AND media_type='artist';"
+                " END");
+    m_pDS->exec("CREATE TRIGGER tgrDeleteSong AFTER delete ON song FOR EACH ROW BEGIN"
+                "  DELETE FROM song_artist WHERE song_artist.idSong = old.idSong;"
+                "  DELETE FROM song_genre WHERE song_genre.idSong = old.idSong;"
+                "  DELETE FROM karaokedata WHERE karaokedata.idSong = old.idSong;"
+                "  DELETE FROM art WHERE media_id=old.idSong AND media_type='song';"
+                " END");
 
     // we create views last to ensure all indexes are rolled in
     CreateViews();
@@ -242,16 +280,23 @@ void CMusicDatabase::CreateViews()
   CLog::Log(LOGINFO, "create song view");
   m_pDS->exec("DROP VIEW IF EXISTS songview");
   m_pDS->exec("CREATE VIEW songview AS SELECT "
-              "  song.idSong AS idSong, "
-              "  song.strArtists AS strArtists,"
-              "  song.strGenres AS strGenres,"
-              "  strTitle, iTrack, iDuration,"
-              "  song.iYear AS iYear, dwFileNameCRC, strFileName, strMusicBrainzTrackID,"
-              "  iTimesPlayed, iStartOffset, iEndOffset, lastplayed,"
-              "  rating, comment, song.idAlbum AS idAlbum, strAlbum, strPath,"
-              "  iKaraNumber, iKaraDelay, strKaraEncoding,"
-              "  album.bCompilation AS bCompilation,"
-              "  album.strArtists AS strAlbumArtists "
+              "        song.idSong AS idSong, "
+              "        song.strArtists AS strArtists,"
+              "        song.strGenres AS strGenres,"
+              "        strTitle, "
+              "        iTrack, iDuration, "
+              "        song.iYear AS iYear, "
+              "        dwFileNameCRC, "
+              "        strFileName, "
+              "        strMusicBrainzTrackID, "
+              "        iTimesPlayed, iStartOffset, iEndOffset, "
+              "        lastplayed, rating, comment, "
+              "        song.idAlbum AS idAlbum, "
+              "        strAlbum, "
+              "        strPath, "
+              "        iKaraNumber, iKaraDelay, strKaraEncoding,"
+              "        album.bCompilation AS bCompilation,"
+              "        album.strArtists AS strAlbumArtists "
               "FROM song"
               "  JOIN album ON"
               "    song.idAlbum=album.idAlbum"
@@ -262,83 +307,228 @@ void CMusicDatabase::CreateViews()
 
   CLog::Log(LOGINFO, "create album view");
   m_pDS->exec("DROP VIEW IF EXISTS albumview");
-  if (m_sqlite)
-  {
-    m_pDS->exec("CREATE VIEW albumview AS SELECT "
-                "        album.idAlbum AS idAlbum, "
-                "        strAlbum, "
-                "        strMusicBrainzAlbumID, "
-                "        GROUP_CONCAT(strArtist || strJoinPhrase, '') as strArtists, "
-                "        album.strGenres AS strGenres, "
-                "        album.iYear AS iYear, "
-                "        idAlbumInfo, "
-                "        strMoods, "
-                "        strStyles, "
-                "        strThemes, "
-                "        strReview, "
-                "        strLabel, "
-                "        strType, "
-                "        strImage, "
-                "        iRating, "
-                "        bCompilation, "
-                "        (SELECT MIN(iTimesPlayed) AS iTimesPlayed FROM song WHERE song.idAlbum = album.idAlbum)"
-                "   FROM album  "
-                "   LEFT OUTER JOIN "
-                "       albuminfo ON album.idAlbum = albuminfo.idAlbum "
-                "   LEFT OUTER JOIN album_artist ON "
-                "       album.idAlbum = album_artist.idAlbum "
-                "   LEFT OUTER JOIN artist ON "
-                "       album_artist.idArtist = artist.idArtist "
-                "   GROUP BY album.idAlbum");
-  }
-  else
-  {
-    m_pDS->exec("CREATE VIEW albumview AS SELECT "
-                "        album.idAlbum AS idAlbum, "
-                "        strAlbum, "
-                "        strMusicBrainzAlbumID, "
-                "        GROUP_CONCAT(strArtist, strJoinPhrase ORDER BY iOrder SEPARATOR '') as strArtists, "
-                "        album.strGenres AS strGenres, "
-                "        album.iYear AS iYear, "
-                "        idAlbumInfo, "
-                "        strMoods, "
-                "        strStyles, "
-                "        strThemes, "
-                "        strReview, "
-                "        strLabel, "
-                "        strType, "
-                "        strImage, "
-                "        iRating, "
-                "        bCompilation, "
-                "        (SELECT MIN(iTimesPlayed) AS iTimesPlayed FROM song WHERE song.idAlbum = album.idAlbum)"
-                "   FROM album  "
-                "   LEFT OUTER JOIN "
-                "       albuminfo ON album.idAlbum = albuminfo.idAlbum "
-                "   LEFT OUTER JOIN album_artist ON "
-                "       album.idAlbum = album_artist.idAlbum "
-                "   LEFT OUTER JOIN artist ON "
-                "       album_artist.idArtist = artist.idArtist "
-                "   GROUP BY album.idAlbum");
-  }
+  m_pDS->exec("CREATE VIEW albumview AS SELECT "
+              "        album.idAlbum AS idAlbum, "
+              "        strAlbum, "
+              "        strMusicBrainzAlbumID, "
+              "        album.strArtists AS strArtists, "
+              "        album.strGenres AS strGenres, "
+              "        album.iYear AS iYear, "
+              "        album.strMoods AS strMoods, "
+              "        album.strStyles AS strStyles, "
+              "        strThemes, "
+              "        strReview, "
+              "        strLabel, "
+              "        strType, "
+              "        album.strImage as strImage, "
+              "        iRating, "
+              "        bCompilation, "
+              "        (SELECT MIN(iTimesPlayed) AS iTimesPlayed FROM song WHERE song.idAlbum = album.idAlbum)"
+              "   FROM album  ");
 
   CLog::Log(LOGINFO, "create artist view");
   m_pDS->exec("DROP VIEW IF EXISTS artistview");
   m_pDS->exec("CREATE VIEW artistview AS SELECT"
-              "  artist.idArtist AS idArtist, strArtist, "
-              "  artist.strMusicBrainzArtistID AS strMusicBrainzArtistID, "
+              "  idArtist, strArtist, "
+              "  strMusicBrainzArtistID, "
               "  strBorn, strFormed, strGenres,"
               "  strMoods, strStyles, strInstruments, "
               "  strBiography, strDied, strDisbanded, "
               "  strYearsActive, strImage, strFanart "
-              "FROM artist "
-              "  LEFT OUTER JOIN artistinfo ON"
-              "    artist.idArtist = artistinfo.idArtist");
+              "FROM artist");
+
+  CLog::Log(LOGINFO, "create albumartistview");
+  m_pDS->exec("DROP VIEW IF EXISTS albumartistview");
+  m_pDS->exec("CREATE VIEW albumartistview AS SELECT"
+              "  album_artist.idAlbum AS idAlbum, "
+              "  album_artist.idArtist AS idArtist, "
+              "  artist.strArtist AS strArtist, "
+              "  artist.strMusicBrainzArtistID AS strMusicBrainzArtistID, "
+              "  album_artist.boolFeatured AS boolFeatured, "
+              "  album_artist.strJoinPhrase AS strJoinPhrase, "
+              "  album_artist.iOrder AS iOrder "
+              "FROM album_artist "
+              "JOIN artist ON "
+              "     album_artist.idArtist = artist.idArtist");
+  CLog::Log(LOGINFO, "create songartistview");
+  m_pDS->exec("DROP VIEW IF EXISTS songartistview");
+  m_pDS->exec("CREATE VIEW songartistview AS SELECT"
+              "  song_artist.idSong AS idSong, "
+              "  song_artist.idArtist AS idArtist, "
+              "  artist.strArtist AS strArtist, "
+              "  artist.strMusicBrainzArtistID AS strMusicBrainzArtistID, "
+              "  song_artist.boolFeatured AS boolFeatured, "
+              "  song_artist.strJoinPhrase AS strJoinPhrase, "
+              "  song_artist.iOrder AS iOrder "
+              "FROM song_artist "
+              "JOIN artist ON "
+              "     song_artist.idArtist = artist.idArtist");
+}
+
+int CMusicDatabase::AddAlbumInfoSong(int idAlbum, const CSong& song)
+{
+  CStdString strSQL = PrepareSQL("SELECT idAlbumInfoSong FROM albuminfosong WHERE idAlbumInfo = %i and iTrack = %i", idAlbum, song.iTrack);
+  int idAlbumInfoSong = (int)strtol(GetSingleValue(strSQL).c_str(), NULL, 10);
+  if (idAlbumInfoSong > 0)
+  {
+    strSQL = PrepareSQL("UPDATE albuminfosong SET strTitle = '%s', iDuration = %i WHERE idAlbumInfoSong = %i", song.strTitle.c_str(), song.iDuration, idAlbumInfoSong);
+    return ExecuteQuery(strSQL);
+  }
+  else
+  {
+    strSQL = PrepareSQL("INSERT INTO albuminfosong (idAlbumInfoSong,idAlbumInfo,iTrack,strTitle,iDuration) VALUES (NULL,%i,%i,'%s',%i)",
+                        idAlbum,
+                        song.iTrack,
+                        song.strTitle.c_str(),
+                        song.iDuration);
+    return ExecuteQuery(strSQL);
+  }
+}
+
+std::string GetArtistString(const VECARTISTCREDITS &credits)
+{
+  std::string artistString;
+  for (VECARTISTCREDITS::const_iterator i = credits.begin(); i != credits.end(); ++i)
+    artistString += i->GetArtist() + i->GetJoinPhrase();
+  return artistString;
+}
+
+bool CMusicDatabase::AddAlbum(CAlbum& album)
+{
+  BeginTransaction();
+
+  album.idAlbum = AddAlbum(album.strAlbum,
+                           album.strMusicBrainzAlbumID,
+                           GetArtistString(album.artistCredits),
+                           album.GetGenreString(),
+                           album.iYear,
+                           album.bCompilation);
+
+  // Add the album artists
+  for (VECARTISTCREDITS::iterator artistCredit = album.artistCredits.begin(); artistCredit != album.artistCredits.end(); ++artistCredit)
+  {
+    artistCredit->idArtist = AddArtist(artistCredit->GetArtist(), artistCredit->GetMusicBrainzArtistID());
+    AddAlbumArtist(artistCredit->idArtist,
+                   album.idAlbum,
+                   artistCredit->GetArtist(),
+                   artistCredit->GetJoinPhrase(),
+                   artistCredit == album.artistCredits.begin() ? false : true,
+                   std::distance(album.artistCredits.begin(), artistCredit));
+  }
+
+  for (VECSONGS::iterator song = album.songs.begin(); song != album.songs.end(); ++song)
+  {
+    song->idAlbum = album.idAlbum;
+    song->idSong = AddSong(song->idAlbum,
+                           song->strTitle, song->strMusicBrainzTrackID,
+                           song->strFileName, song->strComment,
+                           song->strThumb,
+                           GetArtistString(song->artistCredits), song->genre,
+                           song->iTrack, song->iDuration, song->iYear,
+                           song->iTimesPlayed, song->iStartOffset,
+                           song->iEndOffset,
+                           song->lastPlayed,
+                           song->rating,
+                           song->iKaraokeNumber);
+    for (VECARTISTCREDITS::iterator artistCredit = song->artistCredits.begin(); artistCredit != song->artistCredits.end(); ++artistCredit)
+    {
+      artistCredit->idArtist = AddArtist(artistCredit->GetArtist(),
+                                         artistCredit->GetMusicBrainzArtistID());
+      AddSongArtist(artistCredit->idArtist,
+                    song->idSong,
+                    artistCredit->GetArtist(),
+                    artistCredit->GetJoinPhrase(), // we don't have song artist breakdowns from scrapers, yet
+                    artistCredit == song->artistCredits.begin() ? false : true,
+                    std::distance(song->artistCredits.begin(), artistCredit));
+    }
+  }
+  for (VECSONGS::const_iterator infoSong = album.infoSongs.begin(); infoSong != album.infoSongs.end(); ++infoSong)
+    AddAlbumInfoSong(album.idAlbum, *infoSong);
+
+  for (std::map<std::string, std::string>::const_iterator albumArt = album.art.begin();
+                                                          albumArt != album.art.end();
+                                                        ++albumArt)
+    SetArtForItem(album.idAlbum, "album", albumArt->first, albumArt->second);
+
+  CommitTransaction();
+  return true;
+}
+
+bool CMusicDatabase::UpdateAlbum(CAlbum& album)
+{
+  BeginTransaction();
+
+  UpdateAlbum(album.idAlbum,
+              album.strAlbum, album.strMusicBrainzAlbumID,
+              GetArtistString(album.artistCredits), album.GetGenreString(),
+              StringUtils::Join(album.moods, g_advancedSettings.m_musicItemSeparator).c_str(),
+              StringUtils::Join(album.styles, g_advancedSettings.m_musicItemSeparator).c_str(),
+              StringUtils::Join(album.themes, g_advancedSettings.m_musicItemSeparator).c_str(),
+              album.strReview,
+              album.thumbURL.m_xml.c_str(),
+              album.strLabel, album.strType,
+              album.iRating, album.iYear, album.bCompilation);
+
+  // Add the album artists
+  DeleteAlbumArtistsByAlbum(album.idAlbum);
+  for (VECARTISTCREDITS::iterator artistCredit = album.artistCredits.begin(); artistCredit != album.artistCredits.end(); ++artistCredit)
+  {
+    artistCredit->idArtist = AddArtist(artistCredit->GetArtist(),
+                                       artistCredit->GetMusicBrainzArtistID());
+    AddAlbumArtist(artistCredit->idArtist,
+                   album.idAlbum,
+                   artistCredit->GetArtist(),
+                   artistCredit->GetJoinPhrase(),
+                   artistCredit == album.artistCredits.begin() ? false : true,
+                   std::distance(album.artistCredits.begin(), artistCredit));
+  }
+
+  for (VECSONGS::iterator song = album.songs.begin(); song != album.songs.end(); ++song)
+  {
+    UpdateSong(song->idSong,
+               song->strTitle,
+               song->strMusicBrainzTrackID,
+               song->strFileName,
+               song->strComment,
+               song->strThumb,
+               GetArtistString(song->artistCredits),
+               song->genre,
+               song->iTrack,
+               song->iDuration,
+               song->iYear,
+               song->iTimesPlayed,
+               song->iStartOffset,
+               song->iEndOffset,
+               song->lastPlayed,
+               song->rating,
+               song->iKaraokeNumber);
+    DeleteSongArtistsBySong(song->idSong);
+    for (VECARTISTCREDITS::iterator artistCredit = song->artistCredits.begin(); artistCredit != song->artistCredits.end(); ++artistCredit)
+    {
+      artistCredit->idArtist = AddArtist(artistCredit->GetArtist(),
+                                         artistCredit->GetMusicBrainzArtistID());
+      AddSongArtist(artistCredit->idArtist,
+                    song->idSong,
+                    artistCredit->GetArtist(),
+                    artistCredit->GetJoinPhrase(),
+                    artistCredit == song->artistCredits.begin() ? false : true,
+                    std::distance(song->artistCredits.begin(), artistCredit));
+    }
+  }
+  for (VECSONGS::const_iterator infoSong = album.infoSongs.begin(); infoSong != album.infoSongs.end(); ++infoSong)
+    AddAlbumInfoSong(album.idAlbum, *infoSong);
+
+  if (!album.art.empty())
+    SetArtForItem(album.idAlbum, "album", album.art);
+
+  CommitTransaction();
+  return true;
 }
 
 int CMusicDatabase::AddSong(const int idAlbum,
                             const CStdString& strTitle, const CStdString& strMusicBrainzTrackID,
                             const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb,
-                            const std::vector<std::string>& artists, const std::vector<std::string>& genres,
+                            const std::string &artistString, const std::vector<std::string>& genres,
                             int iTrack, int iDuration, int iYear,
                             const int iTimesPlayed, int iStartOffset, int iEndOffset,
                             const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber)
@@ -383,7 +573,7 @@ int CMusicDatabase::AddSong(const int idAlbum,
       strSQL=PrepareSQL("INSERT INTO song (idSong,idAlbum,idPath,strArtists,strGenres,strTitle,iTrack,iDuration,iYear,dwFileNameCRC,strFileName,strMusicBrainzTrackID,iTimesPlayed,iStartOffset,iEndOffset,lastplayed,rating,comment) values (NULL, %i, %i, '%s', '%s', '%s', %i, %i, %i, '%ul', '%s'",
                     idAlbum,
                     idPath,
-                    StringUtils::Join(artists, g_advancedSettings.m_musicItemSeparator).c_str(),
+                    artistString.c_str(),
                     StringUtils::Join(genres, g_advancedSettings.m_musicItemSeparator).c_str(),
                     strTitle.c_str(),
                     iTrack, iDuration, iYear,
@@ -407,7 +597,7 @@ int CMusicDatabase::AddSong(const int idAlbum,
     {
       idSong = m_pDS->fv("idSong").get_asInt();
       m_pDS->close();
-      UpdateSong(idSong, strTitle, strMusicBrainzTrackID, strPathAndFileName, strComment, strThumb, artists, genres, iTrack, iDuration, iYear, iTimesPlayed, iStartOffset, iEndOffset, dtLastPlayed, rating,  iKaraokeNumber);
+      UpdateSong(idSong, strTitle, strMusicBrainzTrackID, strPathAndFileName, strComment, strThumb, artistString, genres, iTrack, iDuration, iYear, iTimesPlayed, iStartOffset, iEndOffset, dtLastPlayed, rating,  iKaraokeNumber);
     }
 
     if (!strThumb.empty())
@@ -443,51 +633,116 @@ int CMusicDatabase::AddSong(const int idAlbum,
   return idSong;
 }
 
+bool CMusicDatabase::GetSong(int idSong, CSong& song)
+{
+  try
+  {
+    song.Clear();
+
+    if (NULL == m_pDB.get()) return false;
+    if (NULL == m_pDS.get()) return false;
+
+    CStdString strSQL=PrepareSQL("SELECT songview.*,songartistview.* FROM songview "
+                                 " JOIN songartistview ON songview.idSong = songartistview.idSong "
+                                 " WHERE songview.idSong = %i", idSong);
+
+    if (!m_pDS->query(strSQL.c_str())) return false;
+    int iRowsFound = m_pDS->num_rows();
+    if (iRowsFound == 0)
+    {
+      m_pDS->close();
+      return false;
+    }
+
+    int songArtistOffset = song_enumCount;
+
+    set<int> artistcredits;
+    song = GetSongFromDataset(m_pDS.get()->get_sql_record());
+    while (!m_pDS->eof())
+    {
+      const dbiplus::sql_record* const record = m_pDS.get()->get_sql_record();
+
+      int idSongArtist = record->at(songArtistOffset + artistCredit_idArtist).get_asInt();
+      if (artistcredits.find(idSongArtist) == artistcredits.end())
+      {
+        song.artistCredits.push_back(GetArtistCreditFromDataset(record, songArtistOffset));
+        artistcredits.insert(idSongArtist);
+      }
+
+      m_pDS->next();
+    }
+    m_pDS->close(); // cleanup recordset data
+    return true;
+  }
+  catch (...)
+  {
+    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idSong);
+  }
+
+  return false;
+}
+
+int CMusicDatabase::UpdateSong(int idSong, const CSong &song)
+{
+  return UpdateSong(idSong,
+                    song.strTitle,
+                    song.strMusicBrainzTrackID,
+                    song.strFileName,
+                    song.strComment,
+                    song.strThumb,
+                    StringUtils::Join(song.artist, g_advancedSettings.m_musicItemSeparator), // NOTE: Don't call this function internally!!!
+                    song.genre,
+                    song.iTrack,
+                    song.iDuration,
+                    song.iYear,
+                    song.iTimesPlayed,
+                    song.iStartOffset,
+                    song.iEndOffset,
+                    song.lastPlayed,
+                    song.rating,
+                    song.iKaraokeNumber);
+}
+
 int CMusicDatabase::UpdateSong(int idSong,
                                const CStdString& strTitle, const CStdString& strMusicBrainzTrackID,
                                const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb,
-                               const std::vector<std::string>& artists, const std::vector<std::string>& genres,
+                               const std::string& artistString, const std::vector<std::string>& genres,
                                int iTrack, int iDuration, int iYear,
                                int iTimesPlayed, int iStartOffset, int iEndOffset,
                                const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber)
 {
-  CStdString sql;
   if (idSong < 0)
     return -1;
-  
+
   CStdString strSQL;
-  try
-  {
-    CStdString strPath, strFileName;
-    URIUtils::Split(strPathAndFileName, strPath, strFileName);
-    int idPath = AddPath(strPath);
-    DWORD crc = ComputeCRC(strFileName);
-    
-    strSQL = PrepareSQL("UPDATE song SET idPath = %i, strArtists = '%s', strGenres = '%s', strTitle = '%s', iTrack = %i, iDuration = %i, iYear = %i, dwFileNameCRC = '%ul', strFileName = '%s'",
-                        idPath,
-                        StringUtils::Join(artists, g_advancedSettings.m_musicItemSeparator).c_str(),
-                        StringUtils::Join(genres, g_advancedSettings.m_musicItemSeparator).c_str(),
-                        strTitle.c_str(),
-                        iTrack, iDuration, iYear,
-                        crc, strFileName.c_str());
-    if (strMusicBrainzTrackID.empty())
-      strSQL += PrepareSQL(", strMusicBrainzTrackID = NULL");
-    else
-      strSQL += PrepareSQL(", strMusicBrainzTrackID = '%s'", strMusicBrainzTrackID.c_str());
-    
-    if (dtLastPlayed.IsValid())
-      strSQL += PrepareSQL(", iTimesPlayed = %i, iStartOffset = %i, iEndOffset = %i, lastplayed = '%s', rating = '%c', comment = '%s'",
-                           iTimesPlayed, iStartOffset, iEndOffset, dtLastPlayed.GetAsDBDateTime().c_str(), rating, strComment.c_str());
-    else
-      strSQL += PrepareSQL(", iTimesPlayed = %i, iStartOffset = %i, iEndOffset = %i, lastplayed = NULL, rating = '%c', comment = '%s'",
-                           iTimesPlayed, iStartOffset, iEndOffset, rating, strComment.c_str());
-    strSQL += PrepareSQL(" WHERE idSong = %i", idSong);
-    m_pDS->exec(strSQL.c_str());
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "musicdatabase:unable to addsong (%s)", strSQL.c_str());
-  }
+  CStdString strPath, strFileName;
+  URIUtils::Split(strPathAndFileName, strPath, strFileName);
+  int idPath = AddPath(strPath);
+  DWORD crc = ComputeCRC(strFileName);
+
+  strSQL = PrepareSQL("UPDATE song SET idPath = %i, strArtists = '%s', strGenres = '%s', strTitle = '%s', iTrack = %i, iDuration = %i, iYear = %i, dwFileNameCRC = '%ul', strFileName = '%s'",
+                      idPath,
+                      artistString.c_str(),
+                      StringUtils::Join(genres, g_advancedSettings.m_musicItemSeparator).c_str(),
+                      strTitle.c_str(),
+                      iTrack, iDuration, iYear,
+                      crc, strFileName.c_str());
+  if (strMusicBrainzTrackID.empty())
+    strSQL += PrepareSQL(", strMusicBrainzTrackID = NULL");
+  else
+    strSQL += PrepareSQL(", strMusicBrainzTrackID = '%s'", strMusicBrainzTrackID.c_str());
+
+  if (dtLastPlayed.IsValid())
+    strSQL += PrepareSQL(", iTimesPlayed = %i, iStartOffset = %i, iEndOffset = %i, lastplayed = '%s', rating = '%c', comment = '%s'",
+                         iTimesPlayed, iStartOffset, iEndOffset, dtLastPlayed.GetAsDBDateTime().c_str(), rating, strComment.c_str());
+  else
+    strSQL += PrepareSQL(", iTimesPlayed = %i, iStartOffset = %i, iEndOffset = %i, lastplayed = NULL, rating = '%c', comment = '%s'",
+                         iTimesPlayed, iStartOffset, iEndOffset, rating, strComment.c_str());
+  strSQL += PrepareSQL(" WHERE idSong = %i", idSong);
+
+  bool status = ExecuteQuery(strSQL);
+  if (status)
+    AnnounceUpdate("song", idSong);
   return idSong;
 }
 
@@ -504,7 +759,7 @@ int CMusicDatabase::AddAlbum(const CStdString& strAlbum, const CStdString& strMu
       strSQL = PrepareSQL("SELECT * FROM album WHERE strMusicBrainzAlbumID = '%s'",
                         strMusicBrainzAlbumID.c_str());
     else
-      strSQL = PrepareSQL("SELECT * FROM album WHERE strArtists = '%s' AND strAlbum like '%s' and strMusicBrainzAlbumID IS NULL",
+      strSQL = PrepareSQL("SELECT * FROM album WHERE strArtists LIKE '%s' AND strAlbum LIKE '%s' AND strMusicBrainzAlbumID IS NULL",
                           strArtist.c_str(),
                           strAlbum.c_str());
     m_pDS->query(strSQL.c_str());
@@ -534,17 +789,34 @@ int CMusicDatabase::AddAlbum(const CStdString& strAlbum, const CStdString& strMu
     }
     else
     {
-      // exists in our database and not scanned during this scan, so we should update it as the details
-      // may have changed (there's a reason we're rescanning, afterall!)
+      /* Exists in our database and being re-scanned from tags, so we should update it as the details
+         may have changed.
+
+         Note that for multi-folder albums this will mean the last folder scanned will have the information
+         stored for it.  Most values here should be the same across all songs anyway, but it does mean
+         that if there's any inconsistencies then only the last folders information will be taken.
+
+         We make sure we clear out the link tables (album artists, album genres) and we reset
+         the last scraped time to make sure that online metadata is re-fetched. */
       int idAlbum = m_pDS->fv("idAlbum").get_asInt();
       m_pDS->close();
-      strSQL=PrepareSQL("update album set strGenres='%s', iYear=%i where idAlbum=%i", strGenre.c_str(), year, idAlbum);
-      m_pDS->exec(strSQL.c_str());
-      // and clear the link tables - these are updated in AddSong()
-      strSQL=PrepareSQL("delete from album_artist where idAlbum=%i", idAlbum);
-      m_pDS->exec(strSQL.c_str());
-      strSQL=PrepareSQL("delete from album_genre where idAlbum=%i", idAlbum);
+      if (strMusicBrainzAlbumID.empty())
+        strSQL=PrepareSQL("UPDATE album SET strGenres = '%s', iYear=%i, bCompilation=%i, lastScraped = NULL WHERE idAlbum=%i",
+                          strGenre.c_str(),
+                          year,
+                          bCompilation,
+                          idAlbum);
+      else
+        strSQL=PrepareSQL("UPDATE album SET strAlbum = '%s', strArtists = '%s', strGenres = '%s', iYear=%i, bCompilation=%i, lastScraped = NULL WHERE idAlbum=%i",
+                          strAlbum.c_str(),
+                          strArtist.c_str(),
+                          strGenre.c_str(),
+                          year,
+                          bCompilation,
+                          idAlbum);
       m_pDS->exec(strSQL.c_str());
+      DeleteAlbumArtistsByAlbum(idAlbum);
+      DeleteAlbumGenresByAlbum(idAlbum);
       return idAlbum;
     }
   }
@@ -556,6 +828,160 @@ int CMusicDatabase::AddAlbum(const CStdString& strAlbum, const CStdString& strMu
   return -1;
 }
 
+int  CMusicDatabase::UpdateAlbum(int idAlbum,
+                                 const CStdString& strAlbum, const CStdString& strMusicBrainzAlbumID,
+                                 const CStdString& strArtist, const CStdString& strGenre,
+                                 const CStdString& strMoods, const CStdString& strStyles,
+                                 const CStdString& strThemes, const CStdString& strReview,
+                                 const CStdString& strImage, const CStdString& strLabel,
+                                 const CStdString& strType,
+                                 int iRating, int iYear, bool bCompilation)
+{
+  if (idAlbum < 0)
+    return -1;
+
+  CStdString strSQL;
+  strSQL = PrepareSQL("UPDATE album SET "
+                      " strAlbum = '%s', strArtists = '%s', strGenres = '%s', "
+                      " strMoods = '%s', strStyles = '%s', strThemes = '%s', "
+                      " strReview = '%s', strImage = '%s', strLabel = '%s', "
+                      " strType = '%s',"
+                      " iYear = %i, bCompilation = %i, lastScraped = '%s'",
+                      strAlbum.c_str(), strArtist.c_str(), strGenre.c_str(),
+                      strMoods.c_str(), strStyles.c_str(), strThemes.c_str(),
+                      strReview.c_str(), strImage.c_str(), strLabel.c_str(),
+                      strType.c_str(),
+                      iYear, bCompilation,
+                      CDateTime::GetCurrentDateTime().GetAsDBDateTime().c_str());
+  if (strMusicBrainzAlbumID.empty())
+    strSQL += PrepareSQL(", strMusicBrainzAlbumID = NULL");
+  else
+    strSQL += PrepareSQL(", strMusicBrainzAlbumID = '%s'", strMusicBrainzAlbumID.c_str());
+
+  strSQL += PrepareSQL(" WHERE idAlbum = %i", idAlbum);
+
+  bool status = ExecuteQuery(strSQL);
+  if (status)
+    AnnounceUpdate("album", idAlbum);
+  return idAlbum;
+}
+
+bool CMusicDatabase::GetAlbum(int idAlbum, CAlbum& album, bool getSongs /* = true */)
+{
+  try
+  {
+    if (NULL == m_pDB.get()) return false;
+    if (NULL == m_pDS.get()) return false;
+
+    if (idAlbum == -1)
+      return false; // not in the database
+
+    CStdString sql;
+    if (getSongs)
+    {
+      sql = PrepareSQL("SELECT albumview.*,albumartistview.*,songview.*,songartistview.*,albuminfosong.* "
+                       "  FROM albumview "
+                       "  JOIN albumartistview ON albumview.idAlbum = albumartistview.idAlbum "
+                       "  JOIN songview ON albumview.idAlbum = songview.idAlbum "
+                       "  JOIN songartistview ON songview.idSong = songartistview.idSong "
+                       "  LEFT JOIN albuminfosong ON albumview.idAlbum = albuminfosong.idAlbumInfo "
+                       "  WHERE albumview.idAlbum = %ld "
+                       "  ORDER BY albumartistview.iOrder, songview.iTrack, songartistview.iOrder", idAlbum);
+    }
+    else
+    {
+      sql = PrepareSQL("SELECT albumview.*,albumartistview.* "
+                       "  FROM albumview "
+                       "  JOIN albumartistview ON albumview.idAlbum = albumartistview.idAlbum "
+                       "  WHERE albumview.idAlbum = %ld "
+                       "  ORDER BY albumartistview.iOrder", idAlbum);
+    }
+
+    CLog::Log(LOGDEBUG, "%s", sql.c_str());
+    if (!m_pDS->query(sql.c_str())) return false;
+    if (m_pDS->num_rows() == 0)
+    {
+      m_pDS->close();
+      return false;
+    }
+
+    int albumArtistOffset = album_enumCount;
+    int songOffset = albumArtistOffset + artistCredit_enumCount;
+    int songArtistOffset = songOffset + song_enumCount;
+    int infoSongOffset = songArtistOffset + artistCredit_enumCount;
+
+    set<int> artistcredits;
+    set<int> songs;
+    set<pair<int, int> > songartistcredits;
+    set<int> infosongs;
+    album = GetAlbumFromDataset(m_pDS.get()->get_sql_record(), 0, true); // true to grab and parse the imageURL
+    while (!m_pDS->eof())
+    {
+      const dbiplus::sql_record* const record = m_pDS->get_sql_record();
+
+      // Because rows repeat in the joined query (cartesian join) we may see each
+      // entity (album artist, song, song artist) multiple times in the result set.
+      // Since there should never be a song with the same artist twice, or an album
+      // with the same song (by id) listed twice, we key on the entity ID and only
+      // create an entity for the first occurence of each entity in the data set.
+      int idAlbumArtist = record->at(albumArtistOffset + artistCredit_idArtist).get_asInt();
+      if (artistcredits.find(idAlbumArtist) == artistcredits.end())
+      {
+        album.artistCredits.push_back(GetArtistCreditFromDataset(record, albumArtistOffset));
+        artistcredits.insert(idAlbumArtist);
+      }
+
+      if (getSongs)
+      {
+        int idSong = record->at(songOffset + song_idSong).get_asInt();
+        if (songs.find(idSong) == songs.end())
+        {
+          album.songs.push_back(GetSongFromDataset(record, songOffset));
+          songs.insert(idSong);
+        }
+
+        int idSongArtistSong = record->at(songArtistOffset + artistCredit_idEntity).get_asInt();
+        int idSongArtistArtist = record->at(songArtistOffset + artistCredit_idArtist).get_asInt();
+        if (songartistcredits.find(make_pair(idSongArtistSong, idSongArtistArtist)) == songartistcredits.end())
+        {
+          for (VECSONGS::iterator si = album.songs.begin(); si != album.songs.end(); ++si)
+            if (si->idSong == idSongArtistSong)
+              si->artistCredits.push_back(GetArtistCreditFromDataset(record, songArtistOffset));
+          songartistcredits.insert(make_pair(idSongArtistSong, idSongArtistArtist));
+        }
+
+        int idAlbumInfoSong = m_pDS.get()->get_sql_record()->at(infoSongOffset + albumInfoSong_idAlbumInfoSong).get_asInt();
+        if (infosongs.find(idAlbumInfoSong) == infosongs.end())
+        {
+          album.infoSongs.push_back(GetAlbumInfoSongFromDataset(record, infoSongOffset));
+          infosongs.insert(idAlbumInfoSong);
+        }
+      }
+      m_pDS->next();
+    }
+    m_pDS->close(); // cleanup recordset data
+    return true;
+  }
+  catch (...)
+  {
+    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idAlbum);
+  }
+
+  return false;
+}
+
+bool CMusicDatabase::ClearAlbumLastScrapedTime(int idAlbum)
+{
+  CStdString strSQL = PrepareSQL("UPDATE album SET lastScraped = NULL WHERE idAlbum = %i", idAlbum);
+  return ExecuteQuery(strSQL);
+}
+
+bool CMusicDatabase::HasAlbumBeenScraped(int idAlbum)
+{
+  CStdString strSQL = PrepareSQL("SELECT idAlbum FROM album WHERE idAlbum = %i AND lastScraped IS NULL", idAlbum);
+  return GetSingleValue(strSQL).empty();
+}
+
 int CMusicDatabase::AddGenre(const CStdString& strGenre1)
 {
   CStdString strSQL;
@@ -605,6 +1031,32 @@ int CMusicDatabase::AddGenre(const CStdString& strGenre1)
   return -1;
 }
 
+bool CMusicDatabase::UpdateArtist(const CArtist& artist)
+{
+  UpdateArtist(artist.idArtist,
+               artist.strArtist, artist.strMusicBrainzArtistID,
+               artist.strBorn, artist.strFormed,
+               StringUtils::Join(artist.genre, g_advancedSettings.m_musicItemSeparator),
+               StringUtils::Join(artist.moods, g_advancedSettings.m_musicItemSeparator),
+               StringUtils::Join(artist.styles, g_advancedSettings.m_musicItemSeparator),
+               StringUtils::Join(artist.instruments, g_advancedSettings.m_musicItemSeparator),
+               artist.strBiography, artist.strDied,
+               artist.strDisbanded,
+               StringUtils::Join(artist.yearsActive, g_advancedSettings.m_musicItemSeparator).c_str(),
+               artist.thumbURL.m_xml.c_str(),
+               artist.fanart.m_xml.c_str());
+
+  DeleteArtistDiscography(artist.idArtist);
+  for (std::vector<std::pair<CStdString,CStdString> >::const_iterator disc = artist.discography.begin();
+                                                                      disc != artist.discography.end();
+                                                                    ++disc)
+  {
+    AddArtistDiscography(artist.idArtist, disc->first, disc->second);
+  }
+
+  return true;
+}
+
 int CMusicDatabase::AddArtist(const CStdString& strArtist, const CStdString& strMusicBrainzArtistID)
 {
   CStdString strSQL;
@@ -631,7 +1083,7 @@ int CMusicDatabase::AddArtist(const CStdString& strArtist, const CStdString& str
 
       // 1.b) No match on MusicBrainz ID. Look for a previously added artist with no MusicBrainz ID
       //     and update that if it exists.
-      strSQL = PrepareSQL("SELECT * FROM artist WHERE strArtist = '%s' AND strMusicBrainzArtistID IS NULL", strArtist.c_str());
+      strSQL = PrepareSQL("SELECT * FROM artist WHERE strArtist LIKE '%s' AND strMusicBrainzArtistID IS NULL", strArtist.c_str());
       m_pDS->query(strSQL.c_str());
       if (m_pDS->num_rows() > 0)
       {
@@ -652,7 +1104,7 @@ int CMusicDatabase::AddArtist(const CStdString& strArtist, const CStdString& str
     }
     else
     {
-      strSQL = PrepareSQL("SELECT * FROM artist WHERE strArtist = '%s'",
+      strSQL = PrepareSQL("SELECT * FROM artist WHERE strArtist LIKE '%s'",
                           strArtist.c_str());
 
       m_pDS->query(strSQL.c_str());
@@ -686,22 +1138,149 @@ int CMusicDatabase::AddArtist(const CStdString& strArtist, const CStdString& str
   return -1;
 }
 
-bool CMusicDatabase::AddSongArtist(int idArtist, int idSong, std::string joinPhrase, bool featured, int iOrder)
+int  CMusicDatabase::UpdateArtist(int idArtist,
+                                  const CStdString& strArtist, const CStdString& strMusicBrainzArtistID,
+                                  const CStdString& strBorn, const CStdString& strFormed,
+                                  const CStdString& strGenres, const CStdString& strMoods,
+                                  const CStdString& strStyles, const CStdString& strInstruments,
+                                  const CStdString& strBiography, const CStdString& strDied,
+                                  const CStdString& strDisbanded, const CStdString& strYearsActive,
+                                  const CStdString& strImage, const CStdString& strFanart)
 {
+  CScraperUrl thumbURL;
+  CFanart fanart;
+  std::vector<std::pair<CStdString,CStdString> > discography;
+  if (idArtist < 0)
+    return -1;
+
   CStdString strSQL;
-  strSQL=PrepareSQL("replace into song_artist (idArtist, idSong, strJoinPhrase, boolFeatured, iOrder) values(%i,%i,'%s',%i,%i)",
-                    idArtist, idSong, joinPhrase.c_str(), featured == true ? 1 : 0, iOrder);
+  strSQL = PrepareSQL("UPDATE artist SET "
+                      " strArtist = '%s', "
+                      " strBorn = '%s', strFormed = '%s', strGenres = '%s', "
+                      " strMoods = '%s', strStyles = '%s', strInstruments = '%s', "
+                      " strBiography = '%s', strDied = '%s', strDisbanded = '%s', "
+                      " strYearsActive = '%s', strImage = '%s', strFanart = '%s', "
+                      " lastScraped = '%s'",
+                      strArtist.c_str(), /* strMusicBrainzArtistID.c_str(), */
+                      strBorn.c_str(), strFormed.c_str(), strGenres.c_str(),
+                      strMoods.c_str(), strStyles.c_str(), strInstruments.c_str(),
+                      strBiography.c_str(), strDied.c_str(), strDisbanded.c_str(),
+                      strYearsActive.c_str(), strImage.c_str(), strFanart.c_str(),
+                      CDateTime::GetCurrentDateTime().GetAsDBDateTime().c_str());
+  if (strMusicBrainzArtistID.empty())
+    strSQL += PrepareSQL(", strMusicBrainzArtistID = NULL");
+  else
+    strSQL += PrepareSQL(", strMusicBrainzArtistID = '%s'", strMusicBrainzArtistID.c_str());
+
+  strSQL += PrepareSQL(" WHERE idArtist = %i", idArtist);
+
+  bool status = ExecuteQuery(strSQL);
+  if (status)
+    AnnounceUpdate("artist", idArtist);
+  return idArtist;
+}
+
+bool CMusicDatabase::GetArtist(int idArtist, CArtist &artist, bool fetchAll /* = false */)
+{
+  try
+  {
+    if (NULL == m_pDB.get()) return false;
+    if (NULL == m_pDS.get()) return false;
+
+    if (idArtist == -1)
+      return false; // not in the database
+
+    CStdString strSQL;
+    if (fetchAll)
+      strSQL = PrepareSQL("SELECT * FROM artistview LEFT JOIN discography ON artistview.idArtist = discography.idArtist WHERE artistview.idArtist = %i", idArtist);
+    else
+      strSQL = PrepareSQL("SELECT * FROM artistview WHERE artistview.idArtist = %i", idArtist);
+
+    if (!m_pDS->query(strSQL.c_str())) return false;
+    if (m_pDS->num_rows() == 0)
+    {
+      m_pDS->close();
+      return false;
+    }
+
+    int discographyOffset = artist_enumCount;
+
+    artist.discography.clear();
+    artist = GetArtistFromDataset(m_pDS.get()->get_sql_record(), 0, fetchAll);
+    if (fetchAll)
+    {
+      while (!m_pDS->eof())
+      {
+        const dbiplus::sql_record* const record = m_pDS.get()->get_sql_record();
+
+        artist.discography.push_back(make_pair(record->at(discographyOffset + 1).get_asString(), record->at(discographyOffset + 2).get_asString()));
+        m_pDS->next();
+      }
+    }
+    m_pDS->close(); // cleanup recordset data
+    return true;
+  }
+  catch (...)
+  {
+    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idArtist);
+  }
+
+  return false;
+}
+
+bool CMusicDatabase::HasArtistBeenScraped(int idArtist)
+{
+  CStdString strSQL = PrepareSQL("SELECT idArtist FROM artist WHERE idArtist = %i AND lastScraped IS NULL", idArtist);
+  return GetSingleValue(strSQL).empty();
+}
+
+bool CMusicDatabase::ClearArtistLastScrapedTime(int idArtist)
+{
+  CStdString strSQL = PrepareSQL("UPDATE artist SET lastScraped = NULL WHERE idArtist = %i", idArtist);
+  return ExecuteQuery(strSQL);
+}
+
+int CMusicDatabase::AddArtistDiscography(int idArtist, const CStdString& strAlbum, const CStdString& strYear)
+{
+  CStdString strSQL=PrepareSQL("INSERT INTO discography (idArtist, strAlbum, strYear) values(%i, '%s', '%s')",
+                               idArtist,
+                               strAlbum.c_str(),
+                               strYear.c_str());
+  return ExecuteQuery(strSQL);
+}
+
+bool CMusicDatabase::DeleteArtistDiscography(int idArtist)
+{
+  CStdString strSQL = PrepareSQL("DELETE FROM discography WHERE idArtist = %i", idArtist);
+  return ExecuteQuery(strSQL);
+}
+
+bool CMusicDatabase::AddSongArtist(int idArtist, int idSong, std::string strArtist, std::string joinPhrase, bool featured, int iOrder)
+{
+  CStdString strSQL;
+  strSQL=PrepareSQL("replace into song_artist (idArtist, idSong, strArtist, strJoinPhrase, boolFeatured, iOrder) values(%i,%i,'%s','%s',%i,%i)",
+                    idArtist, idSong, strArtist.c_str(), joinPhrase.c_str(), featured == true ? 1 : 0, iOrder);
   return ExecuteQuery(strSQL);
 };
 
-bool CMusicDatabase::AddAlbumArtist(int idArtist, int idAlbum, std::string joinPhrase, bool featured, int iOrder)
+bool CMusicDatabase::DeleteSongArtistsBySong(int idSong)
+{
+  return ExecuteQuery(PrepareSQL("DELETE FROM song_artist WHERE idSong = %i", idSong));
+}
+
+bool CMusicDatabase::AddAlbumArtist(int idArtist, int idAlbum, std::string strArtist, std::string joinPhrase, bool featured, int iOrder)
 {
   CStdString strSQL;
-  strSQL=PrepareSQL("replace into album_artist (idArtist, idAlbum, strJoinPhrase, boolFeatured, iOrder) values(%i,%i,'%s',%i,%i)",
-                    idArtist, idAlbum, joinPhrase.c_str(), featured == true ? 1 : 0, iOrder);
+  strSQL=PrepareSQL("replace into album_artist (idArtist, idAlbum, strArtist, strJoinPhrase, boolFeatured, iOrder) values(%i,%i,'%s','%s',%i,%i)",
+                    idArtist, idAlbum, strArtist.c_str(), joinPhrase.c_str(), featured == true ? 1 : 0, iOrder);
   return ExecuteQuery(strSQL);
 };
 
+bool CMusicDatabase::DeleteAlbumArtistsByAlbum(int idAlbum)
+{
+  return ExecuteQuery(PrepareSQL("DELETE FROM album_artist WHERE idAlbum = %i", idAlbum));
+}
+
 bool CMusicDatabase::AddSongGenre(int idGenre, int idSong, int iOrder)
 {
   if (idGenre == -1 || idSong == -1)
@@ -710,7 +1289,13 @@ bool CMusicDatabase::AddSongGenre(int idGenre, int idSong, int iOrder)
   CStdString strSQL;
   strSQL=PrepareSQL("replace into song_genre (idGenre, idSong, iOrder) values(%i,%i,%i)",
                     idGenre, idSong, iOrder);
-  return ExecuteQuery(strSQL);};
+  return ExecuteQuery(strSQL);
+};
+
+bool CMusicDatabase::DeleteSongGenresBySong(int idSong)
+{
+  return ExecuteQuery(PrepareSQL("DELETE FROM song_genre WHERE idSong = %i", idSong));
+}
 
 bool CMusicDatabase::AddAlbumGenre(int idGenre, int idAlbum, int iOrder)
 {
@@ -723,6 +1308,11 @@ bool CMusicDatabase::AddAlbumGenre(int idGenre, int idAlbum, int iOrder)
   return ExecuteQuery(strSQL);
 };
 
+bool CMusicDatabase::DeleteAlbumGenresByAlbum(int idAlbum)
+{
+  return ExecuteQuery(PrepareSQL("DELETE FROM album_genre WHERE idAlbum = %i", idAlbum));
+}
+
 bool CMusicDatabase::GetAlbumsByArtist(int idArtist, bool includeFeatured, std::vector<int> &albums)
 {
   try 
@@ -964,47 +1554,41 @@ int CMusicDatabase::AddPath(const CStdString& strPath1)
   return -1;
 }
 
-CSong CMusicDatabase::GetSongFromDataset(bool bWithMusicDbPath/*=false*/)
+CSong CMusicDatabase::GetSongFromDataset()
+{
+  return GetSongFromDataset(m_pDS->get_sql_record());
+}
+
+CSong CMusicDatabase::GetSongFromDataset(const dbiplus::sql_record* const record, int offset /* = 0 */)
 {
   CSong song;
-  song.idSong = m_pDS->fv(song_idSong).get_asInt();
+  song.idSong = record->at(offset + song_idSong).get_asInt();
   // get the full artist string
-  song.artist = StringUtils::Split(m_pDS->fv(song_strArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  song.artist = StringUtils::Split(record->at(offset + song_strArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
   // and the full genre string
-  song.genre = StringUtils::Split(m_pDS->fv(song_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  song.genre = StringUtils::Split(record->at(offset + song_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
   // and the rest...
-  song.strAlbum = m_pDS->fv(song_strAlbum).get_asString();
-  song.idAlbum = m_pDS->fv(song_idAlbum).get_asInt();
-  song.iTrack = m_pDS->fv(song_iTrack).get_asInt() ;
-  song.iDuration = m_pDS->fv(song_iDuration).get_asInt() ;
-  song.iYear = m_pDS->fv(song_iYear).get_asInt() ;
-  song.strTitle = m_pDS->fv(song_strTitle).get_asString();
-  song.iTimesPlayed = m_pDS->fv(song_iTimesPlayed).get_asInt();
-  song.lastPlayed.SetFromDBDateTime(m_pDS->fv(song_lastplayed).get_asString());
-  song.iStartOffset = m_pDS->fv(song_iStartOffset).get_asInt();
-  song.iEndOffset = m_pDS->fv(song_iEndOffset).get_asInt();
-  song.strMusicBrainzTrackID = m_pDS->fv(song_strMusicBrainzTrackID).get_asString();
-  song.rating = m_pDS->fv(song_rating).get_asChar();
-  song.strComment = m_pDS->fv(song_comment).get_asString();
-  song.iKaraokeNumber = m_pDS->fv(song_iKarNumber).get_asInt();
-  song.strKaraokeLyrEncoding = m_pDS->fv(song_strKarEncoding).get_asString();
-  song.iKaraokeDelay = m_pDS->fv(song_iKarDelay).get_asInt();
-  song.bCompilation = m_pDS->fv(song_bCompilation).get_asInt() == 1;
-  song.albumArtist = StringUtils::Split(m_pDS->fv(song_strAlbumArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  song.strAlbum = record->at(offset + song_strAlbum).get_asString();
+  song.idAlbum = record->at(offset + song_idAlbum).get_asInt();
+  song.iTrack = record->at(offset + song_iTrack).get_asInt() ;
+  song.iDuration = record->at(offset + song_iDuration).get_asInt() ;
+  song.iYear = record->at(offset + song_iYear).get_asInt() ;
+  song.strTitle = record->at(offset + song_strTitle).get_asString();
+  song.iTimesPlayed = record->at(offset + song_iTimesPlayed).get_asInt();
+  song.lastPlayed.SetFromDBDateTime(record->at(offset + song_lastplayed).get_asString());
+  song.iStartOffset = record->at(offset + song_iStartOffset).get_asInt();
+  song.iEndOffset = record->at(offset + song_iEndOffset).get_asInt();
+  song.strMusicBrainzTrackID = record->at(offset + song_strMusicBrainzTrackID).get_asString();
+  song.rating = record->at(offset + song_rating).get_asChar();
+  song.strComment = record->at(offset + song_comment).get_asString();
+  song.iKaraokeNumber = record->at(offset + song_iKarNumber).get_asInt();
+  song.strKaraokeLyrEncoding = record->at(offset + song_strKarEncoding).get_asString();
+  song.iKaraokeDelay = record->at(offset + song_iKarDelay).get_asInt();
+  song.bCompilation = record->at(offset + song_bCompilation).get_asInt() == 1;
+  song.albumArtist = StringUtils::Split(record->at(offset + song_strAlbumArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
 
   // Get filename with full path
-  if (!bWithMusicDbPath)
-    song.strFileName = URIUtils::AddFileToFolder(m_pDS->fv(song_strPath).get_asString(), m_pDS->fv(song_strFileName).get_asString());
-  else
-  {
-    CStdString strFileName = m_pDS->fv(song_strFileName).get_asString();
-    CStdString strExt = URIUtils::GetExtension(strFileName);
-    song.strFileName = StringUtils::Format("musicdb://albums/%ld/%ld%s",
-                                           m_pDS->fv(song_idAlbum).get_asInt(),
-                                           m_pDS->fv(song_idSong).get_asInt(),
-                                           strExt.c_str());
-  }
-
+  song.strFileName = URIUtils::AddFileToFolder(record->at(song_strPath).get_asString(), record->at(song_strFileName).get_asString());
   return song;
 }
 
@@ -1057,69 +1641,69 @@ void CMusicDatabase::GetFileItemFromDataset(const dbiplus::sql_record* const rec
   }
 }
 
-CAlbum CMusicDatabase::GetAlbumFromDataset(dbiplus::Dataset* pDS, bool imageURL /* = false*/)
+CAlbum CMusicDatabase::GetAlbumFromDataset(dbiplus::Dataset* pDS, int offset /* = 0 */, bool imageURL /* = false*/)
 {
-  return GetAlbumFromDataset(pDS->get_sql_record(), imageURL);
+  return GetAlbumFromDataset(pDS->get_sql_record(), offset, imageURL);
 }
 
-CAlbum CMusicDatabase::GetAlbumFromDataset(const dbiplus::sql_record* const record, bool imageURL /* = false*/)
+CAlbum CMusicDatabase::GetAlbumFromDataset(const dbiplus::sql_record* const record, int offset /* = 0 */, bool imageURL /* = false*/)
 {
   CAlbum album;
-  album.idAlbum = record->at(album_idAlbum).get_asInt();
-  album.strAlbum = record->at(album_strAlbum).get_asString();
+  album.idAlbum = record->at(offset + album_idAlbum).get_asInt();
+  album.strAlbum = record->at(offset + album_strAlbum).get_asString();
   if (album.strAlbum.empty())
     album.strAlbum = g_localizeStrings.Get(1050);
-  album.strMusicBrainzAlbumID = record->at(album_strMusicBrainzAlbumID).get_asString();
-  album.artist = StringUtils::Split(record->at(album_strArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  album.genre = StringUtils::Split(record->at(album_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  album.iYear = record->at(album_iYear).get_asInt();
+  album.strMusicBrainzAlbumID = record->at(offset + album_strMusicBrainzAlbumID).get_asString();
+  album.artist = StringUtils::Split(record->at(offset + album_strArtists).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  album.genre = StringUtils::Split(record->at(offset + album_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  album.iYear = record->at(offset + album_iYear).get_asInt();
   if (imageURL)
-    album.thumbURL.ParseString(record->at(album_strThumbURL).get_asString());
-  album.iRating = record->at(album_iRating).get_asInt();
-  album.iYear = record->at(album_iYear).get_asInt();
-  album.strReview = record->at(album_strReview).get_asString();
-  album.styles = StringUtils::Split(record->at(album_strStyles).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  album.moods = StringUtils::Split(record->at(album_strMoods).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  album.themes = StringUtils::Split(record->at(album_strThemes).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  album.strLabel = record->at(album_strLabel).get_asString();
-  album.strType = record->at(album_strType).get_asString();
-  album.bCompilation = record->at(album_bCompilation).get_asInt() == 1;
-  album.iTimesPlayed = record->at(album_iTimesPlayed).get_asInt();
+    album.thumbURL.ParseString(record->at(offset + album_strThumbURL).get_asString());
+  album.iRating = record->at(offset + album_iRating).get_asInt();
+  album.iYear = record->at(offset + album_iYear).get_asInt();
+  album.strReview = record->at(offset + album_strReview).get_asString();
+  album.styles = StringUtils::Split(record->at(offset + album_strStyles).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  album.moods = StringUtils::Split(record->at(offset + album_strMoods).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  album.themes = StringUtils::Split(record->at(offset + album_strThemes).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  album.strLabel = record->at(offset + album_strLabel).get_asString();
+  album.strType = record->at(offset + album_strType).get_asString();
+  album.bCompilation = record->at(offset + album_bCompilation).get_asInt() == 1;
+  album.iTimesPlayed = record->at(offset + album_iTimesPlayed).get_asInt();
   return album;
 }
 
-CArtistCredit CMusicDatabase::GetAlbumArtistCreditFromDataset(const dbiplus::sql_record* const record)
+CArtistCredit CMusicDatabase::GetArtistCreditFromDataset(const dbiplus::sql_record* const record, int offset /* = 0 */)
 {
   CArtistCredit artistCredit;
-  artistCredit.idArtist = record->at(album_idArtist).get_asInt();
-  artistCredit.m_strArtist = record->at(album_strArtist).get_asString();
-  artistCredit.m_strMusicBrainzArtistID = record->at(album_strMusicBrainzArtistID).get_asString();
-  artistCredit.m_boolFeatured = record->at(album_bFeatured).get_asBool();
-  artistCredit.m_strJoinPhrase = record->at(album_strJoinPhrase).get_asString();
+  artistCredit.idArtist = record->at(offset + artistCredit_idArtist).get_asInt();
+  artistCredit.m_strArtist = record->at(offset + artistCredit_strArtist).get_asString();
+  artistCredit.m_strMusicBrainzArtistID = record->at(offset + artistCredit_strMusicBrainzArtistID).get_asString();
+  artistCredit.m_boolFeatured = record->at(offset + artistCredit_bFeatured).get_asBool();
+  artistCredit.m_strJoinPhrase = record->at(offset + artistCredit_strJoinPhrase).get_asString();
   return artistCredit;
 }
 
-CArtist CMusicDatabase::GetArtistFromDataset(dbiplus::Dataset* pDS, bool needThumb)
+CArtist CMusicDatabase::GetArtistFromDataset(dbiplus::Dataset* pDS, int offset /* = 0 */, bool needThumb /* = true */)
 {
-  return GetArtistFromDataset(pDS->get_sql_record(), needThumb);
+  return GetArtistFromDataset(pDS->get_sql_record(), offset, needThumb);
 }
 
-CArtist CMusicDatabase::GetArtistFromDataset(const dbiplus::sql_record* const record, bool needThumb /* = true */)
+CArtist CMusicDatabase::GetArtistFromDataset(const dbiplus::sql_record* const record, int offset /* = 0 */, bool needThumb /* = true */)
 {
   CArtist artist;
-  artist.idArtist = record->at(artist_idArtist).get_asInt();
-  artist.strArtist = record->at(artist_strArtist).get_asString();
-  artist.strMusicBrainzArtistID = record->at(artist_strMusicBrainzArtistID).get_asString();
-  artist.genre = StringUtils::Split(record->at(artist_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  artist.strBiography = record->at(artist_strBiography).get_asString();
-  artist.styles = StringUtils::Split(record->at(artist_strStyles).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  artist.moods = StringUtils::Split(record->at(artist_strMoods).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  artist.strBorn = record->at(artist_strBorn).get_asString();
-  artist.strFormed = record->at(artist_strFormed).get_asString();
-  artist.strDied = record->at(artist_strDied).get_asString();
-  artist.strDisbanded = record->at(artist_strDisbanded).get_asString();
-  artist.yearsActive = StringUtils::Split(record->at(artist_strYearsActive).get_asString(), g_advancedSettings.m_musicItemSeparator);
-  artist.instruments = StringUtils::Split(record->at(artist_strInstruments).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  artist.idArtist = record->at(offset + artist_idArtist).get_asInt();
+  artist.strArtist = record->at(offset + artist_strArtist).get_asString();
+  artist.strMusicBrainzArtistID = record->at(offset + artist_strMusicBrainzArtistID).get_asString();
+  artist.genre = StringUtils::Split(record->at(offset + artist_strGenres).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  artist.strBiography = record->at(offset + artist_strBiography).get_asString();
+  artist.styles = StringUtils::Split(record->at(offset + artist_strStyles).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  artist.moods = StringUtils::Split(record->at(offset + artist_strMoods).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  artist.strBorn = record->at(offset + artist_strBorn).get_asString();
+  artist.strFormed = record->at(offset + artist_strFormed).get_asString();
+  artist.strDied = record->at(offset + artist_strDied).get_asString();
+  artist.strDisbanded = record->at(offset + artist_strDisbanded).get_asString();
+  artist.yearsActive = StringUtils::Split(record->at(offset + artist_strYearsActive).get_asString(), g_advancedSettings.m_musicItemSeparator);
+  artist.instruments = StringUtils::Split(record->at(offset + artist_strInstruments).get_asString(), g_advancedSettings.m_musicItemSeparator);
 
   if (needThumb)
   {
@@ -1131,49 +1715,44 @@ CArtist CMusicDatabase::GetArtistFromDataset(const dbiplus::sql_record* const re
   return artist;
 }
 
+CSong CMusicDatabase::GetAlbumInfoSongFromDataset(const dbiplus::sql_record* const record, int offset /* = 0 */)
+{
+  CSong song;
+  song.iTrack = record->at(offset + albumInfoSong_iTrack).get_asInt();
+  song.iDuration = record->at(offset + albumInfoSong_iDuration).get_asInt();
+  song.strTitle = record->at(offset + albumInfoSong_strTitle).get_asString();
+  return song;
+}
+
 bool CMusicDatabase::GetSongByFileName(const CStdString& strFileName, CSong& song, int startOffset)
 {
-  try
+  song.Clear();
+  CURL url(strFileName);
+
+  if (url.GetProtocol()=="musicdb")
   {
-    song.Clear();
-    CURL url(strFileName);
+    CStdString strFile = URIUtils::GetFileName(strFileName);
+    URIUtils::RemoveExtension(strFile);
+    return GetSong(atol(strFile.c_str()), song);
+  }
 
-    if (url.GetProtocol()=="musicdb")
-    {
-      CStdString strFile = URIUtils::GetFileName(strFileName);
-      URIUtils::RemoveExtension(strFile);
-      return GetSong(atol(strFile.c_str()), song);
-    }
+  CStdString strPath = URIUtils::GetDirectory(strFileName);
+  URIUtils::AddSlashAtEnd(strPath);
 
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
+  if (NULL == m_pDB.get()) return false;
+  if (NULL == m_pDS.get()) return false;
 
-    CStdString strPath = URIUtils::GetDirectory(strFileName);
-    URIUtils::AddSlashAtEnd(strPath);
+  DWORD crc = ComputeCRC(strFileName);
 
-    DWORD crc = ComputeCRC(strFileName);
-    CStdString strSQL=PrepareSQL("select * from songview "
-                                "where dwFileNameCRC='%ul' and strPath='%s'"
-                                , crc,
-                                strPath.c_str());
-    if (startOffset)
-      strSQL += PrepareSQL(" AND iStartOffset=%i", startOffset);
+  CStdString strSQL = PrepareSQL("select idSong from songview "
+                                 "where dwFileNameCRC='%ul' and strPath='%s'",
+                                 crc, strPath.c_str());
+  if (startOffset)
+    strSQL += PrepareSQL(" AND iStartOffset=%i", startOffset);
 
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound == 0)
-    {
-      m_pDS->close();
-      return false;
-    }
-    song = GetSongFromDataset();
-    m_pDS->close(); // cleanup recordset data
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s(%s) failed", __FUNCTION__, strFileName.c_str());
-  }
+  int idSong = (int)strtol(GetSingleValue(strSQL).c_str(), NULL, 10);
+  if (idSong > 0)
+    return GetSong(idSong, song);
 
   return false;
 }
@@ -1194,278 +1773,84 @@ int CMusicDatabase::GetAlbumIdByPath(const CStdString& strPath)
   }
   catch (...)
   {
-    CLog::Log(LOGERROR, "%s(%s) failed", __FUNCTION__, strPath.c_str());
-  }
-
-  return false;
-}
-
-int CMusicDatabase::GetSongByArtistAndAlbumAndTitle(const CStdString& strArtist, const CStdString& strAlbum, const CStdString& strTitle)
-{
-  try
-  {
-    CStdString strSQL=PrepareSQL("select idSong from songview "
-                                "where strArtist like '%s' and strAlbum like '%s' and "
-                                "strTitle like '%s'",strArtist.c_str(),strAlbum.c_str(),strTitle.c_str());
-
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound == 0)
-    {
-      m_pDS->close();
-      return -1;
-    }
-    int lResult = m_pDS->fv(0).get_asInt();
-    m_pDS->close(); // cleanup recordset data
-    return lResult;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s (%s,%s,%s) failed", __FUNCTION__, strArtist.c_str(),strAlbum.c_str(),strTitle.c_str());
-  }
-
-  return -1;
-}
-
-bool CMusicDatabase::GetSong(int idSong, CSong& song)
-{
-  try
-  {
-    song.Clear();
-
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString strSQL=PrepareSQL("select * from songview "
-                                "where idSong=%i"
-                                , idSong);
-
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound == 0)
-    {
-      m_pDS->close();
-      return false;
-    }
-    song = GetSongFromDataset();
-    m_pDS->close(); // cleanup recordset data
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idSong);
-  }
-
-  return false;
-}
-
-bool CMusicDatabase::SearchArtists(const CStdString& search, CFileItemList &artists)
-{
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString strVariousArtists = g_localizeStrings.Get(340).c_str();
-    CStdString strSQL;
-    if (search.size() >= MIN_FULL_SEARCH_LENGTH)
-      strSQL=PrepareSQL("select * from artist "
-                                "where (strArtist like '%s%%' or strArtist like '%% %s%%') and strArtist <> '%s' "
-                                , search.c_str(), search.c_str(), strVariousArtists.c_str() );
-    else
-      strSQL=PrepareSQL("select * from artist "
-                                "where strArtist like '%s%%' and strArtist <> '%s' "
-                                , search.c_str(), strVariousArtists.c_str() );
-
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    if (m_pDS->num_rows() == 0)
-    {
-      m_pDS->close();
-      return false;
-    }
-
-    CStdString artistLabel(g_localizeStrings.Get(557)); // Artist
-    while (!m_pDS->eof())
-    {
-      CStdString path = StringUtils::Format("musicdb://artists/%ld/", m_pDS->fv(0).get_asInt());
-      CFileItemPtr pItem(new CFileItem(path, true));
-      CStdString label = StringUtils::Format("[%s] %s", artistLabel.c_str(), m_pDS->fv(1).get_asString().c_str());
-      pItem->SetLabel(label);
-      label = StringUtils::Format("A %s", m_pDS->fv(1).get_asString().c_str()); // sort label is stored in the title tag
-      pItem->GetMusicInfoTag()->SetTitle(label);
-      pItem->GetMusicInfoTag()->SetDatabaseId(m_pDS->fv(0).get_asInt(), "artist");
-      artists.Add(pItem);
-      m_pDS->next();
-    }
-
-    m_pDS->close(); // cleanup recordset data
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
-  }
-
-  return false;
-}
-
-bool CMusicDatabase::GetAlbumInfo(int idAlbum, CAlbum &info, VECSONGS* songs, bool scrapedInfo /* = false */)
-{
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS2.get()) return false;
-
-    if (idAlbum == -1)
-      return false; // not in the database
-
-    CStdString strSQL=PrepareSQL("SELECT albumview.*, album_artist.idArtist, artist.strArtist, artist.strMusicBrainzArtistID, album_artist.boolFeatured, album_artist.strJoinPhrase FROM albumview JOIN album_artist ON albumview.idAlbum = album_artist.idAlbum JOIN artist ON album_artist.idArtist = artist.idArtist WHERE albumview.idAlbum = %ld", idAlbum);
-    if (scrapedInfo) // require additional information
-      strSQL += " and idAlbumInfo > 0";
-
-    if (!m_pDS2->query(strSQL.c_str())) return false;
-    if (m_pDS2->num_rows() == 0)
-    {
-      m_pDS2->close();
-      return false;
-    }
-
-    info = GetAlbumFromDataset(m_pDS2.get()->get_sql_record(), true); // true to grab the thumburl rather than the thumb
-    int idAlbumInfo = m_pDS2->fv(album_idAlbumInfo).get_asInt();
-    while (!m_pDS2->eof())
-    {
-      if (!info.artistCredits.empty() && (m_pDS2->fv(album_idArtist).get_asInt() != info.artistCredits.back().idArtist))
-      {
-        info.artistCredits.push_back(GetAlbumArtistCreditFromDataset(m_pDS2.get()->get_sql_record()));
-      }
-      m_pDS2->next();
-    }
-    if (songs)
-      GetAlbumInfoSongs(idAlbumInfo, *songs);
-    
-    m_pDS2->close(); // cleanup recordset data
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idAlbum);
-  }
-
-  return false;
-}
-
-bool CMusicDatabase::HasAlbumInfo(int idAlbum)
-{
-  try
-  {
-    if (idAlbum == -1)
-      return false; // not in the database
-
-    CStdString strSQL=PrepareSQL("select * from albuminfo where idAlbum = %ld", idAlbum);
-
-    if (!m_pDS2->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS2->num_rows();
-    m_pDS2->close();
-    return iRowsFound > 0;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idAlbum);
+    CLog::Log(LOGERROR, "%s(%s) failed", __FUNCTION__, strPath.c_str());
   }
 
   return false;
 }
 
-bool CMusicDatabase::DeleteAlbumInfo(int idAlbum)
-{
-  if (idAlbum == -1)
-    return false; // not in the database
-  return ExecuteQuery(PrepareSQL("delete from albuminfo where idAlbum=%i",idAlbum));
-}
-
-bool CMusicDatabase::GetArtistInfo(int idArtist, CArtist &info, bool needAll)
+int CMusicDatabase::GetSongByArtistAndAlbumAndTitle(const CStdString& strArtist, const CStdString& strAlbum, const CStdString& strTitle)
 {
   try
   {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS2.get()) return false;
-
-    if (idArtist == -1)
-      return false; // not in the database
-
-    CStdString strSQL=PrepareSQL("SELECT * FROM artistview WHERE idArtist = %i", idArtist);
+    CStdString strSQL=PrepareSQL("select idSong from songview "
+                                "where strArtists like '%s' and strAlbum like '%s' and "
+                                "strTitle like '%s'",strArtist.c_str(),strAlbum.c_str(),strTitle.c_str());
 
-    if (!m_pDS2->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS2->num_rows();
-    if (iRowsFound != 0)
+    if (!m_pDS->query(strSQL.c_str())) return false;
+    int iRowsFound = m_pDS->num_rows();
+    if (iRowsFound == 0)
     {
-      info = GetArtistFromDataset(m_pDS2.get(),needAll);
-      if (needAll)
-      {
-        strSQL=PrepareSQL("select * from discography where idArtist=%i",idArtist);
-        m_pDS2->query(strSQL.c_str());
-        while (!m_pDS2->eof())
-        {
-          info.discography.push_back(make_pair(m_pDS2->fv("strAlbum").get_asString(),m_pDS2->fv("strYear").get_asString()));
-          m_pDS2->next();
-        }
-      }
-      m_pDS2->close(); // cleanup recordset data
-      return true;
+      m_pDS->close();
+      return -1;
     }
-    m_pDS2->close();
-    return false;
+    int lResult = m_pDS->fv(0).get_asInt();
+    m_pDS->close(); // cleanup recordset data
+    return lResult;
   }
   catch (...)
   {
-    CLog::Log(LOGERROR, "%s - (%i) failed", __FUNCTION__, idArtist);
+    CLog::Log(LOGERROR, "%s (%s,%s,%s) failed", __FUNCTION__, strArtist.c_str(),strAlbum.c_str(),strTitle.c_str());
   }
 
-  return false;
-}
-
-bool CMusicDatabase::HasArtistInfo(int idArtist)
-{
-  return strtol(GetSingleValue("artistinfo", "count(idArtist)", PrepareSQL("idArtist = %ld", idArtist)), NULL, 10) > 0;
-}
-
-bool CMusicDatabase::DeleteArtistInfo(int idArtist)
-{
-  if (idArtist == -1)
-    return false; // not in the database
-
-  return ExecuteQuery(PrepareSQL("delete from artistinfo where idArtist=%i",idArtist));
+  return -1;
 }
 
-bool CMusicDatabase::GetAlbumInfoSongs(int idAlbumInfo, VECSONGS& songs)
+bool CMusicDatabase::SearchArtists(const CStdString& search, CFileItemList &artists)
 {
   try
   {
-    CStdString strSQL=PrepareSQL("select * from albuminfosong "
-                                "where idAlbumInfo=%i "
-                                "order by iTrack", idAlbumInfo);
+    if (NULL == m_pDB.get()) return false;
+    if (NULL == m_pDS.get()) return false;
 
-    if (!m_pDS2->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS2->num_rows();
-    if (iRowsFound == 0) return false;
-    while (!m_pDS2->eof())
-    {
-      CSong song;
-      song.iTrack = m_pDS2->fv("iTrack").get_asInt();
-      song.strTitle = m_pDS2->fv("strTitle").get_asString();
-      song.iDuration = m_pDS2->fv("iDuration").get_asInt();
+    CStdString strVariousArtists = g_localizeStrings.Get(340).c_str();
+    CStdString strSQL;
+    if (search.size() >= MIN_FULL_SEARCH_LENGTH)
+      strSQL=PrepareSQL("select * from artist "
+                                "where (strArtist like '%s%%' or strArtist like '%% %s%%') and strArtist <> '%s' "
+                                , search.c_str(), search.c_str(), strVariousArtists.c_str() );
+    else
+      strSQL=PrepareSQL("select * from artist "
+                                "where strArtist like '%s%%' and strArtist <> '%s' "
+                                , search.c_str(), strVariousArtists.c_str() );
 
-      songs.push_back(song);
-      m_pDS2->next();
+    if (!m_pDS->query(strSQL.c_str())) return false;
+    if (m_pDS->num_rows() == 0)
+    {
+      m_pDS->close();
+      return false;
     }
 
-    m_pDS2->close(); // cleanup recordset data
+    CStdString artistLabel(g_localizeStrings.Get(557)); // Artist
+    while (!m_pDS->eof())
+    {
+      CStdString path = StringUtils::Format("musicdb://artists/%ld/", m_pDS->fv(0).get_asInt());
+      CFileItemPtr pItem(new CFileItem(path, true));
+      CStdString label = StringUtils::Format("[%s] %s", artistLabel.c_str(), m_pDS->fv(1).get_asString().c_str());
+      pItem->SetLabel(label);
+      label = StringUtils::Format("A %s", m_pDS->fv(1).get_asString().c_str()); // sort label is stored in the title tag
+      pItem->GetMusicInfoTag()->SetTitle(label);
+      pItem->GetMusicInfoTag()->SetDatabaseId(m_pDS->fv(0).get_asInt(), "artist");
+      artists.Add(pItem);
+      m_pDS->next();
+    }
 
+    m_pDS->close(); // cleanup recordset data
     return true;
   }
   catch (...)
   {
-    CLog::Log(LOGERROR, "%s(%i) failed", __FUNCTION__, idAlbumInfo);
+    CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
   }
 
   return false;
@@ -1920,139 +2305,6 @@ bool CMusicDatabase::SearchAlbums(const CStdString& search, CFileItemList &album
   return false;
 }
 
-int CMusicDatabase::SetAlbumInfo(int idAlbum, const CAlbum& album, const VECSONGS& songs, bool bTransaction)
-{
-  CStdString strSQL;
-  try
-  {
-    if (NULL == m_pDB.get()) return -1;
-    if (NULL == m_pDS.get()) return -1;
-
-    if (bTransaction)
-      BeginTransaction();
-
-    // delete any album info we may have
-    strSQL=PrepareSQL("delete from albuminfo where idAlbum=%i", idAlbum);
-    m_pDS->exec(strSQL.c_str());
-
-    // insert the albuminfo
-    strSQL=PrepareSQL("insert into albuminfo (idAlbumInfo,idAlbum,strMoods,strStyles,strThemes,strReview,strImage,strLabel,strType,iRating,iYear) values(NULL,%i,'%s','%s','%s','%s','%s','%s','%s',%i,%i)",
-                  idAlbum,
-                  StringUtils::Join(album.moods, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  StringUtils::Join(album.styles, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  StringUtils::Join(album.themes, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  album.strReview.c_str(),
-                  album.thumbURL.m_xml.c_str(),
-                  album.strLabel.c_str(),
-                  album.strType.c_str(),
-                  album.iRating,
-                  album.iYear);
-    m_pDS->exec(strSQL.c_str());
-    int idAlbumInfo = (int)m_pDS->lastinsertid();
-
-    if (SetAlbumInfoSongs(idAlbumInfo, songs))
-    {
-      if (bTransaction)
-        CommitTransaction();
-    }
-    else
-    {
-      if (bTransaction) // icky
-        RollbackTransaction();
-      idAlbumInfo = -1;
-    }
-
-    return idAlbumInfo;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed with query (%s)", __FUNCTION__, strSQL.c_str());
-  }
-
-  if (bTransaction)
-    RollbackTransaction();
-
-  return -1;
-}
-
-int CMusicDatabase::SetArtistInfo(int idArtist, const CArtist& artist)
-{
-  CStdString strSQL;
-  try
-  {
-    if (NULL == m_pDB.get()) return -1;
-    if (NULL == m_pDS.get()) return -1;
-
-    // delete any artist info we may have
-    strSQL=PrepareSQL("delete from artistinfo where idArtist=%i", idArtist);
-    m_pDS->exec(strSQL.c_str());
-    strSQL=PrepareSQL("delete from discography where idArtist=%i", idArtist);
-    m_pDS->exec(strSQL.c_str());
-
-    // insert the artistinfo
-    strSQL=PrepareSQL("insert into artistinfo (idArtistInfo,idArtist,strBorn,strFormed,strGenres,strMoods,strStyles,strInstruments,strBiography,strDied,strDisbanded,strYearsActive,strImage,strFanart) values(NULL,%i,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
-                  idArtist, artist.strBorn.c_str(),
-                  artist.strFormed.c_str(),
-                  StringUtils::Join(artist.genre, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  StringUtils::Join(artist.moods, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  StringUtils::Join(artist.styles, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  StringUtils::Join(artist.instruments, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  artist.strBiography.c_str(),
-                  artist.strDied.c_str(),
-                  artist.strDisbanded.c_str(),
-                  StringUtils::Join(artist.yearsActive, g_advancedSettings.m_musicItemSeparator).c_str(),
-                  artist.thumbURL.m_xml.c_str(),
-                  artist.fanart.m_xml.c_str());
-    m_pDS->exec(strSQL.c_str());
-    int idArtistInfo = (int)m_pDS->lastinsertid();
-    for (unsigned int i=0;i<artist.discography.size();++i)
-    {
-      strSQL=PrepareSQL("insert into discography (idArtist,strAlbum,strYear) values (%i,'%s','%s')",idArtist,artist.discography[i].first.c_str(),artist.discography[i].second.c_str());
-      m_pDS->exec(strSQL.c_str());
-    }
-
-    return idArtistInfo;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s -  failed with query (%s)", __FUNCTION__, strSQL.c_str());
-  }
-
-
-  return -1;
-}
-
-bool CMusicDatabase::SetAlbumInfoSongs(int idAlbumInfo, const VECSONGS& songs)
-{
-  CStdString strSQL;
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    strSQL=PrepareSQL("delete from albuminfosong where idAlbumInfo=%i", idAlbumInfo);
-    m_pDS->exec(strSQL.c_str());
-
-    for (int i = 0; i < (int)songs.size(); i++)
-    {
-      CSong song = songs[i];
-      strSQL=PrepareSQL("insert into albuminfosong (idAlbumInfoSong,idAlbumInfo,iTrack,strTitle,iDuration) values(NULL,%i,%i,'%s',%i)",
-                    idAlbumInfo,
-                    song.iTrack,
-                    song.strTitle.c_str(),
-                    song.iDuration);
-      m_pDS->exec(strSQL.c_str());
-    }
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed with query (%s)", __FUNCTION__, strSQL.c_str());
-  }
-
-  return false;
-}
-
 bool CMusicDatabase::CleanupSongsByIds(const CStdString &strSongIds)
 {
   try
@@ -2097,12 +2349,6 @@ bool CMusicDatabase::CleanupSongsByIds(const CStdString &strSongIds)
       // ok, now delete these songs + all references to them from the linked tables
       strSQL = "delete from song where idSong in " + strSongsToDelete;
       m_pDS->exec(strSQL.c_str());
-      strSQL = "delete from song_artist where idSong in " + strSongsToDelete;
-      m_pDS->exec(strSQL.c_str());
-      strSQL = "delete from song_genre where idSong in " + strSongsToDelete;
-      m_pDS->exec(strSQL.c_str());
-      strSQL = "delete from karaokedata where idSong in " + strSongsToDelete;
-      m_pDS->exec(strSQL.c_str());
       m_pDS->close();
     }
     return true;
@@ -2179,12 +2425,6 @@ bool CMusicDatabase::CleanupAlbums()
     // ok, now we can delete them and the references in the linked tables
     strSQL = "delete from album where idAlbum in " + strAlbumIds;
     m_pDS->exec(strSQL.c_str());
-    strSQL = "delete from album_artist where idAlbum in " + strAlbumIds;
-    m_pDS->exec(strSQL.c_str());
-    strSQL = "delete from album_genre where idAlbum in " + strAlbumIds;
-    m_pDS->exec(strSQL.c_str());
-    strSQL = "delete from albuminfo where idAlbum in " + strAlbumIds;
-    m_pDS->exec(strSQL.c_str());
     return true;
   }
   catch (...)
@@ -2258,14 +2498,13 @@ bool CMusicDatabase::CleanupArtists()
     // (nested queries by Bobbin007)
     // must be executed AFTER the song, album and their artist link tables are cleaned.
     // don't delete the "Various Artists" string
-    CStdString strSQL = "delete from artist where idArtist not in (select idArtist from song_artist)";
-    strSQL += " and idArtist not in (select idArtist from album_artist)";
-    CStdString strSQL2;
-    m_pDS->exec(strSQL.c_str());
-    m_pDS->exec("delete from artistinfo where idArtist not in (select idArtist from artist)");
-    m_pDS->exec("delete from album_artist where idArtist not in (select idArtist from artist)");
-    m_pDS->exec("delete from song_artist where idArtist not in (select idArtist from artist)");
-    m_pDS->exec("delete from discography where idArtist not in (select idArtist from artist)");
+
+    // Create temp table to avoid 1442 trigger hell on mysql
+    m_pDS->exec("CREATE TEMPORARY TABLE tmp_delartists (idArtist integer)");
+    m_pDS->exec("INSERT INTO tmp_delartists select idArtist from song_artist");
+    m_pDS->exec("INSERT INTO tmp_delartists select idArtist from album_artist");
+    m_pDS->exec("delete from artist where idArtist not in (select idArtist from tmp_delartists)");
+    m_pDS->exec("DROP TABLE tmp_delartists");
     return true;
   }
   catch (...)
@@ -2279,9 +2518,9 @@ bool CMusicDatabase::CleanupGenres()
 {
   try
   {
-    // Cleanup orphaned genres (ie those that don't belong to a song or an albuminfo entry)
+    // Cleanup orphaned genres (ie those that don't belong to a song or an album entry)
     // (nested queries by Bobbin007)
-    // Must be executed AFTER the song, song_genre, albuminfo and album_genre tables have been cleaned.
+    // Must be executed AFTER the song, song_genre, album and album_genre tables have been cleaned.
     CStdString strSQL = "delete from genre where idGenre not in (select idGenre from song_genre) and";
     strSQL += " idGenre not in (select idGenre from album_genre)";
     m_pDS->exec(strSQL.c_str());
@@ -2331,7 +2570,7 @@ int CMusicDatabase::Cleanup(CGUIDialogProgress *pDlgProgress)
     ret = ERROR_REORG_SONGS;
     goto error;
   }
-  // then the albums that are not linked to a song or to albuminfo, or whose path is removed
+  // then the albums that are not linked to a song or to album, or whose path is removed
   if (pDlgProgress)
   {
     pDlgProgress->SetLine(1, 326);
@@ -2413,70 +2652,6 @@ error:
   return ret;
 }
 
-void CMusicDatabase::DeleteAlbumInfo()
-{
-  // open our database
-  Open();
-  if (NULL == m_pDB.get()) return ;
-  if (NULL == m_pDS.get()) return ;
-
-  // If we are scanning for music info in the background,
-  // other writing access to the database is prohibited.
-  if (g_application.IsMusicScanning())
-  {
-    CGUIDialogOK::ShowAndGetInput(189, 14057, 0, 0);
-    return;
-  }
-
-  CStdString strSQL="select * from albuminfo,album,artist where and albuminfo.idAlbum=album.idAlbum and album.idArtist=artist.idArtist order by album.strAlbum";
-  if (!m_pDS->query(strSQL.c_str())) return ;
-  int iRowsFound = m_pDS->num_rows();
-  if (iRowsFound == 0)
-  {
-    m_pDS->close();
-    CGUIDialogOK::ShowAndGetInput(313, 425, 0, 0);
-  }
-  vector<CAlbum> vecAlbums;
-  while (!m_pDS->eof())
-  {
-    CAlbum album;
-    album.idAlbum = m_pDS->fv("album.idAlbum").get_asInt() ;
-    album.strAlbum = m_pDS->fv("album.strAlbum").get_asString();
-    album.artist = StringUtils::Split(m_pDS->fv("album.strArtists").get_asString(), g_advancedSettings.m_musicItemSeparator);
-    vecAlbums.push_back(album);
-    m_pDS->next();
-  }
-  m_pDS->close();
-
-  // Show a selectdialog that the user can select the albuminfo to delete
-  CGUIDialogSelect *pDlg = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
-  if (pDlg)
-  {
-    pDlg->SetHeading(g_localizeStrings.Get(181).c_str());
-    pDlg->Reset();
-    for (int i = 0; i < (int)vecAlbums.size(); ++i)
-    {
-      CAlbum& album = vecAlbums[i];
-      pDlg->Add(album.strAlbum + " - " + StringUtils::Join(album.artist, g_advancedSettings.m_musicItemSeparator));
-    }
-    pDlg->DoModal();
-
-    // and wait till user selects one
-    int iSelectedAlbum = pDlg->GetSelectedLabel();
-    if (iSelectedAlbum < 0)
-    {
-      vecAlbums.erase(vecAlbums.begin(), vecAlbums.end());
-      return ;
-    }
-
-    CAlbum& album = vecAlbums[iSelectedAlbum];
-    strSQL=PrepareSQL("delete from albuminfo where albuminfo.idAlbum=%i", album.idAlbum);
-    if (!m_pDS->exec(strSQL.c_str())) return ;
-
-    vecAlbums.erase(vecAlbums.begin(), vecAlbums.end());
-  }
-}
-
 bool CMusicDatabase::LookupCDDBInfo(bool bRequery/*=false*/)
 {
 #ifdef HAS_DVD_DRIVE
@@ -2597,7 +2772,7 @@ void CMusicDatabase::DeleteCDDBInfo()
     CGUIDialogOK::ShowAndGetInput(313, 426, 0, 0);
     return ;
   }
-  // Show a selectdialog that the user can select the albuminfo to delete
+  // Show a selectdialog that the user can select the album to delete
   CGUIDialogSelect *pDlg = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
   if (pDlg)
   {
@@ -3838,7 +4013,149 @@ bool CMusicDatabase::UpdateOldVersion(int version)
     m_pDS->exec("DROP INDEX idxSong6 ON song");
     m_pDS->exec("CREATE INDEX idxSong6 on song( idPath, strFileName(255) )");
   }
-    
+
+  if (version < 39)
+  {
+    m_pDS->exec("CREATE TABLE album_new "
+                "(idAlbum integer primary key, "
+                " strAlbum varchar(256), strMusicBrainzAlbumID text, "
+                " strArtists text, strGenres text, "
+                " iYear integer, idThumb integer, "
+                " bCompilation integer not null default '0', "
+                " strMoods text, strStyles text, strThemes text, "
+                " strReview text, strImage text, strLabel text, "
+                " strType text, "
+                " iRating integer, "
+                " lastScraped varchar(20) default NULL, "
+                " dateAdded varchar (20) default NULL)");
+    m_pDS->exec("INSERT INTO album_new "
+                "(idAlbum, "
+                " strAlbum, strMusicBrainzAlbumID, "
+                " strArtists, strGenres, "
+                " iYear, idThumb, "
+                " bCompilation, "
+                " strMoods, strStyles, strThemes, "
+                " strReview, strImage, strLabel, "
+                " strType, "
+                " iRating) "
+                " SELECT "
+                " album.idAlbum, "
+                " strAlbum, strMusicBrainzAlbumID, "
+                " strArtists, strGenres, "
+                " album.iYear, idThumb, "
+                " bCompilation, "
+                " strMoods, strStyles, strThemes, "
+                " strReview, strImage, strLabel, "
+                " strType, iRating "
+                " FROM album LEFT JOIN albuminfo ON album.idAlbum = albuminfo.idAlbum");
+    m_pDS->exec("UPDATE albuminfosong SET idAlbumInfo = (SELECT idAlbum FROM albuminfo WHERE albuminfo.idAlbumInfo = albuminfosong.idAlbumInfo)");
+    m_pDS->exec("CREATE INDEX idxAlbumInfoSong_1 ON albuminfosong ( idAlbumInfo )\n");
+    m_pDS->exec(PrepareSQL("UPDATE album_new SET lastScraped='%s' WHERE idAlbum IN (SELECT idAlbum FROM albuminfo)", CDateTime::GetCurrentDateTime().GetAsDBDateTime().c_str()));
+    m_pDS->exec("DROP TABLE album");
+    m_pDS->exec("DROP TABLE albuminfo");
+    m_pDS->exec("ALTER TABLE album_new RENAME TO album");
+  }
+  if (version < 40)
+  {
+    m_pDS->exec("CREATE TABLE artist_new ( idArtist integer primary key, "
+                " strArtist varchar(256), strMusicBrainzArtistID text, "
+                " strBorn text, strFormed text, strGenres text, strMoods text, "
+                " strStyles text, strInstruments text, strBiography text, "
+                " strDied text, strDisbanded text, strYearsActive text, "
+                " strImage text, strFanart text, "
+                " lastScraped varchar(20) default NULL, "
+                " dateAdded varchar (20) default NULL)");
+    m_pDS->exec("INSERT INTO artist_new "
+                "(idArtist, strArtist, strMusicBrainzArtistID, "
+                " strBorn, strFormed, strGenres, strMoods, "
+                " strStyles , strInstruments , strBiography , "
+                " strDied, strDisbanded, strYearsActive, "
+                " strImage, strFanart) "
+                " SELECT "
+                " artist.idArtist, "
+                " strArtist, strMusicBrainzArtistID, "
+                " strBorn, strFormed, strGenres, strMoods, "
+                " strStyles, strInstruments, strBiography, "
+                " strDied, strDisbanded, strYearsActive, "
+                " strImage, strFanart "
+                " FROM artist "
+                " LEFT JOIN artistinfo ON artist.idArtist = artistinfo.idArtist");
+    m_pDS->exec(PrepareSQL("UPDATE artist_new SET lastScraped='%s' WHERE idArtist IN (SELECT idArtist FROM artistinfo)", CDateTime::GetCurrentDateTime().GetAsDBDateTime().c_str()));
+    m_pDS->exec("DROP TABLE artist");
+    m_pDS->exec("DROP TABLE artistinfo");
+    m_pDS->exec("ALTER TABLE artist_new RENAME TO artist");
+    m_pDS->exec("CREATE INDEX idxDiscography_1 ON discography ( idArtist )\n");
+  }
+  if (version < 42)
+  {
+    m_pDS->exec("ALTER TABLE album_artist ADD strArtist text\n");
+    m_pDS->exec("ALTER TABLE song_artist ADD strArtist text\n");
+    // populate these
+    map<int, string> artists;
+    CStdString sql = "select idArtist,strArtist from artist";
+    m_pDS->query(sql.c_str());
+    while (!m_pDS->eof())
+    {
+      m_pDS2->exec(PrepareSQL("UPDATE song_artist SET strArtist='%s' where idArtist=%i", m_pDS->fv(1).get_asString().c_str(), m_pDS->fv(0).get_asInt()));
+      m_pDS2->exec(PrepareSQL("UPDATE album_artist SET strArtist='%s' where idArtist=%i", m_pDS->fv(1).get_asString().c_str(), m_pDS->fv(0).get_asInt()));
+      m_pDS->next();
+    }
+    // drop the last separator if more than one
+    m_pDS->exec("UPDATE song_artist SET strJoinPhrase = '' WHERE 100*idSong+iOrder IN (SELECT id FROM (SELECT 100*idSong+max(iOrder) AS id FROM song_artist GROUP BY idSong) AS sub)");
+    m_pDS->exec("UPDATE album_artist SET strJoinPhrase = '' WHERE 100*idAlbum+iOrder IN (SELECT id FROM (SELECT 100*idAlbum+max(iOrder) AS id FROM album_artist GROUP BY idAlbum) AS sub)");
+  }
+  if (version < 43)
+  { // (re)create triggers
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumSong");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumArtist");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumGenre");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrAlbumInfoSong");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistAlbum");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistSong");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrArtistDiscography");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongArtist");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongGenre");
+    m_pDS->exec("DROP TRIGGER IF EXISTS tgrSongKaraokedata");
+    m_pDS->exec("DROP TRIGGER IF EXISTS delete_song");
+    m_pDS->exec("DROP TRIGGER IF EXISTS delete_album");
+    m_pDS->exec("DROP TRIGGER IF EXISTS delete_artist");
+
+    m_pDS->exec("CREATE TRIGGER delete_album AFTER delete ON album FOR EACH ROW BEGIN"
+                "  DELETE FROM song WHERE song.idAlbum = old.idAlbum;"
+                "  DELETE FROM album_artist WHERE album_artist.idAlbum = old.idAlbum;"
+                "  DELETE FROM album_genre WHERE album_genre.idAlbum = old.idAlbum;"
+                "  DELETE FROM albuminfosong WHERE albuminfosong.idAlbumInfo=old.idAlbum;"
+                "  DELETE FROM art WHERE media_id=old.idAlbum AND media_type='album';"
+                " END");
+    m_pDS->exec("CREATE TRIGGER delete_artist AFTER delete ON artist FOR EACH ROW BEGIN"
+                "  DELETE FROM album_artist WHERE album_artist.idArtist = old.idArtist;"
+                "  DELETE FROM song_artist WHERE song_artist.idArtist = old.idArtist;"
+                "  DELETE FROM discography WHERE discography.idArtist = old.idArtist;"
+                "  DELETE FROM art WHERE media_id=old.idArtist AND media_type='artist';"
+                " END");
+    m_pDS->exec("CREATE TRIGGER delete_song AFTER delete ON song FOR EACH ROW BEGIN"
+                "  DELETE FROM song_artist WHERE song_artist.idSong = old.idSong;"
+                "  DELETE FROM song_genre WHERE song_genre.idSong = old.idSong;"
+                "  DELETE FROM karaokedata WHERE karaokedata.idSong = old.idSong;"
+                "  DELETE FROM art WHERE media_id=old.idSong AND media_type='song';"
+                " END");
+  }
+  if (version < 44)
+  {
+    m_pDS->exec("CREATE INDEX idxAlbum ON album(strAlbum(255))");
+    m_pDS->exec("CREATE INDEX idxAlbum_1 ON album(bCompilation)");
+    m_pDS->exec("CREATE UNIQUE INDEX idxAlbum_2 ON album(strMusicBrainzAlbumID(36))");
+
+    m_pDS->exec("CREATE INDEX idxArtist ON artist(strArtist(255))");
+    m_pDS->exec("CREATE UNIQUE INDEX idxArtist1 ON artist(strMusicBrainzArtistID(36))");
+
+    m_pDS->exec("DROP INDEX idxGenre ON genre");
+    m_pDS->exec("CREATE INDEX idxGenre ON genre(strGenre(255))");
+    m_pDS->exec("DROP INDEX idxPath ON path");
+    m_pDS->exec("CREATE INDEX idxPath ON path(strPath(255))");
+    m_pDS->exec("DROP INDEX idxSong ON song");
+    m_pDS->exec("CREATE INDEX idxSong ON song(strTitle(255))");
+  }
   // always recreate the views after any table change
   CreateViews();
 
@@ -3847,7 +4164,7 @@ bool CMusicDatabase::UpdateOldVersion(int version)
 
 int CMusicDatabase::GetMinVersion() const
 {
-  return 37;
+  return 44;
 }
 
 unsigned int CMusicDatabase::GetSongIDs(const Filter &filter, vector<pair<int,int> > &songIDs)
@@ -4315,13 +4632,6 @@ bool CMusicDatabase::RemoveSongsFromPath(const CStdString &path1, MAPSONGS& song
       // and delete all songs, and anything linked to them
       sql = "delete from song where idSong in (" + StringUtils::Join(songIds, ",") + ")";
       m_pDS->exec(sql.c_str());
-      sql = "delete from song_artist where idSong in (" + StringUtils::Join(songIds, ",") + ")";
-      m_pDS->exec(sql.c_str());
-      sql = "delete from song_genre where idSong in (" + StringUtils::Join(songIds, ",") + ")";
-      m_pDS->exec(sql.c_str());
-      sql = "delete from karaokedata where idSong in (" + StringUtils::Join(songIds, ",") + ")";
-      m_pDS->exec(sql.c_str());
-
     }
     // and remove the path as well (it'll be re-added later on with the new hash if it's non-empty)
     sql = "delete from path" + where;
@@ -4623,11 +4933,21 @@ void CMusicDatabase::ExportToXML(const CStdString &xmlFile, bool singleFiles, bo
     if (NULL == m_pDS2.get()) return;
 
     // find all albums
-    CStdString sql = "select albumview.*,albuminfo.strImage,albuminfo.idAlbumInfo from albuminfo "
-                     "join albumview on albuminfo.idAlbum=albumview.idAlbum ";
-
+    vector<int> albumIds;
+    CStdString sql = "select idAlbum FROM album WHERE lastScraped IS NOT NULL";
     m_pDS->query(sql.c_str());
 
+    int total = m_pDS->num_rows();
+    int current = 0;
+
+    albumIds.reserve(total);
+    while (!m_pDS->eof())
+    {
+      albumIds.push_back(m_pDS->fv("idAlbum").get_asInt());
+      m_pDS->next();
+    }
+    m_pDS->close();
+
     CGUIDialogProgress *progress = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
     if (progress)
     {
@@ -4640,9 +4960,6 @@ void CMusicDatabase::ExportToXML(const CStdString &xmlFile, bool singleFiles, bo
       progress->ShowProgressBar(true);
     }
 
-    int total = m_pDS->num_rows();
-    int current = 0;
-
     // create our xml document
     CXBMCTinyXML xmlDoc;
     TiXmlDeclaration decl("1.0", "UTF-8", "yes");
@@ -4655,15 +4972,12 @@ void CMusicDatabase::ExportToXML(const CStdString &xmlFile, bool singleFiles, bo
       TiXmlElement xmlMainElement("musicdb");
       pMain = xmlDoc.InsertEndChild(xmlMainElement);
     }
-    while (!m_pDS->eof())
+    for (vector<int>::iterator albumId = albumIds.begin(); albumId != albumIds.end(); ++albumId)
     {
-      CAlbum album = GetAlbumFromDataset(m_pDS.get());
-      album.thumbURL.Clear();
-      album.thumbURL.ParseString(m_pDS->fv("albuminfo.strImage").get_asString());
-      int idAlbumInfo = m_pDS->fv("albuminfo.idAlbumInfo").get_asInt();
-      GetAlbumInfoSongs(idAlbumInfo,album.songs);
+      CAlbum album;
+      GetAlbum(*albumId, album);
       CStdString strPath;
-      GetAlbumPath(album.idAlbum,strPath);
+      GetAlbumPath(*albumId, strPath);
       album.Save(pMain, "album", strPath);
       if (singleFiles)
       {
@@ -4702,41 +5016,27 @@ void CMusicDatabase::ExportToXML(const CStdString &xmlFile, bool singleFiles, bo
           return;
         }
       }
-      m_pDS->next();
       current++;
     }
-    m_pDS->close();
 
     // find all artists
-    sql = "SELECT artist.idArtist AS idArtist, strArtist, "
-          "  strMusicBrainzArtistID, "
-          "  strBorn, strFormed, strGenres, "
-          "  strMoods, strStyles, strInstruments, "
-          "  strBiography, strDied, strDisbanded, "
-          "  strYearsActive, strImage, strFanart "
-          "  FROM artist "
-          "  JOIN artistinfo "
-          "    ON artist.idArtist=artistinfo.idArtist";
-
-    // needed due to getartistpath
-    auto_ptr<dbiplus::Dataset> pDS;
-    pDS.reset(m_pDB->CreateDataset());
-    pDS->query(sql.c_str());
-
-    total = pDS->num_rows();
+    vector<int> artistIds;
+    CStdString artistSQL = "SELECT idArtist FROM artist where lastScraped IS NOT NULL";
+    m_pDS->query(artistSQL.c_str());
+    total = m_pDS->num_rows();
     current = 0;
+    artistIds.reserve(total);
+    while (!m_pDS->eof())
+    {
+      artistIds.push_back(m_pDS->fv("idArtist").get_asInt());
+      m_pDS->next();
+    }
+    m_pDS->close();
 
-    while (!pDS->eof())
+    for (vector<int>::iterator artistId = artistIds.begin(); artistId != artistIds.end(); ++artistId)
     {
-      CArtist artist = GetArtistFromDataset(pDS.get());
-      CStdString strSQL=PrepareSQL("select * from discography where idArtist=%i",artist.idArtist);
-      m_pDS->query(strSQL.c_str());
-      while (!m_pDS->eof())
-      {
-        artist.discography.push_back(make_pair(m_pDS->fv("strAlbum").get_asString(),m_pDS->fv("strYear").get_asString()));
-        m_pDS->next();
-      }
-      m_pDS->close();
+      CArtist artist;
+      GetArtist(*artistId, artist);
       CStdString strPath;
       GetArtistPath(artist.idArtist,strPath);
       artist.Save(pMain, "artist", strPath);
@@ -4789,10 +5089,8 @@ void CMusicDatabase::ExportToXML(const CStdString &xmlFile, bool singleFiles, bo
           return;
         }
       }
-      pDS->next();
       current++;
     }
-    pDS->close();
 
     if (progress)
       progress->Close();
@@ -4850,23 +5148,33 @@ void CMusicDatabase::ImportFromXML(const CStdString &xmlFile)
       CStdString strTitle;
       if (strnicmp(entry->Value(), "artist", 6) == 0)
       {
-        CArtist artist;
-        artist.Load(entry);
-        strTitle = artist.strArtist;
-        int idArtist = GetArtistByName(artist.strArtist);
+        CArtist importedArtist;
+        importedArtist.Load(entry);
+        strTitle = importedArtist.strArtist;
+        int idArtist = GetArtistByName(importedArtist.strArtist);
         if (idArtist > -1)
-          SetArtistInfo(idArtist,artist);
+        {
+          CArtist artist;
+          GetArtist(idArtist, artist);
+          artist.MergeScrapedArtist(importedArtist, true);
+          UpdateArtist(artist);
+        }
 
         current++;
       }
       else if (strnicmp(entry->Value(), "album", 5) == 0)
       {
-        CAlbum album;
-        album.Load(entry);
-        strTitle = album.strAlbum;
-        int idAlbum = GetAlbumByName(album.strAlbum,album.artist);
+        CAlbum importedAlbum;
+        importedAlbum.Load(entry);
+        strTitle = importedAlbum.strAlbum;
+        int idAlbum = GetAlbumByName(importedAlbum.strAlbum, importedAlbum.artist);
         if (idAlbum > -1)
-          SetAlbumInfo(idAlbum,album,album.songs,false);
+        {
+          CAlbum album;
+          GetAlbum(idAlbum, album, true);
+          album.MergeScrapedAlbum(importedAlbum, true);
+          UpdateAlbum(album);
+        }
 
         current++;
       }
@@ -5012,7 +5320,7 @@ void CMusicDatabase::ExportKaraokeInfo(const CStdString & outFile, bool asHTML)
 
     while (!m_pDS->eof())
     {
-      CSong song = GetSongFromDataset( false );
+      CSong song = GetSongFromDataset();
       CStdString songnum = StringUtils::Format("%06d", song.iKaraokeNumber);
 
       if ( asHTML )
@@ -5161,7 +5469,7 @@ void CMusicDatabase::ImportKaraokeInfo(const CStdString & inputFile)
 
         linestart = p + 1;
         CStdString strSQL=PrepareSQL("select idSong from songview "
-                     "where strArtist like '%s' and strTitle like '%s'", artist, title );
+                     "where strArtists like '%s' and strTitle like '%s'", artist, title );
 
         if ( !m_pDS->query(strSQL.c_str()) )
         {
@@ -5306,7 +5614,7 @@ void CMusicDatabase::SetPropertiesForFileItem(CFileItem& item)
   if (idArtist > -1)
   {
     CArtist artist;
-    if (GetArtistInfo(idArtist,artist))
+    if (GetArtist(idArtist, artist))
       SetPropertiesFromArtist(item,artist);
   }
   int idAlbum = item.GetMusicInfoTag()->GetAlbumId();
@@ -5316,7 +5624,7 @@ void CMusicDatabase::SetPropertiesForFileItem(CFileItem& item)
   if (idAlbum > -1)
   {
     CAlbum album;
-    if (GetAlbumInfo(idAlbum,album,NULL,true)) // true to force additional information
+    if (GetAlbum(idAlbum, album, false))
       SetPropertiesFromAlbum(item,album);
   }
 }
index 6927a6d..86bd366 100644 (file)
@@ -98,7 +98,6 @@ public:
   void EmptyCache();
   void Clean();
   int  Cleanup(CGUIDialogProgress *pDlgProgress=NULL);
-  void DeleteAlbumInfo();
   bool LookupCDDBInfo(bool bRequery=false);
   void DeleteCDDBInfo();
 
@@ -112,7 +111,7 @@ public:
    \param strPathAndFileName [in] the path and filename to the song
    \param strComment [in] the ids of the added songs
    \param strThumb [in] the ids of the added songs
-   \param artists [in] a vector of artist names (will only be used for the cache names in the album views)
+   \param artistString [in] the assembled artist string, denormalized from CONCAT(strArtist||strJoinPhrase)
    \param genres [in] a vector of genres to which this song belongs
    \param iTrack [in] the track number and disc number of the song
    \param iDuration [in] the duration of the song
@@ -125,9 +124,32 @@ public:
    \param iKaraokeNumber [in] the karaoke id of the song
    \return the id of the song
    */
-  int AddSong(const int idAlbum, const CStdString& strTitle, const CStdString& strMusicBrainzTrackID, const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb, const std::vector<std::string>& artists, const std::vector<std::string>& genres, int iTrack, int iDuration, int iYear, const int iTimesPlayed, int iStartOffset, int iEndOffset, const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber);
+  int AddSong(const int idAlbum,
+              const CStdString& strTitle,
+              const CStdString& strMusicBrainzTrackID,
+              const CStdString& strPathAndFileName,
+              const CStdString& strComment,
+              const CStdString& strThumb,
+              const std::string &artistString, const std::vector<std::string>& genres,
+              int iTrack, int iDuration, int iYear,
+              const int iTimesPlayed, int iStartOffset, int iEndOffset,
+              const CDateTime& dtLastPlayed,
+              char rating, int iKaraokeNumber);
   bool GetSong(int idSong, CSong& song);
 
+  /*! \brief Update a song in the database.
+
+   NOTE: This function assumes that song.artist contains the artist string to be concatenated.
+         Most internal functions should instead use the long-form function as the artist string
+         should be constructed from the artist credits.
+         This function will eventually be demised.
+
+   \param idSong  the database ID of the song to update
+   \param song the song
+   \return the id of the song.
+   */
+  int UpdateSong(int idSong, const CSong &song);
+
   /*! \brief Update a song in the database
    \param idSong [in] the database ID of the song to update
    \param strTitle [in] the title of the song (required to be non-empty)
@@ -135,7 +157,7 @@ public:
    \param strPathAndFileName [in] the path and filename to the song
    \param strComment [in] the ids of the added songs
    \param strThumb [in] the ids of the added songs
-   \param artists [in] a vector of artist names (will only be used for the cache names in the album views)
+   \param artistString [in] the full artist string, denormalized from CONCAT(song_artist.strArtist || song_artist.strJoinPhrase)
    \param genres [in] a vector of genres to which this song belongs
    \param iTrack [in] the track number and disc number of the song
    \param iDuration [in] the duration of the song
@@ -148,7 +170,15 @@ public:
    \param iKaraokeNumber [in] the karaoke id of the song
    \return the id of the song
    */
-  int UpdateSong(int idSong, const CStdString& strTitle, const CStdString& strMusicBrainzTrackID, const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb, const std::vector<std::string>& artists, const std::vector<std::string>& genres, int iTrack, int iDuration, int iYear, int iTimesPlayed, int iStartOffset, int iEndOffset, const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber);
+  int UpdateSong(int idSong,
+                 const CStdString& strTitle, const CStdString& strMusicBrainzTrackID,
+                 const CStdString& strPathAndFileName, const CStdString& strComment,
+                 const CStdString& strThumb,
+                 const std::string& artistString, const std::vector<std::string>& genres,
+                 int iTrack, int iDuration, int iYear,
+                 int iTimesPlayed, int iStartOffset, int iEndOffset,
+                 const CDateTime& dtLastPlayed,
+                 char rating, int iKaraokeNumber);
   // bool DeleteSong(int idSong);
 
   //// Misc Song
@@ -162,15 +192,42 @@ public:
   /////////////////////////////////////////////////
   // Album
   /////////////////////////////////////////////////
+  bool AddAlbum(CAlbum& album);
+  /*! \brief Update an album and all its nested entities (artists, songs, infoSongs, etc)
+   \param album the album to update
+   \return true or false
+   */
+  bool UpdateAlbum(CAlbum& album);
+
   /*! \brief Add an album and all its songs to the database
    \param album the album to add
    \param songIDs [out] the ids of the added songs
    \return the id of the album
    */
-  int  AddAlbum(const CStdString& strAlbum, const CStdString& strMusicBrainzAlbumID, const CStdString& strArtist, const CStdString& strGenre, int year, bool bCompilation);
-  bool GetAlbum(int idAlbum, CAlbum& album);
+  int  AddAlbum(const CStdString& strAlbum, const CStdString& strMusicBrainzAlbumID,
+                const CStdString& strArtist, const CStdString& strGenre,
+                int year, bool bCompilation);
+  /*! \brief retrieve an album, optionally with all songs.
+   \param idAlbum the database id of the album.
+   \param album [out] the album to fill.
+   \param getSongs whether or not to retrieve songs, defaults to true.
+   \return true if the album is retrieved, false otherwise.
+   */
+  bool GetAlbum(int idAlbum, CAlbum& album, bool getSongs = true);
   int  UpdateAlbum(int idAlbum, const CAlbum &album);
+  int  UpdateAlbum(int idAlbum,
+                   const CStdString& strAlbum, const CStdString& strMusicBrainzAlbumID,
+                   const CStdString& strArtist, const CStdString& strGenre,
+                   const CStdString& strMoods, const CStdString& strStyles,
+                   const CStdString& strThemes, const CStdString& strReview,
+                   const CStdString& strImage, const CStdString& strLabel,
+                   const CStdString& strType,
+                   int iRating, int iYear, bool bCompilation);
   bool DeleteAlbum(int idAlbum);
+  bool ClearAlbumLastScrapedTime(int idAlbum);
+  bool HasAlbumBeenScraped(int idAlbum);
+  int  AddAlbumInfoSong(int idAlbum, const CSong& song);
+
   /*! \brief Checks if the given path is inside a folder that has already been scanned into the library
    \param path the path we want to check
    */
@@ -186,10 +243,23 @@ public:
   /////////////////////////////////////////////////
   // Artist CRUD
   /////////////////////////////////////////////////
+  bool UpdateArtist(const CArtist& artist);
+
   int  AddArtist(const CStdString& strArtist, const CStdString& strMusicBrainzArtistID);
-  bool GetArtist(int idArtist, CArtist& artist);
-  int  UpdateArtist(int idArtist, const CArtist& artist);
+  bool GetArtist(int idArtist, CArtist& artist, bool fetchAll = true);
+  int  UpdateArtist(int idArtist,
+                    const CStdString& strArtist, const CStdString& strMusicBrainzArtistID,
+                    const CStdString& strBorn, const CStdString& strFormed,
+                    const CStdString& strGenres, const CStdString& strMoods,
+                    const CStdString& strStyles, const CStdString& strInstruments,
+                    const CStdString& strBiography, const CStdString& strDied,
+                    const CStdString& strDisbanded, const CStdString& strYearsActive,
+                    const CStdString& strImage, const CStdString& strFanart);
   bool DeleteArtist(int idArtist);
+  bool HasArtistBeenScraped(int idArtist);
+  bool ClearArtistLastScrapedTime(int idArtist);
+  int  AddArtistDiscography(int idArtist, const CStdString& strAlbum, const CStdString& strYear);
+  bool DeleteArtistDiscography(int idArtist);
 
   CStdString GetArtistById(int id);
   int GetArtistByName(const CStdString& strArtist);
@@ -213,43 +283,25 @@ public:
   int GetGenreByName(const CStdString& strGenre);
 
   /////////////////////////////////////////////////
-  // AlbumInfo
-  /////////////////////////////////////////////////
-  bool HasAlbumInfo(int idAlbum);
-  int SetAlbumInfo(int idAlbum, const CAlbum& album, const VECSONGS& songs, bool bTransaction=true);
-  bool GetAlbumInfo(int idAlbum, CAlbum &info, VECSONGS* songs, bool scrapedInfo = false);
-  bool DeleteAlbumInfo(int idArtist);
-  bool SetAlbumInfoSongs(int idAlbumInfo, const VECSONGS& songs);
-  bool GetAlbumInfoSongs(int idAlbumInfo, VECSONGS& songs);
-
-  /////////////////////////////////////////////////
-  // ArtistInfo
-  /////////////////////////////////////////////////
-  /*! \brief Check if an artist entity has additional metadata (scraped)
-   \param idArtist the id of the Artist to check
-   \return true or false - whether the artist has metadata
-   */
-  bool HasArtistInfo(int idArtist);
-  int SetArtistInfo(int idArtist, const CArtist& artist);
-  bool GetArtistInfo(int idArtist, CArtist &info, bool needAll=true);
-  bool DeleteArtistInfo(int idArtist);
-
-  /////////////////////////////////////////////////
   // Link tables
   /////////////////////////////////////////////////
-  bool AddAlbumArtist(int idArtist, int idAlbum, std::string joinPhrase, bool featured, int iOrder);
+  bool AddAlbumArtist(int idArtist, int idAlbum, std::string strArtist, std::string joinPhrase, bool featured, int iOrder);
   bool GetAlbumsByArtist(int idArtist, bool includeFeatured, std::vector<int>& albums);
   bool GetArtistsByAlbum(int idAlbum, bool includeFeatured, std::vector<int>& artists);
+  bool DeleteAlbumArtistsByAlbum(int idAlbum);
 
-  bool AddSongArtist(int idArtist, int idSong, std::string joinPhrase, bool featured, int iOrder);
+  bool AddSongArtist(int idArtist, int idSong, std::string strArtist, std::string joinPhrase, bool featured, int iOrder);
   bool GetSongsByArtist(int idArtist, bool includeFeatured, std::vector<int>& songs);
   bool GetArtistsBySong(int idSong, bool includeFeatured, std::vector<int>& artists);
+  bool DeleteSongArtistsBySong(int idSong);
 
   bool AddSongGenre(int idGenre, int idSong, int iOrder);
   bool GetGenresBySong(int idSong, std::vector<int>& genres);
+  bool DeleteSongGenresBySong(int idSong);
 
   bool AddAlbumGenre(int idGenre, int idAlbum, int iOrder);
   bool GetGenresByAlbum(int idAlbum, std::vector<int>& genres);
+  bool DeleteAlbumGenresByAlbum(int idAlbum);
 
   /////////////////////////////////////////////////
   // Top 100
@@ -428,14 +480,16 @@ private:
   virtual void CreateViews();
 
   void SplitString(const CStdString &multiString, std::vector<std::string> &vecStrings, CStdString &extraStrings);
-  CSong GetSongFromDataset(bool bWithMusicDbPath=false);
-  CArtist GetArtistFromDataset(dbiplus::Dataset* pDS, bool needThumb = true);
-  CArtist GetArtistFromDataset(const dbiplus::sql_record* const record, bool needThumb = true);
-  CAlbum GetAlbumFromDataset(dbiplus::Dataset* pDS, bool imageURL=false);
-  CAlbum GetAlbumFromDataset(const dbiplus::sql_record* const record, bool imageURL=false);
-  CArtistCredit GetAlbumArtistCreditFromDataset(const dbiplus::sql_record* const record);
+  CSong GetSongFromDataset();
+  CSong GetSongFromDataset(const dbiplus::sql_record* const record, int offset = 0);
+  CArtist GetArtistFromDataset(dbiplus::Dataset* pDS, int offset = 0, bool needThumb = true);
+  CArtist GetArtistFromDataset(const dbiplus::sql_record* const record, int offset = 0, bool needThumb = true);
+  CAlbum GetAlbumFromDataset(dbiplus::Dataset* pDS, int offset = 0, bool imageURL = false);
+  CAlbum GetAlbumFromDataset(const dbiplus::sql_record* const record, int offset = 0, bool imageURL = false);
+  CArtistCredit GetArtistCreditFromDataset(const dbiplus::sql_record* const record, int offset = 0);
   void GetFileItemFromDataset(CFileItem* item, const CMusicDbUrl &baseUrl);
   void GetFileItemFromDataset(const dbiplus::sql_record* const record, CFileItem* item, const CMusicDbUrl &baseUrl);
+  CSong GetAlbumInfoSongFromDataset(const dbiplus::sql_record* const record, int offset = 0);
   bool CleanupSongs();
   bool CleanupSongsByIds(const CStdString &strSongIds);
   bool CleanupPaths();
@@ -475,7 +529,8 @@ private:
     song_iKarDelay,
     song_strKarEncoding,
     song_bCompilation,
-    song_strAlbumArtists
+    song_strAlbumArtists,
+    song_enumCount // end of the enum, do not add past here
   } SongFields;
 
   // Fields should be ordered as they
@@ -488,7 +543,6 @@ private:
     album_strArtists,
     album_strGenres,
     album_iYear,
-    album_idAlbumInfo,
     album_strMoods,
     album_strStyles,
     album_strThemes,
@@ -499,15 +553,22 @@ private:
     album_iRating,
     album_bCompilation,
     album_iTimesPlayed,
-
-    // used for GetAlbumInfo to get the cascaded artist credits
-    album_idArtist,
-    album_strArtist,
-    album_strMusicBrainzArtistID,
-    album_bFeatured,
-    album_strJoinPhrase
+    album_enumCount // end of the enum, do not add past here
   } AlbumFields;
 
+  enum _ArtistCreditFields
+  {
+    // used for GetAlbum to get the cascaded album/song artist credits
+    artistCredit_idEntity = 0,  // can be idSong or idAlbum depending on context
+    artistCredit_idArtist,
+    artistCredit_strArtist,
+    artistCredit_strMusicBrainzArtistID,
+    artistCredit_bFeatured,
+    artistCredit_strJoinPhrase,
+    artistCredit_iOrder,
+    artistCredit_enumCount
+  } ArtistCreditFields;
+
   enum _ArtistFields
   {
     artist_idArtist=0,
@@ -524,6 +585,17 @@ private:
     artist_strDisbanded,
     artist_strYearsActive,
     artist_strImage,
-    artist_strFanart
+    artist_strFanart,
+    artist_enumCount // end of the enum, do not add past here
   } ArtistFields;
+
+  enum _AlbumInfoSongFields
+  {
+    albumInfoSong_idAlbumInfoSong=0,
+    albumInfoSong_idAlbumInfo,
+    albumInfoSong_iTrack,
+    albumInfoSong_strTitle,
+    albumInfoSong_iDuration,
+    albumInfoSong_enumCount // end of the enum, do not add past here
+  } AlbumInfoSongFields;
 };
index 85425f3..4864007 100644 (file)
@@ -97,11 +97,11 @@ bool CMusicInfoLoader::LoadAdditionalTagInfo(CFileItem* pItem)
     CArtist artist;
     CMusicDatabase database;
     database.Open();
-    if (database.GetArtistInfo(param.GetArtistId(),artist,false))
+    if (database.GetArtist(param.GetArtistId(), artist, false))
       CMusicDatabase::SetPropertiesFromArtist(*pItem,artist);
 
     CAlbum album;
-    if (database.GetAlbumInfo(param.GetAlbumId(),album,NULL))
+    if (database.GetAlbum(param.GetAlbumId(), album, false))
       CMusicDatabase::SetPropertiesFromAlbum(*pItem,album);
 
     path = pItem->GetMusicInfoTag()->GetURL();
index 8698759..44a2261 100644 (file)
@@ -72,6 +72,19 @@ CSong::CSong()
   Clear();
 }
 
+void CSong::MergeScrapedSong(const CSong& source, bool override)
+{
+  if ((override && !source.strTitle.empty()) || strTitle.empty())
+    strTitle = source.strTitle;
+  if ((override && source.iTrack != 0) || iTrack == 0)
+    iTrack = source.iTrack;
+  // artist = source.artist; // artist is read-only from the database
+  if (override)
+    artistCredits = source.artistCredits;
+  else if (source.artistCredits.size() > artistCredits.size())
+    artistCredits.insert(artistCredits.end(), source.artistCredits.begin()+artistCredits.size(), source.artistCredits.end());
+}
+
 void CSong::Serialize(CVariant& value) const
 {
   value["filename"] = strFileName;
index eac0e2c..4c7e6e2 100644 (file)
@@ -58,6 +58,7 @@ public:
   CSong(CFileItem& item);
   virtual ~CSong(){};
   void Clear() ;
+  void MergeScrapedSong(const CSong& source, bool override);
   virtual void Serialize(CVariant& value) const;
 
   bool operator<(const CSong &song) const
index 62abec3..dc2cc4e 100644 (file)
@@ -150,7 +150,7 @@ bool CGUIDialogMusicInfo::OnAction(const CAction &action)
 void CGUIDialogMusicInfo::SetAlbum(const CAlbum& album, const CStdString &path)
 {
   m_album = album;
-  SetSongs(m_album.songs);
+  SetSongs(m_album.infoSongs);
   *m_albumItem = CFileItem(path, true);
   m_albumItem->GetMusicInfoTag()->SetAlbum(m_album.strAlbum);
   m_albumItem->GetMusicInfoTag()->SetAlbumArtist(StringUtils::Join(m_album.artist, g_advancedSettings.m_musicItemSeparator));
@@ -222,11 +222,24 @@ void CGUIDialogMusicInfo::SetDiscography()
   CMusicDatabase database;
   database.Open();
 
+  vector<int> albumsByArtist;
+  database.GetAlbumsByArtist(m_artist.idArtist, true, albumsByArtist);
+
   for (unsigned int i=0;i<m_artist.discography.size();++i)
   {
     CFileItemPtr item(new CFileItem(m_artist.discography[i].first));
     item->SetLabel2(m_artist.discography[i].second);
-    long idAlbum = database.GetAlbumByName(item->GetLabel(),m_artist.strArtist);
+
+    int idAlbum = -1;
+    for (vector<int>::const_iterator album = albumsByArtist.begin(); album != albumsByArtist.end(); ++album)
+    {
+      if (database.GetAlbumById(*album).Equals(item->GetLabel()))
+      {
+        idAlbum = *album;
+        item->GetMusicInfoTag()->SetDatabaseId(idAlbum, "album");
+        break;
+      }
+    }
 
     if (idAlbum != -1) // we need this slight stupidity to get correct case for the album name
       item->SetArt("thumb", database.GetArtForItem(idAlbum, "album", "thumb"));
@@ -541,14 +554,14 @@ void CGUIDialogMusicInfo::OnSearch(const CFileItem* pItem)
 {
   CMusicDatabase database;
   database.Open();
-  long idAlbum = database.GetAlbumByName(pItem->GetLabel(),m_artist.strArtist);
-  if (idAlbum != -1)
+  if (pItem->HasMusicInfoTag() &&
+      pItem->GetMusicInfoTag()->GetDatabaseId() > 0)
   {
     CAlbum album;
-    if (database.GetAlbumInfo(idAlbum,album,&album.songs))
+    if (database.GetAlbum(pItem->GetMusicInfoTag()->GetDatabaseId(), album))
     {
       CStdString strPath;
-      database.GetAlbumPath(idAlbum,strPath);
+      database.GetAlbumPath(pItem->GetMusicInfoTag()->GetDatabaseId(), strPath);
       SetAlbum(album,strPath);
       Update();
     }
index 947927f..e764a23 100644 (file)
@@ -44,7 +44,7 @@ public:
   const CAlbum &GetAlbum() const { return m_album; }
   CAlbum& GetAlbum() { return m_album; }
   void SetAlbum(CAlbum& album);
-  const VECSONGS &GetSongs() const { return m_album.songs; }
+  const VECSONGS &GetSongs() const { return m_album.infoSongs; }
   const CStdString& GetTitle2() const { return m_strTitle2; }
   void SetTitle(const CStdString& strTitle) { m_album.strAlbum = strTitle; }
   const CScraperUrl& GetAlbumURL() const { return m_albumURL; }
index 95abb29..0368bb6 100644 (file)
@@ -117,8 +117,7 @@ void CMusicInfoScanner::Process()
       m_bCanInterrupt = false;
       m_needsCleanup = false;
 
-      bool commit = false;
-      bool cancelled = false;
+      bool commit = true;
       for (std::set<std::string>::const_iterator it = m_pathsToScan.begin(); it != m_pathsToScan.end(); it++)
       {
         if (!CDirectory::Exists(*it) && !m_bClean)
@@ -133,8 +132,10 @@ void CMusicInfoScanner::Process()
           continue;
         }
         else if (!DoScan(*it))
-          cancelled = true;
-        commit = !cancelled;
+        {
+          commit = false;
+          break;
+        }
       }
 
       if (commit)
@@ -171,11 +172,11 @@ void CMusicInfoScanner::Process()
       {
         CQueryParams params;
         CDirectoryNode::GetDatabaseInfo(*it, params);
-        if (m_musicDatabase.HasAlbumInfo(params.GetArtistId())) // should this be here?
+        if (m_musicDatabase.HasAlbumBeenScraped(params.GetAlbumId())) // should this be here?
           continue;
 
         CAlbum album;
-        m_musicDatabase.GetAlbumInfo(params.GetAlbumId(), album, &album.songs);
+        m_musicDatabase.GetAlbum(params.GetAlbumId(), album);
         if (m_handle)
         {
           float percentage = (float) std::distance(it, m_pathsToScan.end()) / m_pathsToScan.size();
@@ -183,8 +184,12 @@ void CMusicInfoScanner::Process()
           m_handle->SetPercentage(percentage);
         }
 
-        CMusicAlbumInfo albumInfo;
-        UpdateDatabaseAlbumInfo(*it, albumInfo, false);
+        // find album info
+        ADDON::ScraperPtr scraper;
+        if (!m_musicDatabase.GetScraperForPath(*it, scraper, ADDON::ADDON_SCRAPER_ALBUMS))
+          continue;
+
+        UpdateDatabaseAlbumInfo(album, scraper, false);
 
         if (m_bStop)
           break;
@@ -196,11 +201,11 @@ void CMusicInfoScanner::Process()
       {
         CQueryParams params;
         CDirectoryNode::GetDatabaseInfo(*it, params);
-        if (m_musicDatabase.HasArtistInfo(params.GetArtistId())) // should this be here?
+        if (m_musicDatabase.HasArtistBeenScraped(params.GetArtistId())) // should this be here?
             continue;
 
         CArtist artist;
-        m_musicDatabase.GetArtistInfo(params.GetArtistId(), artist);
+        m_musicDatabase.GetArtist(params.GetArtistId(), artist);
         m_musicDatabase.GetArtistPath(params.GetArtistId(), artist.strPath);
 
         if (m_handle)
@@ -209,9 +214,13 @@ void CMusicInfoScanner::Process()
           m_handle->SetText(artist.strArtist);
           m_handle->SetPercentage(percentage);
         }
-        
-        CMusicArtistInfo artistInfo;
-        UpdateDatabaseArtistInfo(*it, artistInfo, false);
+
+        // find album info
+        ADDON::ScraperPtr scraper;
+        if (!m_musicDatabase.GetScraperForPath(*it, scraper, ADDON::ADDON_SCRAPER_ARTISTS) || !scraper)
+          continue;
+
+        UpdateDatabaseArtistInfo(artist, scraper, false);
 
         if (m_bStop)
           break;
@@ -296,7 +305,7 @@ void CMusicInfoScanner::FetchAlbumInfo(const CStdString& strDirectory,
     m_pathsToScan.insert(items[i]->GetPath());
     if (refresh)
     {
-      m_musicDatabase.DeleteAlbumInfo(items[i]->GetMusicInfoTag()->GetDatabaseId());
+      m_musicDatabase.ClearAlbumLastScrapedTime(items[i]->GetMusicInfoTag()->GetDatabaseId());
     }
   }
   m_musicDatabase.Close();
@@ -340,7 +349,7 @@ void CMusicInfoScanner::FetchArtistInfo(const CStdString& strDirectory,
     m_pathsToScan.insert(items[i]->GetPath());
     if (refresh)
     {
-      m_musicDatabase.DeleteArtistInfo(items[i]->GetMusicInfoTag()->GetDatabaseId());
+      m_musicDatabase.ClearArtistLastScrapedTime(items[i]->GetMusicInfoTag()->GetDatabaseId());
     }
   }
   m_musicDatabase.Close();
@@ -373,10 +382,8 @@ static void OnDirectoryScanned(const CStdString& strDirectory)
 static CStdString Prettify(const CStdString& strDirectory)
 {
   CURL url(strDirectory);
-  CStdString strStrippedPath = url.GetWithoutUserDetails();
-  CURL::Decode(strStrippedPath);
 
-  return strStrippedPath;
+  return CURL::Decode(url.GetWithoutUserDetails());
 }
 
 bool CMusicInfoScanner::DoScan(const CStdString& strDirectory)
@@ -681,7 +688,7 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
     m_needsCleanup = true;
 
   CFileItemList scannedItems;
-  if (ScanTags(items, scannedItems) == INFO_CANCELLED)
+  if (ScanTags(items, scannedItems) == INFO_CANCELLED || scannedItems.Size() == 0)
     return 0;
 
   VECALBUMS albums;
@@ -705,196 +712,79 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
       break;
 
     album->strPath = strDirectory;
-    m_musicDatabase.BeginTransaction();
-
-    // Check if the album has already been downloaded or failed
-    map<CAlbum, CAlbum>::iterator cachedAlbum = m_albumCache.find(*album);
-    if (cachedAlbum == m_albumCache.end())
+    m_musicDatabase.AddAlbum(*album);
+
+    // Yuk - this is a kludgy way to do what we want to do, but it will work to sort
+    // out artist fanart until we can restructure the artist fanart to work more
+    // like the album fanart. This has to be done after we've added the album so
+    // we have the artist IDs to update, but before we call UpdateDatabaseArtistInfo.
+    if (albums.size() == 1 &&
+        album->artistCredits.size() > 0 &&
+        !StringUtils::EqualsNoCase(album->artistCredits[0].GetArtist(), "various artists") &&
+        !StringUtils::EqualsNoCase(album->artistCredits[0].GetArtist(), "various"))
     {
-      // No - download the information
-      CMusicAlbumInfo albumInfo;
-      INFO_RET albumDownloadStatus = INFO_NOT_FOUND;
-      if ((m_flags & SCAN_ONLINE) && albumScraper)
-        albumDownloadStatus = DownloadAlbumInfo(*album, albumScraper, albumInfo);
-
-      if (albumDownloadStatus == INFO_ADDED || albumDownloadStatus == INFO_HAVE_ALREADY)
-      {
-        CAlbum &downloadedAlbum = albumInfo.GetAlbum();
-        downloadedAlbum.idAlbum = m_musicDatabase.AddAlbum(downloadedAlbum.strAlbum,
-                                                           downloadedAlbum.strMusicBrainzAlbumID,
-                                                           downloadedAlbum.GetArtistString(),
-                                                           downloadedAlbum.GetGenreString(),
-                                                           downloadedAlbum.iYear,
-                                                           downloadedAlbum.bCompilation);
-        m_musicDatabase.SetAlbumInfo(downloadedAlbum.idAlbum,
-                                     downloadedAlbum,
-                                     downloadedAlbum.songs);
-        m_musicDatabase.SetArtForItem(downloadedAlbum.idAlbum,
-                                      "album", album->art);
-        GetAlbumArtwork(downloadedAlbum.idAlbum, downloadedAlbum);
-        m_albumCache.insert(make_pair(*album, albumInfo.GetAlbum()));
-      }
-      else if (albumDownloadStatus == INFO_CANCELLED)
-        break;
-      else
+      CArtist artist;
+      if (m_musicDatabase.GetArtist(album->artistCredits[0].GetArtistId(), artist))
       {
-        // No download info, fallback to already gathered (eg. local) information/art (if any)
-        album->idAlbum = m_musicDatabase.AddAlbum(album->strAlbum,
-                                                  album->strMusicBrainzAlbumID,
-                                                  album->GetArtistString(),
-                                                  album->GetGenreString(),
-                                                  album->iYear,
-                                                  album->bCompilation);
-        if (!album->art.empty())
-          m_musicDatabase.SetArtForItem(album->idAlbum,
-                                        "album", album->art);
-        m_albumCache.insert(make_pair(*album, *album));
+        artist.strPath = URIUtils::GetParentPath(strDirectory);
+        m_musicDatabase.SetArtForItem(artist.idArtist, "artist", GetArtistArtwork(artist));
       }
-
-      // Update the cache pointer with our newly created info
-      cachedAlbum = m_albumCache.find(*album);
     }
 
-    if (m_bStop)
-      break;
-
-    // Add the album artists
-    for (VECARTISTCREDITS::iterator artistCredit = cachedAlbum->second.artistCredits.begin(); artistCredit != cachedAlbum->second.artistCredits.end(); ++artistCredit)
+    if ((m_flags & SCAN_ONLINE))
     {
-      if (m_bStop)
-        break;
+      if (!albumScraper || !artistScraper)
+        continue;
 
-      // Check if the artist has already been downloaded or failed
-      map<CArtistCredit, CArtist>::iterator cachedArtist = m_artistCache.find(*artistCredit);
-      if (cachedArtist == m_artistCache.end())
-      {
-        CArtist artistTmp;
-        artistTmp.strArtist = artistCredit->GetArtist();
-        artistTmp.strMusicBrainzArtistID = artistCredit->GetMusicBrainzArtistID();
-        URIUtils::GetParentPath(album->strPath, artistTmp.strPath);
-
-        // No - download the information
-        CMusicArtistInfo artistInfo;
-        INFO_RET artistDownloadStatus = INFO_NOT_FOUND;
-        if ((m_flags & SCAN_ONLINE) && artistScraper)
-          artistDownloadStatus = DownloadArtistInfo(artistTmp, artistScraper, artistInfo);
-
-        if (artistDownloadStatus == INFO_ADDED || artistDownloadStatus == INFO_HAVE_ALREADY)
-        {
-          CArtist &downloadedArtist = artistInfo.GetArtist();
-          downloadedArtist.idArtist = m_musicDatabase.AddArtist(downloadedArtist.strArtist,
-                                                                downloadedArtist.strMusicBrainzArtistID);
-          m_musicDatabase.SetArtistInfo(downloadedArtist.idArtist,
-                                        downloadedArtist);
-
-          URIUtils::GetParentPath(album->strPath, downloadedArtist.strPath);
-          map<string, string> artwork = GetArtistArtwork(downloadedArtist);
-          // check thumb stuff
-          m_musicDatabase.SetArtForItem(downloadedArtist.idArtist, "artist", artwork);
-          m_artistCache.insert(make_pair(*artistCredit, downloadedArtist));
-        }
-        else if (artistDownloadStatus == INFO_CANCELLED)
-          break;
-        else
-        {
-          // Cache the lookup failure so we don't retry
-          artistTmp.idArtist = m_musicDatabase.AddArtist(artistCredit->GetArtist(), artistCredit->GetMusicBrainzArtistID());
-          m_artistCache.insert(make_pair(*artistCredit, artistTmp));
-        }
-        
-        // Update the cache pointer with our newly created info
-        cachedArtist = m_artistCache.find(*artistCredit);
-      }
+      INFO_RET albumScrapeStatus = INFO_NOT_FOUND;
+      if (!m_musicDatabase.HasAlbumBeenScraped(album->idAlbum))
+        albumScrapeStatus = UpdateDatabaseAlbumInfo(*album, albumScraper, false);
 
-      m_musicDatabase.AddAlbumArtist(cachedArtist->second.idArtist,
-                                     cachedAlbum->second.idAlbum,
-                                     artistCredit->GetJoinPhrase(),
-                                     artistCredit == cachedAlbum->second.artistCredits.begin() ? false : true,
-                                     std::distance(cachedAlbum->second.artistCredits.begin(), artistCredit));
-    }
-
-    if (m_bStop)
-      break;
-
-    for (VECSONGS::iterator song = album->songs.begin(); song != album->songs.end(); ++song)
-    {
-      song->idAlbum = cachedAlbum->second.idAlbum;
-      song->idSong = m_musicDatabase.AddSong(cachedAlbum->second.idAlbum,
-                                             song->strTitle, song->strMusicBrainzTrackID,
-                                             song->strFileName, song->strComment,
-                                             song->strThumb,
-                                             song->artist, song->genre,
-                                             song->iTrack, song->iDuration, song->iYear,
-                                             song->iTimesPlayed, song->iStartOffset,
-                                             song->iEndOffset,
-                                             song->lastPlayed,
-                                             song->rating,
-                                             song->iKaraokeNumber);
-      for (VECARTISTCREDITS::iterator artistCredit = song->artistCredits.begin(); artistCredit != song->artistCredits.end(); ++artistCredit)
+      if (albumScrapeStatus == INFO_ADDED)
       {
-        if (m_bStop)
-          break;
-
-        // Check if the artist has already been downloaded or failed
-        map<CArtistCredit, CArtist>::iterator cachedArtist = m_artistCache.find(*artistCredit);
-        if (cachedArtist == m_artistCache.end())
+        for (VECARTISTCREDITS::const_iterator artistCredit  = album->artistCredits.begin();
+                                              artistCredit != album->artistCredits.end();
+                                            ++artistCredit)
         {
-          CArtist artistTmp;
-          artistTmp.strArtist = artistCredit->GetArtist();
-          artistTmp.strMusicBrainzArtistID = artistCredit->GetMusicBrainzArtistID();
-          URIUtils::GetParentPath(album->strPath, artistTmp.strPath); // FIXME
-
-          // No - download the information
-          CMusicArtistInfo artistInfo;
-          INFO_RET artistDownloadStatus = INFO_NOT_FOUND;
-          if ((m_flags & SCAN_ONLINE) && artistScraper)
-            artistDownloadStatus = DownloadArtistInfo(artistTmp, artistScraper, artistInfo);
-
-          if (artistDownloadStatus == INFO_ADDED || artistDownloadStatus == INFO_HAVE_ALREADY)
+          if (m_bStop)
+            break;
+
+          if (!m_musicDatabase.HasArtistBeenScraped(artistCredit->GetArtistId()))
           {
-            CArtist &downloadedArtist = artistInfo.GetArtist();
-            downloadedArtist.idArtist = m_musicDatabase.AddArtist(downloadedArtist.strArtist,
-                                                                  downloadedArtist.strMusicBrainzArtistID);
-            m_musicDatabase.SetArtistInfo(downloadedArtist.idArtist,
-                                          downloadedArtist);
-            // check thumb stuff
-            URIUtils::GetParentPath(album->strPath, downloadedArtist.strPath);
-            map<string, string> artwork = GetArtistArtwork(downloadedArtist);
-            m_musicDatabase.SetArtForItem(downloadedArtist.idArtist, "artist", artwork);
-            m_artistCache.insert(make_pair(*artistCredit, downloadedArtist));
+            CArtist artist;
+            m_musicDatabase.GetArtist(artistCredit->GetArtistId(), artist);
+            UpdateDatabaseArtistInfo(artist, artistScraper, false);
           }
-          else if (artistDownloadStatus == INFO_CANCELLED)
+        }
+
+        for (VECSONGS::iterator song  = album->songs.begin();
+                                song != album->songs.end();
+                                song++)
+        {
+          if (m_bStop)
             break;
-          else
+
+          for (VECARTISTCREDITS::const_iterator artistCredit  = song->artistCredits.begin();
+                                                artistCredit != song->artistCredits.end();
+                                              ++artistCredit)
           {
-            // Cache the lookup failure so we don't retry
-            artistTmp.idArtist = m_musicDatabase.AddArtist(artistCredit->GetArtist(), artistCredit->GetMusicBrainzArtistID());
-            m_artistCache.insert(make_pair(*artistCredit, artistTmp));
-          }
+            if (m_bStop)
+              break;
 
-          // Update the cache pointer with our newly created info
-          cachedArtist = m_artistCache.find(*artistCredit);
+            CMusicArtistInfo musicArtistInfo;
+            if (!m_musicDatabase.HasArtistBeenScraped(artistCredit->GetArtistId()))
+            {
+              CArtist artist;
+              m_musicDatabase.GetArtist(artistCredit->GetArtistId(), artist);
+              UpdateDatabaseArtistInfo(artist, artistScraper, false);
+            }
+          }
         }
-
-        m_musicDatabase.AddSongArtist(cachedArtist->second.idArtist,
-                                      song->idSong,
-                                      g_advancedSettings.m_musicItemSeparator, // we don't have song artist breakdowns from scrapers, yet
-                                      artistCredit == song->artistCredits.begin() ? false : true,
-                                      std::distance(song->artistCredits.begin(), artistCredit));
       }
     }
-
-    if (m_bStop)
-      break;
-
-    // Commit the album to the DB
-    m_musicDatabase.CommitTransaction();
     numAdded += album->songs.size();
   }
 
-  if (m_bStop)
-    m_musicDatabase.RollbackTransaction();
-
   if (m_handle)
     m_handle->SetTitle(g_localizeStrings.Get(505));
 
@@ -1003,26 +893,12 @@ int CMusicInfoScanner::GetPathHash(const CFileItemList &items, CStdString &hash)
   return count;
 }
 
-INFO_RET CMusicInfoScanner::UpdateDatabaseAlbumInfo(const CStdString& strPath, CMusicAlbumInfo& albumInfo, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */)
+INFO_RET CMusicInfoScanner::UpdateDatabaseAlbumInfo(CAlbum& album, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */)
 {
-  m_musicDatabase.Open();
-  CQueryParams params;
-  CDirectoryNode::GetDatabaseInfo(strPath, params);
-
-  if (params.GetAlbumId() == -1)
+  if (!scraper)
     return INFO_ERROR;
 
-  CAlbum album;
-  m_musicDatabase.GetAlbumInfo(params.GetAlbumId(), album, &album.songs);
-
-  // find album info
-  ADDON::ScraperPtr scraper;
-  bool result = m_musicDatabase.GetScraperForPath(strPath, scraper, ADDON::ADDON_SCRAPER_ALBUMS);
-
-  m_musicDatabase.Close();
-
-  if (!result || !scraper)
-    return INFO_ERROR;
+  CMusicAlbumInfo albumInfo;
 
 loop:
   CLog::Log(LOGDEBUG, "%s downloading info for: %s", __FUNCTION__, album.strAlbum.c_str());
@@ -1044,32 +920,22 @@ loop:
   }
   else if (albumDownloadStatus == INFO_ADDED)
   {
+    album.MergeScrapedAlbum(albumInfo.GetAlbum(), CSettings::Get().GetBool("musiclibrary.overridetags"));
     m_musicDatabase.Open();
-    m_musicDatabase.SetAlbumInfo(params.GetAlbumId(), albumInfo.GetAlbum(), albumInfo.GetAlbum().songs);
-    GetAlbumArtwork(params.GetAlbumId(), albumInfo.GetAlbum());
-    albumInfo.SetLoaded(true);
+    m_musicDatabase.UpdateAlbum(album);
+    GetAlbumArtwork(album.idAlbum, album);
     m_musicDatabase.Close();
+    albumInfo.SetLoaded(true);
   }
   return albumDownloadStatus;
 }
 
-INFO_RET CMusicInfoScanner::UpdateDatabaseArtistInfo(const CStdString& strPath, CMusicArtistInfo& artistInfo, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */)
+INFO_RET CMusicInfoScanner::UpdateDatabaseArtistInfo(CArtist& artist, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog /* = NULL */)
 {
-  m_musicDatabase.Open();
-  CQueryParams params;
-  CDirectoryNode::GetDatabaseInfo(strPath, params);
-
-  if (params.GetArtistId() == -1)
+  if (!scraper)
     return INFO_ERROR;
 
-  CArtist artist;
-  m_musicDatabase.GetArtistInfo(params.GetArtistId(), artist);
-
-  // find album info
-  ADDON::ScraperPtr scraper;
-  if (!m_musicDatabase.GetScraperForPath(strPath, scraper, ADDON::ADDON_SCRAPER_ARTISTS) || !scraper)
-    return INFO_ERROR;
-  m_musicDatabase.Close();
+  CMusicArtistInfo artistInfo;
 
 loop:
   CLog::Log(LOGDEBUG, "%s downloading info for: %s", __FUNCTION__, artist.strArtist.c_str());
@@ -1085,20 +951,20 @@ loop:
   }
   else if (artistDownloadStatus == INFO_ADDED)
   {
+    artist.MergeScrapedArtist(artistInfo.GetArtist(), CSettings::Get().GetBool("musiclibrary.overridetags"));
     m_musicDatabase.Open();
-    m_musicDatabase.SetArtistInfo(params.GetArtistId(), artistInfo.GetArtist());
-    m_musicDatabase.GetArtistPath(params.GetArtistId(), artist.strPath);
-    map<string, string> artwork = GetArtistArtwork(artist);
-    m_musicDatabase.SetArtForItem(params.GetArtistId(), "artist", artwork);
-    artistInfo.SetLoaded();
+    m_musicDatabase.UpdateArtist(artist);
+    m_musicDatabase.GetArtistPath(artist.idArtist, artist.strPath);
+    m_musicDatabase.SetArtForItem(artist.idArtist, "artist", GetArtistArtwork(artist));
     m_musicDatabase.Close();
+    artistInfo.SetLoaded();
   }
   return artistDownloadStatus;
 }
 
 #define THRESHOLD .95f
 
-INFO_RET CMusicInfoScanner::DownloadAlbumInfo(const CAlbum& album, ADDON::ScraperPtr& info, CMusicAlbumInfo& albumInfo, CGUIDialogProgress* pDialog)
+INFO_RET CMusicInfoScanner::DownloadAlbumInfo(const CAlbum& album, const ADDON::ScraperPtr& info, CMusicAlbumInfo& albumInfo, CGUIDialogProgress* pDialog)
 {
   if (m_handle)
   {
@@ -1141,10 +1007,10 @@ INFO_RET CMusicInfoScanner::DownloadAlbumInfo(const CAlbum& album, ADDON::Scrape
     {
       CScraperUrl scrUrl(nfoReader.ScraperUrl());
       CMusicAlbumInfo albumNfo("nfo",scrUrl);
-      info = nfoReader.GetScraperInfo();
-      CLog::Log(LOGDEBUG,"-- nfo-scraper: %s",info->Name().c_str());
+      ADDON::ScraperPtr nfoReaderScraper = nfoReader.GetScraperInfo();
+      CLog::Log(LOGDEBUG,"-- nfo-scraper: %s", nfoReaderScraper->Name().c_str());
       CLog::Log(LOGDEBUG,"-- nfo url: %s", scrUrl.m_url[0].m_url.c_str());
-      scraper.SetScraperInfo(info);
+      scraper.SetScraperInfo(nfoReaderScraper);
       scraper.GetAlbums().clear();
       scraper.GetAlbums().push_back(albumNfo);
     }
@@ -1310,7 +1176,7 @@ void CMusicInfoScanner::GetAlbumArtwork(long id, const CAlbum &album)
   }
 }
 
-INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, ADDON::ScraperPtr& info, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, CGUIDialogProgress* pDialog)
+INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, const ADDON::ScraperPtr& info, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, CGUIDialogProgress* pDialog)
 {
   if (m_handle)
   {
@@ -1353,10 +1219,10 @@ INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, ADDON::Scr
     {
       CScraperUrl scrUrl(nfoReader.ScraperUrl());
       CMusicArtistInfo artistNfo("nfo",scrUrl);
-      info = nfoReader.GetScraperInfo();
-      CLog::Log(LOGDEBUG,"-- nfo-scraper: %s",info->Name().c_str());
+      ADDON::ScraperPtr nfoReaderScraper = nfoReader.GetScraperInfo();
+      CLog::Log(LOGDEBUG,"-- nfo-scraper: %s",nfoReaderScraper->Name().c_str());
       CLog::Log(LOGDEBUG,"-- nfo url: %s", scrUrl.m_url[0].m_url.c_str());
-      scraper.SetScraperInfo(info);
+      scraper.SetScraperInfo(nfoReaderScraper);
       scraper.GetArtists().push_back(artistNfo);
     }
     else
@@ -1463,7 +1329,7 @@ INFO_RET CMusicInfoScanner::DownloadArtistInfo(const CArtist& artist, ADDON::Scr
   return INFO_ADDED;
 }
 
-bool CMusicInfoScanner::ResolveMusicBrainz(const CStdString strMusicBrainzID, const ScraperPtr &preferredScraper, 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
index 09d5ef5..87dce55 100644 (file)
@@ -111,26 +111,26 @@ public:
   static void FindArtForAlbums(VECALBUMS &albums, const CStdString &path);
 
   /*! \brief Update the database information for a MusicDB album
-   Given a musicdb:// style path pointing to an album, search and update its info
-   with the scrapers. If info is found, update the database and artwork with the new
+   Given an album, search and update its info with the given scraper.
+   If info is found, update the database and artwork with the new
    information.
-   \param strPath [in] musicdb:// style path to the album in the database
-   \param albumInfo [in/out] a CMusicAlbumInfo struct which will be populated with the output of the scraper
-   \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
+   \param album [in/out] the album to update
+   \param scraper [in] the album scraper to use
    \param bAllowSelection [in] should we allow the user to manually override the info with a GUI if the album is not found?
+   \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
    */
-  INFO_RET UpdateDatabaseAlbumInfo(const CStdString& strPath, MUSIC_GRABBER::CMusicAlbumInfo& albumInfo, bool bAllowSelection, CGUIDialogProgress* pDialog = NULL);
+  INFO_RET UpdateDatabaseAlbumInfo(CAlbum& album, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog = NULL);
  
   /*! \brief Update the database information for a MusicDB artist
-   Given a musicdb:// style path pointing to an artist, search and update its info
-   with the scrapers. If info is found, update the database and artwork with the new
+   Given an artist, search and update its info with the given scraper.
+   If info is found, update the database and artwork with the new
    information.
-   \param strPath [in] musicdb:// style path to the artist in the database
-   \param albumInfo [in/out] a CMusicArtistInfo struct which will be populated with the output of the scraper
-   \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
+   \param artist [in/out] the artist to update
+   \param scraper [in] the artist scraper to use
    \param bAllowSelection [in] should we allow the user to manually override the info with a GUI if the album is not found?
+   \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
    */
-  INFO_RET UpdateDatabaseArtistInfo(const CStdString& strPath, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, bool bAllowSelection, CGUIDialogProgress* pDialog = NULL);
+  INFO_RET UpdateDatabaseArtistInfo(CArtist& artist, const ADDON::ScraperPtr& scraper, bool bAllowSelection, CGUIDialogProgress* pDialog = NULL);
 
   /*! \brief Using the scrapers download metadata for an album
    Given a CAlbum style struct containing some data about an album, query
@@ -142,7 +142,7 @@ public:
    \param albumInfo [in/out] a CMusicAlbumInfo struct which will be populated with the output of the scraper
    \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
    */
-  INFO_RET DownloadAlbumInfo(const CAlbum& album, ADDON::ScraperPtr& scraper, MUSIC_GRABBER::CMusicAlbumInfo& albumInfo, CGUIDialogProgress* pDialog = NULL);
+  INFO_RET DownloadAlbumInfo(const CAlbum& album, const ADDON::ScraperPtr& scraper, MUSIC_GRABBER::CMusicAlbumInfo& albumInfo, CGUIDialogProgress* pDialog = NULL);
 
   /*! \brief Using the scrapers download metadata for an artist
    Given a CAlbum style struct containing some data about an artist, query
@@ -154,7 +154,7 @@ public:
    \param artistInfo [in/out] a CMusicAlbumInfo struct which will be populated with the output of the scraper
    \param pDialog [in] a progress dialog which this and downstream functions can update with status, if required
    */
-  INFO_RET DownloadArtistInfo(const CArtist& artist, ADDON::ScraperPtr& scraper, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, CGUIDialogProgress* pDialog = NULL);
+  INFO_RET DownloadArtistInfo(const CArtist& artist, const ADDON::ScraperPtr& scraper, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, CGUIDialogProgress* pDialog = NULL);
 
   /*! \brief Search for art for an artist
    Look for art for an artist. Checks the artist structure for thumbs, and checks
@@ -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, const ADDON::ScraperPtr &preferredScraper, CScraperUrl &musicBrainzURL);
+  bool ResolveMusicBrainz(const CStdString &strMusicBrainzID, const ADDON::ScraperPtr &preferredScraper, CScraperUrl &musicBrainzURL);
 
 protected:
   bool m_showDialog;
index 2fc40a4..5ecaa53 100644 (file)
@@ -260,7 +260,9 @@ void CKaraokeLyricsText::Render()
     case STATE_PLAYING_PARAGRAPH:
       if ( songTime >= m_lyrics[ m_index ].timing )
       {
-        m_index++;
+        while ( songTime >= m_lyrics[ m_index ].timing && m_index <= m_indexEndPara )
+          m_index++;
+
         updateText = true;
 
         if ( m_index > m_indexEndPara )
index c144be7..ab3af2a 100644 (file)
@@ -8,7 +8,6 @@ SRCS=\
      MusicInfoTagLoaderNSF.cpp \
      MusicInfoTagLoaderShn.cpp \
      MusicInfoTagLoaderSPC.cpp \
-     MusicInfoTagLoaderWav.cpp \
      MusicInfoTagLoaderYM.cpp \
      TagLoaderTagLib.cpp \
      TagLibVFSStream.cpp \
index 3778241..bd03676 100644 (file)
@@ -592,7 +592,14 @@ void CMusicInfoTag::ToSortable(SortItem& sortable, Field field) const
 {
   switch (field)
   {
-  case FieldTitle:       sortable[FieldTitle] = m_strTitle; break;
+  case FieldTitle:
+  {
+    // make sure not to overwrite an existing path with an empty one
+    std::string title = m_strTitle;
+    if (!title.empty() || sortable.find(FieldTitle) == sortable.end())
+      sortable[FieldTitle] = title;
+    break;
+  }
   case FieldArtist:      sortable[FieldArtist] = m_artist; break;
   case FieldAlbum:       sortable[FieldAlbum] = m_strAlbum; break;
   case FieldAlbumArtist: sortable[FieldAlbumArtist] = m_albumArtist; break;
index efac945..2e53851 100644 (file)
@@ -23,7 +23,6 @@
 #include "TagLoaderTagLib.h"
 #include "MusicInfoTagLoaderCDDA.h"
 #include "MusicInfoTagLoaderShn.h"
-#include "MusicInfoTagLoaderWav.h"
 #ifdef HAS_MOD_PLAYER
 #include "cores/ModPlayer.h"
 #endif
@@ -74,6 +73,8 @@ IMusicInfoTagLoader* CMusicInfoTagLoaderFactory::CreateLoader(const CStdString&
       strExtension == "m4a" || strExtension == "mp4" ||
       strExtension == "mpc" || strExtension == "mpp" || strExtension == "mp+" ||
       strExtension == "ogg" || strExtension == "oga" || strExtension == "oggstream" ||
+      strExtension == "aif" || strExtension == "aiff" ||
+      strExtension == "wav" ||
 #ifdef HAS_MOD_PLAYER
       ModPlayer::IsSupportedFormat(strExtension) ||
       strExtension == "mod" || strExtension == "nsf" || strExtension == "nsfstream" ||
@@ -96,11 +97,6 @@ IMusicInfoTagLoader* CMusicInfoTagLoaderFactory::CreateLoader(const CStdString&
     CMusicInfoTagLoaderSHN *pTagLoader = new CMusicInfoTagLoaderSHN();
     return (IMusicInfoTagLoader*)pTagLoader;
   }
-  else if (strExtension == "wav")
-  {
-    CMusicInfoTagLoaderWAV *pTagLoader = new CMusicInfoTagLoaderWAV();
-    return (IMusicInfoTagLoader*)pTagLoader;
-  }
   else if (strExtension == "spc")
   {
     CMusicInfoTagLoaderSPC *pTagLoader = new CMusicInfoTagLoaderSPC();
diff --git a/xbmc/music/tags/MusicInfoTagLoaderWav.cpp b/xbmc/music/tags/MusicInfoTagLoaderWav.cpp
deleted file mode 100644 (file)
index c80cb9e..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *      Copyright (C) 2005-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "MusicInfoTagLoaderWav.h"
-#include "cores/paplayer/WAVcodec.h"
-#include "MusicInfoTag.h"
-#include "utils/log.h"
-
-using namespace MUSIC_INFO;
-
-CMusicInfoTagLoaderWAV::CMusicInfoTagLoaderWAV(void)
-{}
-
-CMusicInfoTagLoaderWAV::~CMusicInfoTagLoaderWAV()
-{}
-
-bool CMusicInfoTagLoaderWAV::Load(const CStdString& strFileName, CMusicInfoTag& tag, EmbeddedArt *art)
-{
-  try
-  {
-    // WAV has no tag information other than the duration.
-
-    // Load our codec class
-    WAVCodec codec;
-    if (codec.Init(strFileName, 4096))
-    {
-      tag.SetURL(strFileName);
-      tag.SetDuration((int)(codec.m_TotalTime/1000));
-      tag.SetLoaded(false);
-      codec.DeInit();
-      return true;
-    }
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "Tag loader wav: exception in file %s", strFileName.c_str());
-  }
-
-  return false;
-}
-
diff --git a/xbmc/music/tags/MusicInfoTagLoaderWav.h b/xbmc/music/tags/MusicInfoTagLoaderWav.h
deleted file mode 100644 (file)
index 78425b2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2005-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "ImusicInfoTagLoader.h"
-
-namespace MUSIC_INFO
-{
-
-class CMusicInfoTagLoaderWAV: public IMusicInfoTagLoader
-{
-public:
-  CMusicInfoTagLoaderWAV(void);
-  virtual ~CMusicInfoTagLoaderWAV();
-
-  virtual bool Load(const CStdString& strFileName, CMusicInfoTag& tag, EmbeddedArt *art = NULL);
-};
-}
index 2acd4e3..36e4592 100644 (file)
@@ -129,6 +129,8 @@ bool CTagLoaderTagLib::Load(const CStdString& strFileName, CMusicInfoTag& tag, c
   TagLib::TrueAudio::File*   ttaFile = NULL;
   TagLib::WavPack::File*     wvFile = NULL;
   TagLib::XM::File*          xmFile = NULL;
+  TagLib::RIFF::WAV::File *  wavFile = NULL;
+  TagLib::RIFF::AIFF::File * aiffFile = NULL;
 
   if (strExtension == "ape")
     file = apeFile = new APE::File(stream);
@@ -154,6 +156,10 @@ bool CTagLoaderTagLib::Load(const CStdString& strFileName, CMusicInfoTag& tag, c
     file = ttaFile = new TrueAudio::File(stream, ID3v2::FrameFactory::instance());
   else if (strExtension == "wv")
     file = wvFile = new WavPack::File(stream);
+  else if (strExtension == "aif" || strExtension == "aiff")
+    file = aiffFile = new RIFF::AIFF::File(stream);
+  else if (strExtension == "wav")
+    file = wavFile = new RIFF::WAV::File(stream);
   else if (strExtension == "xm")
     file = xmFile = new XM::File(stream);
   else if (strExtension == "ogg")
@@ -208,6 +214,10 @@ bool CTagLoaderTagLib::Load(const CStdString& strFileName, CMusicInfoTag& tag, c
     xiph = dynamic_cast<Ogg::XiphComment *>(oggVorbisFile->tag());
   else if (ttaFile)
     id3v2 = ttaFile->ID3v2Tag(false);
+  else if (aiffFile)
+    id3v2 = aiffFile->tag();
+  else if (wavFile)
+    id3v2 = wavFile->tag();
   else if (wvFile)
     ape = wvFile->APETag(false);
   else if (mpcFile)
@@ -275,6 +285,7 @@ bool CTagLoaderTagLib::ParseASF(ASF::Tag *asf, EmbeddedArt *art, CMusicInfoTag&
     else if (it->first == "WM/Year")                     tag.SetYear(atoi(it->second.front().toString().toCString(true)));
     else if (it->first == "MusicBrainz/Artist Id")       tag.SetMusicBrainzArtistID(GetASFStringList(it->second));
     else if (it->first == "MusicBrainz/Album Id")        tag.SetMusicBrainzAlbumID(it->second.front().toString().to8Bit(true));
+    else if (it->first == "MusicBrainz/Album Artist")    SetAlbumArtist(tag, GetASFStringList(it->second));
     else if (it->first == "MusicBrainz/Album Artist Id") tag.SetMusicBrainzAlbumArtistID(GetASFStringList(it->second));
     else if (it->first == "MusicBrainz/Track Id")        tag.SetMusicBrainzTrackID(it->second.front().toString().to8Bit(true));
     else if (it->first == "MusicBrainz/Album Status")    {}
@@ -388,6 +399,7 @@ bool CTagLoaderTagLib::ParseID3v2Tag(ID3v2::Tag *id3v2, EmbeddedArt *art, CMusic
         if      (frame->description() == "MusicBrainz Artist Id")       tag.SetMusicBrainzArtistID(StringListToVectorString(stringList));
         else if (frame->description() == "MusicBrainz Album Id")        tag.SetMusicBrainzAlbumID(stringList.front().to8Bit(true));
         else if (frame->description() == "MusicBrainz Album Artist Id") tag.SetMusicBrainzAlbumArtistID(StringListToVectorString(stringList));
+        else if (frame->description() == "MusicBrainz Album Artist")    SetAlbumArtist(tag, StringListToVectorString(stringList));
         else if (frame->description() == "replaygain_track_gain")       tag.SetReplayGainTrackGain((int)(atof(stringList.front().toCString(true)) * 100 + 0.5));
         else if (frame->description() == "replaygain_album_gain")       tag.SetReplayGainAlbumGain((int)(atof(stringList.front().toCString(true)) * 100 + 0.5));
         else if (frame->description() == "replaygain_track_peak")       tag.SetReplayGainTrackPeak((float)atof(stringList.front().toCString(true)));
@@ -489,6 +501,7 @@ bool CTagLoaderTagLib::ParseAPETag(APE::Tag *ape, EmbeddedArt *art, CMusicInfoTa
     else if (it->first == "REPLAYGAIN_ALBUM_PEAK")     tag.SetReplayGainAlbumPeak((float)atof(it->second.toString().toCString(true)));
     else if (it->first == "MUSICBRAINZ_ARTISTID")      tag.SetMusicBrainzArtistID(StringListToVectorString(it->second.toStringList()));
     else if (it->first == "MUSICBRAINZ_ALBUMARTISTID") tag.SetMusicBrainzAlbumArtistID(StringListToVectorString(it->second.toStringList()));
+    else if (it->first == "MUSICBRAINZ_ALBUMARTIST")   SetAlbumArtist(tag, StringListToVectorString(it->second.toStringList()));
     else if (it->first == "MUSICBRAINZ_ALBUMID")       tag.SetMusicBrainzAlbumID(it->second.toString().to8Bit(true));
     else if (it->first == "MUSICBRAINZ_TRACKID")       tag.SetMusicBrainzTrackID(it->second.toString().to8Bit(true));
     else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX)
@@ -529,6 +542,7 @@ bool CTagLoaderTagLib::ParseXiphComment(Ogg::XiphComment *xiph, EmbeddedArt *art
     else if (it->first == "REPLAYGAIN_ALBUM_PEAK")     tag.SetReplayGainAlbumPeak((float)atof(it->second.front().toCString(true)));
     else if (it->first == "MUSICBRAINZ_ARTISTID")      tag.SetMusicBrainzArtistID(StringListToVectorString(it->second));
     else if (it->first == "MUSICBRAINZ_ALBUMARTISTID") tag.SetMusicBrainzAlbumArtistID(StringListToVectorString(it->second));
+    else if (it->first == "MUSICBRAINZ_ALBUMARTIST")   SetAlbumArtist(tag, StringListToVectorString(it->second));
     else if (it->first == "MUSICBRAINZ_ALBUMID")       tag.SetMusicBrainzAlbumID(it->second.front().to8Bit(true));
     else if (it->first == "MUSICBRAINZ_TRACKID")       tag.SetMusicBrainzTrackID(it->second.front().to8Bit(true));
     else if (it->first == "RATING")
@@ -620,6 +634,8 @@ bool CTagLoaderTagLib::ParseMP4Tag(MP4::Tag *mp4, EmbeddedArt *art, CMusicInfoTa
       tag.SetMusicBrainzArtistID(StringListToVectorString(it->second.toStringList()));
     else if (it->first == "----:com.apple.iTunes:MusicBrainz Album Artist Id")
       tag.SetMusicBrainzAlbumArtistID(StringListToVectorString(it->second.toStringList()));
+    else if (it->first == "----:com.apple.iTunes:MusicBrainz Album Artist")
+      SetAlbumArtist(tag, StringListToVectorString(it->second.toStringList()));
     else if (it->first == "----:com.apple.iTunes:MusicBrainz Album Id")
       tag.SetMusicBrainzAlbumID(it->second.toStringList().front().to8Bit(true));
     else if (it->first == "----:com.apple.iTunes:MusicBrainz Track Id")
index aefce29..c3030c4 100644 (file)
@@ -35,6 +35,7 @@
 #include <taglib/s3mfile.h>
 #include <taglib/trueaudiofile.h>
 #include <taglib/vorbisfile.h>
+#include <taglib/wavfile.h>
 #include <taglib/wavpackfile.h>
 #include <taglib/xmfile.h>
 
index 8ca6877..f5261b7 100644 (file)
@@ -252,7 +252,7 @@ bool CGUIWindowMusicBase::OnAction(const CAction &action)
   return CGUIMediaWindow::OnAction(action);
 }
 
-void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent, bool refresh)
+void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent /* = false */, bool refresh /* = false */)
 {
   CMusicDatabaseDirectory dir;
   CStdString strPath = m_vecItems->GetPath();
@@ -364,12 +364,19 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CFileItem *pItem, bool bShowInfo
 {
   CQueryParams params;
   CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params);
-  CMusicArtistInfo artistInfo;
+
+  ADDON::ScraperPtr scraper;
+  if (!m_musicdatabase.GetScraperForPath(pItem->GetPath(), scraper, ADDON::ADDON_SCRAPER_ARTISTS))
+    return;
+
+  CArtist artist;
+  if (!m_musicdatabase.GetArtist(params.GetArtistId(), artist))
+      return;
+
   while (1)
   {
     // Check if we have the information in the database first
-    if (!m_musicdatabase.HasArtistInfo(params.GetArtistId()) ||
-        !m_musicdatabase.GetArtistInfo(params.GetArtistId(), artistInfo.GetArtist()))
+    if (!m_musicdatabase.HasArtistBeenScraped(params.GetArtistId()))
     {
       if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser)
         break; // should display a dialog saying no permissions
@@ -391,7 +398,7 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CFileItem *pItem, bool bShowInfo
       }
 
       CMusicInfoScanner scanner;
-      if (scanner.UpdateDatabaseArtistInfo(pItem->GetPath(), artistInfo, bShowInfo) != INFO_ADDED || !artistInfo.Loaded())
+      if (scanner.UpdateDatabaseArtistInfo(artist, scraper, bShowInfo, m_dlgProgress) != INFO_ADDED)
       {
         CGUIDialogOK::ShowAndGetInput(21889, 0, 20199, 0);
         break;
@@ -406,12 +413,12 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CFileItem *pItem, bool bShowInfo
     {
       CStdString strPath;
       m_musicdatabase.GetArtistPath(params.GetArtistId(), strPath);
-      pDlgArtistInfo->SetArtist(artistInfo.GetArtist(), strPath);
+      pDlgArtistInfo->SetArtist(artist, strPath);
       pDlgArtistInfo->DoModal();
 
       if (pDlgArtistInfo->NeedRefresh())
       {
-        m_musicdatabase.DeleteArtistInfo(params.GetArtistId());
+        m_musicdatabase.ClearArtistLastScrapedTime(params.GetArtistId());
         continue;
       } 
       else if (pDlgArtistInfo->HasUpdatedThumb()) 
@@ -429,11 +436,18 @@ bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
 {
   CQueryParams params;
   CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params);
-  CMusicAlbumInfo albumInfo;
+
+  ADDON::ScraperPtr scraper;
+  if (!m_musicdatabase.GetScraperForPath(pItem->GetPath(), scraper, ADDON::ADDON_SCRAPER_ALBUMS))
+    return false;
+
+  CAlbum album;
+  if (!m_musicdatabase.GetAlbum(params.GetAlbumId(), album))
+    return false;
+
   while (1)
   {
-    if (!m_musicdatabase.HasAlbumInfo(params.GetAlbumId()) || 
-        !m_musicdatabase.GetAlbumInfo(params.GetAlbumId(), albumInfo.GetAlbum(), &albumInfo.GetAlbum().songs))
+    if (!m_musicdatabase.HasAlbumBeenScraped(params.GetAlbumId()))
     {
       if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser)
       {
@@ -462,7 +476,7 @@ bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
       }
 
       CMusicInfoScanner scanner;
-      if (scanner.UpdateDatabaseAlbumInfo(pItem->GetPath(), albumInfo, bShowInfo) != INFO_ADDED || !albumInfo.Loaded())
+      if (scanner.UpdateDatabaseAlbumInfo(album, scraper, bShowInfo, m_dlgProgress) != INFO_ADDED)
       {
         CGUIDialogOK::ShowAndGetInput(185, 0, 500, 0);
         if (m_dlgProgress)
@@ -479,17 +493,17 @@ bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
     {
       CStdString strPath;
       m_musicdatabase.GetAlbumPath(params.GetAlbumId(), strPath);
-      pDlgAlbumInfo->SetAlbum(albumInfo.GetAlbum(), strPath);
+      pDlgAlbumInfo->SetAlbum(album, strPath);
       pDlgAlbumInfo->DoModal();
 
       if (pDlgAlbumInfo->NeedRefresh())
       {
-        m_musicdatabase.DeleteAlbumInfo(params.GetAlbumId());
+        m_musicdatabase.ClearAlbumLastScrapedTime(params.GetAlbumId());
         continue;
       }
       else if (pDlgAlbumInfo->HasUpdatedThumb())
       {
-        UpdateThumb(albumInfo.GetAlbum(), strPath);
+        UpdateThumb(album, strPath);
       }
     }
     break;
index d3d2aac..74c7e34 100644 (file)
@@ -571,7 +571,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
           return false;
         CStdString path = StringUtils::Format("musicdb://artists/%ld/", idArtist);
         CArtist artist;
-        m_musicdatabase.GetArtistInfo(idArtist,artist,false);
+        m_musicdatabase.GetArtist(idArtist, artist, false);
         *item = CFileItem(artist);
         item->SetPath(path);
         CGUIWindowMusicBase::OnContextButton(itemNumber,button);
@@ -588,7 +588,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
           return false;
         CStdString path = StringUtils::Format("musicdb://albums/%ld/", idAlbum);
         CAlbum album;
-        m_musicdatabase.GetAlbumInfo(idAlbum,album,NULL);
+        m_musicdatabase.GetAlbum(idAlbum, album, false);
         *item = CFileItem(path,album);
         item->SetPath(path);
         CGUIWindowMusicBase::OnContextButton(itemNumber,button);
@@ -766,8 +766,7 @@ void CGUIWindowMusicNav::DisplayEmptyDatabaseMessage(bool bDisplay)
 
 void CGUIWindowMusicNav::OnSearchUpdate()
 {
-  CStdString search(GetProperty("search").asString());
-  CURL::Encode(search);
+  CStdString search(CURL::Encode(GetProperty("search").asString()));
   if (!search.empty())
   {
     CStdString path = "musicsearch://" + search + "/";
index d6979c4..7db6754 100644 (file)
@@ -862,8 +862,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
 
     if (status != AIRPLAY_STATUS_NEED_AUTH)
     {
-      CStdString userAgent="AppleCoreMedia/1.0.0.8F455 (AppleTV; U; CPU OS 4_3 like Mac OS X; de_de)";
-      CURL::Encode(userAgent);
+      CStdString userAgent(CURL::Encode("AppleCoreMedia/1.0.0.8F455 (AppleTV; U; CPU OS 4_3 like Mac OS X; de_de)"));
       location += "|User-Agent=" + userAgent;
 
       CFileItem fileToPlay(location, false);
index 7f40264..4db9f64 100644 (file)
@@ -57,6 +57,8 @@
 #include <map>
 #include <string>
 
+#define TMP_COVERART_PATH "special://temp/airtunes_album_thumb.jpg"
+
 using namespace XFILE;
 using namespace ANNOUNCEMENT;
 
@@ -67,6 +69,9 @@ DllLibShairport *CAirTunesServer::m_pLibShairport = NULL;
 #endif
 CAirTunesServer *CAirTunesServer::ServerInstance = NULL;
 CStdString CAirTunesServer::m_macAddress;
+std::string CAirTunesServer::m_metadata[3];
+CCriticalSection CAirTunesServer::m_metadataLock;
+bool CAirTunesServer::m_streamStarted = false;
 
 //parse daap metadata - thx to project MythTV
 std::map<std::string, std::string> decodeDMAP(const char *buffer, unsigned int size)
@@ -88,38 +93,75 @@ std::map<std::string, std::string> decodeDMAP(const char *buffer, unsigned int s
   return result;
 }
 
-void CAirTunesServer::SetMetadataFromBuffer(const char *buffer, unsigned int size)
+void CAirTunesServer::RefreshMetadata()
 {
+  CSingleLock lock(m_metadataLock);
   MUSIC_INFO::CMusicInfoTag tag;
+  if (m_metadata[0].length())
+    tag.SetAlbum(m_metadata[0]);//album
+  if (m_metadata[1].length())
+    tag.SetTitle(m_metadata[1]);//title
+  if (m_metadata[2].length())
+    tag.SetArtist(m_metadata[2]);//artist
+  
+  CApplicationMessenger::Get().SetCurrentSongTag(tag);
+}
+
+void CAirTunesServer::RefreshCoverArt()
+{
+  CSingleLock lock(m_metadataLock);
+  //reset to empty before setting the new one
+  //else it won't get refreshed because the name didn't change
+  g_infoManager.SetCurrentAlbumThumb("");
+  //update the ui
+  g_infoManager.SetCurrentAlbumThumb(TMP_COVERART_PATH);
+  //update the ui
+  CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_REFRESH_THUMBS);
+  g_windowManager.SendThreadMessage(msg);
+}
+
+void CAirTunesServer::SetMetadataFromBuffer(const char *buffer, unsigned int size)
+{
+
   std::map<std::string, std::string> metadata = decodeDMAP(buffer, size);
+  CSingleLock lock(m_metadataLock);
+
   if(metadata["asal"].length())
-    tag.SetAlbum(metadata["asal"]);//album
+    m_metadata[0] = metadata["asal"];//album
   if(metadata["minm"].length())    
-    tag.SetTitle(metadata["minm"]);//title
+    m_metadata[1] = metadata["minm"];//title
   if(metadata["asar"].length())    
-    tag.SetArtist(metadata["asar"]);//artist
-  CApplicationMessenger::Get().SetCurrentSongTag(tag);
+    m_metadata[2] = metadata["asar"];//artist
+  
+  RefreshMetadata();
 }
 
 void CAirTunesServer::Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
 {
-  if ( (flag & Player) && strcmp(sender, "xbmc") == 0 && strcmp(message, "OnStop") == 0)
+  if ( (flag & Player) && strcmp(sender, "xbmc") == 0)
   {
 #ifdef HAS_AIRPLAY
-    CAirPlayServer::restoreVolume();
+    if (strcmp(message, "OnStop") == 0)
+      CAirPlayServer::restoreVolume();
 #endif
+    if (strcmp(message, "OnPlay") == 0 && m_streamStarted)
+    {
+      RefreshMetadata();
+      RefreshCoverArt();
+    }
   }
 }
 
 void CAirTunesServer::SetCoverArtFromBuffer(const char *buffer, unsigned int size)
 {
   XFILE::CFile tmpFile;
-  const char *tmpFileName = "special://temp/airtunes_album_thumb.jpg";
 
   if(!size)
     return;
 
-  if (tmpFile.OpenForWrite(tmpFileName, true))
+  CSingleLock lock(m_metadataLock);
+  
+  if (tmpFile.OpenForWrite(TMP_COVERART_PATH, true))
   {
     int writtenBytes=0;
     writtenBytes = tmpFile.Write(buffer, size);
@@ -127,13 +169,7 @@ void CAirTunesServer::SetCoverArtFromBuffer(const char *buffer, unsigned int siz
 
     if(writtenBytes)
     {
-      //reset to empty before setting the new one
-      //else it won't get refreshed because the name didn't change
-      g_infoManager.SetCurrentAlbumThumb("");
-      g_infoManager.SetCurrentAlbumThumb(tmpFileName);
-      //update the ui
-      CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_REFRESH_THUMBS);
-      g_windowManager.SendThreadMessage(msg);
+      RefreshCoverArt();
     }
   }
 }
@@ -199,6 +235,7 @@ void* CAirTunesServer::AudioOutputFunctions::audio_init(void *cls, int bits, int
   CFileItem item;
   item.SetPath(pipe->GetName());
   item.SetMimeType("audio/x-xbmc-pcm");
+  m_streamStarted = true;
 
   CApplicationMessenger::Get().PlayFile(item);
 
@@ -261,6 +298,8 @@ void  CAirTunesServer::AudioOutputFunctions::audio_destroy(void *cls, void *sess
     CApplicationMessenger::Get().SendMessage(tMsg, true);
     CLog::Log(LOGDEBUG, "AIRTUNES: AirPlay not running - stopping player");
   }
+  
+  m_streamStarted = false;
 }
 
 void shairplay_log(void *cls, int level, const char *msg)
@@ -394,6 +433,8 @@ ao_device* CAirTunesServer::AudioOutputFunctions::ao_open_live(int driver_id, ao
   if (ao_get_option(option, "name"))
     item.GetMusicInfoTag()->SetTitle(ao_get_option(option, "name"));
 
+  m_streamStarted = true;
+
   CApplicationMessenger::Get().PlayFile(item);
 
   return (ao_device*) device;
@@ -422,6 +463,7 @@ int CAirTunesServer::AudioOutputFunctions::ao_close(ao_device *device)
   }
 
   delete device_xbmc;
+  m_streamStarted = false;
 
   return 0;
 }
index 64c7a0a..642fde2 100644 (file)
@@ -65,6 +65,8 @@ private:
   ~CAirTunesServer();
   bool Initialize(const CStdString &password);
   void Deinitialize();
+  static void RefreshCoverArt();
+  static void RefreshMetadata();
 
   int m_port;
 #if defined(HAVE_LIBSHAIRPLAY)
@@ -76,6 +78,9 @@ private:
 #endif
   static CAirTunesServer *ServerInstance;
   static CStdString m_macAddress;
+  static CCriticalSection m_metadataLock;
+  static std::string m_metadata[3];//0 - album, 1 - title, 2 - artist
+  static bool m_streamStarted;
 
   class AudioOutputFunctions
   {
index 878d9c5..bbcf286 100644 (file)
@@ -329,18 +329,19 @@ CWakeOnAccess &CWakeOnAccess::Get()
   return sWakeOnAccess;
 }
 
-void CWakeOnAccess::WakeUpHost(const CURL& url)
+bool CWakeOnAccess::WakeUpHost(const CURL& url)
 {
   CStdString hostName = url.GetHostName();
 
   if (!hostName.empty())
-    WakeUpHost (hostName, url.Get());
+    return WakeUpHost (hostName, url.Get());
+  return true;
 }
 
-void CWakeOnAccess::WakeUpHost (const CStdString& hostName, const string& customMessage)
+bool CWakeOnAccess::WakeUpHost (const CStdString& hostName, const string& customMessage)
 {
   if (!IsEnabled())
-    return; // bail if feature is turned off
+    return true; // bail if feature is turned off
 
   WakeUpEntry server;
 
@@ -353,15 +354,18 @@ void CWakeOnAccess::WakeUpHost (const CStdString& hostName, const string& custom
     if (nesting.IsNested()) // we might get in trouble if it gets called back in loop
       CLog::Log(LOGWARNING,"WakeOnAccess recursively called on gui-thread [%d]", NestDetect::Level());
 
-    WakeUpHost(server);
+    bool ret = WakeUpHost(server);
 
     TouchHostEntry(hostName);
+
+    return ret;
   }
+  return true;
 }
 
 #define LOCALIZED(id) g_localizeStrings.Get(id)
 
-void CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
+bool CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
 {
   CStdString heading = StringUtils::Format(LOCALIZED(13027), server.host.c_str());
 
@@ -373,7 +377,7 @@ void CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
     if (dlg.ShowAndWait (waitObj, m_netinit_sec, LOCALIZED(13028)) != ProgressDialogHelper::Success)
     {
       CLog::Log(LOGNOTICE,"WakeOnAccess timeout/cancel while waiting for network");
-      return; // timedout or canceled
+      return false; // timedout or canceled
     }
   }
 
@@ -383,7 +387,7 @@ void CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
     if (g_application.getNetwork().PingHost(dst_ip, server.ping_port, 500)) // quick ping with short timeout to not block too long
     {
       CLog::Log(LOGNOTICE,"WakeOnAccess success exit, server already running");
-      return;
+      return true;
     }
   }
 
@@ -393,7 +397,7 @@ void CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
 
     if (g_application.IsCurrentThread() || !g_application.m_pPlayer->IsPlaying())
       CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, heading, LOCALIZED(13029));
-    return;
+    return false;
   }
 
   {
@@ -408,17 +412,19 @@ void CWakeOnAccess::WakeUpHost(const WakeUpEntry& server)
     if (result != ProgressDialogHelper::Success)
     {
       CLog::Log(LOGNOTICE,"WakeOnAccess timeout/cancel while waiting for response");
-      return; // timedout or canceled
+      return false; // timedout or canceled
     }
   }
 
   {
     WaitCondition waitObj ; // wait uninteruptable fixed time for services ..
 
-    dlg.ShowAndWait (waitObj, server.wait_services_sec, LOCALIZED(13032));
+    if (ProgressDialogHelper::Success != dlg.ShowAndWait (waitObj, server.wait_services_sec, LOCALIZED(13032)))
+      return false;
 
     CLog::Log(LOGNOTICE,"WakeOnAccess sequence completed, server started");
   }
+  return true;
 }
 
 bool CWakeOnAccess::FindOrTouchHostEntry (const CStdString& hostName, WakeUpEntry& result)
index c4fe564..ccd81a4 100644 (file)
@@ -28,8 +28,8 @@ class CWakeOnAccess : private IJobCallback, public ISettingsHandler
 public:
   static CWakeOnAccess &Get();
 
-  void WakeUpHost (const CURL& fileUrl);
-  void WakeUpHost (const CStdString& hostName, const std::string& customMessage);
+  bool WakeUpHost (const CURL& fileUrl);
+  bool WakeUpHost (const CStdString& hostName, const std::string& customMessage);
 
   void QueueMACDiscoveryForAllRemotes();
 
@@ -77,5 +77,5 @@ private:
 
   bool m_enabled;
 
-  void WakeUpHost(const WakeUpEntry& server);
+  bool WakeUpHost(const WakeUpEntry& server);
 };
index 96cb3cb..208d17c 100644 (file)
@@ -853,8 +853,7 @@ bool CWebServer::PrepareDownload(const char *path, CVariant &details, std::strin
       url = "image/";
     else
       url = "vfs/";
-    CURL::Encode(strPath);
-    url += strPath;
+    url += CURL::Encode(strPath);
     details["path"] = url;
     return true;
   }
index 46692c2..e9ce9e9 100644 (file)
@@ -183,8 +183,7 @@ public:
     {
         NPT_String path = "upnp://"+device->GetUUID()+"/";
         if (!NPT_StringsEqual(item_id, "0")) {
-            CStdString id = item_id;
-            CURL::Encode(id);
+            CStdString id(CURL::Encode(item_id));
             URIUtils::AddSlashAtEnd(id);
             path += id.c_str();
         }
index 4e3100d..6841a61 100644 (file)
@@ -76,6 +76,22 @@ EClientQuirks GetClientQuirks(const PLT_HttpRequestContext* context)
 }
 
 /*----------------------------------------------------------------------
+|  GetMediaControllerQuirks
++---------------------------------------------------------------------*/
+EMediaControllerQuirks GetMediaControllerQuirks(const PLT_DeviceData *device)
+{
+    if (device == NULL)
+        return EMEDIACONTROLLERQUIRKS_NONE;
+
+    unsigned int quirks = 0;
+
+    if (device->m_Manufacturer.Find("Samsung Electronics") >= 0)
+        quirks |= EMEDIACONTROLLERQUIRKS_X_MKV;
+
+    return (EMediaControllerQuirks)quirks;
+}
+
+/*----------------------------------------------------------------------
 |   GetMimeType
 +---------------------------------------------------------------------*/
 NPT_String
@@ -631,7 +647,7 @@ PopulateTagFromObject(CVideoInfoTag&         tag,
                       PLT_MediaItemResource* resource /* = NULL */)
 {
     CDateTime date;
-    date.SetFromDateString((const char*)object.m_Date);
+    date.SetFromW3CDate((const char*)object.m_Date);
 
     if(!object.m_Recorded.program_title.IsEmpty())
     {
index a2e7583..8e9c089 100644 (file)
@@ -28,6 +28,7 @@
 class CUPnPServer;
 class CFileItem;
 class CThumbLoader;
+class PLT_DeviceData;
 class PLT_HttpRequestContext;
 class PLT_MediaItemResource;
 class PLT_MediaObject;
@@ -64,6 +65,16 @@ namespace UPNP
 
   EClientQuirks GetClientQuirks(const PLT_HttpRequestContext* context);
 
+  enum EMediaControllerQuirks
+  {
+    EMEDIACONTROLLERQUIRKS_NONE   = 0x00
+
+    /* Media Controller expects MIME type video/x-mkv instead of video/x-matroska (Samsung) */
+  , EMEDIACONTROLLERQUIRKS_X_MKV  = 0x01
+  };
+
+  EMediaControllerQuirks GetMediaControllerQuirks(const PLT_DeviceData *device);
+
   const char* GetMimeTypeFromExtension(const char* extension, const PLT_HttpRequestContext* context = NULL);
   NPT_String  GetMimeType(const CFileItem& item, const PLT_HttpRequestContext* context = NULL);
   NPT_String  GetMimeType(const char* filename, const PLT_HttpRequestContext* context = NULL);
index b78f97b..72c7e96 100644 (file)
@@ -37,6 +37,8 @@
 #include "Application.h"
 #include "dialogs/GUIDialogBusy.h"
 #include "guilib/GUIWindowManager.h"
+#include "guilib/Key.h"
+#include "dialogs/GUIDialogYesNo.h"
 
 
 NPT_SET_LOCAL_LOGGER("xbmc.upnp.player")
@@ -161,6 +163,7 @@ CUPnPPlayer::CUPnPPlayer(IPlayerCallback& callback, const char* uuid)
 , m_control(NULL)
 , m_delegate(NULL)
 , m_started(false)
+, m_stopremote(false)
 {
   m_control  = CUPnP::GetInstance()->m_MediaController;
 
@@ -207,67 +210,77 @@ static NPT_Result WaitOnEvent(CEvent& event, XbmcThreads::EndTime& timeout, CGUI
   return NPT_FAILURE;
 }
 
-bool CUPnPPlayer::OpenFile(const CFileItem& file, const CPlayerOptions& options)
+int CUPnPPlayer::PlayFile(const CFileItem& file, const CPlayerOptions& options, CGUIDialogBusy*& dialog, XbmcThreads::EndTime& timeout)
 {
   CFileItem item(file);
   NPT_Reference<CThumbLoader> thumb_loader;
   NPT_Reference<PLT_MediaObject> obj;
   NPT_String path(file.GetPath().c_str());
   NPT_String tmp, resource;
-  XbmcThreads::EndTime timeout;
-  CGUIDialogBusy* dialog = NULL;
+  EMediaControllerQuirks quirks = EMEDIACONTROLLERQUIRKS_NONE;
 
   NPT_CHECK_POINTER_LABEL_SEVERE(m_delegate, failed);
 
-  timeout.Set(10000);
+  if (file.IsVideoDb())
+    thumb_loader = NPT_Reference<CThumbLoader>(new CVideoThumbLoader());
+  else if (item.IsMusicDb())
+    thumb_loader = NPT_Reference<CThumbLoader>(new CMusicThumbLoader());
 
-  /* if no path we want to attach to a already playing player */
-  if(path != "") {
-    if (file.IsVideoDb())
-      thumb_loader = NPT_Reference<CThumbLoader>(new CVideoThumbLoader());
-    else if (item.IsMusicDb())
-      thumb_loader = NPT_Reference<CThumbLoader>(new CMusicThumbLoader());
+  obj = BuildObject(item, path, false, thumb_loader, NULL, CUPnP::GetServer());
+  if(obj.IsNull()) goto failed;
 
-    obj = BuildObject(item, path, false, thumb_loader, NULL, CUPnP::GetServer());
-    if(obj.IsNull()) goto failed;
+  NPT_CHECK_LABEL_SEVERE(PLT_Didl::ToDidl(*obj, "", tmp), failed);
+  tmp.Insert(didl_header, 0);
+  tmp.Append(didl_footer);
 
-    NPT_CHECK_LABEL_SEVERE(PLT_Didl::ToDidl(*obj, "", tmp), failed);
-    tmp.Insert(didl_header, 0);
-    tmp.Append(didl_footer);
+  quirks = GetMediaControllerQuirks(m_delegate->m_device.AsPointer());
+  if (quirks & EMEDIACONTROLLERQUIRKS_X_MKV)
+  {
+    for (NPT_Cardinal i=0; i< obj->m_Resources.GetItemCount(); i++) {
+      if (obj->m_Resources[i].m_ProtocolInfo.GetContentType().Compare("video/x-matroska") == 0) {
+        NPT_String protocolInfo = obj->m_Resources[i].m_ProtocolInfo.ToString();
+        protocolInfo.Replace(":video/x-matroska:", ":video/x-mkv:");
+        obj->m_Resources[i].m_ProtocolInfo = PLT_ProtocolInfo(protocolInfo);
+      }
+    }
+  }
 
-    /* The resource uri's are stored in the Didl. We must choose the best resource
-     * for the playback device */
-    NPT_Cardinal res_index;
-    NPT_CHECK_LABEL_SEVERE(m_control->FindBestResource(m_delegate->m_device, *obj, res_index), failed);
+  /* The resource uri's are stored in the Didl. We must choose the best resource
+   * for the playback device */
+  NPT_Cardinal res_index;
+  NPT_CHECK_LABEL_SEVERE(m_control->FindBestResource(m_delegate->m_device, *obj, res_index), failed);
 
 
-    /* dlna specifies that a return code of 705 should be returned
-     * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */
-    NPT_CHECK_LABEL_SEVERE(m_control->Stop(m_delegate->m_device
-                                           , m_delegate->m_instance
-                                           , m_delegate), failed);
-    NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
-    NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
+  timeout.Set(timeout.GetInitialTimeoutValue());
+  /* dlna specifies that a return code of 705 should be returned
+   * if TRANSPORT_STATE is not STOPPED or NO_MEDIA_PRESENT */
+  NPT_CHECK_LABEL_SEVERE(m_control->Stop(m_delegate->m_device
+                                         , m_delegate->m_instance
+                                         , m_delegate), failed);
+  NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
+  NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
 
 
-    NPT_CHECK_LABEL_SEVERE(m_control->SetAVTransportURI(m_delegate->m_device
-                                                      , m_delegate->m_instance
-                                                      , obj->m_Resources[res_index].m_Uri
-                                                      , (const char*)tmp
-                                                      , m_delegate), failed);
-    NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
-    NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
+  timeout.Set(timeout.GetInitialTimeoutValue());
+  NPT_CHECK_LABEL_SEVERE(m_control->SetAVTransportURI(m_delegate->m_device
+                                                    , m_delegate->m_instance
+                                                    , obj->m_Resources[res_index].m_Uri
+                                                    , (const char*)tmp
+                                                    , m_delegate), failed);
+  NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
+  NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
 
-    NPT_CHECK_LABEL_SEVERE(m_control->Play(m_delegate->m_device
-                                         , m_delegate->m_instance
-                                         , "1"
-                                         , m_delegate), failed);
-    NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
-    NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
-  }
+  timeout.Set(timeout.GetInitialTimeoutValue());
+  NPT_CHECK_LABEL_SEVERE(m_control->Play(m_delegate->m_device
+                                       , m_delegate->m_instance
+                                       , "1"
+                                       , m_delegate), failed);
+  NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_resevent, timeout, dialog), failed);
+  NPT_CHECK_LABEL_SEVERE(m_delegate->m_resstatus, failed);
 
 
   /* wait for PLAYING state */
+  timeout.Set(timeout.GetInitialTimeoutValue());
   do {
     NPT_CHECK_LABEL_SEVERE(m_control->GetTransportInfo(m_delegate->m_device
                                                      , m_delegate->m_instance
@@ -301,6 +314,36 @@ bool CUPnPPlayer::OpenFile(const CFileItem& file, const CPlayerOptions& options)
                                     , m_delegate), failed);
   }
 
+  return NPT_SUCCESS;
+failed:
+  return NPT_FAILURE;
+}
+
+bool CUPnPPlayer::OpenFile(const CFileItem& file, const CPlayerOptions& options)
+{
+  CGUIDialogBusy* dialog = NULL;
+  XbmcThreads::EndTime timeout(10000);
+
+  /* if no path we want to attach to a already playing player */
+  if(file.GetPath() == "")
+  {
+    NPT_CHECK_LABEL_SEVERE(m_control->GetTransportInfo(m_delegate->m_device
+                                                     , m_delegate->m_instance
+                                                     , m_delegate), failed);
+
+    NPT_CHECK_LABEL_SEVERE(WaitOnEvent(m_delegate->m_traevnt, timeout, dialog), failed);
+
+    /* make sure the attached player is actually playing */
+    { CSingleLock lock(m_delegate->m_section);
+      if(m_delegate->m_trainfo.cur_transport_state != "PLAYING"
+      && m_delegate->m_trainfo.cur_transport_state != "PAUSED_PLAYBACK")
+        goto failed;
+    }
+  }
+  else
+    NPT_CHECK_LABEL_SEVERE(PlayFile(file, options, dialog, timeout), failed);
+
+  m_stopremote = true;
   m_started = true;
   m_callback.OnPlayBackStarted();
   NPT_CHECK_LABEL_SEVERE(m_control->GetPositionInfo(m_delegate->m_device
@@ -357,15 +400,24 @@ failed:
   return false;
 }
 
-bool CUPnPPlayer::CloseFile()
+bool CUPnPPlayer::CloseFile(bool reopen)
 {
   NPT_CHECK_POINTER_LABEL_SEVERE(m_delegate, failed);
-  NPT_CHECK_LABEL(m_control->Stop(m_delegate->m_device
-                                , m_delegate->m_instance
-                                , m_delegate), failed);
-  if(!m_delegate->m_resevent.WaitMSec(10000)) goto failed;
-  NPT_CHECK_LABEL(m_delegate->m_resstatus, failed);
-  m_callback.OnPlayBackStopped();
+  if(m_stopremote)
+  {
+    NPT_CHECK_LABEL(m_control->Stop(m_delegate->m_device
+                                  , m_delegate->m_instance
+                                  , m_delegate), failed);
+    if(!m_delegate->m_resevent.WaitMSec(10000)) goto failed;
+    NPT_CHECK_LABEL(m_delegate->m_resstatus, failed);
+  }
+
+  if(m_started)
+  {
+    m_started = false;
+    m_callback.OnPlayBackStopped();
+  }
+
   return true;
 failed:
   CLog::Log(LOGERROR, "UPNP: CUPnPPlayer::CloseFile - unable to stop playback");
@@ -509,4 +561,22 @@ CStdString CUPnPPlayer::GetPlayingTitle()
   return "";
 };
 
+bool CUPnPPlayer::OnAction(const CAction &action)
+{
+  switch (action.GetID())
+  {
+    case ACTION_STOP:
+      if(IsPlaying())
+      {
+        if(CGUIDialogYesNo::ShowAndGetInput(37022, 37023, 0, 0)) /* stop on remote system */
+          m_stopremote = true;
+        else
+          m_stopremote = false;
+        return false; /* let normal code handle the action */
+      }
+    default:
+      return false;
+  }
+}
+
 } /* namespace UPNP */
index 61e31ee..777dc33 100644 (file)
 #include "cores/IPlayer.h"
 
 class PLT_MediaController;
+class CGUIDialogBusy;
+
+namespace XbmcThreads { class EndTime; }
+
 
 namespace UPNP
 {
@@ -37,7 +41,7 @@ public:
 
   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions& options);
   virtual bool QueueNextFile(const CFileItem &file);
-  virtual bool CloseFile();
+  virtual bool CloseFile(bool reopen = false);
   virtual bool IsPlaying() const;
   virtual void Pause();
   virtual bool IsPaused() const;
@@ -68,16 +72,19 @@ public:
   virtual bool IsCaching() const {return false;};
   virtual int GetCacheLevel() const {return -1;};
   virtual void DoAudioWork();
-
+  virtual bool OnAction(const CAction &action);
 
   virtual CStdString GetPlayingTitle();
 
+  int PlayFile(const CFileItem& file, const CPlayerOptions& options, CGUIDialogBusy*& dialog, XbmcThreads::EndTime& timeout);
+
 private:
   PLT_MediaController*   m_control;
   CUPnPPlayerController* m_delegate;
   CStdString             m_current_uri;
   CStdString             m_current_meta;
   bool                   m_started;
+  bool                   m_stopremote;
 };
 
 } /* namespace UPNP */
index c8238f1..3737aff 100644 (file)
@@ -157,6 +157,7 @@ CUPnPRenderer::SetupServices()
         ",http-get:*:video/xvid:*"
         ",http-get:*:video/x-divx:*"
         ",http-get:*:video/x-matroska:*"
+        ",http-get:*:video/x-mkv:*"
         ",http-get:*:video/x-ms-wmv:*"
         ",http-get:*:video/x-ms-avi:*"
         ",http-get:*:video/x-flv:*"
@@ -210,7 +211,7 @@ CUPnPRenderer::ProcessHttpGetRequest(NPT_HttpRequest&              request,
             }
 
             // open the file
-            CStdString path = CURL::Decode((const char*) filepath);
+            CStdString path (CURL::Decode((const char*) filepath));
             NPT_File file(path.c_str());
             NPT_Result result = file.Open(NPT_FILE_OPEN_MODE_READ);
             if (NPT_FAILED(result)) {
index 5c9e982..7fe0d27 100644 (file)
@@ -225,7 +225,7 @@ NPT_String CUPnPServer::BuildSafeResourceUri(const NPT_HttpUrl &rooturi,
     else
       filename = URIUtils::GetFileName(file_path);
 
-    CURL::Encode(filename);
+    filename = CURL::Encode(filename);
     md5state.append(file_path);
     md5state.getDigest(md5);
     md5 += "/" + filename;
@@ -297,12 +297,12 @@ CUPnPServer::Build(CFileItemPtr                  item,
                     }
                     else if (params.GetAlbumId() >= 0 ) {
                         CAlbum album;
-                        if (db.GetAlbumInfo(params.GetAlbumId(), album, NULL))
+                        if (db.GetAlbum(params.GetAlbumId(), album, false))
                             item->GetMusicInfoTag()->SetAlbum(album);
                     }
                     else if (params.GetArtistId() >= 0 ) {
                         CArtist artist;
-                        if (db.GetArtistInfo(params.GetArtistId(), artist, false))
+                        if (db.GetArtist(params.GetArtistId(), artist, false))
                             item->GetMusicInfoTag()->SetArtist(artist);
                     }
                 }
@@ -988,7 +988,7 @@ CUPnPServer::OnUpdateObject(PLT_ActionReference&             action,
                             NPT_Map<NPT_String,NPT_String>&  new_vals,
                             const PLT_HttpRequestContext&    context)
 {
-    CStdString path = CURL::Decode(object_id);
+    CStdString path(CURL::Decode(object_id));
     CFileItem updated;
     updated.SetPath(path);
     CLog::Log(LOGINFO, "UPnP: OnUpdateObject: %s from %s", path.c_str(),
index cb0b7ac..0637720 100644 (file)
@@ -77,7 +77,11 @@ enum iosPlatform
   iPad3,
   iPad4WIFI,
   iPad4,
-  iPad4GSMCDMA,  
+  iPad4GSMCDMA,
+  iPadAirWifi,
+  iPadAirCellular,
+  iPadMini2Wifi,
+  iPadMini2Cellular,
 };
 
 // platform strings are based on http://theiphonewiki.com/wiki/Models
@@ -127,6 +131,11 @@ enum iosPlatform getIosPlatform()
   if ([platform isEqualToString:@"iPad3,4"])      return iPad4WIFI;
   if ([platform isEqualToString:@"iPad3,5"])      return iPad4;
   if ([platform isEqualToString:@"iPad3,6"])      return iPad4GSMCDMA;
+  if ([platform isEqualToString:@"iPad4,1"])      return iPadAirWifi;
+  if ([platform isEqualToString:@"iPad4,2"])      return iPadAirCellular;
+  if ([platform isEqualToString:@"iPad4,4"])      return iPadMini2Wifi;
+  if ([platform isEqualToString:@"iPad4,5"])      return iPadMini2Cellular;
+  
   if ([platform isEqualToString:@"AppleTV2,1"])   return AppleTV2;
 #endif
   return iDeviceUnknown;
index 0b74f5c..a4b5d0d 100644 (file)
@@ -113,6 +113,7 @@ const CGFloat timeFadeSecs                    = 2.0;
     [_internalWindow setBackgroundColor:[UIColor blackColor]];
     [_internalWindow setScreen:[UIScreen mainScreen]];
     [_internalWindow makeKeyAndVisible];
+    [_internalWindow setRootViewController:self];
 
     [self setWantsFullScreenLayout:YES];
 
@@ -336,6 +337,20 @@ const CGFloat timeFadeSecs                    = 2.0;
   [super dealloc];  
 }
 //--------------------------------------------------------------
+// - iOS6 rotation API - will be called on iOS7 runtime!--------
+- (NSUInteger)supportedInterfaceOrientations
+{
+  // mask defines available as of ios6 sdk
+  //return UIInterfaceOrientationMaskAll;
+  return (1 << UIInterfaceOrientationLandscapeLeft) | (1 << UIInterfaceOrientationLandscapeRight) |
+  (1 << UIInterfaceOrientationPortraitUpsideDown) | (1 << UIInterfaceOrientationPortrait);
+}
+- (BOOL)shouldAutorotate
+{
+  _startup = false;
+  return [self shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)[[UIDevice currentDevice] orientation]];
+}
+// - old rotation API will be called on iOS6 and lower - removed in iOS7
 -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 { 
   if(_startup)
@@ -371,4 +386,5 @@ const CGFloat timeFadeSecs                    = 2.0;
     }
   }
 }
+//--------------------------------------------------------------
 @end
index 2aee7ca..92b7870 100644 (file)
   bool _externalScreen;
   IOSEAGLView *_glView;
   IOSExternalTouchController *_externalTouchController;
+  UIInterfaceOrientation _lastTouchControllerOrientation;
 }
 @property unsigned int  _screenIdx;
 @property (readonly, getter=isExternalScreen)bool _externalScreen;
 @property (assign, setter=setView:) IOSEAGLView *_glView;
+@property UIInterfaceOrientation _lastTouchControllerOrientation;
 
 // init the screenmanager with our eaglview
 //- (id)      initWithView:(IOSEAGLView *)view;
index bbb4d47..1fe7f7a 100644 (file)
@@ -53,6 +53,7 @@ static CEvent screenChangeEvent;
 @synthesize _screenIdx;
 @synthesize _externalScreen;
 @synthesize _glView;
+@synthesize _lastTouchControllerOrientation;
 
 //--------------------------------------------------------------
 - (void) fadeFromBlack:(CGFloat) delaySecs
@@ -90,7 +91,16 @@ static CEvent screenChangeEvent;
 
     [_glView setScreen:newScreen withFrameBufferResize:TRUE];//will also resize the framebuffer
 
-    [g_xbmcController activateScreen:newScreen];// will attach the screen to xbmc mainwindow
+    if (toExternal)
+    {
+      // portrait on external screen means its landscape for xbmc
+      [g_xbmcController activateScreen:newScreen withOrientation:UIInterfaceOrientationPortrait];// will attach the screen to xbmc mainwindow
+    }
+    else
+    {
+      // switching back to internal - use same orientation as we used for the touch controller
+      [g_xbmcController activateScreen:newScreen withOrientation:_lastTouchControllerOrientation];// will attach the screen to xbmc mainwindow
+    }
 
     if(toExternal)//changing the external screen might need some time ...
     {
@@ -142,6 +152,7 @@ static CEvent screenChangeEvent;
 
   if([self willSwitchToInternal:screenIdx] && _externalTouchController != nil)
   {
+    _lastTouchControllerOrientation = [_externalTouchController interfaceOrientation];
     [_externalTouchController release];
     _externalTouchController = nil;
   }
index 2705d23..4f6c608 100644 (file)
@@ -9,7 +9,7 @@
        <key>CFBundleExecutable</key>
        <string>XBMC</string>
        <key>CFBundleGetInfoString</key>
-       <string>13.0.alpha11</string>
+       <string>13.0.alpha12</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.alpha11</string>
+       <string>13.0.alpha12</string>
        <key>CFBundleVersion</key>
        <string>r####</string>
        <key>CFBundleSignature</key>
index c410b70..2961414 100644 (file)
@@ -57,7 +57,7 @@
 - (void) startAnimation;
 - (void) stopAnimation;
 - (bool) changeScreen: (unsigned int)screenIdx withMode:(UIScreenMode *)mode;
-- (void) activateScreen: (UIScreen *)screen;
+- (void) activateScreen: (UIScreen *)screen withOrientation:(UIInterfaceOrientation)newOrientation;
 - (id) glView;
 - (void) setGlView:(id)view;
 - (BOOL) ATVClientEventFromBREvent:(id)event Repeatable:(bool *)isRepeatable ButtonState:(bool *)isPressed Result:(int *)xbmc_ir_key;
index 4c2e882..0ad2135 100644 (file)
@@ -1333,7 +1333,7 @@ static bool XBMCController$changeScreen(XBMCController* self, SEL _cmd, unsigned
   return [[IOSScreenManager sharedInstance] changeScreen: screenIdx withMode: mode];
 }
 //--------------------------------------------------------------
-static void XBMCController$activateScreen(XBMCController* self, SEL _cmd, UIScreen * screen) 
+static void XBMCController$activateScreen(XBMCController* self, SEL _cmd, UIScreen * screen, UIInterfaceOrientation newOrientation
 {
 }
 
@@ -1500,9 +1500,11 @@ static __attribute__((constructor)) void initControllerRuntimeClasses()
   i += 1;
   memcpy(_typeEncoding + i, @encode(UIScreen *), strlen(@encode(UIScreen *)));
   i += strlen(@encode(UIScreen *));
+  _typeEncoding[i] = 'I';
+  i += 1;
   _typeEncoding[i] = '\0';
   // XBMCController::activateScreen$
-  class_addMethod(XBMCControllerCls, @selector(activateScreen:), (IMP)&XBMCController$activateScreen, _typeEncoding);
+  class_addMethod(XBMCControllerCls, @selector(activateScreen:withOrientation:), (IMP)&XBMCController$activateScreen, _typeEncoding);
 
   // and hook up our methods (implementation of the base class methods)
   // XBMCController::brEventAction
index 96a12ec..8392d2a 100644 (file)
@@ -29,7 +29,7 @@
   bool *_canceled;
   BOOL _deactivated;
   UITextField *_textField;
-  UILabel *_heading;
+  UITextField *_heading;
   int _keyboardIsShowing; // 0: not, 1: will show, 2: showing
   CGFloat _kbHeight;
 }
index 6b52d83..8fb6f55 100644 (file)
@@ -61,15 +61,22 @@ static CEvent keyboardFinishedEvent;
                                        INPUT_BOX_HEIGHT);
     _textField = [[UITextField alloc] initWithFrame:textFieldFrame];
     _textField.clearButtonMode = UITextFieldViewModeAlways;
-    _textField.borderStyle = UITextBorderStyleRoundedRect;
+    // UITextBorderStyleRoundedRect; - with round rect we can't control backgroundcolor
+    _textField.borderStyle = UITextBorderStyleNone;    
     _textField.returnKeyType = UIReturnKeyDone;
     _textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
+    _textField.backgroundColor = [UIColor whiteColor];
+    _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
     _textField.delegate = self;
     
     CGRect labelFrame = textFieldFrame;
     labelFrame.origin.x = 0;
-    _heading = [[UILabel alloc] initWithFrame:labelFrame];
+    _heading = [[UITextField alloc] initWithFrame:labelFrame];
+    _heading.borderStyle = UITextBorderStyleNone;
+    _heading.backgroundColor = [UIColor whiteColor];
     _heading.adjustsFontSizeToFitWidth = YES;
+    _heading.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
+    _heading.enabled = NO;
 
     [self addSubview:_heading];
     [self addSubview:_textField];
index a08bcd5..91930e8 100644 (file)
 #import "XBMCController.h"
 #import "IOSScreenManager.h"
 #import "XBMCDebugHelpers.h"
+#import <objc/runtime.h>
 
 @implementation XBMCApplicationDelegate
 XBMCController *m_xbmcController;  
 
+// - iOS6 rotation API - will be called on iOS7 runtime!--------
+// - on iOS7 first application is asked for supported orientation
+// - then the controller of the current view is asked for supported orientation
+// - if both say OK - rotation is allowed
+- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
+{
+  if ([[window rootViewController] respondsToSelector:@selector(supportedInterfaceOrientations)])
+    return [[window rootViewController] supportedInterfaceOrientations];
+  else
+    return (1 << UIInterfaceOrientationLandscapeRight) | (1 << UIInterfaceOrientationLandscapeLeft);
+}
+
 - (void)applicationWillResignActive:(UIApplication *)application
 {
   PRINT_SIGNATURE();
@@ -76,8 +89,6 @@ XBMCController *m_xbmcController;
 - (void)screenDidDisconnect:(NSNotification *)aNotification
 {
   [IOSScreenManager updateResolutions];
-  //switch back to mainscreen when external screen is removed
-  [[IOSScreenManager sharedInstance] screenDisconnect];
 }
 
 - (void)registerScreenNotifications:(BOOL)bRegister
@@ -152,68 +163,123 @@ XBMCController *m_xbmcController;
 }
 @end
 
-@interface XBMCApplication : UIApplication{
-}
-@end
-
-@implementation XBMCApplication
+//---------------- HOOK FOR BT KEYBOARD CURSORS KEYS START----------------
 #define GSEVENT_TYPE 2
 #define GSEVENT_FLAGS 12
 #define GSEVENTKEY_KEYCODE 15
+#define GSEVENTKEY_KEYCODE_IOS7 17
+#define GSEVENTKEY_KEYCODE_64_BIT 19
 #define GSEVENT_TYPE_KEYUP 11
 
-- (void)sendEvent:(UIEvent *)event
+#define MSHookMessageEx(class, selector, replacement, result) \
+(*(result) = method_setImplementation(class_getInstanceMethod((class), (selector)), (replacement)))
+
+static UniChar kGKKeyboardDirectionRight = 79;
+static UniChar kGKKeyboardDirectionLeft = 80;
+static UniChar kGKKeyboardDirectionDown = 81;
+static UniChar kGKKeyboardDirectionUp = 82;
+
+// pointer to the original hooked method
+static void (*UIApplication$sendEvent$Orig)(id, SEL, UIEvent*);
+
+static bool ios7Detected = false;
+
+void handleKeyCode(UniChar keyCode)
+{
+  XBMCKey key = XBMCK_UNKNOWN;
+  //LOG(@"%s: tmp key %x", __PRETTY_FUNCTION__, keyCode);
+  if      (keyCode == kGKKeyboardDirectionRight)
+    key = XBMCK_RIGHT;
+  else if (keyCode == kGKKeyboardDirectionLeft)
+    key = XBMCK_LEFT;
+  else if (keyCode == kGKKeyboardDirectionDown)
+    key = XBMCK_DOWN;
+  else if (keyCode == kGKKeyboardDirectionUp)
+    key = XBMCK_UP;
+  else
+  {
+    //LOG(@"%s: tmp key unsupported :(", __PRETTY_FUNCTION__);
+    return; // not supported by us - return...
+  }
+  
+  [g_xbmcController sendKey:key];
+}
+
+static void XBMCsendEvent(id _self, SEL _cmd, UIEvent *event)
 { 
-  [super sendEvent:event];
+  // call super implementation
+  UIApplication$sendEvent$Orig(_self, _cmd, event);
 
   if ([event respondsToSelector:@selector(_gsEvent)]) 
   {
     // Key events come in form of UIInternalEvents.
     // They contain a GSEvent object which contains 
     // a GSEventRecord among other things
-    int *eventMem;
-    eventMem = (int *)[event performSelector:@selector(_gsEvent)];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+    int *eventMem = (int *)[event performSelector:@selector(_gsEvent)];
+#pragma clang diagnostic pop
+
     if (eventMem) 
     {
       // So far we got a GSEvent :)
       int eventType = eventMem[GSEVENT_TYPE];
       if (eventType == GSEVENT_TYPE_KEYUP) 
       {
+        // support 32 and 64bit arm here...
+        int idx = GSEVENTKEY_KEYCODE;
+        if (sizeof(NSInteger) == 8)
+          idx = GSEVENTKEY_KEYCODE_64_BIT;
+        else if (ios7Detected)
+          idx = GSEVENTKEY_KEYCODE_IOS7;
+
         // Now we got a GSEventKey!
         
         // Read flags from GSEvent
         // for modifier keys if we want to use them somehow at a later time
         //int eventFlags = eventMem[GSEVENT_FLAGS];
         // Read keycode from GSEventKey
-        UniChar tmp = (UniChar)eventMem[GSEVENTKEY_KEYCODE];
-        XBMCKey key = XBMCK_UNKNOWN;
-        switch (tmp)
-        {
-          case 0x4f:
-            // right
-            key = XBMCK_RIGHT;
-            break;
-          case 0x50:
-            // left
-            key = XBMCK_LEFT;
-            break;
-          case 0x51:
-            // down
-            key = XBMCK_DOWN;
-            break;
-          case 0x52:
-            // up
-            key = XBMCK_UP;
-            break;
-          default:
-            return; // not supported by us - return...
-        }
-        [g_xbmcController sendKey:key];
+        UniChar tmp = (UniChar)eventMem[idx];
+        handleKeyCode(tmp);
       }
     }
   }
 }
-@end
+
+// implicit called constructor for hooking into the sendEvent (ios < 7) or handleKeyUiEvent (ios 7 and later)
+// this one hooks us into the keyboard events
+__attribute__((constructor)) static void HookKeyboard(void)
+{
+  if (sizeof(NSUInteger) == 8)
+  {
+    kGKKeyboardDirectionDown = 31;
+    kGKKeyboardDirectionUp = 30;
+    kGKKeyboardDirectionRight = 29;
+    kGKKeyboardDirectionLeft = 28;
+    LOG(@"Detected 64bit system!!!");
+  }
+  else
+    LOG(@"Detected 32bit system!!!");
+  
+  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+  {
+    // Hook into sendEvent: to get keyboard events.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wundeclared-selector"
+    if ([UIApplication  instancesRespondToSelector:@selector(handleKeyUIEvent:)])
+    {
+      ios7Detected  = true;
+      MSHookMessageEx(objc_getClass("UIApplication"), @selector(handleKeyUIEvent:), (IMP)&XBMCsendEvent, (IMP*)&UIApplication$sendEvent$Orig);
+    }
+    else if ([UIApplication  instancesRespondToSelector:@selector(sendEvent:)])
+      MSHookMessageEx(objc_getClass("UIApplication"), @selector(sendEvent:), (IMP)&XBMCsendEvent, (IMP*)&UIApplication$sendEvent$Orig);
+    else
+      ELOG(@"HookKeyboard: Couldn't hook any of the 2 known keyboard hooks (sendEvent or handleKeyUIEvent - cursor keys on btkeyboards won't work!");
+#pragma clang diagnostic pop
+  }
+  [pool release];
+}
+//---------------- HOOK FOR BT KEYBOARD CURSORS KEYS END----------------
 
 int main(int argc, char *argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
@@ -230,7 +296,7 @@ int main(int argc, char *argv[]) {
   
   @try
   {
-    retVal = UIApplicationMain(argc,argv,@"XBMCApplication",@"XBMCApplicationDelegate");
+    retVal = UIApplicationMain(argc,argv,@"UIApplication",@"XBMCApplicationDelegate");
     //UIApplicationMain(argc, argv, nil, nil);
   } 
   @catch (id theException) 
index 549dd5a..80c6789 100644 (file)
@@ -98,7 +98,7 @@ typedef enum
 - (void) disableScreenSaver;
 - (void) enableScreenSaver;
 - (bool) changeScreen: (unsigned int)screenIdx withMode:(UIScreenMode *)mode;
-- (void) activateScreen: (UIScreen *)screen;
+- (void) activateScreen: (UIScreen *)screen withOrientation:(UIInterfaceOrientation)newOrientation;
 - (id)   initWithFrame:(CGRect)frame withScreen:(UIScreen *)screen;
 @end
 
index 25da688..693a5fc 100644 (file)
@@ -296,6 +296,14 @@ AnnounceReceiver *AnnounceReceiver::g_announceReceiver = NULL;
 }
 // END OF UIKeyInput protocol
 
+// - iOS6 rotation API - will be called on iOS7 runtime!--------
+- (NSUInteger)supportedInterfaceOrientations
+{
+  //mask defines available as of ios6 sdk
+  //return UIInterfaceOrientationMaskLandscape;
+  return (1 << UIInterfaceOrientationLandscapeLeft) | (1 << UIInterfaceOrientationLandscapeRight);
+}
+// - old rotation API will be called on iOS6 and lower - removed in iOS7
 -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {  
   //on external screens somehow the logic is rotated by 90°
@@ -956,17 +964,30 @@ AnnounceReceiver *AnnounceReceiver::g_announceReceiver = NULL;
   return ret;
 }
 //--------------------------------------------------------------
-- (void) activateScreen: (UIScreen *)screen
+- (void) activateScreen: (UIScreen *)screen  withOrientation:(UIInterfaceOrientation)newOrientation
 {
-  //this is the only way for making ios call the
-  //shouldAutorotateToInterfaceOrientation of the controller
-  //this is needed because at least with my vga adapter
-  //the orientation on the external screen is messed up by 90°
-  //so we need to hard force the orientation to Portrait for
-  //getting the correct display on external screen
+  // Since ios7 we have to handle the orientation manually
+  // it differs by 90 degree between internal and external screen
+  float   angle = 0;
   UIView *view = [m_window.subviews objectAtIndex:0];
-  [view removeFromSuperview];
-  [m_window addSubview:view];  
+  switch(newOrientation)
+  {
+    case UIInterfaceOrientationPortrait:
+      angle = 0;
+      break;
+    case UIInterfaceOrientationPortraitUpsideDown:
+      angle = M_PI;
+      break;
+    case UIInterfaceOrientationLandscapeLeft:
+      angle = -M_PI_2;
+      break;
+    case UIInterfaceOrientationLandscapeRight:
+      angle = M_PI_2;
+      break;
+  }
+  // reset the rotation of the view
+  view.layer.transform = CATransform3DMakeRotation(angle, 0, 0.0, 1.0);
+  [view setFrame:m_window.frame];
   m_window.screen = screen;
 }
 //--------------------------------------------------------------
index d71646d..e92fd41 100644 (file)
@@ -72,14 +72,20 @@ namespace PERIPHERALS
     int m_iProductId;
   };
 
+  struct PeripheralDeviceSetting
+  {
+    CSetting* m_setting;
+    int       m_order;
+  };
+
   struct PeripheralDeviceMapping
   {
-    std::vector<PeripheralID>        m_PeripheralID;
-    PeripheralBusType                m_busType;
-    PeripheralType                   m_class;
-    CStdString                       m_strDeviceName;
-    PeripheralType                   m_mappedTo;
-    std::map<CStdString, CSetting *> m_settings;
+    std::vector<PeripheralID>                     m_PeripheralID;
+    PeripheralBusType                             m_busType;
+    PeripheralType                                m_class;
+    CStdString                                    m_strDeviceName;
+    PeripheralType                                m_mappedTo;
+    std::map<CStdString, PeripheralDeviceSetting> m_settings;
   };
 
   class PeripheralTypeTranslator
index 349ad43..b0c184e 100644 (file)
@@ -114,9 +114,9 @@ void CPeripherals::Clear(void)
   /* delete mappings */
   for (unsigned int iMappingPtr = 0; iMappingPtr < m_mappings.size(); iMappingPtr++)
   {
-    map<CStdString, CSetting *> settings = m_mappings.at(iMappingPtr).m_settings;
-    for (map<CStdString, CSetting *>::iterator itr = settings.begin(); itr != settings.end(); itr++)
-      delete itr->second;
+    map<CStdString, PeripheralDeviceSetting> settings = m_mappings.at(iMappingPtr).m_settings;
+    for (map<CStdString, PeripheralDeviceSetting>::iterator itr = settings.begin(); itr != settings.end(); ++itr)
+      delete itr->second.m_setting;
     m_mappings.at(iMappingPtr).m_settings.clear();
   }
   m_mappings.clear();
@@ -322,7 +322,9 @@ void CPeripherals::OnDeviceAdded(const CPeripheralBus &bus, const CPeripheral &p
 
   SetChanged();
 
-  CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35005), peripheral.DeviceName());
+  // don't show a notification for devices detected during the initial scan
+  if (bus.IsInitialised())
+    CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(35005), peripheral.DeviceName());
 }
 
 void CPeripherals::OnDeviceDeleted(const CPeripheralBus &bus, const CPeripheral &peripheral)
@@ -401,8 +403,8 @@ void CPeripherals::GetSettingsFromMapping(CPeripheral &peripheral) const
 
     if (bBusMatch && bProductMatch && bClassMatch)
     {
-      for (map<CStdString, CSetting *>::const_iterator itr = mapping->m_settings.begin(); itr != mapping->m_settings.end(); itr++)
-        peripheral.AddSetting((*itr).first, (*itr).second);
+      for (map<CStdString, PeripheralDeviceSetting>::const_iterator itr = mapping->m_settings.begin(); itr != mapping->m_settings.end(); ++itr)
+        peripheral.AddSetting((*itr).first, (*itr).second.m_setting, (*itr).second.m_order);
     }
   }
 }
@@ -463,9 +465,11 @@ bool CPeripherals::LoadMappings(void)
   return true;
 }
 
-void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, CSetting *> &m_settings)
+void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, PeripheralDeviceSetting> &settings)
 {
   TiXmlElement *currentNode = xmlNode->FirstChildElement("setting");
+  int iMaxOrder = 0;
+
   while (currentNode)
   {
     CSetting *setting = NULL;
@@ -530,12 +534,29 @@ void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdSt
       /* set the visibility */
       setting->SetVisible(bConfigurable);
 
+      /* set the order */
+      int iOrder = 0;
+      currentNode->Attribute("order", &iOrder);
+      /* if the order attribute is invalid or 0, then the setting will be added at the end */
+      if (iOrder < 0)
+        iOrder = 0;
+      if (iOrder > iMaxOrder)
+       iMaxOrder = iOrder;
+
       /* and add this new setting */
-      m_settings[strKey] = setting;
+      PeripheralDeviceSetting deviceSetting = { setting, iOrder };
+      settings[strKey] = deviceSetting;
     }
 
     currentNode = currentNode->NextSiblingElement("setting");
   }
+
+  /* add the settings without an order attribute or an invalid order attribute set at the end */
+  for (map<CStdString, PeripheralDeviceSetting>::iterator it = settings.begin(); it != settings.end(); ++it)
+  {
+    if (it->second.m_order == 0)
+      it->second.m_order = ++iMaxOrder;
+  }
 }
 
 void CPeripherals::GetDirectory(const CStdString &strPath, CFileItemList &items) const
@@ -690,7 +711,7 @@ void CPeripherals::OnSettingChanged(const CSetting *setting)
     vector<CPeripheral *> cecDevices;
     if (g_peripherals.GetPeripheralsWithFeature(cecDevices, FEATURE_CEC) > 0)
     {
-      for (vector<CPeripheral *>::iterator it = cecDevices.begin(); it != cecDevices.end(); it++)
+      for (vector<CPeripheral *>::iterator it = cecDevices.begin(); it != cecDevices.end(); ++it)
         (*it)->SetSetting("use_tv_menu_language", false);
     }
   }
index 3926566..fcef6ca 100644 (file)
@@ -214,7 +214,7 @@ namespace PERIPHERALS
     CPeripherals(void);
     bool LoadMappings(void);
     bool GetMappingForDevice(const CPeripheralBus &bus, PeripheralScanResult& result) const;
-    static void GetSettingsFromMappingsFile(TiXmlElement *xmlNode, std::map<CStdString, CSetting *> &m_settings);
+    static void GetSettingsFromMappingsFile(TiXmlElement *xmlNode, std::map<CStdString, PeripheralDeviceSetting> &m_settings);
 
     bool                                 m_bInitialised;
     bool                                 m_bIsStarted;
index 879821d..795f88b 100644 (file)
@@ -148,6 +148,8 @@ namespace PERIPHERALS
 
     virtual bool FindComPort(CStdString &strLocation) { return false; }
 
+    virtual bool IsInitialised(void) const { return m_bInitialised; }
+
   protected:
     virtual void Process(void);
     virtual bool ScanForDevices(void);
index 6dc8034..e5fb7c2 100644 (file)
@@ -129,9 +129,9 @@ void CPeripheralBusUSB::DeviceDetachCallback(void *refCon, io_service_t service,
     while(it != privateDataRef->refCon->m_scan_results.m_results.end())
     {
       if (privateDataRef->result.m_strLocation == it->m_strLocation)
-        privateDataRef->refCon->m_scan_results.m_results.erase(it);
+        it = privateDataRef->refCon->m_scan_results.m_results.erase(it);
       else
-        it++;
+        ++it;
     }
     privateDataRef->refCon->ScanForDevices();
     
index ffc48b7..b6e28c1 100644 (file)
 using namespace PERIPHERALS;
 using namespace std;
 
+struct SortBySettingsOrder
+{
+  bool operator()(const PeripheralDeviceSetting &left, const PeripheralDeviceSetting& right)
+  {
+    return left.m_order < right.m_order;
+  }
+};
+
 CPeripheral::CPeripheral(const PeripheralScanResult& scanResult) :
   m_type(scanResult.m_mappedType),
   m_busType(scanResult.m_busType),
@@ -163,13 +171,18 @@ bool CPeripheral::IsMultiFunctional(void) const
 
 vector<CSetting *> CPeripheral::GetSettings(void) const
 {
+  vector<PeripheralDeviceSetting> tmpSettings;
+  for (map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it)
+    tmpSettings.push_back(it->second);
+  sort(tmpSettings.begin(), tmpSettings.end(), SortBySettingsOrder());
+
   vector<CSetting *> settings;
-  for (map<CStdString, CSetting *>::const_iterator it = m_settings.begin(); it != m_settings.end(); it++)
-    settings.push_back(it->second);
+  for (vector<PeripheralDeviceSetting>::const_iterator it = tmpSettings.begin(); it != tmpSettings.end(); ++it)
+    settings.push_back(it->m_setting);
   return settings;
 }
 
-void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
+void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting, int order)
 {
   if (!setting)
   {
@@ -179,6 +192,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
 
   if (!HasSetting(strKey))
   {
+    PeripheralDeviceSetting deviceSetting = { NULL, order };
     switch(setting->GetType())
     {
     case SettingTypeBool:
@@ -188,7 +202,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
         if (boolSetting)
         {
           boolSetting->SetVisible(mappedSetting->IsVisible());
-          m_settings.insert(make_pair(strKey, boolSetting));
+          deviceSetting.m_setting = boolSetting;
         }
       }
       break;
@@ -199,7 +213,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
         if (intSetting)
         {
           intSetting->SetVisible(mappedSetting->IsVisible());
-          m_settings.insert(make_pair(strKey, intSetting));
+          deviceSetting.m_setting = intSetting;
         }
       }
       break;
@@ -210,7 +224,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
         if (floatSetting)
         {
           floatSetting->SetVisible(mappedSetting->IsVisible());
-          m_settings.insert(make_pair(strKey, floatSetting));
+          deviceSetting.m_setting = floatSetting;
         }
       }
       break;
@@ -221,7 +235,7 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
         if (stringSetting)
         {
           stringSetting->SetVisible(mappedSetting->IsVisible());
-          m_settings.insert(make_pair(strKey, stringSetting));
+          deviceSetting.m_setting = stringSetting;
         }
       }
       break;
@@ -229,12 +243,15 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting)
       //TODO add more types if needed
       break;
     }
+
+    if (deviceSetting.m_setting != NULL)
+      m_settings.insert(make_pair(strKey, deviceSetting));
   }
 }
 
 bool CPeripheral::HasSetting(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>:: const_iterator it = m_settings.find(strKey);
+  map<CStdString, PeripheralDeviceSetting>:: const_iterator it = m_settings.find(strKey);
   return it != m_settings.end();
 }
 
@@ -246,10 +263,10 @@ bool CPeripheral::HasSettings(void) const
 bool CPeripheral::HasConfigurableSettings(void) const
 {
   bool bReturn(false);
-  map<CStdString, CSetting *>::const_iterator it = m_settings.begin();
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.begin();
   while (it != m_settings.end() && !bReturn)
   {
-    if ((*it).second->IsVisible())
+    if ((*it).second.m_setting->IsVisible())
     {
       bReturn = true;
       break;
@@ -263,10 +280,10 @@ bool CPeripheral::HasConfigurableSettings(void) const
 
 bool CPeripheral::GetSettingBool(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeBool)
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeBool)
   {
-      CSettingBool *boolSetting = (CSettingBool *) (*it).second;
+    CSettingBool *boolSetting = (CSettingBool *) (*it).second.m_setting;
     if (boolSetting)
       return boolSetting->GetValue();
   }
@@ -276,10 +293,10 @@ bool CPeripheral::GetSettingBool(const CStdString &strKey) const
 
 int CPeripheral::GetSettingInt(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeInteger)
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeInteger)
   {
-      CSettingInt *intSetting = (CSettingInt *) (*it).second;
+    CSettingInt *intSetting = (CSettingInt *) (*it).second.m_setting;
     if (intSetting)
       return intSetting->GetValue();
   }
@@ -289,10 +306,10 @@ int CPeripheral::GetSettingInt(const CStdString &strKey) const
 
 float CPeripheral::GetSettingFloat(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeNumber)
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeNumber)
   {
-      CSettingNumber *floatSetting = (CSettingNumber *) (*it).second;
+    CSettingNumber *floatSetting = (CSettingNumber *) (*it).second.m_setting;
     if (floatSetting)
       return (float)floatSetting->GetValue();
   }
@@ -302,10 +319,10 @@ float CPeripheral::GetSettingFloat(const CStdString &strKey) const
 
 const CStdString CPeripheral::GetSettingString(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeString)
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeString)
   {
-      CSettingString *stringSetting = (CSettingString *) (*it).second;
+    CSettingString *stringSetting = (CSettingString *) (*it).second.m_setting;
     if (stringSetting)
       return stringSetting->GetValue();
   }
@@ -316,10 +333,10 @@ const CStdString CPeripheral::GetSettingString(const CStdString &strKey) const
 bool CPeripheral::SetSetting(const CStdString &strKey, bool bValue)
 {
   bool bChanged(false);
-  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeBool)
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeBool)
   {
-      CSettingBool *boolSetting = (CSettingBool *) (*it).second;
+    CSettingBool *boolSetting = (CSettingBool *) (*it).second.m_setting;
     if (boolSetting)
     {
       bChanged = boolSetting->GetValue() != bValue;
@@ -334,10 +351,10 @@ bool CPeripheral::SetSetting(const CStdString &strKey, bool bValue)
 bool CPeripheral::SetSetting(const CStdString &strKey, int iValue)
 {
   bool bChanged(false);
-  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeInteger)
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeInteger)
   {
-      CSettingInt *intSetting = (CSettingInt *) (*it).second;
+    CSettingInt *intSetting = (CSettingInt *) (*it).second.m_setting;
     if (intSetting)
     {
       bChanged = intSetting->GetValue() != iValue;
@@ -352,10 +369,10 @@ bool CPeripheral::SetSetting(const CStdString &strKey, int iValue)
 bool CPeripheral::SetSetting(const CStdString &strKey, float fValue)
 {
   bool bChanged(false);
-  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
-  if (it != m_settings.end() && (*it).second->GetType() == SettingTypeNumber)
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.find(strKey);
+  if (it != m_settings.end() && (*it).second.m_setting->GetType() == SettingTypeNumber)
   {
-      CSettingNumber *floatSetting = (CSettingNumber *) (*it).second;
+    CSettingNumber *floatSetting = (CSettingNumber *) (*it).second.m_setting;
     if (floatSetting)
     {
       bChanged = floatSetting->GetValue() != fValue;
@@ -369,28 +386,28 @@ bool CPeripheral::SetSetting(const CStdString &strKey, float fValue)
 
 void CPeripheral::SetSettingVisible(const CStdString &strKey, bool bSetTo)
 {
-  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.find(strKey);
   if (it != m_settings.end())
-    (*it).second->SetVisible(bSetTo);
+    (*it).second.m_setting->SetVisible(bSetTo);
 }
 
 bool CPeripheral::IsSettingVisible(const CStdString &strKey) const
 {
-  map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey);
+  map<CStdString, PeripheralDeviceSetting>::const_iterator it = m_settings.find(strKey);
   if (it != m_settings.end())
-    return (*it).second->IsVisible();
+    return (*it).second.m_setting->IsVisible();
   return false;
 }
 
 bool CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValue)
 {
   bool bChanged(false);
-  map<CStdString, CSetting *>::iterator it = m_settings.find(strKey);
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.find(strKey);
   if (it != m_settings.end())
   {
-    if ((*it).second->GetType() == SettingTypeString)
+    if ((*it).second.m_setting->GetType() == SettingTypeString)
     {
-        CSettingString *stringSetting = (CSettingString *) (*it).second;
+      CSettingString *stringSetting = (CSettingString *) (*it).second.m_setting;
       if (stringSetting)
       {
         bChanged = !StringUtils::EqualsNoCase(stringSetting->GetValue(), strValue);
@@ -399,11 +416,11 @@ bool CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValu
           m_changedSettings.insert(strKey);
       }
     }
-    else if ((*it).second->GetType() == SettingTypeInteger)
+    else if ((*it).second.m_setting->GetType() == SettingTypeInteger)
       bChanged = SetSetting(strKey, (int) (strValue.empty() ? 0 : atoi(strValue.c_str())));
-    else if ((*it).second->GetType() == SettingTypeNumber)
+    else if ((*it).second.m_setting->GetType() == SettingTypeNumber)
       bChanged = SetSetting(strKey, (float) (strValue.empty() ? 0 : atof(strValue.c_str())));
-    else if ((*it).second->GetType() == SettingTypeBool)
+    else if ((*it).second.m_setting->GetType() == SettingTypeBool)
       bChanged = SetSetting(strKey, strValue.Equals("1"));
   }
   return bChanged;
@@ -414,37 +431,37 @@ void CPeripheral::PersistSettings(bool bExiting /* = false */)
   CXBMCTinyXML doc;
   TiXmlElement node("settings");
   doc.InsertEndChild(node);
-  for (map<CStdString, CSetting *>::const_iterator itr = m_settings.begin(); itr != m_settings.end(); itr++)
+  for (map<CStdString, PeripheralDeviceSetting>::const_iterator itr = m_settings.begin(); itr != m_settings.end(); ++itr)
   {
     TiXmlElement nodeSetting("setting");
     nodeSetting.SetAttribute("id", itr->first.c_str());
     CStdString strValue;
-    switch ((*itr).second->GetType())
+    switch ((*itr).second.m_setting->GetType())
     {
     case SettingTypeString:
       {
-        CSettingString *stringSetting = (CSettingString *) (*itr).second;
+        CSettingString *stringSetting = (CSettingString *) (*itr).second.m_setting;
         if (stringSetting)
           strValue = stringSetting->GetValue();
       }
       break;
     case SettingTypeInteger:
       {
-        CSettingInt *intSetting = (CSettingInt *) (*itr).second;
+        CSettingInt *intSetting = (CSettingInt *) (*itr).second.m_setting;
         if (intSetting)
           strValue = StringUtils::Format("%d", intSetting->GetValue());
       }
       break;
     case SettingTypeNumber:
       {
-        CSettingNumber *floatSetting = (CSettingNumber *) (*itr).second;
+        CSettingNumber *floatSetting = (CSettingNumber *) (*itr).second.m_setting;
         if (floatSetting)
           strValue = StringUtils::Format("%.2f", floatSetting->GetValue());
       }
       break;
     case SettingTypeBool:
       {
-        CSettingBool *boolSetting = (CSettingBool *) (*itr).second;
+        CSettingBool *boolSetting = (CSettingBool *) (*itr).second.m_setting;
         if (boolSetting)
           strValue = StringUtils::Format("%d", boolSetting->GetValue() ? 1:0);
       }
@@ -460,7 +477,7 @@ void CPeripheral::PersistSettings(bool bExiting /* = false */)
 
   if (!bExiting)
   {
-    for (set<CStdString>::const_iterator it = m_changedSettings.begin(); it != m_changedSettings.end(); it++)
+    for (set<CStdString>::const_iterator it = m_changedSettings.begin(); it != m_changedSettings.end(); ++it)
       OnSettingChanged(*it);
   }
   m_changedSettings.clear();
@@ -488,7 +505,7 @@ void CPeripheral::ResetDefaultSettings(void)
   ClearSettings();
   g_peripherals.GetSettingsFromMapping(*this);
 
-  map<CStdString, CSetting *>::iterator it = m_settings.begin();
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.begin();
   while (it != m_settings.end())
   {
     m_changedSettings.insert((*it).first);
@@ -500,10 +517,10 @@ void CPeripheral::ResetDefaultSettings(void)
 
 void CPeripheral::ClearSettings(void)
 {
-  map<CStdString, CSetting *>::iterator it = m_settings.begin();
+  map<CStdString, PeripheralDeviceSetting>::iterator it = m_settings.begin();
   while (it != m_settings.end())
   {
-    delete (*it).second;
+    delete (*it).second.m_setting;
     ++it;
   }
   m_settings.clear();
index ab45e97..10a7fb3 100644 (file)
@@ -117,7 +117,7 @@ namespace PERIPHERALS
      * @param strKey The key of the setting.
      * @param setting The setting.
      */
-    virtual void AddSetting(const CStdString &strKey, const CSetting *setting);
+    virtual void AddSetting(const CStdString &strKey, const CSetting *setting, int order);
 
     /*!
      * @brief Check whether a setting is known with the given key.
@@ -183,7 +183,7 @@ namespace PERIPHERALS
     bool                             m_bError;
     std::vector<PeripheralFeature>   m_features;
     std::vector<CPeripheral *>       m_subDevices;
-    std::map<CStdString, CSetting *> m_settings;
+    std::map<CStdString, PeripheralDeviceSetting> m_settings;
     std::set<CStdString>             m_changedSettings;
   };
 }
index cf880e8..8919380 100644 (file)
@@ -47,7 +47,7 @@ using namespace std;
 #define CEC_LIB_SUPPORTED_VERSION 0x2100
 
 /* time in seconds to ignore standby commands from devices after the screensaver has been activated */
-#define SCREENSAVER_TIMEOUT       10
+#define SCREENSAVER_TIMEOUT       20
 #define VOLUME_CHANGE_TIMEOUT     250
 #define VOLUME_REFRESH_TIMEOUT    100
 
@@ -139,7 +139,7 @@ void CPeripheralCecAdapter::ResetMembers(void)
 
   m_currentButton.iButton    = 0;
   m_currentButton.iDuration  = 0;
-  m_screensaverLastActivated.SetValid(false);
+  m_standbySent.SetValid(false);
   m_configuration.Clear();
 }
 
@@ -175,7 +175,6 @@ void CPeripheralCecAdapter::Announce(AnnouncementFlag flag, const char *sender,
     // Don't put devices to standby if application is currently playing
     if ((!g_application.m_pPlayer->IsPlaying() && !g_application.m_pPlayer->IsPaused()) && m_configuration.bPowerOffScreensaver == 1)
     {
-      m_screensaverLastActivated = CDateTime::GetCurrentDateTime();
       // only power off when we're the active source
       if (m_cecAdapter->IsLibCECActiveSource())
         StandbyDevices();
@@ -410,6 +409,7 @@ void CPeripheralCecAdapter::Process(void)
       if (!m_configuration.powerOffDevices.IsEmpty())
       {
         CLog::Log(LOGDEBUG, "%s - sending standby commands", __FUNCTION__);
+        m_standbySent = CDateTime::GetCurrentDateTime();
         m_cecAdapter->StandbyDevices();
       }
       else if (m_configuration.bSendInactiveSource == 1)
@@ -453,14 +453,14 @@ void CPeripheralCecAdapter::ProcessVolumeChange(void)
   CecVolumeChange pendingVolumeChange = VOLUME_CHANGE_NONE;
   {
     CSingleLock lock(m_critSection);
-    if (m_volumeChangeQueue.size() > 0)
+    if (!m_volumeChangeQueue.empty())
     {
       /* get the first change from the queue */
       pendingVolumeChange = m_volumeChangeQueue.front();
       m_volumeChangeQueue.pop();
 
       /* remove all dupe entries */
-      while (m_volumeChangeQueue.size() > 0 && m_volumeChangeQueue.front() == pendingVolumeChange)
+      while (!m_volumeChangeQueue.empty() && m_volumeChangeQueue.front() == pendingVolumeChange)
         m_volumeChangeQueue.pop();
 
       /* send another keypress after VOLUME_REFRESH_TIMEOUT ms */
@@ -623,7 +623,7 @@ int CPeripheralCecAdapter::CecCommand(void *cbParam, const cec_command command)
       /* a device was put in standby mode */
       if (command.initiator == CECDEVICE_TV &&
           (adapter->m_configuration.bPowerOffOnStandby == 1 || adapter->m_configuration.bShutdownOnStandby == 1) &&
-          (!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT)))
+          (!adapter->m_standbySent.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_standbySent > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT)))
       {
         adapter->m_bStarted = false;
         if (adapter->m_configuration.bPowerOffOnStandby == 1)
@@ -705,6 +705,7 @@ int CPeripheralCecAdapter::CecAlert(void *cbParam, const libcec_alert alert, con
     iAlertString = 36027;
     break;
   case CEC_ALERT_CONNECTION_LOST:
+    bReopenConnection = true;
     iAlertString = 36030;
     break;
 #if defined(CEC_ALERT_PERMISSION_ERROR)
@@ -778,7 +779,7 @@ void CPeripheralCecAdapter::PushCecKeypress(const CecButtonPress &key)
       return;
     }
     // if we received a keypress with a duration set, try to find the same one without a duration set, and replace it
-    for (vector<CecButtonPress>::reverse_iterator it = m_buttonQueue.rbegin(); it != m_buttonQueue.rend(); it++)
+    for (vector<CecButtonPress>::reverse_iterator it = m_buttonQueue.rbegin(); it != m_buttonQueue.rend(); ++it)
     {
       if ((*it).iButton == key.iButton)
       {
@@ -1675,12 +1676,18 @@ void CPeripheralCecAdapter::ProcessStandbyDevices(void)
     CSingleLock lock(m_critSection);
     bStandby = m_bStandbyPending;
     m_bStandbyPending = false;
+    if (bStandby)
+      m_bGoingToStandby = true;
   }
 
   if (bStandby)
   {
-    m_cecAdapter->StandbyDevices(CECDEVICE_BROADCAST);
-    if (m_configuration.bSendInactiveSource == 1)
+    if (!m_configuration.powerOffDevices.IsEmpty())
+    {
+      m_standbySent = CDateTime::GetCurrentDateTime();
+      m_cecAdapter->StandbyDevices(CECDEVICE_BROADCAST);
+    }
+    else if (m_configuration.bSendInactiveSource == 1)
     {
       CLog::Log(LOGDEBUG, "%s - sending inactive source commands", __FUNCTION__);
       m_cecAdapter->SetInactiveView();
@@ -1695,7 +1702,6 @@ bool CPeripheralCecAdapter::ToggleDeviceState(CecStateChange mode /*= STATE_SWIT
   if (m_cecAdapter->IsLibCECActiveSource() && (mode == STATE_SWITCH_TOGGLE || mode == STATE_STANDBY))
   {
     CLog::Log(LOGDEBUG, "%s - putting CEC device on standby...", __FUNCTION__);
-    m_screensaverLastActivated = CDateTime::GetCurrentDateTime();
     StandbyDevices();
     return false;
   }
index 0a4100e..0809b03 100644 (file)
@@ -156,7 +156,7 @@ namespace PERIPHERALS
     bool                              m_bIsReady;
     bool                              m_bHasConnectedAudioSystem;
     CStdString                        m_strMenuLanguage;
-    CDateTime                         m_screensaverLastActivated;
+    CDateTime                         m_standbySent;
     std::vector<CecButtonPress>       m_buttonQueue;
     CecButtonPress                    m_currentButton;
     std::queue<CecVolumeChange>       m_volumeChangeQueue;
index 7cc8047..ed1976b 100644 (file)
@@ -27,8 +27,7 @@ using namespace PERIPHERALS;
 using namespace std;
 
 CPeripheralHID::CPeripheralHID(const PeripheralScanResult& scanResult) :
-  CPeripheral(scanResult),
-  m_bInitialised(false)
+  CPeripheral(scanResult)
 {
   m_strDeviceName = scanResult.m_strDeviceName.empty() ? g_localizeStrings.Get(35001) : scanResult.m_strDeviceName;
   m_features.push_back(FEATURE_HID);
index 41c1a24..bc9ea69 100644 (file)
@@ -34,7 +34,6 @@ namespace PERIPHERALS
     virtual void OnSettingChanged(const CStdString &strChangedSetting);
 
   protected:
-    bool       m_bInitialised;
     CStdString m_strKeymap;
   };
 }
index 36532b8..d42d647 100644 (file)
@@ -75,12 +75,12 @@ bool CPeripheralImon::InitialiseFeature(const PeripheralFeature feature)
   return CPeripheralHID::InitialiseFeature(feature);
 }
 
-void CPeripheralImon::AddSetting(const CStdString &strKey, const CSetting *setting)
+void CPeripheralImon::AddSetting(const CStdString &strKey, const CSetting *setting, int order)
 {
 #if !defined(TARGET_WINDOWS)
   if (strKey.compare("disable_winjoystick")!=0)
 #endif // !TARGET_WINDOWS
-    CPeripheralHID::AddSetting(strKey, setting);
+    CPeripheralHID::AddSetting(strKey, setting, order);
 }
 
 void CPeripheralImon::OnSettingChanged(const CStdString &strChangedSetting)
index a9db31b..d73ac8f 100644 (file)
@@ -33,7 +33,7 @@ namespace PERIPHERALS
     virtual bool InitialiseFeature(const PeripheralFeature feature);
     virtual void OnSettingChanged(const CStdString &strChangedSetting);
     virtual void OnDeviceRemoved();
-    virtual void AddSetting(const CStdString &strKey, const CSetting *setting);
+    virtual void AddSetting(const CStdString &strKey, const CSetting *setting, int order);
     inline bool IsImonConflictsWithDInput() 
     { return m_bImonConflictsWithDInput;}
     static inline long GetCountOfImonsConflictWithDInput()
index 3b11efd..6d9d3da 100644 (file)
@@ -190,30 +190,28 @@ CStdString CPlayListM3U::GetBestBandwidthStream(const CStdString &strFileName, s
   // return to the filename so it can be played
   char szLine[4096];
   CStdString strLine;
-  CStdString strPlaylist = strFileName;
   size_t maxBandwidth = 0;
 
-  // first strip off any query string
-  size_t baseEnd = strPlaylist.find('?');
-  if (baseEnd != std::string::npos)
-    strPlaylist = strPlaylist.substr(0, baseEnd);
-
-  // if we cannot get the last / we wont be able to determine the sub-playlists
-  baseEnd = strPlaylist.rfind('/');
-  if (baseEnd == std::string::npos)
-    return strPlaylist;
-
-  // store the base path (the path without the filename)
-  CStdString basePath = strPlaylist.substr(0, baseEnd + 1);
-
   // open the file, and if it fails, return
   CFile file;
   if (!file.Open(strFileName) )
   {
     file.Close();
-    return strPlaylist;
+    return strFileName;
   }
 
+  // get protocol options if they were set, so we can restore them again at the end
+  CURL playlistUrl(strFileName);
+  
+  // and set the fallback value
+  CURL subStreamUrl = CURL(strFileName);
+  
+  // determine the base
+  CURL basePlaylistUrl(URIUtils::GetParentPath(strFileName));
+  basePlaylistUrl.SetOptions("");
+  basePlaylistUrl.SetProtocolOptions("");
+  CStdString basePart = basePlaylistUrl.Get();
+
   // convert bandwidth specified in kbps to bps used by the m3u8
   bandwidth *= 1000;
 
@@ -253,17 +251,17 @@ CStdString CPlayListM3U::GetBestBandwidthStream(const CStdString &strFileName, s
 
           // if the path is absolute just use it
           if (CURL::IsFullPath(strLine))
-            strPlaylist = strLine;
+            subStreamUrl = CURL(strLine);
           else
-            strPlaylist = basePath + strLine;
+            subStreamUrl = CURL(basePart + strLine);
         }
       }
     }
   }
 
-  CLog::Log(LOGINFO, "Auto-selecting %s based on configured bandwidth.", strPlaylist.c_str());
-
-  return strPlaylist;
+  // if any protocol options were set, restore them
+  subStreamUrl.SetProtocolOptions(playlistUrl.GetProtocolOptions());
+  return subStreamUrl.Get();
 }
 
 std::map< CStdString, CStdString > CPlayListM3U::ParseStreamLine(const CStdString &streamLine)
index d8dd2da..8a426d0 100644 (file)
@@ -802,9 +802,9 @@ CStdString CSmartPlaylistRule::FormatWhereClause(const CStdString &negate, const
     else if ((m_field == FieldLastPlayed || m_field == FieldDateAdded) && (m_operator == OPERATOR_LESS_THAN || m_operator == OPERATOR_BEFORE || m_operator == OPERATOR_NOT_IN_THE_LAST))
       query = GetField(m_field, strType) + " IS NULL OR " + GetField(m_field, strType) + parameter;
     else if (m_field == FieldStudio)
-      query = negate + " (" + GetField(FieldId, strType) + parameter + ")";
+      query = negate + " (" + GetField(m_field, strType) + parameter + ")";
     else if (m_field == FieldMPAA)
-      query = negate + " (" + GetField(FieldId, strType) +  parameter + ")";
+      query = negate + " (" + GetField(m_field, strType) +  parameter + ")";
   }
   if (m_field == FieldVideoResolution)
     query = table + ".idFile" + negate + GetVideoResolutionQuery(param);
index ce3e6dc..12421a2 100644 (file)
@@ -216,11 +216,11 @@ bool CProfilesManager::Save(const std::string &file) const
 void CProfilesManager::Clear()
 {
   CSingleLock lock(m_critical);
-  m_profiles.clear();
   m_usingLoginScreen = false;
   m_lastUsedProfile = 0;
   m_nextProfileId = 0;
   SetCurrentProfileId(0);
+  m_profiles.clear();
 }
 
 bool CProfilesManager::LoadProfile(size_t index)
@@ -364,7 +364,7 @@ void CProfilesManager::CreateProfileFolders()
 const CProfile& CProfilesManager::GetMasterProfile() const
 {
   CSingleLock lock(m_critical);
-  if (m_profiles.size() > 0)
+  if (!m_profiles.empty())
     return m_profiles[0];
 
   CLog::Log(LOGERROR, "%s: master profile doesn't exist", __FUNCTION__);
index 9478f75..3cbef55 100644 (file)
@@ -49,8 +49,7 @@ void CGUIDialogLockSettings::SetupPage()
   // update our settings label
   if (m_bGetUser)
   {
-    CStdString strLabel2=m_strURL;
-    CURL::Decode(strLabel2);
+    CStdString strLabel2(CURL::Decode(m_strURL));
     CStdString strLabel = StringUtils::Format(g_localizeStrings.Get(20152), strLabel2.c_str());
     SET_CONTROL_LABEL(2, strLabel);
   }
@@ -123,8 +122,7 @@ void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting)
     if (m_bGetUser)
     {
       CStdString strHeading;
-      CStdString strDecodeUrl = m_strURL;
-      CURL::Decode(strDecodeUrl);
+      CStdString strDecodeUrl(CURL::Decode(m_strURL));
       strHeading = StringUtils::Format("%s %s", g_localizeStrings.Get(14062).c_str(), strDecodeUrl.c_str());
       if (CGUIKeyboardFactory::ShowAndGetInput(m_strUser,strHeading,true))
       {
@@ -187,8 +185,7 @@ void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting)
   }
   if (setting.id == 2 && m_bGetUser)
   {
-    CStdString strDecodeUrl = m_strURL;
-    CURL::Decode(strDecodeUrl);
+    CStdString strDecodeUrl(CURL::Decode(m_strURL));
     CStdString strHeading = StringUtils::Format("%s %s", g_localizeStrings.Get(20143).c_str(), strDecodeUrl.c_str());
     if (CGUIKeyboardFactory::ShowAndGetInput(m_locks.code,strHeading,true,true))
     {
index f87af9e..1150a4a 100644 (file)
@@ -329,23 +329,15 @@ bool CGUIDialogProfileSettings::ShowForProfile(unsigned int iProfile, bool first
 
       if (!bExists)
       {
-        // save new profile guisettings
+        // copy masterprofile guisettings to new profile guisettings
+        // If the user selects 'start fresh', do nothing as a fresh
+        // guisettings.xml will be created on first profile use.
         if (CGUIDialogYesNo::ShowAndGetInput(20058,20048,20102,20022,20044,20064))
         {
           CFile::Cache(URIUtils::AddFileToFolder("special://masterprofile/","guisettings.xml"),
                        URIUtils::AddFileToFolder("special://masterprofile/",
                                               dialog->m_strDirectory+"/guisettings.xml"));
         }
-        else
-        {
-          // create some new settings
-          CStdString path = URIUtils::AddFileToFolder("special://masterprofile/", dialog->m_strDirectory);
-          path = URIUtils::AddFileToFolder(path, "guisettings.xml");
-
-          CSettings settings;
-          settings.Initialize();
-          settings.Save(path);
-        }
       }
 
       bExists = CFile::Exists(URIUtils::AddFileToFolder("special://masterprofile/",
@@ -357,6 +349,8 @@ bool CGUIDialogProfileSettings::ShowForProfile(unsigned int iProfile, bool first
       if (!bExists)
       {
         if ((dialog->m_iSourcesMode & 2) == 2)
+          // prompt user to copy masterprofile's sources.xml file
+          // If 'start fresh' (no) is selected, do nothing.
           if (CGUIDialogYesNo::ShowAndGetInput(20058,20071,20102,20022,20044,20064))
           {
             CFile::Cache(URIUtils::AddFileToFolder("special://masterprofile/","sources.xml"),
index 608b11f..fd714eb 100644 (file)
@@ -261,8 +261,6 @@ bool CGUIWindowSettingsProfile::GetAutoLoginProfileChoice(int &iProfile)
 
   dialog->SetHeading(20093); // Profile name
   dialog->Reset();
-  dialog->SetUseDetails(true);
-  dialog->EnableButton(true, 222); // Cancel
   dialog->SetItems(&items);
   dialog->SetSelected(autoLoginProfileId);
   dialog->DoModal();
index 786dfa1..22cefb3 100644 (file)
@@ -284,13 +284,14 @@ int CPVRDatabase::GetLastChannelId(void)
 {
   int iReturn(0);
 
-  CStdString strQuery = FormatSQL("SELECT MAX(idChannel) as iMaxChannel FROM channels");
+  CStdString strQuery = PrepareSQL("SELECT MAX(idChannel) as iMaxChannel FROM channels");
   if (ResultQuery(strQuery))
   {
     try
     {
       if (!m_pDS->eof())
         iReturn = m_pDS->fv("iMaxChannel").get_asInt();
+      m_pDS->close();
     }
     catch (...) {}
   }
@@ -316,8 +317,11 @@ bool CPVRDatabase::DeleteClientChannels(const CPVRClient &client)
   }
 
   CLog::Log(LOGDEBUG, "PVR - %s - deleting all channels from client '%i' from the database", __FUNCTION__, client.GetID());
-  CStdString strWhereClause = FormatSQL("iClientId = %u", client.GetID());
-  return DeleteValues("channels", strWhereClause);
+
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("iClientId = %u", client.GetID()));
+
+  return DeleteValues("channels", filter);
 }
 
 bool CPVRDatabase::Delete(const CPVRChannel &channel)
@@ -327,15 +331,18 @@ bool CPVRDatabase::Delete(const CPVRChannel &channel)
     return false;
 
   CLog::Log(LOGDEBUG, "PVR - %s - deleting channel '%s' from the database", __FUNCTION__, channel.ChannelName().c_str());
-  CStdString strWhereClause = FormatSQL("idChannel = %u", channel.ChannelID());
-  return DeleteValues("channels", strWhereClause);
+
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idChannel = %u", channel.ChannelID()));
+
+  return DeleteValues("channels", filter);
 }
 
 int CPVRDatabase::Get(CPVRChannelGroupInternal &results)
 {
   int iReturn(0);
 
-  CStdString strQuery = FormatSQL("SELECT channels.idChannel, channels.iUniqueId, channels.bIsRadio, channels.bIsHidden, channels.bIsUserSetIcon, "
+  CStdString strQuery = PrepareSQL("SELECT channels.idChannel, channels.iUniqueId, channels.bIsRadio, channels.bIsHidden, channels.bIsUserSetIcon, "
       "channels.sIconPath, channels.sChannelName, channels.bIsVirtual, channels.bEPGEnabled, channels.sEPGScraper, channels.iLastWatched, channels.iClientId, channels.bIsLocked, "
       "channels.iClientChannelNumber, channels.sInputFormat, channels.sInputFormat, channels.sStreamURL, channels.iEncryptionSystem, map_channelgroups_channels.iChannelNumber, channels.idEpg "
       "FROM map_channelgroups_channels "
@@ -411,8 +418,10 @@ bool CPVRDatabase::DeleteChannelSettings(const CPVRChannel &channel)
     return bReturn;
   }
 
-  CStdString strWhereClause = FormatSQL("idChannel = %u", channel.ChannelID());
-  return DeleteValues("channelsettings", strWhereClause);
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idChannel = %u", channel.ChannelID()));
+
+  return DeleteValues("channelsettings", filter);
 }
 
 bool CPVRDatabase::GetChannelSettings(const CPVRChannel &channel, CVideoSettings &settings)
@@ -426,7 +435,7 @@ bool CPVRDatabase::GetChannelSettings(const CPVRChannel &channel, CVideoSettings
     return bReturn;
   }
 
-  CStdString strQuery = FormatSQL("SELECT * FROM channelsettings WHERE idChannel = %u;", channel.ChannelID());
+  CStdString strQuery = PrepareSQL("SELECT * FROM channelsettings WHERE idChannel = %u;", channel.ChannelID());
 
   if (ResultQuery(strQuery))
   {
@@ -488,7 +497,7 @@ bool CPVRDatabase::PersistChannelSettings(const CPVRChannel &channel, const CVid
     return false;
   }
 
-  CStdString strQuery = FormatSQL(
+  CStdString strQuery = PrepareSQL(
       "REPLACE INTO channelsettings "
         "(idChannel, iInterlaceMethod, iViewMode, fCustomZoomAmount, fPixelRatio, iAudioStream, iSubtitleStream, fSubtitleDelay, "
          "bSubtitles, fBrightness, fContrast, fGamma, fVolumeAmplification, fAudioDelay, bOutputToAllSpeakers, bCrop, iCropLeft, "
@@ -508,8 +517,10 @@ bool CPVRDatabase::PersistChannelSettings(const CPVRChannel &channel, const CVid
 
 bool CPVRDatabase::RemoveChannelsFromGroup(const CPVRChannelGroup &group)
 {
-  CStdString strWhereClause = FormatSQL("idGroup = %u", group.GroupID());
-  return DeleteValues("map_channelgroups_channels", strWhereClause);
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+
+  return DeleteValues("map_channelgroups_channels", filter);
 }
 
 bool CPVRDatabase::GetCurrentGroupMembers(const CPVRChannelGroup &group, vector<int> &members)
@@ -522,7 +533,7 @@ bool CPVRDatabase::GetCurrentGroupMembers(const CPVRChannelGroup &group, vector<
     return false;
   }
 
-  CStdString strCurrentMembersQuery = FormatSQL("SELECT idChannel FROM map_channelgroups_channels WHERE idGroup = %u", group.GroupID());
+  CStdString strCurrentMembersQuery = PrepareSQL("SELECT idChannel FROM map_channelgroups_channels WHERE idGroup = %u", group.GroupID());
   if (ResultQuery(strCurrentMembersQuery))
   {
     try
@@ -557,9 +568,10 @@ bool CPVRDatabase::DeleteChannelsFromGroup(const CPVRChannelGroup &group)
     return false;
   }
 
-  CStdString strWhereClause;
-  strWhereClause = FormatSQL("idGroup = %u", group.GroupID());
-  return DeleteValues("map_channelgroups_channels", strWhereClause);
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+
+  return DeleteValues("map_channelgroups_channels", filter);
 }
 
 bool CPVRDatabase::DeleteChannelsFromGroup(const CPVRChannelGroup &group, const vector<int> &channelsToDelete)
@@ -576,7 +588,6 @@ bool CPVRDatabase::DeleteChannelsFromGroup(const CPVRChannelGroup &group, const
   while (iDeletedChannels < channelsToDelete.size())
   {
     CStdString strChannelsToDelete;
-    CStdString strWhereClause;
 
     for (unsigned int iChannelPtr = 0; iChannelPtr + iDeletedChannels < channelsToDelete.size() && iChannelPtr < 50; iChannelPtr++)
       strChannelsToDelete += StringUtils::Format(", %d", channelsToDelete.at(iDeletedChannels + iChannelPtr));
@@ -584,8 +595,12 @@ bool CPVRDatabase::DeleteChannelsFromGroup(const CPVRChannelGroup &group, const
     if (!strChannelsToDelete.empty())
     {
       strChannelsToDelete.erase(0, 2);
-      strWhereClause = FormatSQL("idGroup = %u AND idChannel IN (%s)", group.GroupID(), strChannelsToDelete.c_str());
-      bDelete = DeleteValues("map_channelgroups_channels", strWhereClause) && bDelete;
+
+      Filter filter;
+      filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+      filter.AppendWhere(PrepareSQL("idChannel IN (%s)", strChannelsToDelete.c_str()));
+
+      bDelete = DeleteValues("map_channelgroups_channels", filter) && bDelete;
     }
 
     iDeletedChannels += 50;
@@ -612,13 +627,15 @@ bool CPVRDatabase::RemoveStaleChannelsFromGroup(const CPVRChannelGroup &group)
     // mysql doesn't support subqueries when deleting and sqlite doesn't support joins when deleting
     if (g_advancedSettings.m_databaseTV.type.Equals("mysql"))
     {
-      CStdString strQuery = FormatSQL("DELETE m FROM map_channelgroups_channels m LEFT JOIN channels c ON (c.idChannel = m.idChannel) WHERE c.idChannel IS NULL");
+      CStdString strQuery = PrepareSQL("DELETE m FROM map_channelgroups_channels m LEFT JOIN channels c ON (c.idChannel = m.idChannel) WHERE c.idChannel IS NULL");
       bDelete = ExecuteQuery(strQuery);
     }
     else
     {
-      CStdString strWhereClause = FormatSQL("idChannel IN (SELECT m.idChannel FROM map_channelgroups_channels m LEFT JOIN channels on m.idChannel = channels.idChannel WHERE channels.idChannel IS NULL)");
-      bDelete = DeleteValues("map_channelgroups_channels", strWhereClause);
+      Filter filter;
+      filter.AppendWhere("idChannel IN (SELECT m.idChannel FROM map_channelgroups_channels m LEFT JOIN channels on m.idChannel = channels.idChannel WHERE channels.idChannel IS NULL)");
+
+      bDelete = DeleteValues("map_channelgroups_channels", filter);
     }
   }
 
@@ -639,8 +656,10 @@ bool CPVRDatabase::RemoveStaleChannelsFromGroup(const CPVRChannelGroup &group)
   }
   else
   {
-    CStdString strWhereClause = FormatSQL("idGroup = %u", group.GroupID());
-    bDelete = DeleteValues("map_channelgroups_channels", strWhereClause) && bDelete;
+    Filter filter;
+    filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+
+    bDelete = DeleteValues("map_channelgroups_channels", filter) && bDelete;
   }
 
   return bDelete;
@@ -663,15 +682,18 @@ bool CPVRDatabase::Delete(const CPVRChannelGroup &group)
     return false;
   }
 
-  CStdString strWhereClause = FormatSQL("idGroup = %u AND bIsRadio = %u", group.GroupID(), group.IsRadio());
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+  filter.AppendWhere(PrepareSQL("bIsRadio = %u", group.IsRadio()));
+
   return RemoveChannelsFromGroup(group) &&
-      DeleteValues("channelgroups", strWhereClause);
+      DeleteValues("channelgroups", filter);
 }
 
 bool CPVRDatabase::Get(CPVRChannelGroups &results)
 {
   bool bReturn = false;
-  CStdString strQuery = FormatSQL("SELECT * from channelgroups WHERE bIsRadio = %u", results.IsRadio());
+  CStdString strQuery = PrepareSQL("SELECT * from channelgroups WHERE bIsRadio = %u", results.IsRadio());
 
   if (ResultQuery(strQuery))
   {
@@ -709,7 +731,7 @@ int CPVRDatabase::Get(CPVRChannelGroup &group)
     return -1;
   }
 
-  CStdString strQuery = FormatSQL("SELECT idChannel, iChannelNumber FROM map_channelgroups_channels WHERE idGroup = %u ORDER BY iChannelNumber", group.GroupID());
+  CStdString strQuery = PrepareSQL("SELECT idChannel, iChannelNumber FROM map_channelgroups_channels WHERE idGroup = %u ORDER BY iChannelNumber", group.GroupID());
   if (ResultQuery(strQuery))
   {
     iReturn = 0;
@@ -734,7 +756,11 @@ int CPVRDatabase::Get(CPVRChannelGroup &group)
         else
         {
           // remove a channel that doesn't exist (anymore) from the table
-          DeleteValues("map_channelgroups_channels", FormatSQL("idGroup = %u AND idChannel = %u", group.GroupID(), iChannelId));
+          Filter filter;
+          filter.AppendWhere(PrepareSQL("idGroup = %u", group.GroupID()));
+          filter.AppendWhere(PrepareSQL("idChannel = %u", iChannelId));
+
+          DeleteValues("map_channelgroups_channels", filter);
         }
 
         m_pDS->next();
@@ -791,13 +817,13 @@ bool CPVRDatabase::PersistGroupMembers(CPVRChannelGroup &group)
     {
       PVRChannelGroupMember member = group.m_members.at(iChannelPtr);
 
-      CStdString strWhereClause = FormatSQL("idChannel = %u AND idGroup = %u AND iChannelNumber = %u",
+      CStdString strWhereClause = PrepareSQL("idChannel = %u AND idGroup = %u AND iChannelNumber = %u",
           member.channel->ChannelID(), group.GroupID(), member.iChannelNumber);
 
       CStdString strValue = GetSingleValue("map_channelgroups_channels", "idChannel", strWhereClause);
       if (strValue.empty())
       {
-        strQuery = FormatSQL("REPLACE INTO map_channelgroups_channels ("
+        strQuery = PrepareSQL("REPLACE INTO map_channelgroups_channels ("
             "idGroup, idChannel, iChannelNumber) "
             "VALUES (%i, %i, %i);",
             group.GroupID(), member.channel->ChannelID(), member.iChannelNumber);
@@ -832,13 +858,15 @@ bool CPVRDatabase::Delete(const CPVRClient &client)
     return false;
   }
 
-  CStdString strWhereClause = FormatSQL("sUid = '%s'", client.ID().c_str());
-  return DeleteValues("clients", strWhereClause);
+  Filter filter;
+  filter.AppendWhere(PrepareSQL("sUid = '%s'", client.ID().c_str()));
+
+  return DeleteValues("clients", filter);
 }
 
 int CPVRDatabase::GetClientId(const CStdString &strClientUid)
 {
-  CStdString strWhereClause = FormatSQL("sUid = '%s'", strClientUid.c_str());
+  CStdString strWhereClause = PrepareSQL("sUid = '%s'", strClientUid.c_str());
   CStdString strValue = GetSingleValue("clients", "idClient", strWhereClause);
 
   if (strValue.empty())
@@ -849,7 +877,7 @@ int CPVRDatabase::GetClientId(const CStdString &strClientUid)
 
 bool CPVRDatabase::ResetEPG(void)
 {
-  CStdString strQuery = FormatSQL("UPDATE channels SET idEpg = 0");
+  CStdString strQuery = PrepareSQL("UPDATE channels SET idEpg = 0");
   return ExecuteQuery(strQuery);
 }
 
@@ -869,10 +897,10 @@ bool CPVRDatabase::Persist(CPVRChannelGroup &group)
 
     /* insert a new entry when this is a new group, or replace the existing one otherwise */
     if (group.GroupID() <= 0)
-      strQuery = FormatSQL("INSERT INTO channelgroups (bIsRadio, iGroupType, sName) VALUES (%i, %i, '%s')",
+      strQuery = PrepareSQL("INSERT INTO channelgroups (bIsRadio, iGroupType, sName) VALUES (%i, %i, '%s')",
           (group.IsRadio() ? 1 :0), group.GroupType(), group.GroupName().c_str());
     else
-      strQuery = FormatSQL("REPLACE INTO channelgroups (idGroup, bIsRadio, iGroupType, sName) VALUES (%i, %i, %i, '%s')",
+      strQuery = PrepareSQL("REPLACE INTO channelgroups (idGroup, bIsRadio, iGroupType, sName) VALUES (%i, %i, %i, '%s')",
           group.GroupID(), (group.IsRadio() ? 1 :0), group.GroupType(), group.GroupName().c_str());
 
     bReturn = ExecuteQuery(strQuery);
@@ -904,7 +932,7 @@ int CPVRDatabase::Persist(const AddonPtr client)
     return iReturn;
   }
 
-  CStdString strQuery = FormatSQL("REPLACE INTO clients (sName, sUid) VALUES ('%s', '%s');",
+  CStdString strQuery = PrepareSQL("REPLACE INTO clients (sName, sUid) VALUES ('%s', '%s');",
       client->Name().c_str(), client->ID().c_str());
 
   if (ExecuteQuery(strQuery))
@@ -928,7 +956,7 @@ bool CPVRDatabase::Persist(CPVRChannel &channel, bool bQueueWrite /* = false */)
   if (channel.ChannelID() <= 0)
   {
     /* new channel */
-    strQuery = FormatSQL("INSERT INTO channels ("
+    strQuery = PrepareSQL("INSERT INTO channels ("
         "iUniqueId, bIsRadio, bIsHidden, bIsUserSetIcon, bIsLocked, "
         "sIconPath, sChannelName, bIsVirtual, bEPGEnabled, sEPGScraper, iLastWatched, iClientId, "
         "iClientChannelNumber, sInputFormat, sStreamURL, iEncryptionSystem, idEpg) "
@@ -941,7 +969,7 @@ bool CPVRDatabase::Persist(CPVRChannel &channel, bool bQueueWrite /* = false */)
   else
   {
     /* update channel */
-    strQuery = FormatSQL("REPLACE INTO channels ("
+    strQuery = PrepareSQL("REPLACE INTO channels ("
         "iUniqueId, bIsRadio, bIsHidden, bIsUserSetIcon, bIsLocked, "
         "sIconPath, sChannelName, bIsVirtual, bEPGEnabled, sEPGScraper, iLastWatched, iClientId, "
         "iClientChannelNumber, sInputFormat, sStreamURL, iEncryptionSystem, idChannel, idEpg) "
index 81d81c2..cc98c43 100644 (file)
@@ -285,6 +285,8 @@ void CPVRManager::Cleanup(void)
     delete m_pendingUpdates.at(iJobPtr);
   m_pendingUpdates.clear();
 
+  HideProgressDialog();
+
   SetState(ManagerStateStopped);
 }
 
@@ -393,8 +395,13 @@ ManagerState CPVRManager::GetState(void) const
 
 void CPVRManager::SetState(ManagerState state) 
 {
-  CSingleLock lock(m_managerStateMutex);
-  m_managerState = state;
+  {
+    CSingleLock lock(m_managerStateMutex);
+    m_managerState = state;
+    SetChanged();
+  }
+
+  NotifyObservers(ObservableMessageManagerStateChanged);
 }
 
 void CPVRManager::Process(void)
@@ -968,6 +975,8 @@ bool CPVRManager::OpenLiveStream(const CFileItem &channel)
       CDateTime::GetCurrentDateTime().GetAsTime(tNow);
       playingChannel->SetLastWatched(tNow);
       bPersistChannel = true;
+
+      m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(playingChannel->IsRadio()));
     }
   }
 
@@ -1009,6 +1018,8 @@ void CPVRManager::CloseStream(void)
       CDateTime::GetCurrentDateTime().GetAsTime(tNow);
       channel->SetLastWatched(tNow);
       bPersistChannel = true;
+
+      m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(channel->IsRadio()));
     }
 
     m_addons->CloseStream();
@@ -1211,6 +1222,8 @@ bool CPVRManager::PerformChannelSwitch(const CPVRChannel &channel, bool bPreview
     time_t tNow;
     CDateTime::GetCurrentDateTime().GetAsTime(tNow);
     currentChannel->SetLastWatched(tNow);
+
+    m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(currentChannel->IsRadio()));
   }
 
   // store channel settings
@@ -1389,11 +1402,14 @@ bool CPVRManager::IsJobPending(const char *strJobName) const
   return bReturn;
 }
 
-void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bIgnorePending /* = false */)
+void CPVRManager::QueueJob(CJob *job)
 {
   CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || (!bIgnorePending && IsJobPending(strJobName)))
+  if (!IsStarted() || IsJobPending(job->GetType()))
+  {
+    delete job;
     return;
+  }
 
   m_pendingUpdates.push_back(job);
 
@@ -1403,32 +1419,32 @@ void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bIgnorePendin
 
 void CPVRManager::TriggerEpgsCreate(void)
 {
-  QueueJob("pvr-create-epgs", new CPVREpgsCreateJob());
+  QueueJob(new CPVREpgsCreateJob());
 }
 
 void CPVRManager::TriggerRecordingsUpdate(void)
 {
-  QueueJob("pvr-update-recordings", new CPVRRecordingsUpdateJob());
+  QueueJob(new CPVRRecordingsUpdateJob());
 }
 
 void CPVRManager::TriggerTimersUpdate(void)
 {
-  QueueJob("pvr-update-timers", new CPVRTimersUpdateJob());
+  QueueJob(new CPVRTimersUpdateJob());
 }
 
 void CPVRManager::TriggerChannelsUpdate(void)
 {
-  QueueJob("pvr-update-channels", new CPVRChannelsUpdateJob());
+  QueueJob(new CPVRChannelsUpdateJob());
 }
 
 void CPVRManager::TriggerChannelGroupsUpdate(void)
 {
-  QueueJob("pvr-update-channelgroups", new CPVRChannelGroupsUpdateJob());
+  QueueJob(new CPVRChannelGroupsUpdateJob());
 }
 
 void CPVRManager::TriggerSaveChannelSettings(void)
 {
-  QueueJob("pvr-save-channelsettings", new CPVRChannelSettingsSaveJob());
+  QueueJob(new CPVRChannelSettingsSaveJob());
 }
 
 void CPVRManager::ExecutePendingJobs(void)
index 7038410..392e05d 100644 (file)
@@ -26,6 +26,7 @@
 #include "threads/Event.h"
 #include "threads/Thread.h"
 #include "utils/JobManager.h"
+#include "utils/Observer.h"
 
 class CGUIDialogProgressBarHandle;
 class CStopWatch;
@@ -83,7 +84,7 @@ namespace PVR
 
   typedef boost::shared_ptr<PVR::CPVRChannelGroup> CPVRChannelGroupPtr;
 
-  class CPVRManager : public ISettingCallback, private CThread
+  class CPVRManager : public ISettingCallback, private CThread, public Observable
   {
     friend class CPVRClients;
 
@@ -632,14 +633,11 @@ namespace PVR
     bool IsJobPending(const char *strJobName) const;
 
     /*!
-     * @brief Adds the job to the list of pending jobs. If bIgnorePending is set
-     * to true the job will be added even if there's an identical job already
-     * queued
-     * @param strJobName the name of the job
-     * @param bIgnorePending whether to ignore previously queued identical jobs
+     * @brief Adds the job to the list of pending jobs unless an identical 
+     * job is already queued
      * @param job the job
      */
-    void QueueJob(const char *strJobName, CJob *job, bool bIgnorePending = false);
+    void QueueJob(CJob *job);
 
     ManagerState GetState(void) const;
 
index 6560dfa..14c9cde 100644 (file)
@@ -1068,64 +1068,30 @@ void CPVRClients::LoadCurrentChannelSettings(void)
 
   if (g_application.m_pPlayer->HasPlayer())
   {
-    /* set the default settings first */
-    CVideoSettings loadedChannelSettings = CMediaSettings::Get().GetDefaultVideoSettings();
+    /* store the current settings so we can compare if anything has changed */
+    CVideoSettings previousSettings = CMediaSettings::Get().GetCurrentVideoSettings();
 
-    /* try to load the settings from the database */
+    /* load the persisted channel settings and set them as current */
+    CVideoSettings loadedChannelSettings = CMediaSettings::Get().GetDefaultVideoSettings();
     database->GetChannelSettings(*channel, loadedChannelSettings);
+    CMediaSettings::Get().GetCurrentVideoSettings() = loadedChannelSettings;
 
-    CMediaSettings::Get().GetCurrentVideoSettings() = CMediaSettings::Get().GetDefaultVideoSettings();
-    CMediaSettings::Get().GetCurrentVideoSettings().m_Brightness          = loadedChannelSettings.m_Brightness;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_Contrast            = loadedChannelSettings.m_Contrast;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_Gamma               = loadedChannelSettings.m_Gamma;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_Crop                = loadedChannelSettings.m_Crop;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CropLeft            = loadedChannelSettings.m_CropLeft;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CropRight           = loadedChannelSettings.m_CropRight;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CropTop             = loadedChannelSettings.m_CropTop;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CropBottom          = loadedChannelSettings.m_CropBottom;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CustomPixelRatio    = loadedChannelSettings.m_CustomPixelRatio;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CustomZoomAmount    = loadedChannelSettings.m_CustomZoomAmount;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CustomVerticalShift = loadedChannelSettings.m_CustomVerticalShift;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_NoiseReduction      = loadedChannelSettings.m_NoiseReduction;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_Sharpness           = loadedChannelSettings.m_Sharpness;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_InterlaceMethod     = loadedChannelSettings.m_InterlaceMethod;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_OutputToAllSpeakers = loadedChannelSettings.m_OutputToAllSpeakers;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_AudioDelay          = loadedChannelSettings.m_AudioDelay;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream         = loadedChannelSettings.m_AudioStream;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn          = loadedChannelSettings.m_SubtitleOn;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleDelay       = loadedChannelSettings.m_SubtitleDelay;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_CustomNonLinStretch = loadedChannelSettings.m_CustomNonLinStretch;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_ScalingMethod       = loadedChannelSettings.m_ScalingMethod;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_PostProcess         = loadedChannelSettings.m_PostProcess;
-    CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode     = loadedChannelSettings.m_DeinterlaceMode;
-
-    /* only change the view mode if it's different */
-    if (CMediaSettings::Get().GetCurrentVideoSettings().m_ViewMode != loadedChannelSettings.m_ViewMode)
-    {
-      CMediaSettings::Get().GetCurrentVideoSettings().m_ViewMode = loadedChannelSettings.m_ViewMode;
-
-      g_renderManager.SetViewMode(CMediaSettings::Get().GetCurrentVideoSettings().m_ViewMode);
-      CMediaSettings::Get().GetCurrentVideoSettings().m_CustomZoomAmount = CDisplaySettings::Get().GetZoomAmount();
-      CMediaSettings::Get().GetCurrentVideoSettings().m_CustomPixelRatio = CDisplaySettings::Get().GetPixelRatio();
-    }
+    /* update the view mode if it set to custom or differs from the previous mode */
+    if (previousSettings.m_ViewMode != loadedChannelSettings.m_ViewMode || loadedChannelSettings.m_ViewMode == ViewModeCustom)
+      g_renderManager.SetViewMode(loadedChannelSettings.m_ViewMode);
 
     /* only change the subtitle stream, if it's different */
-    if (CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream != loadedChannelSettings.m_SubtitleStream)
-    {
-      CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = loadedChannelSettings.m_SubtitleStream;
-
-      g_application.m_pPlayer->SetSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
-    }
+    if (previousSettings.m_SubtitleStream != loadedChannelSettings.m_SubtitleStream)
+      g_application.m_pPlayer->SetSubtitle(loadedChannelSettings.m_SubtitleStream);
 
     /* only change the audio stream if it's different */
-    if (g_application.m_pPlayer->GetAudioStream() != CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream &&
-        CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream >= 0)
-      g_application.m_pPlayer->SetAudioStream(CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream);
-
-    g_application.m_pPlayer->SetAVDelay(CMediaSettings::Get().GetCurrentVideoSettings().m_AudioDelay);
-    g_application.m_pPlayer->SetDynamicRangeCompression((long)(CMediaSettings::Get().GetCurrentVideoSettings().m_VolumeAmplification * 100));
-    g_application.m_pPlayer->SetSubtitleVisible(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
-    g_application.m_pPlayer->SetSubTitleDelay(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleDelay);
+    if (g_application.m_pPlayer->GetAudioStream() != loadedChannelSettings.m_AudioStream && loadedChannelSettings.m_AudioStream >= 0)
+      g_application.m_pPlayer->SetAudioStream(loadedChannelSettings.m_AudioStream);
+
+    g_application.m_pPlayer->SetAVDelay(loadedChannelSettings.m_AudioDelay);
+    g_application.m_pPlayer->SetDynamicRangeCompression((long)(loadedChannelSettings.m_VolumeAmplification * 100));
+    g_application.m_pPlayer->SetSubtitleVisible(loadedChannelSettings.m_SubtitleOn);
+    g_application.m_pPlayer->SetSubTitleDelay(loadedChannelSettings.m_SubtitleDelay);
 
     /* settings can be saved on next channel switch */
     m_bIsValidChannelSettings = true;
index 7fa79b4..6429924 100644 (file)
@@ -1118,6 +1118,50 @@ int CPVRChannelGroup::GetEPGAll(CFileItemList &results)
   return results.Size() - iInitialSize;
 }
 
+CDateTime CPVRChannelGroup::GetEPGDate(EpgDateType epgDateType) const
+{
+  CDateTime date;
+  CSingleLock lock(m_critSection);
+  
+  for (std::vector<PVRChannelGroupMember>::const_iterator it = m_members.begin(); it != m_members.end(); it++)
+  {
+    if (it->channel && !it->channel->IsHidden())
+    {
+      CEpg* epg = it->channel->GetEPG();
+      if (epg)
+      {
+        CDateTime epgDate;
+        switch (epgDateType)
+        {
+          case EPG_FIRST_DATE:
+            epgDate = epg->GetFirstDate();
+            if (epgDate.IsValid() && (!date.IsValid() || epgDate < date))
+              date = epgDate;
+            break;
+            
+          case EPG_LAST_DATE:
+            epgDate = epg->GetLastDate();
+            if (epgDate.IsValid() && (!date.IsValid() || epgDate > date))
+              date = epgDate;
+            break;
+        }
+      }
+    }
+  }
+  
+  return date;
+}
+
+CDateTime CPVRChannelGroup::GetFirstEPGDate(void) const
+{
+  return GetEPGDate(EPG_FIRST_DATE);
+}
+
+CDateTime CPVRChannelGroup::GetLastEPGDate(void) const
+{
+  return GetEPGDate(EPG_LAST_DATE);
+}
+
 int CPVRChannelGroup::Size(void) const
 {
   return m_members.size();
index 3aba14f..0260e9d 100644 (file)
@@ -50,7 +50,13 @@ namespace PVR
     CPVRChannelPtr channel;
     unsigned int   iChannelNumber;
   } PVRChannelGroupMember;
-
+  
+  enum EpgDateType
+  {
+    EPG_FIRST_DATE = 0,
+    EPG_LAST_DATE = 1
+  };
+  
   class CPVRChannelGroup;
   typedef boost::shared_ptr<PVR::CPVRChannelGroup> CPVRChannelGroupPtr;
 
@@ -365,6 +371,18 @@ namespace PVR
      * @return The amount of entries that were added.
      */
     int GetEPGNext(CFileItemList &results);
+    
+    /*!
+     * @brief Get the start time of the first entry.
+     * @return The start time.
+     */
+    CDateTime GetFirstEPGDate(void) const;
+    
+    /*!
+     * @brief Get the end time of the last entry.
+     * @return The end time.
+     */
+    CDateTime GetLastEPGDate(void) const;
 
     bool UpdateChannel(const CFileItem &channel, bool bHidden, bool bVirtual, bool bEPGEnabled, bool bParentalLocked, int iEPGSource, int iChannelNumber, const CStdString &strChannelName, const CStdString &strIconPath, const CStdString &strStreamURL);
 
@@ -380,6 +398,13 @@ namespace PVR
      */
     CPVRChannelPtr GetByClient(int iUniqueChannelId, int iClientID) const;
 
+    /*!
+     * @brief Get a channel given it's unique ID.
+     * @param iUniqueID The unique ID.
+     * @return The channel or NULL if it wasn't found.
+     */
+    CPVRChannelPtr GetByUniqueID(int iUniqueID) const;
+
     void SetSelectedGroup(bool bSetTo);
     bool IsSelectedGroup(void) const;
 
@@ -470,13 +495,6 @@ namespace PVR
     void ResetChannelNumbers(void);
 
     /*!
-     * @brief Get a channel given it's unique ID.
-     * @param iUniqueID The unique ID.
-     * @return The channel or NULL if it wasn't found.
-     */
-    CPVRChannelPtr GetByUniqueID(int iUniqueID) const;
-
-    /*!
      * @brief Get a channel given it's channel ID.
      * @param iChannelID The channel ID.
      * @return The channel or NULL if it wasn't found.
@@ -495,6 +513,10 @@ namespace PVR
     bool             m_bPreventSortAndRenumber;     /*!< true when sorting and renumbering should not be done after adding/updating channels to the group */
     std::vector<PVRChannelGroupMember> m_members;
     CCriticalSection m_critSection;
+    
+  private:
+    CDateTime GetEPGDate(EpgDateType epgDateType) const;
+    
   };
 
   class CPVRPersistGroupJob : public CJob
index 0bb07d2..ff06d48 100644 (file)
@@ -53,6 +53,7 @@ CPVRChannelGroupInternal::CPVRChannelGroupInternal(const CPVRChannelGroup &group
 CPVRChannelGroupInternal::~CPVRChannelGroupInternal(void)
 {
   Unload();
+  g_PVRManager.UnregisterObserver(this);
 }
 
 bool CPVRChannelGroupInternal::Load(void)
@@ -60,7 +61,8 @@ bool CPVRChannelGroupInternal::Load(void)
   if (CPVRChannelGroup::Load())
   {
     UpdateChannelPaths();
-    g_PVRManager.TriggerEpgsCreate();
+    g_PVRManager.RegisterObserver(this);
+      
     return true;
   }
 
@@ -385,3 +387,11 @@ bool CPVRChannelGroupInternal::CreateChannelEpgs(bool bForce /* = false */)
 
   return true;
 }
+
+void CPVRChannelGroupInternal::Notify(const Observable &obs, const ObservableMessage msg)
+{
+  if (msg == ObservableMessageManagerStateChanged)
+  {
+    g_PVRManager.TriggerEpgsCreate();
+  }
+}
index cba4180..10f728a 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include "PVRChannelGroup.h"
+#include "utils/Observer.h"
 
 namespace PVR
 {
@@ -29,7 +30,7 @@ namespace PVR
 
   /** XBMC's internal group, the group containing all channels */
 
-  class CPVRChannelGroupInternal : public CPVRChannelGroup
+  class CPVRChannelGroupInternal : public CPVRChannelGroup, public Observer
   {
     friend class CPVRChannelGroups;
     friend class CPVRDatabase;
@@ -45,6 +46,8 @@ namespace PVR
 
     virtual ~CPVRChannelGroupInternal(void);
 
+    virtual void Notify(const Observable &obs, const ObservableMessage msg);
+
     /**
      * @brief The amount of channels in this container.
      * @return The amount of channels in this container.
index 47a4b2f..3c76d1e 100644 (file)
@@ -291,3 +291,16 @@ bool CPVRChannelGroupsContainer::CreateChannelEpgs(void)
   return m_groupsRadio->CreateChannelEpgs() &&
          m_groupsTV->CreateChannelEpgs();
 }
+
+CPVRChannelGroupPtr CPVRChannelGroupsContainer::GetPreviousPlayedGroup(void)
+{
+  CSingleLock lock(m_critSection);
+  return m_lastPlayedGroups[0];
+}
+
+void CPVRChannelGroupsContainer::SetLastPlayedGroup(CPVRChannelGroupPtr group)
+{
+  CSingleLock lock(m_critSection);
+  m_lastPlayedGroups[0] = m_lastPlayedGroups[1];
+  m_lastPlayedGroups[1] = group;
+}
index 3edb9ea..e17d898 100644 (file)
@@ -188,6 +188,18 @@ namespace PVR
      */
     bool CreateChannelEpgs(void);
 
+    /*!
+     * @brief Return the group which was previous played.
+     * @return The group which was previous played.
+     */
+    CPVRChannelGroupPtr GetPreviousPlayedGroup(void);
+
+    /*!
+     * @brief Set the last played group.
+     * @param The last played group
+     */
+    void SetLastPlayedGroup(CPVRChannelGroupPtr group);
+
   protected:
     /*!
      * @brief Update the contents of all the groups in this container.
@@ -201,5 +213,6 @@ namespace PVR
     CCriticalSection   m_critSection;
     bool               m_bUpdateChannelsOnly;
     bool               m_bIsUpdating;
+    CPVRChannelGroupPtr m_lastPlayedGroups[2]; /*!< used to store the last played groups */
   };
 }
index 6e70801..7b623a9 100644 (file)
@@ -323,21 +323,21 @@ bool CGUIDialogPVRChannelManager::OnClickButtonChannelLogo(CGUIMessage &message)
   {
     CFileItemPtr current(new CFileItem("thumb://Current", false));
     current->SetArt("thumb", pItem->GetPVRChannelInfoTag()->IconPath());
-    current->SetLabel(g_localizeStrings.Get(20016));
+    current->SetLabel(g_localizeStrings.Get(19282));
     items.Add(current);
   }
   else if (pItem->HasArt("thumb"))
   { // already have a thumb that the share doesn't know about - must be a local one, so we mayaswell reuse it.
     CFileItemPtr current(new CFileItem("thumb://Current", false));
     current->SetArt("thumb", pItem->GetArt("thumb"));
-    current->SetLabel(g_localizeStrings.Get(20016));
+    current->SetLabel(g_localizeStrings.Get(19282));
     items.Add(current);
   }
 
   // and add a "no thumb" entry as well
   CFileItemPtr nothumb(new CFileItem("thumb://None", false));
   nothumb->SetIconImage(pItem->GetIconImage());
-  nothumb->SetLabel(g_localizeStrings.Get(20018));
+  nothumb->SetLabel(g_localizeStrings.Get(19283));
   items.Add(nothumb);
 
   CStdString strThumb;
@@ -346,11 +346,11 @@ bool CGUIDialogPVRChannelManager::OnClickButtonChannelLogo(CGUIMessage &message)
   {
     CMediaSource share1;
     share1.strPath = CSettings::Get().GetString("pvrmenu.iconpath");
-    share1.strName = g_localizeStrings.Get(19018);
+    share1.strName = g_localizeStrings.Get(19066);
     shares.push_back(share1);
   }
   g_mediaManager.GetLocalDrives(shares);
-  if (!CGUIDialogFileBrowser::ShowAndGetImage(items, shares, g_localizeStrings.Get(1030), strThumb))
+  if (!CGUIDialogFileBrowser::ShowAndGetImage(items, shares, g_localizeStrings.Get(19285), strThumb, NULL, 19285))
     return false;
 
   if (strThumb == "thumb://Current")
index 3c9a4f5..ecf7eea 100644 (file)
@@ -27,6 +27,7 @@
 #include "utils/log.h"
 #include "threads/SingleLock.h"
 #include "video/VideoDatabase.h"
+#include "settings/Settings.h"
 
 #include "utils/URIUtils.h"
 #include "utils/StringUtils.h"
@@ -34,7 +35,6 @@
 #include "pvr/PVRManager.h"
 #include "pvr/addons/PVRClients.h"
 #include "PVRRecordings.h"
-#include "utils/StringUtils.h"
 
 using namespace PVR;
 
@@ -92,7 +92,8 @@ bool CPVRRecordings::IsDirectoryMember(const CStdString &strDirectory, const CSt
   CStdString strUseDirectory = TrimSlashes(strDirectory);
   CStdString strUseEntryDirectory = TrimSlashes(strEntryDirectory);
 
-  return StringUtils::StartsWith(strUseEntryDirectory, strUseDirectory) &&
+  /* Case-insensitive comparison since sub folders are created with case-insensitive matching (GetSubDirectories) */
+  return StringUtils::StartsWithNoCase(strUseEntryDirectory, strUseDirectory) &&
       (!bDirectMember || strUseEntryDirectory.Equals(strUseDirectory));
 }
 
@@ -126,7 +127,7 @@ void CPVRRecordings::GetContents(const CStdString &strDirectory, CFileItemList *
   }
 }
 
-void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList *results, bool bAutoSkip /* = true */)
+void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList *results)
 {
   CStdString strUseBase = TrimSlashes(strBase);
 
@@ -186,7 +187,7 @@ void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList
   CFileItemList files;
   GetContents(strBase, &files);
 
-  if (bAutoSkip && results->Size() == 1 && files.Size() == 0)
+  if (results->Size() == 1 && files.Size() == 0)
   {
     CStdString strGetPath = StringUtils::Format("%s/%s/", strUseBase.c_str(), results->Get(0)->GetLabel().c_str());
 
@@ -194,7 +195,7 @@ void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList
 
     CLog::Log(LOGDEBUG, "CPVRRecordings - %s - '%s' only has 1 subdirectory, selecting that directory ('%s')",
         __FUNCTION__, strUseBase.c_str(), strGetPath.c_str());
-    GetSubDirectories(strGetPath, results, true);
+    GetSubDirectories(strGetPath, results);
     return;
   }
 
@@ -222,6 +223,16 @@ void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList
     }
     results->AddFront(pItem, 0);
   }
+
+  // Add parent directory item
+  if (!strUseBase.empty() && (subDirectories > 0 || files.Size() > 0) && CSettings::Get().GetBool("filelists.showparentdiritems"))
+  {
+    CStdString strLabel("..");
+    CFileItemPtr pItem(new CFileItem(strLabel));
+    pItem->SetPath("pvr://recordings");
+    pItem->m_bIsShareOrDrive = false;
+    results->AddFront(pItem, 0);
+  }
 }
 
 bool CPVRRecordings::HasAllRecordingsPathExtension(const CStdString &strDirectory)
@@ -401,7 +412,7 @@ bool CPVRRecordings::GetDirectory(const CStdString& strPath, CFileItemList &item
     if (StringUtils::StartsWith(strFileName, "recordings"))
     {
       strFileName.erase(0, 10);
-      GetSubDirectories(strFileName, &items, true);
+      GetSubDirectories(strFileName, &items);
       bSuccess = true;
     }
   }
index 29f5e81..20c27cc 100644 (file)
@@ -41,7 +41,7 @@ namespace PVR
     virtual const CStdString GetDirectoryFromPath(const CStdString &strPath, const CStdString &strBase) const;
     virtual bool IsDirectoryMember(const CStdString &strDirectory, const CStdString &strEntryDirectory, bool bDirectMember = true) const;
     virtual void GetContents(const CStdString &strDirectory, CFileItemList *results);
-    virtual void GetSubDirectories(const CStdString &strBase, CFileItemList *results, bool bAutoSkip = true);
+    virtual void GetSubDirectories(const CStdString &strBase, CFileItemList *results);
 
     CStdString AddAllRecordingsPathExtension(const CStdString &strDirectory);
     CStdString RemoveAllRecordingsPathExtension(const CStdString &strDirectory);
index e840203..5639cac 100644 (file)
@@ -30,6 +30,7 @@
 #include "pvr/addons/PVRClients.h"
 #include "guilib/GUIMessage.h"
 #include "guilib/GUIWindowManager.h"
+#include "guilib/Key.h"
 #include "dialogs/GUIDialogBusy.h"
 #include "dialogs/GUIDialogKaiToast.h"
 #include "threads/SingleLock.h"
@@ -136,6 +137,14 @@ bool CGUIWindowPVR::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
       CGUIMediaWindow::OnContextButton(itemNumber, button);
 }
 
+bool CGUIWindowPVR::OnBack(int actionID)
+{
+  if (actionID == ACTION_NAV_BACK)
+    // don't call CGUIMediaWindow as it will attempt to go to the parent folder which we don't want.
+    return CGUIWindow::OnBack(actionID);
+  return CGUIMediaWindow::OnBack(actionID);
+}
+
 void CGUIWindowPVR::OnInitWindow(void)
 {
   if (!g_PVRManager.IsStarted() || !g_PVRClients->HasConnectedClients())
index 7063dd2..44f8972 100644 (file)
@@ -68,6 +68,7 @@ namespace PVR
     virtual void SetLabel(int iControl, int iLabel);
     virtual void UpdateButtons(void);
     virtual bool Update(const CStdString &strDirectory, bool updateFilterPath = true);
+    virtual bool OnBack(int actionID);
 
   private:
     virtual bool OnMessageFocus(CGUIMessage &message);
index 9ffaf5b..41d5e7e 100644 (file)
@@ -94,7 +94,7 @@ void CGUIWindowPVRChannels::GetContextButtons(int itemNumber, CContextButtons &b
     buttons.Add(CONTEXT_BUTTON_FIND, 19003);                                          /* find similar program */
     buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000);                                     /* switch to channel */
     buttons.Add(CONTEXT_BUTTON_RECORD_ITEM, channel->IsRecording() ? 19256 : 19255);  /* start/stop recording on channel */
-    buttons.Add(CONTEXT_BUTTON_SET_THUMB, 20019);                                     /* change icon */
+    buttons.Add(CONTEXT_BUTTON_SET_THUMB, 19284);                                     /* change icon */
     buttons.Add(CONTEXT_BUTTON_GROUP_MANAGER, 19048);                                 /* group manager */
     buttons.Add(CONTEXT_BUTTON_HIDE, m_bShowHiddenChannels ? 19049 : 19054);          /* show/hide channel */
 
@@ -458,10 +458,10 @@ bool CGUIWindowPVRChannels::OnContextButtonSetThumb(CFileItem *item, CONTEXT_BUT
 
     if (!channel->IconPath().empty())
     {
-      /* add the current thumb, if available */
+      /* add the current icon, if available */
       CFileItemPtr current(new CFileItem("thumb://Current", false));
       current->SetArt("thumb", channel->IconPath());
-      current->SetLabel(g_localizeStrings.Get(20016));
+      current->SetLabel(g_localizeStrings.Get(19282));
       items.Add(current);
     }
     else if (item->HasArt("thumb"))
@@ -469,14 +469,14 @@ bool CGUIWindowPVRChannels::OnContextButtonSetThumb(CFileItem *item, CONTEXT_BUT
       /* already have a thumb that the share doesn't know about - must be a local one, so we may as well reuse it */
       CFileItemPtr current(new CFileItem("thumb://Current", false));
       current->SetArt("thumb", item->GetArt("thumb"));
-      current->SetLabel(g_localizeStrings.Get(20016));
+      current->SetLabel(g_localizeStrings.Get(19282));
       items.Add(current);
     }
 
     /* and add a "no thumb" entry as well */
     CFileItemPtr nothumb(new CFileItem("thumb://None", false));
     nothumb->SetIconImage(item->GetIconImage());
-    nothumb->SetLabel(g_localizeStrings.Get(20018));
+    nothumb->SetLabel(g_localizeStrings.Get(19283));
     items.Add(nothumb);
 
     CStdString strThumb;
@@ -485,11 +485,11 @@ bool CGUIWindowPVRChannels::OnContextButtonSetThumb(CFileItem *item, CONTEXT_BUT
     {
       CMediaSource share1;
       share1.strPath = CSettings::Get().GetString("pvrmenu.iconpath");
-      share1.strName = g_localizeStrings.Get(19018);
+      share1.strName = g_localizeStrings.Get(19066);
       shares.push_back(share1);
     }
     g_mediaManager.GetLocalDrives(shares);
-    if (!CGUIDialogFileBrowser::ShowAndGetImage(items, shares, g_localizeStrings.Get(1030), strThumb))
+    if (!CGUIDialogFileBrowser::ShowAndGetImage(items, shares, g_localizeStrings.Get(19285), strThumb, NULL, 19285))
       return bReturn;
 
     if (strThumb != "thumb://Current")
@@ -497,8 +497,11 @@ bool CGUIWindowPVRChannels::OnContextButtonSetThumb(CFileItem *item, CONTEXT_BUT
       if (strThumb == "thumb://None")
         strThumb = "";
 
-      channel->SetIconPath(strThumb, true);
-      channel->Persist();
+      CPVRChannelGroupPtr group = g_PVRChannelGroups->GetGroupAll(channel->IsRadio());
+      CPVRChannelPtr channelPtr = group->GetByUniqueID(channel->UniqueID());
+
+      channelPtr->SetIconPath(strThumb, true);
+      channelPtr->Persist();
       UpdateData();
     }
 
index c501ee8..0516a80 100644 (file)
@@ -198,16 +198,7 @@ void CGUIWindowPVRCommon::OnWindowUnload(void)
 
 bool CGUIWindowPVRCommon::OnAction(const CAction &action)
 {
-  bool bReturn = false;
-
-  if (action.GetID() == ACTION_NAV_BACK ||
-      action.GetID() == ACTION_PREVIOUS_MENU)
-  {
-    g_windowManager.PreviousWindow();
-    bReturn = true;
-  }
-
-  return bReturn;
+  return false; // CGUIWindowPVR will handle any default actions
 }
 
 bool CGUIWindowPVRCommon::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
@@ -527,24 +518,24 @@ bool CGUIWindowPVRCommon::ActionPlayChannel(CFileItem *item)
 
 bool CGUIWindowPVRCommon::ActionPlayEpg(CFileItem *item)
 {
-  CEpgInfoTag *epgTag = item->GetEPGInfoTag();
-  if (!epgTag)
-    return false;
-
-  CPVRChannelPtr channel = epgTag->ChannelTag();
-  if (!channel || channel->ChannelNumber() > 0 ||
-      !g_PVRManager.CheckParentalLock(*channel))
+  CPVRChannelPtr channel;
+  if (item && item->HasEPGInfoTag() && item->GetEPGInfoTag()->HasPVRChannel())
+    channel = item->GetEPGInfoTag()->ChannelTag();
+  
+  if (!channel || !g_PVRManager.CheckParentalLock(*channel))
     return false;
-
-  PlayBackRet ret = g_application.PlayFile(CFileItem(*channel));
-
-  if (ret == PLAYBACK_FAIL)
+  
+  CFileItem channelItem = CFileItem(*channel);
+  g_application.SwitchToFullScreen();
+  if (!PlayFile(&channelItem))
   {
-    CStdString msg = StringUtils::Format(g_localizeStrings.Get(19035).c_str(), channel->ChannelName().c_str()); // CHANNELNAME could not be played. Check the log for details.
+    // CHANNELNAME could not be played. Check the log for details.
+    CStdString msg = StringUtils::Format(g_localizeStrings.Get(19035).c_str(), channel->ChannelName().c_str());
     CGUIDialogOK::ShowAndGetInput(19033, 0, msg, 0);
+    return false;
   }
-
-  return ret == PLAYBACK_OK;
+  
+  return true;
 }
 
 bool CGUIWindowPVRCommon::ActionDeleteChannel(CFileItem *item)
index 1d65bff..7320c56 100644 (file)
@@ -38,6 +38,14 @@ namespace PVR
     PVR_WINDOW_SEARCH          = 6
   };
 
+  enum EPGSelectAction
+  {
+    EPG_SELECT_ACTION_CONTEXT_MENU    = 0,
+    EPG_SELECT_ACTION_SWITCH          = 1,
+    EPG_SELECT_ACTION_INFO            = 2,
+    EPG_SELECT_ACTION_RECORD          = 3
+  };
+
   #define CONTROL_LIST_TIMELINE        10
   #define CONTROL_LIST_CHANNELS_TV     11
   #define CONTROL_LIST_CHANNELS_RADIO  12
index d264412..b8c2063 100644 (file)
@@ -87,6 +87,8 @@ void CGUIWindowPVRGuide::GetContextButtons(int itemNumber, CContextButtons &butt
     return;
   CFileItemPtr pItem = m_parent->m_vecItems->Get(itemNumber);
 
+  buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000);         /* switch channel */
+
   CFileItemPtr timer = g_PVRTimers->GetTimerForEpgTag(pItem.get());
   if (timer && timer->HasPVRTimerInfoTag())
   {
@@ -104,13 +106,15 @@ void CGUIWindowPVRGuide::GetContextButtons(int itemNumber, CContextButtons &butt
   }
 
   buttons.Add(CONTEXT_BUTTON_INFO, 19047);              /* epg info */
-  buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000);         /* switch channel */
   buttons.Add(CONTEXT_BUTTON_FIND, 19003);              /* find similar program */
+
   if (m_iGuideView == GUIDE_VIEW_TIMELINE)
   {
     buttons.Add(CONTEXT_BUTTON_BEGIN, 19063);           /* go to begin */
+    buttons.Add(CONTEXT_BUTTON_NOW, 19070);             /* go to now */
     buttons.Add(CONTEXT_BUTTON_END, 19064);             /* go to end */
   }
+
   if (pItem->GetEPGInfoTag()->HasPVRChannel() &&
       g_PVRClients->HasMenuHooks(pItem->GetEPGInfoTag()->ChannelTag()->ClientID(), PVR_MENUHOOK_EPG))
     buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195);      /* PVR client specific action */
@@ -129,6 +133,7 @@ bool CGUIWindowPVRGuide::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
       OnContextButtonStopRecord(pItem.get(), button) ||
       OnContextButtonBegin(pItem.get(), button) ||
       OnContextButtonEnd(pItem.get(), button) ||
+      OnContextButtonNow(pItem.get(), button) ||
       CGUIWindowPVRCommon::OnContextButton(itemNumber, button);
 }
 
@@ -228,6 +233,7 @@ void CGUIWindowPVRGuide::UpdateViewTimeline(bool bUpdateSelectedFile)
 
     m_cachedTimeline->Clear();
     m_cachedChannelGroup = g_PVRManager.GetPlayingGroup(bRadio);
+    
     if (m_cachedChannelGroup->GetEPGAll(*m_cachedTimeline) == 0 && bRadio)
     {
       // if we didn't get any events for radio, get tv instead
@@ -239,14 +245,22 @@ void CGUIWindowPVRGuide::UpdateViewTimeline(bool bUpdateSelectedFile)
   m_parent->m_vecItems->RemoveDiscCache(m_parent->GetID());
   m_parent->m_vecItems->Assign(*m_cachedTimeline, false);
 
-  CDateTime gridStart = CDateTime::GetCurrentDateTime().GetAsUTCDateTime();
-  CDateTime firstDate(g_EpgContainer.GetFirstEPGDate());
-  CDateTime lastDate(g_EpgContainer.GetLastEPGDate());
-  if (!firstDate.IsValid() || firstDate < gridStart)
-    firstDate = gridStart;
-  if (!lastDate.IsValid() || lastDate < firstDate)
-    lastDate = firstDate;
-  m_parent->m_guideGrid->SetStartEnd(firstDate, lastDate);
+  CDateTime startDate(m_cachedChannelGroup->GetFirstEPGDate());
+  CDateTime endDate(m_cachedChannelGroup->GetLastEPGDate());
+  CDateTime currentDate = CDateTime::GetCurrentDateTime().GetAsUTCDateTime();
+  
+  if (!startDate.IsValid())
+    startDate = currentDate;
+  
+  if (!endDate.IsValid() || endDate < startDate)
+    endDate = startDate;
+  
+  // limit start to linger time
+  CDateTime maxPastDate = currentDate - CDateTimeSpan(0, 0, g_advancedSettings.m_iEpgLingerTime, 0);
+  if(startDate < maxPastDate)
+    startDate = maxPastDate;
+  
+  m_parent->m_guideGrid->SetStartEnd(startDate, endDate);
 
   m_parent->SetLabel(m_iControlButton, g_localizeStrings.Get(19222) + ": " + g_localizeStrings.Get(19032));
   m_parent->SetLabel(CONTROL_LABELGROUP, g_localizeStrings.Get(19032));
@@ -342,40 +356,59 @@ bool CGUIWindowPVRGuide::OnClickButton(CGUIMessage &message)
 
 bool CGUIWindowPVRGuide::OnClickList(CGUIMessage &message)
 {
-  bool bReturn = false;
-
   if (IsSelectedList(message))
   {
     int iAction = message.GetParam1();
     int iItem = m_parent->m_viewControl.GetSelectedItem();
 
-    /* get the fileitem pointer */
     if (iItem < 0 || iItem >= (int) m_parent->m_vecItems->Size())
-      return bReturn;
+      return false;
+    
+    /* get the fileitem pointer */
     CFileItemPtr pItem = m_parent->m_vecItems->Get(iItem);
 
     /* process actions */
-    bReturn = true;
-    if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK)
+    switch (iAction)
     {
-      if (!g_advancedSettings.m_bPVRShowEpgInfoOnEpgItemSelect && pItem->GetEPGInfoTag()->StartAsLocalTime() <= CDateTime::GetCurrentDateTime())
-        PlayEpgItem(pItem.get());
-      else
+      case ACTION_SELECT_ITEM:
+      case ACTION_MOUSE_LEFT_CLICK:
+        switch(CSettings::Get().GetInt("epg.selectaction"))
+        {
+          case EPG_SELECT_ACTION_CONTEXT_MENU:
+            m_parent->OnPopupMenu(iItem);
+            break;
+          case EPG_SELECT_ACTION_SWITCH:
+            ActionPlayEpg(pItem.get());
+            break;
+          case EPG_SELECT_ACTION_INFO:
+            ShowEPGInfo(pItem.get());
+            break;
+          case EPG_SELECT_ACTION_RECORD:
+            ActionRecord(pItem.get());
+            break;
+        }
+        break;
+      case ACTION_SHOW_INFO:
         ShowEPGInfo(pItem.get());
+        break;
+      case ACTION_PLAY:
+        ActionPlayEpg(pItem.get());
+        break;
+      case ACTION_RECORD:
+        ActionRecord(pItem.get());
+        break;
+      case ACTION_CONTEXT_MENU:
+      case ACTION_MOUSE_RIGHT_CLICK:
+        m_parent->OnPopupMenu(iItem);
+        break;
+      default:
+        return false;
     }
-    else if (iAction == ACTION_SHOW_INFO)
-      ShowEPGInfo(pItem.get());
-    else if (iAction == ACTION_RECORD)
-      ActionRecord(pItem.get());
-    else if (iAction == ACTION_PLAY)
-      ActionPlayEpg(pItem.get());
-    else if (iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK)
-      m_parent->OnPopupMenu(iItem);
-    else
-      bReturn = false;
+    
+    return true;
   }
 
-  return bReturn;
+  return false;
 }
 
 bool CGUIWindowPVRGuide::OnContextButtonBegin(CFileItem *item, CONTEXT_BUTTON button)
@@ -408,36 +441,29 @@ bool CGUIWindowPVRGuide::OnContextButtonEnd(CFileItem *item, CONTEXT_BUTTON butt
   return bReturn;
 }
 
-bool CGUIWindowPVRGuide::OnContextButtonInfo(CFileItem *item, CONTEXT_BUTTON button)
+bool CGUIWindowPVRGuide::OnContextButtonNow(CFileItem *item, CONTEXT_BUTTON button)
 {
   bool bReturn = false;
-
-  if (button == CONTEXT_BUTTON_INFO)
+  
+  if (button == CONTEXT_BUTTON_NOW)
   {
-    ShowEPGInfo(item);
+    CGUIWindowPVR *pWindow = (CGUIWindowPVR *) g_windowManager.GetWindow(WINDOW_PVR);
+    if (pWindow)
+      pWindow->m_guideGrid->GoToNow();
     bReturn = true;
   }
-
+  
   return bReturn;
 }
 
-bool CGUIWindowPVRGuide::PlayEpgItem(CFileItem *item)
+bool CGUIWindowPVRGuide::OnContextButtonInfo(CFileItem *item, CONTEXT_BUTTON button)
 {
-  CPVRChannelPtr channel;
-  if (item && item->HasEPGInfoTag() && item->GetEPGInfoTag()->HasPVRChannel())
-    channel = item->GetEPGInfoTag()->ChannelTag();
-
-  if (!channel || !g_PVRManager.CheckParentalLock(*channel))
-    return false;
+  bool bReturn = false;
 
-  CLog::Log(LOGDEBUG, "play channel '%s'", channel->ChannelName().c_str());
-  CFileItem channelItem = CFileItem(*channel);
-  g_application.SwitchToFullScreen();
-  bool bReturn = PlayFile(&channelItem);
-  if (!bReturn)
+  if (button == CONTEXT_BUTTON_INFO)
   {
-    CStdString msg = StringUtils::Format(g_localizeStrings.Get(19035).c_str(), channel->ChannelName().c_str()); // CHANNELNAME could not be played. Check the log for details.
-    CGUIDialogOK::ShowAndGetInput(19033, 0, msg, 0);
+    ShowEPGInfo(item);
+    bReturn = true;
   }
 
   return bReturn;
@@ -449,7 +475,7 @@ bool CGUIWindowPVRGuide::OnContextButtonPlay(CFileItem *item, CONTEXT_BUTTON but
 
   if (button == CONTEXT_BUTTON_PLAY_ITEM)
   {
-    bReturn = PlayEpgItem(item);
+    bReturn = ActionPlayEpg(item);
   }
 
   return bReturn;
index 4a7e5f5..988ef06 100644 (file)
@@ -64,10 +64,10 @@ namespace PVR
     bool IsSelectedList(CGUIMessage &message) const;
     bool OnClickButton(CGUIMessage &message);
     bool OnClickList(CGUIMessage &message);
-    bool PlayEpgItem(CFileItem *item);
 
     bool OnContextButtonBegin(CFileItem *item, CONTEXT_BUTTON button);
     bool OnContextButtonEnd(CFileItem *item, CONTEXT_BUTTON button);
+    bool OnContextButtonNow(CFileItem *item, CONTEXT_BUTTON button);
     bool OnContextButtonInfo(CFileItem *item, CONTEXT_BUTTON button);
     bool OnContextButtonPlay(CFileItem *item, CONTEXT_BUTTON button);
     bool OnContextButtonStartRecord(CFileItem *item, CONTEXT_BUTTON button);
index aef5400..1c7a697 100644 (file)
@@ -164,13 +164,11 @@ bool CGUIWindowPVRRecordings::OnAction(const CAction &action)
       action.GetID() == ACTION_NAV_BACK)
   {
     if (m_parent->m_vecItems->GetPath() != "pvr://recordings/")
+    {
       m_parent->GoParentFolder();
-    else if (action.GetID() == ACTION_NAV_BACK)
-      g_windowManager.PreviousWindow();
-
-    return true;
+      return true;
+    }
   }
-
   return CGUIWindowPVRCommon::OnAction(action);
 }
 
index 9cb87ab..65b7ec9 100644 (file)
@@ -46,13 +46,13 @@ void CGUIWindowTestPatternDX::DrawVerticalLines(int top, int left, int bottom, i
     vert[p].y = (float)top;
     vert[p].z = 0.5f;
     vert[p].rhw = 1.0f;
-    vert[p].color = 0xffffffff;
+    vert[p].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
     ++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;
+    vert[p].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
     ++p;
   }
   g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
@@ -71,13 +71,13 @@ void CGUIWindowTestPatternDX::DrawHorizontalLines(int top, int left, int bottom,
     vert[p].y = (float)i;
     vert[p].z = 0.5f;
     vert[p].rhw = 1.0f;
-    vert[p].color = 0xffffffff;
+    vert[p].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
     ++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;
+    vert[p].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
     ++p;
   }
   g_Windowing.Get3DDevice()->SetFVF(D3DFVF_CUSTOMVERTEX);
@@ -101,7 +101,7 @@ void CGUIWindowTestPatternDX::DrawCheckers(int top, int left, int bottom, int ri
         vert[i].y = (float)y;
         vert[i].z = 0.5f;
         vert[i].rhw = 1.0f;
-        vert[i].color = 0xffffffff;
+        vert[i].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
       }
       else
       {
@@ -109,7 +109,7 @@ void CGUIWindowTestPatternDX::DrawCheckers(int top, int left, int bottom, int ri
         vert[i].y = (float)y;
         vert[i].z = 0.5f;
         vert[i].rhw = 1.0f;
-        vert[i].color = 0xffffffff;
+        vert[i].color = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
       }
       ++i;
     }
@@ -131,12 +131,14 @@ void CGUIWindowTestPatternDX::DrawBouncingRectangle(int top, int left, int botto
   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);
+  DrawRectangle((float)m_bounceX, (float)m_bounceY, (float)(m_bounceX + TEST_PATTERNS_BOUNCE_SQUARE_SIZE), (float)(m_bounceY + TEST_PATTERNS_BOUNCE_SQUARE_SIZE), D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f));
 }
 
 void CGUIWindowTestPatternDX::DrawContrastBrightnessPattern(int top, int left, int bottom, int right)
 {
-  DWORD color = 0xffffffff;
+  DWORD color;
+  DWORD color_white = D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f);
+  DWORD color_black = D3DCOLOR_COLORVALUE(m_black, m_black, m_black, 1.0f);
   float x5p = (float) (left + (0.05f * (right - left)));
   float y5p = (float) (top + (0.05f * (bottom - top)));
   float x12p = (float) (left + (0.125f * (right - left)));
@@ -159,59 +161,59 @@ void CGUIWindowTestPatternDX::DrawContrastBrightnessPattern(int top, int left, i
   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);
+  DrawRectangle(x50p, (float)top, (float)right, y50p, color_white);
+  DrawRectangle((float)left, (float)y50p, x50p, (float)bottom, color_white);
 
   // 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},
+    {(float)left, y5p, 0.5f, 1.0f, color_white},
+    {x50p, y5p, 0.5f, 1.0f, color_white},
+    {x5p, (float)top, 0.5f, 1.0f, color_white},
+    {x5p, y50p, 0.5f, 1.0f, color_white},
+    {x50p, y95p, 0.5f, 1.0f, color_white},
+    {(float)right, y95p, 0.5f, 1.0f, color_white},
+    {x95p, y50p, 0.5f, 1.0f, color_white},
+    {x95p, (float)bottom, 0.5f, 1.0f, color_white},
 
-    {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}
+    {x50p, y5p, 0.5f, 1.0f, color_black},
+    {(float)right, y5p, 0.5f, 1.0f, color_black},
+    {x5p, y50p, 0.5f, 1.0f, color_black},
+    {x5p, (float)bottom, 0.5f, 1.0f, color_black},
+    {(float)left, y95p, 0.5f, 1.0f, color_black},
+    {x50p, y95p, 0.5f, 1.0f, color_black},
+    {x95p, (float)top, 0.5f, 1.0f, color_black},
+    {x95p, y50p, 0.5f, 1.0f, color_black}
   };
   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(x12p, y12p, x37p, y37p, color_white);
+  DrawRectangle(x62p, y62p, x87p, y87p, color_white);
 
-  DrawRectangle(x62p, y12p, x87p, y37p, 0xff000000);
-  DrawRectangle(x12p, y62p, x37p, y87p, 0xff000000);
+  DrawRectangle(x62p, y12p, x87p, y37p, color_black);
+  DrawRectangle(x12p, y62p, x37p, y87p, color_black);
 
   // draw inner circles
   if (m_blinkFrame < TEST_PATTERNS_BLINK_CYCLE / 2)
-    color = D3DCOLOR_COLORVALUE(0.05f, 0.05f, 0.05f, 1.0f);
+    color = D3DCOLOR_COLORVALUE(m_black + 0.05f, m_black + 0.05f, m_black + 0.05f, 1.0f);
   else
-    color = D3DCOLOR_COLORVALUE(0.0f, 0.0f, 0.0f, 1.0f);
+    color = D3DCOLOR_COLORVALUE(0.0f, 0.0f, 0.0f, 1.0f); // BTB
   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);
+    color = D3DCOLOR_COLORVALUE(m_white - 0.05f, m_white - 0.05f, m_white - 0.05f, 1.0f);
   else
-    color = D3DCOLOR_COLORVALUE(1.0f, 1.0f, 1.0f, 1.0f);
+    color = D3DCOLOR_COLORVALUE(1.0f, 1.0f, 1.0f, 1.0f); // WTW
   DrawCircleEx(x25p, y25p, (y37p - y12p) / 3, color);
   DrawCircleEx(x75p, y75p, (y37p - y12p) / 3, color);
 }
 
 void CGUIWindowTestPatternDX::DrawCircle(int originX, int originY, int radius)
 {
-  DrawCircleEx((float)originX, (float)originY, (float)radius, 0xffffffff);
+  DrawCircleEx((float)originX, (float)originY, (float)radius, D3DCOLOR_COLORVALUE(m_white, m_white, m_white, 1.0f));
 }
 
 void CGUIWindowTestPatternDX::DrawCircleEx(float originX, float originY, float radius, DWORD color)
index c6b1361..1effa55 100644 (file)
@@ -37,7 +37,7 @@ CGUIWindowTestPatternGL::~CGUIWindowTestPatternGL(void)
 void CGUIWindowTestPatternGL::DrawVerticalLines(int top, int left, int bottom, int right)
 {
   glBegin(GL_LINES);
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   for (int i = left; i <= right; i += 2)
   {
     glVertex2d(i, top);
@@ -49,7 +49,7 @@ void CGUIWindowTestPatternGL::DrawVerticalLines(int top, int left, int bottom, i
 void CGUIWindowTestPatternGL::DrawHorizontalLines(int top, int left, int bottom, int right)
 {
   glBegin(GL_LINES);
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   for (int i = top; i <= bottom; i += 2)
   {
     glVertex2d(left, i);
@@ -61,7 +61,7 @@ void CGUIWindowTestPatternGL::DrawHorizontalLines(int top, int left, int bottom,
 void CGUIWindowTestPatternGL::DrawCheckers(int top, int left, int bottom, int right)
 {
   glBegin(GL_POINTS);
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   for (int y = top; y <= bottom; y++)
   {
     for (int x = left; x <= right; x += 2)
@@ -86,7 +86,7 @@ void CGUIWindowTestPatternGL::DrawBouncingRectangle(int top, int left, int botto
   if ((m_bounceDirectionY == 1 && m_bounceY + TEST_PATTERNS_BOUNCE_SQUARE_SIZE == bottom) || (m_bounceDirectionY == -1 && m_bounceY == top))
     m_bounceDirectionY = -m_bounceDirectionY;
 
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   glRecti(m_bounceX, m_bounceY, m_bounceX + TEST_PATTERNS_BOUNCE_SQUARE_SIZE, m_bounceY + TEST_PATTERNS_BOUNCE_SQUARE_SIZE);
 }
 
@@ -114,13 +114,13 @@ void CGUIWindowTestPatternGL::DrawContrastBrightnessPattern(int top, int left, i
   m_blinkFrame = (m_blinkFrame + 1) % TEST_PATTERNS_BLINK_CYCLE;
 
   // draw main quadrants
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   glRecti(x50p, top, right, y50p);
   glRecti(left, y50p, x50p, bottom);
 
   // draw border lines
   glBegin(GL_LINES);
-    glColor3f(1, 1, 1);
+    glColor3f(m_white, m_white, m_white);
     glVertex2d(left, y5p);
     glVertex2d(x50p, y5p);
     glVertex2d(x5p, top);
@@ -130,7 +130,7 @@ void CGUIWindowTestPatternGL::DrawContrastBrightnessPattern(int top, int left, i
     glVertex2d(x95p, y50p);
     glVertex2d(x95p, bottom);
 
-    glColor3f(0, 0, 0);
+    glColor3f(m_black, m_black, m_black);
     glVertex2d(x50p, y5p);
     glVertex2d(right, y5p);
     glVertex2d(x5p, y50p);
@@ -142,26 +142,26 @@ void CGUIWindowTestPatternGL::DrawContrastBrightnessPattern(int top, int left, i
   glEnd();
 
   // draw inner rectangles
-  glColor3f(1, 1, 1);
+  glColor3f(m_white, m_white, m_white);
   glRecti(x12p, y12p, x37p, y37p);
   glRecti(x62p, y62p, x87p, y87p);
 
-  glColor3f(0, 0, 0);
+  glColor3f(m_black, m_black, m_black);
   glRecti(x62p, y12p, x87p, y37p);
   glRecti(x12p, y62p, x37p, y87p);
 
   // draw inner circles
   if (m_blinkFrame < TEST_PATTERNS_BLINK_CYCLE / 2)
-    glColor3f(0.05f, 0.05f, 0.05f);
+    glColor3f(m_black + 0.05f, m_black + 0.05f, m_black + 0.05f);
   else
-    glColor3f(0, 0, 0);
+    glColor3f(0.0f, 0.0f, 0.0f); //BTB
   DrawCircle(x25p, y75p, (y37p - y12p) / 3);
   DrawCircle(x75p, y25p, (y37p - y12p) / 3);
 
   if (m_blinkFrame < TEST_PATTERNS_BLINK_CYCLE / 2)
-    glColor3f(0.95f, 0.95f, 0.95f);
+    glColor3f(m_white - 0.05f, m_white - 0.05f, m_white - 0.05f);
   else
-    glColor3f(1, 1, 1);
+    glColor3f(1.0f, 1.0f, 1.0f); //WTW
   DrawCircle(x25p, y25p, (y37p - y12p) / 3);
   DrawCircle(x75p, y75p, (y37p - y12p) / 3);
 }
@@ -192,6 +192,7 @@ void CGUIWindowTestPatternGL::DrawCircle(int originX, int originY, int radius)
 void CGUIWindowTestPatternGL::BeginRender()
 {
   glDisable(GL_TEXTURE_2D);
+  glDisable(GL_BLEND);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 }
 
index 79ce315..462371e 100644 (file)
@@ -304,7 +304,7 @@ void CAdvancedSettings::Initialize()
 
   m_iMythMovieLength = 0; // 0 == Off
 
-  m_iEpgLingerTime = 60;           /* keep 1 hour by default */
+  m_iEpgLingerTime = 60 * 24;           /* keep 24 hours by default */
   m_iEpgUpdateCheckInterval = 300; /* check if tables need to be updated every 5 minutes */
   m_iEpgCleanupInterval = 900;     /* remove old entries from the EPG every 15 minutes */
   m_iEpgActiveTagCheckInterval = 60; /* check for updated active tags every minute */
@@ -361,7 +361,6 @@ void CAdvancedSettings::Initialize()
 
   m_iPVRTimeCorrection             = 0;
   m_iPVRInfoToggleInterval         = 3000;
-  m_bPVRShowEpgInfoOnEpgItemSelect = false;
   m_iPVRMinVideoCacheLevel         = 5;
   m_iPVRMinAudioCacheLevel         = 10;
   m_bPVRCacheInDvdPlayer           = true;
@@ -395,7 +394,7 @@ void CAdvancedSettings::Initialize()
   m_databaseVideo.Reset();
 
   m_pictureExtensions = ".png|.jpg|.jpeg|.bmp|.gif|.ico|.tif|.tiff|.tga|.pcx|.cbz|.zip|.cbr|.rar|.dng|.nef|.cr2|.crw|.orf|.arw|.erf|.3fr|.dcr|.x3f|.mef|.raf|.mrw|.pef|.sr2|.rss";
-  m_musicExtensions = ".nsv|.m4a|.flac|.aac|.strm|.pls|.rm|.rma|.mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u|.mod|.amf|.669|.dmf|.dsm|.far|.gdm|.imf|.it|.m15|.med|.okt|.s3m|.stm|.sfx|.ult|.uni|.xm|.sid|.ac3|.dts|.cue|.aif|.aiff|.wpl|.ape|.mac|.mpc|.mp+|.mpp|.shn|.zip|.rar|.wv|.nsf|.spc|.gym|.adx|.dsp|.adp|.ymf|.ast|.afc|.hps|.xsp|.xwav|.waa|.wvs|.wam|.gcm|.idsp|.mpdsp|.mss|.spt|.rsd|.mid|.kar|.sap|.cmc|.cmr|.dmc|.mpt|.mpd|.rmt|.tmc|.tm8|.tm2|.oga|.url|.pxml|.tta|.rss|.cm3|.cms|.dlt|.brstm|.wtv|.mka";
+  m_musicExtensions = ".nsv|.m4a|.flac|.aac|.strm|.pls|.rm|.rma|.mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u|.mod|.amf|.669|.dmf|.dsm|.far|.gdm|.imf|.it|.m15|.med|.okt|.s3m|.stm|.sfx|.ult|.uni|.xm|.sid|.ac3|.dts|.cue|.aif|.aiff|.wpl|.ape|.mac|.mpc|.mp+|.mpp|.shn|.zip|.rar|.wv|.nsf|.spc|.gym|.adx|.dsp|.adp|.ymf|.ast|.afc|.hps|.xsp|.xwav|.waa|.wvs|.wam|.gcm|.idsp|.mpdsp|.mss|.spt|.rsd|.mid|.kar|.sap|.cmc|.cmr|.dmc|.mpt|.mpd|.rmt|.tmc|.tm8|.tm2|.oga|.url|.pxml|.tta|.rss|.cm3|.cms|.dlt|.brstm|.wtv|.mka|.tak";
   m_videoExtensions = ".m4v|.3g2|.3gp|.nsv|.tp|.ts|.ty|.strm|.pls|.rm|.rmvb|.m3u|.m3u8|.ifo|.mov|.qt|.divx|.xvid|.bivx|.vob|.nrg|.img|.iso|.pva|.wmv|.asf|.asx|.ogm|.m2v|.avi|.bin|.dat|.mpg|.mpeg|.mp4|.mkv|.avc|.vp3|.svq3|.nuv|.viv|.dv|.fli|.flv|.rar|.001|.wpl|.zip|.vdr|.dvr-ms|.xsp|.mts|.m2t|.m2ts|.evo|.ogv|.sdp|.avs|.rec|.url|.pxml|.vc1|.h264|.rcv|.rss|.mpls|.webm|.bdmv|.wtv";
   m_subtitlesExtensions = ".utf|.utf8|.utf-8|.sub|.srt|.smi|.rt|.txt|.ssa|.text|.ssa|.aqt|.jss|.ass|.idx|.ifo|.rar|.zip";
   m_discStubExtensions = ".disc";
@@ -1096,7 +1095,6 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
   {
     XMLUtils::GetInt(pPVR, "timecorrection", m_iPVRTimeCorrection, 0, 1440);
     XMLUtils::GetInt(pPVR, "infotoggleinterval", m_iPVRInfoToggleInterval, 0, 30000);
-    XMLUtils::GetBoolean(pPVR, "showepginfoonselect", m_bPVRShowEpgInfoOnEpgItemSelect);
     XMLUtils::GetInt(pPVR, "minvideocachelevel", m_iPVRMinVideoCacheLevel, 0, 100);
     XMLUtils::GetInt(pPVR, "minaudiocachelevel", m_iPVRMinAudioCacheLevel, 0, 100);
     XMLUtils::GetBoolean(pPVR, "cacheindvdplayer", m_bPVRCacheInDvdPlayer);
index 7d16957..88d2cde 100644 (file)
@@ -358,7 +358,6 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler
     /* PVR/TV related advanced settings */
     int m_iPVRTimeCorrection;     /*!< @brief correct all times (epg tags, timer tags, recording tags) by this amount of minutes. defaults to 0. */
     int m_iPVRInfoToggleInterval; /*!< @brief if there are more than 1 pvr gui info item available (e.g. multiple recordings active at the same time), use this toggle delay in milliseconds. defaults to 3000. */
-    bool m_bPVRShowEpgInfoOnEpgItemSelect; /*!< @brief when selecting an EPG fileitem, show the EPG info dialog if this setting is true. start playback on the selected channel if false AND fileitem has started */
     int m_iPVRMinVideoCacheLevel;      /*!< @brief cache up to this level in the video buffer buffer before resuming playback if the buffers run dry */
     int m_iPVRMinAudioCacheLevel;      /*!< @brief cache up to this level in the audio buffer before resuming playback if the buffers run dry */
     bool m_bPVRCacheInDvdPlayer; /*!< @brief true to use "CACHESTATE_PVR" in CDVDPlayer (default) */
index 4917ceb..8cf00f7 100644 (file)
@@ -1032,6 +1032,7 @@ void CSettings::InitializeISettingCallbacks()
   settingSet.insert("audiooutput.guisoundmode");
   settingSet.insert("audiooutput.stereoupmix");
   settingSet.insert("audiooutput.ac3passthrough");
+  settingSet.insert("audiooutput.ac3transcode");
   settingSet.insert("audiooutput.eac3passthrough");
   settingSet.insert("audiooutput.dtspassthrough");
   settingSet.insert("audiooutput.truehdpassthrough");
index 18c4f37..64f36fa 100644 (file)
 #include "guilib/GUIWindowManager.h"
 #include "guilib/Key.h"
 #include "guilib/WindowIDs.h"
+#include "windowing/WindowingFactory.h"
+
 
 CGUIWindowTestPattern::CGUIWindowTestPattern(void)
     : CGUIWindow(WINDOW_TEST_PATTERN, "")
+    , m_white(1.0)
+    , m_black(0.0)
 {
   m_pattern = 0;
   m_bounceX = 0;
@@ -82,6 +86,18 @@ void CGUIWindowTestPattern::Process(unsigned int currentTime, CDirtyRegionList &
     MarkDirtyRegion();
   CGUIWindow::Process(currentTime, dirtyregions);
   m_renderRegion.SetRect(0, 0, (float)g_graphicsContext.GetWidth(), (float)g_graphicsContext.GetHeight());
+
+
+  if(g_Windowing.UseLimitedColor())
+  {
+    m_white = 235.0f / 255;
+    m_black =  16.0f / 255;
+  }
+  else
+  {
+    m_white = 1.0f;
+    m_black = 0.0f;
+  }
 }
 
 void CGUIWindowTestPattern::Render()
index c37b8ed..ebba3c3 100644 (file)
@@ -52,6 +52,9 @@ protected:
   int m_bounceDirectionX;
   int m_bounceDirectionY;
   int m_blinkFrame;
+
+  float m_white;
+  float m_black;
 };
 
 
index 3fade50..8fc56f4 100644 (file)
 #include "guilib/LocalizeStrings.h"
 #include "filesystem/File.h"
 
-//#include "utils/RegExp.h"
-//#include "utils/StdString.h"
-//#include "Util.h"
+#include "utils/log.h"
+#include "utils/RegExp.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+
+CAndroidStorageProvider::CAndroidStorageProvider()
+{
+  m_removableLength = 0;
+  PumpDriveChangeEvents(NULL);
+}
+
+std::string CAndroidStorageProvider::unescape(const std::string& str)
+{
+  std::string retString;
+  for (uint32_t i=0; i < str.length(); ++i)
+  {
+    if (str[i] != '\\')
+      retString += str[i];
+    else
+    {
+      i += 1;
+      if (str[i] == 'u') // unicode
+      {
+        // TODO
+      }
+      else if (str[i] >= '0' && str[i] <= '7') // octal
+      {
+        std::string octString;
+        while (str[i] >= '0' && str[i] <= '7')
+        {
+          octString += str[i];
+          i += 1;
+        }
+        if (octString.length() != 0)
+        {
+          uint8_t val = 0;
+          for (int j=octString.length()-1; j>=0; --j)
+          {
+            val += ((uint8_t)(octString[j] - '0')) * (1 << ((octString.length() - (j+1)) * 3));
+          }
+          retString += (char)val;
+          i -= 1;
+        }
+      }
+    }
+  }
+  return retString;
+}
 
 void CAndroidStorageProvider::GetLocalDrives(VECSOURCES &localDrives)
 {
@@ -49,7 +94,55 @@ void CAndroidStorageProvider::GetLocalDrives(VECSOURCES &localDrives)
 
 void CAndroidStorageProvider::GetRemovableDrives(VECSOURCES &removableDrives)
 {
-  // TODO
+  // mounted usb disks
+  std::vector<CStdString> result;
+  CRegExp reMount;
+  reMount.RegComp("^(.+?)\\s+(.+?)\\s+(.+?)\\s");
+  char line[1024];
+
+  FILE* pipe = fopen("/proc/mounts", "r");
+
+  if (pipe)
+  {
+    while (fgets(line, sizeof(line) - 1, pipe))
+    {
+      if (reMount.RegFind(line) != -1)
+      {
+        bool accepted = false;
+        std::string mountStr = reMount.GetReplaceString("\\2");
+        std::string fsStr    = reMount.GetReplaceString("\\3");
+        const char* mount = mountStr.c_str();
+        const char* fs    = fsStr.c_str();
+
+        // Here we choose which filesystems are approved
+        if (strcmp(fs, "fuseblk") == 0 || strcmp(fs, "vfat") == 0
+            || strcmp(fs, "ext2") == 0 || strcmp(fs, "ext3") == 0 || strcmp(fs, "ext4") == 0
+            || strcmp(fs, "reiserfs") == 0 || strcmp(fs, "xfs") == 0
+            || strcmp(fs, "ntfs-3g") == 0 || strcmp(fs, "iso9660") == 0
+            || strcmp(fs, "exfat") == 0
+            || strcmp(fs, "fusefs") == 0 || strcmp(fs, "hfs") == 0)
+          accepted = true;
+
+        // Ignore everything but usb
+        if (!StringUtils::StartsWith(mountStr, "/mnt/usb"))
+          accepted = false;
+
+        if(accepted)
+          result.push_back(mount);
+      }
+    }
+    fclose(pipe);
+  } else
+    CLog::Log(LOGERROR, "Cannot read mount points");
+
+  for (unsigned int i = 0; i < result.size(); i++)
+  {
+    CMediaSource share;
+    share.strPath = unescape(result[i]);
+    share.strName = URIUtils::GetFileName(share.strPath);
+    share.m_ignore = true;
+    removableDrives.push_back(share);
+  }
 }
 
 std::vector<CStdString> CAndroidStorageProvider::GetDiskUsage()
@@ -73,6 +166,16 @@ std::vector<CStdString> CAndroidStorageProvider::GetDiskUsage()
       CXBMCApp::GetStorageUsage(path, usage) && !usage.empty())
     result.push_back(usage);
 
+  // add removable storage
+  VECSOURCES drives;
+  GetRemovableDrives(drives);
+  for (unsigned int i = 0; i < drives.size(); i++)
+  {
+    usage.clear();
+    if (CXBMCApp::GetStorageUsage(drives[i].strPath, usage) && !usage.empty())
+      result.push_back(usage);
+  }
+
   return result;
 }
 
@@ -83,5 +186,9 @@ bool CAndroidStorageProvider::Eject(CStdString mountpath)
 
 bool CAndroidStorageProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback)
 {
-  return false;
+  VECSOURCES drives;
+  GetRemovableDrives(drives);
+  bool changed = drives.size() != m_removableLength;
+  m_removableLength = drives.size();
+  return changed;
 }
index aa9ce35..0ffe2a5 100644 (file)
@@ -24,7 +24,7 @@
 class CAndroidStorageProvider : public IStorageProvider
 {
 public:
-  CAndroidStorageProvider() { }
+  CAndroidStorageProvider();
   virtual ~CAndroidStorageProvider() { }
 
   virtual void Initialize() { }
@@ -38,4 +38,8 @@ public:
   virtual std::vector<CStdString> GetDiskUsage();
 
   virtual bool PumpDriveChangeEvents(IStorageEventsCallback *callback);
+
+private:
+  std::string unescape(const std::string& str);
+  unsigned int m_removableLength;
 };
index c5a8890..d037dfe 100644 (file)
@@ -126,7 +126,7 @@ bool CDeviceKitDiskDevice::Mount()
       if (dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &mountPoint, DBUS_TYPE_INVALID))
       {
         m_MountPath = mountPoint;
-        CLog::Log(LOGDEBUG, "DeviceKit.Disks: Sucessfully mounted %s on %s", m_DeviceKitUDI.c_str(), mountPoint);
+        CLog::Log(LOGDEBUG, "DeviceKit.Disks: Successfully mounted %s on %s", m_DeviceKitUDI.c_str(), mountPoint);
         m_isMountedByUs = m_isMounted = true;
       }
     }
index ef9fc34..dd1bf43 100644 (file)
@@ -39,7 +39,7 @@ CUDiskDevice::CUDiskDevice(const char *DeviceKitUDI)
   m_isFileSystem = false;
   m_isSystemInternal = false;
   m_isOptical = false;
-  m_PartitionSizeGiB = 0.0f;
+  m_PartitionSize = 0;
   Update();
 }
 
@@ -67,7 +67,7 @@ void CUDiskDevice::Update()
   else
     m_MountPath.clear();
 
-  m_PartitionSizeGiB = properties["PartitionSize"].asUnsignedInteger() / 1024.0 / 1024.0 / 1024.0;
+  m_PartitionSize = properties["PartitionSize"].asUnsignedInteger();
   m_isPartition = properties["DeviceIsPartition"].asBoolean();
   m_isSystemInternal = properties["DeviceIsSystemInternal"].asBoolean();
   m_isOptical = properties["DeviceIsOpticalDisc"].asBoolean();
@@ -101,7 +101,7 @@ bool CUDiskDevice::Mount()
       if (dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &mountPoint, DBUS_TYPE_INVALID))
       {
         m_MountPath = mountPoint;
-        CLog::Log(LOGDEBUG, "UDisks: Sucessfully mounted %s on %s", m_DeviceKitUDI.c_str(), mountPoint);
+        CLog::Log(LOGDEBUG, "UDisks: Successfully mounted %s on %s", m_DeviceKitUDI.c_str(), mountPoint);
         m_isMountedByUs = m_isMounted = true;
       }
     }
@@ -140,7 +140,10 @@ CMediaSource CUDiskDevice::ToMediaShare()
   CMediaSource source;
   source.strPath = m_MountPath;
   if (m_Label.empty())
-    source.strName = StringUtils::Format("%.1f GB %s", m_PartitionSizeGiB, g_localizeStrings.Get(155).c_str());
+  {
+    std::string strSize = StringUtils::SizeToString(m_PartitionSize);
+    source.strName = StringUtils::Format("%s %s", strSize.c_str(), g_localizeStrings.Get(155).c_str());
+  }
   else
     source.strName = m_Label;
   if (m_isOptical)
index b8c0b3e..eaa4a4c 100644 (file)
@@ -41,7 +41,7 @@ public:
 
   CStdString m_UDI, m_DeviceKitUDI, m_MountPath, m_FileSystem, m_Label;
   bool m_isMounted, m_isMountedByUs, m_isRemovable, m_isPartition, m_isFileSystem, m_isSystemInternal, m_isOptical;
-  float m_PartitionSizeGiB;
+  int64_t m_PartitionSize;
 };
 
 class CUDisksProvider : public IStorageProvider
index 33e3997..70b6ac0 100644 (file)
@@ -97,6 +97,9 @@ void CThread::SetThreadInfo()
   else
     userMaxPrio = 0;
 
+  if (geteuid() == 0)
+    userMaxPrio = GetMaxPriority();
+
   // if the user does not have an entry in limits.conf the following
   // call will fail
   if (userMaxPrio > 0)
@@ -169,6 +172,9 @@ bool CThread::SetPriority(const int iPriority)
     else
       userMaxPrio = 0;
 
+    if (geteuid() == 0)
+      userMaxPrio = GetMaxPriority();
+
     // keep priority in bounds
     int prio = iPriority;
     if (prio >= GetMaxPriority())
index 4c0e161..6df8dd2 100644 (file)
@@ -116,6 +116,9 @@ bool aml_wired_present()
 
 void aml_permissions()
 {
+  if (!aml_present())
+    return;
+  
   // most all aml devices are already rooted.
   int ret = system("ls /system/xbin/su");
   if (ret != 0)
index fd54d13..4519e19 100644 (file)
@@ -90,9 +90,9 @@ CArchive& CArchive::operator<<(int i)
   return streamout(&i, sizeof(i));
 }
 
-CArchive& CArchive::operator<<(unsigned int i)
+CArchive& CArchive::operator<<(unsigned int ui)
 {
-  return streamout(&i, sizeof(i));
+  return streamout(&ui, sizeof(ui));
 }
 
 CArchive& CArchive::operator<<(long int l)
@@ -262,9 +262,9 @@ CArchive& CArchive::operator>>(int& i)
   return streamin(&i, sizeof(i));
 }
 
-CArchive& CArchive::operator>>(unsigned int& i)
+CArchive& CArchive::operator>>(unsigned int& ui)
 {
-  return streamin(&i, sizeof(i));
+  return streamin(&ui, sizeof(ui));
 }
 
 CArchive& CArchive::operator>>(long int& l)
@@ -337,7 +337,7 @@ CArchive& CArchive::operator>>(IArchivable& obj)
 
 CArchive& CArchive::operator>>(CVariant& variant)
 {
-  size_t type;
+  int type;
   *this >> type;
   variant = CVariant((CVariant::VariantType)type);
 
index a8c9859..0148fcb 100644 (file)
@@ -61,7 +61,7 @@ public:
   CArchive& operator<<(short int s);
   CArchive& operator<<(unsigned short int us);
   CArchive& operator<<(int i);
-  CArchive& operator<<(unsigned int i);
+  CArchive& operator<<(unsigned int ui);
   CArchive& operator<<(long int l);
   CArchive& operator<<(unsigned long int ul);
   CArchive& operator<<(long long int ll);
@@ -79,10 +79,10 @@ public:
   // loading
   CArchive& operator>>(float& f);
   CArchive& operator>>(double& d);
-  CArchive& operator>>(short int& i);
-  CArchive& operator>>(unsigned short int& i);
+  CArchive& operator>>(short int& s);
+  CArchive& operator>>(unsigned short int& us);
   CArchive& operator>>(int& i);
-  CArchive& operator>>(unsigned int& i);
+  CArchive& operator>>(unsigned int& ui);
   CArchive& operator>>(long int& l);
   CArchive& operator>>(unsigned long int& ul);
   CArchive& operator>>(long long int& ll);
index f47ab62..f3f275f 100644 (file)
@@ -685,8 +685,16 @@ bool CCPUInfo::readProcStat(unsigned long long& user, unsigned long long& nice,
   if (m_fProcStat == NULL)
     return false;
 
+#ifdef TARGET_ANDROID
+  // Just another (vanilla) NDK quirk:
+  // rewind + fflush do not actually flush the buffers,
+  // the same initial content is returned rather than re-read
+  fclose(m_fProcStat);
+  m_fProcStat = fopen("/proc/stat", "r");
+#else
   rewind(m_fProcStat);
   fflush(m_fProcStat);
+#endif
 
   char buf[256];
   if (!fgets(buf, sizeof(buf), m_fProcStat))
index 0d43c56..66b3304 100644 (file)
@@ -271,7 +271,7 @@ enum StdConversionType /* Keep it in sync with CCharsetConverter::CInnerConverte
   Utf32ToUtf8,
   Utf32ToW,
   WToUtf32,
-  SubtitleCharsetToW,
+  SubtitleCharsetToUtf8,
   Utf8ToUserCharset,
   UserCharsetToUtf8,
   Utf32ToUserCharset,
@@ -281,6 +281,7 @@ enum StdConversionType /* Keep it in sync with CCharsetConverter::CInnerConverte
   Utf16LEtoUtf8,
   Utf8toW,
   Utf8ToSystem,
+  SystemToUtf8,
   Ucs2CharsetToUtf8,
   NumberOfStdConversionTypes /* Dummy sentinel entry */
 };
@@ -315,7 +316,7 @@ CConverterType CCharsetConverter::CInnerConverter::m_stdConversion[NumberOfStdCo
   /* Utf32ToUtf8 */         CConverterType(UTF32_CHARSET,   "UTF-8", CCharsetConverter::m_Utf8CharMaxSize),
   /* Utf32ToW */            CConverterType(UTF32_CHARSET,   WCHAR_CHARSET),
   /* WToUtf32 */            CConverterType(WCHAR_CHARSET,   UTF32_CHARSET),
-  /* SubtitleCharsetToW */  CConverterType(SubtitleCharset, WCHAR_CHARSET),
+  /* SubtitleCharsetToUtf8*/CConverterType(SubtitleCharset, "UTF-8", CCharsetConverter::m_Utf8CharMaxSize),
   /* Utf8ToUserCharset */   CConverterType(UTF8_SOURCE,     UserCharset),
   /* UserCharsetToUtf8 */   CConverterType(UserCharset,     "UTF-8", CCharsetConverter::m_Utf8CharMaxSize),
   /* Utf32ToUserCharset */  CConverterType(UTF32_CHARSET,   UserCharset),
@@ -325,6 +326,7 @@ CConverterType CCharsetConverter::CInnerConverter::m_stdConversion[NumberOfStdCo
   /* Utf16LEtoUtf8 */       CConverterType("UTF-16LE",      "UTF-8", CCharsetConverter::m_Utf8CharMaxSize),
   /* Utf8toW */             CConverterType(UTF8_SOURCE,     WCHAR_CHARSET),
   /* Utf8ToSystem */        CConverterType(UTF8_SOURCE,     SystemCharset),
+  /* SystemToUtf8 */        CConverterType(SystemCharset,   UTF8_SOURCE),
   /* Ucs2CharsetToUtf8 */   CConverterType("UCS-2LE",       "UTF-8", CCharsetConverter::m_Utf8CharMaxSize)
 };
 
@@ -641,6 +643,7 @@ void CCharsetConverter::reset(void)
 void CCharsetConverter::resetSystemCharset(void)
 {
   CInnerConverter::m_stdConversion[Utf8ToSystem].Reset();
+  CInnerConverter::m_stdConversion[SystemToUtf8].Reset();
 }
 
 void CCharsetConverter::resetUserCharset(void)
@@ -654,7 +657,7 @@ void CCharsetConverter::resetUserCharset(void)
 
 void CCharsetConverter::resetSubtitleCharset(void)
 {
-  CInnerConverter::m_stdConversion[SubtitleCharsetToW].Reset();
+  CInnerConverter::m_stdConversion[SubtitleCharsetToUtf8].Reset();
 }
 
 void CCharsetConverter::resetKaraokeCharset(void)
@@ -749,9 +752,9 @@ bool CCharsetConverter::utf8ToW(const std::string& utf8StringSrc, std::wstring&
   return CInnerConverter::stdConvert(Utf8toW, utf8StringSrc, wStringDst, failOnBadChar);
 }
 
-bool CCharsetConverter::subtitleCharsetToW(const std::string& stringSrc, std::wstring& wStringDst)
+bool CCharsetConverter::subtitleCharsetToUtf8(const std::string& stringSrc, std::string& utf8StringDst)
 {
-  return CInnerConverter::stdConvert(SubtitleCharsetToW, stringSrc, wStringDst, false);
+  return CInnerConverter::stdConvert(SubtitleCharsetToUtf8, stringSrc, utf8StringDst, false);
 }
 
 bool CCharsetConverter::fromW(const std::wstring& wStringSrc,
@@ -777,7 +780,7 @@ bool CCharsetConverter::utf8ToStringCharset(std::string& stringSrcDst)
   return utf8ToStringCharset(strSrc, stringSrcDst);
 }
 
-bool CCharsetConverter::ToUtf8(const std::string& strSourceCharset, const std::string& stringSrc, std::string& utf8StringDst)
+bool CCharsetConverter::ToUtf8(const std::string& strSourceCharset, const std::string& stringSrc, std::string& utf8StringDst, bool failOnBadChar /*= false*/)
 {
   if (strSourceCharset == "UTF-8")
   { // simple case - no conversion necessary
@@ -785,7 +788,7 @@ bool CCharsetConverter::ToUtf8(const std::string& strSourceCharset, const std::s
     return true;
   }
   
-  return CInnerConverter::customConvert(strSourceCharset, "UTF-8", stringSrc, utf8StringDst);
+  return CInnerConverter::customConvert(strSourceCharset, "UTF-8", stringSrc, utf8StringDst, failOnBadChar);
 }
 
 bool CCharsetConverter::utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::string& stringDst)
@@ -863,6 +866,11 @@ bool CCharsetConverter::utf8ToSystem(std::string& stringSrcDst, bool failOnBadCh
   return CInnerConverter::stdConvert(Utf8ToSystem, strSrc, stringSrcDst, failOnBadChar);
 }
 
+bool CCharsetConverter::systemToUtf8(const std::string& sysStringSrc, std::string& utf8StringDst, bool failOnBadChar /*= false*/)
+{
+  return CInnerConverter::stdConvert(SystemToUtf8, sysStringSrc, utf8StringDst, failOnBadChar);
+}
+
 bool CCharsetConverter::utf8logicalToVisualBiDi(const std::string& utf8StringSrc, std::string& utf8StringDst, bool failOnBadString /*= false*/)
 {
   utf8StringDst.clear();
index 6de9e69..89004e1 100644 (file)
@@ -131,18 +131,19 @@ public:
 
   static bool utf16LEtoW(const std::u16string& utf16String, std::wstring& wString);
 
-  static bool subtitleCharsetToW(const std::string& stringSrc, std::wstring& wStringDst);
+  static bool subtitleCharsetToUtf8(const std::string& stringSrc, std::string& utf8StringDst);
 
   static bool utf8ToStringCharset(const std::string& utf8StringSrc, std::string& stringDst);
 
   static bool utf8ToStringCharset(std::string& stringSrcDst);
   static bool utf8ToSystem(std::string& stringSrcDst, bool failOnBadChar = false);
+  static bool systemToUtf8(const std::string& sysStringSrc, std::string& utf8StringDst, bool failOnBadChar = false);
 
   static bool utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::string& stringDst);
   static bool utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::u16string& utf16StringDst);
   static bool utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::u32string& utf32StringDst);
 
-  static bool ToUtf8(const std::string& strSourceCharset, const std::string& stringSrc, std::string& utf8StringDst);
+  static bool ToUtf8(const std::string& strSourceCharset, const std::string& stringSrc, std::string& utf8StringDst, bool failOnBadChar = false);
 
   static bool wToUTF8(const std::wstring& wStringSrc, std::string& utf8StringDst, bool failOnBadChar = false);
   static bool utf16BEtoUTF8(const std::u16string& utf16StringSrc, std::string& utf8StringDst);
index 693e5bb..810b01f 100644 (file)
 #include "CharsetDetection.h"
 #include "utils/CharsetConverter.h"
 #include "utils/StringUtils.h"
+#include "utils/Utf8Utils.h"
+#include "LangInfo.h"
+#include "utils/log.h"
 
 /* XML declaration can be virtually any size (with many-many whitespaces) 
  * but for in real world we don't need to process megabytes of data
  * so limit search for XML declaration to reasonable value */
 const size_t CCharsetDetection::m_XmlDeclarationMaxLength = 250;
 
+/* According to http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#charset
+ * encoding must be placed in first 1024 bytes of document */
+const size_t CCharsetDetection::m_HtmlCharsetEndSearchPos = 1024;
+
+/* According to http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#space-character
+ * tab, LF, FF, CR or space can be used as whitespace */
+const std::string CCharsetDetection::m_HtmlWhitespaceChars("\x09\x0A\x0C\x0D\x20");    // tab, LF, FF, CR and space
 
 std::string CCharsetDetection::GetBomEncoding(const char* const content, const size_t contentLength)
 {
@@ -264,3 +274,376 @@ bool CCharsetDetection::GuessXmlEncoding(const char* const xmlContent, const siz
   return true;
 }
 
+bool CCharsetDetection::ConvertHtmlToUtf8(const std::string& htmlContent, std::string& converted, const std::string& serverReportedCharset, std::string& usedHtmlCharset)
+{
+  converted.clear();
+  usedHtmlCharset.clear();
+  if (htmlContent.empty())
+  {
+    usedHtmlCharset = "UTF-8"; // any charset can be used for empty content, use UTF-8 as default
+    return false;
+  }
+  
+  // this is relaxed implementation of http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#determining-the-character-encoding
+
+  // try to get charset from Byte Order Mark
+  std::string bomCharset(GetBomEncoding(htmlContent));
+  if (checkConversion(bomCharset, htmlContent, converted))
+  {
+    usedHtmlCharset = bomCharset;
+    return true;
+  }
+
+  // try charset from HTTP header (or from other out-of-band source)
+  if (checkConversion(serverReportedCharset, htmlContent, converted))
+  {
+    usedHtmlCharset = serverReportedCharset;
+    return true;
+  }
+
+  // try to find charset in HTML
+  std::string declaredCharset(GetHtmlEncodingFromHead(htmlContent));
+  if (!declaredCharset.empty())
+  {
+    if (declaredCharset.compare(0, 3, "UTF", 3) == 0)
+      declaredCharset = "UTF-8"; // charset string was found in singlebyte mode, charset can't be multibyte encoding
+    if (checkConversion(declaredCharset, htmlContent, converted))
+    {
+      usedHtmlCharset = declaredCharset;
+      return true;
+    }
+  }
+
+  // try UTF-8 if not tried before
+  if (bomCharset != "UTF-8" && serverReportedCharset != "UTF-8" && declaredCharset != "UTF-8" && checkConversion("UTF-8", htmlContent, converted))
+  {
+    usedHtmlCharset = "UTF-8";
+    return false; // only guessed value
+  }
+
+  // try user charset
+  std::string userCharset(g_langInfo.GetGuiCharSet());
+  if (checkConversion(userCharset, htmlContent, converted))
+  {
+    usedHtmlCharset = userCharset;
+    return false; // only guessed value
+  }
+
+  // try WINDOWS-1252
+  if (checkConversion("WINDOWS-1252", htmlContent, converted))
+  {
+    usedHtmlCharset = "WINDOWS-1252";
+    return false; // only guessed value
+  }
+
+  // can't find exact charset
+  // use one of detected as fallback
+  if (!bomCharset.empty())
+    usedHtmlCharset = bomCharset;
+  else if (!serverReportedCharset.empty())
+    usedHtmlCharset = serverReportedCharset;
+  else if (!declaredCharset.empty())
+    usedHtmlCharset = declaredCharset;
+  else if (!userCharset.empty())
+    usedHtmlCharset = userCharset;
+  else
+    usedHtmlCharset = "WINDOWS-1252";
+
+  CLog::Log(LOGWARNING, "%s: Can't correctly convert to UTF-8 charset, converting as \"%s\"", __FUNCTION__, usedHtmlCharset.c_str());
+  g_charsetConverter.ToUtf8(usedHtmlCharset, htmlContent, converted, false);
+
+  return false;
+}
+
+bool CCharsetDetection::ConvertPlainTextToUtf8(const std::string& textContent, std::string& converted, const std::string& serverReportedCharset, std::string& usedCharset)
+{
+  converted.clear();
+  usedCharset.clear();
+  if (textContent.empty())
+  {
+    usedCharset = "UTF-8"; // any charset can be used for empty content, use UTF-8 as default
+    return true;
+  }
+
+  // try to get charset from Byte Order Mark
+  std::string bomCharset(GetBomEncoding(textContent));
+  if (checkConversion(bomCharset, textContent, converted))
+  {
+    usedCharset = bomCharset;
+    return true;
+  }
+
+  // try charset from HTTP header (or from other out-of-band source)
+  if (checkConversion(serverReportedCharset, textContent, converted))
+  {
+    usedCharset = serverReportedCharset;
+    return true;
+  }
+
+  // try UTF-8 if not tried before
+  if (bomCharset != "UTF-8" && serverReportedCharset != "UTF-8" && checkConversion("UTF-8", textContent, converted))
+  {
+    usedCharset = "UTF-8";
+    return true;
+  }
+
+  // try user charset
+  std::string userCharset(g_langInfo.GetGuiCharSet());
+  if (checkConversion(userCharset, textContent, converted))
+  {
+    usedCharset = userCharset;
+    return true;
+  }
+
+  // try system default charset
+  if (g_charsetConverter.systemToUtf8(textContent, converted, true))
+  {
+    usedCharset = "char"; // synonym to system charset
+    return true;
+  }
+
+  // try WINDOWS-1252
+  if (checkConversion("WINDOWS-1252", textContent, converted))
+  {
+    usedCharset = "WINDOWS-1252";
+    return true;
+  }
+
+  // can't find correct charset
+  // use one of detected as fallback
+  if (!serverReportedCharset.empty())
+    usedCharset = serverReportedCharset;
+  else if (!bomCharset.empty())
+    usedCharset = bomCharset;
+  else if (!userCharset.empty())
+    usedCharset = userCharset;
+  else
+    usedCharset = "WINDOWS-1252";
+
+  CLog::Log(LOGWARNING, "%s: Can't correctly convert to UTF-8 charset, converting as \"%s\"", __FUNCTION__, usedCharset.c_str());
+  g_charsetConverter.ToUtf8(usedCharset, textContent, converted, false);
+
+  return false;
+}
+
+
+bool CCharsetDetection::checkConversion(const std::string& srcCharset, const std::string& src, std::string& dst)
+{
+  if (srcCharset.empty())
+    return false;
+
+  if (srcCharset != "UTF-8")
+  {
+    if (g_charsetConverter.ToUtf8(srcCharset, src, dst, true))
+      return true;
+  }
+  else if (CUtf8Utils::isValidUtf8(src))
+  {
+    dst = src;
+    return true;
+  }
+
+  return false;
+}
+
+std::string CCharsetDetection::GetHtmlEncodingFromHead(const std::string& htmlContent)
+{
+  std::string smallerHtmlContent;
+  if (htmlContent.length() > 2 * m_HtmlCharsetEndSearchPos)
+    smallerHtmlContent.assign(htmlContent, 0, 2 * m_HtmlCharsetEndSearchPos); // use twice more bytes to search for charset for safety
+
+  const std::string& html = smallerHtmlContent.empty() ? htmlContent : smallerHtmlContent; // limit search
+  const char* const htmlC = html.c_str(); // for null-termination
+  const size_t len = html.length();
+
+  // this is an implementation of http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#prescan-a-byte-stream-to-determine-its-encoding
+  // labels in comments correspond to the labels in HTML5 standard
+  // note: opposite to standard, everything is converted to uppercase instead of lower case
+  size_t pos = 0;
+  while (pos < len) // "loop" label
+  {
+    if (html.compare(pos, 4, "<!--", 4) == 0)
+    {
+      pos = html.find("-->", pos + 2);
+      if (pos == std::string::npos)
+        return "";
+      pos += 2;
+    }
+    else if (htmlC[pos] == '<' && (htmlC[pos + 1] == 'm' || htmlC[pos + 1] == 'M') && (htmlC[pos + 2] == 'e' || htmlC[pos + 2] == 'E')
+             && (htmlC[pos + 3] == 't' || htmlC[pos + 3] == 'T') && (htmlC[pos + 4] == 'a' || htmlC[pos + 4] == 'A')
+             && (htmlC[pos + 5] == 0x09 || htmlC[pos + 5] == 0x0A || htmlC[pos + 5] == 0x0C || htmlC[pos + 5] == 0x0D || htmlC[pos + 5] == 0x20 || htmlC[pos + 5] == 0x2F))
+    { // this is case insensitive "<meta" and one of tab, LF, FF, CR, space or slash
+      pos += 5; // "pos" points to symbol after "<meta"
+      std::string attrName, attrValue;
+      bool gotPragma = false;
+      std::string contentCharset;
+      do // "attributes" label
+      {
+        pos = GetHtmlAttribute(html, pos, attrName, attrValue);
+        if (attrName == "HTTP-EQUIV" && attrValue == "CONTENT-TYPE")
+          gotPragma = true;
+        else if (attrName == "CONTENT")
+          contentCharset = ExtractEncodingFromHtmlMeta(attrValue);
+        else if (attrName == "CHARSET")
+        {
+          StringUtils::Trim(attrValue, m_HtmlWhitespaceChars.c_str()); // tab, LF, FF, CR, space
+          if (!attrValue.empty())
+            return attrValue;
+        }
+      } while (!attrName.empty() && pos < len);
+
+      // "processing" label
+      if (gotPragma && !contentCharset.empty())
+        return contentCharset;
+    }
+    else if (htmlC[pos] == '<' && ((htmlC[pos + 1] >= 'A' && htmlC[pos + 1] <= 'Z') || (htmlC[pos + 1] >= 'a' && htmlC[pos + 1] <= 'z')))
+    {
+      pos = html.find_first_of("\x09\x0A\x0C\x0D >", pos); // tab, LF, FF, CR, space or '>'
+      std::string attrName, attrValue;
+      do
+      {
+        pos = GetHtmlAttribute(html, pos, attrName, attrValue);
+      } while (pos < len && !attrName.empty());
+    }
+    else if (html.compare(pos, 2, "<!", 2) == 0 || html.compare(pos, 2, "</", 2) == 0 || html.compare(pos, 2, "<?", 2) == 0)
+      pos = html.find('>', pos);
+
+    if (pos == std::string::npos)
+      return "";
+  
+    // "next byte" label
+    pos++;
+  }
+
+  return ""; // no charset was found
+}
+
+size_t CCharsetDetection::GetHtmlAttribute(const std::string& htmlContent, size_t pos, std::string& attrName, std::string& attrValue)
+{
+  attrName.clear();
+  attrValue.clear();
+  static const char* const htmlWhitespaceSlash = "\x09\x0A\x0C\x0D\x20\x2F"; // tab, LF, FF, CR, space or slash
+  const char* const htmlC = htmlContent.c_str();
+  const size_t len = htmlContent.length();
+
+  // this is an implementation of http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#concept-get-attributes-when-sniffing
+  // labels in comments correspond to the labels in HTML5 standard
+  // note: opposite to standard, everything is converted to uppercase instead of lower case
+  pos = htmlContent.find_first_not_of(htmlWhitespaceSlash, pos);
+  if (pos == std::string::npos || htmlC[pos] == '>')
+    return pos; // only white spaces or slashes up to the end of the htmlContent or no more attributes
+
+  while (pos < len && htmlC[pos] != '=')
+  {
+    const char chr = htmlC[pos];
+    if (chr == '/' || chr == '>')
+      return pos; // no attributes or empty attribute value
+    else if (m_HtmlWhitespaceChars.find(chr) != std::string::npos) // chr is one of whitespaces
+    {
+      pos = htmlContent.find_first_not_of(m_HtmlWhitespaceChars, pos); // "spaces" label
+      if (pos == std::string::npos || htmlC[pos] != '=')
+        return pos; // only white spaces up to the end or no attribute value
+      break;
+    }
+    else
+      appendCharAsAsciiUpperCase(attrName, chr);
+
+    pos++;
+  }
+
+  if (pos >= len)
+    return std::string::npos; // no '=', '/' or '>' were found up to the end of htmlContent
+
+  pos++; // advance pos to character after '='
+
+  pos = htmlContent.find_first_not_of(m_HtmlWhitespaceChars, pos); // "value" label
+  if (pos == std::string::npos)
+    return pos; // only white spaces remain in htmlContent
+
+  if (htmlC[pos] == '>')
+    return pos; // empty attribute value
+  else if (htmlC[pos] == '"' || htmlC[pos] == '\'')
+  {
+    const char qChr = htmlC[pos];
+    // "quote loop" label
+    while (++pos < len)
+    {
+      const char chr = htmlC[pos];
+      if (chr == qChr)
+        return pos + 1;
+      else
+        appendCharAsAsciiUpperCase(attrValue, chr);
+    }
+    return std::string::npos; // no closing quote is found
+  }
+   
+  appendCharAsAsciiUpperCase(attrValue, htmlC[pos]);
+  pos++;
+
+  while (pos < len)
+  {
+    const char chr = htmlC[pos];
+    if (m_HtmlWhitespaceChars.find(chr) != std::string::npos || chr == '>')
+      return pos;
+    else
+      appendCharAsAsciiUpperCase(attrValue, chr);
+
+    pos++;
+  }
+
+  return std::string::npos; // rest of htmlContent was attribute value
+}
+
+std::string CCharsetDetection::ExtractEncodingFromHtmlMeta(std::string metaContent, size_t pos /*= 0*/)
+{
+  size_t len = metaContent.length();
+  if (pos >= len)
+    return "";
+
+  const char* const metaContentC = metaContent.c_str();
+
+  // this is an implementation of http://www.w3.org/TR/2013/CR-html5-20130806/single-page.html#algorithm-for-extracting-a-character-encoding-from-a-meta-element
+  // labels in comments correspond to the labels in HTML5 standard
+  // note: opposite to standard, case sensitive match is used as argument is always in uppercase
+  std::string charset;
+  do
+  {
+    // "loop" label
+    pos = metaContent.find("CHARSET", pos);
+    if (pos == std::string::npos)
+      return "";
+
+    pos = metaContent.find_first_not_of(m_HtmlWhitespaceChars, pos + 7); // '7' is the length of 'CHARSET'
+    if (pos != std::string::npos && metaContentC[pos] == '=')
+    {
+      pos = metaContent.find_first_not_of(m_HtmlWhitespaceChars, pos + 1);
+      if (pos != std::string::npos)
+      {
+        if (metaContentC[pos] == '\'' || metaContentC[pos] == '"')
+        {
+          const char qChr = metaContentC[pos];
+          pos++;
+          const size_t closeQpos = metaContent.find(qChr, pos);
+          if (closeQpos != std::string::npos)
+            charset.assign(metaContent, pos, closeQpos - pos);
+        }
+        else
+          charset.assign(metaContent, pos, metaContent.find("\x09\x0A\x0C\x0D ;", pos) - pos); // assign content up to the next tab, LF, FF, CR, space, semicolon or end of string
+      }
+      break;
+    }
+  } while (pos < len);
+
+  static const char* const htmlWhitespaceCharsC = m_HtmlWhitespaceChars.c_str();
+  StringUtils::Trim(charset, htmlWhitespaceCharsC);
+
+  return charset;
+}
+
+inline void CCharsetDetection::appendCharAsAsciiUpperCase(std::string& str, const char chr)
+{
+  if (chr >= 'a' && chr <= 'z')
+    str.push_back(chr - ('a' - 'A')); // convert to upper case
+  else
+    str.push_back(chr);
+}
index 6e6f47b..171b460 100644 (file)
@@ -48,6 +48,38 @@ public:
 
   static bool DetectXmlEncoding(const char* const xmlContent, const size_t contentLength, std::string& detectedEncoding);
 
+  /**
+   * Detect HTML charset and HTML convert to UTF-8
+   * @param htmlContent content of HTML file
+   * @param converted   receive result of conversion
+   * @param serverReportedCharset charset from HTTP header or from other out-of-band source, empty if unknown or unset
+   * @return true if charset is properly detected and HTML is correctly converted, false if charset is only guessed
+   */
+  static inline bool ConvertHtmlToUtf8(const std::string& htmlContent, std::string& converted, const std::string& serverReportedCharset = "")
+  { 
+    std::string usedHtmlCharset;
+    return ConvertHtmlToUtf8(htmlContent, converted, serverReportedCharset, usedHtmlCharset);
+  }
+  /**
+   * Detect HTML charset and HTML convert to UTF-8
+   * @param htmlContent content of HTML file
+   * @param converted   receive result of conversion
+   * @param serverReportedCharset charset from HTTP header or from other out-of-band source, empty if unknown or unset
+   * @param usedHtmlCharset       receive charset used for conversion
+   * @return true if charset is properly detected and HTML is correctly converted, false if charset is only guessed
+   */
+  static bool ConvertHtmlToUtf8(const std::string& htmlContent, std::string& converted, const std::string& serverReportedCharset, std::string& usedHtmlCharset);
+
+  /**
+  * Try to convert plain text to UTF-8 using best suitable charset
+  * @param textContent text to convert
+  * @param converted   receive result of conversion
+  * @param serverReportedCharset charset from HTTP header or from other out-of-band source, empty if unknown or unset
+  * @param usedCharset       receive charset used for conversion
+  * @return true if converted without errors, false otherwise
+  */
+  static bool ConvertPlainTextToUtf8(const std::string& textContent, std::string& converted, const std::string& serverReportedCharset, std::string& usedCharset);
+
 private:
   static bool GetXmlEncodingFromDeclaration(const char* const xmlContent, const size_t contentLength, std::string& declaredEncoding);
   /**
@@ -60,5 +92,15 @@ private:
    */
   static bool GuessXmlEncoding(const char* const xmlContent, const size_t contentLength, std::string& supposedEncoding);
 
+  static std::string GetHtmlEncodingFromHead(const std::string& htmlContent);
+  static size_t GetHtmlAttribute(const std::string& htmlContent, size_t pos, std::string& atrName, std::string& strValue);
+  static std::string ExtractEncodingFromHtmlMeta(std::string metaContent, size_t pos = 0);
+
+  static bool checkConversion(const std::string& srcCharset, const std::string& src, std::string& dst);
+  static void appendCharAsAsciiUpperCase(std::string& str, const char chr);
+
   static const size_t m_XmlDeclarationMaxLength;
+  static const size_t m_HtmlCharsetEndSearchPos;
+
+  static const std::string m_HtmlWhitespaceChars;
 };
index 901eba9..b1f0612 100644 (file)
@@ -158,11 +158,6 @@ bool CFileOperationJob::DoProcess(FileAction action, CFileItemList & items, cons
       URIUtils::RemoveSlashAtEnd(strNoSlash);
       CStdString strFileName = URIUtils::GetFileName(strNoSlash);
 
-      // URL Decode for cases where source uses URL encoding and target does not 
-      if ( URIUtils::ProtocolHasEncodedFilename(CURL(pItem->GetPath()).GetProtocol() )
-       && !URIUtils::ProtocolHasEncodedFilename(CURL(strDestFile).GetProtocol() ) )
-        CURL::Decode(strFileName);
-
       // special case for upnp
       if (URIUtils::IsUPnP(items.GetPath()) || URIUtils::IsUPnP(pItem->GetPath()))
       {
@@ -181,7 +176,7 @@ bool CFileOperationJob::DoProcess(FileAction action, CFileItemList & items, cons
 
       CStdString strnewDestFile;
       if(!strDestFile.empty()) // only do this if we have a destination
-        strnewDestFile = URIUtils::AddFileToFolder(strDestFile, strFileName);
+        strnewDestFile = URIUtils::ChangeBasePath(pItem->GetPath(), strFileName, strDestFile); // Convert (URL) encoding + slashes (if source / target differ)
 
       if (pItem->m_bIsFolder)
       {
index f2084c3..f3a528e 100644 (file)
@@ -132,6 +132,10 @@ bool CFileUtils::RemoteAccessAllowed(const CStdString &strPath)
     return true;
   else if (StringUtils::StartsWithNoCase(realPath, "special://videoplaylists"))
     return true;
+  else if (StringUtils::StartsWithNoCase(realPath, "special://skin"))
+    return true;
+  else if (StringUtils::StartsWithNoCase(realPath, "special://profile/addon_data"))
+    return true;
   else if (StringUtils::StartsWithNoCase(realPath, "addons://sources"))
     return true;
   else if (StringUtils::StartsWithNoCase(realPath, "upnp://"))
@@ -160,4 +164,3 @@ unsigned int CFileUtils::LoadFile(const std::string &filename, void* &outputBuff
 
   return total_read;
 }
-
index 7a9d504..cee1371 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+#include <string>
 #include "FileItem.h"
 
 class CFileUtils
index c9dade3..e9d80b8 100644 (file)
 #include "HttpHeader.h"
 #include "utils/StringUtils.h"
 
+// header white space characters according to RFC 2616
+const char* const CHttpHeader::m_whitespaceChars = " \t";
+
+
 CHttpHeader::CHttpHeader()
 {
   m_headerdone = false;
@@ -32,42 +36,68 @@ CHttpHeader::~CHttpHeader()
 
 void CHttpHeader::Parse(const std::string& strData)
 {
-  if (m_headerdone)
-    Clear();
-
   size_t pos = 0;
   const size_t len = strData.length();
+  const char* const strDataC = strData.c_str();
+
+  // According to RFC 2616 any header line can have continuation on next line, if next line is started from whitespace char
+  // This code at first checks for whitespace char at the begging of the line, and if found, then current line is appended to m_lastHeaderLine
+  // If current line is NOT started from whitespace char, then previously stored (and completed) m_lastHeaderLine is parsed and current line is assigned to m_lastHeaderLine (to be parsed later)
   while (pos < len)
   {
-    const size_t valueStart = strData.find(':', pos);
-    const size_t lineEnd = strData.find("\r\n", pos);
+    const size_t lineEnd = strData.find("\x0d\x0a", pos); // use "\x0d\x0a" instead of "\r\n" to be platform independent
 
     if (lineEnd == std::string::npos)
-      break;
+      return; // error: expected only complete lines
 
-    if (lineEnd == pos)
-    {
-      m_headerdone = true;
-      break;
-    }
-    else if (valueStart != std::string::npos && valueStart < lineEnd)
-    {
-      std::string strParam(strData, pos, valueStart - pos);
-      std::string strValue(strData, valueStart + 1, lineEnd - valueStart - 1);
+    if (m_headerdone)
+      Clear(); // clear previous header and process new one
 
-      StringUtils::Trim(strParam);
-      StringUtils::ToLower(strParam);
+    if (strDataC[pos] == ' ' || strDataC[pos] == '\t') // same chars as in CHttpHeader::m_whitespaceChars
+    { // line is started from whitespace char: this is continuation of previous line
+      pos = strData.find_first_not_of(m_whitespaceChars);
 
-      StringUtils::Trim(strValue);
+      m_lastHeaderLine.push_back(' '); // replace all whitespace chars at start of the line with single space
+      m_lastHeaderLine.append(strData, pos, lineEnd - pos); // append current line
+    }
+    else
+    { // this line is NOT continuation, this line is new header line
+      if (!m_lastHeaderLine.empty())
+        ParseLine(m_lastHeaderLine); // process previously stored completed line (if any)
 
-      if (!strParam.empty() && !strValue.empty())
-        m_params.push_back(HeaderParams::value_type(strParam, strValue));
+      m_lastHeaderLine.assign(strData, pos, lineEnd - pos); // store current line to (possibly) complete later. Will be parsed on next turns.
+
+      if (pos == lineEnd)
+        m_headerdone = true; // current line is bare "\r\n", means end of header; no need to process current m_lastHeaderLine
     }
-    else if (m_protoLine.empty())
-      m_protoLine.assign(strData, pos, lineEnd - pos);
 
-    pos = lineEnd + 2;
+    pos = lineEnd + 2; // '+2' for "\r\n": go to next line (if any)
+  }
+}
+
+bool CHttpHeader::ParseLine(const std::string& headerLine)
+{
+  const size_t valueStart = headerLine.find(':');
+
+  if (valueStart != std::string::npos)
+  {
+    std::string strParam(headerLine, 0, valueStart);
+    std::string strValue(headerLine, valueStart + 1);
+
+    StringUtils::Trim(strParam, m_whitespaceChars);
+    StringUtils::ToLower(strParam);
+
+    StringUtils::Trim(strValue, m_whitespaceChars);
+
+    if (!strParam.empty() && !strValue.empty())
+      m_params.push_back(HeaderParams::value_type(strParam, strValue));
+    else
+      return false;
   }
+  else if (m_protoLine.empty())
+    m_protoLine = headerLine;
+
+  return true;
 }
 
 void CHttpHeader::AddParam(const std::string& param, const std::string& value, const bool overwrite /*= false*/)
@@ -143,7 +173,10 @@ std::string CHttpHeader::GetMimeType(void) const
 {
   std::string strValue(GetValueRaw("content-type"));
 
-  return strValue.substr(0, strValue.find(';'));
+  std::string mimeType(strValue, 0, strValue.find(';'));
+  StringUtils::TrimRight(mimeType, m_whitespaceChars);
+
+  return mimeType;
 }
 
 std::string CHttpHeader::GetCharset(void) const
@@ -152,20 +185,47 @@ std::string CHttpHeader::GetCharset(void) const
   if (strValue.empty())
     return strValue;
 
-  const size_t semicolonPos = strValue.find(';');
-  if (semicolonPos == std::string::npos)
-    return "";
-
   StringUtils::ToUpper(strValue);
-  size_t posCharset;
-  if ((posCharset = strValue.find("; CHARSET=", semicolonPos)) != std::string::npos)
-    posCharset += 10;
-  else if ((posCharset = strValue.find(";CHARSET=", semicolonPos)) != std::string::npos)
-    posCharset += 9;
-  else
-    return "";
-
-  return strValue.substr(posCharset, strValue.find(';', posCharset) - posCharset);
+  const size_t len = strValue.length();
+
+  // extract charset value from 'contenttype/contentsubtype;pram1=param1Val ; charset=XXXX\t;param2=param2Val'
+  // most common form: 'text/html; charset=XXXX'
+  // charset value can be in double quotes: 'text/xml; charset="XXX XX"'
+
+  size_t pos = strValue.find(';');
+  while (pos < len)
+  {
+    // move to the next non-whitespace character
+    pos = strValue.find_first_not_of(m_whitespaceChars, pos + 1);
+
+    if (pos != std::string::npos)
+    {
+      if (strValue.compare(pos, 8, "CHARSET=", 8) == 0)
+      {
+        pos += 8; // move position to char after 'CHARSET='
+        std::string charset(strValue, pos, strValue.find(';', pos));  // intentionally ignoring possible ';' inside quoted string
+                                                                      // as we don't support any charset with ';' in name
+        StringUtils::Trim(charset, m_whitespaceChars);
+        if (!charset.empty())
+        {
+          if (charset[0] != '"')
+            return charset;
+          else
+          { // charset contains quoted string (allowed according to RFC 2616)
+            StringUtils::Replace(charset, "\\", ""); // unescape chars, ignoring possible '\"' and '\\'
+            const size_t closingQ = charset.find('"', 1);
+            if (closingQ == std::string::npos)
+              return ""; // no closing quote
+
+            return charset.substr(1, closingQ - 1);
+          }
+        }
+      }
+      pos = strValue.find(';', pos); // find next parameter
+    }
+  }
+
+  return ""; // no charset is detected
 }
 
 void CHttpHeader::Clear()
@@ -173,4 +233,5 @@ void CHttpHeader::Clear()
   m_params.clear();
   m_protoLine.clear();
   m_headerdone = false;
+  m_lastHeaderLine.clear();
 }
index 5e1b6b9..3887524 100644 (file)
@@ -54,9 +54,12 @@ public:
 
 protected:
   std::string GetValueRaw(const std::string& strParam) const;
+  bool ParseLine(const std::string& headerLine);
 
   HeaderParams m_params;
   std::string   m_protoLine;
   bool m_headerdone;
+  std::string m_lastHeaderLine;
+  static const char* const m_whitespaceChars;
 };
 
index d17cba6..9d741c2 100644 (file)
@@ -103,7 +103,7 @@ unsigned int CHttpResponse::Create(char *&response)
     m_buffer.append(HEADER_CONTENT_LENGTH);
     m_buffer.append(SEPARATOR);
     char lengthBuffer[11];
-    sprintf(lengthBuffer, "%d", m_contentLength);
+    sprintf(lengthBuffer, "%u", m_contentLength);
     m_buffer.append(lengthBuffer);
     m_buffer.append(LINEBREAK);
   }
index 4d5f92a..066fc21 100644 (file)
@@ -800,8 +800,8 @@ extern const LCENTRY g_iso639_2[538] =
   { MAKECODE('\0','c','p','p'), "Portuguese-based (Other)" },
   { MAKECODE('\0','c','r','h'), "Crimean Tatar" },
   { MAKECODE('\0','c','r','h'), "Crimean Turkish" },
-  { MAKECODE('\0','s','c','r'), "Croatian" },
   { MAKECODE('\0','h','r','v'), "Croatian" },
+  { MAKECODE('\0','s','c','r'), "Croatian" },
   { MAKECODE('\0','c','u','s'), "Cushitic (Other)" },
   { MAKECODE('\0','c','z','e'), "Czech" },
   { MAKECODE('\0','c','e','s'), "Czech" },
index 851358e..cd30819 100644 (file)
@@ -73,6 +73,7 @@ SRCS += Weather.cpp
 SRCS += XBMCTinyXML.cpp
 SRCS += XMLUtils.cpp
 SRCS += Utf8Utils.cpp
+SRCS += XSLTUtils.cpp
 SRCS += ActorProtocol.cpp 
 
 ifeq (@USE_OPENGLES@,1)
index a51b445..e47fe24 100644 (file)
@@ -26,6 +26,9 @@
 #include "URIUtils.h"
 #include "music/tags/MusicInfoTag.h"
 #include "video/VideoInfoTag.h"
+#include "URL.h"
+#include "utils/StringUtils.h"
+#include "filesystem/CurlFile.h"
 
 using namespace std;
 
@@ -535,3 +538,159 @@ string CMime::GetMimeType(const CFileItem &item)
 
   return GetMimeType(URIUtils::GetExtension(path));
 }
+
+string CMime::GetMimeType(const CURL &url, bool lookup)
+{
+  
+  std::string strMimeType;
+
+  if( url.GetProtocol() == "shout" || url.GetProtocol() == "http" || url.GetProtocol() == "https")
+  {
+    // If lookup is false, bail out early to leave mime type empty
+    if (!lookup)
+      return strMimeType;
+
+    CStdString strmime;
+    XFILE::CCurlFile::GetMimeType(url, strmime);
+
+    // try to get mime-type again but with an NSPlayer User-Agent
+    // in order for server to provide correct mime-type.  Allows us
+    // to properly detect an MMS stream
+    if (StringUtils::StartsWithNoCase(strmime, "video/x-ms-"))
+      XFILE::CCurlFile::GetMimeType(url, strmime, "NSPlayer/11.00.6001.7000");
+
+    // make sure there are no options set in mime-type
+    // mime-type can look like "video/x-ms-asf ; charset=utf8"
+    size_t i = strmime.find(';');
+    if(i != std::string::npos)
+      strmime.erase(i, strmime.length() - i);
+    StringUtils::Trim(strmime);
+    strMimeType = strmime;
+  }
+  else
+    strMimeType = GetMimeType(url.GetFileType());
+
+  // if it's still empty set to an unknown type
+  if (strMimeType.empty())
+    strMimeType = "application/octet-stream";
+
+  return strMimeType;
+}
+
+CMime::EFileType CMime::GetFileTypeFromMime(const std::string& mimeType)
+{
+  // based on http://mimesniff.spec.whatwg.org/
+
+  std::string type, subtype;
+  if (!parseMimeType(mimeType, type, subtype))
+    return FileTypeUnknown;
+
+  if (type == "application")
+  {
+    if (subtype == "zip")
+      return FileTypeZip;
+    if (subtype == "x-gzip")
+      return FileTypeGZip;
+    if (subtype == "x-rar-compressed")
+      return FileTypeRar;
+
+    if (subtype == "xml")
+      return FileTypeXml;
+  }
+  else if (type == "text")
+  {
+    if (subtype == "xml")
+      return FileTypeXml;
+    if (subtype == "html")
+      return FileTypeHtml;
+    if (subtype == "plain")
+      return FileTypePlainText;
+  }
+  else if (type == "image")
+  {
+    if (subtype == "bmp")
+      return FileTypeBmp;
+    if (subtype == "gif")
+      return FileTypeGif;
+    if (subtype == "png")
+      return FileTypePng;
+    if (subtype == "jpeg" || subtype == "pjpeg")
+      return FileTypeJpeg;
+  }
+
+  if (StringUtils::EndsWith(subtype, "+zip"))
+    return FileTypeZip;
+  if (StringUtils::EndsWith(subtype, "+xml"))
+    return FileTypeXml;
+
+  return FileTypeUnknown;
+}
+
+CMime::EFileType CMime::GetFileTypeFromContent(const std::string& fileContent)
+{
+  // based on http://mimesniff.spec.whatwg.org/#matching-a-mime-type-pattern
+
+  const size_t len = fileContent.length();
+  if (len < 2)
+    return FileTypeUnknown;
+
+  const unsigned char* const b = (const unsigned char*)fileContent.c_str();
+
+  // TODO: add detection for text types
+
+  // check image types
+  if (b[0] == 'B' && b[1] == 'M')
+    return FileTypeBmp;
+  if (len >= 6 && b[0] == 'G' && b[1] == 'I' && b[2] == 'F' && b[3] == '8' && (b[4] == '7' || b[4] == '9') && b[5] == 'a')
+    return FileTypeGif;
+  if (len >= 8 && b[0] == 0x89 && b[1] == 'P' && b[2] == 'N' && b[3] == 'G' && b[4] == 0x0D && b[5] == 0x0A && b[6] == 0x1A && b[7] == 0x0A)
+    return FileTypePng;
+  if (len >= 3 && b[0] == 0xFF && b[1] == 0xD8 && b[2] == 0xFF)
+    return FileTypeJpeg;
+
+  // check archive types
+  if (len >= 3 && b[0] == 0x1F && b[1] == 0x8B && b[2] == 0x08)
+    return FileTypeGZip;
+  if (len >= 4 && b[0] == 'P' && b[1] == 'K' && b[2] == 0x03 && b[3] == 0x04)
+    return FileTypeZip;
+  if (len >= 7 && b[0] == 'R' && b[1] == 'a' && b[2] == 'r' && b[3] == ' ' && b[4] == 0x1A && b[5] == 0x07 && b[6] == 0x00)
+    return FileTypeRar;
+
+  // TODO: add detection for other types if required
+
+  return FileTypeUnknown;
+}
+
+bool CMime::parseMimeType(const std::string& mimeType, std::string& type, std::string& subtype)
+{
+  static const char* const whitespaceChars = "\x09\x0A\x0C\x0D\x20"; // tab, LF, FF, CR and space
+
+  type.clear();
+  subtype.clear();
+
+  const size_t slashPos = mimeType.find('/');
+  if (slashPos == std::string::npos)
+    return false;
+
+  type.assign(mimeType, 0, slashPos);
+  subtype.assign(mimeType, slashPos + 1, std::string::npos);
+
+  const size_t semicolonPos = subtype.find(';');
+  if (semicolonPos != std::string::npos)
+    subtype.erase(semicolonPos);
+
+  StringUtils::Trim(type, whitespaceChars);
+  StringUtils::Trim(subtype, whitespaceChars);
+
+  if (type.empty() || subtype.empty())
+  {
+    type.clear();
+    subtype.clear();
+    return false;
+  }
+
+  StringUtils::ToLower(type);
+  StringUtils::ToLower(subtype);
+
+  return true;
+}
index 112ebbc..330b01f 100644 (file)
@@ -22,6 +22,8 @@
 #include <string>
 #include <map>
 
+class CURL;
+
 class CFileItem;
 
 class CMime
@@ -29,6 +31,25 @@ class CMime
 public:
   static std::string GetMimeType(const std::string &extension);
   static std::string GetMimeType(const CFileItem &item);
+  static std::string GetMimeType(const CURL &url, bool lookup = true);
+
+  enum EFileType
+  {
+    FileTypeUnknown = 0,
+    FileTypeHtml,
+    FileTypeXml,
+    FileTypePlainText,
+    FileTypeZip,
+    FileTypeGZip,
+    FileTypeRar,
+    FileTypeBmp,
+    FileTypeGif,
+    FileTypePng,
+    FileTypeJpeg,
+  };
+  static EFileType GetFileTypeFromMime(const std::string& mimeType);
+  static EFileType GetFileTypeFromContent(const std::string& fileContent);
+  static bool parseMimeType(const std::string& mimeType, std::string& type, std::string& subtype);
 
 private:
   static std::map<std::string, std::string> m_mimetypes;
index 291d86b..3ac032a 100644 (file)
@@ -40,6 +40,7 @@ typedef enum
   ObservableMessageTimersReset,
   ObservableMessageRecordings,
   ObservableMessagePeripheralsChanged,
+  ObservableMessageManagerStateChanged
 } ObservableMessage;
 
 class Observer
index 5afa971..ee2f462 100644 (file)
@@ -53,19 +53,20 @@ int CRegExp::m_UcpSupported  = -1;
 int CRegExp::m_JitSupported  = -1;
 
 
-CRegExp::CRegExp(bool caseless /*= false*/, bool utf8 /*= false*/)
+CRegExp::CRegExp(bool caseless /*= false*/, CRegExp::utf8Mode utf8 /*= asciiOnly*/)
 {
   InitValues(caseless, utf8);
 }
 
-void CRegExp::InitValues(bool caseless /*= false*/, bool utf8 /*= false*/)
+void CRegExp::InitValues(bool caseless /*= false*/, CRegExp::utf8Mode utf8 /*= asciiOnly*/)
 {
+  m_utf8Mode    = utf8;
   m_re          = NULL;
   m_sd          = NULL;
   m_iOptions    = PCRE_DOTALL | PCRE_NEWLINE_ANY;
   if(caseless)
     m_iOptions |= PCRE_CASELESS;
-  if (utf8)
+  if (m_utf8Mode == forceUtf8)
   {
     if (IsUtf8Supported())
       m_iOptions |= PCRE_UTF8;
@@ -82,17 +83,162 @@ void CRegExp::InitValues(bool caseless /*= false*/, bool utf8 /*= false*/)
   memset(m_iOvector, 0, sizeof(m_iOvector));
 }
 
-CRegExp::CRegExp(bool caseless, bool utf8, const char *re, studyMode study /*= NoStudy*/)
+CRegExp::CRegExp(bool caseless, CRegExp::utf8Mode utf8, const char *re, studyMode study /*= NoStudy*/)
 {
+  if (utf8 == autoUtf8)
+    utf8 = requireUtf8(re) ? forceUtf8 : asciiOnly;
+
   InitValues(caseless, utf8);
   RegComp(re, study);
 }
 
+bool CRegExp::requireUtf8(const std::string& regexp)
+{
+  // enable UTF-8 mode if regexp string has UTF-8 multibyte sequences
+  if (CUtf8Utils::checkStrForUtf8(regexp) == CUtf8Utils::utf8string)
+    return true;
+
+  // check for explicit Unicode Properties (\p, \P, \X) and for Unicode character codes (greater than 0xFF) in form \x{hhh..}
+  // note: PCRE change meaning of \w, \s, \d (and \W, \S, \D) when Unicode Properties are enabled,
+  //       but in auto mode we enable UNP for US-ASCII regexp only if regexp contains explicit \p, \P, \X or Unicode character code
+  const char* const regexpC = regexp.c_str();
+  const size_t len = regexp.length();
+  size_t pos = 0;
+
+  while (pos < len)
+  {
+    const char chr = regexpC[pos];
+    if (chr == '\\')
+    {
+      const char nextChr = regexpC[pos + 1];
+
+      if (nextChr == 'p' || nextChr == 'P' || nextChr == 'X')
+        return true; // found Unicode Properties
+      else if (nextChr == 'Q')
+        pos = regexp.find("\\E", pos + 2); // skip all literals in "\Q...\E"
+      else if (nextChr == 'x' && regexpC[pos + 2] == '{')
+      { // Unicode character with hex code
+        if (readCharXCode(regexp, pos) >= 0x100)
+          return true; // found Unicode character code
+      }
+      else if (nextChr == '\\' || nextChr == '(' || nextChr == ')'
+               || nextChr == '[' || nextChr == ']')
+               pos++; // exclude next character from analyze
+
+    } // chr != '\\'
+    else if (chr == '(' && regexpC[pos + 1] == '?' && regexpC[pos + 2] == '#') // comment in regexp
+      pos = regexp.find(')', pos); // skip comment
+    else if (chr == '[')
+    {
+      if (isCharClassWithUnicode(regexp, pos))
+        return true;
+    }
+
+    if (pos == std::string::npos) // check results of regexp.find() and isCharClassWithUnicode
+      return false;
+
+    pos++;
+  }
+
+  // no Unicode Properties was found
+  return false;
+}
+
+inline int CRegExp::readCharXCode(const std::string& regexp, size_t& pos)
+{
+  // read hex character code in form "\x{hh..}"
+  // 'pos' must point to '\'
+  if (pos >= regexp.length())
+    return -1;
+  const char* const regexpC = regexp.c_str();
+  if (regexpC[pos] != '\\' || regexpC[pos + 1] != 'x' || regexpC[pos + 2] != '{')
+    return -1;
+
+  pos++;
+  const size_t startPos = pos; // 'startPos' points to 'x'
+  const size_t closingBracketPos = regexp.find('}', startPos + 2);
+  if (closingBracketPos == std::string::npos)
+    return 0; // return character zero code, leave 'pos' at 'x'
+
+  pos++; // 'pos' points to '{'
+  int chCode = 0;
+  while (++pos < closingBracketPos)
+  {
+    const int xdigitVal = StringUtils::asciixdigitvalue(regexpC[pos]);
+    if (xdigitVal >= 0)
+      chCode = chCode * 16 + xdigitVal;
+    else
+    { // found non-hexdigit
+      pos = startPos; // reset 'pos' to 'startPos', process "{hh..}" as non-code
+      return 0; // return character zero code
+    }
+  }
+
+  return chCode;
+}
+
+bool CRegExp::isCharClassWithUnicode(const std::string& regexp, size_t& pos)
+{
+  const char* const regexpC = regexp.c_str();
+  const size_t len = regexp.length();
+  if (pos > len || regexpC[pos] != '[')
+    return false;
+
+  // look for Unicode character code "\x{hhh..}" and Unicode properties "\P", "\p" and "\X"
+  // find end (terminating ']') of character class (like "[a-h45]")
+  // detect nested POSIX classes like "[[:lower:]]" and escaped brackets like "[\]]"
+  bool needUnicode = false;
+  while (++pos < len)
+  {
+    if (regexpC[pos] == '[' && regexpC[pos + 1] == ':')
+    { // possible POSIX character class, like "[:alpha:]"
+      const size_t nextClosingBracketPos = regexp.find(']', pos + 2); // don't care about "\]", as it produce error if used inside POSIX char class
+
+      if (nextClosingBracketPos == std::string::npos)
+      { // error in regexp: no closing ']' for character class
+        pos = std::string::npos;
+        return needUnicode;
+      }
+      else if (regexpC[nextClosingBracketPos - 1] == ':')
+        pos = nextClosingBracketPos; // skip POSIX character class
+      // if ":]" is not found, process "[:..." as part of normal character class
+    }
+    else if (regexpC[pos] == ']')
+      return needUnicode; // end of character class
+    else if (regexpC[pos] == '\\')
+    {
+      const char nextChar = regexpC[pos + 1];
+      if (nextChar == ']' || nextChar == '[')
+        pos++; // skip next character
+      else if (nextChar == 'Q')
+      {
+        pos = regexp.find("\\E", pos + 2);
+        if (pos == std::string::npos)
+          return needUnicode; // error in regexp: no closing "\E" after "\Q" in character class
+        else
+          pos++; // skip "\E"
+      }
+      else if (nextChar == 'p' || nextChar == 'P' || nextChar == 'X')
+        needUnicode = true; // don't care about property name as it can contain only ASCII chars
+      else if (nextChar == 'x')
+      {
+        if (readCharXCode(regexp, pos) >= 0x100)
+          needUnicode = true;
+      }
+    }
+  }
+  pos = std::string::npos; // closing square bracket was not found
+
+  return needUnicode;
+}
+
+
 CRegExp::CRegExp(const CRegExp& re)
 {
   m_re = NULL;
   m_sd = NULL;
   m_jitStack = NULL;
+  m_utf8Mode = re.m_utf8Mode;
   m_iOptions = re.m_iOptions;
   *this = re;
 }
@@ -140,10 +286,13 @@ bool CRegExp::RegComp(const char *re, studyMode study /*= NoStudy*/)
   m_iMatchCount      = 0;
   const char *errMsg = NULL;
   int errOffset      = 0;
+  int options        = m_iOptions;
+  if (m_utf8Mode == autoUtf8 && requireUtf8(re))
+    options |= (IsUtf8Supported() ? PCRE_UTF8 : 0) | (AreUnicodePropertiesSupported() ? PCRE_UCP : 0);
 
   Cleanup();
 
-  m_re = pcre_compile(re, m_iOptions, &errMsg, &errOffset, NULL);
+  m_re = pcre_compile(re, options, &errMsg, &errOffset, NULL);
   if (!m_re)
   {
     m_pattern.clear();
index d231669..de1ce28 100644 (file)
@@ -48,25 +48,32 @@ public:
     StudyRegExp      = 1, // study expression (slower compilation, faster find)
     StudyWithJitComp      // study expression and JIT-compile it, if possible (heavyweight optimization) 
   };
+  enum utf8Mode
+  {
+    autoUtf8  = -1, // analyze regexp for UTF-8 multi-byte chars, for Unicode codes > 0xFF
+                    // or explicit Unicode properties (\p, \P and \X), enable UTF-8 mode if any of them are found
+    asciiOnly =  0, // process regexp and strings as single-byte encoded strings
+    forceUtf8 =  1  // enable UTF-8 mode (with Unicode properties)
+  };
 
   static const int m_MaxNumOfBackrefrences = 20;
   /**
    * @param caseless (optional) Matching will be case insensitive if set to true
    *                            or case sensitive if set to false
-   * @param utf8 (optional) If set to true all string will be processed as UTF-8 strings 
+   * @param utf8 (optional) Control UTF-8 processing
    */
-  CRegExp(bool caseless = false, bool utf8 = false);
+  CRegExp(bool caseless = false, utf8Mode utf8 = asciiOnly);
   /**
    * Create new CRegExp object and compile regexp expression in one step
    * @warning Use only with hardcoded regexp when you're sure that regexp is compiled without errors
    * @param caseless    Matching will be case insensitive if set to true 
    *                    or case sensitive if set to false
-   * @param utf8        If set to true all string will be processed as UTF-8 strings
+   * @param utf8        Control UTF-8 processing
    * @param re          The regular expression
    * @param study (optional) Controls study of expression, useful if expression will be used
    *                         several times
    */
-  CRegExp(bool caseless, bool utf8, const char *re, studyMode study = NoStudy);
+  CRegExp(bool caseless, utf8Mode utf8, const char *re, studyMode study = NoStudy);
 
   CRegExp(const CRegExp& re);
   ~CRegExp();
@@ -143,7 +150,10 @@ public:
 
 private:
   int PrivateRegFind(size_t bufferLen, const char *str, unsigned int startoffset = 0, int maxNumberOfCharsToTest = -1);
-  void InitValues(bool caseless = false, bool utf8 = false);
+  void InitValues(bool caseless = false, CRegExp::utf8Mode utf8 = asciiOnly);
+  static bool requireUtf8(const std::string& regexp);
+  static int readCharXCode(const std::string& regexp, size_t& pos);
+  static bool isCharClassWithUnicode(const std::string& regexp, size_t& pos);
 
   void Cleanup();
   inline bool IsValidSubNumber(int iSub) const;
@@ -153,6 +163,7 @@ private:
   static const int OVECCOUNT=(m_MaxNumOfBackrefrences + 1) * 3;
   unsigned int m_offset;
   int         m_iOvector[OVECCOUNT];
+  utf8Mode    m_utf8Mode;
   int         m_iMatchCount;
   int         m_iOptions;
   bool        m_jitCompiled;
index e424fcc..023f752 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *      Copyright (C) 2005-2013 Team XBMC
+ *      Copyright (C) 2012-2013 Team XBMC
  *      http://xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -30,7 +30,7 @@
 #include "log.h"
 #include "CharsetConverter.h"
 #include "utils/StringUtils.h"
-
+#include "utils/XSLTUtils.h"
 #include <sstream>
 #include <cstring>
 
@@ -204,7 +204,19 @@ void CScraperParser::ParseExpression(const CStdString& input, CStdString& dest,
       if (stricmp(sensitive,"yes") == 0)
         bInsensitive=false; // match case sensitive
 
-    CRegExp reg(bInsensitive, true);
+    CRegExp::utf8Mode eUtf8 = CRegExp::autoUtf8;
+    const char* const strUtf8 = pExpression->Attribute("utf8");
+    if (strUtf8)
+    {
+      if (stricmp(strUtf8, "yes") == 0)
+        eUtf8 = CRegExp::forceUtf8;
+      else if (stricmp(strUtf8, "no") == 0)
+        eUtf8 = CRegExp::asciiOnly;
+      else if (stricmp(strUtf8, "auto") == 0)
+        eUtf8 = CRegExp::autoUtf8;
+    }
+
+    CRegExp reg(bInsensitive, eUtf8);
     CStdString strExpression;
     if (pExpression->FirstChild())
       strExpression = pExpression->FirstChild()->Value();
@@ -326,12 +338,52 @@ void CScraperParser::ParseExpression(const CStdString& input, CStdString& dest,
   }
 }
 
+void CScraperParser::ParseXSLT(const CStdString& input, CStdString& dest, TiXmlElement* element, bool bAppend)
+{
+  TiXmlElement* pSheet = element->FirstChildElement();
+  if (pSheet)
+  {
+    XSLTUtils xsltUtils;
+    CStdString strXslt;
+    strXslt << *pSheet;
+    ReplaceBuffers(strXslt);
+
+    if (!xsltUtils.SetInput(input))
+      CLog::Log(LOGDEBUG, "could not parse input XML");
+
+    if (!xsltUtils.SetStylesheet(strXslt))
+      CLog::Log(LOGDEBUG, "could not parse stylesheet XML");
+
+    xsltUtils.XSLTTransform(dest);
+  }
+}
+
+TiXmlElement *FirstChildScraperElement(TiXmlElement *element)
+{
+  for (TiXmlElement *child = element->FirstChildElement(); child; child = child->NextSiblingElement())
+  {
+    if (child->ValueStr() == "RegExp" || child->ValueStr() == "XSLT")
+      return child;
+  }
+  return NULL;
+}
+
+TiXmlElement *NextSiblingScraperElement(TiXmlElement *element)
+{
+  for (TiXmlElement *next = element->NextSiblingElement(); next; next = next->NextSiblingElement())
+  {
+    if (next->ValueStr() == "RegExp" || next->ValueStr() == "XSLT")
+      return next;
+  }
+  return NULL;
+}
+
 void CScraperParser::ParseNext(TiXmlElement* element)
 {
   TiXmlElement* pReg = element;
   while (pReg)
   {
-    TiXmlElement* pChildReg = pReg->FirstChildElement("RegExp");
+    TiXmlElement* pChildReg = FirstChildScraperElement(pReg);
     if (pChildReg)
       ParseNext(pChildReg);
     else
@@ -344,51 +396,54 @@ void CScraperParser::ParseNext(TiXmlElement* element)
     int iDest = 1;
     bool bAppend = false;
     const char* szDest = pReg->Attribute("dest");
-    if (szDest)
-      if (strlen(szDest))
-      {
-        if (szDest[strlen(szDest)-1] == '+')
-          bAppend = true;
+    if (szDest && strlen(szDest))
+    {
+      if (szDest[strlen(szDest)-1] == '+')
+        bAppend = true;
 
-        iDest = atoi(szDest);
-      }
+      iDest = atoi(szDest);
+    }
 
-      const char *szInput = pReg->Attribute("input");
-      CStdString strInput;
-      if (szInput)
-      {
-        strInput = szInput;
-        ReplaceBuffers(strInput);
-      }
-      else
-        strInput = m_param[0];
+    const char *szInput = pReg->Attribute("input");
+    CStdString strInput;
+    if (szInput)
+    {
+      strInput = szInput;
+      ReplaceBuffers(strInput);
+    }
+    else
+      strInput = m_param[0];
 
-      const char* szConditional = pReg->Attribute("conditional");
-      bool bExecute = true;
-      if (szConditional)
+    const char* szConditional = pReg->Attribute("conditional");
+    bool bExecute = true;
+    if (szConditional)
+    {
+      bool bInverse=false;
+      if (szConditional[0] == '!')
       {
-        bool bInverse=false;
-        if (szConditional[0] == '!')
-        {
-          bInverse = true;
-          szConditional++;
-        }
-        CStdString strSetting;
-        if (m_scraper && m_scraper->HasSettings())
-           strSetting = m_scraper->GetSetting(szConditional);
-        bExecute = bInverse != strSetting.Equals("true");
+        bInverse = true;
+        szConditional++;
       }
+      CStdString strSetting;
+      if (m_scraper && m_scraper->HasSettings())
+        strSetting = m_scraper->GetSetting(szConditional);
+      bExecute = bInverse != strSetting.Equals("true");
+    }
 
-      if (bExecute)
+    if (bExecute)
+    {
+      if (iDest-1 < MAX_SCRAPER_BUFFERS && iDest-1 > -1)
       {
-        if (iDest-1 < MAX_SCRAPER_BUFFERS && iDest-1 > -1)
-          ParseExpression(strInput, m_param[iDest-1],pReg,bAppend);
+        if (pReg->ValueStr() == "XSLT")
+          ParseXSLT(strInput, m_param[iDest - 1], pReg, bAppend);
         else
-          CLog::Log(LOGERROR,"CScraperParser::ParseNext: destination buffer "
-                             "out of bounds, skipping expression");
+          ParseExpression(strInput, m_param[iDest - 1],pReg,bAppend);
       }
-
-      pReg = pReg->NextSiblingElement("RegExp");
+      else
+        CLog::Log(LOGERROR,"CScraperParser::ParseNext: destination buffer "
+                           "out of bounds, skipping expression");
+    }
+    pReg = NextSiblingScraperElement(pReg);
   }
 }
 
@@ -403,7 +458,7 @@ const CStdString CScraperParser::Parse(const CStdString& strTag,
   }
   int iResult = 1; // default to param 1
   pChildElement->QueryIntAttribute("dest",&iResult);
-  TiXmlElement* pChildStart = pChildElement->FirstChildElement("RegExp");
+  TiXmlElement* pChildStart = FirstChildScraperElement(pChildElement);
   m_scraper = scraper;
   ParseNext(pChildStart);
   CStdString tmp = m_param[iResult-1];
@@ -474,8 +529,7 @@ void CScraperParser::Clean(CStdString& strDirty)
     size_t i2;
     if ((i2 = strDirty.find("!!!ENCODE!!!",i+12)) != std::string::npos)
     {
-      strBuffer = strDirty.substr(i+12,i2-i-12);
-      CURL::Encode(strBuffer);
+      strBuffer = CURL::Encode(strDirty.substr(i + 12, i2 - i - 12));
       strDirty.replace(i, i2-i+12, strBuffer);
       i += strBuffer.size();
     }
index 9e224e1..5cf534e 100644 (file)
@@ -2,7 +2,7 @@
 #define SCRAPER_PARSER_H
 
 /*
- *      Copyright (C) 2005-2013 Team XBMC
+ *      Copyright (C) 2012-2013 Team XBMC
  *      http://xbmc.org
  *
  *  This Program is free software; you can redistribute it and/or modify
@@ -62,6 +62,17 @@ private:
   bool LoadFromXML();
   void ReplaceBuffers(CStdString& strDest);
   void ParseExpression(const CStdString& input, CStdString& dest, TiXmlElement* element, bool bAppend);
+
+  /*! \brief Parse an 'XSLT' declaration from the scraper
+   This allow us to transform an inbound XML document using XSLT
+   to a different type of XML document, ready to be output direct
+   to the album loaders or similar
+   \param input the input document
+   \param dest the output destation for the conversion
+   \param element the current XML element
+   \param bAppend append or clear the buffer
+   */
+  void ParseXSLT(const CStdString& input, CStdString& dest, TiXmlElement* element, bool bAppend);
   void ParseNext(TiXmlElement* element);
   void Clean(CStdString& strDirty);
   void ConvertJSON(CStdString &string);
index cebfa25..ba79d13 100644 (file)
 #include "settings/AdvancedSettings.h"
 #include "HTMLUtil.h"
 #include "CharsetConverter.h"
+#include "utils/CharsetDetection.h"
+#include "utils/StringUtils.h"
 #include "URL.h"
 #include "filesystem/CurlFile.h"
 #include "filesystem/ZipFile.h"
 #include "URIUtils.h"
+#include "utils/XBMCTinyXML.h"
+#include "utils/Mime.h"
 
 #include <cstring>
 #include <sstream>
@@ -233,27 +237,73 @@ bool CScraperUrl::Get(const SUrlEntry& scrURL, std::string& strHTML, XFILE::CCur
       return false;
 
   strHTML = strHTML1;
-  std::string fileCharset(http.GetServerReportedCharset());
 
-  if (scrURL.m_url.find(".zip") != std::string::npos)
+  std::string mimeType(http.GetMimeType());
+  CMime::EFileType ftype = CMime::GetFileTypeFromMime(mimeType);
+  if (ftype == CMime::FileTypeUnknown)
+    ftype = CMime::GetFileTypeFromContent(strHTML);
+
+  if (ftype == CMime::FileTypeZip || ftype == CMime::FileTypeGZip)
   {
     XFILE::CZipFile file;
-    CStdString strBuffer;
-    int iSize = file.UnpackFromMemory(strBuffer,strHTML,scrURL.m_isgz);
-    if (iSize)
+    std::string strBuffer;
+    int iSize = file.UnpackFromMemory(strBuffer,strHTML,scrURL.m_isgz); // FIXME: use FileTypeGZip instead of scrURL.m_isgz?
+    if (iSize > 0)
     {
-      fileCharset.clear();
-      strHTML.clear();
-      strHTML.append(strBuffer.c_str(),strBuffer.data()+iSize);
+      strHTML = strBuffer;
+      CLog::Log(LOGDEBUG, "%s: Archive \"%s\" was unpacked in memory", __FUNCTION__, scrURL.m_url.c_str());
     }
+    else
+      CLog::Log(LOGWARNING, "%s: \"%s\" looks like archive, but cannot be unpacked", __FUNCTION__, scrURL.m_url.c_str());
   }
 
-  if (!fileCharset.empty() && fileCharset != "UTF-8")
+  std::string reportedCharset(http.GetServerReportedCharset());
+  if (ftype == CMime::FileTypeHtml)
+  {
+    std::string realHtmlCharset, converted;
+    if (!CCharsetDetection::ConvertHtmlToUtf8(strHTML, converted, reportedCharset, realHtmlCharset))
+      CLog::Log(LOGWARNING, "%s: Can't find precise charset for HTML \"%s\", using \"%s\" as fallback", __FUNCTION__, scrURL.m_url.c_str(), realHtmlCharset.c_str());
+    else
+      CLog::Log(LOGDEBUG, "%s: Using \"%s\" charset for HTML \"%s\"", __FUNCTION__, realHtmlCharset.c_str(), scrURL.m_url.c_str());
+
+    strHTML = converted;
+  }
+  else if (ftype == CMime::FileTypeXml)
+  {
+    CXBMCTinyXML xmlDoc;
+    xmlDoc.Parse(strHTML, reportedCharset);
+    
+    std::string realXmlCharset(xmlDoc.GetUsedCharset());
+    if (!realXmlCharset.empty())
+    {
+      CLog::Log(LOGDEBUG, "%s: Using \"%s\" charset for XML \"%s\"", __FUNCTION__, realXmlCharset.c_str(), scrURL.m_url.c_str());
+      std::string converted;
+      g_charsetConverter.ToUtf8(realXmlCharset, strHTML, converted);
+      strHTML = converted;
+    }
+  }
+  else if (ftype == CMime::FileTypePlainText || StringUtils::CompareNoCase(mimeType.substr(0, 5), "text/") == 0)
+  {
+    std::string realTextCharset, converted;
+    CCharsetDetection::ConvertPlainTextToUtf8(strHTML, converted, reportedCharset, realTextCharset);
+    strHTML = converted;
+    if (reportedCharset != realTextCharset)
+      CLog::Log(LOGWARNING, "%s: Using \"%s\" charset for plain text \"%s\" instead of server reported \"%s\" charset", __FUNCTION__, realTextCharset.c_str(), scrURL.m_url.c_str(), reportedCharset.c_str());
+    else
+      CLog::Log(LOGDEBUG, "%s: Using \"%s\" charset for plain text \"%s\"", __FUNCTION__, realTextCharset.c_str(), scrURL.m_url.c_str());
+  }
+  else if (!reportedCharset.empty())
   {
-    std::string converted;
-    if (g_charsetConverter.ToUtf8(fileCharset, strHTML, converted) && !converted.empty())
+    CLog::Log(LOGDEBUG, "%s: Using \"%s\" charset for \"%s\"", __FUNCTION__, reportedCharset.c_str(), scrURL.m_url.c_str());
+    if (reportedCharset != "UTF-8")
+    {
+      std::string converted;
+      g_charsetConverter.ToUtf8(reportedCharset, strHTML, converted);
       strHTML = converted;
+    }
   }
+  else
+    CLog::Log(LOGDEBUG, "%s: Using content of \"%s\" as binary or text with \"UTF-8\" charset", __FUNCTION__, scrURL.m_url.c_str());
 
   if (!scrURL.m_cache.empty())
   {
@@ -299,9 +349,8 @@ CStdString CScraperUrl::GetThumbURL(const CScraperUrl::SUrlEntry &entry)
 {
   if (entry.m_spoof.empty())
     return entry.m_url;
-  CStdString spoof = entry.m_spoof;
-  CURL::Encode(spoof);
-  return entry.m_url + "|Referer=" + spoof;
+  
+  return entry.m_url + "|Referer=" + CStdString(CURL::Encode(entry.m_spoof));
 }
 
 void CScraperUrl::GetThumbURLs(std::vector<CStdString> &thumbs, const std::string &type, int season) const
index 9e7eebc..655b1dd 100644 (file)
@@ -195,7 +195,7 @@ string ByYear(SortAttribute attributes, const SortItem &values)
 {
   CStdString label;
   const CVariant &airDate = values.at(FieldAirDate);
-  if (!airDate.isNull())
+  if (!airDate.isNull() && !airDate.asString().empty())
     label = airDate.asString() + " ";
 
   label += StringUtils::Format("%i %s", (int)values.at(FieldYear).asInteger(), ByLabel(attributes, values).c_str());
index 9a11e50..85edbbd 100644 (file)
@@ -22,6 +22,8 @@
 #include "StreamDetails.h"
 #include "StreamUtils.h"
 #include "Variant.h"
+#include "LangInfo.h"
+#include "utils/LangCodeExpander.h"
 
 const float VIDEOASPECT_EPSILON = 0.025f;
 
@@ -152,15 +154,13 @@ bool CStreamDetailSubtitle::IsWorseThan(CStreamDetail *that)
   if (that->m_eType != CStreamDetail::SUBTITLE)
     return true;
 
-  // the preferred subtitle should be the one in the user's language
-  if (m_pParent)
-  {
-    if (m_pParent->m_strLanguage == m_strLanguage)
-      return false;  // already the best
-    else
-      return (m_pParent->m_strLanguage == ((CStreamDetailSubtitle *)that)->m_strLanguage);
-  }
-  return false;
+  if (g_LangCodeExpander.CompareLangCodes(m_strLanguage, ((CStreamDetailSubtitle *)that)->m_strLanguage))
+    return false;
+
+  // the best subtitle should be the one in the user's preferred language
+  // If preferred language is set to "original" this is "eng"
+  return m_strLanguage.empty() ||
+    g_LangCodeExpander.CompareLangCodes(((CStreamDetailSubtitle *)that)->m_strLanguage, g_langInfo.GetSubtitleLanguage());
 }
 
 CStreamDetailSubtitle& CStreamDetailSubtitle::operator=(const CStreamDetailSubtitle &that)
@@ -560,8 +560,10 @@ CStdString CStreamDetails::VideoDimsToResolutionDescription(int iWidth, int iHei
   else if (iWidth <= 1920 && iHeight <= 1080)
     return "1080";
   // 4K
-  else
+  else if (iWidth * iHeight >= 6000000)
     return "4K";
+  else
+    return "";
 }
 
 CStdString CStreamDetails::VideoAspectToAspectDescription(float fAspect)
index ddba84a..b6306f5 100644 (file)
@@ -129,9 +129,6 @@ public:
   virtual void Archive(CArchive& ar);
   virtual void Serialize(CVariant& value) const;
 
-  // Language to use for "best" subtitle stream
-  CStdString m_strLanguage;
-
 private:
   CStreamDetail *NewStream(CStreamDetail::StreamType type);
   std::vector<CStreamDetail *> m_vecItems;
index e34a2a5..33d298b 100644 (file)
@@ -248,6 +248,12 @@ std::string& StringUtils::Trim(std::string &str)
   return TrimRight(str);
 }
 
+std::string& StringUtils::Trim(std::string &str, const char* const chars)
+{
+  TrimLeft(str, chars);
+  return TrimRight(str, chars);
+}
+
 // hack to ensure that std::string::iterator will be dereferenced as _unsigned_ char
 // without this hack "TrimX" functions failed on Win32 with UTF-8 strings
 static int isspace_c(char c)
@@ -261,7 +267,7 @@ std::string& StringUtils::TrimLeft(std::string &str)
   return str;
 }
 
-std::string& StringUtils::TrimLeft(std::string &str, const std::string& chars)
+std::string& StringUtils::TrimLeft(std::string &str, const char* const chars)
 {
   size_t nidx = str.find_first_not_of(chars);
   str.erase(0, nidx);
@@ -274,7 +280,7 @@ std::string& StringUtils::TrimRight(std::string &str)
   return str;
 }
 
-std::string& StringUtils::TrimRight(std::string &str, const std::string& chars)
+std::string& StringUtils::TrimRight(std::string &str, const char* const chars)
 {
   size_t nidx = str.find_last_not_of(chars);
   str.erase(str.npos == nidx ? 0 : ++nidx);
@@ -727,6 +733,28 @@ bool StringUtils::IsInteger(const CStdString& str)
   return i == str.size() && n > 0;
 }
 
+int StringUtils::asciidigitvalue(char chr)
+{
+  if (!isasciidigit(chr))
+    return -1;
+
+  return chr - '0';
+}
+
+int StringUtils::asciixdigitvalue(char chr)
+{
+  int v = asciidigitvalue(chr);
+  if (v >= 0)
+    return v;
+  if (chr >= 'a' && chr <= 'f')
+    return chr - 'a' + 10;
+  if (chr >= 'A' && chr <= 'F')
+    return chr - 'A' + 10;
+
+  return -1;
+}
+
+
 void StringUtils::RemoveCRLF(CStdString& strLine)
 {
   StringUtils::TrimRight(strLine, "\n\r");
index 1d1aade..54c835a 100644 (file)
@@ -67,10 +67,11 @@ public:
   static std::string Mid(const std::string &str, size_t first, size_t count = std::string::npos);
   static std::string Right(const std::string &str, size_t count);
   static std::string& Trim(std::string &str);
+  static std::string& Trim(std::string &str, const char* const chars);
   static std::string& TrimLeft(std::string &str);
-  static std::string& TrimLeft(std::string &str, const std::string &chars);
+  static std::string& TrimLeft(std::string &str, const char* const chars);
   static std::string& TrimRight(std::string &str);
-  static std::string& TrimRight(std::string &str, const std::string &chars);
+  static std::string& TrimRight(std::string &str, const char* const chars);
   static std::string& RemoveDuplicatedSpacesAndTabs(std::string& str);
   static int Replace(std::string &str, char oldChar, char newChar);
   static int Replace(std::string &str, const std::string &oldStr, const std::string &newStr);
@@ -124,6 +125,32 @@ public:
    \return true if the string is an integer, false otherwise.
    */
   static bool IsInteger(const CStdString& str);
+
+  /* The next several isasciiXX and asciiXXvalue functions are locale independent (US-ASCII only),
+   * as opposed to standard ::isXX (::isalpha, ::isdigit...) which are locale dependent.
+   * Next functions get parameter as char and don't need double cast ((int)(unsigned char) is required for standard functions). */
+  inline static bool isasciidigit(char chr) // locale independent 
+  {
+    return chr >= '0' && chr <= '9'; 
+  }
+  inline static bool isasciixdigit(char chr) // locale independent 
+  {
+    return (chr >= '0' && chr <= '9') || (chr >= 'a' && chr <= 'f') || (chr >= 'A' && chr <= 'F'); 
+  }
+  static int asciidigitvalue(char chr); // locale independent 
+  static int asciixdigitvalue(char chr); // locale independent 
+  inline static bool isasciiuppercaseletter(char chr) // locale independent
+  {
+    return (chr >= 'A' && chr <= 'Z'); 
+  }
+  inline static bool isasciilowercaseletter(char chr) // locale independent
+  {
+    return (chr >= 'a' && chr <= 'z'); 
+  }
+  inline static bool isasciialphanum(char chr) // locale independent
+  {
+    return isasciiuppercaseletter(chr) || isasciilowercaseletter(chr) || isasciidigit(chr); 
+  }
   static CStdString SizeToString(int64_t size);
   static const CStdString EmptyString;
   static const std::string Empty;
index 9aea372..c77d495 100644 (file)
@@ -262,7 +262,7 @@ bool CSysInfo::Save(TiXmlNode *settings) const
   return true;
 }
 
-bool CSysInfo::GetDiskSpace(const CStdString drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed)
+bool CSysInfo::GetDiskSpace(const CStdString& drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed)
 {
   bool bRet= false;
   ULARGE_INTEGER ULTotal= { { 0 } };
index a6b3f90..b7ac016 100644 (file)
@@ -110,7 +110,7 @@ public:
   CStdString GetUnameVersion();
 #endif
 #if defined(TARGET_WINDOWS)
-  CStdString CSysInfo::GetUAWindowsVersion();
+  CStdString GetUAWindowsVersion();
 #endif
   CStdString GetUserAgent();
   bool HasInternet();
@@ -131,7 +131,7 @@ public:
   CStdString GetManufacturer();
   CStdString GetProduct();
   CStdString GetModel();
-  bool GetDiskSpace(const CStdString drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed);
+  bool GetDiskSpace(const CStdString& drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed);
   CStdString GetHddSpaceInfo(int& percent, int drive, bool shortText=false);
   CStdString GetHddSpaceInfo(int drive, bool shortText=false);
 
index 5b292bc..95b8091 100644 (file)
@@ -395,29 +395,80 @@ bool URIUtils::GetParentPath(const CStdString& strPath, CStdString& strParent)
   return true;
 }
 
+std::string URLEncodePath(const std::string& strPath)
+{
+  vector<string> segments = StringUtils::Split(strPath, "/");
+  for (vector<string>::iterator i = segments.begin(); i != segments.end(); ++i)
+    *i = CURL::Encode(*i);
+
+  return StringUtils::Join(segments, "/");
+}
+
+std::string URLDecodePath(const std::string& strPath)
+{
+  vector<string> segments = StringUtils::Split(strPath, "/");
+  for (vector<string>::iterator i = segments.begin(); i != segments.end(); ++i)
+    *i = CURL::Decode(*i);
+
+  return StringUtils::Join(segments, "/");
+}
+
+std::string URIUtils::ChangeBasePath(const std::string &fromPath, const std::string &fromFile, const std::string &toPath)
+{
+  std::string toFile = fromFile;
+
+  // Convert back slashes to forward slashes, if required
+  if (IsDOSPath(fromPath) && !IsDOSPath(toPath))
+    StringUtils::Replace(toFile, "\\", "/");
+
+  // Handle difference in URL encoded vs. not encoded
+  if ( ProtocolHasEncodedFilename(CURL(fromPath).GetProtocol() )
+   && !ProtocolHasEncodedFilename(CURL(toPath).GetProtocol() ) )
+  {
+    toFile = URLDecodePath(toFile); // Decode path
+  }
+  else if (!ProtocolHasEncodedFilename(CURL(fromPath).GetProtocol() )
+         && ProtocolHasEncodedFilename(CURL(toPath).GetProtocol() ) )
+  {
+    toFile = URLEncodePath(toFile); // Encode path
+  }
+
+  // Convert forward slashes to back slashes, if required
+  if (!IsDOSPath(fromPath) && IsDOSPath(toPath))
+    StringUtils::Replace(toFile, "/", "\\");
+
+  return AddFileToFolder(toPath, toFile);
+}
+
 CStdString URIUtils::SubstitutePath(const CStdString& strPath, bool reverse /* = false */)
 {
   for (CAdvancedSettings::StringMapping::iterator i = g_advancedSettings.m_pathSubstitutions.begin();
       i != g_advancedSettings.m_pathSubstitutions.end(); i++)
   {
+    CStdString fromPath;
+    CStdString toPath;
+
     if (!reverse)
     {
-      if (strncmp(strPath.c_str(), i->first.c_str(), HasSlashAtEnd(i->first.c_str()) ? i->first.size()-1 : i->first.size()) == 0)
-      {
-        if (strPath.size() > i->first.size())
-          return URIUtils::AddFileToFolder(i->second, strPath.substr(i->first.size()));
-        else
-          return i->second;
-      }
+      fromPath = i->first;  // Fake path
+      toPath = i->second;   // Real path
     }
     else
     {
-      if (strncmp(strPath.c_str(), i->second.c_str(), HasSlashAtEnd(i->second.c_str()) ? i->second.size()-1 : i->second.size()) == 0)
+      fromPath = i->second; // Real path
+      toPath = i->first;    // Fake path
+    }
+
+    if (strncmp(strPath.c_str(), fromPath.c_str(), HasSlashAtEnd(fromPath) ? fromPath.size() - 1 : fromPath.size()) == 0)
+    {
+      if (strPath.size() > fromPath.size())
+      {
+        CStdString strSubPathAndFileName = strPath.substr(fromPath.size());
+        return ChangeBasePath(fromPath, strSubPathAndFileName, toPath); // Fix encoding + slash direction
+      }
+      else
       {
-        if (strPath.size() > i->second.size())
-          return URIUtils::AddFileToFolder(i->first, strPath.substr(i->second.size()));
-        else
-          return i->first;
+        return toPath;
       }
     }
   }
@@ -1062,24 +1113,17 @@ void URIUtils::CreateArchivePath(CStdString& strUrlPath,
                                  const CStdString& strFilePathInArchive,
                                  const CStdString& strPwd)
 {
-  CStdString strBuffer;
-
   strUrlPath = strType+"://";
 
   if( !strPwd.empty() )
   {
-    strBuffer = strPwd;
-    CURL::Encode(strBuffer);
-    strUrlPath += strBuffer;
+    strUrlPath += CURL::Encode(strPwd);
     strUrlPath += "@";
   }
 
-  strBuffer = strArchivePath;
-  CURL::Encode(strBuffer);
-
-  strUrlPath += strBuffer;
+  strUrlPath += CURL::Encode(strArchivePath);
 
-  strBuffer = strFilePathInArchive;
+  CStdString strBuffer(strFilePathInArchive);
   StringUtils::Replace(strBuffer, '\\', '/');
   StringUtils::TrimLeft(strBuffer, "/");
 
@@ -1088,7 +1132,7 @@ void URIUtils::CreateArchivePath(CStdString& strUrlPath,
 
 #if 0 // options are not used
   strBuffer = strCachePath;
-  CURL::Encode(strBuffer);
+  strBuffer = CURL::Encode(strBuffer);
 
   strUrlPath += "?cache=";
   strUrlPath += strBuffer;
index 146bf5c..cf7ea3f 100644 (file)
@@ -68,6 +68,16 @@ public:
   static void GetCommonPath(CStdString& strPath, const CStdString& strPath2);
   static CStdString GetParentPath(const CStdString& strPath);
   static bool GetParentPath(const CStdString& strPath, CStdString& strParent);
+
+  /* \brief Change the base path of a URL: fromPath/fromFile -> toPath/toFile
+    Handles changes in path separator and filename URL encoding if necessary to derive toFile.
+    \param fromPath the base path of the original URL
+    \param fromFile the filename portion of the original URL
+    \param toPath the base path of the resulting URL
+    \return the full path.
+   */
+  static std::string ChangeBasePath(const std::string &fromPath, const std::string &fromFile, const std::string &toPath);
+
   static CStdString SubstitutePath(const CStdString& strPath, bool reverse = false);
 
   static bool IsAddonsPath(const CStdString& strFile);
index 485a1c5..2be0d7e 100644 (file)
@@ -95,6 +95,7 @@ public:
 
   CVariant &operator=(const CVariant &rhs);
   bool operator==(const CVariant &rhs) const;
+  bool operator!=(const CVariant &rhs) const { return !(*this == rhs); }
 
   void push_back(const CVariant &variant);
   void append(const CVariant &variant);
index 7101710..e29f8e5 100644 (file)
@@ -212,7 +212,7 @@ bool CXBMCTinyXML::InternalParse(const std::string& rawdata, TiXmlEncoding encod
     return (TiXmlDocument::Parse(rawdata.c_str(), NULL, encoding) != NULL); // nothing to fix, process data directly
 
   std::string data(rawdata);
-  CRegExp re(false, false, "^&(amp|lt|gt|quot|apos|#x[a-fA-F0-9]{1,4}|#[0-9]{1,5});.*");
+  CRegExp re(false, CRegExp::asciiOnly, "^&(amp|lt|gt|quot|apos|#x[a-fA-F0-9]{1,4}|#[0-9]{1,5});.*");
   do
   {
     if (re.RegFind(data, pos, MAX_ENTITY_LENGTH) < 0)
index b0c86db..1ecc4cb 100644 (file)
@@ -237,7 +237,7 @@ bool XMLUtils::GetPath(const TiXmlNode* pRootNode, const char* strTag, CStdStrin
   {
     strStringValue = pNode->Value();
     if (encoded && strcasecmp(encoded,"yes") == 0)
-      CURL::Decode(strStringValue);
+      strStringValue = CURL::Decode(strStringValue);
     return true;
   }
   strStringValue.clear();
diff --git a/xbmc/utils/XSLTUtils.cpp b/xbmc/utils/XSLTUtils.cpp
new file mode 100644 (file)
index 0000000..61b0e9d
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ *      Copyright (C) 2005-2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "XSLTUtils.h"
+#include "log.h"
+#include <libxslt/xslt.h>
+#include <libxslt/transform.h>
+
+#ifdef TARGET_WINDOWS
+#pragma comment(lib, "libxslt.lib")
+#pragma comment(lib, "libxml2.lib")
+#else
+#include <iostream>
+#endif
+
+#define TMP_BUF_SIZE 512
+void err(void *ctx, const char *msg, ...) {
+  char string[TMP_BUF_SIZE];
+  va_list arg_ptr;
+  va_start(arg_ptr, msg);
+  vsnprintf(string, TMP_BUF_SIZE, msg, arg_ptr);
+  va_end(arg_ptr);
+  CLog::Log(LOGDEBUG, "XSLT: %s", string);
+  return;
+}
+
+XSLTUtils::XSLTUtils() :
+m_xmlInput(NULL), m_xmlStylesheet(NULL), m_xsltStylesheet(NULL)
+{
+  // initialize libxslt
+  xmlSubstituteEntitiesDefault(1);
+  xmlLoadExtDtdDefaultValue = 0;
+  xsltSetGenericErrorFunc(NULL, err);
+}
+
+XSLTUtils::~XSLTUtils()
+{
+  if (m_xmlInput)
+    xmlFreeDoc(m_xmlInput);
+  if (m_xmlOutput)
+    xmlFreeDoc(m_xmlOutput);
+  if (m_xsltStylesheet)
+    xsltFreeStylesheet(m_xsltStylesheet);
+}
+
+bool XSLTUtils::XSLTTransform(std::string& output)
+{
+  const char *params[16+1];
+  params[0] = NULL;
+  m_xmlOutput = xsltApplyStylesheet(m_xsltStylesheet, m_xmlInput, params);
+  if (!m_xmlOutput)
+  {
+    CLog::Log(LOGDEBUG, "XSLT: xslt transformation failed");
+    return false;
+  }
+
+  xmlChar *xmlResultBuffer = NULL;
+  int xmlResultLength = 0;
+  int res = xsltSaveResultToString(&xmlResultBuffer, &xmlResultLength, m_xmlOutput, m_xsltStylesheet);
+  if (res == -1)
+  {
+    xmlFree(xmlResultBuffer);
+    return false;
+  }
+
+  output.append((const char *)xmlResultBuffer, xmlResultLength);
+  xmlFree(xmlResultBuffer);
+
+  return true;
+}
+
+bool XSLTUtils::SetInput(const std::string& input)
+{
+  m_xmlInput = xmlParseMemory(input.c_str(), input.size());
+  if (!m_xmlInput)
+    return false;
+  return true;
+}
+
+bool XSLTUtils::SetStylesheet(const std::string& stylesheet)
+{
+  if (m_xsltStylesheet) {
+    xsltFreeStylesheet(m_xsltStylesheet);
+    m_xsltStylesheet = NULL;
+  }
+
+  m_xmlStylesheet = xmlParseMemory(stylesheet.c_str(), stylesheet.size());
+  if (!m_xmlStylesheet)
+  {
+    CLog::Log(LOGDEBUG, "could not xmlParseMemory stylesheetdoc");
+    return false;
+  }
+
+  m_xsltStylesheet = xsltParseStylesheetDoc(m_xmlStylesheet);
+  if (!m_xsltStylesheet) {
+    CLog::Log(LOGDEBUG, "could not parse stylesheetdoc");
+    xmlFree(m_xmlStylesheet);
+    m_xmlStylesheet = NULL;
+    return false;
+  }
+  
+  return true;
+}
diff --git a/xbmc/utils/XSLTUtils.h b/xbmc/utils/XSLTUtils.h
new file mode 100644 (file)
index 0000000..18269fb
--- /dev/null
@@ -0,0 +1,62 @@
+#pragma once
+
+/*
+ *      Copyright (C) 2005-2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+#include <libxslt/xslt.h>
+#include <libxslt/xsltutils.h>
+
+class XSLTUtils
+{
+public:
+  XSLTUtils();
+  ~XSLTUtils();
+
+  /*! \brief Set the input XML for an XSLT transform from a string.
+   This sets up the XSLT transformer with some input XML from a string in memory.
+   The input XML should be well formed.
+   \param input    the XML document to be transformed.
+   */
+  bool  SetInput(const std::string& input);
+
+  /*! \brief Set the stylesheet (XSL) for an XSLT transform from a string.
+   This sets up the XSLT transformer with some stylesheet XML from a string in memory.
+   The input XSL should be well formed.
+   \param input    the XSL document to be transformed.
+   */
+  bool  SetStylesheet(const std::string& stylesheet);
+
+  /*! \brief Perform an XSLT transform on an inbound XML document.
+   This will apply an XSLT transformation on an input XML document,
+   giving an output XML document, using the specified XSLT document
+   as the transformer.
+   \param input    the parent containing the <tag>'s.
+   \param filename         the <tag> in question.
+   */
+  bool  XSLTTransform(std::string& output);
+
+
+private:
+  xmlDocPtr m_xmlInput;
+  xmlDocPtr m_xmlOutput;
+  xmlDocPtr m_xmlStylesheet;
+  xsltStylesheetPtr m_xsltStylesheet;
+};
index 23f2554..5ad472d 100644 (file)
@@ -261,6 +261,25 @@ TEST_F(TestArchive, CVariantArchive)
   arload.Close();
 
   EXPECT_TRUE(CVariant_var.isInteger());
+  EXPECT_EQ(1, CVariant_var.asInteger());
+}
+
+TEST_F(TestArchive, CVariantArchiveString)
+{
+  ASSERT_TRUE(file);
+  CVariant CVariant_ref("teststring"), CVariant_var;
+
+  CArchive arstore(file, CArchive::store);
+  arstore << CVariant_ref;
+  arstore.Close();
+
+  ASSERT_TRUE((file->Seek(0, SEEK_SET) == 0));
+  CArchive arload(file, CArchive::load);
+  arload >> CVariant_var;
+  arload.Close();
+
+  EXPECT_TRUE(CVariant_var.isString());
+  EXPECT_STREQ("teststring", CVariant_var.asString().c_str());
 }
 
 TEST_F(TestArchive, StringVectorArchive)
index 7170c46..9af7f2f 100644 (file)
@@ -178,12 +178,56 @@ TEST_F(TestURIUtils, SubstitutePath)
 {
   CStdString from, to, ref, var;
 
-  from = "/somepath";
-  to = "/someotherpath";
+  from = "C:\\My Videos";
+  to = "https://myserver/some%20other%20path";
   g_advancedSettings.m_pathSubstitutions.push_back(std::make_pair(from, to));
 
-  ref = "/someotherpath/to/movie.avi";
-  var = URIUtils::SubstitutePath("/somepath/to/movie.avi");
+  from = "/this/path1";
+  to = "/some/other/path2";
+  g_advancedSettings.m_pathSubstitutions.push_back(std::make_pair(from, to));
+
+  from = "davs://otherserver/my%20music%20path";
+  to = "D:\\Local Music\\MP3 Collection";
+  g_advancedSettings.m_pathSubstitutions.push_back(std::make_pair(from, to));
+
+  ref = "https://myserver/some%20other%20path/sub%20dir/movie%20name.avi";
+  var = URIUtils::SubstitutePath("C:\\My Videos\\sub dir\\movie name.avi");
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "C:\\My Videos\\sub dir\\movie name.avi";
+  var = URIUtils::SubstitutePath("https://myserver/some%20other%20path/sub%20dir/movie%20name.avi", true);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "D:\\Local Music\\MP3 Collection\\Phil Collins\\Some CD\\01 - Two Hearts.mp3";
+  var = URIUtils::SubstitutePath("davs://otherserver/my%20music%20path/Phil%20Collins/Some%20CD/01%20-%20Two%20Hearts.mp3");
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "davs://otherserver/my%20music%20path/Phil%20Collins/Some%20CD/01%20-%20Two%20Hearts.mp3";
+  var = URIUtils::SubstitutePath("D:\\Local Music\\MP3 Collection\\Phil Collins\\Some CD\\01 - Two Hearts.mp3", true);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "/some/other/path2/to/movie.avi";
+  var = URIUtils::SubstitutePath("/this/path1/to/movie.avi");
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "/this/path1/to/movie.avi";
+  var = URIUtils::SubstitutePath("/some/other/path2/to/movie.avi", true);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "/no/translation path/";
+  var = URIUtils::SubstitutePath(ref);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "/no/translation path/";
+  var = URIUtils::SubstitutePath(ref, true);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "c:\\no\\translation path";
+  var = URIUtils::SubstitutePath(ref);
+  EXPECT_STREQ(ref.c_str(), var.c_str());
+
+  ref = "c:\\no\\translation path";
+  var = URIUtils::SubstitutePath(ref, true);
   EXPECT_STREQ(ref.c_str(), var.c_str());
 }
 
index 8a634c1..7d399d1 100644 (file)
@@ -799,12 +799,6 @@ bool CVideoDatabase::SetPathHash(const CStdString &path, const CStdString &hash)
     if (NULL == m_pDB.get()) return false;
     if (NULL == m_pDS.get()) return false;
 
-    if (hash.empty())
-    { // this is an empty folder - we need only add it to the path table
-      // if the path actually exists
-      if (!CDirectory::Exists(path))
-        return false;
-    }
     int idPath = AddPath(path);
     if (idPath < 0) return false;
 
@@ -2895,15 +2889,16 @@ void CVideoDatabase::DeleteMovie(const CStdString& strFilenameAndPath, bool bKee
 
       strSQL=PrepareSQL("delete from movielinktvshow where idMovie=%i", idMovie);
       m_pDS->exec(strSQL.c_str());
+
+      CStdString strPath, strFileName;
+      SplitPath(strFilenameAndPath,strPath,strFileName);
+      InvalidatePathHash(strPath);
     }
 
     //TODO: move this below CommitTransaction() once UPnP doesn't rely on this anymore
     if (!bKeepId)
       AnnounceRemove("movie", idMovie);
 
-    CStdString strPath, strFileName;
-    SplitPath(strFilenameAndPath,strPath,strFileName);
-    InvalidatePathHash(strPath);
     CommitTransaction();
 
   }
@@ -2968,14 +2963,14 @@ void CVideoDatabase::DeleteTvShow(const CStdString& strPath, bool bKeepId /* = f
 
       strSQL=PrepareSQL("delete from movielinktvshow where idShow=%i", idTvShow);
       m_pDS->exec(strSQL.c_str());
-    }
+
+      InvalidatePathHash(strPath);
+   }
 
     //TODO: move this below CommitTransaction() once UPnP doesn't rely on this anymore
     if (!bKeepId)
       AnnounceRemove("tvshow", idTvShow);
 
-    InvalidatePathHash(strPath);
-
     CommitTransaction();
 
   }
@@ -3094,15 +3089,16 @@ void CVideoDatabase::DeleteMusicVideo(const CStdString& strFilenameAndPath, bool
 
       strSQL=PrepareSQL("delete from musicvideo where idMVideo=%i", idMVideo);
       m_pDS->exec(strSQL.c_str());
+
+      CStdString strPath, strFileName;
+      SplitPath(strFilenameAndPath,strPath,strFileName);
+      InvalidatePathHash(strPath);
     }
 
     //TODO: move this below CommitTransaction() once UPnP doesn't rely on this anymore
     if (!bKeepId)
       AnnounceRemove("musicvideo", idMVideo);
 
-    CStdString strPath, strFileName;
-    SplitPath(strFilenameAndPath,strPath,strFileName);
-    InvalidatePathHash(strPath);
     CommitTransaction();
 
   }
@@ -5223,20 +5219,23 @@ bool CVideoDatabase::GetMusicVideoAlbumsNav(const CStdString& strBaseDir, CFileI
     if (NULL == m_pDB.get()) return false;
     if (NULL == m_pDS.get()) return false;
 
+    CVideoDbUrl videoUrl;
+    if (!videoUrl.FromString(strBaseDir))
+      return false;
+
     CStdString strSQL = "select %s from musicvideoview ";
     Filter extFilter = filter;
+    extFilter.fields = PrepareSQL("musicvideoview.c%02d, musicvideoview.idMVideo, actors.strActor", VIDEODB_ID_MUSICVIDEO_ALBUM);
+    extFilter.AppendJoin(PrepareSQL("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo"));
+    extFilter.AppendJoin(PrepareSQL("join actors on actors.idActor = artistlinkmusicvideo.idArtist"));
     if (CProfilesManager::Get().GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE && !g_passwordManager.bMasterUser)
     {
-      extFilter.fields = PrepareSQL("musicvideoview.c%02d, musicvideoview.idMVideo, actors.strActor, path.strPath", VIDEODB_ID_MUSICVIDEO_ALBUM);
-      extFilter.AppendJoin("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo join actors on actors.idActor = artistlinkmusicvideo.idArtist join files on files.idFile = musicvideoview.idFile join path on path.idPath = files.idPath");
-    }
-    else
-    {
-      extFilter.fields = PrepareSQL("musicvideoview.c%02d, musicvideoview.idMVideo, actors.strActor", VIDEODB_ID_MUSICVIDEO_ALBUM);
-      extFilter.AppendJoin("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo join actors on actors.idActor = artistlinkmusicvideo.idArtist");
+      extFilter.fields += " path.strPath";
+      extFilter.AppendJoin("join files on files.idFile = musicvideoview.idFile join path on path.idPath = files.idPath");
     }
+
     if (idArtist > -1)
-      extFilter.AppendWhere(PrepareSQL("artistlinkmusicvideo.idArtist = %i", idArtist));
+      videoUrl.AddOption("artistid", idArtist);
 
     extFilter.AppendGroup(PrepareSQL("musicvideoview.c%02d", VIDEODB_ID_MUSICVIDEO_ALBUM));
 
@@ -5248,8 +5247,7 @@ bool CVideoDatabase::GetMusicVideoAlbumsNav(const CStdString& strBaseDir, CFileI
     }
     strSQL = StringUtils::Format(strSQL.c_str(), !extFilter.fields.empty() ? extFilter.fields.c_str() : "*");
 
-    CVideoDbUrl videoUrl;
-    if (!BuildSQL(strBaseDir, strSQL, extFilter, strSQL, videoUrl))
+    if (!BuildSQL(videoUrl.ToString(), strSQL, extFilter, strSQL, videoUrl))
       return false;
 
     int iRowsFound = RunQuery(strSQL);
@@ -7581,7 +7579,7 @@ int CVideoDatabase::GetMatchingMusicVideo(const CStdString& strArtist, const CSt
     else
     { // we want to return the matching musicvideo
       if (CProfilesManager::Get().GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE && !g_passwordManager.bMasterUser)
-        strSQL = PrepareSQL("select musicvideo.idMVideo from musicvideo,files,path,artistlinkmusicvideo,actors where files.idFile=musicvideo.idFile and files.idPath=path.idPath and musicvideo.%c02d like '%s' and musicvideo.%c02d like '%s' and artistlinkmusicvideo.idMVideo=musicvideo.idMVideo and artistlinkmusicvideo.idArtist=actors.idActors and actors.strActor like '%s'",VIDEODB_ID_MUSICVIDEO_ALBUM,strAlbum.c_str(),VIDEODB_ID_MUSICVIDEO_TITLE,strTitle.c_str(),strArtist.c_str());
+        strSQL = PrepareSQL("select musicvideo.idMVideo from musicvideo,files,path,artistlinkmusicvideo,actors where files.idFile=musicvideo.idFile and files.idPath=path.idPath and musicvideo.c%02d like '%s' and musicvideo.c%02d like '%s' and artistlinkmusicvideo.idMVideo=musicvideo.idMVideo and artistlinkmusicvideo.idArtist=actors.idActors and actors.strActor like '%s'",VIDEODB_ID_MUSICVIDEO_ALBUM,strAlbum.c_str(),VIDEODB_ID_MUSICVIDEO_TITLE,strTitle.c_str(),strArtist.c_str());
       else
         strSQL = PrepareSQL("select musicvideo.idMVideo from musicvideo join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo=musicvideo.idMVideo join actors on actors.idActor=artistlinkmusicvideo.idArtist where musicvideo.c%02d like '%s' and musicvideo.c%02d like '%s' and actors.strActor like '%s'",VIDEODB_ID_MUSICVIDEO_ALBUM,strAlbum.c_str(),VIDEODB_ID_MUSICVIDEO_TITLE,strTitle.c_str(),strArtist.c_str());
     }
@@ -8064,8 +8062,12 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
 
       if (handle == NULL && progress != NULL)
       {
-        progress->SetPercentage(current * 100 / total);
-        progress->Progress();
+        int percentage = current * 100 / total;
+        if (percentage > progress->GetPercentage())
+        {
+          progress->SetPercentage(percentage);
+          progress->Progress();
+        }
         if (progress->IsCanceled())
         {
           progress->Close();
@@ -8214,7 +8216,7 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
     {
       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())))
+          (pathsDeleteDecision == pathsDeleteDecisions.end() && !CDirectory::Exists(m_pDS->fv(1).get_asString(), false)))
         strIds += m_pDS->fv(0).get_asString() + ",";
 
       m_pDS->next();
@@ -8311,7 +8313,7 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
     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 (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) "
@@ -8424,7 +8426,7 @@ std::vector<int> CVideoDatabase::CleanMediaType(const std::string &mediaType, co
     return cleanedIDs;
 
   // now grab them media items
-  std::string sql = PrepareSQL("SELECT %s.%s, %s.idFile, %s, path.idPath, parentPath.strPath FROM %s "
+  std::string sql = PrepareSQL("SELECT %s.%s, %s.idFile, %s, path.idPath, parentPath.strPath, parentPath.useFolderNames 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(),
@@ -8438,16 +8440,21 @@ std::vector<int> CVideoDatabase::CleanMediaType(const std::string &mediaType, co
                     parentPathIdField.c_str(),
                     table.c_str(), cleanableFileIDs.c_str());
 
+  // map of parent path ID to boolean pair (if not exists and user choice)
+  std::map<int, std::pair<bool, bool> > parentPathsDeleteDecisions;
   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);
+    std::map<int, std::pair<bool, bool> >::const_iterator parentPathsDeleteDecision = parentPathsDeleteDecisions.find(parentPathID);
     bool del = true;
-    if (pathsDeleteDecision == pathsDeleteDecisions.end())
+    if (parentPathsDeleteDecision == parentPathsDeleteDecisions.end())
     {
       std::string parentPath = m_pDS->fv(4).get_asString();
-      if (!CDirectory::Exists(parentPath, false))
+      bool parentPathNotExists = !CDirectory::Exists(parentPath, false);
+      // if the parent path exists, the file will be deleted without asking
+      // if the parent path doesn't exist, ask the user whether to remove all items it contained
+      if (parentPathNotExists)
       {
         // in silent mode assume that the files are just temporarily missing
         if (silent)
@@ -8457,9 +8464,9 @@ std::vector<int> CVideoDatabase::CleanMediaType(const std::string &mediaType, co
           CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
           if (pDialog != NULL)
           {
+            CURL parentUrl(parentPath);
             pDialog->SetHeading(15012);
-            pDialog->SetLine(1, 15013);
-            pDialog->SetLine(2, parentPath);
+            pDialog->SetText(StringUtils::Format(g_localizeStrings.Get(15013), parentUrl.GetWithoutUserDetails().c_str()));
             pDialog->SetChoice(0, 15015);
             pDialog->SetChoice(1, 15014);
 
@@ -8472,12 +8479,16 @@ std::vector<int> CVideoDatabase::CleanMediaType(const std::string &mediaType, co
         }
       }
 
-      pathsDeleteDecisions.insert(make_pair(parentPathID, del));
+      parentPathsDeleteDecisions.insert(make_pair(parentPathID, make_pair(parentPathNotExists, del)));
     }
-    else
-      del = pathsDeleteDecision->second;
+    // the only reason not to delete the file is if the parent path doesn't
+    // exist and the user decided to delete all the items it contained
+    else if (parentPathsDeleteDecision->second.first &&
+             !parentPathsDeleteDecision->second.second)
+      del = false;
 
-    pathsDeleteDecisions.insert(make_pair(m_pDS->fv(3).get_asInt(), del));
+    if (m_pDS->fv(5).get_asBool())
+      pathsDeleteDecisions.insert(make_pair(m_pDS->fv(3).get_asInt(), del));
 
     if (del)
     {
@@ -9132,7 +9143,6 @@ void CVideoDatabase::ImportFromXML(const CStdString &path)
     XMLUtils::GetInt(root, "version", iVersion);
 
     CLog::Log(LOGDEBUG, "%s: Starting import (export version = %i)", __FUNCTION__, iVersion);
-    BeginTransaction();
 
     TiXmlElement *movie = root->FirstChildElement();
     int current = 0;
@@ -9265,18 +9275,14 @@ void CVideoDatabase::ImportFromXML(const CStdString &path)
         if (progress->IsCanceled())
         {
           progress->Close();
-          RollbackTransaction();
           return;
         }
       }
     }
-
-    CommitTransaction();
   }
   catch (...)
   {
     CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
-    RollbackTransaction();
   }
   if (progress)
     progress->Close();
@@ -9866,14 +9872,19 @@ bool CVideoDatabase::GetFilter(CDbUrl &videoUrl, Filter &filter, SortDescription
     option = options.find("artistid");
     if (option != options.end())
     {
-      filter.AppendJoin(PrepareSQL("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo"));
+      if (itemType != "albums")
+        filter.AppendJoin(PrepareSQL("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo"));
       filter.AppendWhere(PrepareSQL("artistlinkmusicvideo.idArtist = %i", (int)option->second.asInteger()));
     }
 
     option = options.find("artist");
     if (option != options.end())
     {
-      filter.AppendJoin(PrepareSQL("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo join actors on actors.idActor = artistlinkmusicvideo.idArtist"));
+      if (itemType != "albums")
+      {
+        filter.AppendJoin(PrepareSQL("join artistlinkmusicvideo on artistlinkmusicvideo.idMVideo = musicvideoview.idMVideo"));
+        filter.AppendJoin(PrepareSQL("join actors on actors.idActor = artistlinkmusicvideo.idArtist"));
+      }
       filter.AppendWhere(PrepareSQL("actors.strActor like '%s'", option->second.asString().c_str()));
     }
 
index c01464e..d682c96 100644 (file)
@@ -161,7 +161,13 @@ bool CVideoDbUrl::parse()
 
   // add options based on the QueryParams
   if (queryParams.GetActorId() != -1)
-    AddOption("actorid", (int)queryParams.GetActorId());
+  {
+    std::string optionName = "actorid";
+    if (m_type == "musicvideos")
+      optionName = "artistid";
+
+    AddOption(optionName, (int)queryParams.GetActorId());
+  }
   if (queryParams.GetAlbumId() != -1)
     AddOption("albumid", (int)queryParams.GetAlbumId());
   if (queryParams.GetCountryId() != -1)
index 4e2780a..ed2f43e 100644 (file)
@@ -767,11 +767,7 @@ namespace VIDEO
         continue;
 
       if (!EnumerateEpisodeItem(items[i].get(), episodeList))
-      {
-        CStdString decode(items[i]->GetPath());
-        CURL::Decode(decode);
-        CLog::Log(LOGDEBUG, "VideoInfoScanner: Could not enumerate file %s", CURL::GetRedacted(decode).c_str());
-      }
+        CLog::Log(LOGDEBUG, "VideoInfoScanner: Could not enumerate file %s", CURL::GetRedacted(CURL::Decode(items[i]->GetPath())).c_str());
     }
   }
 
@@ -866,11 +862,11 @@ namespace VIDEO
 
     CStdString strLabel=item->GetPath();
     // URLDecode in case an episode is on a http/https/dav/davs:// source and URL-encoded like foo%201x01%20bar.avi
-    CURL::Decode(strLabel);
+    strLabel = CURL::Decode(strLabel);
 
     for (unsigned int i=0;i<expression.size();++i)
     {
-      CRegExp reg(true, true);
+      CRegExp reg(true, CRegExp::autoUtf8);
       if (!reg.RegComp(expression[i].regexp))
         continue;
 
@@ -939,7 +935,7 @@ namespace VIDEO
       // add what we found by now
       episodeList.push_back(episode);
 
-      CRegExp reg2(true, true);
+      CRegExp reg2(true, CRegExp::autoUtf8);
       // check the remainder of the string for any further episodes.
       if (!byDate && reg2.RegComp(g_advancedSettings.m_tvshowMultiPartEnumRegExp))
       {
@@ -1072,9 +1068,7 @@ namespace VIDEO
       strTitle = StringUtils::Format("%s - %ix%i - %s", showInfo->m_strTitle.c_str(), movieDetails.m_iSeason, movieDetails.m_iEpisode, strTitle.c_str());
     }
 
-    std::string redactPath = pItem->GetPath();
-    CURL::Decode(redactPath);
-    redactPath = CURL::GetRedacted(redactPath);
+    std::string redactPath(CURL::GetRedacted(CURL::Decode(pItem->GetPath())));
 
     CLog::Log(LOGDEBUG, "VideoInfoScanner: Adding new item to %s:%s", TranslateContent(content).c_str(), redactPath.c_str());
     long lResult = -1;
@@ -1294,6 +1288,8 @@ namespace VIDEO
 
   std::string CVideoInfoScanner::GetFanart(CFileItem *pItem, bool useLocal)
   {
+    if (!pItem)
+      return "";
     std::string fanart = pItem->GetArt("fanart");
     if (fanart.empty() && useLocal)
       fanart = pItem->FindLocalArt("fanart.jpg", true);
index b538603..39957fa 100644 (file)
@@ -490,7 +490,14 @@ void CVideoInfoTag::ToSortable(SortItem& sortable, Field field) const
   case FieldTagline:                  sortable[FieldTagline] = m_strTagLine; break;
   case FieldPlotOutline:              sortable[FieldPlotOutline] = m_strPlotOutline; break;
   case FieldPlot:                     sortable[FieldPlot] = m_strPlot; break;
-  case FieldTitle:                    sortable[FieldTitle] = m_strTitle; break;
+  case FieldTitle:
+  {
+    // make sure not to overwrite an existing path with an empty one
+    std::string title = m_strTitle;
+    if (!title.empty() || sortable.find(FieldTitle) == sortable.end())
+      sortable[FieldTitle] = title;
+    break;
+  }
   case FieldVotes:                    sortable[FieldVotes] = m_strVotes; break;
   case FieldStudio:                   sortable[FieldStudio] = m_studio; break;
   case FieldTrailer:                  sortable[FieldTrailer] = m_strTrailer; break;
@@ -498,7 +505,14 @@ void CVideoInfoTag::ToSortable(SortItem& sortable, Field field) const
   case FieldTime:                     sortable[FieldTime] = GetDuration(); break;
   case FieldFilename:                 sortable[FieldFilename] = m_strFile; break;
   case FieldMPAA:                     sortable[FieldMPAA] = m_strMPAARating; break;
-  case FieldPath:                     sortable[FieldPath] = m_strFileNameAndPath; break;
+  case FieldPath:
+  {
+    // make sure not to overwrite an existing path with an empty one
+    std::string path = GetPath();
+    if (!path.empty() || sortable.find(FieldPath) == sortable.end())
+      sortable[FieldPath] = path;
+    break;
+  }
   case FieldSortTitle:                sortable[FieldSortTitle] = m_strSortTitle; break;
   case FieldTvShowStatus:             sortable[FieldTvShowStatus] = m_strStatus; break;
   case FieldProductionCode:           sortable[FieldProductionCode] = m_strProductionCode; break;
index 7f4f375..418400f 100644 (file)
@@ -295,8 +295,7 @@ bool CVideoThumbLoader::LoadItemCached(CFileItem* pItem)
 
 bool CVideoThumbLoader::LoadItemLookup(CFileItem* pItem)
 {
-  if (pItem->m_bIsShareOrDrive
-  ||  pItem->IsParentFolder())
+  if (pItem->m_bIsShareOrDrive || pItem->IsParentFolder() || pItem->GetPath() == "add")
     return false;
 
   if (pItem->HasVideoInfoTag()                         &&
index d4748b3..1be5b6b 100644 (file)
@@ -30,6 +30,8 @@
 #include "filesystem/PluginDirectory.h"
 #include "filesystem/SpecialProtocol.h"
 #include "guilib/GUIImage.h"
+#include "guilib/GUIKeyboardFactory.h"
+#include "guilib/Key.h"
 #include "settings/MediaSettings.h"
 #include "settings/Settings.h"
 #include "settings/VideoSettings.h"
@@ -52,6 +54,7 @@ using namespace XFILE;
 #define CONTROL_SUBSEXIST            130
 #define CONTROL_SUBSTATUS            140
 #define CONTROL_SERVICELIST          150
+#define CONTROL_MANUALSEARCH         160
 
 /*! \brief simple job to retrieve a directory and store a string (language)
  */
@@ -112,7 +115,9 @@ CGUIDialogSubtitles::~CGUIDialogSubtitles(void)
 
 bool CGUIDialogSubtitles::OnMessage(CGUIMessage& message)
 {
-  if  (message.GetMessage() == GUI_MSG_CLICKED)
+  if  (message.GetMessage() == GUI_MSG_CLICKED &&
+       (message.GetParam1() == ACTION_SELECT_ITEM ||
+        message.GetParam1() == ACTION_MOUSE_LEFT_CLICK))
   {
     int iControl = message.GetSenderId();
 
@@ -138,6 +143,15 @@ bool CGUIDialogSubtitles::OnMessage(CGUIMessage& message)
 
       return true;
     }
+    else if (iControl == CONTROL_MANUALSEARCH)
+    {
+      //manual search
+      if (CGUIKeyboardFactory::ShowAndGetInput(m_strManualSearch, g_localizeStrings.Get(24121), true))
+      {
+        Search(m_strManualSearch);
+        return true;
+      }
+    }
   }
   else if (message.GetMessage() == GUI_MSG_WINDOW_DEINIT)
   {
@@ -177,7 +191,7 @@ void CGUIDialogSubtitles::Process(unsigned int currentTime, CDirtyRegionList &di
     std::string status;
     CFileItemList subs;
     {
-      CSingleLock lock(m_section);
+      CSingleLock lock(m_critsection);
       status = m_status;
       subs.Assign(*m_subtitles);
     }
@@ -290,7 +304,7 @@ const CFileItemPtr CGUIDialogSubtitles::GetService() const
   return CFileItemPtr();
 }
 
-void CGUIDialogSubtitles::Search()
+void CGUIDialogSubtitles::Search(const std::string &search/*=""*/)
 {
   if (m_currentService.empty())
     return; // no services available
@@ -299,7 +313,13 @@ void CGUIDialogSubtitles::Search()
   ClearSubtitles();
 
   CURL url("plugin://" + m_currentService + "/");
-  url.SetOption("action", "search");
+  if (!search.empty())
+  {
+    url.SetOption("action", "manualsearch");
+    url.SetOption("searchstring", search);
+  }
+  else
+    url.SetOption("action", "search");
 
   const CSetting *setting = CSettings::Get().GetSetting("subtitles.languages");
   if (setting)
@@ -313,7 +333,7 @@ void CGUIDialogSubtitles::OnJobComplete(unsigned int jobID, bool success, CJob *
   const CURL &url             = ((CSubtitlesJob *)job)->GetURL();
   const CFileItemList *items  = ((CSubtitlesJob *)job)->GetItems();
   const std::string &language = ((CSubtitlesJob *)job)->GetLanguage();
-  if (url.GetOption("action") == "search")
+  if (url.GetOption("action") == "search" || url.GetOption("action") == "manualsearch")
     OnSearchComplete(items);
   else
     OnDownloadComplete(items, language);
@@ -322,7 +342,7 @@ void CGUIDialogSubtitles::OnJobComplete(unsigned int jobID, bool success, CJob *
 
 void CGUIDialogSubtitles::OnSearchComplete(const CFileItemList *items)
 {
-  CSingleLock lock(m_section);
+  CSingleLock lock(m_critsection);
   m_subtitles->Assign(*items);
   UpdateStatus(SEARCH_COMPLETE);
   m_updateSubsList = true;
@@ -331,7 +351,7 @@ void CGUIDialogSubtitles::OnSearchComplete(const CFileItemList *items)
 
 void CGUIDialogSubtitles::UpdateStatus(STATUS status)
 {
-  CSingleLock lock(m_section);
+  CSingleLock lock(m_critsection);
   std::string label;
   switch (status)
   {
@@ -458,7 +478,7 @@ void CGUIDialogSubtitles::ClearSubtitles()
 {
   CGUIMessage msg(GUI_MSG_LABEL_RESET, GetID(), CONTROL_SUBLIST);
   OnMessage(msg);
-  CSingleLock lock(m_section);
+  CSingleLock lock(m_critsection);
   m_subtitles->Clear();
 }
 
index 18705ca..f72e9fd 100644 (file)
@@ -49,7 +49,7 @@ protected:
   enum STATUS { NO_SERVICES = 0, SEARCHING, SEARCH_COMPLETE, DOWNLOADING };
   void UpdateStatus(STATUS status);
 
-  void Search();
+  void Search(const std::string &search="");
   void OnSearchComplete(const CFileItemList *items);
 
   void Download(const CFileItem &subtitle);
@@ -57,11 +57,12 @@ protected:
 
   void SetSubtitles(const std::string &subtitle);
 
-  CCriticalSection m_section;
+  CCriticalSection m_critsection;
   CFileItemList* m_subtitles;
   CFileItemList* m_serviceItems;
   std::string    m_currentService;
   std::string    m_status;
+  CStdString     m_strManualSearch;
   bool           m_pausedOnRun;
   bool           m_updateSubsList; ///< true if we need to update our subs list
 };
index bca5a63..03f1aa6 100644 (file)
@@ -305,11 +305,14 @@ void CGUIDialogVideoInfo::SetMovie(const CFileItem *item)
       m_movieItem->m_dateTime = m_movieItem->GetVideoInfoTag()->m_premiered;
       if(m_movieItem->GetVideoInfoTag()->m_iYear == 0 && m_movieItem->m_dateTime.IsValid())
         m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear();
-      m_movieItem->SetProperty("totalepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode);
-      m_movieItem->SetProperty("numepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); // info view has no concept of current watched/unwatched filter as we could come here from files view, but set for consistency
-      m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount);
-      m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount);
-      m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0;
+      if (!m_movieItem->HasProperty("totalepisodes"))
+      {
+        m_movieItem->SetProperty("totalepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode);
+        m_movieItem->SetProperty("numepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); // info view has no concept of current watched/unwatched filter as we could come here from files view, but set for consistency
+        m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount);
+        m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount);
+        m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0;
+      }
     }
     else if (type == VIDEODB_CONTENT_EPISODES)
     {
index d51e7f7..548d0ff 100644 (file)
@@ -236,34 +236,40 @@ bool CGUIWindowFullScreen::OnAction(const CAction &action)
     {
       if (g_application.CurrentFileItem().IsLiveTV())
       {
-          CPVRChannelPtr channel;
-        int iChannelNumber = -1;
-        g_PVRManager.GetCurrentChannel(channel);
+        CPVRChannelPtr playingChannel;
+        g_PVRManager.GetCurrentChannel(playingChannel);
 
         if (action.GetID() == REMOTE_0)
         {
-          iChannelNumber = g_PVRManager.GetPreviousChannel();
-          if (iChannelNumber > 0)
-            CLog::Log(LOGDEBUG, "switch to channel number %d", iChannelNumber);
-          else
-            CLog::Log(LOGDEBUG, "no previous channel number found");
+          CPVRChannelGroupPtr group = g_PVRChannelGroups->GetPreviousPlayedGroup();
+          if (group)
+          {
+            g_PVRManager.SetPlayingGroup(group);
+            CFileItemPtr fileItem = group->GetLastPlayedChannel(playingChannel->ChannelID());
+            if (fileItem && fileItem->HasPVRChannelInfoTag())
+            {
+              CLog::Log(LOGDEBUG, "%s - switch to channel number %d", __FUNCTION__, fileItem->GetPVRChannelInfoTag()->ChannelNumber());
+              g_application.OnAction(CAction(ACTION_CHANNEL_SWITCH, (float) fileItem->GetPVRChannelInfoTag()->ChannelNumber()));
+            }
+          }
         }
         else
         {
           int autoCloseTime = CSettings::Get().GetBool("pvrplayback.confirmchannelswitch") ? 0 : g_advancedSettings.m_iPVRNumericChannelSwitchTimeout;
           CStdString strChannel = StringUtils::Format("%i", action.GetID() - REMOTE_0);
           if (CGUIDialogNumeric::ShowAndGetNumber(strChannel, g_localizeStrings.Get(19000), autoCloseTime) || autoCloseTime)
-            iChannelNumber = atoi(strChannel.c_str());
-        }
-
-        if (iChannelNumber > 0 && iChannelNumber != channel->ChannelNumber())
-        {
-          CPVRChannelGroupPtr selectedGroup = g_PVRManager.GetPlayingGroup(channel->IsRadio());
-          CFileItemPtr channel = selectedGroup->GetByChannelNumber(iChannelNumber);
-          if (!channel || !channel->HasPVRChannelInfoTag())
-            return false;
+          {
+            int iChannelNumber = atoi(strChannel.c_str());
+            if (iChannelNumber > 0 && iChannelNumber != playingChannel->ChannelNumber())
+            {
+              CPVRChannelGroupPtr selectedGroup = g_PVRManager.GetPlayingGroup(playingChannel->IsRadio());
+              CFileItemPtr channel = selectedGroup->GetByChannelNumber(iChannelNumber);
+              if (!channel || !channel->HasPVRChannelInfoTag())
+                return false;
 
-          g_application.OnAction(CAction(ACTION_CHANNEL_SWITCH, (float)iChannelNumber));
+              g_application.OnAction(CAction(ACTION_CHANNEL_SWITCH, (float)iChannelNumber));
+            }
+          }
         }
       }
       else
index 2c8abde..9bbd897 100644 (file)
@@ -1371,7 +1371,18 @@ bool CGUIWindowVideoBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
         CPlayerCoreFactory::Get().GetPlayers(*item, vecCores);
       g_application.m_eForcedNextPlayer = CPlayerCoreFactory::Get().SelectPlayerDialog(vecCores);
       if (g_application.m_eForcedNextPlayer != EPC_NONE)
-        OnClick(itemNumber);
+      {
+        // any other select actions but play or resume, resume, play or playpart
+        // don't make any sense here since the user already decided that he'd
+        // like to play the item (just with a specific player)
+        VideoSelectAction selectAction = (VideoSelectAction)CSettings::Get().GetInt("myvideos.selectaction");
+        if (selectAction != SELECT_ACTION_PLAY_OR_RESUME &&
+            selectAction != SELECT_ACTION_RESUME &&
+            selectAction != SELECT_ACTION_PLAY &&
+            selectAction != SELECT_ACTION_PLAYPART)
+          selectAction = SELECT_ACTION_PLAY_OR_RESUME;
+        return OnFileAction(itemNumber, selectAction);
+      }
       return true;
     }
 
@@ -1390,6 +1401,12 @@ bool CGUIWindowVideoBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
     OnInfo(itemNumber);
     return true;
 
+  case CONTEXT_BUTTON_STOP_SCANNING:
+    {
+      g_application.StopVideoScan();
+      return true;
+    }
+
   case CONTEXT_BUTTON_SCAN:
     {
       if( !item)
index 98150b2..37e01d9 100644 (file)
@@ -284,6 +284,45 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
       dir.GetQueryParams(items.GetPath(),params);
       VIDEODATABASEDIRECTORY::NODE_TYPE node = dir.GetDirectoryChildType(items.GetPath());
 
+      // perform the flattening logic for tvshows with a single (unwatched) season (+ optional special season)
+      if (node == NODE_TYPE_SEASONS)
+      {
+        int itemsSize = items.GetObjectCount();
+        int firstIndex = items.Size() - itemsSize;
+        // check if the last item is the "All seasons" item which should be ignored for flattening
+        if (items[items.Size() - 1]->GetVideoInfoTag()->m_iSeason < 0)
+          itemsSize -= 1;
+
+        int iFlatten = CSettings::Get().GetInt("videolibrary.flattentvshows");
+        bool bFlatten = (itemsSize == 1 && iFlatten == 1) || iFlatten == 2 ||                              // flatten if one one season or if always flatten is enabled
+                        (itemsSize == 2 && iFlatten == 1 &&                                                // flatten if one season + specials
+                         (items[firstIndex]->GetVideoInfoTag()->m_iSeason == 0 || items[firstIndex + 1]->GetVideoInfoTag()->m_iSeason == 0));
+
+        if (iFlatten > 0 && !bFlatten && (WatchedMode)CMediaSettings::Get().GetWatchedMode("tvshows") == WatchedModeUnwatched)
+        {
+          int count = 0;
+          for(int i = 0; i < items.Size(); i++)
+          {
+            const CFileItemPtr item = items.Get(i);
+            if (item->GetProperty("unwatchedepisodes").asInteger() != 0 && item->GetVideoInfoTag()->m_iSeason > 0)
+              count++;
+          }
+          bFlatten = (count < 2); // flatten if there is only 1 unwatched season (not counting specials)
+        }
+
+        if (bFlatten)
+        { // flatten if one season or flatten always
+          items.Clear();
+
+          CVideoDbUrl videoUrl;
+          if (!videoUrl.FromString(items.GetPath()))
+            return false;
+
+          videoUrl.AppendPath("-2/");
+          return GetDirectory(videoUrl.ToString(), items);
+        }
+      }
+
       items.SetArt("thumb", "");
       if (node == VIDEODATABASEDIRECTORY::NODE_TYPE_EPISODES ||
           node == NODE_TYPE_SEASONS                          ||
@@ -561,7 +600,6 @@ void CGUIWindowVideoNav::DoSearch(const CStdString& strSearch, CFileItemList& it
   CStdString strGenre = g_localizeStrings.Get(515); // Genre
   CStdString strActor = g_localizeStrings.Get(20337); // Actor
   CStdString strDirector = g_localizeStrings.Get(20339); // Director
-  CStdString strMovie = g_localizeStrings.Get(20338); // Movie
 
   //get matching names
   m_database.GetMoviesByName(strSearch, tempItems);
@@ -614,7 +652,7 @@ void CGUIWindowVideoNav::DoSearch(const CStdString& strSearch, CFileItemList& it
   AppendAndClearSearchItems(tempItems, "[" + g_localizeStrings.Get(20365) + "] ", items);
 
   m_database.GetMoviesByPlot(strSearch, tempItems);
-  AppendAndClearSearchItems(tempItems, "[" + strMovie + " " + g_localizeStrings.Get(207) + "] ", items);
+  AppendAndClearSearchItems(tempItems, "[" + g_localizeStrings.Get(20323) + "] ", items);
 }
 
 void CGUIWindowVideoNav::PlayItem(int iItem)
index 898005f..abb1414 100644 (file)
@@ -292,7 +292,7 @@ void CGUIViewState::SetSortMethod(SortBy sortBy, SortAttribute sortAttributes /*
   {
     if (m_sortMethods[i].m_sortDescription.sortBy == sortBy &&
        // don't care about SortAttributeIgnoreFolders as it wasn't part of the old sorting comparison
-        m_sortMethods[i].m_sortDescription.sortAttributes == (sortAttributes & ~SortAttributeIgnoreFolders))
+       (m_sortMethods[i].m_sortDescription.sortAttributes & ~SortAttributeIgnoreFolders) == (sortAttributes & ~SortAttributeIgnoreFolders))
     {
       m_currentSortMethod = i;
       break;
index 8470ce8..9b20f6d 100644 (file)
@@ -290,7 +290,7 @@ extern "C" ADDON_STATUS ADDON_SetSetting(const char* id, const void* value)
     }
     return ADDON_STATUS_OK;
   }
-  // It is now time to set the settings got from xmbc
+  // It is now time to set the settings got from xbmc
   if (strcmp(id, "Use Preset") == 0)
     OnAction(34, &value);
   else if (strcmp(id, "Automatic Blend Time") == 0)
index 0e561aa..9d0e97f 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "addons/include/xbmc_vis_dll.h"
 #include <string.h>
+#include <stdlib.h>
 #include <math.h>
 #include <stdint.h>
 
 #define glLoadIdentity()          vis_shader->LoadIdentity()
 #define glFrustum(a,b,c,d,e,f)    vis_shader->Frustum(a,b,c,d,e,f)
 
-GLenum  g_mode = GL_TRIANGLES;
-float g_fWaveform[2][512];
-const char *frag = "precision mediump float; \n"
+static GLenum  g_mode = GL_TRIANGLES;
+static const char *frag = "precision mediump float; \n"
                    "varying lowp vec4 m_colour; \n"
                    "void main () \n"
                    "{ \n"
                    "  gl_FragColor = m_colour; \n"
                    "}\n";
 
-const char *vert = "attribute vec4 m_attrpos;\n"
+static const char *vert = "attribute vec4 m_attrpos;\n"
                    "attribute vec4 m_attrcol;\n"
                    "attribute vec4 m_attrcord0;\n"
                    "attribute vec4 m_attrcord1;\n"
@@ -86,24 +86,24 @@ const char *vert = "attribute vec4 m_attrpos;\n"
                    "  m_cord1     = m_attrcord1;\n"
                    "}\n";
 
-CVisGUIShader *vis_shader = NULL;
+static CVisGUIShader *vis_shader = NULL;
 
 #elif defined(HAS_SDL_OPENGL)
 #include <GL/glew.h>
-GLenum  g_mode = GL_FILL;
+static GLenum  g_mode = GL_FILL;
 
 #endif
 
 #define NUM_BANDS 16
 
-GLfloat x_angle = 20.0, x_speed = 0.0;
-GLfloat y_angle = 45.0, y_speed = 0.5;
-GLfloat z_angle = 0.0, z_speed = 0.0;
-GLfloat heights[16][16], cHeights[16][16], scale;
-GLfloat hSpeed = 0.05;
+static GLfloat x_angle = 20.0, x_speed = 0.0;
+static GLfloat y_angle = 45.0, y_speed = 0.5;
+static GLfloat z_angle = 0.0, z_speed = 0.0;
+static GLfloat heights[16][16], cHeights[16][16], scale;
+static GLfloat hSpeed = 0.05;
 
 #if defined(HAS_SDL_OPENGL)
-void draw_rectangle(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2)
+static void draw_rectangle(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2)
 {
   if(y1 == y2)
   {
@@ -127,7 +127,7 @@ void draw_rectangle(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2,
   }
 }
 
-void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue )
+static void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue, int index)
 {
   GLfloat width = 0.1;
 
@@ -158,67 +158,105 @@ void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, G
 
 #elif defined(HAS_GLES)
 
-void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue )
+static GLfloat  *m_col;
+static GLfloat  *m_ver;
+static GLushort *m_idx;
+
+static void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue, int index)
 {
-  GLfloat col[] =  {
-                      red * 0.1f, green * 0.1f, blue * 0.1f,
-                      red * 0.2f, green * 0.2f, blue * 0.2f,
-                      red * 0.3f, green * 0.3f, blue * 0.3f,
-                      red * 0.4f, green * 0.4f, blue * 0.4f,
-                      red * 0.5f, green * 0.5f, blue * 0.5f,
-                      red * 0.6f, green * 0.6f, blue * 0.6f,
-                      red * 0.7f, green * 0.7f, blue * 0.7f,
-                      red * 0.8f, green * 0.8f, blue *0.8f
-                   };
-  GLfloat ver[] =  {
-                      x_offset + 0.0f, 0.0f,    z_offset + 0.0f,
-                      x_offset + 0.1f, 0.0f,    z_offset + 0.0f,
-                      x_offset + 0.1f, 0.0f,    z_offset + 0.1f,
-                      x_offset + 0.0f, 0.0f,    z_offset + 0.1f,
-                      x_offset + 0.0f, height,  z_offset + 0.0f,
-                      x_offset + 0.1f, height,  z_offset + 0.0f,
-                      x_offset + 0.1f, height,  z_offset + 0.1f,
-                      x_offset + 0.0f, height,  z_offset + 0.1f
-                   };
-
-  GLubyte idx[] =  {
-                      // Bottom
-                      0, 1, 2,
-                      0, 2, 3,
-                      // Left
-                      0, 4, 7,
-                      0, 7, 3,
-                      // Back
-                      3, 7, 6,
-                      3, 6, 2,
-                      // Right
-                      1, 5, 6,
-                      1, 6, 2,
-                      // Front
-                      0, 4, 5,
-                      0, 5, 1,
-                      // Top
-                      4, 5, 6,
-                      4, 6, 7
-                   };
-
-  GLint   posLoc = vis_shader->GetPosLoc();
-  GLint   colLoc = vis_shader->GetColLoc();
-
-  glVertexAttribPointer(colLoc, 3, GL_FLOAT, 0, 0, col);
-  glVertexAttribPointer(posLoc, 3, GL_FLOAT, 0, 0, ver);
-
-  glEnableVertexAttribArray(posLoc);
-  glEnableVertexAttribArray(colLoc);
-
-  glDrawElements(g_mode, 36, GL_UNSIGNED_BYTE, idx);
-
-  glDisableVertexAttribArray(posLoc);
-  glDisableVertexAttribArray(colLoc);
+  if (!m_col || !m_ver || !m_idx)
+    return;
+
+  // avoid zero sized bars, which results in overlapping triangles of same depth and display artefacts
+  height = std::max(height, 1e-3f);
+  GLfloat *ver = m_ver + 3 * 8 * index;
+  // just need to update the height vertex, all else is the same
+  for (int i=0; i<8; i++)
+  {
+    ver[1] = (((i+0)>>2)&1) * height;
+    ver += 3;
+  }
+  // on last index, draw the object
+  if (index == 16*16-1)
+  {
+    GLint   posLoc = vis_shader->GetPosLoc();
+    GLint   colLoc = vis_shader->GetColLoc();
+
+    glVertexAttribPointer(colLoc, 3, GL_FLOAT, 0, 0, m_col);
+    glVertexAttribPointer(posLoc, 3, GL_FLOAT, 0, 0, m_ver);
+
+    glEnableVertexAttribArray(posLoc);
+    glEnableVertexAttribArray(colLoc);
+
+    glDrawElements(g_mode, 16*16*36, GL_UNSIGNED_SHORT, m_idx);
+
+    glDisableVertexAttribArray(posLoc);
+    glDisableVertexAttribArray(colLoc);
+  }
+}
+
+static void init_bars(void)
+{
+  if (!m_col || !m_ver || !m_idx)
+    return;
+
+  GLfloat x_offset, z_offset, r_base, b_base;
+  for(int y = 0; y < 16; y++)
+  {
+    z_offset = -1.6 + ((15 - y) * 0.2);
+
+    b_base = y * (1.0 / 15);
+    r_base = 1.0 - b_base;
+
+    for(int x = 0; x < 16; x++)
+    {
+      x_offset = -1.6 + ((float)x * 0.2);
+
+      GLfloat red = r_base - (float(x) * (r_base / 15.0));
+      GLfloat green = (float)x * (1.0 / 15);
+      GLfloat blue = b_base;
+      int index = 16*y+x;
+      GLfloat *col = m_col + 3 * 8 * index;
+      for (int i=0; i<8; i++)
+      {
+        float scale = 0.1f * i;
+        *col++ = red   * scale;
+        *col++ = green * scale;
+        *col++ = blue  * scale;
+      }
+      GLfloat *ver = m_ver + 3 * 8 * index;
+      for (int i=0; i<8; i++)
+      {
+        *ver++ = x_offset + (((i+1)>>1)&1) * 0.1f;
+        *ver++ = 0; // height - filled in later
+        *ver++ = z_offset + (((i+0)>>1)&1) * 0.1f;
+      }
+      GLushort *idx = m_idx + 36 * index;
+      GLushort startidx = 8 * index;
+      // Bottom
+      *idx++ = startidx + 0; *idx++ = startidx + 1; *idx++ = startidx + 2;
+      *idx++ = startidx + 0; *idx++ = startidx + 2; *idx++ = startidx + 3;
+      // Left
+      *idx++ = startidx + 0; *idx++ = startidx + 4; *idx++ = startidx + 7;
+      *idx++ = startidx + 0; *idx++ = startidx + 7; *idx++ = startidx + 3;
+      // Back
+      *idx++ = startidx + 3; *idx++ = startidx + 7; *idx++ = startidx + 6;
+      *idx++ = startidx + 3; *idx++ = startidx + 6; *idx++ = startidx + 2;
+      // Right
+      *idx++ = startidx + 1; *idx++ = startidx + 5; *idx++ = startidx + 6;
+      *idx++ = startidx + 1; *idx++ = startidx + 6; *idx++ = startidx + 2;
+      // Front
+      *idx++ = startidx + 0; *idx++ = startidx + 4; *idx++ = startidx + 5;
+      *idx++ = startidx + 0; *idx++ = startidx + 5; *idx++ = startidx + 1;
+      // Top
+      *idx++ = startidx + 4; *idx++ = startidx + 5; *idx++ = startidx + 6;
+      *idx++ = startidx + 4; *idx++ = startidx + 6; *idx++ = startidx + 7;
+    }
+  }
 }
 #endif
 
-void draw_bars(void)
+static void draw_bars(void)
 {
   int x,y;
   GLfloat x_offset, z_offset, r_base, b_base;
@@ -252,7 +290,7 @@ void draw_bars(void)
       }
       draw_bar(x_offset, z_offset,
         cHeights[y][x], r_base - (float(x) * (r_base / 15.0)),
-        (float)x * (1.0 / 15), b_base);
+        (float)x * (1.0 / 15), b_base, 16*y+x);
     }
   }
   glEnd();
@@ -281,6 +319,10 @@ ADDON_STATUS ADDON_Create(void* hdl, void* props)
     delete vis_shader;
     return ADDON_STATUS_UNKNOWN;
   }  
+  m_col = (GLfloat  *)malloc(16*16*3*8 * sizeof(GLfloat *));
+  m_ver = (GLfloat  *)malloc(16*16*3*8 * sizeof(GLfloat *));
+  m_idx = (GLushort *)malloc(16*16*36  * sizeof(GLushort *));
+  init_bars();
 #endif
 
   scale = 1.0 / log(256.0);
@@ -454,6 +496,12 @@ extern "C" void ADDON_Destroy()
     vis_shader->Free();
     delete vis_shader;
   }
+  free(m_col);
+  free(m_ver);
+  free(m_idx);
+  m_col = NULL;
+  m_ver = NULL;
+  m_idx = NULL;
 #endif
 }
 
diff --git a/xbmc/visualizations/Vortex/Vortex/Vortex.sln b/xbmc/visualizations/Vortex/Vortex/Vortex.sln
new file mode 100644 (file)
index 0000000..875f4c6
--- /dev/null
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vortex", "Vortex.vcxproj", "{AFF288D5-8A77-4817-8DD9-364E183CDBF8}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Release|Win32 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug|Win32.ActiveCfg = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Debug|Win32.Build.0 = Debug|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release|Win32.ActiveCfg = Release|Win32
+               {AFF288D5-8A77-4817-8DD9-364E183CDBF8}.Release|Win32.Build.0 = Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj b/xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj
new file mode 100644 (file)
index 0000000..e588c3c
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{AFF288D5-8A77-4817-8DD9-364E183CDBF8}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Vortex</RootNamespace>
+    <ProjectName>visVortex</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
+    <OutDir>$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
+    <TargetName>Vortex_win32dx</TargetName>
+    <TargetExt>.vis</TargetExt>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
+    <OutDir>$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
+    <TargetName>Vortex_win32dx</TargetName>
+    <TargetExt>.vis</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>_USRDLL;VORTEX_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\VortexVis\core;..\VortexVis\effects;..\angelscript\angelscript\include;..\..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>D3dx9.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>libcmtd</IgnoreSpecificDefaultLibraries>
+    </Link>
+    <PostBuildEvent>
+      <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.vortex\$(TargetFileName)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>_USRDLL;VORTEX_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\VortexVis\core;..\VortexVis\effects;..\angelscript\angelscript\include;..\..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>D3dx9.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.vortex\$(TargetFileName)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\angelscript\add_on\scriptstring\scriptstring.cpp" />
+    <ClCompile Include="..\angelscript\add_on\scriptstring\scriptstring_utils.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_arrayobject.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_atomic.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_builder.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_bytecode.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_arm.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_mips.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_ppc.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_ppc_64.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_sh4.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_x64_gcc.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_x86.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_xenon.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_compiler.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_configgroup.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_context.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_datatype.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_gc.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_generic.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_globalproperty.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_memory.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_module.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_objecttype.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_outputbuffer.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_parser.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_restore.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptcode.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptengine.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptfunction.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptnode.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptobject.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_string.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_string_util.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_thread.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_tokenizer.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_typeinfo.cpp" />
+    <ClCompile Include="..\angelscript\angelscript\source\as_variablescope.cpp" />
+    <ClCompile Include="..\VortexVis\Core\DebugConsole.cpp" />
+    <ClCompile Include="..\VortexVis\Core\EffectBase.cpp" />
+    <ClCompile Include="..\VortexVis\Core\fft.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Mesh.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Preset.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Renderer.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Shader.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Texture.cpp" />
+    <ClCompile Include="..\VortexVis\Core\Vortex.cpp" />
+    <ClCompile Include="..\VortexVis\Core\XmlDocument.cpp" />
+    <ClCompile Include="..\VortexVis\Effects\Map.cpp" />
+    <ClCompile Include="..\VortexVis\Effects\Tunnel.cpp" />
+    <ClCompile Include="..\VortexVis\Effects\VoicePrint.cpp" />
+    <ClCompile Include="..\VortexXBMC\VortexXBMC.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\angelscript\add_on\scriptstring\scriptstring.h" />
+    <ClInclude Include="..\VortexVis\Core\DebugConsole.h" />
+    <ClInclude Include="..\VortexVis\Core\EffectBase.h" />
+    <ClInclude Include="..\VortexVis\Core\fft.h" />
+    <ClInclude Include="..\VortexVis\Core\Mesh.h" />
+    <ClInclude Include="..\VortexVis\Core\Preset.h" />
+    <ClInclude Include="..\VortexVis\Core\Renderer.h" />
+    <ClInclude Include="..\VortexVis\Core\Shader.h" />
+    <ClInclude Include="..\VortexVis\Core\Texture.h" />
+    <ClInclude Include="..\VortexVis\Core\Vortex.h" />
+    <ClInclude Include="..\VortexVis\Core\XBMCTypes.h" />
+    <ClInclude Include="..\VortexVis\Core\XmlDocument.h" />
+    <ClInclude Include="..\VortexVis\Effects\Map.h" />
+    <ClInclude Include="..\VortexVis\Effects\Tunnel.h" />
+    <ClInclude Include="..\VortexVis\Effects\VoicePrint.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\project\VS2010Express\XbmcThreads.vcxproj">
+      <Project>{034b1d02-ca92-455d-8866-db95bee49c10}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj.filters b/xbmc/visualizations/Vortex/Vortex/Vortex.vcxproj.filters
new file mode 100644 (file)
index 0000000..df6200c
--- /dev/null
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Core">
+      <UniqueIdentifier>{1ac7feaf-f9b1-425f-b8ae-e5a5f73a6f72}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Effects">
+      <UniqueIdentifier>{4fd0c1de-bcdb-4784-8573-45d524da87b8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\angelscript">
+      <UniqueIdentifier>{bd0ab410-dc08-46fb-b294-1f3e5ef4f12a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\angelscript\source">
+      <UniqueIdentifier>{77d1bd1e-c934-4594-966f-a5773f491581}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\angelscript\add_on">
+      <UniqueIdentifier>{98e8d217-f32e-4eec-87cd-05369f120e4a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\VortexXBMC\VortexXBMC.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\DebugConsole.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\EffectBase.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\fft.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Mesh.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Preset.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Renderer.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Shader.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Texture.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\Vortex.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Core\XmlDocument.cpp">
+      <Filter>Source Files\Core</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_arrayobject.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_variablescope.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_atomic.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_builder.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_bytecode.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_arm.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_mips.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_ppc.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_ppc_64.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_sh4.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_x64_gcc.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_x86.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_callfunc_xenon.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_compiler.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_configgroup.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_context.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_datatype.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_gc.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_generic.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_globalproperty.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_memory.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_module.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_objecttype.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_outputbuffer.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_parser.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_restore.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptcode.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptengine.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptfunction.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptnode.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_scriptobject.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_string.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_string_util.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_thread.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_tokenizer.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\angelscript\source\as_typeinfo.cpp">
+      <Filter>Source Files\angelscript\source</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\add_on\scriptstring\scriptstring.cpp">
+      <Filter>Source Files\angelscript\add_on</Filter>
+    </ClCompile>
+    <ClCompile Include="..\angelscript\add_on\scriptstring\scriptstring_utils.cpp">
+      <Filter>Source Files\angelscript\add_on</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Effects\Map.cpp">
+      <Filter>Source Files\Effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Effects\Tunnel.cpp">
+      <Filter>Source Files\Effects</Filter>
+    </ClCompile>
+    <ClCompile Include="..\VortexVis\Effects\VoicePrint.cpp">
+      <Filter>Source Files\Effects</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\VortexVis\Core\DebugConsole.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\EffectBase.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\fft.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Mesh.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Preset.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Renderer.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Shader.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Texture.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\Vortex.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\XBMCTypes.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Core\XmlDocument.h">
+      <Filter>Source Files\Core</Filter>
+    </ClInclude>
+    <ClInclude Include="..\angelscript\add_on\scriptstring\scriptstring.h">
+      <Filter>Source Files\angelscript\add_on</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Effects\Map.h">
+      <Filter>Source Files\Effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Effects\Tunnel.h">
+      <Filter>Source Files\Effects</Filter>
+    </ClInclude>
+    <ClInclude Include="..\VortexVis\Effects\VoicePrint.h">
+      <Filter>Source Files\Effects</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
index e02b655..423a1c8 100644 (file)
@@ -21,7 +21,7 @@
 #define _SHADER_H_
 
 #include <vector>
-#include "d3dx9.h"
+#include <d3dx9.h>
 #include "Renderer.h"
 
 enum EShaderType
index 682724e..f2189a6 100644 (file)
@@ -95,10 +95,10 @@ public:
        char       Rating;
 };
 
-char g_TexturePath[ 512 ] = "special://xbmc//addons/visualization.vortex//Textures//";
-char g_PresetPath[ 512 ] = "special://xbmc//addons/visualization.vortex//Presets//";
-char g_TransitionPath[ 512 ] = "special://xbmc//addons/visualization.vortex//Transitions//";
-char g_AnnouncePath[ 512 ] = "special://xbmc//addons/visualization.vortex//Announcements//";
+char g_TexturePath[ 512 ] = "special://xbmc/addons/visualization.vortex/resources/Textures/";
+char g_PresetPath[ 512 ] = "special://xbmc/addons/visualization.vortex/resources/Presets/";
+char g_TransitionPath[ 512 ] = "special://xbmc//addons/visualization.vortex/resources/Transitions/";
+char g_AnnouncePath[ 512 ] = "special://xbmc/addons/visualization.vortex/resources/Announcements/";
 
 class FileHolder
 {
@@ -359,7 +359,7 @@ void Vortex::Init( LPDIRECT3DDEVICE9 pD3DDevice, int iPosX, int iPosY, int iWidt
        g_AnnouncePreset.Init(m_pScriptEngine, "ANNOUNCE");
        g_AnnouncePreset.m_presetId = 3;
 
-       if ( CSettings::Get().PresetLocked )
+  if ( GetUserSettings().PresetLocked )
        {
                // Check that the preset locked in the settings file is still valid
                if ( g_currPresetId >= g_PresetFiles.NumFiles() || g_currPresetId < 0 )
@@ -367,7 +367,7 @@ void Vortex::Init( LPDIRECT3DDEVICE9 pD3DDevice, int iPosX, int iPosY, int iWidt
                        g_currPresetId = GetRandomPreset();
                }
        }
-       else if ( CSettings::Get().RandomPresetsEnabled )
+  else if ( GetUserSettings().RandomPresetsEnabled )
        {
                g_currPresetId = GetRandomPreset();
        }
@@ -379,7 +379,7 @@ void Vortex::Init( LPDIRECT3DDEVICE9 pD3DDevice, int iPosX, int iPosY, int iWidt
        char filename[ 256 ];
        sprintf( filename, "%s%s", g_PresetPath, g_PresetFiles.GetFilename( g_currPresetId ) );
        g_presets[ 0 ]->Begin( filename );
-       g_mainCounter = CSettings::Get().TimeBetweenPresets + ((rand() % 100) / 100.0f) * CSettings::Get().TimeBetweenPresetsRand;
+  g_mainCounter = GetUserSettings().TimeBetweenPresets + ((rand() % 100) / 100.0f) * GetUserSettings().TimeBetweenPresetsRand;
        g_currentState = STATE_RENDER_PRESET;
 }
 
@@ -479,7 +479,7 @@ float g_middle;
 float g_timePass;
 bool g_finished;
 
-void Vortex::AudioData( const short* pAudioData, int iAudioDataLength, float* pFreq, int iFreqDataLength )
+void Vortex::AudioData( const float* pAudioData, int iAudioDataLength, float* pFreq, int iFreqDataLength )
 {
        float tempWave[2][576];
 
@@ -809,7 +809,7 @@ void Vortex::Render()
        case STATE_RENDER_PRESET:
                {
                        //      OutputDebugString("STATE = STATE_RENDER_PRESET\n");
-                       if ( !CSettings::Get().PresetLocked )
+      if ( !GetUserSettings().PresetLocked )
                        {
                                g_mainCounter -= g_timePass;
                        }
@@ -821,7 +821,7 @@ void Vortex::Render()
                                if ( g_mainCounter <= 0 )
                                {
                                        // Not in a transition, preset not locked and time for a new preset
-                                       if ( CSettings::Get().RandomPresetsEnabled )
+          if ( GetUserSettings().RandomPresetsEnabled )
                                        {
                                                int nextPreset = GetRandomPreset();     
                                                if ( nextPreset == g_currPresetId )
@@ -843,14 +843,14 @@ void Vortex::Render()
                                }
 
                                g_finished = true;
-                               g_mainCounter = CSettings::Get().TimeBetweenPresets + ((rand() % 100) / 100.0f) * CSettings::Get().TimeBetweenPresetsRand;
+                               g_mainCounter = GetUserSettings().TimeBetweenPresets + ((rand() % 100) / 100.0f) * GetUserSettings().TimeBetweenPresetsRand;
 
                                // Load preset
                                sprintf(filename, "%s%s", g_PresetPath, g_PresetFiles.GetFilename( g_currPresetId ) );
                                if ( g_presets[ 1 ]->Begin( filename ) == true )
                                {
                                        // Load and begin transition
-                                       if ( CSettings::Get().TransitionsEnabled && g_TransitionFiles.NumFiles() != 0 )
+                                       if ( GetUserSettings().TransitionsEnabled && g_TransitionFiles.NumFiles() != 0 )
                                        {
                                                g_transitionId = ( g_transitionId + 1 ) % g_TransitionFiles.NumFiles();
                                                sprintf( filename, "%s%s", g_TransitionPath, g_TransitionFiles.GetFilename( g_transitionId ) );
@@ -880,7 +880,7 @@ void Vortex::Render()
                        //      OutputDebugString("STATE = STATE_TRANSITION\n");
                        if (g_finished)
                        {
-                               g_mainCounter = CSettings::Get().TimeBetweenPresets + ((rand() % 100) / 100.0f) * CSettings::Get().TimeBetweenPresetsRand;
+                               g_mainCounter = GetUserSettings().TimeBetweenPresets + ((rand() % 100) / 100.0f) * GetUserSettings().TimeBetweenPresetsRand;
                                SwapPresets();
                                g_finished = false;
 
@@ -913,7 +913,7 @@ void Vortex::Render()
 //     Renderer::Rect( -1.0, -1.0, 1.0, 1.0, 0xff000000 );
 /*
 
-       if ( CSettings::Get().ShowAudioAnalysis )
+       if ( GetUserSettings().ShowAudioAnalysis )
        {
                FLOAT BAR_WIDTH = 1.0f / 128;
                / *
@@ -994,12 +994,12 @@ void Vortex::Render()
        }
 
 */
-       if( CSettings::Get().ShowDebugConsole )
+       if( GetUserSettings().ShowDebugConsole )
        {
                DebugConsole::Render();
        }
 
-       if( CSettings::Get().ShowFPS )
+       if( GetUserSettings().ShowFPS )
        {
                char FrameRate[256];
                sprintf_s(FrameRate, 256, "FPS = %0.02f\n", fFPS );
index e515672..83912ac 100644 (file)
@@ -57,7 +57,7 @@ public:
        void Init( LPDIRECT3DDEVICE9 pD3DDevice, int iPosX, int iPosY, int iWidth, int iHeight, float fPixelRatio );
        void Start( int iChannels, int iSamplesPerSec, int iBitsPerSample, const char* szSongName );
        void Shutdown();
-       void AudioData( const short* pAudioData, int iAudioDataLength, float* pFreq, int iFreqDataLength );
+       void AudioData( const float* pAudioData, int iAudioDataLength, float* pFreq, int iFreqDataLength );
        void Render();
        void UpdateTrack( VisTrack* pVisTrack );
        void UpdateAlbumArt( char* artFilename );
index 0834774..aedf17f 100644 (file)
@@ -29,7 +29,7 @@
 Vortex* g_Vortex = NULL;
 
 // settings vector
-StructSetting** g_structSettings;
+//StructSetting** g_structSettings;
 
 extern "C" ADDON_STATUS ADDON_Create(void* hdl, void* props)
 {
@@ -41,7 +41,7 @@ extern "C" ADDON_STATUS ADDON_Create(void* hdl, void* props)
        g_Vortex = new Vortex;
        g_Vortex->Init( ( LPDIRECT3DDEVICE9 )visprops->device, visprops->x, visprops->y, visprops->width, visprops->height, visprops->pixelRatio );
 
-       return ADDON_STATUS_NEED_SETTINGS;
+       return ADDON_STATUS_NEED_SAVEDSETTINGS;
 }
 
 extern "C" void Start( int iChannels, int iSamplesPerSec, int iBitsPerSample, const char* szSongName )
@@ -59,7 +59,7 @@ extern "C" void ADDON_Stop()
        }
 }
 
-extern "C" void AudioData(const short* pAudioData, int iAudioDataLength, float *pFreqData, int iFreqDataLength)
+extern "C" void AudioData(const float* pAudioData, int iAudioDataLength, float *pFreqData, int iFreqDataLength)
 {
        g_Vortex->AudioData( pAudioData, iAudioDataLength, pFreqData, iFreqDataLength );
 }
@@ -151,7 +151,7 @@ extern "C" bool IsLocked()
 //-----------------------------------------------------------------------------
 extern "C" void ADDON_Destroy()
 {
-       Stop();
+       ADDON_Stop();
 }
 
 //-- HasSettings --------------------------------------------------------------
@@ -225,6 +225,10 @@ extern "C" ADDON_STATUS ADDON_SetSetting(const char* id, const void* value)
        {
                userSettings.ShowAudioAnalysis = *(bool*)value == 1;
        }
+  else if (strcmpi(id, "LockPreset") == 0)
+       {
+    userSettings.PresetLocked = *(bool*)value == 1;
+       }
        else
                return ADDON_STATUS_UNKNOWN;
 
index e3638bf..7b2ae06 100644 (file)
@@ -412,7 +412,7 @@ extern "C" ADDON_STATUS ADDON_SetSetting(const char* id, const void* value)
     }
     return ADDON_STATUS_OK;
   }
-  // It is now time to set the settings got from xmbc
+  // It is now time to set the settings got from xbmc
   if (strcmp(id, "quality")==0)
     ChooseQuality (*(int*)value);
   else if (strcmp(id, "shuffle")==0)
index cd04546..174be08 100644 (file)
@@ -60,6 +60,12 @@ FARPROC WINAPI delayHookNotifyFunc (unsigned dliNotify, PDelayLoadInfo pdli)
         HMODULE hMod = LoadLibraryEx(strDll.c_str(), 0, LOAD_WITH_ALTERED_SEARCH_PATH);
         return (FARPROC)hMod;
       }
+      if (stricmp(pdli->szDll, "libxslt.dll") == 0)
+      {
+        CStdString strDll = CSpecialProtocol::TranslatePath("special://xbmcbin/system/libxslt.dll");
+        HMODULE hMod = LoadLibraryEx(strDll.c_str(), 0, LOAD_WITH_ALTERED_SEARCH_PATH);
+        return (FARPROC)hMod;
+      }
       break;
   }
   return NULL;
index 75c6b1d..03beb51 100644 (file)
@@ -54,7 +54,7 @@ END
 
 VS_VERSION_INFO VERSIONINFO
  FILEVERSION 12,9,11,0
- PRODUCTVERSION 12,9,11,0
+ PRODUCTVERSION 12,9,12,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -71,12 +71,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Team XBMC"
             VALUE "FileDescription", "XBMC"
-            VALUE "FileVersion", "13.0-ALPHA11"
+            VALUE "FileVersion", "13.0-ALPHA12"
             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-ALPHA11"
+            VALUE "ProductVersion", "13.0-ALPHA12"
         END
     END
     BLOCK "VarFileInfo"
index fadc620..4713cdb 100644 (file)
@@ -436,7 +436,10 @@ bool CWinEventsSDL::ProcessOSXShortcuts(SDL_Event& event)
       g_application.OnAction(CAction(ACTION_TAKE_SCREENSHOT));
       return true;
 
-    case SDLK_h: // CMD-h to hide (but we minimize for now)
+    case SDLK_h: // CMD-h to hide
+      g_Windowing.Hide();
+      return true;
+
     case SDLK_m: // CMD-m to minimize
       CApplicationMessenger::Get().Minimize();
       return true;
index df4214a..dc47095 100644 (file)
@@ -25,6 +25,7 @@
 #include "guilib/gui3d.h"
 #include "linux/DllBCM.h"
 #include "utils/StringUtils.h"
+#include "settings/Settings.h"
 
 #ifndef __VIDEOCORE4__
 #define __VIDEOCORE4__
@@ -351,6 +352,49 @@ static float get_display_aspect_ratio(SDTV_ASPECT_T aspect)
   }
   return display_aspect;
 }
+
+static bool ClampToGUIDisplayLimits(int &width, int &height)
+{
+  float max_height = (float)CSettings::Get().GetInt("videoscreen.limitgui");
+  float default_ar = 16.0f/9.0f;
+  if (max_height < 540.0f || max_height > 1080.0f)
+    max_height = 1080.0f;
+
+  float ar = (float)width/(float)height;
+  float max_width = max_height * default_ar;
+  // bigger than maximum, so need to clamp
+  if (width > max_width || height > max_height) {
+    // wider than max, so clamp width first
+    if (ar > default_ar)
+    {
+      width = max_width;
+      height = max_width / ar + 0.5f;
+    // taller than max, so clamp height first
+    } else {
+      height = max_height;
+      width = max_height * ar + 0.5f;
+    }
+    return true;
+  }
+
+  return false;
+}
+
+static void SetResolutionString(RESOLUTION_INFO &res)
+{
+  int gui_width  = res.iScreenWidth;
+  int gui_height = res.iScreenHeight;
+
+  ClampToGUIDisplayLimits(gui_width, gui_height);
+
+  res.iWidth = gui_width;
+  res.iHeight = gui_height;
+
+  res.strMode = StringUtils::Format("%dx%d (%dx%d) @ %.2f%s%s%s - Full Screen", res.iScreenWidth, res.iScreenHeight, res.iWidth, res.iHeight, res.fRefreshRate,
+    res.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "",
+    res.dwFlags & D3DPRESENTFLAG_MODE3DTB   ? " 3DTB" : "",
+    res.dwFlags & D3DPRESENTFLAG_MODE3DSBS  ? " 3DSBS" : "");
+}
 #endif
 
 bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions)
@@ -416,19 +460,9 @@ bool CEGLNativeTypeRaspberryPI::ProbeResolutions(std::vector<RESOLUTION_INFO> &r
     m_desktopRes.strMode = StringUtils::Format("%dx%d", m_desktopRes.iScreenWidth, m_desktopRes.iScreenHeight);
 
     if((int)m_desktopRes.fRefreshRate > 1)
-    {
-      m_desktopRes.strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", m_desktopRes.iScreenWidth, m_desktopRes.iScreenHeight, m_desktopRes.fRefreshRate,
-        m_desktopRes.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
-    }
-    m_initDesktopRes = false;
-
-    int gui_width  = m_desktopRes.iWidth;
-    int gui_height = m_desktopRes.iHeight;
-
-    ClampToGUIDisplayLimits(gui_width, gui_height);
+      SetResolutionString(m_desktopRes);
 
-    m_desktopRes.iWidth = gui_width;
-    m_desktopRes.iHeight = gui_height;
+    m_initDesktopRes = false;
 
     m_desktopRes.iSubtitles   = (int)(0.965 * m_desktopRes.iHeight);
 
@@ -534,16 +568,7 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v
       res.iScreenHeight = tv->height;
       res.fPixelRatio   = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res.iScreenWidth / (float)res.iScreenHeight);
 
-      int gui_width  = res.iWidth;
-      int gui_height = res.iHeight;
-
-      ClampToGUIDisplayLimits(gui_width, gui_height);
-
-      res.iWidth = gui_width;
-      res.iHeight = gui_height;
-
-      res.strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res.iScreenWidth, res.iScreenHeight, res.fRefreshRate,
-        res.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
+      SetResolutionString(res);
 
       CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f) %s%s:%x\n", i, res.strMode.c_str(), res.fPixelRatio,
           tv->native ? "N" : "", tv->scan_mode ? "I" : "", tv->code);
@@ -559,9 +584,8 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v
         res2.dwFlags |= D3DPRESENTFLAG_MODE3DSBS;
         res2.fPixelRatio    = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight);
         res2.fPixelRatio   *= 2.0f;
-        res2.strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res2.iScreenWidth, res2.iScreenHeight, res2.fRefreshRate,
-            res2.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
-        CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f) SBS\n", i, res2.strMode.c_str(), res2.fPixelRatio);
+        SetResolutionString(res2);
+        CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio);
 
         res2.iSubtitles    = (int)(0.965 * res2.iHeight);
 
@@ -573,9 +597,8 @@ void CEGLNativeTypeRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::v
         res2.dwFlags |= D3DPRESENTFLAG_MODE3DTB;
         res2.fPixelRatio    = get_display_aspect_ratio((HDMI_ASPECT_T)tv->aspect_ratio) / ((float)res2.iScreenWidth / (float)res2.iScreenHeight);
         res2.fPixelRatio   *= 0.5f;
-        res2.strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res2.iScreenWidth, res2.iScreenHeight, res2.fRefreshRate,
-            res2.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
-        CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f) TAB\n", i, res2.strMode.c_str(), res2.fPixelRatio);
+        SetResolutionString(res2);
+        CLog::Log(LOGDEBUG, "EGL mode %d: %s (%.2f)\n", i, res2.strMode.c_str(), res2.fPixelRatio);
 
         res2.iSubtitles    = (int)(0.965 * res2.iHeight);
 
@@ -614,27 +637,5 @@ void CEGLNativeTypeRaspberryPI::CallbackTvServiceCallback(void *userdata, uint32
    callback->TvServiceCallback(reason, param1, param2);
 }
 
-bool CEGLNativeTypeRaspberryPI::ClampToGUIDisplayLimits(int &width, int &height)
-{
-  const int max_width = 1280, max_height = 720;
-  float ar = (float)width/(float)height;
-  // bigger than maximum, so need to clamp
-  if (width > max_width || height > max_height) {
-    // wider than max, so clamp width first
-    if (ar > (float)max_width/(float)max_height)
-    {
-      width = max_width;
-      height = (float)max_width / ar + 0.5f;
-    // taller than max, so clamp height first
-    } else {
-      height = max_height;
-      width = (float)max_height * ar + 0.5f;
-    }
-    return true;
-  }
-
-  return false;
-}
-
 #endif
 
index 2069931..d1ebb81 100644 (file)
@@ -70,7 +70,6 @@ private:
   static void CallbackTvServiceCallback(void *userdata, uint32_t reason, uint32_t param1, uint32_t param2);
 
   void DestroyDispmaxWindow();
-  bool ClampToGUIDisplayLimits(int &width, int &height);
   int FindMatchingResolution(const RESOLUTION_INFO &res, const std::vector<RESOLUTION_INFO> &resolutions);
   int AddUniqueResolution(const RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions);
 #endif
index 5933fd8..e3a4638 100644 (file)
@@ -473,7 +473,10 @@ LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
           }
         }
         if (g_application.GetRenderGUI() != active)
+        {
           g_Windowing.NotifyAppActiveChange(g_application.GetRenderGUI());
+          g_application.SetInBackground(!g_application.GetRenderGUI());
+        }
         CLog::Log(LOGDEBUG, __FUNCTION__"Window is %s", g_application.GetRenderGUI() ? "active" : "inactive");
       }
       break;
index db46c74..b4d73ee 100644 (file)
@@ -73,7 +73,7 @@ protected:
   /*! \brief Retrieves the items from the given path and updates the list
    \param strDirectory The path to the directory to get the items from
    \param updateFilterPath Whether to update the filter path in m_strFilterPath or not
-   \return true if the list was sucessfully updated otherwise false
+   \return true if the list was successfully updated otherwise false
    \sa GetDirectory
    \sa m_vecItems
    \sa m_strFilterPath
index 6846498..5736827 100644 (file)
@@ -179,8 +179,6 @@ bool CGUIWindowHome::OnMessage(CGUIMessage& message)
         AddRecentlyAddedJobs(updateRA);
       else
         m_updateRA |= updateRA;
-
-      return true;
     }
     break;