/Makefile.include
/aclocal.m4
/autom4te.cache/
+/build-aux/compile
/build-aux/config.guess
/build-aux/config.sub
/build-aux/install-sh
/project/obj
/project/output
+# /project/cmake
+/project/cmake/xbmc-config.cmake
+
# /project/Win32BuildSetup/
/project/Win32BuildSetup/XBMC.log
/project/Win32BuildSetup/XBMCSetup*.exe
/system/libnfs.dll
/system/dnssd.dll
/system/libcec.dll
+/system/pthreadVC2.dll
+/system/libxslt.dll
# /system/cdrip
/system/cdrip/lame_enc.dll
## 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.
- [Open a Pull Request](https://help.github.com/articles/using-pull-requests) with a
clear title and description.
+
+[Forum]: http://forum.xbmc.org/
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
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
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 \
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;
<?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>
<?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>
<?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>
<?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>
<?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>
<?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"/>
<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>
<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] Biltegi ofiziala erabiliaz zutaz gertu dagoen gune batetik deskargatu ditzakezu gure fitxategi-ispilu multzoaren abantailaz aprobetxatuaz.[CR] 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] Biltegi ofiziala erabiliaz zutaz gertu dagoen gune batetik deskargatu ditzakezu gure fitxategi-ispilu multzoaren abantailaz aprobetxatuaz.[CR] 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>
<?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>
<?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>
<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>
<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>
<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>
<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>
<?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>
<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>
<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>
<?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>
<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>
<?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>
--- /dev/null
+# 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"
--- /dev/null
+# 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"
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" />
<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>
<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>
<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>
<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>
</control>
<control type="button">
<description>Close Window button</description>
- <left>810</left>
+ <left>1030</left>
<top>15</top>
<width>64</width>
<height>32</height>
<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>
<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>
<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>
<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>
<?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>
<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>
<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>
<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>
<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>
</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>
<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>
<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>
<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>
</control>
<control type="togglebutton" id="20">
<description>Update library</description>
+ <textwidth>235</textwidth>
<include>ButtonCommonValues</include>
<label>653</label>
<altlabel>13353</altlabel>
</control>
<control type="togglebutton" id="20">
<description>Update library</description>
+ <textwidth>235</textwidth>
<include>ButtonCommonValues</include>
<label>653</label>
<altlabel>13353</altlabel>
<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>
<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>
<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>
<?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>
<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>
<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>
</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
<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>
<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>
<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">
<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>
<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>
<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>
<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>
<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>
<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">
<description>header label</description>
<left>20</left>
- <top>13</top>
+ <top>15</top>
<width>610</width>
<height>30</height>
<font>font13_title</font>
<?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>
</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>
<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>
<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>
+[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
<?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>
msgctxt "#31003"
msgid "Power Options"
-msgstr "Ø®Ù\8aارات اÙ\84طاÙ\82Ø©"
+msgstr "إعدادات اÙ\84طاÙ\82Ù\87"
msgctxt "#31004"
msgid "Working..."
-msgstr "...جاري التشغيل"
+msgstr "يعمل..."
msgctxt "#31005"
msgid "Hide Information"
msgctxt "#31008"
msgid "Full screen"
-msgstr "شاشة كاملة"
+msgstr "ملئ الشاشه"
msgctxt "#31009"
msgid "Total Duration"
msgctxt "#31024"
msgid "Page"
-msgstr "عÙ\86اصر"
+msgstr "اÙ\84صÙ\81ØÙ\87"
msgctxt "#31025"
msgid "Items"
-msgstr "صÙ\81ØØ©"
+msgstr "اÙ\84عÙ\86اصر"
msgctxt "#31026"
msgid "Misc Options"
msgctxt "#31040"
msgid "Now Playing"
-msgstr "يشتغل الان"
+msgstr "المُشَغَل اﻷن"
msgctxt "#31042"
msgid "PLAYING"
-msgstr "يشتغل الان"
+msgstr "المُشَغَل"
msgctxt "#31043"
msgid "PAUSED"
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"
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"
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]"
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"
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"
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"
msgctxt "#31303"
msgid "Data provider"
-msgstr ": مزود البيانات"
+msgstr "مزود البيانات"
msgctxt "#31307"
msgid "Hide Fanart"
msgctxt "#31308"
msgid "Movie Details"
-msgstr "تفاصيل الفلم"
+msgstr "تÙ\81اصÙ\8aÙ\84 اÙ\84Ù\81Ù\8aÙ\84Ù\85"
msgctxt "#31309"
msgid "Memory Used:"
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"
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"
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"
msgctxt "#31354"
msgid "Rewind"
-msgstr "ترجÙ\8aع"
+msgstr "إرجاع"
msgctxt "#31355"
msgid "Movie menu"
msgctxt "#31356"
msgid "Download Subtitles"
-msgstr "تحميل الترجمات"
+msgstr "تنزيل ترجمات"
+
+msgctxt "#31360"
+msgid "Watch as 2D"
+msgstr "شاهد كـ ثنائى الابعاد"
+
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "غير الوضع"
msgctxt "#31362"
msgid "Enabled"
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"
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"
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"
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"
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 "النظام"
msgctxt "#31003"
msgid "Power Options"
-msgstr "Ð\9dаÑ\81Ñ\82Ñ\80ойки на заÑ\85Ñ\80анванеÑ\82о"
+msgstr "Ð\98зклÑ\8eÑ\87и..."
msgctxt "#31004"
msgid "Working..."
msgctxt "#31005"
msgid "Hide Information"
-msgstr "СкÑ\80ий инÑ\84оÑ\80маÑ\86иÑ\8fÑ\82а"
+msgstr "Ð\91ез инÑ\84оÑ\80маÑ\86иÑ\8f"
msgctxt "#31006"
msgid "View Options"
msgctxt "#31028"
msgid "Poster Wrap"
-msgstr "Плакати-поредица"
+msgstr "Плакати"
msgctxt "#31029"
msgid "Fanart"
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"
msgid "Watch as 2D"
msgstr "Гледай в 2D режим"
+msgctxt "#31361"
+msgid "Change mode"
+msgstr "Промени режима"
+
msgctxt "#31362"
msgid "Enabled"
msgstr "Включено"
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"
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 "График"
msgid "Available[CR]Groups"
msgstr "Налични[CR]Групи"
+msgctxt "#31509"
+msgid "Channel Group"
+msgstr "Група канали"
+
msgctxt "#31510"
msgid "Timer Set"
msgstr "Настройка на брояча"
msgctxt "#31109"
msgid "Enable Custom Background"
-msgstr "Habilita fons personalitzat"
+msgstr "Habilita el fons personalitzat"
msgctxt "#31110"
msgid "Background path:"
msgctxt "#31362"
msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
msgctxt "#31390"
msgid "Skin default"
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"
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 "预定时间"
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 "已排程的時間"
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"
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"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Indstillingsniveau"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Genveje"
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"
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"
msgctxt "#31510"
msgid "Timer Set"
-msgstr "Indstil Timer"
+msgstr "Indstil Optagelse"
msgctxt "#31511"
msgid "Channel Options"
msgctxt "#31000"
msgid "Change Your"
-msgstr "Aanpassen"
+msgstr "Verander jouw"
msgctxt "#31003"
msgid "Power Options"
msgctxt "#31049"
msgid "End Time"
-msgstr "Eindigt om"
+msgstr "Eindtijd"
msgctxt "#31050"
msgid "Sort: Ascending"
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"
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"
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"
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"
msgctxt "#31509"
msgid "Channel Group"
-msgstr "Groep"
+msgstr "Kanaal Groep"
msgctxt "#31510"
msgid "Timer Set"
msgctxt "#31901"
msgid "36 Hour Forecast"
-msgstr "36 Uur Voorspelling"
+msgstr "36 Uurs Voorspelling"
msgctxt "#31902"
msgid "Hourly Forecast"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Settings level"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Shortcuts"
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"
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"
msgctxt "#31003"
msgid "Power Options"
-msgstr "Valikud"
+msgstr "Energia valikud"
msgctxt "#31004"
msgid "Working..."
msgctxt "#31026"
msgid "Misc Options"
-msgstr "Veel valikuid"
+msgstr "Muud valikud"
msgctxt "#31027"
msgid "Location"
msgctxt "#31029"
msgid "Fanart"
-msgstr "Pildid"
+msgstr "Fännipildid"
msgctxt "#31031"
msgid "Pic Thumbs"
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"
msgctxt "#31058"
msgid "System music files"
-msgstr "Süsteemi muusika failid"
+msgstr "Süsteemsed muusikafailid"
msgctxt "#31059"
msgid "Current playlist"
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"
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"
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)"
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"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Seadete tase"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Otseteed"
msgctxt "#31205"
msgid "Lyrics Source"
-msgstr "Laulusõnade allikas"
+msgstr "Laulutekstide allikas"
msgctxt "#31206"
msgid "Found"
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"
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"
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"
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"
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"
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"
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"
msgid "Info"
msgstr "Tiedot"
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Toiminnot"
+
msgctxt "#31040"
msgid "Now Playing"
msgstr "Nyt toistetaan"
msgid "REWIND"
msgstr "KELAUS TAAKSEPÄIN"
+msgctxt "#31046"
+msgid "SEEKING"
+msgstr "HAKEE"
+
msgctxt "#31049"
msgid "End Time"
msgstr "Päättymisaika"
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ä"
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"
msgid "PICTURES"
msgstr "KUVAT"
+msgctxt "#31952"
+msgid "LIVE TV"
+msgstr "LIVE-TV"
+
msgctxt "#31953"
msgid "VIDEOS"
msgstr "VIDEOT"
--- /dev/null
+# 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"
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"
msgid "Video OSD"
msgstr "OSD de Video"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de configuración"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Atallos"
msgctxt "#31308"
msgid "Movie Details"
-msgstr "Detalles da Película"
+msgstr "Detalles do Filme"
msgctxt "#31309"
msgid "Memory Used:"
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"
msgctxt "#31355"
msgid "Movie menu"
-msgstr "Menú de Película"
+msgstr "Menú do filme"
msgctxt "#31356"
msgid "Download Subtitles"
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"
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"
msgctxt "#31955"
msgid "TV SHOWS"
-msgstr "TV SERIEN"
+msgstr "TV-SERIEN"
msgctxt "#31956"
msgid "MUSIC"
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 "Προγραμματισμένη Ώρα"
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 "אפשרות שונות"
msgid "Show Recently added Videos"
msgstr "הצג וידאו שנוסף לאחרונה"
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "תת-תפריט תוכנות במסך הבית"
+
msgctxt "#31119"
msgid "Hide Background Fanart"
msgstr "החבא הצגת פאנארט ברקע"
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"
msgid "Video OSD"
msgstr "וידאו OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "רמת הגדרות"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "קיצורים"
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 "זמן מתוזמן"
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"
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"
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)"
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"
msgid "Video OSD"
msgstr "OSD Video"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Livello impostazioni"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Collegamenti"
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"
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"
msgid "Show Recently added Videos"
msgstr "最近追加されたビデオを表示"
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "ホーム画面「プログラム」のサブメニュー"
+
msgctxt "#31119"
msgid "Hide Background Fanart"
msgstr "背景のファンアートを隠す"
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"
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 設定"
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 "タイマー予約時間"
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"
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 "예약 시간"
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 )"
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"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Iestatījumi"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Saīsnes"
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"
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"
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"
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"
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"
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"
msgctxt "#31951"
msgid "PICTURES"
-msgstr "PAVEIKSLĖLIAI"
+msgstr "NUOTRAUKOS"
msgctxt "#31952"
msgid "LIVE TV"
-msgstr "TIESIOGINIS TV"
+msgstr "LIVE TV"
msgctxt "#31953"
msgid "VIDEOS"
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"
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"
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"
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 "Запланированное время"
msgid "Video OSD"
msgstr "Video OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Úroveň nastavení"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Odkazy"
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"
msgctxt "#31004"
msgid "Working..."
-msgstr "Počakajte..."
+msgstr "Počakajte ..."
msgctxt "#31005"
msgid "Hide Information"
msgctxt "#31029"
msgid "Fanart"
-msgstr "Ozadja"
+msgstr "Grafike"
msgctxt "#31031"
msgid "Pic Thumbs"
msgctxt "#31048"
msgid "Visualisation Presets"
-msgstr "Predloge vizualizacije"
+msgstr "Prednastavitve vizualizacije"
msgctxt "#31049"
msgid "End Time"
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"
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"
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"
msgctxt "#31307"
msgid "Hide Fanart"
-msgstr "Skrij ozadje"
+msgstr "Skrij grafike"
msgctxt "#31308"
msgid "Movie Details"
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"
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"
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"
msgctxt "#31360"
msgid "Watch as 2D"
-msgstr "2D Ogled"
+msgstr "Glej kot 2D"
msgctxt "#31361"
msgid "Change mode"
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"
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"
msgctxt "#31903"
msgid "Weekend Forecast"
-msgstr "Tedenska napoved"
+msgstr "Vikend napoved"
msgctxt "#31904"
msgid "10 Day Forecast"
msgctxt "#31909"
msgid "Fetching forecast info..."
-msgstr "Prenašam vremenske informacije..."
+msgstr "Prenašam vremenske informacije ..."
msgctxt "#31910"
msgid "Map & Alerts"
msgid "Info"
msgstr "Info"
+msgctxt "#31039"
+msgid "Actions"
+msgstr "Acciones"
+
msgctxt "#31040"
msgid "Now Playing"
msgstr "Reproduciendo"
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"
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"
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"
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)"
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"
msgid "Video OSD"
msgstr "OSD de video"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Nivel de ajustes"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Accesos directos"
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"
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"
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"
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"
--- /dev/null
+# 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"
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"
msgid "Video OSD"
msgstr "Video-OSD"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Inställningsnivå"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Genvägar"
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"
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 "Вақти ба нақша гирифта"
msgid "Video OSD"
msgstr "OSD วิดีโอ"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "ระดับของการตั้งค่า"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "ปุ่มลัด"
msgctxt "#31355"
msgid "Movie menu"
-msgstr "เมนู ภาพยนต์"
+msgstr "à¹\80มà¸\99ู ภาà¸\9eยà¸\99à¸\95รà¹\8c"
msgctxt "#31356"
msgid "Download Subtitles"
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 "ระยะเวลาที่กำหนด"
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"
msgid "SEEKING"
msgstr "ПОШУК"
+msgctxt "#31048"
+msgid "Visualisation Presets"
+msgstr "Налаштування візуалізації"
+
msgctxt "#31049"
msgid "End Time"
msgstr "Час закінчення"
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 "Різні параметри"
msgid "Show Recently added Videos"
msgstr "Показувати останнє додане відео"
+msgctxt "#31118"
+msgid "Home Page Programs Sub-menu"
+msgstr "Підменю програм головного екрану"
+
msgctxt "#31119"
msgid "Hide Background Fanart"
msgstr "Приховувати фанарт на тлі"
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)"
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 музики"
msgid "Video OSD"
msgstr "OSD відео"
+msgctxt "#31142"
+msgid "Settings level"
+msgstr "Рівень налаштувань"
+
msgctxt "#31200"
msgid "Shortcuts"
msgstr "Ярлики"
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"
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 "Запланований час"
-Subproject commit 1dc73d790015aec1376e2e83ea7bd82e9f3f015a
+Subproject commit 1d71311e4b8e5ff6244c524dd186ceca3a036f06
<?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
<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. 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. 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. 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. 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. 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 . 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. 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. 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. 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. 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 אשר זז לצלילי המוזיקה שיוצר אפקט גלים לרוחב רשת הספקטרום. יש אפשרות גם להגדיר את גובה פס הספקטרום, את המהירות, ואת התנהגות הפסים (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. 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>
msgid "Mode"
msgstr "Režim"
+msgctxt "#30005"
+msgid "Small"
+msgstr "Malo"
+
msgctxt "#30006"
msgid "Default"
msgstr "Podrazumjevano"
--- /dev/null
+# 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"
msgctxt "#30013"
msgid "Fast"
-msgstr "מהר"
+msgstr "×\9e×\94×\99ר"
msgctxt "#30014"
msgid "Very Fast"
-msgstr "מהר מאוד"
+msgstr "×\9e×\94×\99ר ×\9e×\90×\95×\93"
msgctxt "#30006"
msgid "Default"
-msgstr "Privzeto"
+msgstr "Privzeta"
msgctxt "#30007"
msgid "Big"
<?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
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>
+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
--- /dev/null
+# 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"
--- /dev/null
+# 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ë"
--- /dev/null
+# 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 "ከፍተኛ "
--- /dev/null
+# 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 "مرتفع"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "Высокая"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "Високо"
--- /dev/null
+# 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 "အမြင့်စား"
--- /dev/null
+# 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]"
--- /dev/null
+# 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 "使用持久性文件 [快速启动]"
--- /dev/null
+# 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 "高溫"
--- /dev/null
+# 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"
--- /dev/null
+# 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á"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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 ""
+++ /dev/null
-<?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>
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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é]"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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]"
--- /dev/null
+# 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 "Χρήση Σταθερού Αρχείου [ταχύτερη έναρξη]"
--- /dev/null
+# 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 "גבוה"
--- /dev/null
+# 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 "उच्च"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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 "高"
--- /dev/null
+# 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 "높음"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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 "висок"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "زیاد"
--- /dev/null
+# 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 "نورمال"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "Макс."
--- /dev/null
+# 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 "Висок"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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]"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "Истифодаи файли суботкорӣ [оғози тезкор]"
--- /dev/null
+# 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 "அதிகம்"
--- /dev/null
+# 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 "สูง"
--- /dev/null
+# 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"
--- /dev/null
+# 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 "Висока"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
<?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
<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>
<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. 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. 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. 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. 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. 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. 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. 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. 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. 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 אשר זז לצלילי המוזיקה שיוצר אפקט גלים לרוחב רשת הספקטרום. יש אפשרות גם להגדיר את גובה פס הספקטרום, את המהירות, ואת התנהגות הפסים (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. 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. 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 показывает вращающийся трёхмерный анализатор спектра, который движется в такт музыке, создавая эффект волны по всему спектру сетки.⏎ Визуализация имеет настройки для регулировки высоты полос спектра, скорости движения и способа отображения полос (сплошной, точки, каркас), а также обладает небольшим размером и малой нагрузкой на процессор.</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] 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. 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>
msgid "Mode"
msgstr "Režim"
+msgctxt "#30005"
+msgid "Small"
+msgstr "Malo"
+
msgctxt "#30006"
msgid "Default"
msgstr "Podrazumjevano"
--- /dev/null
+# 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"
msgctxt "#30013"
msgid "Fast"
-msgstr "מהר"
+msgstr "×\9e×\94×\99ר"
msgctxt "#30014"
msgid "Very Fast"
msgctxt "#30006"
msgid "Default"
-msgstr "Privzeto"
+msgstr "Privzeta"
msgctxt "#30007"
msgid "Big"
<?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>
<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>
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"
msgctxt "#30008"
msgid "Enable Stereo 3D"
-msgstr "Activa l'Stereo 3D"
+msgstr "Habilita l'Stereo 3D"
msgctxt "#30009"
msgid "Preset Pack"
msgctxt "#30001"
msgid "Time Between Presets"
-msgstr "Eelseadistustevaheline aeg"
+msgstr "Eelseadistuste vaheline aeg"
msgctxt "#30002"
msgid "Additional Random Time"
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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
msgctxt "#30007"
msgid "Maximum Refresh Rate"
-msgstr "Največja frekvenca osveževanja"
+msgstr "Največja stopnja osveževanja"
msgctxt "#30008"
msgid "Enable Stereo 3D"
<?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
<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>
<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>
<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>
<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. 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. projectM -visualisointi on LGPL-lisensoitu Milkdropin uudelleenimplementointi OpenGL:llä. 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! La visualisation projectM est une réalisation sous LGPL de Milkdrop en OpenGL. 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! La visualisation projectM est une réalisation sous LGPL de Milkdrop en OpenGL. 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! A Visualización projectM é unha reimplementación de Milkdrop empregando OpenGL e con licencia LGPL. 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! 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="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! projectM Vizualizacija je LGPL reimplementacija Milkdropa pod OpenGL-om Sve što projectM zahtijeva je video kartica sa 3d ubrzanjem i vašu omiljenu glazbu.</description>
<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! 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="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! ProjectM yra įgyvendinimas iš Milkdrop pagal LGPL licenciją, ir naudoja OpenGL 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! projectM Vizualizācija ir Milkdrop LGPL reimplementācija zem OpenGL 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! 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! projectM visualiseringen er en LGPL reinplimentasjon av Milkdrop under OpenGL 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! Vizualizarea projectM este o reimplementare LGPL a lui Milkdrop sub OpenGL. Tot ceea ce necesită projectM este o placă video cu accelerare 3D și muzica ta favorită.</description>
<description lang="ru">projectM удивительным образом визуализирует музыку. В мире Unix нет ничего лучше. projectM является результатом напряжённой работы сообщества. Пользователи могут создавать наборы настроек, которые объединяют музыку и невероятные визуальные эффекты. Попробуйте сами!⏎ Визуализация projectM представляет собой LGPL-реализацию Milkdrop на основе OpenGL⏎ Всё, что требуется для визуализации — это видеокарта с 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! projectM Vizualizacija je LGPL reimplementacija Milkdropa v okviru OpenGL. 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! Vizualizacija projectM je reimplementacija Milkdropa v LGPL v okviru OpenGL-a. 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! projectM'i është një zbatim i LGPL'uar prej Milkdrop ndër OpenGL. 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! projectM visualisering är en LGPL-implementation av Milkdrop i OpenGL 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>
--- /dev/null
+# 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 %%"
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 %%"
msgctxt "#30005"
msgid "Shuffle Mode"
-msgstr "Način mešanja"
+msgstr "Naključni način"
msgctxt "#30006"
msgid "Smooth Preset Duration"
--- /dev/null
+<?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>
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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();
+
+}
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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();
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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);
+
+}
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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();
+
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+ }
+
+}
--- /dev/null
+/*
+
+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();
+
+}
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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();
+ }
+
+}
+
--- /dev/null
+// 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();
+}
--- /dev/null
+// 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);
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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
--- /dev/null
+// 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();
+}
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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 ""
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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 кадр/с"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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 кадр/с"
--- /dev/null
+# 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"
--- /dev/null
+# 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 เฟรมต่อวิ."
--- /dev/null
+# 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"
--- /dev/null
+# 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 кадр/с"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+<?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>
<?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
<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>
<?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>
<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>
<?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"/>
<?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>
<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>
--- /dev/null
+# 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"
--- /dev/null
+# 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"
--- /dev/null
+# 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"
<?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"/>
<?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>
<?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"/>
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 $<
# 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])
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)
# 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"
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],
[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
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
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*)
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*)
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
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))
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
# 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."])
#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
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
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"
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)
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
--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 \
--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
./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 \
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 /
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")
-----------------------------------------------------------------------------
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
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
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
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
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
-Enable CheckJNI (BEFORE starting the application)
# adb shell setprop debug.checkjni 1
+
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
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
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"
msgid "Credits"
msgstr "Krediete"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Af"
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"
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"
msgid "Watched episode count"
msgstr "Gekykde episode telling"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitel lokasie"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Vaste"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Luidspreker konfigurasie"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
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"
msgid "Credits"
msgstr "Informacione"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Mbyllur"
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"
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"
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"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfigurimi i përforcuesve"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36041"
msgid "* Item folder"
msgstr "* Dosje artikujsh"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Kaloni tek kanali"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Regjistro"
msgid "Connecting to: %s"
msgstr "በ መገናኘት ላይ: %s"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "የ ንዑስ አርእስት ፎልደር"
-
msgctxt "#21371"
msgid "Thumbnail"
msgstr "የ አውራ ጥፍር"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "ስፒከር ማዋቀሪያ "
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36041"
msgid "* Item folder"
msgstr "የ እቃ ፎልደር"
+
+msgctxt "#36428"
+msgid "Record"
+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"
msgctxt "#7"
msgid "File manager"
-msgstr "إدارة الملفات"
+msgstr "مُدير الملفات"
msgctxt "#8"
msgid "Weather"
msgctxt "#9"
msgid "xbmc media center"
-msgstr "xbmc مركز وسائط"
+msgstr "مركز وسائط إكس بى إم سى"
msgctxt "#11"
msgid "Monday"
-msgstr "اÙ\84اثنين"
+msgstr "اÙ\84Ø¥ثنين"
msgctxt "#12"
msgid "Tuesday"
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"
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"
msgctxt "#108"
msgid "Slideshow"
-msgstr "عرض اÙ\84شرائØ"
+msgstr "عرض شرائح"
msgctxt "#109"
msgid "Create thumbs"
msgctxt "#111"
msgid "Shortcuts"
-msgstr "اختصارات"
+msgstr "Ø¥ختصارات"
msgctxt "#112"
msgid "Paused"
msgctxt "#113"
msgid "Update failed"
-msgstr "فشل التحديث"
+msgstr "تعذر التحديث"
msgctxt "#114"
msgid "Installation failed"
-msgstr "فشل التثبيت"
+msgstr "تعذر التثبيت"
msgctxt "#115"
msgid "Copy"
msgctxt "#116"
msgid "Move"
-msgstr "تحريك"
+msgstr "نقل"
msgctxt "#117"
msgid "Delete"
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?"
msgctxt "#124"
msgid "Move these files?"
-msgstr "تحريك هذه الملفات؟"
+msgstr "نقل هذه الملفات؟"
msgctxt "#125"
msgid "Delete these files? - Deleting files cannot be undone!"
msgid "Select destination directory"
msgstr "حدد دليل الوجهة"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "إخراج النظام الصوتي لجميع المكبرات"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "عدد القنوات"
msgid "Credits"
msgstr "الاعتمادات"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "معطلة"
msgid "Character set"
msgstr "تعيين الأحرف"
+msgctxt "#736"
+msgid "Style"
+msgstr "المظهر"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "الألوان"
+
msgctxt "#738"
msgid "Normal"
msgstr "عادي"
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 "حفظ إعدادات واجهة الشبكة"
msgid "Valid port range is 1024-65535"
msgstr "نطاق المنفذ السليم هو 1024-65535"
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "إضافه صور..."
+
msgctxt "#998"
msgid "Add Music..."
msgstr "إضافة موسيقى..."
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 "إعدادات القفل"
msgid "Reactivate lock"
msgstr "تنشيط قفل"
+msgctxt "#12354"
+msgid "Would you like to update it now?"
+msgstr "اترغب بنحديثها الأن؟"
+
msgctxt "#12356"
msgid "Change lock"
msgstr "تغيير قفل"
msgid "Fan speed override"
msgstr "السيطرة على سرعة المروحة"
+msgctxt "#13303"
+msgid "Fonts"
+msgstr "الخطوط"
+
msgctxt "#13304"
msgid "Enable flipping bi-directional strings"
msgstr "مكن جعل الأحرف"
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 "تزامن أسلوب تشغيل الشاشة"
msgid "Skin default"
msgstr "الغلاف الافتراضي"
+msgctxt "#15111"
+msgid "Theme"
+msgstr "الثمه"
+
msgctxt "#15112"
msgid "Default theme"
msgstr "السمة الافتراضية"
msgid "Bob (inverted)"
msgstr "بوب مزدوج"
+msgctxt "#16024"
+msgid "Cancelling..."
+msgstr "يَلغِى..."
+
msgctxt "#16025"
msgid "Enter the artist name"
msgstr "أدخل اسم الفنان"
msgid "TV recordings"
msgstr "تسجيلات TV"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "مصدر افتراضي لصور PVR مصغرة"
-
msgctxt "#19019"
msgid "Channels"
msgstr "محطات"
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 "مدير القنوات"
msgid "Remove media share"
msgstr "إزالة مشاركة الوسائط"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "مجلد الترجمة"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "دليل ترجمة الفيديو البديل"
msgid "External storage"
msgstr "تخزين خارجي"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "موقع الترجمة "
-
msgctxt "#21461"
msgid "Fixed"
msgstr "صالح"
msgid "Skin is missing some files"
msgstr "بعض ملفات الغلاف مفقودة"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "أدخل نص البحث"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "الإشعارات"
msgid "Enable custom script button"
msgstr "تمكين زر تخصيص نصي"
+msgctxt "#33084"
+msgid "Auto login"
+msgstr "تسجيل دخول تلقائى"
+
msgctxt "#33100"
msgid "Failed to start"
msgstr "فشل البدء"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "إعداد المكبر"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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 "تسجيل"
msgid "Movies"
msgstr "Filmlər"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Subtitrlərin qovluqu"
-
msgctxt "#21375"
msgid "Normal"
msgstr "Normal"
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"
msgid "Credits"
msgstr "Kredituak"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip-a"
-
msgctxt "#474"
msgid "Off"
msgstr "Off"
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"
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"
msgid "mixed"
msgstr "nahasia"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Azpititulu kokapena"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Konpondua"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Bozgorailuaren konfigurazioa"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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."
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)"
msgid "Select destination directory"
msgstr "Абярыце каталёг прызначэньня"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Выводзіць стэрэа ва ўсе дынамікі"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "Колькасьць каналаў"
msgid "Credits"
msgstr "Credits"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Няма"
msgid "TV recordings"
msgstr "TV recordings"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Стандартны каталёг для мініятур PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Channels"
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"
msgid "mixed"
msgstr "mixed"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Месца субтытраў"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Фіксаванае"
msgid "Skin is missing some files"
msgstr "Некаторыя файлы адсутнічаюць у аздабленьні"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Увядзіце тэкст для пошуку"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Апавяшчэньні"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Канфігурацыя галосьнікаў"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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."
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."
msgctxt "#1"
msgid "Pictures"
-msgstr "Fotke"
+msgstr "Slike"
msgctxt "#2"
msgid "Music"
msgctxt "#3"
msgid "Videos"
-msgstr "Filmovi"
+msgstr "Video"
msgctxt "#4"
msgid "TV-Guide"
-msgstr "TV"
+msgstr "TV vodič"
msgctxt "#5"
msgid "Settings"
msgctxt "#7"
msgid "File manager"
-msgstr "Upr. datotekama"
+msgstr "Datoteka"
msgctxt "#8"
msgid "Weather"
msgctxt "#26"
msgid "June"
-msgstr "jun"
+msgstr "juni"
msgctxt "#27"
msgid "July"
-msgstr "jul"
+msgstr "juli"
msgctxt "#28"
msgid "August"
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"
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"
msgctxt "#108"
msgid "Slideshow"
-msgstr "Reprod. slajdova"
+msgstr "Slajdovi"
msgctxt "#109"
msgid "Create thumbs"
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?"
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"
msgctxt "#134"
msgid "Songs"
-msgstr "Numere"
+msgstr "Pjesme"
msgctxt "#135"
msgid "Genres"
msgctxt "#136"
msgid "Playlists"
-msgstr "Spiskovi za repro."
+msgstr "Reprodukcije"
msgctxt "#137"
msgid "Search"
msgctxt "#155"
msgid "Drive"
-msgstr "Uređaj"
+msgstr "Drajv"
msgctxt "#156"
msgid "Free"
msgctxt "#160"
msgid "Free"
-msgstr "slobodno"
+msgstr "Slobodno"
msgctxt "#161"
msgid "Unavailable"
msgctxt "#164"
msgid "No disc"
-msgstr "Disk nije umetnut"
+msgstr "Nema diska"
msgctxt "#165"
msgid "Disc present"
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"
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"
msgctxt "#181"
msgid "Select album"
-msgstr "Izaberite album"
+msgstr "Izaberi album"
msgctxt "#182"
msgid "Tracks"
msgctxt "#189"
msgid "Scanning media info"
-msgstr "Analiziranje informacija"
+msgstr "Skeniranje informacija"
msgctxt "#190"
msgid "Save"
msgctxt "#191"
msgid "Shuffle"
-msgstr "Nasumice"
+msgstr "Miješanje"
msgctxt "#192"
msgid "Clear"
msgctxt "#193"
msgid "Scan"
-msgstr "Analiziraj"
+msgstr "Skeniraj"
msgctxt "#194"
msgid "Searching..."
-msgstr "Pretraživanje..."
+msgstr "Pretražuje..."
msgctxt "#195"
msgid "No info found!"
msgctxt "#196"
msgid "Select movie:"
-msgstr "Izaberite film:"
+msgstr "Izaberi film:"
msgctxt "#197"
msgid "Querying %s info"
msgctxt "#208"
msgid "Play"
-msgstr "Reprodukuj"
+msgstr "Pokreni"
msgctxt "#209"
msgid "Next"
msgctxt "#213"
msgid "Calibrate user interface..."
-msgstr "Prilagodite korisničko okruženje..."
+msgstr "Kalibriranje korisničkog interfejsa..."
msgctxt "#214"
msgid "Video calibration..."
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"
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"
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"
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"
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"
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"
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"
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"
msgid "Credits"
msgstr "Zasluge"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Izme. čip"
-
msgctxt "#474"
msgid "Off"
msgstr "Isklj."
msgid "Times played"
msgstr "Reprodukovan"
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Uzeto"
+
msgctxt "#580"
msgid "Sort direction"
msgstr "Smer slaganja"
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"
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"
msgid "Compression level"
msgstr "Nivo kompresije"
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Verbalno logovanje"
+
msgctxt "#700"
msgid "Cleaning up library"
msgstr "Čišćenje biblioteke"
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"
msgid "HTTP proxy"
msgstr "HTTP posrednik"
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Zadatak"
+
msgctxt "#716"
msgid "Automatic (DHCP)"
msgstr "Automatski (DHCP)"
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"
msgid "Character set"
msgstr "Skup znakova"
+msgctxt "#736"
+msgid "Style"
+msgstr "Stil"
+
+msgctxt "#737"
+msgid "Colour"
+msgstr "Boja"
+
msgctxt "#738"
msgid "Normal"
msgstr "Normalan"
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"
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"
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..."
msgid "Add Videos..."
msgstr "Dodaj Video..."
+msgctxt "#1000"
+msgid "Preview"
+msgstr "Pregled"
+
msgctxt "#1001"
msgid "Unable to connect"
msgstr "Nije moguće povezivanje"
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"
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"
msgid "in"
msgstr "u"
+msgctxt "#1406"
+msgid "the"
+msgstr " "
+
msgctxt "#1407"
msgid "Vicinity"
msgstr "blizini"
msgid "windy"
msgstr "vjetrovito"
+msgctxt "#1413"
+msgid "Patches"
+msgstr "Zakrpe"
+
msgctxt "#1414"
msgid "Thunderstorm"
msgstr "oluja"
msgid "Thunderstorms"
msgstr "grmljavina"
+msgctxt "#1419"
+msgid "Shallow"
+msgstr "Plitak"
+
msgctxt "#1420"
msgid "Moderate"
msgstr "Umjeren"
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"
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"
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..."
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"
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"
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?"
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"
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"
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"
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."
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"
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"
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"
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"
msgid "Remove from favourites"
msgstr "Ukloni iz omiljenog"
+msgctxt "#14078"
+msgid "Colours"
+msgstr "Boje"
+
msgctxt "#14079"
msgid "Timezone country"
msgstr "Zemlja vremenske zone"
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"
msgid "Skin default"
msgstr "Podrazumjevana maska"
+msgctxt "#15111"
+msgid "Theme"
+msgstr "Tema"
+
msgctxt "#15112"
msgid "Default theme"
msgstr "Podrazumjevana tema"
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"
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."
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"
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"
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"
msgid "Size"
msgstr "Velič."
+msgctxt "#22032"
+msgid "Colours"
+msgstr "Boje"
+
msgctxt "#22034"
msgid "Export karaoke titles as HTML"
msgstr "Izvoz karaoke naslova kao HTML"
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"
msgid "DXVA2"
msgstr "DXVA"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfiguracija zvučnika"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
msgctxt "#9"
msgid "xbmc media center"
-msgstr "медиен център xbmc"
+msgstr "медиен център XBMC"
msgctxt "#11"
msgid "Monday"
msgctxt "#51"
msgid "Jan"
-msgstr "ян."
+msgstr "януари"
msgctxt "#52"
msgid "Feb"
-msgstr "февр."
+msgstr "февруари"
msgctxt "#53"
msgid "Mar"
msgctxt "#54"
msgid "Apr"
-msgstr "апр."
+msgstr "април"
msgctxt "#55"
msgid "May"
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"
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"
msgctxt "#128"
msgid "General"
-msgstr "Ð\93лавни"
+msgstr "Ð\9eÑ\81новни"
msgctxt "#129"
msgid "Slideshow"
msgctxt "#162"
msgid "Tray open"
-msgstr "CD-то е отворено"
+msgstr "Дисковото устройство е отворено"
msgctxt "#163"
msgid "Reading"
msgctxt "#166"
msgid "Skin"
-msgstr "Облик"
+msgstr "Облици"
+
+msgctxt "#167"
+msgid "Cancel file operations"
+msgstr "Прекъсване на действие с файлове"
msgctxt "#168"
msgid "%s- %s"
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"
msgctxt "#199"
msgid "Web interface"
-msgstr "Уеб интерфейс"
+msgstr "Уеб интерфейси"
msgctxt "#202"
msgid "Tagline"
msgid "Select destination directory"
msgstr "Изберете целева папка"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Извеждай стерео сигнала до всички високоговорители"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "Брой на каналите"
msgctxt "#256"
msgid "Fetching CD information"
-msgstr "Изтегляне на информация за CD-то"
+msgstr "Изтегляне на информация за диска"
msgctxt "#257"
msgid "Error"
msgctxt "#262"
msgid "Scripts output"
-msgstr "Резултат от криптовете"
+msgstr "Резултат от скриптовете"
msgctxt "#263"
msgid "Allow control of XBMC via HTTP"
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"
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"
msgctxt "#283"
msgid "Search results"
-msgstr "Резултати от търсенето"
+msgstr "Резултат от търсенето"
msgctxt "#284"
msgid "No results found"
msgctxt "#305"
msgid "Enabled"
-msgstr "Ð\92клÑ\8eÑ\87ено"
+msgstr "Ð\92клÑ\8eÑ\87ена"
msgctxt "#306"
msgid "Non-interleaved"
msgctxt "#363"
msgid "Sort by: File"
-msgstr "СоÑ\80Ñ\82. по: Файл"
+msgstr "Ð\9fодÑ\80едба: Файл"
msgctxt "#364"
msgid "Dolby Digital (AC3) capable receiver"
msgctxt "#369"
msgid "Title"
-msgstr "Заглавие"
+msgstr "Заглавия"
msgctxt "#370"
msgid "Thunderstorms"
msgctxt "#417"
msgid "View: Big icons"
-msgstr "Ð\92ид: Големи икони"
+msgstr "Ð\98зглед: Големи икони"
msgctxt "#418"
msgid "Low"
msgctxt "#423"
msgid "Delete CD information"
-msgstr "Изтрий инф. за CD-то"
+msgstr "Изтрий инф. за диска"
msgctxt "#424"
msgid "Select"
msgctxt "#426"
msgid "No CD information found"
-msgstr "Не е открита информация за CD-то"
+msgstr "Не е открита информация за диска"
msgctxt "#427"
msgid "Disc"
msgctxt "#430"
msgid "Sort by: DVD#"
-msgstr "СоÑ\80Ñ\82. по: DVD№"
+msgstr "Ð\9fодÑ\80едба: DVD№"
msgctxt "#431"
msgid "No cache"
msgctxt "#457"
msgid "Switch view"
-msgstr "Ð\9fÑ\80евклÑ\8eÑ\87и вида"
+msgstr "Ð\9fÑ\80евклÑ\8eÑ\87и изгледа"
msgctxt "#459"
msgid "Subs"
msgid "Credits"
msgstr "Заслуги"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
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"
msgctxt "#507"
msgid "Sort by: Usage"
-msgstr "Сорт. по: Употреба"
+msgstr "Подредба: Употреба"
+
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "Включи визуализацията"
msgctxt "#511"
msgid "Enable video mode switching"
msgctxt "#534"
msgid "View: %s"
-msgstr "Ð\92ид: %s"
+msgstr "Ð\98зглед: %s"
msgctxt "#535"
msgid "List"
msgctxt "#550"
msgid "Sort by: %s"
-msgstr "СоÑ\80Ñ\82. по: %s"
+msgstr "Ð\9fодÑ\80едба: %s"
msgctxt "#551"
msgid "Name"
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"
msgctxt "#576"
msgid "Times played"
-msgstr "Ð\91Ñ\80ой вÑ\8aзпÑ\80оизвеждания"
+msgstr "Ð\91Ñ\80ой гледания"
msgctxt "#577"
msgid "Date Taken"
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"
msgctxt "#600"
msgid "Rip audio CD"
-msgstr "Извличане на музиката в CD-то"
+msgstr "Извличане на музика от аудио диск"
msgctxt "#601"
msgid "Medium"
msgid "Enter number"
msgstr "Въведете номер"
+msgctxt "#612"
+msgid "Bits/sample"
+msgstr "Бит/мостра"
+
msgctxt "#614"
msgid "Virtual folder"
msgstr "Виртуална папка"
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"
msgid "Custom"
msgstr "Персонално"
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "Регулиране на ReplayGain нивото"
+
msgctxt "#639"
msgid "Use track levels"
msgstr "С нива от песните"
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 "Изрязване на черните ленти"
msgctxt "#653"
msgid "Update library"
-msgstr "Ð\90кÑ\82Ñ\83ализиÑ\80ай библиотеката"
+msgstr "Ð\9eбнови библиотеката"
msgctxt "#654"
msgid "Show debug info"
msgid "HTTP proxy"
msgstr "HTTP proxy"
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Назначение"
+
msgctxt "#716"
msgid "Automatic (DHCP)"
msgstr "Автоматично (DHCP) [динамично конфигуриране]"
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"
msgctxt "#759"
msgid "View: Big list"
-msgstr "Ð\92ид: Ð\93олÑ\8fм лиÑ\81Ñ\82"
+msgstr "Ð\98зглед: Ð\93олÑ\8fм Ñ\81пиÑ\81Ñ\8aк"
msgctxt "#760"
msgid "Yellow"
msgid "Wireless network name (ESSID)"
msgstr "Име на безжичната мрежа (ESSID)"
+msgctxt "#777"
+msgid "Wireless password"
+msgstr "Парола на безжична мрежа"
+
msgctxt "#779"
msgid "Save and apply network interface settings"
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."
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"
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 съдържание"
msgid "Device name"
msgstr "Име на устройството"
+msgctxt "#1272"
+msgid "Use password protection"
+msgstr "Защити с парола"
+
msgctxt "#1273"
msgid "AirPlay"
msgstr "AirPlay"
msgid "AirTunes"
msgstr "AirTunes"
+msgctxt "#1275"
+msgid "Filter %s"
+msgstr "Филтър %s"
+
msgctxt "#1300"
msgid "Custom audio device"
msgstr "Задаено аудио устройство"
msgid "Mist"
msgstr "Мъгла"
+msgctxt "#1424"
+msgid "Overcast"
+msgstr "Плътна облачност"
+
msgctxt "#1426"
msgid "Hail"
msgstr "Градушка"
msgid "Sand"
msgstr "Пясък"
+msgctxt "#1434"
+msgid "Whirls"
+msgstr "Вихрушки"
+
msgctxt "#1435"
msgid "Sandstorm"
msgstr "Пясъчна буря"
msgid "Precipitation"
msgstr "Валеж"
+msgctxt "#1449"
+msgid "Partial"
+msgstr "Частично"
+
msgctxt "#1450"
msgid "Put display to sleep when idle"
msgstr "\"Приспиване\" на екрана при бездействие"
msgctxt "#10037"
msgid "Standard"
-msgstr "Стандарт"
+msgstr "Стандартни"
msgctxt "#10038"
msgid "Advanced"
msgid "Expert"
msgstr "За експерти"
+msgctxt "#10040"
+msgid "Add-on browser"
+msgstr "Баузър за добавки"
+
msgctxt "#10041"
msgid "Reset above settings to default"
msgstr "Нулиране на горните настройки"
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 "Браузер на файлове"
msgctxt "#10132"
msgid "Content settings"
-msgstr "Настроки на съдържанието"
+msgstr "Ð\9dаÑ\81Ñ\82Ñ\80ойки на Ñ\81Ñ\8aдÑ\8aÑ\80жаниеÑ\82о"
msgctxt "#10134"
msgid "Favourites"
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"
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."
msgctxt "#13123"
msgid "Keep skin?"
-msgstr "Ð\96елаеÑ\82е да ползваÑ\82е Ñ\82ози облик?"
+msgstr "Ð\96елаеÑ\82е ли да ползваÑ\82е облика?"
msgctxt "#13130"
msgid "Blank other displays"
msgctxt "#13301"
msgid "Auto temperature control"
-msgstr "Автоматично контролиране на температа"
+msgstr "Автоматично контролиране на температурата"
msgctxt "#13302"
msgid "Fan speed override"
msgid "Recursive slideshow"
msgstr "Рекурсивно слайдшоу"
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "В случаен ред"
+
msgctxt "#13320"
msgid "Stereo"
msgstr "Стерео"
msgctxt "#13377"
msgid "Default view mode"
-msgstr "Стандартен режим на вида"
+msgstr "Стандартен изглед"
msgctxt "#13378"
msgid "Default brightness"
msgctxt "#13550"
msgid "Pause during refresh rate change"
-msgstr "Пауза при промя на честота на обновяване"
+msgstr "Пауза при промяна честота на обновяване"
msgctxt "#13551"
msgid "Off"
msgctxt "#13613"
msgid "Multi Remote (Harmony)"
-msgstr "Multi Remote (Harmony)"
+msgstr "Универсално дистанционно (Harmony)"
msgctxt "#13620"
msgid "Apple Remote Error"
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"
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 "Премахни"
msgctxt "#15215"
msgid "Hide file names in thumbs view"
-msgstr "Ð\9fÑ\80и вид с миниатюри скрий имената на файловете"
+msgstr "Ð\9fÑ\80и изглед с миниатюри скрий имената на файловете"
msgctxt "#15216"
msgid "Play in party mode"
msgctxt "#16101"
msgid "Unwatched"
-msgstr "Негледани"
+msgstr "Ð\9dеизгледани"
msgctxt "#16102"
msgid "Watched"
-msgstr "Ð\93ледани"
+msgstr "Ð\98згледани"
msgctxt "#16103"
msgid "Mark as watched"
msgid "Edit title"
msgstr "Редактирай заглавието"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Управление..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Заглавие за сортиране"
msgctxt "#16312"
msgid "(VDPAU)Noise Reduction"
-msgstr "(VDPAU)Намаляване на шумa"
+msgstr "(VDPAU)Намаляване на шума"
msgctxt "#16313"
msgid "(VDPAU)Sharpness"
msgid "Software Blend"
msgstr "Software Blend"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-processing"
msgid "Importing EPG from clients"
msgstr "Внасяне на EPG от клиентите"
+msgctxt "#19005"
+msgid "PVR stream information"
+msgstr "Информация за PVR протокола"
+
msgctxt "#19006"
msgid "Receiving device"
msgstr "Приемащо устройство"
msgid "UNC"
msgstr "UNC"
+msgctxt "#19012"
+msgid "PVR Backend"
+msgstr "PVR сървър"
+
+msgctxt "#19013"
+msgid "Free to air"
+msgstr "Без шифриране"
+
msgctxt "#19014"
msgid "Fixed"
msgstr "Фиксирана"
msgid "Encryption"
msgstr "Шифроване"
+msgctxt "#19016"
+msgid "PVR Backend %i - %s"
+msgstr "PVR сървър %i - %s"
+
msgctxt "#19017"
msgid "TV recordings"
msgstr "Записи от ТВ"
msgctxt "#19027"
msgid "No search results"
-msgstr "Няма резултати от търсенето"
+msgstr "Няма резултат от търсенето"
+
+msgctxt "#19028"
+msgid "No EPG entries"
+msgstr "Няма EPG записи"
msgctxt "#19029"
msgid "Channel"
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"
msgctxt "#19047"
msgid "Programme info"
-msgstr "Ð\9fÑ\80огÑ\80ама инÑ\84о"
+msgstr "Ð\98нÑ\84. за пÑ\80огÑ\80амаÑ\82а"
msgctxt "#19048"
msgid "Group management"
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 "Забавяне на превключването"
msgid "Next timer on"
msgstr "Следващ брояч"
+msgctxt "#19107"
+msgid "at"
+msgstr "в"
+
msgctxt "#19109"
msgid "Couldn't save timer. Check the log for details."
msgstr "Незапазен брояч. Проверете дневника за детайли."
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 "Време на започване"
msgid "Search string"
msgstr "Низ за търсене"
+msgctxt "#19134"
+msgid "Include description"
+msgstr "Търси в описанията"
+
+msgctxt "#19135"
+msgid "Case sensitive"
+msgstr "Различаване на малки и главни букви"
+
msgctxt "#19136"
msgid "Channel unavailable"
msgstr "Каналът е недостъпен"
msgid "Cannot start recording. Check the log for details."
msgstr "Записът не може да бъде започнат. Проверете дневника за детайли."
+msgctxt "#19165"
+msgid "Switch"
+msgstr "Превключи"
+
msgctxt "#19166"
msgid "PVR information"
msgstr "PVR информация"
msgid "Scan for missing icons"
msgstr "Сканирай за липсващи икони"
+msgctxt "#19169"
+msgid "Hide video information box"
+msgstr "Скрий информацията за видеото"
+
msgctxt "#19172"
msgid "Instant recording duration"
msgstr "Продължителност на незабавните записи"
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 "Възпроизвеждане"
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 "Диспечер на каналите"
msgid "Enter the name of the new channel"
msgstr "Въведете име на новия канал"
+msgctxt "#19209"
+msgid "XBMC virtual backend"
+msgstr "Виртуален сървър XBMC"
+
msgctxt "#19210"
msgid "Client"
msgstr "Клиент"
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 "Всички радио канали"
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"
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])"
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 "Начало на запис"
msgid "Parental control"
msgstr "Родителски контрол"
+msgctxt "#19260"
+msgid "Unlock duration"
+msgstr "Период за отключване"
+
msgctxt "#19261"
msgid "Change PIN"
msgstr "Променете кода"
msgid "Client specific settings"
msgstr "Настройки, специфични за клиента"
+msgctxt "#19499"
+msgid "Other/Unknown"
+msgstr "Друго/Нейзвестно"
+
msgctxt "#19500"
msgid "Movie/Drama"
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 "Спорт"
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 "Информационни/Образователни/Училищни програми"
msgid "Arts/Culture"
msgstr "Изкуства/Култура"
+msgctxt "#19598"
+msgid "Fine Arts"
+msgstr "Изящни изкуства"
+
msgctxt "#19599"
msgid "Religion"
msgstr "Религия"
msgid "Film/Cinema"
msgstr "Филм/Кино"
+msgctxt "#19603"
+msgid "Experimental Film/Video"
+msgstr "Експериментален филм/видео"
+
msgctxt "#19607"
msgid "Fashion"
msgstr "Мода"
msgid "Tourism/Travel"
msgstr "Туризъм/Пътешествия"
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Авто Мото"
+
msgctxt "#19648"
msgid "Fitness & Health"
msgstr "Фитнес и здраве"
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 "Драма"
msgctxt "#20014"
msgid "Sort by: Playlist"
-msgstr "СоÑ\80Ñ\82. по: Плейлист"
+msgstr "Ð\9fодÑ\80едба: Плейлист"
msgctxt "#20015"
msgid "Remote thumb"
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"
msgctxt "#20128"
msgid "Go to root"
-msgstr "Ð\9eÑ\82иди в оÑ\81новнаÑ\82а"
+msgstr "Ð\9aÑ\8aм в оÑ\81новнаÑ\82а папка"
msgctxt "#20129"
msgid "Weave"
msgctxt "#20185"
msgid "Use poster view styles for TV shows"
-msgstr "Ð\97а ТÐ\92 СеÑ\80иали ползвай вид с плакати"
+msgstr "Ð\97а ТÐ\92 СеÑ\80иали ползвай изглед с плакати"
msgctxt "#20186"
msgid "Please wait"
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"
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"
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"
msgctxt "#20365"
msgid "Episode plot"
-msgstr "Сюжет на епизода"
+msgstr "Сюжет на епизод"
msgctxt "#20366"
msgid "* All seasons"
msgctxt "#20367"
msgid "Hide watched"
-msgstr "Без гледаните"
+msgstr "Ð\91ез изгледаниÑ\82е"
msgctxt "#20368"
msgid "Prod code"
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 *"
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"
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"
msgid "Writer"
msgstr "Сценарист"
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Сценаристи"
+
msgctxt "#20419"
msgid "Replace file names with library titles"
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"
msgctxt "#20435"
msgid "Combine split video items"
-msgstr "Ð\9eбединÑ\8fвай оÑ\82делениете елементи на едно видео"
+msgstr "Ð\9eбединÑ\8fвай оÑ\82делните елементи на едно видео"
msgctxt "#20436"
msgid "Export actor thumbs?"
msgctxt "#20442"
msgid "Change content"
-msgstr "Промени съдържанието"
+msgstr "Промяна на съдържанието"
msgctxt "#20443"
msgid "Do you want to refresh info for all"
msgctxt "#20465"
msgid "Manage movie set"
-msgstr "УпÑ\80авление на передица"
+msgstr "УпÑ\80авление на поредица"
msgctxt "#20466"
msgid "Select movie set"
msgctxt "#20468"
msgid "Add movie to a new set"
-msgstr "Ð\94обавÑ\8fне кÑ\8aм нова поредица"
+msgstr "Ð\9dова поредица"
msgctxt "#20469"
msgid "Keep current set (%s)"
msgid "Remove media share"
msgstr "Премахни споделения медиен ресурс"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка за субтитри"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
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"
msgid "mixed"
msgstr "смесено"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Позиция на субтитрите"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Фиксирана"
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"
msgctxt "#21832"
msgid "Exposure mode"
-msgstr "Rежим на експозиция"
+msgstr "Режим на експозиция"
msgctxt "#21833"
msgid "Flash used"
msgid "Date created"
msgstr "Дата на създаване"
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "Спешност"
+
msgctxt "#21879"
msgid "Country code"
msgstr "Код на държавата"
msgctxt "#21891"
msgid "Artist information"
-msgstr "Информация за артис"
+msgstr "Информация за артиста"
msgctxt "#21892"
msgid "Instruments"
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"
msgid "Running"
msgstr "Изпълнява се"
+msgctxt "#23055"
+msgid "Scale Teletext to 4:3"
+msgstr "Мащабирай телетекста до 4:3"
+
msgctxt "#23100"
msgid "External Player Active"
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:"
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 "Известия"
msgctxt "#33060"
msgid "Power"
-msgstr "Ð\9cоÑ\89ноÑ\81Ñ\82"
+msgstr "Ð\98зклÑ\8eÑ\87и..."
msgctxt "#33061"
msgid "Menu"
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"
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"
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."
msgctxt "#35100"
msgid "Enable joystick and gamepad support"
-msgstr "Включи поддръжката на gamepad"
+msgstr "Включи поддръжката на геймпад"
msgctxt "#35102"
msgid "Disable joystick when this device is present"
msgctxt "#36026"
msgid "Put devices in standby mode when putting the PC in standby"
-msgstr "При активен режим \"Изчакване\" за компютъра задай режима и за усройствата"
+msgstr "При активен режим \"Изчакване\", за компютъра, задай режима и за устройствата"
msgctxt "#36027"
msgid "This device needs servicing"
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)"
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."
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."
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."
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."
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."
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"
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."
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."
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."
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."
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."
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 "Все още не е налична информация."
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 тихи канала, които се нуждаят от усилване)"
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 "Все още не е налична информация."
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."
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."
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 "Стереоскопичен режим (текущ)"
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 "Запитване"
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"
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."
msgid "TuxBox device"
msgstr "TuxBox device"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "စာတန်းထိုး ဖိုင်တွဲ"
-
msgctxt "#21371"
msgid "Thumbnail"
msgstr "Thumbnail"
msgid "Cache full"
msgstr "Cache ပြည့်နေသည်"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "စာတန်းထိုးမည့်နေရာ"
-
msgctxt "#21461"
msgid "Fixed"
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 "မှတ်တမ်းသွင်းမည်"
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"
msgctxt "#258"
msgid "Enable tag reading"
-msgstr "Activa la lectura d'etiquetes"
+msgstr "Habilita la lectura d'etiquetes"
msgctxt "#259"
msgid "Opening"
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"
msgctxt "#305"
msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
msgctxt "#306"
msgid "Non-interleaved"
msgctxt "#449"
msgid "Enabled"
-msgstr "Activat"
+msgstr "Habilitat"
msgctxt "#450"
msgid "Columns"
msgid "Credits"
msgstr "Crèdits"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Inactiu"
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"
msgctxt "#1035"
msgid "Enable submenu buttons"
-msgstr "Activa els botons del submenú"
+msgstr "Habilita els botons del submenú"
msgctxt "#1036"
msgid "Favourites"
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"
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"
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"
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"
msgctxt "#13323"
msgid "Enable karaoke support"
-msgstr "Activa el suport de karaoke"
+msgstr "Habilita el suport de karaoke"
msgctxt "#13324"
msgid "Background transparency"
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"
msgctxt "#13397"
msgid "Enable subtitles"
-msgstr "Activa els subtítols"
+msgstr "Habilita els subtítols"
msgctxt "#13398"
msgid "Shortcuts"
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)"
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"
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"
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"
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"
msgctxt "#19058"
msgid "Timer enabled"
-msgstr "Temporitzador activat"
+msgstr "Temporitzador habilitat"
msgctxt "#19059"
msgid "Stop recording"
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."
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"
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"
msgctxt "#20079"
msgid "Enable animations"
-msgstr "Enable animations"
+msgstr "Habilita les animacions"
msgctxt "#20080"
msgid "Disable RSS during music"
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"
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?"
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"
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"
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"
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"
msgctxt "#21389"
msgid "Enable custom background"
-msgstr "Enable custom background"
+msgstr "Habilita el fons personalitzat"
msgctxt "#21390"
msgid "Power management level"
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"
msgid "mixed"
msgstr "mesclat"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicació dels subtítols"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixed"
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)"
msgctxt "#24022"
msgid "Enable"
-msgstr "Activa"
+msgstr "Habilita"
msgctxt "#24023"
msgid "Add-on disabled"
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"
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?"
msgctxt "#24062"
msgid "Enabled Add-ons"
-msgstr "Complements activats"
+msgstr "Complements habilitats"
msgctxt "#24063"
msgid "Auto update"
msgctxt "#24064"
msgid "Add-on enabled"
-msgstr "Complement activat"
+msgstr "Complement habilitat"
msgctxt "#24065"
msgid "Add-on updated"
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?"
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 ..."
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"
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"
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"
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"
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"
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"
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"
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."
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."
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."
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."
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)"
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)"
msgid "Select destination directory"
msgstr "选择目标目录"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "立体声输出到所有扬声器"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "声道数"
msgid "Credits"
msgstr "开发者"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "改机"
-
msgctxt "#474"
msgid "Off"
msgstr "关"
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 "影音同步方式"
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 "移除"
msgid "VDPAU - Bob"
msgstr "VDPAU - 场内插值"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "后处理"
msgid "TV recordings"
msgstr "电视录像"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 缩略图默认文件夹"
-
msgctxt "#19019"
msgid "Channels"
msgstr "频道"
msgid "EPG"
msgstr "电子节目单"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "现在转入"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "电子节目单更新间隔"
msgid "Service"
msgstr "服务"
+msgctxt "#19100"
+msgid "Mux"
+msgstr "复用器"
+
msgctxt "#19101"
msgid "Provider"
msgstr "提供者"
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 音乐"
msgid "Remove media share"
msgstr "移除媒体共享"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "字幕文件夹"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "电影和备选字幕目录"
msgid "mixed"
msgstr "混合"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕位置"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "固定"
msgctxt "#21821"
msgid "Description"
-msgstr "照片描述"
+msgstr "描述"
msgctxt "#21822"
msgid "Camera make"
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 "提示信息"
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"
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 "播放用户界面音效"
msgid "Disable joystick when this device is present"
msgstr "当此设备接入时禁用游戏杆"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "全屏画面启用系统键"
+
msgctxt "#35500"
msgid "Location"
msgstr "位置"
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 "允许视频播放器为尽可能将视频满屏显示而在一定程度上忽略宽高比。"
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."
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."
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 音频流时选择此项。"
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)"
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 "首选模式"
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 "(视障)"
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 "设置用户界面分辨率限制"
msgid "Adjust display refresh rate to match video"
msgstr "調整視訊更新頻率以符合視訊"
+msgctxt "#171"
+msgid "Sort title"
+msgstr "排序標題"
+
msgctxt "#172"
msgid "Release date"
msgstr "發行日期"
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 "通道數"
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 "多位演出者"
msgid "Year"
msgstr "年份"
+msgctxt "#346"
+msgid "Normalize levels on downmix"
+msgstr "下降混合的正規化程度"
+
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgstr "DTS-HD 相容接收機"
msgid "Cache"
msgstr "快取"
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "硬碟"
+
msgctxt "#441"
msgid "UDF"
msgstr "UDF"
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 "啟用"
msgid "Switch view"
msgstr "選擇顯示"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "限制取樣頻率 (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "字幕"
msgid "Credits"
msgstr "工作人員"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "改機晶片"
-
msgctxt "#474"
msgid "Off"
msgstr "關閉"
msgid "Sort by: Usage"
msgstr "排序:使用次數"
+msgctxt "#510"
+msgid "Enable visualisations"
+msgstr "啟用視覺效果"
+
msgctxt "#511"
msgid "Enable video mode switching"
msgstr "啟用 切換視訊模式"
msgid "Sample rate"
msgstr "取樣率"
+msgctxt "#614"
+msgid "Virtual folder"
+msgstr "虛擬資料夾"
+
msgctxt "#620"
msgid "Audio CDs"
msgstr "音樂 CD 擷取"
msgid "Custom"
msgstr "自訂"
+msgctxt "#637"
+msgid "ReplayGain"
+msgstr "回放增益"
+
+msgctxt "#638"
+msgid "ReplayGain volume adjustments"
+msgstr "回放增益音量調整"
+
msgctxt "#639"
msgid "Use track levels"
msgstr "依曲目重覆播放"
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 "修剪黑邊"
msgid "HTTP proxy"
msgstr "HTTP 代理伺服器"
+msgctxt "#715"
+msgid "Assignment"
+msgstr "指派"
+
msgctxt "#716"
msgid "Automatic (DHCP)"
msgstr "自動(動態分配)"
msgid "Program Add-ons"
msgstr "程式附加元件"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "設定外掛縮圖"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "附加元件設定"
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內容"
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 "您確定要重設該類別下的設定嗎?"
msgid "No help available"
msgstr "無說明內容"
+msgctxt "#10100"
+msgid "Yes/No dialogue"
+msgstr "確認對話框"
+
+msgctxt "#10101"
+msgid "Progress dialogue"
+msgstr "進度對話框"
+
msgctxt "#10126"
msgid "File browser"
msgstr "檔案瀏覽器"
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 "視訊/資訊"
msgid "Fullscreen video"
msgstr "全螢幕視訊"
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "音效視覺效果"
+
msgctxt "#12009"
msgid "Rebuild index..."
msgstr "重建目錄索引…"
msgctxt "#12360"
msgid "Master lock"
-msgstr "主機鎖定"
+msgstr "管理員密碼"
msgctxt "#12362"
msgid "Shutdown system if Master Lock retries exceeded"
msgid "Reboot"
msgstr "重新啟動"
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "最小化"
+
msgctxt "#13015"
msgid "Power button action"
msgstr "電源按鈕作用"
msgid "Save resolution?"
msgstr "儲存此解析度?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "你要保留這個修改嗎?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "高品質軟體升頻"
msgid "Primary DNS"
msgstr "主要的 DNS 位址"
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "初始化失敗"
+
msgctxt "#13170"
msgid "Never"
msgstr "從不"
msgid "Recursive slideshow"
msgstr "重覆圖片"
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "隨機"
+
msgctxt "#13320"
msgid "Stereo"
msgstr "立體聲"
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 "計算大小"
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 "影音同步方式"
msgid "No art"
msgstr "沒有圖片"
+msgctxt "#13516"
+msgid "Add art"
+msgstr "新增圖片"
+
msgctxt "#13550"
msgid "Pause during refresh rate change"
msgstr "當變更更新率時暫停"
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 遙控器"
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 "視訊緩衝區 - 光碟機"
msgid "Stop ripping CD"
msgstr "停止擷取CD"
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "無法取得的來源"
+
msgctxt "#15015"
msgid "Remove"
msgstr "移除"
msgid "Play using..."
msgstr "播放方式…"
+msgctxt "#15214"
+msgid "Use smoothed A/V synchronisation"
+msgstr "使用流暢的影音同步"
+
msgctxt "#15215"
msgid "Hide file names in thumbs view"
msgstr "顯示縮圖時隱藏檔案名稱"
msgid "No matching songs in the library."
msgstr "資料庫歌曲檔案不符。"
+msgctxt "#16032"
+msgid "Could not initialise database."
+msgstr "無法初始化資料庫。"
+
msgctxt "#16033"
msgid "Could not open database."
msgstr "無法打開資料庫。"
msgid "Edit title"
msgstr "編輯標題"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "管理..."
+
msgctxt "#16200"
msgid "Operation was aborted"
msgstr "操作被取消"
msgid "Inverse Telecine"
msgstr "填補為逐行信號"
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Lanczos3 最佳化"
+
msgctxt "#16316"
msgid "Auto"
msgstr "自動"
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 "視訊後處理"
msgid "TV recordings"
msgstr "電視錄影"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 縮圖的預設目錄"
-
msgctxt "#19019"
msgid "Channels"
msgstr "頻道"
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 "這個錄影無法被播放。詳情請查閱日誌。"
msgid "Warning"
msgstr "警告"
+msgctxt "#19099"
+msgid "Service"
+msgstr "服務"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "請切換到另一個頻道"
msgid "Timeout when starting playback"
msgstr "開始播放時超時"
+msgctxt "#19171"
+msgid "Start playback minimised"
+msgstr "開始播放時最小化"
+
msgctxt "#19172"
msgid "Instant recording duration"
msgstr "即時錄影長度"
msgid "Continue last channel on startup"
msgstr "啟動時切換到上次的頻道"
+msgctxt "#19190"
+msgid "Minimised"
+msgstr "最小化"
+
msgctxt "#19191"
msgid "PVR service"
msgstr "PVR 服務"
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 "永遠使用後端的頻道順序"
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 以取得更多資訊。"
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 "天氣資訊"
msgctxt "#20118"
msgid "This requires the master lock to be set."
-msgstr "需先設定管理員鎖定"
+msgstr "需先設定管理員密碼。"
msgctxt "#20119"
msgid "Would you like to set it now?"
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 音樂"
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 "掃描新的內容"
msgid "Sets"
msgstr "影片集"
+msgctxt "#20435"
+msgid "Combine split video items"
+msgstr "合併分開的影片項目"
+
msgctxt "#20436"
msgid "Export actor thumbs?"
msgstr "匯出演員縮略圖"
msgid "Remove media share"
msgstr "移除媒體共享"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "自訂字幕資料夾"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "電影和替代字幕資料夾"
msgid "mixed"
msgstr "混合"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕位置"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "固定"
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 "檔案名稱"
msgid "Guide"
msgstr "節目表"
+msgctxt "#22021"
+msgid "Allowed error in aspect ratio to minimise black bars"
+msgstr "為減少黑邊允許高寬比誤差"
+
msgctxt "#22022"
msgid "Show video files in listings"
msgstr "在清單中顯示視訊檔"
msgctxt "#23049"
msgid "Teletext not available"
-msgstr "只不到 Teletext"
+msgstr "找不到電傳文訊"
msgctxt "#23050"
msgid "Activate Teletext"
-msgstr "使用廣播視訊"
+msgstr "使用電傳文訊"
msgctxt "#23051"
msgid "Part %i"
msgctxt "#23055"
msgid "Scale Teletext to 4:3"
-msgstr "將 Teletext 比例調為4:3"
+msgstr "將電傳文訊比例調為 4:3"
msgctxt "#23100"
msgid "External Player Active"
msgid "Script"
msgstr "腳本"
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "視覺效果"
+
msgctxt "#24011"
msgid "Add-on repository"
msgstr "附加元件庫"
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 "可取得的附加元件"
msgid "Lock Add-on manager"
msgstr "鎖定附加元件管理員"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "這個附加元件不能被停用"
+
msgctxt "#24094"
msgid "(current)"
msgstr "〈目前版本〉"
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 "您想要在您的系統上停用嗎?"
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 "通知"
msgid "Clips"
msgstr "片斷"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "重新啟動外掛以啟用"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "今晚"
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"
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 "找不到下一個播放項目"
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 "檢查你的音訊設定"
msgctxt "#34408"
msgid "2 finger single tap or 1 finger long press for contextmenu"
-msgstr "兩指點一下或單指長按開啟內容功能表"
+msgstr "兩指點一下或單指長按開啟內容選單"
msgctxt "#35000"
msgid "Peripherals"
msgid "Generic HID device"
msgstr "通用 HID 裝置"
+msgctxt "#35002"
+msgid "Generic network adaptor"
+msgstr "通用網路配接器"
+
msgctxt "#35003"
msgid "Generic disk"
msgstr "通用磁碟機"
msgid "Disable joystick when this device is present"
msgstr "本裝置存在時停用搖桿"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "全螢幕時啟用系統按鍵"
+
msgctxt "#35500"
msgid "Location"
msgstr "位置"
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"
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 時打開這台電視"
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連接埠編號"
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 "使用這個電視的語言設定"
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 "切換到其他來源時暫停播放"
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 "改變使用者介面的視覺風格"
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 "顯示隱藏的檔案和目錄。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "無可用資訊。"
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 "設定使用者介面的解析度限制"
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"
msgid "Credits"
msgstr "Zasluge"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
msgctxt "#474"
msgid "Off"
msgstr "Isključi"
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"
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"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Dodatna obrada"
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"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Idi odmah"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "EPG interval ažuriranja"
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"
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"
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"
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"
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"
msgid "mixed"
msgstr "izmješano"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokacija podnaslova"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fiksni"
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"
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"
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."
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."
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)"
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)"
msgctxt "#9"
msgid "xbmc media center"
-msgstr "Multimediální centrum xmbc"
+msgstr "Multimediální centrum XBMC"
msgctxt "#11"
msgid "Monday"
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ů"
msgid "Credits"
msgstr "Zásluhy"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Vypnuto"
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"
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"
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é"
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í"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Nastavení reproduktorů"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
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"
msgid "Credits"
msgstr "Tak til"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Fra"
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"
msgctxt "#19026"
msgid "Add timer..."
-msgstr "Tilføj timer..."
+msgstr "Tilføj optagelse..."
msgctxt "#19027"
msgid "No search results"
msgctxt "#19040"
msgid "Timer"
-msgstr "Timer"
+msgstr "Optagelse"
msgctxt "#19041"
msgid "Are you sure you want to rename this recording?"
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"
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"
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"
msgctxt "#19106"
msgid "Next timer on"
-msgstr "Næste timer aktiveret"
+msgstr "Næste optagelse kl. "
msgctxt "#19107"
msgid "at"
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."
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"
msgctxt "#19124"
msgid "Ignore present timers"
-msgstr "Ignorer nuværende timere"
+msgstr "Ignorer nuværende optagelser"
msgctxt "#19125"
msgid "Ignore present recordings"
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"
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"
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"
msgctxt "#20144"
msgid "Shutdown timer"
-msgstr "Nedlukningstimer"
+msgstr "Sluk nedtælling"
msgctxt "#20145"
msgid "Shutdown interval (in minutes)"
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"
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"
msgid "mixed"
msgstr "Blandede"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Undertekstplacering"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fast"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Højttalerkonfiguration"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
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."
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."
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."
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."
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."
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."
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."
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."
msgctxt "#129"
msgid "Slideshow"
-msgstr "Voorstelling"
+msgstr "Diavoorstelling"
msgctxt "#130"
msgid "System info"
msgctxt "#179"
msgid "Song"
-msgstr "Tracklist"
+msgstr "Lied"
msgctxt "#180"
msgid "Duration"
msgctxt "#182"
msgid "Tracks"
-msgstr "Nummer"
+msgstr "Nummers"
msgctxt "#183"
msgid "Review"
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"
msgctxt "#347"
msgid "DTS-HD capable receiver"
-msgstr "DTS-HD geschikte obtvanger"
+msgstr "DTS-HD geschikte ontvanger"
msgctxt "#348"
msgid "Enable passthrough"
msgctxt "#440"
msgid "Hard disk"
-msgstr "Harde Schijf"
+msgstr "Harde schijf"
msgctxt "#441"
msgid "UDF"
msgid "Credits"
msgstr "Credits"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Uit"
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"
msgctxt "#629"
msgid "View mode"
-msgstr "Weergave"
+msgstr "Weergave modus"
msgctxt "#630"
msgid "Normal"
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)"
msgctxt "#13162"
msgid "Initialise failed"
-msgstr "Initialiseren mislukt"
+msgstr "Initialisatie mislukt"
msgctxt "#13170"
msgid "Never"
msgctxt "#13319"
msgid "Randomise"
-msgstr "Willekeurige volgorde"
+msgstr "Willekeurige"
msgctxt "#13320"
msgid "Stereo"
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"
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"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Kwaliteitsverbetering video"
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"
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"
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"
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"
msgid "mixed"
msgstr "gemixed"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Locatie van de ondertitels"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Vast"
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"
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"
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"
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."
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."
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."
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."
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)"
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)"
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"
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"
msgid "Framerate conversion"
msgstr "Framerate conversion"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Output configuration"
+
msgctxt "#338"
msgid "Fixed"
msgstr "Fixed"
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"
msgid "Switch view"
msgstr "Switch view"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Limit sampling rate (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Subs"
msgid "Credits"
msgstr "Credits"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Off"
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"
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?"
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"
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"
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"
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"
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"
msgid "Edit title"
msgstr "Edit title"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Manage..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Edit sort title"
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"
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."
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"
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."
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"
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"
msgid "mixed"
msgstr "mixed"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitle location"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixed"
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"
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"
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)"
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?"
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"
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"
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."
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)"
#: system/settings/settings.xml
msgctxt "#252"
-msgid "Output stereo to all speakers"
+msgid "Stereo upmix"
msgstr ""
msgctxt "#253"
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"
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"
msgstr ""
msgctxt "#13440"
-msgid "Frame Multi Threaded Decoding (less reliable)"
+msgid "Allow frame-multi-threaded decoding"
msgstr ""
#empty strings from id 13441 to 13499
#: 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
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
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."
msgid "EPG"
msgstr ""
-#empty string with id 19070
+msgctxt "#19070"
+msgid "Go to now"
+msgstr ""
msgctxt "#19071"
msgid "EPG update interval"
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"
#: xbmc/epg/Epg.cpp
msgctxt "#19648"
-msgid "Fitness & Health"
+msgid "Fitness & Health"
msgstr ""
#: xbmc/epg/Epg.cpp
#: xbmc/epg/Epg.cpp
msgctxt "#19662"
-msgid "Black & White"
+msgid "Black & White"
msgstr ""
#: xbmc/epg/Epg.cpp
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"
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..."
#: system/settings/settings.xml
msgctxt "#21366"
-msgid "Subtitle folder"
+msgid "Custom subtitle folder"
msgstr ""
msgctxt "#21367"
#: system/settings/settings.xml
msgctxt "#21460"
-msgid "Subtitle location"
+msgid "Subtitle location on screen"
msgstr ""
#: system/settings/settings.xml
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"
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
#: system/settings/settings.xml
msgctxt "#34100"
-msgid "Speaker Configuration"
+msgid "Number of channels"
msgstr ""
#: system/settings/settings.xml
#: 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
#: 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
#: 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
#: 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
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
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 ""
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"
msgid "Credits"
msgstr "CrEditiis"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Off"
msgid "Weather"
msgstr "Mia Wealar"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Tajpi Search String"
+
msgctxt "#34123"
msgid "Never"
msgstr "Never"
msgctxt "#36016"
msgid "Connected"
msgstr "Xbox is Connected"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Registri"
msgctxt "#77"
msgid "SE"
-msgstr "kagu"
+msgstr "Kagu"
msgctxt "#78"
msgid "SSE"
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"
msgctxt "#179"
msgid "Song"
-msgstr "Lugu"
+msgstr "Laul"
msgctxt "#180"
msgid "Duration"
msgctxt "#182"
msgid "Tracks"
-msgstr "Lugusid"
+msgstr "Lood"
msgctxt "#183"
msgid "Review"
msgctxt "#225"
msgid "Vertical Shift"
-msgstr "Vertikaalne"
+msgstr "Vertikaalne nihe"
msgctxt "#226"
msgid "Test patterns..."
msgctxt "#231"
msgid "None"
-msgstr "Ükski"
+msgstr "Puudub"
msgctxt "#232"
msgid "Point"
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"
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"
msgctxt "#256"
msgid "Fetching CD information"
-msgstr "CD andmete toomine"
+msgstr "CD andmete hankimine"
msgctxt "#257"
msgid "Error"
msgctxt "#258"
msgid "Enable tag reading"
-msgstr "Luba silumise logimine"
+msgstr "Luba märgendi lugemine"
msgctxt "#259"
msgid "Opening"
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"
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..."
msgctxt "#370"
msgid "Thunderstorms"
-msgstr "pikne"
+msgstr "äikesetormid"
msgctxt "#371"
msgid "Partly"
msgid "Credits"
msgstr "Tiitrid"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod-kiip"
-
msgctxt "#474"
msgid "Off"
msgstr "Väljas"
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"
msgctxt "#612"
msgid "Bits/sample"
-msgstr "Bitid/diskreet"
+msgstr "Bitid/valim"
msgctxt "#613"
msgid "Sample rate"
msgctxt "#738"
msgid "Normal"
-msgstr "Normal"
+msgstr "Normaalne"
msgctxt "#739"
msgid "Bold"
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"
msgctxt "#766"
msgid "Light grey"
-msgstr "Heleroheline"
+msgstr "Helehall"
msgctxt "#767"
msgid "Grey"
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."
msgctxt "#796"
msgid "Continuous repeat delay (ms)"
-msgstr "Korduse intervall (ms)"
+msgstr "Pidev viivitus (ms)"
msgctxt "#797"
msgid "Maximum number of clients"
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?"
msgctxt "#999"
msgid "Add Videos..."
-msgstr "Lisa videosid..."
+msgstr "Lisa videoid..."
msgctxt "#1000"
msgid "Preview"
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"
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"
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"
msgctxt "#1398"
msgid "Freezing"
-msgstr "külmutamine"
+msgstr "jäine"
msgctxt "#1399"
msgid "Late"
msgid "windy"
msgstr "tuuline"
+msgctxt "#1413"
+msgid "Patches"
+msgstr "laigud"
+
msgctxt "#1414"
msgid "Thunderstorm"
msgstr "äikesetorm"
msgctxt "#1425"
msgid "Pellets"
-msgstr "Pelletid"
+msgstr "Graanulid"
msgctxt "#1426"
msgid "Hail"
msgid "Sand"
msgstr "Liiv"
+msgctxt "#1433"
+msgid "Spray"
+msgstr "Pihustatud"
+
msgctxt "#1434"
msgid "Whirls"
msgstr "Tuisupöörised"
msgctxt "#1437"
msgid "Pellet"
-msgstr "Pellet"
+msgstr "Graanul"
msgctxt "#1438"
msgid "Small"
msgid "of"
msgstr "/"
+msgctxt "#1444"
+msgid "Funnel"
+msgstr "lehter"
+
msgctxt "#1445"
msgid "Cloud"
msgstr "Pilv"
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"
msgctxt "#10029"
msgid "Login screen"
-msgstr "Logimisviip"
+msgstr "Logimisekraan"
msgctxt "#10034"
msgid "Settings - Profiles"
msgctxt "#12011"
msgid "Return to videos window"
-msgstr "Tagasi videode menüüsse"
+msgstr "Tagasi videote menüüsse"
msgctxt "#12021"
msgid "Start from beginning"
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."
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"
msgctxt "#13003"
msgid "- Delay"
-msgstr "- Viitus"
+msgstr "- Viivitus"
msgctxt "#13004"
msgid "- Minimum file duration"
msgctxt "#13010"
msgid "Hibernate"
-msgstr "Hiberneeri"
+msgstr "Uinu"
msgctxt "#13011"
msgid "Suspend"
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…"
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"
msgctxt "#13112"
msgid "High quality upscaling"
-msgstr "Audio visualiseerimine"
+msgstr "Kõrge kvaliteediga suurendus"
msgctxt "#13113"
msgid "Disabled"
msgctxt "#13130"
msgid "Blank other displays"
-msgstr "Tühista teised ekraanid"
+msgstr "Pimenda teised ekraanid"
msgctxt "#13131"
msgid "Disabled"
msgctxt "#13132"
msgid "Blank displays"
-msgstr "Tühistatud ekraanid"
+msgstr "Pimendatud ekraanid"
msgctxt "#13140"
msgid "Active connections detected!"
msgctxt "#13204"
msgid "Last loaded profile:"
-msgstr "Viimati laaditud profiil:"
+msgstr "Viimati laetud profiil:"
msgctxt "#13205"
msgid "Unknown"
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"
msgctxt "#13270"
msgid "Hardware:"
-msgstr "Riistvara"
+msgstr "Riistvara:"
msgctxt "#13271"
msgid "CPU Usage:"
msgctxt "#13302"
msgid "Fan speed override"
-msgstr "Ventilaatori kiiruse alistus"
+msgstr "Etteantud ventilaatori kiirus"
msgctxt "#13303"
msgid "Fonts"
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"
msgctxt "#13311"
msgid "Float effect"
-msgstr "Ujumise efekt"
+msgstr "Hõljumise efekt"
msgctxt "#13312"
msgid "Black bar reduction"
msgctxt "#13317"
msgid "View slideshow"
-msgstr "Slaidiseanss"
+msgstr "Vaata slaidiesitlust"
msgctxt "#13318"
msgid "Recursive slideshow"
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"
msgctxt "#13356"
msgid "Hardware overlays"
-msgstr "Riistvara katted"
+msgstr "Riistvaralised katted"
msgctxt "#13357"
msgid "High quality pixel shader"
msgctxt "#13359"
msgid "Set artist thumb"
-msgstr "Säti artisti pisipilt"
+msgstr "Määra artisti pisipilt"
msgctxt "#13360"
msgid "Automatically generate thumbnails"
msgctxt "#13361"
msgid "Enable voice"
-msgstr "Luba kõne"
+msgstr "Luba hääl"
msgctxt "#13375"
msgid "Enable device"
msgctxt "#13387"
msgid "Track naming template - right"
-msgstr "Loo failinime mall - parem"
+msgstr "Lugude failinime mall - parem"
msgctxt "#13388"
msgid "Preset"
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"
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"
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"
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"
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"
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"
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"
msgctxt "#14094"
msgid "Input devices"
-msgstr "Sisendseaded"
+msgstr "Sisendseadmed"
msgctxt "#14095"
msgid "Power saving"
msgctxt "#15105"
msgid "* All genres"
-msgstr "* Küik žanrid"
+msgstr "* Kõik žanrid"
msgctxt "#15107"
msgid "Buffering..."
msgctxt "#15108"
msgid "Navigation sounds"
-msgstr "Menüü helinad"
+msgstr "Menüü helid"
msgctxt "#15109"
msgid "Skin default"
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"
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"
msgctxt "#16104"
msgid "Mark as unwatched"
-msgstr "Märgi vaatamataks"
+msgstr "Märgi mitte vaadatuks"
msgctxt "#16105"
msgid "Edit title"
msgctxt "#19007"
msgid "Device status"
-msgstr "Seade seisund"
+msgstr "Seadme seisund"
msgctxt "#19008"
msgid "Signal quality"
msgctxt "#19013"
msgid "Free to air"
-msgstr "Free to air"
+msgstr "Vabalevi"
msgctxt "#19014"
msgid "Fixed"
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"
msgctxt "#19032"
msgid "Timeline"
-msgstr "Ajavöö"
+msgstr "Ajaskaala"
msgctxt "#19033"
msgid "Information"
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"
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?"
msgctxt "#19073"
msgid "Delay channel switch"
-msgstr "Viivita kanali vahetust"
+msgstr "Viivita kanali vahetusega"
msgctxt "#19074"
msgid "Active:"
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."
msgctxt "#19123"
msgid "Free to air channels only"
-msgstr "Tasuta vaid õhukanalitele"
+msgstr "Ainult vabalevi kanalid"
msgctxt "#19124"
msgid "Ignore present timers"
msgctxt "#19127"
msgid "End time"
-msgstr "Lõppemise aeg"
+msgstr "Lõpu aeg"
msgctxt "#19128"
msgid "Start date"
msgctxt "#19129"
msgid "End date"
-msgstr "Lõppemise kuupäev"
+msgstr "Lõpu kuupäev"
msgctxt "#19130"
msgid "Minimum duration"
msgctxt "#19135"
msgid "Case sensitive"
-msgstr "Tõusutundlik"
+msgstr "Tõstutundlik"
msgctxt "#19136"
msgid "Channel unavailable"
msgctxt "#19137"
msgid "No groups defined"
-msgstr "Gruppe pole määrateltud"
+msgstr "Gruppe pole määratletud"
msgctxt "#19138"
msgid "Please create a group first"
msgctxt "#19144"
msgid "No groups defined"
-msgstr "Gruppe pole määrateltud"
+msgstr "Gruppe pole määratletud"
msgctxt "#19145"
msgid "Grouped"
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"
msgctxt "#19179"
msgid "Automatically hide channel information"
-msgstr "Automaatselt peida kanali info"
+msgstr "Peida kanali info automaatselt"
msgctxt "#19180"
msgid "TV"
msgctxt "#19181"
msgid "Menu/OSD"
-msgstr "Menüü/kuvaregulaator"
+msgstr "Menüü/ekraanikuva"
msgctxt "#19182"
msgid "Days to display in the EPG"
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"
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"
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"
msgctxt "#19516"
msgid "News/Current Affairs"
-msgstr "Uudised/Praegused afäärid"
+msgstr "Uudised/Päevakajaline"
msgctxt "#19517"
msgid "News/Weather Report"
msgctxt "#19518"
msgid "News Magazine"
-msgstr "Ajaleht"
+msgstr "Uudisteajakiri"
msgctxt "#19519"
msgid "Documentary"
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"
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"
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"
msgctxt "#19630"
msgid "Technology/Natural Sciences"
-msgstr "Tehnoloogia/Loodusteadus"
+msgstr "Tehnoloogia/Loodusteadused"
msgctxt "#19631"
msgid "Medicine/Physiology/Psychology"
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"
msgid "Handicraft"
msgstr "Käsitöö"
+msgctxt "#19647"
+msgid "Motoring"
+msgstr "Moto"
+
msgctxt "#19648"
msgid "Fitness & Health"
msgstr "Fitness & Tervis"
msgctxt "#20003"
msgid "Trainers folder"
-msgstr "Treinerite kaust"
+msgstr "Koolitajate kaust"
msgctxt "#20004"
msgid "Screenshot folder"
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"
msgctxt "#20015"
msgid "Remote thumb"
-msgstr "Eemalda pisipilt"
+msgstr "Kauge pisipilt"
msgctxt "#20016"
msgid "Current thumb"
msgctxt "#20025"
msgid "Scan all"
-msgstr "Skaneeri küik"
+msgstr "Skaneeri kõik"
msgctxt "#20026"
msgid "Region"
msgctxt "#20037"
msgid "Summary"
-msgstr "Ülevaade"
+msgstr "Kokkuvõte"
msgctxt "#20038"
msgid "Lock music window"
msgctxt "#20063"
msgid "Shares with default (read only)"
-msgstr "Jaga vaikimisi (ainult loetav)"
+msgstr "Jaga vaikimisi (ainult lugemiseks)"
msgctxt "#20064"
msgid "Copy default"
msgctxt "#20079"
msgid "Enable animations"
-msgstr "Luba animeerimine"
+msgstr "Luba animatsioonid"
msgctxt "#20080"
msgid "Disable RSS during music"
msgctxt "#20121"
msgid "Party on!"
-msgstr "Muusika esitamine algab"
+msgstr "Pidu algab!"
msgctxt "#20122"
msgid "True"
msgctxt "#20165"
msgid "Not locked"
-msgstr "Pole lukus"
+msgstr "Ei ole lukus"
msgctxt "#20166"
msgid "Locked"
msgctxt "#20178"
msgid "Shift"
-msgstr "Shift"
+msgstr "Nihe"
msgctxt "#20179"
msgid "Caps Lock"
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"
msgctxt "#20250"
msgid "Party on! (videos)"
-msgstr "Videesitus algab"
+msgstr "Videoesitus algab"
msgctxt "#20251"
msgid "Mixing drinks (videos)"
msgctxt "#20335"
msgid "Look for content recursively?"
-msgstr "Otsi sisu kasvavas järjestuses?"
+msgstr "Otsi sisu rekursiivselt?"
msgctxt "#20336"
msgid "Unlock sources"
msgctxt "#20360"
msgid "Episodes"
-msgstr "Osa"
+msgstr "Osad"
msgctxt "#20361"
msgid "Loading episode details"
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"
msgctxt "#20453"
msgid "episodes"
-msgstr "osa"
+msgstr "osad"
msgctxt "#20454"
msgid "Listener"
msgctxt "#20459"
msgid "Tags"
-msgstr "Sildid"
+msgstr "Märgendid"
msgctxt "#20460"
msgid "Add %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"
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"
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"
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"
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"
msgid "mixed"
msgstr "segatud"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtiitrite asukoht"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fikseeritud"
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"
msgctxt "#21836"
msgid "Metering mode"
-msgstr "Meeterežiim"
+msgstr "Mõõterežiim"
msgctxt "#21837"
msgid "ISO"
msgid "Orientation"
msgstr "Suund"
+msgctxt "#21857"
+msgid "Sub-location"
+msgstr "Alam-asukoht"
+
msgctxt "#21858"
msgid "Image type"
msgstr "Pildi tüüp"
msgctxt "#21874"
msgid "State"
-msgstr "Olek"
+msgstr "Osariik"
msgctxt "#21875"
msgid "Country"
-msgstr "Maa"
+msgstr "Riik"
msgctxt "#21876"
msgid "Original Tx Reference"
msgctxt "#21877"
msgid "Date created"
-msgstr "Sisestamise kuupäev"
+msgstr "Loomise kuupäev"
msgctxt "#21878"
msgid "Urgency"
msgctxt "#22004"
msgid "Delayed by: %2.3fs"
-msgstr "Viivitus by: %2.3fs"
+msgstr "Viivitus: %2.3fs"
msgctxt "#22005"
msgid "Ahead by: %2.3fs"
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..."
msgctxt "#24039"
msgid "Disabled Add-ons"
-msgstr "Keela lisamooduleid"
+msgstr "Keelatud lisamoodulid"
msgctxt "#24040"
msgid "(Clear the current setting)"
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"
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"
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"
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"
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."
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"
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"
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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"
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"
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"
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 "
msgid "Watched episode count"
msgstr "Sæð brot"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Stað til undirtekst"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Rætta"
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"
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óð"
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"
msgctxt "#0"
msgid "Programs"
-msgstr "Ohjelmat"
+msgstr "Sovellukset"
msgctxt "#1"
msgid "Pictures"
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ä"
msgid "Credits"
msgstr "Tekijät"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod-piiri"
-
msgctxt "#474"
msgid "Off"
msgstr "Ei käytössä"
msgid "Times played"
msgstr "Toistokertoja"
+msgctxt "#577"
+msgid "Date Taken"
+msgstr "Otettu"
+
msgctxt "#580"
msgid "Sort direction"
msgstr "Järjestelyn suunta"
msgid "Compression level"
msgstr "Pakkaustaso"
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Runsas lokitus..."
+
msgctxt "#700"
msgid "Cleaning up library"
msgstr "Puhdistetaan kirjastoa"
msgid "HTTP proxy"
msgstr "HTTP-välipalvelin"
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Jakotapa"
+
msgctxt "#716"
msgid "Automatic (DHCP)"
msgstr "Automaattinen (DHCP)"
msgctxt "#721"
msgid "Default gateway"
-msgstr "Oletus yhdyskäytävä"
+msgstr "Oletusyhdyskäytävä"
msgctxt "#722"
msgid "DNS server"
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."
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"
msgid "Reboot"
msgstr "Käynnistä uudelleen"
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "PIenennä"
+
msgctxt "#13015"
msgid "Power button action"
msgstr "Virtakytkimen toiminto"
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"
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"
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ä"
msgid "Video cache - DVD-ROM"
msgstr "Videovälimuisti - DVD-ROM"
+msgctxt "#14027"
+msgid "Local Network"
+msgstr "Lähiverkko"
+
msgctxt "#14028"
msgid "Internet"
msgstr "Internet"
msgid "Audio cache - DVD-ROM"
msgstr "Musiikkivälimuisti - DVD-ROM"
+msgctxt "#14031"
+msgid "Local Network"
+msgstr "Lähiverkko"
+
msgctxt "#14032"
msgid "Internet"
msgstr "Internet"
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"
msgid "TV recordings"
msgstr "Nauhoitukset"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR-pienoiskuvien oletuskansio"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Kanavat"
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."
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ä"
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"
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"
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"
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"
msgid "Date created"
msgstr "Luontipäivä"
+msgctxt "#21878"
+msgid "Urgency"
+msgstr "Tärkeys"
+
msgctxt "#21879"
msgid "Country code"
msgstr "Maakoodi"
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"
msgid "Colours"
msgstr "Värit"
+msgctxt "#22033"
+msgid "Charset"
+msgstr "Merkistö"
+
msgctxt "#22034"
msgid "Export karaoke titles as HTML"
msgstr "Tallenna HTML-muodossa"
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"
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:"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Kaiutinjärjestelmä"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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."
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ä."
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."
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ä."
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ä."
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ä."
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ä."
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."
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ä."
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"
--- /dev/null
+# 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 & 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 & 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"
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"
msgid "Credits"
msgstr "Crédits"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Désactivé"
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"
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"
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"
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."
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 "
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"
msgid "Service"
msgstr "Service"
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
msgctxt "#19101"
msgid "Provider"
msgstr "Fournisseur"
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"
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"
msgid "mixed"
msgstr "mélangé"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Emplacement du sous-titre"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixe"
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"
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"
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."
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."
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)"
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)"
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"
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"
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"
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"
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"
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"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Apagado"
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"
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"
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"
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?"
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"
msgctxt "#10524"
msgid "Movie info"
-msgstr "Información da Película"
+msgstr "Info. do filme"
msgctxt "#12000"
msgid "Select dialogue"
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"
msgctxt "#13346"
msgid "Movie information"
-msgstr "Información da película"
+msgstr "Información do filme"
msgctxt "#13347"
msgid "Queue item"
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)"
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"
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"
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"
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"
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"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-procesamento"
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"
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"
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"
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"
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."
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."
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"
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"
msgctxt "#20338"
msgid "Movie"
-msgstr "Película"
+msgstr "Filme"
msgctxt "#20339"
msgid "Director"
msgctxt "#20342"
msgid "Movies"
-msgstr "Películas"
+msgstr "Filmes"
msgctxt "#20343"
msgid "TV shows"
msgctxt "#20374"
msgid "Downloading movie information"
-msgstr "Descargando información da película"
+msgstr "Descargando información do filme"
msgctxt "#20375"
msgid "Unassign content"
msgctxt "#20386"
msgid "Recently added movies"
-msgstr "Películas engadidas recentemente"
+msgstr "Filmes engadidas recentemente"
msgctxt "#20387"
msgid "Recently added episodes"
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"
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"
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"
msgctxt "#21413"
msgid "Default movie scraper"
-msgstr "Scraper predefinido para películas "
+msgstr "Scraper predefinido para filmes "
msgctxt "#21414"
msgid "Default tvshow scraper"
msgid "mixed"
msgstr "mesturado"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Localización dos subtítulos"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixa"
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"
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"
msgctxt "#24007"
msgid "Movie information"
-msgstr "Información das Películas"
+msgstr "Información dos filmes"
msgctxt "#24008"
msgid "Screensaver"
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"
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)"
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?"
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"
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"
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"
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."
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."
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."
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."
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)"
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."
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"
msgctxt "#171"
msgid "Sort title"
-msgstr "Sortiere Titel"
+msgstr "Sortierungstitel"
msgctxt "#172"
msgid "Release date"
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"
msgctxt "#406"
msgid "Humidity"
-msgstr "Feuchtigkeit"
+msgstr "Luftfeuchtigkeit"
msgctxt "#409"
msgid "Defaults"
msgid "Credits"
msgstr "Anerkennung"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Aus"
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"
msgctxt "#626"
msgid "In progress TV shows"
-msgstr "Begonnene Serien"
+msgstr "Begonnene TV-Serien"
msgctxt "#629"
msgid "View mode"
msgctxt "#1024"
msgid "Browse"
-msgstr "Suchen"
+msgstr "Durchsuchen"
msgctxt "#1025"
msgid "Could not retrieve directory information."
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"
msgctxt "#10036"
msgid "Basic"
-msgstr "Standard"
+msgstr "Einfach"
msgctxt "#10037"
msgid "Standard"
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"
msgctxt "#14053"
msgid "GUI filters"
-msgstr "GUI-Filter"
+msgstr "Benutzeroberflächen-Filter"
msgctxt "#14055"
msgid "Use background scanning"
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"
msgctxt "#16008"
msgid "Enter new title"
-msgstr "Bitte einen neuen Titel eingeben"
+msgstr "Neuen Titel eingeben"
msgctxt "#16009"
msgid "Enter the movie name"
msgctxt "#16107"
msgid "Edit sort title"
-msgstr "Titel umbenennen"
+msgstr "Sortierungstitel umbenennen"
msgctxt "#16200"
msgid "Operation was aborted"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Video Nachbearbeitung"
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"
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."
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Gehe zur aktuellen Zeit"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "EPG Aktualisierungsintervall"
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"
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"
msgctxt "#19172"
msgid "Instant recording duration"
-msgstr "Aufzeichnungsdauer"
+msgstr "Aufzeichnungsdauer von Sofortaufnahmen"
msgctxt "#19173"
msgid "Default recording priority"
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"
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"
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"
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"
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"
msgid "mixed"
msgstr "gemischt"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Position der Untertitel"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fest eingestellt"
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"
msgctxt "#33022"
msgid "Precip"
-msgstr "regnen"
+msgstr "Niederschlag"
msgctxt "#33023"
msgid "Humid"
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"
msgctxt "#34120"
msgid "Play GUI sounds"
-msgstr "GUI Sounds abspielen"
+msgstr "Sounds der Benutzeroberfläche abspielen"
msgctxt "#34121"
msgid "Only when playback stopped"
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."
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."
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."
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."
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)"
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)"
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"
msgid "Select destination directory"
msgstr "Επιλογή φακέλου προορισμού"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Στέρεο έξοδος σε όλα τα ηχεία"
-
msgctxt "#253"
msgid "Number of channels"
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"
msgid "High"
msgstr "Μεγ."
+msgctxt "#420"
+msgid "Best Match"
+msgstr "Καλύτερη Αντιστοιχία"
+
msgctxt "#421"
msgid "Keep audio device alive"
msgstr "Διατήρηση της συσκευής ήχου ενεργής"
msgid "Switch view"
msgstr "Αλλαγή προβολής"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "Όριο ρυθμού δειγματοληψίας (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "Υπότιτλοι"
msgid "Credits"
msgstr "Συντελεστές"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Τσιπάκι"
-
msgctxt "#474"
msgid "Off"
msgstr "Ανενεργό/ή"
msgctxt "#548"
msgid "Downmix multichannel audio to stereo"
-msgstr "Downmix πολυκάναλου ήχου σε στερεοφωνικό"
+msgstr "Υποβιβασμός πολυκάναλου ήχου σε στερεοφωνικό"
msgctxt "#550"
msgid "Sort by: %s"
msgid "Program Add-ons"
msgstr "Πρόσθετες Εφαρμογές"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "Ορισμός μικρογραφίας plug-in"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "Ρυθμίσεις πρόσθετου"
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 "Αφαίρεση"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Μετα-επεξεργασία"
msgid "TV recordings"
msgstr "Τηλεοπτικές εγγραφές"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Προεπιλεγμένος φάκελος για μικρογραφίες PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Κανάλια"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Μετάβαση τώρα"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "Χρονικό διάστημα ενημέρωσης EPG"
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 "Η εγγραφή ακυρώθηκε"
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"
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 για να μάθετε περισσότερα."
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"
msgid "Remove media share"
msgstr "Αφαίρεση κοινόχρηστων πολυμέσων"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Φάκελος υποτίτλων"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Ταινία & εναλλακτικός φάκελος υποτίτλων"
msgid "mixed"
msgstr "ανάμικτα"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Θέση υποτίτλου"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Σταθερή"
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 "Ειδοποιήσεις"
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"
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 "Να επιτρέπεται στην αναπαραγωγή βίντεο να αγνοούνται οι αναλογίες εικόνας κατά ένα συγκεκριμένο ποσό προκειμένου να συμπληρώνεται με βίντεο μεγαλύτερο μέρος της οθόνης."
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."
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."
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 "Μη διαθέσιμες πληροφορίες."
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."
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."
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."
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 "Στερεοσκοπική προβολή (τρέχουσα)"
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 "Προτιμώμενη λειτουργία"
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 "Στερεοσκοπική προβολή του βίντεο"
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 "(Για Άτομα με Προβλήματα Όρασης)"
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 "Ορισμός ορίου ανάλυσης του Περιβάλλοντος Εργασίας"
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"
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 "מספר ערוצים"
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 "אמנים שונים"
msgid "High"
msgstr "גבוה"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "המתאים ביותר"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "השאר התקן אודיו פעיל"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "מחק פרטי אלבום"
msgid "Cache"
msgstr "זכרון מטמון"
+msgctxt "#440"
+msgid "Hard disk"
+msgstr "דיסק קשיח"
+
msgctxt "#441"
msgid "UDF"
msgstr "UDF"
msgid "Switch view"
msgstr "החלף תצוגה"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "הגבל קצב דגימה (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "כתוביות"
msgid "Credits"
msgstr "תודות"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "כבוי"
msgid "Sample rate"
msgstr "קצב דגימה"
+msgctxt "#614"
+msgid "Virtual folder"
+msgstr "תיקיה וירטואלית"
+
msgctxt "#620"
msgid "Audio CDs"
msgstr "דיסק אודיו"
msgctxt "#626"
msgid "In progress TV shows"
-msgstr "ת×\95×\9b× ×\99ות בהתקדמות"
+msgstr "ס×\93רות בהתקדמות"
msgctxt "#629"
msgid "View mode"
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"
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 "האם לאפס את ההגדרות בקטגוריה זו?"
msgid "No help available"
msgstr "אין עזרה זמינה"
+msgctxt "#10046"
+msgid "No categories available"
+msgstr "אין קטגוריות זמינות"
+
msgctxt "#10126"
msgid "File browser"
msgstr "סייר הקבצים"
msgid "Fullscreen video"
msgstr "וידאו במסך מלא"
+msgctxt "#12006"
+msgid "Audio visualisation"
+msgstr "חיזוי אודיו"
+
msgctxt "#12009"
msgid "Rebuild index..."
msgstr "בונה אינדקס..."
msgid "Password retry limit exceeded."
msgstr "נסיונות כניסה כושלים רבים מדי."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "המערכת תכבה כעת."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "פריט נעול"
msgid "Reboot"
msgstr "הפעלה מחדש"
+msgctxt "#13014"
+msgid "Minimise"
+msgstr "מזער"
+
msgctxt "#13015"
msgid "Power button action"
msgstr "פעולת כפתור הכיבוי"
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"
msgid "VDPAU HQ Upscaling level"
msgstr "VDPAU HQ Upscaling level"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "להישאר עם המעטפת ?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "החשך צגים אחרים"
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 "שיטת סינכרון ניגון למסך"
msgid "Stop ripping CD"
msgstr "עצור העתקת דיסק"
+msgctxt "#15012"
+msgid "Unavailable source"
+msgstr "מקור לא זמין"
+
+msgctxt "#15014"
+msgid "Keep"
+msgstr "שמור"
+
msgctxt "#15015"
msgid "Remove"
msgstr "הסר"
msgid "Edit title"
msgstr "ערוך כותרת"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "נהל..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "ערוך כותרת מיון"
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"
msgctxt "#19004"
msgid "Importing EPG from clients"
-msgstr "מייבא EPG מקליינטים"
+msgstr "מייבא לוח שידורים מקליינטים"
msgctxt "#19005"
msgid "PVR stream information"
msgid "TV recordings"
msgstr "הקלטת טלוויזיה"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "תיקית ברירת מחדל עבור תמונות ממוזערות PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "ערוצים"
msgctxt "#19028"
msgid "No EPG entries"
-msgstr "אין ערכי EPG"
+msgstr "אין ערכי לוח שידורים"
msgctxt "#19029"
msgid "Channel"
msgctxt "#19065"
msgid "Default EPG window"
-msgstr "חלון EPG ברירת מחדל"
+msgstr "חלון לוח שידורים ברירת מחדל"
msgctxt "#19067"
msgid "This event is already being recorded."
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"
msgid "Warning"
msgstr "אזהרה"
+msgctxt "#19099"
+msgid "Service"
+msgstr "שירות"
+
msgctxt "#19102"
msgid "Please switch to another channel."
msgstr "אנא החלף לערוץ אחר."
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"
msgctxt "#19200"
msgid "EPG source:"
-msgstr "×\9eק×\95ר ×\9e×\93ר×\99×\9a שידורים"
+msgstr "×\9eק×\95ר ×\9c×\95×\97 שידורים"
msgctxt "#19201"
msgid "Channel name:"
msgctxt "#19206"
msgid "Activate EPG:"
-msgstr "×\94פע×\9c ×\9e×\93ר×\99×\9a שידורים:"
+msgstr "×\94פע×\9c ×\9c×\95×\97 שידורים:"
msgctxt "#19207"
msgid "Group:"
msgctxt "#19222"
msgid "EPG"
-msgstr "EPG"
+msgstr "לוח שידורים EPG"
msgctxt "#19224"
msgid "Recording aborted"
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 "תמיד השתמש הסידור ערוצים של שרת(ים) אחורי(ים)"
msgid "* All recordings"
msgstr "* כל ההקלטות"
+msgctxt "#19271"
+msgid "No PVR Add-ons could be found"
+msgstr "לא נמצאו הרחבות PVR"
+
msgctxt "#19272"
msgid "You need a tuner, backend software, and an"
msgstr "אתה צריך כרטיס טלוויזיה,תוכנת ממשק אחורי, ובנוסף"
msgctxt "#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"
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"
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"
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"
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"
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"
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"
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?"
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"
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"
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"
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"
msgid "Remove media share"
msgstr "הסר סיתוף מדיה"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "תיקיית כתוביות"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
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"
msgid "mixed"
msgstr "מעורבב"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "מיקום הכתובית"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "מקובע"
msgid "Script"
msgstr "סקריפט"
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "חיזוי"
+
msgctxt "#24011"
msgid "Add-on repository"
msgstr "מאגר הרחבות"
msgctxt "#24019"
msgid "PVR clients"
-msgstr "ק×\9c×\99×\99× ×\98 PVR"
+msgstr "×\9cק×\95×\97×\95ת PVR"
msgctxt "#24020"
msgid "Configure"
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 "חזור לאחור"
msgid "Lock Add-on manager"
msgstr "נעל מנהל הרחבות"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "לא ניתן לנטרל הרחבה זו"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(נוכחי)"
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 "הודעות"
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"
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 "לא נמצא פריט הבא לניגון"
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 "בדוק הגדרות אודיו"
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 "החלפת המראה והתחושה של מנשק המשתמש."
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 "שנה את הצבעים של המעטפת שבחרת."
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 "בחר או השבת את ערכת הצלילים בממשק המשתמש"
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 "אין מידע זמין כעת."
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 אל ספריית הוידאו."
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 "אין מידע זמין כעת."
msgctxt "#36174"
msgid "Enable Teletext when watching a live TV stream."
-msgstr "הפעלת טלטקסט בעת צפייה בתזרים טלוויזיה חי."
+msgstr "הפעלת טלטקסט בעת צפייה בתזרים טלוויזיה."
msgctxt "#36175"
msgid "Scale Teletext to 4:3 ratio."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "אין מידע זמין כעת."
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 "מבוסס חומרה"
msgid "Preferred mode"
msgstr "מצב מועדף"
+msgctxt "#36528"
+msgid "Select stereoscopic mode"
+msgstr "בחר מצב סטריאוסקופי"
+
msgctxt "#36529"
msgid "Mono (2D)"
msgstr "מונו (2D)"
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 "אין מידע זמין כעת."
msgid "Enable hardware decoding of video files."
msgstr "אפשר פענוח חומרה של קבצי וידאו."
+msgctxt "#36545"
+msgid "Subtitle stereoscopic depth"
+msgstr "עומק כתוביות סטיראוסקופי"
+
msgctxt "#37000"
msgid "(Visually Impaired)"
msgstr "(לקצרי ראייה)"
msgctxt "#37015"
msgid "Browse Into"
msgstr "לעיין בתוך"
+
+msgctxt "#37017"
+msgid "Dual audio output"
+msgstr "פלט אודיו כפול"
+
+msgctxt "#37021"
+msgid "Set GUI resolution limit"
+msgstr "הגדר הגבלת רזולוצית GUI"
msgid "Select destination directory"
msgstr "चुन्लेना अभिप्राय की निदेशिका"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ओउत्पुत सभी वक्तों करने के लिए स्तेरेओ"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "मर्गें की संख्या"
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 "माउस सक्षम"
msgid "Background"
msgstr "पृष्ठभूमि"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "वक्ता विन्यास"
-
msgctxt "#35502"
msgid "Name"
msgstr "नाम"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "लिखना"
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"
msgid "Credits"
msgstr "Készítők"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Ki"
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"
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"
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"
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"
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)"
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"
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"
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"
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"
msgid "mixed"
msgstr "kevert"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Felirat helye"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Rögzített"
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"
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"
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."
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."
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."
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."
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)"
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)"
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"
msgctxt "#7"
msgid "File manager"
-msgstr "Skráarsýsl"
+msgstr "Skráasýsl"
msgctxt "#8"
msgid "Weather"
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"
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"
msgctxt "#217"
msgid "Pixel ratio"
-msgstr "Teygja"
+msgstr "Skjápunktshlutfall"
msgctxt "#218"
msgid "DVD drive"
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"
msgid "Credits"
msgstr "Þakkir"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Mod kubbur"
-
msgctxt "#474"
msgid "Off"
msgstr "Af"
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..."
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"
msgctxt "#13413"
msgid "Downloading"
-msgstr "Niðurhala"
+msgstr "Sæki"
msgctxt "#13414"
msgid "Include artists who appear only on compilations"
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..."
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
msgctxt "#24042"
msgid "Downloading %i%%"
-msgstr "Niðurhaa %i%%"
+msgstr "Sæki %i%%"
msgctxt "#24043"
msgid "Available Updates"
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"
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"
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"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Stillingar hátalara"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
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"
msgid "Credits"
msgstr "Kredit"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Matikan"
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"
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"
msgid "mixed"
msgstr "tercampur"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokasi Terjemahan"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Sudah tetap"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfigurasi Speaker"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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."
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"
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"
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"
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"
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"
msgid "Credits"
msgstr "Riconoscimenti"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Spento"
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"
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"
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"
msgid "Movie info"
msgstr "Info film"
+msgctxt "#12000"
+msgid "Select dialogue"
+msgstr "Casella di selezione"
+
msgctxt "#12001"
msgid "Music/Info"
msgstr "Musica/Info"
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..."
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"
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à"
msgid "Recursive slideshow"
msgstr "Presentazione ricorsiva"
+msgctxt "#13319"
+msgid "Randomise"
+msgstr "Mescola "
+
msgctxt "#13320"
msgid "Stereo"
msgstr "Stereo"
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)"
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"
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"
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"
msgid "Edit title"
msgstr "Modifica titolo"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Gestione..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Modifica titolo per Ordinamento"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Video post-processing"
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"
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"
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"
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"
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"
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"
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."
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ù."
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"
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"
msgid "mixed"
msgstr "mixed"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Cartella dei sottotitoli"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fissa"
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"
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"
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?"
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..."
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"
msgid "Clips"
msgstr "Clip"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Riavvia il plugin per abilitarlo"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Stasera"
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"
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"
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"
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"
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"
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"
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."
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\"."
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."
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."
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."
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."
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."
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."
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."
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."
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"
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."
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."
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."
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."
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."
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."
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"
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."
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."
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."
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."
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)"
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"
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"
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)"
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"
msgid "Select destination directory"
msgstr "ディレクトリの選択"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ステレオ音声を全スピーカーから出力"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "チャンネル数"
msgid "Credits"
msgstr "クレジット"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "MODチップ"
-
msgctxt "#474"
msgid "Off"
msgstr "オフ"
msgid "TV recordings"
msgstr "TV録画"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR サムネールのデフォルトフォルダー"
-
msgctxt "#19019"
msgid "Channels"
msgstr "チャンネル"
msgid "Remove media share"
msgstr "メディア共有を削除"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "字幕フォルダー設定"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Movie & Alternate Subtitle Directory"
msgid "Watched episode count"
msgstr "視聴したエピソードの回数"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "字幕の場所"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixed"
msgid "Skin is missing some files"
msgstr "スキンはいくつかのファイルをなくしています。"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "検索文字列を入力"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "通知"
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"
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 "情報がまだありません。"
msgctxt "#122"
msgid "Confirm file delete?"
-msgstr "파일 삭제 확인?"
+msgstr "파일 삭제 확인"
msgctxt "#123"
msgid "Copy these files?"
msgctxt "#125"
msgid "Delete these files? - Deleting files cannot be undone!"
-msgstr "파일을 삭제 하겠습니까? 삭제하면 되돌릴 수 없습니다!"
+msgstr "파일을 삭제하겠습니까? 삭제하면 되돌릴 수 없습니다!"
msgctxt "#126"
msgid "Status"
msgctxt "#198"
msgid "Loading movie details"
-msgstr "영화 상세정보 읽기"
+msgstr "영화 상세정보 가져오는 중"
msgctxt "#199"
msgid "Web interface"
msgid "Select destination directory"
msgstr "대상 디렉터리 선택"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "모든 스피커에 스테레오 출력"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "채널수"
msgctxt "#346"
msgid "Normalize levels on downmix"
-msgstr "다운믹스 노멀라이즈 레벨"
+msgstr "다운믹스 노멀라이즈"
msgctxt "#347"
msgid "DTS-HD capable receiver"
msgctxt "#351"
msgid "Off"
-msgstr "사용 안 함"
+msgstr "끔"
msgctxt "#352"
msgid "Dim"
msgctxt "#421"
msgid "Keep audio device alive"
-msgstr "오디오 장비 대기상태 방지"
+msgstr "오디오 장치 대기상태 방지"
msgctxt "#422"
msgid "Delete album info"
msgid "Credits"
msgstr "만든 사람들"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "모드칩"
-
msgctxt "#474"
msgid "Off"
msgstr "끔"
msgctxt "#790"
msgid "Remote control"
-msgstr "리모트 컨트롤"
+msgstr "원격 제어"
msgctxt "#791"
msgid "Allow programs on this system to control XBMC"
msgid "Program Add-ons"
msgstr "프로그램 추가기능"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "플러그인 썸네일 설정"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "추가기능 설정"
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 "파일 탐색기"
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 "비디오/정보"
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"
msgctxt "#13347"
msgid "Queue item"
-msgstr "항목 추가"
+msgstr "대기열에 추가"
msgctxt "#13348"
msgid "Search IMDb..."
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 동기 방식"
msgctxt "#13612"
msgid "Universal Remote"
-msgstr "ì\9c ë\8b\88ë²\84ì\85\9c 리모트"
+msgstr "ì\9c ë\8b\88ë²\84ì\84¤ 리모트"
msgctxt "#13613"
msgid "Multi Remote (Harmony)"
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 "제거"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "후처리"
msgid "TV recordings"
msgstr "TV 녹화"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR 썸네일 기본 폴더"
-
msgctxt "#19019"
msgid "Channels"
msgstr "채널"
msgid "Service"
msgstr "서비스"
+msgctxt "#19100"
+msgid "Mux"
+msgstr "Mux"
+
msgctxt "#19101"
msgid "Provider"
msgstr "제공자"
msgctxt "#20113"
msgid "Never logged on"
-msgstr "로그인한적 없음"
+msgstr "로그인한 적 없음"
msgctxt "#20114"
msgid "Profile %i / %i"
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 "안드로이드 음악"
msgctxt "#20353"
msgid "Loading TV show details"
-msgstr "TV 쇼 상세정보 읽기"
+msgstr "TV 쇼 상세정보 가져오는 중"
msgctxt "#20354"
msgid "Fetching episode guide"
msgctxt "#20355"
msgid "Loading info for episodes in directory"
-msgstr "디렉터리의 에피소드 정보 읽기"
+msgstr "디렉터리의 에피소드 정보 가져오는 중"
msgctxt "#20356"
msgid "Select TV show:"
msgctxt "#20361"
msgid "Loading episode details"
-msgstr "에피소드 상세정보 읽기"
+msgstr "에피소드 상세정보 가져오는 중"
msgctxt "#20362"
msgid "Remove episode from library"
msgctxt "#20394"
msgid "Loading music video information"
-msgstr "뮤직비디오 정보 읽기"
+msgstr "뮤직비디오 정보 가져오는 중"
msgctxt "#20395"
msgid "Mixed"
msgctxt "#20426"
msgid "Export to a single file or separate"
-msgstr "항목당 단일 파일로 내보낼까요 분리"
+msgstr "단일 파일로 내보낼까요 항목별 분리"
msgctxt "#20427"
msgid "files per entry?"
msgid "Remove media share"
msgstr "미디어 공유 제거"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "자막 폴더"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "영화 & 추가 자막 디렉터리"
msgid "mixed"
msgstr "섞기"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "자막 위치"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "고정"
msgctxt "#24042"
msgid "Downloading %i%%"
-msgstr "%i%% 다운로드중"
+msgstr "%i%% 다운로드 중"
msgctxt "#24043"
msgid "Available Updates"
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 "알림"
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"
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"
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."
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 동영상 재생시 확대 방법을 선택합니다."
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."
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."
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."
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."
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."
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."
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."
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."
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 디코딩을 지원하면 선택합니다."
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)"
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"
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 "(시각 장애인)"
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 해상도 제한 설정"
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"
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"
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"
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"
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"
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"
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"
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)"
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..."
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"
msgid "Movies"
msgstr "Filmas"
+msgctxt "#343"
+msgid "Adjust framerate"
+msgstr "Pielāgot kadru biežumu"
+
msgctxt "#344"
msgid "Actors"
msgstr "Aktieri"
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"
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"
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"
msgid "Title"
msgstr "Nosaukums"
+msgctxt "#370"
+msgid "Thunderstorms"
+msgstr "pērkona negaisi"
+
msgctxt "#371"
msgid "Partly"
msgstr "Daļēji"
msgid "Rain"
msgstr "Lietus"
+msgctxt "#377"
+msgid "Light"
+msgstr "viegls"
+
msgctxt "#378"
msgid "AM"
msgstr "AM"
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"
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"
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"
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"
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"
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ļš"
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"
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"
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"
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"
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 & 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 & 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 "kā"
-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"
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"
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"
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..."
msgctxt "#7"
msgid "File manager"
-msgstr "Failų menedžeris"
+msgstr "Failų tvarkyklė"
msgctxt "#8"
msgid "Weather"
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"
msgctxt "#102"
msgid "Scan"
-msgstr "Peržvelgti"
+msgstr "Nuskaityti"
msgctxt "#103"
msgid "Sort by: Name"
msgctxt "#111"
msgid "Shortcuts"
-msgstr "Etiketės"
+msgstr "Nuorodos"
msgctxt "#112"
msgid "Paused"
msgctxt "#117"
msgid "Delete"
-msgstr "Ištrynti"
+msgstr "Panaikinti"
msgctxt "#118"
msgid "Rename"
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"
msgctxt "#130"
msgid "System info"
-msgstr "Sistemos informcija"
+msgstr "Sistemos info"
msgctxt "#131"
msgid "Display"
msgctxt "#143"
msgid "Current:"
-msgstr "Aktualus:"
+msgstr "Dabartinis:"
msgctxt "#144"
msgid "Build:"
msgctxt "#146"
msgid "Type:"
-msgstr "Rūšis:"
+msgstr "Tipas:"
msgctxt "#147"
msgid "Static"
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"
msgctxt "#155"
msgid "Drive"
-msgstr "Dėtuvė"
+msgstr "Vykdyti"
msgctxt "#156"
msgid "Free"
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"
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"
msgctxt "#182"
msgid "Tracks"
-msgstr "Dainos"
+msgstr "Takeliai"
msgctxt "#183"
msgid "Review"
-msgstr "Peržiūrėti"
+msgstr "Apžvalga"
msgctxt "#184"
msgid "Refresh"
msgctxt "#186"
msgid "OK"
-msgstr "Gerai"
+msgstr "OK"
msgctxt "#187"
msgid "No albums found!"
msgctxt "#192"
msgid "Clear"
-msgstr "Išvalyti"
+msgstr "Valyti"
msgctxt "#193"
msgid "Scan"
msgctxt "#197"
msgid "Querying %s info"
-msgstr "Užklausos %s Informacija"
+msgstr "Užklausos %s info"
msgctxt "#198"
msgid "Loading movie details"
msgctxt "#213"
msgid "Calibrate user interface..."
-msgstr "Kalibruoti naudotojo sąsaja..."
+msgstr "Kalibruoti vartotojo sąsają..."
msgctxt "#214"
msgid "Video calibration..."
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"
msgctxt "#242"
msgid "Windowed"
-msgstr "Lange"
+msgstr "Langas lange"
msgctxt "#243"
msgid "Refresh Rate"
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"
msgctxt "#296"
msgid "Clear bookmarks"
-msgstr "Išvalyti žymas"
+msgstr "Valyti žymas"
msgctxt "#297"
msgid "Audio offset"
msgctxt "#309"
msgid "User Interface language"
-msgstr "Naudotojo sąsajos kalba"
+msgstr "Vartotojo sąsajos kalba"
msgctxt "#312"
msgid "(0=auto)"
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"
msgid "Credits"
msgstr "Kreditai"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Išjungta"
msgctxt "#666"
msgid "Verbose logging..."
-msgstr "Daugiažodis registravimas ..."
+msgstr "Išsami registracija ..."
msgctxt "#700"
msgid "Cleaning up library"
msgctxt "#1014"
msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
msgctxt "#1015"
msgid "Browse for network server"
msgctxt "#1019"
msgid "Enter the username"
-msgstr "Įveskite naudotojo vardą"
+msgstr "Įveskite vartotojo vardą"
msgctxt "#1020"
msgid "Add %s source"
msgctxt "#1048"
msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
msgctxt "#1049"
msgid "Script settings"
msgctxt "#1200"
msgid "SMB client"
-msgstr "SMB naudotojas"
+msgstr "SMB klientas"
msgctxt "#1202"
msgid "Workgroup"
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"
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?"
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"
msgctxt "#10131"
msgid "Lock settings"
-msgstr "Blokuoti Nustatymus"
+msgstr "Blokuoti nustatymus"
msgctxt "#10132"
msgid "Content settings"
msgctxt "#12327"
msgid "Enter master code"
-msgstr "Įveskite apsaugos kodą"
+msgstr "Įveskite Spec. apsaugos kodą"
msgctxt "#12328"
msgid "Enter unlock code"
msgctxt "#12335"
msgid "Remove lock"
-msgstr "Išvalyti užraktą"
+msgstr "Pašalinti užraktą"
msgctxt "#12337"
msgid "Numeric password"
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"
msgctxt "#13408"
msgid "(IMDb user rating)"
-msgstr "(IMDb naudotojo įvertinimas)"
+msgstr "(IMDb vartotojo įvertinimas)"
msgctxt "#13409"
msgid "Top 250"
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"
msgctxt "#14062"
msgid "Enter username for"
-msgstr "Įveskite naudotojo vardą"
+msgstr "Įveskite vartotojo vardą"
msgctxt "#14063"
msgid "Date & time"
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"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Po apdirbimo (vėliau)"
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"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Dabar eiti į"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "EPG atnaujinimo intervalas"
msgctxt "#19179"
msgid "Automatically hide channel information"
-msgstr "Automatiškai nerodyti kanalo informacijos"
+msgstr "Nerodyti kanalo informacijos automatiškai"
msgctxt "#19180"
msgid "TV"
msgctxt "#19199"
msgid "Channel manager"
-msgstr "Kanalų menedžeris"
+msgstr "Kanalų tvarkyklė"
msgctxt "#19200"
msgid "EPG source:"
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"
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"
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"
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"
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'?"
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"
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"
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?"
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"
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?"
msgctxt "#20142"
msgid "Username"
-msgstr "Naudotojo vardas"
+msgstr "Vartotojo vardas"
msgctxt "#20143"
msgid "Enter password for"
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"
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"
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"
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"
msgid "mixed"
msgstr "mišrus"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Subtitrų vieta"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fiksuotas"
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"
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"
msgctxt "#24040"
msgid "(Clear the current setting)"
-msgstr "(Išvalyti dabartinius nustatymus)"
+msgstr "(Valyti dabartinius nustatymus)"
msgctxt "#24041"
msgid "Install from zip file"
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"
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."
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 ..."
msgctxt "#33053"
msgid "Configure the"
-msgstr "Sukonfiguruoti"
+msgstr "Sukonfigūruoti"
msgctxt "#33054"
msgid "Seasons"
msgctxt "#33059"
msgid "Configure the"
-msgstr "Sukonfiguruoti"
+msgstr "Sukonfigūruoti"
msgctxt "#33060"
msgid "Power"
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"
msgctxt "#36004"
msgid "Press \"user\" button command"
-msgstr "Paspausti \"Naudotojas\" mygtuką"
+msgstr "Paspausti \"vartotojas\" mygtuką"
msgctxt "#36005"
msgid "Enable switch side commands"
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."
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."
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."
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."
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'."
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."
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."
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."
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."
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."
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."
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'."
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."
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."
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."
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."
msgctxt "#36330"
msgid "Define the webserver username."
-msgstr "Nustatyti web serverio vardą."
+msgstr "Nustatyti web serverio vartotojo vardą."
msgctxt "#36331"
msgid "Define webserver password."
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."
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."
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."
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."
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)"
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)"
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(-ą)"
msgid "Select destination directory"
msgstr "Изаберете целна папка"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Стерео излез кон сите звучници"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "Број на канали"
msgid "Credits"
msgstr "Заслуги"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Изме. чип"
-
msgctxt "#474"
msgid "Off"
msgstr "Искл."
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 титлови"
msgid "Watched episode count"
msgstr "Број на гледани епизоди"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Локација на титл"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Фиксирано"
msgid "Would you like to switch to this skin?"
msgstr "Дали сакате да ја поставите оваа маска?"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Внесите збор за пребарување"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Нотификации"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурација на звучници"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36041"
msgid "* Item folder"
msgstr "* локација"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Префрли на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Сними"
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"
msgctxt "#36037"
msgid "TV"
msgstr "TV"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Rakam"
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"
msgid "Credits"
msgstr "Krediti"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Mitfi"
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"
msgid "Weather"
msgstr "It-temp"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Daħħal Search String"
+
msgctxt "#34123"
msgid "Never"
msgstr "Qatt"
msgctxt "#36016"
msgid "Connected"
msgstr "Xbox Imqabbda"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Irrekordja"
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"
msgid "Credits"
msgstr "Anerkjennelser"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Av"
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"
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"
msgid "mixed"
msgstr "mikset"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Plassering av undertekst"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Låst"
msgctxt "#24001"
msgid "Add-ons"
-msgstr "Tillegger"
+msgstr "Tillegg"
msgctxt "#24002"
msgid "Add-on options"
msgctxt "#24036"
msgid "Change log"
-msgstr "Endre logg"
+msgstr "Endringslogg"
msgctxt "#24037"
msgid "Uninstall"
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"
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"
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."
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."
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."
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."
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"
msgid "Select destination directory"
msgstr "دایرکتوری مقصد را انتخاب کنید"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "خروجی استریو به همه ی بلندگوها"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "تعداد کانال ها"
msgid "Credits"
msgstr "کارت های اعتباری"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "مودچیپ"
-
msgctxt "#474"
msgid "Off"
msgstr "خاموش"
msgid "Weather"
msgstr "آب و هوا"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "رشته ی جستجو را وارد کنید"
+
msgctxt "#33069"
msgid "Backgrounds"
msgstr "پس زمیته ها"
msgctxt "#36035"
msgid "Always"
msgstr "همیشه"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "تغییر به کانال"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "ضبط"
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"
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"
msgid "Credits"
msgstr "Autorzy"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Wyłącz"
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?"
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"
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"
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."
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"
msgctxt "#12901"
msgid "Fullscreen OSD"
-msgstr "OSD w trybie pełnoekranowym"
+msgstr "Menu ekranowe w trybie pełnoekranowym"
msgctxt "#13000"
msgid "System"
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"
msgctxt "#13010"
msgid "Hibernate"
-msgstr "Hibernacja"
+msgstr "Hibernuj"
msgctxt "#13011"
msgid "Suspend"
-msgstr "Wstrzymaj"
+msgstr "Uśpij"
msgctxt "#13012"
msgid "Exit"
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?"
msgctxt "#13109"
msgid "Test & apply resolution"
-msgstr "Test rozdzielczości"
+msgstr "Testuj i zastosuj rozdzielczość"
msgctxt "#13110"
msgid "Save resolution?"
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"
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"
msgctxt "#14043"
msgid "- Shutdown while playing"
-msgstr "- Wyłącz w trakcie odtwarzania"
+msgstr "- Zamknij w trakcie odtwarzania"
msgctxt "#14044"
msgid "%i min"
msgctxt "#14089"
msgid "Font to use for text subtitles"
-msgstr "Czcionka używana do napisów"
+msgstr "Czcionka napisów"
msgctxt "#14090"
msgid "International"
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ń"
msgid "VDPAU - Bob"
msgstr "DXVA Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-processing"
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"
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"
msgctxt "#19028"
msgid "No EPG entries"
-msgstr "Brak pozycji EPG"
+msgstr "Brak wpisów w Przewodniku TV"
msgctxt "#19029"
msgid "Channel"
msgctxt "#19032"
msgid "Timeline"
-msgstr "Oś czasowa"
+msgstr "Oś czasu"
msgctxt "#19033"
msgid "Information"
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."
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"
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"
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"
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:"
msgctxt "#19206"
msgid "Activate EPG:"
-msgstr "Aktywuj EPG:"
+msgstr "Aktywuj Przewodnik TV:"
msgctxt "#19207"
msgid "Group:"
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."
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)"
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"
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."
msgctxt "#20084"
msgid "Show weather info"
-msgstr "Pokazuj info o pogodzie"
+msgstr "Pokazuj dane pogodowe"
msgctxt "#20085"
msgid "Show system info"
msgctxt "#20088"
msgid "Weather info"
-msgstr "Info o pogodzie"
+msgstr "Dane pogodowe"
msgctxt "#20089"
msgid "Drive space free"
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"
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"
msgctxt "#20459"
msgid "Tags"
-msgstr "Tagi"
+msgstr "Znaczniki"
msgctxt "#20460"
msgid "Add %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"
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"
msgctxt "#21372"
msgid "Forced DVD player region"
-msgstr "Narzuć region dla DVD"
+msgstr "Narzucaj region DVD"
msgctxt "#21373"
msgid "Video output"
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"
msgid "mixed"
msgstr "miksowane"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Położenie napisów"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Stałe"
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"
msgctxt "#21838"
msgid "Digital zoom"
-msgstr "Cyfrowy zoom"
+msgstr "Powiększenie cyfrowe"
msgctxt "#21839"
msgid "CCD width"
msgctxt "#21858"
msgid "Image type"
-msgstr "Typ pliku"
+msgstr "Typ obrazu"
msgctxt "#21859"
msgid "Time created"
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"
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"
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ć?"
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"
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"
msgid "Clips"
msgstr "Klipy"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "Wtyczka wymaga restartu"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "Wieczorem"
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"
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"
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"
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."
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. "
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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)"
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 "
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"
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)"
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"
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"
msgctxt "#418"
msgid "Low"
-msgstr "Baixo"
+msgstr "Mín"
msgctxt "#419"
msgid "High"
-msgstr "Alto"
+msgstr "Máx"
msgctxt "#420"
msgid "Best Match"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Desligado"
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"
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"
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"
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"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ir agora"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "EPG Intervalo atualização"
msgctxt "#19085"
msgid "Unknown channel %u"
-msgstr "Canal desconhecido %"
+msgstr "Canal desconhecido %u"
msgctxt "#19086"
msgid "Mo-__-__-__-__-__-__"
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"
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"
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"
msgctxt "#21374"
msgid "Video aspect"
-msgstr "Aspecto de vídeo"
+msgstr "Relação de aspecto"
msgctxt "#21375"
msgid "Normal"
msgid "mixed"
msgstr "Mixado"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Local da Legenda"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixado"
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"
msgctxt "#24108"
msgid "%d subtitles found"
-msgstr "% legendas encontradas"
+msgstr "%d legenda(s) encontrada(s)"
msgctxt "#24109"
msgid "No subtitles found"
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"
msgctxt "#25004"
msgid "Play main title: %d"
-msgstr "Reproduzir título prinicipal: %d"
+msgstr "Reproduzir título principal: %d"
msgctxt "#25005"
msgid "Title: %d"
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"
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"
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"
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)"
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"
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"
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."
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."
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."
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."
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)"
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)"
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"
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"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Desligado"
msgctxt "#666"
msgid "Verbose logging..."
-msgstr "Verbose logging..."
+msgstr "Registo Verbose..."
msgctxt "#700"
msgid "Cleaning up library"
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"
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"
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"
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."
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Pós-processamento"
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."
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"
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"
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"
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"
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"
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"
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"
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?"
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"
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"
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"
msgid "mixed"
msgstr "mistura"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Posição das legendas"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fixa"
msgctxt "#24036"
msgid "Change log"
-msgstr "Log de alterações"
+msgstr "Registo de alterações"
msgctxt "#24037"
msgid "Uninstall"
msgctxt "#24054"
msgid "Changelog"
-msgstr "Changelog"
+msgstr "Registo de Alterações"
msgctxt "#24059"
msgid "Would you like to enable this Add-on?"
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"
msgctxt "#33073"
msgid "View Changelog"
-msgstr "Ver mudanças"
+msgstr "Ver Registo de Alterações"
msgctxt "#33074"
msgid "This version of %s requires an"
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"
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."
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."
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."
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."
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)"
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)"
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"
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"
msgid "Credits"
msgstr "Autori"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Oprit"
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"
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ă"
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ă"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configurație difuzoare"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36041"
msgid "* Item folder"
msgstr "* Dosar element"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Comută pe canalul"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Înregistrează"
msgid "Select destination directory"
msgstr "Выберите папку назначения"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Выводить стерео на все динамики"
-
msgctxt "#253"
msgid "Number of channels"
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"
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"
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"
msgctxt "#420"
msgid "Best Match"
-msgstr "Ð\90вÑ\82оподбоÑ\80"
+msgstr "Ð\9eпÑ\82имизиÑ\80."
msgctxt "#421"
msgid "Keep audio device alive"
msgctxt "#458"
msgid "Limit sampling rate (kHz)"
-msgstr "Ограничить частоту (кГц)"
+msgstr "Ограничить частоту сэмплирования (кГц)"
msgctxt "#459"
msgid "Subs"
msgid "Credits"
msgstr "Создатели"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-чип"
-
msgctxt "#474"
msgid "Off"
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"
msgctxt "#10036"
msgid "Basic"
-msgstr "Ð\9dаÑ\87алÑ\8cный"
+msgstr "Ð\91азовый"
msgctxt "#10037"
msgid "Standard"
msgctxt "#10038"
msgid "Advanced"
-msgstr "Ð\9fÑ\80одвинÑ\83Ñ\82ый"
+msgstr "РаÑ\81Ñ\88иÑ\80енный"
msgctxt "#10039"
msgid "Expert"
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?"
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"
msgctxt "#10047"
msgid "Try changing the setting level to see additional categories and settings."
-msgstr "Попробуйте поменять настройки, чтобы увидеть дополнительные категории и настройки."
+msgstr "Попробуйте поменять уровень настроек, чтобы увидеть дополнительные категории и настройки."
msgctxt "#10100"
msgid "Yes/No dialogue"
msgctxt "#12347"
msgid "The system will now power down."
-msgstr "Сейчас система будет выключена. "
+msgstr "Сейчас система будет выключена."
msgctxt "#12348"
msgid "Item locked"
msgctxt "#13111"
msgid "Would you like to keep this change?"
-msgstr "ХоÑ\82иÑ\82е Ñ\81охранить изменения?"
+msgstr "Сохранить изменения?"
msgctxt "#13112"
msgid "High quality upscaling"
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"
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 "Синхронизация А/В"
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"
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 "Удалить"
msgctxt "#16106"
msgid "Manage..."
-msgstr "Управление..."
+msgstr "Управление…"
msgctxt "#16107"
msgid "Edit sort title"
msgid "VDPAU - Bob"
msgstr "VDPAU Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Постобработка"
msgid "TV recordings"
msgstr "Записи ТВ"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Папка по умолчанию для эскизов PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Каналы"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "К текущему моменту"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "Интервал обновления EPG"
msgctxt "#19101"
msgid "Provider"
-msgstr "Провайдер"
+msgstr "Поставщик"
msgctxt "#19102"
msgid "Please switch to another channel."
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"
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 запускается…"
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"
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."
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"
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."
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"
msgid "Remove media share"
msgstr "Удалить медиаресурс"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка субтитров"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Папка для фильмов и альтернативных субтитров"
msgid "mixed"
msgstr "смешанно"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Расположение субтитров"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Фиксированное"
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)"
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"
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)"
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"
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"
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"
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 "Звуки интерфейса"
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"
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"
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 "Игнорировать соотношение сторон видео до некоторой степени, чтобы заполнить больше площади экрана."
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."
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."
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 "#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."
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."
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."
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."
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 "Стереоскопический режим (текущий)"
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 "Предпочтительный режим"
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 "Стереоскопический режим видео"
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 "(Для глухих)"
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 "Ограничить разрешение интерфейса"
msgid "Select destination directory"
msgstr "Изаберите одредишну фасциклу"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Стерео излаз ка свим звучницима"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "Број канала"
msgid "Credits"
msgstr "Заслуге"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Изме. чип"
-
msgctxt "#474"
msgid "Off"
msgstr "Искљ."
msgid "Remove media share"
msgstr "Уклони дељену локацију медија"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Фасцикла са титловима"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Фасцикла филмова и алтернативних титлова"
msgid "(current)"
msgstr "Омогући хардверско убрзање (CrystalHD)"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Унесите реч за претрагу"
+
msgctxt "#29800"
msgid "Library Mode"
msgstr "Режим библиотеке"
msgid "DXVA2"
msgstr "DXVA"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфигурација звучника"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36035"
msgid "Always"
msgstr "Увек"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Пребаци на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Сними"
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"
msgid "Credits"
msgstr "Zasluge"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Izme. čip"
-
msgctxt "#474"
msgid "Off"
msgstr "Isklj."
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"
msgid "Get More..."
msgstr "Nađi jos..."
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lokacija prevoda"
-
msgctxt "#21800"
msgid "File name"
msgstr "Ime datoteke"
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"
msgid "DXVA2"
msgstr "DXVA"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Konfiguracija zvučnika"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
msgctxt "#36035"
msgid "Always"
msgstr "Uvek"
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Prebaci na kanal"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Snimi"
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"
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"
msgid "Credits"
msgstr "Autori"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
msgctxt "#474"
msgid "Off"
msgstr "Vypnúť"
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"
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ť"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-processing"
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"
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"
msgid "mixed"
msgstr "zmiešané"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Umiestnenie titulkov"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Pevné"
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"
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"
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."
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)"
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)"
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"
<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>
msgctxt "#7"
msgid "File manager"
-msgstr "Upravljalec datotek"
+msgstr "Upravljalnik datotek"
msgctxt "#8"
msgid "Weather"
msgctxt "#108"
msgid "Slideshow"
-msgstr "Diaprojekcija slik"
+msgstr "Projekcija slik"
msgctxt "#109"
msgid "Create thumbs"
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"
msgctxt "#129"
msgid "Slideshow"
-msgstr "Diaprojekcija slik"
+msgstr "Projekcija slik"
msgctxt "#130"
msgid "System info"
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"
msgctxt "#158"
msgid "Free memory"
-msgstr "Prosti pomnilnik"
+msgstr "Prost pomnilnik"
msgctxt "#159"
msgid "No link"
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"
msgctxt "#167"
msgid "Cancel file operations"
-msgstr "Prekliči operacije z datotekami"
+msgstr "Prekliči datotečne operacije"
msgctxt "#168"
msgid "%s- %s"
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"
msgctxt "#187"
msgid "No albums found!"
-msgstr "Ni najdenih albumov!"
+msgstr "Albumov ni mogoče najti!"
msgctxt "#188"
msgid "Select all"
msgctxt "#189"
msgid "Scanning media info"
-msgstr "Pregledujem informacije o mediju"
+msgstr "Pregledujem predstavne informacije"
msgctxt "#190"
msgid "Save"
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:"
msgctxt "#207"
msgid "Plot"
-msgstr "Zgodba"
+msgstr "Povzetek"
msgctxt "#208"
msgid "Play"
msgctxt "#209"
msgid "Next"
-msgstr "Naslednji"
+msgstr "Naprej"
msgctxt "#210"
msgid "Previous"
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"
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"
msgctxt "#226"
msgid "Test patterns..."
-msgstr "Testni vzorci..."
+msgstr "Testni vzorci ..."
msgctxt "#227"
msgid "Lookup audio CD track names from freedb.org"
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"
msgctxt "#258"
msgid "Enable tag reading"
-msgstr "Omgoči branje značk"
+msgstr "Omogoči branje značk"
msgctxt "#259"
msgid "Opening"
msgctxt "#261"
msgid "Waiting for start..."
-msgstr "Čakam na začetek..."
+msgstr "Čakam na začetek ..."
msgctxt "#262"
msgid "Scripts output"
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"
msgctxt "#282"
msgid "Found %i items"
-msgstr "Najdeno %i posnetkov"
+msgstr "Najdeno %i predmetov"
msgctxt "#283"
msgid "Search results"
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"
msgctxt "#293"
msgid "Browse for subtitles"
-msgstr "Prebrskaj za podnapise"
+msgstr "Prebrskaj za podnapisi"
msgctxt "#294"
msgid "Create bookmark"
msgctxt "#312"
msgid "(0=auto)"
-msgstr "(0=auto)"
+msgstr "(0=samodejno)"
msgctxt "#313"
msgid "Cleaning database"
msgctxt "#314"
msgid "Preparing..."
-msgstr "Pripravljanje..."
+msgstr "Pripravljanje ..."
msgctxt "#315"
msgid "Database error"
msgctxt "#316"
msgid "Searching songs..."
-msgstr "Iščem pesmi..."
+msgstr "Iščem pesmi ..."
msgctxt "#317"
msgid "Cleaned database successfully"
msgctxt "#318"
msgid "Cleaning songs..."
-msgstr "Čistim pesmi..."
+msgstr "Čistim pesmi ..."
msgctxt "#319"
msgid "Error cleaning songs"
msgctxt "#320"
msgid "Cleaning artists..."
-msgstr "Čistim izvajalce..."
+msgstr "Čistim izvajalce ..."
msgctxt "#321"
msgid "Error cleaning artists"
msgctxt "#322"
msgid "Cleaning genres..."
-msgstr "Čistim žanre..."
+msgstr "Čistim žanre ..."
msgctxt "#323"
msgid "Error cleaning genres"
msgctxt "#324"
msgid "Cleaning paths..."
-msgstr "Čistim poti...."
+msgstr "Čistim poti ..."
msgctxt "#325"
msgid "Error cleaning paths"
msgctxt "#326"
msgid "Cleaning albums..."
-msgstr "Čistim albume..."
+msgstr "Čistim albume ..."
msgctxt "#327"
msgid "Error cleaning albums"
msgctxt "#328"
msgid "Writing changes..."
-msgstr "Zapisujem spremembe..."
+msgstr "Zapisujem spremembe ..."
msgctxt "#329"
msgid "Error writing changes"
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"
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"
msgid "Framerate conversion"
msgstr "Pretvorba hitrosti sličic"
+msgctxt "#337"
+msgid "Output configuration"
+msgstr "Konfiguracija izhoda"
+
msgctxt "#338"
msgid "Fixed"
msgstr "Fiksno"
msgctxt "#341"
msgid "Play disc"
-msgstr "Predvajaj medij"
+msgstr "Predvajaj ploščo"
msgctxt "#342"
msgid "Movies"
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"
msgctxt "#352"
msgid "Dim"
-msgstr "Zamegljeno"
+msgstr "Zatemnitev"
msgctxt "#353"
msgid "Black"
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"
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"
msgctxt "#409"
msgid "Defaults"
-msgstr "Privzeto"
+msgstr "Privzete vrednosti"
msgctxt "#410"
msgid "Accessing weather service"
msgctxt "#415"
msgid "Downloading thumbnail..."
-msgstr "Prenašam sličice..."
+msgstr "Prenašam sličice ..."
msgctxt "#416"
msgid "Not available"
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"
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"
msgctxt "#429"
msgid "Please insert the following disc:"
-msgstr "Vstavite naslednji CD/DVD:"
+msgstr "Vstavite naslednjo ploščo:"
msgctxt "#430"
msgid "Sort by: DVD#"
msgctxt "#431"
msgid "No cache"
-msgstr "Brez začasnega pomnilnika"
+msgstr "Brez predpomnilnika"
msgctxt "#432"
msgid "Remove movie from library"
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"
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"
msgctxt "#439"
msgid "Cache"
-msgstr "Začasni pomnilnik"
+msgstr "Predpomnilnik"
msgctxt "#440"
msgid "Hard disk"
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"
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"
msgid "Credits"
msgstr "Zasluge"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modčip"
-
msgctxt "#474"
msgid "Off"
msgstr "Izključi"
msgctxt "#489"
msgid "Play the next song automatically"
-msgstr "Samodejno predvajanje naslednje datoteke"
+msgstr "Samodejno predvajaj naslednjo datoteko"
msgctxt "#491"
msgid "- Use big icons"
msgctxt "#493"
msgid "Advanced options (Experts Only!)"
-msgstr "Napredne nastavitve (Samo za strokovnjake!)"
+msgstr "Napredne nastavitve (za strokovnjake!)"
msgctxt "#494"
msgid "Overall audio headroom"
msgctxt "#501"
msgid "Looking for album names..."
-msgstr "Iščem imena albumov..."
+msgstr "Iščem imena albumov ..."
msgctxt "#502"
msgid "Open"
msgctxt "#505"
msgid "Loading media info from files..."
-msgstr "Nalagam informacije iz datotek..."
+msgstr "Nalagam informacije iz datotek ..."
msgctxt "#507"
msgid "Sort by: Usage"
msgctxt "#519"
msgid "Launch in..."
-msgstr "Zaženi v..."
+msgstr "Zaženi v ..."
msgctxt "#521"
msgid "Compilations"
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"
msgctxt "#525"
msgid "New playlist..."
-msgstr "Nov seznam predvajanja..."
+msgstr "Nov seznam predvajanja ..."
msgctxt "#526"
msgid "Add to playlist"
msgctxt "#544"
msgid "Media info"
-msgstr "Info o mediju"
+msgstr "Predstavne informacije"
msgctxt "#545"
msgid "Audio output device"
msgctxt "#546"
msgid "Passthrough output device"
-msgstr "Naprava za preusmeritev zvoka"
+msgstr "Naprava za preusmerjen zvok"
msgctxt "#547"
msgid "No biography for this artist"
msgctxt "#600"
msgid "Rip audio CD"
-msgstr "Pretvori zvočni CD"
+msgstr "Zajemi zvočni CD"
msgctxt "#601"
msgid "Medium"
msgctxt "#605"
msgid "Ripping..."
-msgstr "Pretvarjanje..."
+msgstr "Zajemanje ..."
msgctxt "#607"
msgid "To:"
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."
msgctxt "#610"
msgid "Rip audio track"
-msgstr "Pretvori zvočni posnetek"
+msgstr "Zajemi zvočni posnetek"
msgctxt "#611"
msgid "Enter number"
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"
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"
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"
msgctxt "#666"
msgid "Verbose logging..."
-msgstr "Podrobno zapisovanje..."
+msgstr "Podrobno zapisovanje ..."
msgctxt "#700"
msgid "Cleaning up library"
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)"
msgctxt "#713"
msgid "HTTP proxy"
-msgstr "HTTP proxy"
+msgstr "Proxy HTTP"
msgctxt "#715"
msgid "Assignment"
msgctxt "#717"
msgid "Manual (Static)"
-msgstr "Ročno (Statično)"
+msgstr "Ročno (statično)"
msgctxt "#719"
msgid "IP address"
msgctxt "#721"
msgid "Default gateway"
-msgstr "Privzet prehod"
+msgstr "Privzeti prehod"
msgctxt "#722"
msgid "DNS server"
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"
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"
msgctxt "#750"
msgid "Are you sure?"
-msgstr "Ste prepričani?"
+msgstr "Ali ste prepričani?"
msgctxt "#751"
msgid "Removing source"
msgctxt "#774"
msgid "Slideshow folder"
-msgstr "Mapa za diaprojekcijo slik"
+msgstr "Mapa projekcije slik"
msgctxt "#775"
msgid "Network interface"
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"
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"
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)"
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"
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"
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"
msgctxt "#1012"
msgid "Shared folder"
-msgstr "Mapa skupne rabe"
+msgstr "Mapa v skupni rabi"
msgctxt "#1013"
msgid "Port"
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"
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"
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"
msgctxt "#1032"
msgid "Add network location..."
-msgstr "Dodaj omrežno lokacijo..."
+msgstr "Dodaj omrežno lokacijo ..."
msgctxt "#1033"
msgid "Browse for file"
msgctxt "#1040"
msgid "Loading directory"
-msgstr "Nalagam direktorij"
+msgstr "Nalagam mapo"
msgctxt "#1041"
msgid "Retrieved %i items"
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"
msgctxt "#1047"
msgid "Other..."
-msgstr "Drugo..."
+msgstr "Drugo ..."
msgctxt "#1048"
msgid "Username"
msgctxt "#1180"
msgid "Proxy type"
-msgstr "Vrsta proxy-ja"
+msgstr "Vrsta proxyja"
msgctxt "#1181"
msgid "HTTP"
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"
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"
msgctxt "#1301"
msgid "Custom passthrough device"
-msgstr "Poljubna naprava za preusmeritev zvoka"
+msgstr "Poljubna naprava za preusmerjen zvok"
msgctxt "#1396"
msgid "Drifting"
msgctxt "#10003"
msgid "File manager"
-msgstr "Upravitelj datotek"
+msgstr "Upravljalnik datotek"
msgctxt "#10004"
msgid "Settings"
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"
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"
msgctxt "#10129"
msgid "Media source"
-msgstr "Medijski vir"
+msgstr "Predstavni vir"
msgctxt "#10130"
msgid "Profile settings"
msgctxt "#10131"
msgid "Lock settings"
-msgstr "Zakleni nastavitve"
+msgstr "Nastavitve zaščite"
msgctxt "#10132"
msgid "Content settings"
msgctxt "#10140"
msgid "Add-on settings"
-msgstr "Nastavitve dodatka"
+msgstr "Nastavitve dodatkov"
msgctxt "#10146"
msgid "Add-ons/Info"
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"
msgctxt "#12000"
msgid "Select dialogue"
-msgstr "Izberi"
+msgstr "Pogovorno okno izbora"
msgctxt "#12001"
msgid "Music/Info"
msgctxt "#12002"
msgid "Dialogue OK"
-msgstr "Potrdi"
+msgstr "Potrditveno pogovorno okno"
msgctxt "#12003"
msgid "Videos/Info"
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 indeksiraj ..."
msgctxt "#12010"
msgid "Return to music window"
msgctxt "#12325"
msgid "Locked! Enter code..."
-msgstr "Zaklenjeno! Vnesite geslo..."
+msgstr "Zaklenjeno! Vnesite geslo ..."
msgctxt "#12326"
msgid "Enter password"
msgctxt "#12343"
msgid "retries left "
-msgstr "vnosov na voljo"
+msgstr "poskusov še na voljo"
msgctxt "#12344"
msgid "Passwords entered did not match."
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."
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."
msgctxt "#12354"
msgid "Would you like to update it now?"
-msgstr "Želite posodobiti zdaj?"
+msgstr "Ali želite posodobiti zdaj?"
msgctxt "#12356"
msgid "Change lock"
msgctxt "#12357"
msgid "Source lock"
-msgstr "Vir zaščite"
+msgstr "Zaščita vira"
msgctxt "#12358"
msgid "Password entry was blank. Try again."
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"
msgctxt "#12373"
msgid "Settings & file manager"
-msgstr "Nastavitve & upravitelj datotek"
+msgstr "Nastavitve & upravljalnik datotek"
msgctxt "#12376"
msgid "Set as default for all videos"
msgctxt "#13010"
msgid "Hibernate"
-msgstr "Zaustavi"
+msgstr "Mirovanje"
msgctxt "#13011"
msgid "Suspend"
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"
msgctxt "#13023"
msgid "Successfully removed device"
-msgstr "Naprava je uspešno izključena"
+msgstr "Naprava je uspešno odstranjena"
msgctxt "#13024"
msgid "Joystick plugged"
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)"
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!"
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"
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"
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"
msgctxt "#13123"
msgid "Keep skin?"
-msgstr "Ohranim predlogo?"
+msgstr "Ali želite obdržati preobleko?"
msgctxt "#13130"
msgid "Blank other displays"
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"
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"
msgctxt "#13162"
msgid "Initialise failed"
-msgstr "Neuspešna inicializacija"
+msgstr "Neuspešen zagon"
msgctxt "#13170"
msgid "Never"
msgctxt "#13201"
msgid "Delete profile '%s'?"
-msgstr "Izbriši profil '%s'?"
+msgstr "Ali izbrišem profil '%s'?"
msgctxt "#13204"
msgid "Last loaded profile:"
msgctxt "#13250"
msgid "Browse for subtitle..."
-msgstr "Prebrskaj za podnapise..."
+msgstr "Prebrskaj za podnapisi ..."
msgctxt "#13251"
msgid "Move item"
msgctxt "#13301"
msgid "Auto temperature control"
-msgstr "Samodejna kontrola temperature"
+msgstr "Samodejni nadzor temperature"
msgctxt "#13302"
msgid "Fan speed override"
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?"
msgctxt "#13314"
msgid "Crossfade between songs"
-msgstr "Navzkrižni prehod"
+msgstr "Navzkrižni prehod pesmi"
msgctxt "#13315"
msgid "Regenerate thumbnails"
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"
msgctxt "#13323"
msgid "Enable karaoke support"
-msgstr "Omogoči podporo karaok"
+msgstr "Omogoči podporo karaokam"
msgctxt "#13324"
msgid "Background transparency"
msgctxt "#13348"
msgid "Search IMDb..."
-msgstr "Preišči IMDb..."
+msgstr "Preišči IMDb ..."
msgctxt "#13349"
msgid "Scan for new content"
msgctxt "#13350"
msgid "Now playing..."
-msgstr "Trenutno predvajam..."
+msgstr "Trenutno predvajam ..."
msgctxt "#13351"
msgid "Album information"
msgctxt "#13352"
msgid "Scan item to library"
-msgstr "Dodaj v bazo"
+msgstr "Dodaj v knjižnico"
msgctxt "#13353"
msgid "Stop scanning"
msgctxt "#13377"
msgid "Default view mode"
-msgstr "Privzet pogled"
+msgstr "Privzeti pogled"
msgctxt "#13378"
msgid "Default brightness"
msgctxt "#13379"
msgid "Default contrast"
-msgstr "Privzet kontrast"
+msgstr "Privzeti kontrast"
msgctxt "#13380"
msgid "Default gamma"
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"
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"
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"
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)"
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"
msgctxt "#13511"
msgid "Choose art"
-msgstr "Izberite grafiko"
+msgstr "Izberi grafiko"
msgctxt "#13512"
msgid "Current art"
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"
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"
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"
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"
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"
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"
msgctxt "#14030"
msgid "Audio cache - DVD-ROM"
-msgstr "Začasni pomnilnik zvoka - DVD-ROM"
+msgstr "Predpomnilnik zvoka - DVD-ROM"
msgctxt "#14031"
msgid "Local Network"
msgctxt "#14034"
msgid "DVD cache - DVD-ROM"
-msgstr "Začasni pomnilnik DVD - DVD-ROM"
+msgstr "Predpomnilnik DVD - DVD-ROM"
msgctxt "#14035"
msgid "Local Network"
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"
msgctxt "#14069"
msgid "Apply these settings now?"
-msgstr "Takoj uporabim te nastavitve?"
+msgstr "Ali takoj uporabim te nastavitve?"
msgctxt "#14070"
msgid "Apply changes now"
msgctxt "#14096"
msgid "Rip"
-msgstr "Pretvori"
+msgstr "Zajemi"
msgctxt "#14097"
msgid "Audio CD Insert Action"
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"
msgctxt "#15107"
msgid "Buffering..."
-msgstr "Medpomnenje..."
+msgstr "Medpomnenje ..."
msgctxt "#15108"
msgid "Navigation sounds"
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"
msgctxt "#15302"
msgid "No servers found"
-msgstr "Ni strežnikov"
+msgstr "Strežnikov ni mogoče najti"
msgctxt "#15303"
msgid "Workgroup not found"
msgctxt "#16004"
msgid "Play media from disc"
-msgstr "Predvajaj z medija"
+msgstr "Predvajaj vsebino plošče"
msgctxt "#16008"
msgid "Enter new title"
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"
msgctxt "#16024"
msgid "Cancelling..."
-msgstr "Prekinjam..."
+msgstr "Prekinjam ..."
msgctxt "#16025"
msgid "Enter the artist name"
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"
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."
msgctxt "#16106"
msgid "Manage..."
-msgstr "Urejanje..."
+msgstr "Upravljanje ..."
msgctxt "#16107"
msgid "Edit sort title"
msgctxt "#16318"
msgid "Temporal/Spatial (Half)"
-msgstr "Senčno/Pprostorsko (polovično)"
+msgstr "Senčno/Prostorsko (polovično)"
msgctxt "#16319"
msgid "DXVA"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-procesiranje"
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"
msgctxt "#19026"
msgid "Add timer..."
-msgstr "Dodaj časovnik..."
+msgstr "Dodaj časovnik ..."
msgctxt "#19027"
msgid "No search results"
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"
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"
msgctxt "#19055"
msgid "No information available"
-msgstr "Informacija ni na voljo"
+msgstr "Informacije niso na voljo"
msgctxt "#19056"
msgid "New timer"
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"
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"
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"
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"
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"
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"
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:"
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)"
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"
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."
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"
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"
msgctxt "#19260"
msgid "Unlock duration"
-msgstr "Čas odklenjenosti"
+msgstr "Trajanje odklepa"
msgctxt "#19261"
msgid "Change PIN"
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"
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."
msgctxt "#19635"
msgid "Languages"
-msgstr "Languages"
+msgstr "Jeziki"
msgctxt "#19644"
msgid "Leisure/Hobbies"
msgctxt "#20000"
msgid "Saved music folder"
-msgstr "Mapa za shranjeno glasbo"
+msgstr "Mapa shranjene glasbe"
msgctxt "#20001"
msgid "Use external DVD player"
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"
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"
msgctxt "#20047"
msgid "Create profile '%s'?"
-msgstr "Ustvari profil '%s'?"
+msgstr "Ali ustvarim profil '%s'?"
msgctxt "#20048"
msgid "Start with fresh settings"
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"
msgctxt "#20058"
msgid "Add profile..."
-msgstr "Dodaj profil..."
+msgstr "Dodaj profil ..."
msgctxt "#20059"
msgid "Query info for all albums"
msgctxt "#20060"
msgid "Media info"
-msgstr "Info o mediju"
+msgstr "Predstavne informacije"
msgctxt "#20061"
msgid "Separate"
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"
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"
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"
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"
msgctxt "#20103"
msgid "Save changes to profile?"
-msgstr "Shranim spremembe v profil?"
+msgstr "Ali shranim spremembe v profil?"
msgctxt "#20104"
msgid "Old settings found."
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)"
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"
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"
msgctxt "#20135"
msgid "Do you want to scan the folder?"
-msgstr "Želite pregledati mapo?"
+msgstr "Ali želite pregledati mapo?"
msgctxt "#20136"
msgid "Memory unit"
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"
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"
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"
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:"
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"
msgctxt "#20311"
msgid "Unknown or onboard (protected)"
-msgstr "Neznano (zaščiteno)"
+msgstr "Neznano ali vgrajeno (zaščiteno)"
msgctxt "#20314"
msgid "Videos - Library"
msgctxt "#20324"
msgid "Play part..."
-msgstr "Predvajaj odlomek..."
+msgstr "Predvajaj odlomek ..."
msgctxt "#20325"
msgid "Calibration reset"
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"
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"
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?"
msgctxt "#20344"
msgid "This directory contains"
-msgstr "Ta direktorij vsebuje"
+msgstr "Ta mapa vsebuje"
msgctxt "#20345"
msgid "Run automated scan"
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"
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:"
msgctxt "#20365"
msgid "Episode plot"
-msgstr "Zgodba epizode"
+msgstr "Povzetek epizode"
msgctxt "#20366"
msgid "* All seasons"
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 *"
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"
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"
msgctxt "#20425"
msgid "Fanart slideshow"
-msgstr "Diaprojekcija ozadij"
+msgstr "Projekcija grafik"
msgctxt "#20426"
msgid "Export to a single file or separate"
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"
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"
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"
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"
msgctxt "#20450"
msgid "Would you like to continue scanning?"
-msgstr "Želite nadaljevati s pregledovanjem?"
+msgstr "Ali želite nadaljevati s pregledovanjem?"
msgctxt "#20451"
msgid "Countries"
msgid "Listeners"
msgstr "Poslušalci"
+msgctxt "#20456"
+msgid "Flatten library hierarchy"
+msgstr "Izravnaj hierarhijo knjižnice"
+
msgctxt "#20457"
msgid "Movie set"
msgstr "Filmska zbirka"
msgctxt "#20459"
msgid "Tags"
-msgstr "Oznake"
+msgstr "Značke"
msgctxt "#20460"
msgid "Add %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"
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"
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!"
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"
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"
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"
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"
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"
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"
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"
msgctxt "#21437"
msgid "New smart playlist..."
-msgstr "Nov pameten seznam predvajanja..."
+msgstr "Nov pameten seznam predvajanja ..."
msgctxt "#21438"
msgid "%c Drive"
msgctxt "#21452"
msgid "Get More..."
-msgstr "Prenesi več..."
+msgstr "Prenesi več ..."
msgctxt "#21453"
msgid "Root filesystem"
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"
msgid "mixed"
msgstr "mešano"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Položaj podnapisov"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fiksno"
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)"
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"
msgctxt "#22002"
msgid "DNS suffix"
-msgstr "DNS pripona"
+msgstr "Pripona DNS"
msgctxt "#22003"
msgid "%2.3fs"
msgctxt "#22005"
msgid "Ahead by: %2.3fs"
-msgstr "Prehitevanje za: %2.3fs"
+msgstr "Naprej za: %2.3fs"
msgctxt "#22006"
msgid "Subtitle offset"
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"
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"
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"
msgctxt "#22082"
msgid "More..."
-msgstr "Več..."
+msgstr "Več ..."
msgctxt "#22083"
msgid "Play all"
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"
msgctxt "#24005"
msgid "Media sources"
-msgstr "Multimedijski viri"
+msgstr "Predstavni viri"
msgctxt "#24007"
msgid "Movie information"
msgid "Script"
msgstr "Skripta"
+msgctxt "#24010"
+msgid "Visualisation"
+msgstr "Vizualizacija"
+
msgctxt "#24011"
msgid "Add-on repository"
msgstr "Skladišče dodatkov"
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"
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!"
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"
msgctxt "#24080"
msgid "Try to reconnect?"
-msgstr "Poskusim ponovno povezavo?"
+msgstr "Ali želite poskusiti ponovno?"
msgctxt "#24089"
msgid "Add-on restarts"
msgctxt "#24090"
msgid "Lock Add-on manager"
-msgstr "Zakleni upravitelja dodatkov"
+msgstr "Zakleni upravljalnika dodatkov"
msgctxt "#24091"
msgid "This Add-on cannot be disabled"
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"
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:"
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"
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 ..."
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."
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"
msgctxt "#33010"
msgid "Set download directory"
-msgstr "Določi direktorij prenosov"
+msgstr "Določi mapo prenosov"
msgctxt "#33011"
msgid "Search duration"
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"
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"
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"
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"
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."
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"
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"
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"
msgctxt "#35006"
msgid "Device removed"
-msgstr "Naprava je izključena"
+msgstr "Naprava je odstranjena"
msgctxt "#35007"
msgid "Keymap to use for this device"
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"
msgctxt "#36000"
msgid "Pulse-Eight CEC adaptor"
-msgstr "Pulse-Eight CEC adapter"
+msgstr "Pulse-Eight vmesnik CEC"
msgctxt "#36001"
msgid "Pulse-Eight Nyxboard"
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"
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"
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"
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"
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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."
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"
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"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Apagado"
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"
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"
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"
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"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Configuración de altavoces"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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"
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"
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"
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"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Apagado"
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"
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"
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"
msgctxt "#1043"
msgid "Program Add-ons"
-msgstr "Addons de Aplicaciones"
+msgstr "Complementos de Aplicaciones"
msgctxt "#1045"
msgid "Add-on settings"
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?"
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"
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"
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..."
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"
msgid "Primary DNS"
msgstr "DNS Primario"
+msgctxt "#13162"
+msgid "Initialise failed"
+msgstr "Fallo en inicialización"
+
msgctxt "#13170"
msgid "Never"
msgstr "Nunca"
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"
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"
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"
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"
msgid "Inverse Telecine"
msgstr "Telecine inverso"
+msgctxt "#16315"
+msgid "Lanczos3 optimised"
+msgstr "Lanczos3 optimizado"
+
msgctxt "#16316"
msgid "Auto"
msgstr "Auto"
msgid "Spline36"
msgstr "Spline36"
+msgctxt "#16323"
+msgid "Spline36 optimised"
+msgstr "Spline36 optimisado"
+
msgctxt "#16324"
msgid "Software Blend"
msgstr "Software Blend"
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"
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"
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"
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"
msgid "mixed"
msgstr "mezclado"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicación de subtitulos"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fijo"
msgctxt "#24001"
msgid "Add-ons"
-msgstr "Add-ons"
+msgstr "Complementos"
msgctxt "#24002"
msgid "Add-on options"
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"
msgctxt "#24039"
msgid "Disabled Add-ons"
-msgstr "Disabled Add-ons"
+msgstr "Deshabilitar Complementos"
msgctxt "#24040"
msgid "(Clear the current setting)"
msgctxt "#24050"
msgid "Available Add-ons"
-msgstr "Available Add-ons"
+msgstr "Complementos Disponibles"
msgctxt "#24051"
msgid "Version:"
msgctxt "#24062"
msgid "Enabled Add-ons"
-msgstr "Add-ons activados"
+msgstr "Complementos Habilitados"
msgctxt "#24063"
msgid "Auto update"
msgctxt "#24067"
msgid "Currently downloading Add-ons"
-msgstr "Add-ons siendo descargados"
+msgstr "Complementos actualmente Descargandose"
msgctxt "#24068"
msgid "Update available"
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"
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"
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"
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"
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"
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. "
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."
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."
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."
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."
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)"
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"
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."
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."
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."
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"
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"
msgid "Credits"
msgstr "Créditos"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Apagado"
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"
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"
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"
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"
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"
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"
msgid "mixed"
msgstr "mezclado"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ubicación de los subtítulos"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fijo"
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"
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"
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"
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."
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."
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."
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."
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."
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)"
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"
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"
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)"
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"
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"
msgid "Fixed"
msgstr "Fast"
+msgctxt "#339"
+msgid "Optimized"
+msgstr "Optimerad"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Blandade artister"
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"
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"
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"
msgid "Credits"
msgstr "Medverkande"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchipp"
-
msgctxt "#474"
msgid "Off"
msgstr "Av"
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?"
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"
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"
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"
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"
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"
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"
msgid "Edit title"
msgstr "Ändra titel"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "Hantera..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "Ändra sortering av titel"
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"
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."
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"
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"
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."
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"
msgid "mixed"
msgstr "blandad"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Undertextsplacering"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Fast"
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"
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"
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)"
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?"
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"
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"
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"
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"
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."
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."
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."
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."
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)"
msgid "Select destination directory"
msgstr "Интихоби директорияи ҷои таъинот"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "Барориши стерео ба ҳамаи динамикҳо"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "Миқдори шабакаҳо"
msgid "Credits"
msgstr "Таҳиягарон"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-чип"
-
msgctxt "#474"
msgid "Off"
msgstr "Хомӯш"
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"
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 "Тоза кардан"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Коркарди баъдӣ"
msgid "TV recordings"
msgstr "Сабтҳои ТВ"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Ҷузвдони пешфарз барои эскизҳои PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Шабакаҳо"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "Ҳозир гузаронед"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "Восилаи вақти навсозии EPG."
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"
msgid "Remove media share"
msgstr "Тоза кардани манбаи медиа"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Ҷузвдони зерунвонҳо"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Директорияи филмҳо ва зерунвонҳои иловагӣ"
msgid "mixed"
msgstr "омехташуда"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Ҷойгиршавии зерунвон"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Таъйиншуда"
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 "Огоҳиҳо"
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"
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."
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-ро рамзкушоӣ кунад."
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)"
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 "(Барои нобино)"
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 "Танзими ҳудуди возеҳии интерфейси графикӣ"
msgid "Select destination directory"
msgstr "சேருமிடத்தை தேர்வு செய்"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ஸ்டீரியோ முறையில் அணைத்து ஒலிபெருக்கிக்கு அனுப்பவும்"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "தடங்களின் எண்ணிக்கை"
msgid "Credits"
msgstr "வரவுகள்"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "நிறுத்து"
msgctxt "#791"
msgid "Allow programs on this system to control XBMC"
-msgstr "இந்த கணினியில் உள்ள நிரல்களை கொண்டு XMBC யை கட்டுபடுத்த அனுமதிக்கும்"
+msgstr "இந்த கணினியில் உள்ள நிரல்களை கொண்டு XBMC யை கட்டுபடுத்த அனுமதிக்கும்"
msgctxt "#792"
msgid "Port"
msgctxt "#794"
msgid "Allow programs on other systems to control XBMC"
-msgstr "மற்ற கணினியில் உள்ள நிரல்களை கொண்டு XMBC யை கட்டுபடுத்த அனுமதிக்கும்"
+msgstr "மற்ற கணினியில் உள்ள நிரல்களை கொண்டு XBMC யை கட்டுபடுத்த அனுமதிக்கும்"
msgctxt "#795"
msgid "Initial repeat delay (ms)"
msgid "TV recordings"
msgstr "தொலைக்காட்சி பதிவகள்"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "PVR சிறுபடத்திற்கான இயல்புநிலை கோப்புறை"
-
msgctxt "#19019"
msgid "Channels"
msgstr "சேனல்கள்"
msgid "Remove media share"
msgstr "ஊடக பங்கு அகற்றவும்"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "வசனவரி கோப்புறை"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "திரைப்படம் & மாற்று வசனவரி கோப்புறை"
msgid "mixed"
msgstr "கலப்பு"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "துணைத்தலைப்பு இருப்பிடம்"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "சரிசெய்யபட்டது"
msgid "Skin is missing some files"
msgstr "அலங்காரத்தில் சில கோப்புகள் காணவில்லை"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "தேடல் சொல் சரத்தை உள்ளிடவும்"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "அறிவிப்புkal"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "ஒலிபெருக்கி கட்டமைப்பு"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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 "சிடீரியோசுகோபிக்கு முறை (தற்போதையது)"
msgid "Select destination directory"
msgstr "เลือกไดเร็คทอรีเป้าหมาย"
-msgctxt "#252"
-msgid "Output stereo to all speakers"
-msgstr "ส่งออกไปยังลำโพงทั้งหมด"
-
msgctxt "#253"
msgid "Number of channels"
msgstr "จำนวนของช่อง"
msgctxt "#338"
msgid "Fixed"
-msgstr "คงที่"
+msgstr "ค่าแน่นอน"
+
+msgctxt "#339"
+msgid "Optimized"
+msgstr "ปรับให้เหมาะสม"
msgctxt "#340"
msgid "Various artists"
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"
msgid "High"
msgstr "สูง"
+msgctxt "#420"
+msgid "Best Match"
+msgstr "ตรงกันที่สุด"
+
+msgctxt "#421"
+msgid "Keep audio device alive"
+msgstr "คงการใช้งานอุปกรณ์เสียง"
+
msgctxt "#422"
msgid "Delete album info"
msgstr "ลบข้อมูลอัลบั้ม"
msgid "Switch view"
msgstr "เปลี่ยนมุมมอง"
+msgctxt "#458"
+msgid "Limit sampling rate (kHz)"
+msgstr "จำกัด อัตราสุ่ม (kHz)"
+
msgctxt "#459"
msgid "Subs"
msgstr "ย่อย"
msgid "Credits"
msgstr "เครดิต"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "ปิด"
msgid "Program Add-ons"
msgstr "ส่วนเสริมโปรแกรม"
+msgctxt "#1044"
+msgid "Set plug-in thumb"
+msgstr "กำหนดรูปย่อของปลั๊กอิน"
+
msgctxt "#1045"
msgid "Add-on settings"
msgstr "การตั้งค่าส่วนเสริม"
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 "คุณแน่ใจหรือว่าคุณต้องการ คืนค่าเดิมของการตั้งค่า ในหมวดนี้?"
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 "กล่องโต้ดอบ ใช่/ไม่"
msgid "Password retry limit exceeded."
msgstr "ป้อนรหัสผ่านผิดเกินจำนวนที่จำกัด."
+msgctxt "#12347"
+msgid "The system will now power down."
+msgstr "ระบบจะปิดลงในขณะนี้."
+
msgctxt "#12348"
msgid "Item locked"
msgstr "ล๊อครายการ"
msgid "Save resolution?"
msgstr "จัดเก็บความละเอียดหน้าจอ?"
+msgctxt "#13111"
+msgid "Would you like to keep this change?"
+msgstr "คุณต้องการที่จะจัดเก็บการเปลี่ยนแปลงนี้ ใช่หรือไม่?"
+
msgctxt "#13112"
msgid "High quality upscaling"
msgstr "การปรับขนาดแบบคุณภาพสูง"
msgid "VDPAU Studio level colour conversion"
msgstr "VDPAU การแปลงค่าสีระดับสตูดิโอ"
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr "คงค่าหน้าตา?"
+
msgctxt "#13130"
msgid "Blank other displays"
msgstr "ยกเลิกการแสดงผลที่จออื่น"
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 รีโมท"
msgctxt "#14083"
msgid "Use a fullscreen window rather than true fullscreen"
-msgstr "ใช้หน้าต่างเต็มจอมากกว่าการแสเงผลเต็มจอจริง"
+msgstr "ใช้หน้าต่างเต็มจอ แทนที่จะใช้การแสดงผลเต็มจอจริง"
msgctxt "#14084"
msgid "Queue songs on selection"
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 "ลบ"
msgid "Edit title"
msgstr "แก้ไขชื่อเรื่อง"
+msgctxt "#16106"
+msgid "Manage..."
+msgstr "จัดการ..."
+
msgctxt "#16107"
msgid "Edit sort title"
msgstr "แก้ไข การจัดลำดับ ชื่อเรื่อง"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "การประมวลผลหลัง"
msgctxt "#19014"
msgid "Fixed"
-msgstr "à¸\84à¸\87à¸\97ีà¹\88"
+msgstr "à¸\84à¹\88าà¹\81à¸\99à¹\88à¸\99à¸à¸\99"
msgctxt "#19015"
msgid "Encryption"
msgid "TV recordings"
msgstr "บันทึกทีวี"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "โฟลเดอร์เริ่มต้นสำหรับภาพย่อของ PVR"
-
msgctxt "#19019"
msgid "Channels"
msgstr "ช่องสัญญาณ"
msgid "EPG"
msgstr "EPG"
+msgctxt "#19070"
+msgid "Go to now"
+msgstr "ไปยัง ขณะนี้"
+
msgctxt "#19071"
msgid "EPG update interval"
msgstr "อยู่ในช่วงอัพเดท EPG"
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 "โปรดเปลี่ยนไปยังช่องอื่น"
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 "ยกเลิกการบันทึก"
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 กำลังเริ่มขึ้น"
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"
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 เพื่อเรียนรู้เพิ่มเติม"
msgid "Downloading artist info failed"
msgstr "ดาวน์โหลดข้อมูลศิลปินผิดพลาด"
+msgctxt "#20220"
+msgid "Override song tags with online information"
+msgstr "แทนที่ tags เพลง ด้วยข้อมูลแบบออนไลน์"
+
msgctxt "#20240"
msgid "Android music"
msgstr "เพลง Android"
msgid "Remove media share"
msgstr "สื่อที่แบ่งปัน"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "โฟลเดอร์คำบรรยาย"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "ไดเร็กทอรี่ภาพยนต์ & คำบรรยายสำรอง"
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"
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 "ชื่อแฟ้ม"
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 "ส่วนเสริม ที่มีอยู่"
msgid "Lock Add-on manager"
msgstr "ล็อคการจัดการ ส่วนเสริม"
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr "ส่วนเสริมนี้ ไม่สามารถปิดการใช้งาน"
+
msgctxt "#24094"
msgid "(current)"
msgstr "(ปัจจุบัน)"
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 "คุณต้องการที่จะปิดมันบนระบบของคุณ?"
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 "การแจ้งเตือน"
msgid "Clips"
msgstr "คลิป"
+msgctxt "#33017"
+msgid "Restart plug-in to enable"
+msgstr "เริ่มการใช้งานปล๊ักอินใหม่ เพื่อเปิดใช้"
+
msgctxt "#33018"
msgid "Tonight"
msgstr "คืนนี้"
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"
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"
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 "ไม่พบรายการถัดไปที่จะเล่น"
msgid "Disable joystick when this device is present"
msgstr "ปิดใช้งานจอยสติ๊ก เมื่อค้นพบอุปกรณ์นี้"
+msgctxt "#35103"
+msgid "Enable system keys in fullscreen"
+msgstr "เปิดใช้ ปุ่มของระบบในหน้าจอ"
+
msgctxt "#35500"
msgid "Location"
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 "ยินยอมให้ตัวเล่นวิดีโอ ละเลยสัดส่วนของภาพด้วยปริมาณทีกำหนด เพื่อให้เต็มขนาดของจอภาพด้วยวิดีโอ."
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."
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."
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 "ยังไม่มีข้อมูล."
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."
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 ช่องเสียง."
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."
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 "ตั้งค่าวิธีการจัดการเสียงของส่วนติดต่อผู้ใช้, อย่างเช่น การเลื่อนเมนูและการแจ้งเตือนที่สำคัญ."
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 "โหมดภาพสามมิติ (ปัจจุบัน)"
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 "โหมดที่กำหนดไว้"
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 "โหมดภาพสามมิติ ของวิดีโอ"
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 "(มีปัญหาทางสายตา)"
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 แบบจำกัด"
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ı"
msgid "Fixed"
msgstr "Sabit"
+msgctxt "#339"
+msgid "Optimized"
+msgstr "İyileştirilmiş"
+
msgctxt "#340"
msgid "Various artists"
msgstr "Çeşitli sanatçılar"
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"
msgid "Credits"
msgstr "Jenerik"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Kapalı"
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"
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"
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?"
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"
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"
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"
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"
msgctxt "#14053"
msgid "GUI filters"
-msgstr "Arayüz filtreleri"
+msgstr "Grafik Kullanıcı Arabirimi filtreleri"
msgctxt "#14055"
msgid "Use background scanning"
msgid "VDPAU - Bob"
msgstr "VDPAU - Bob"
+msgctxt "#16326"
+msgid "DXVA-HD"
+msgstr "DXVA-HD"
+
msgctxt "#16400"
msgid "Post-processing"
msgstr "Post-processing"
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"
msgid "Warning"
msgstr "Uyarı"
+msgctxt "#19099"
+msgid "Service"
+msgstr "Hizmet"
+
msgctxt "#19101"
msgid "Provider"
msgstr "Sağlayıcı"
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ü"
msgctxt "#21379"
msgid "Enable 720p"
-msgstr "720p'ti etkinleştir"
+msgstr "720p'yi etkinleştir"
msgctxt "#21380"
msgid "Enable 1080i"
msgid "mixed"
msgstr "karışık"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Altyazı konumu"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Sabit"
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ı"
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"
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"
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"
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"
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"
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."
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."
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."
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."
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ç."
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ç."
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."
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."
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."
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."
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."
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."
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)"
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ı)"
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"
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"
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 "Затримка"
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 "Програми"
msgid "Sort by: File"
msgstr "Сорт. за файлами"
+msgctxt "#364"
+msgid "Dolby Digital (AC3) capable receiver"
+msgstr "Виводити звук у форматі Dolby Digital (AC3)"
+
msgctxt "#365"
msgid "Sort by: Name"
msgstr "Сорт. за іменем"
msgid "Credits"
msgstr "Автори"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "МOD-схема"
-
msgctxt "#474"
msgid "Off"
msgstr "Вимкн."
msgid "Compression level"
msgstr "Ступінь стиснення"
+msgctxt "#666"
+msgid "Verbose logging..."
+msgstr "Детальний журнал…"
+
msgctxt "#700"
msgid "Cleaning up library"
msgstr "Очищення медіатеки…"
msgid "HTTP proxy"
msgstr "HTTP-проксі"
+msgctxt "#715"
+msgid "Assignment"
+msgstr "Призначення"
+
msgctxt "#716"
msgid "Automatic (DHCP)"
msgstr "Автоматично (DHCP)"
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 "Зберегти та перезапустити"
msgid "Style"
msgstr "Стиль"
+msgctxt "#737"
+msgid "Colour"
+msgstr "Колір"
+
msgctxt "#738"
msgid "Normal"
msgstr "Нормальний"
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 "Зберегти та застосувати налаштування мережі"
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 "Сканували зараз?"
msgid "Valid port range is 1024-65535"
msgstr "Доступний діапазон портів: 1024–65535"
+msgctxt "#997"
+msgid "Add Pictures..."
+msgstr "Додати фото…"
+
msgctxt "#998"
msgid "Add Music..."
msgstr "Додати музику…"
msgid "Enter web address"
msgstr "Уведіть веб-адресу"
+msgctxt "#1180"
+msgid "Proxy type"
+msgstr "Тип проксі-сервера"
+
+msgctxt "#1181"
+msgid "HTTP"
+msgstr "HTTP"
+
msgctxt "#1182"
msgid "SOCKS4"
msgstr "SOCKS4"
msgid "SOCKS5"
msgstr "SOCKS5"
+msgctxt "#1185"
+msgid "SOCKS5 with remote dns resolving"
+msgstr "SOCKS5 із віддаленим визначенням DNS"
+
msgctxt "#1200"
msgid "SMB client"
msgstr "SMB-клієнт"
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"
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 "Пошук субтитрів…"
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 "Низький заряд батареї"
msgid "Play only this"
msgstr "Грати лише цей файл"
+msgctxt "#13435"
+msgid "Enable HQ Scalers for scalings above"
+msgstr "Високоякісне масштабування більше, ніж"
+
msgctxt "#13500"
msgid "A/V sync method"
msgstr "Синхронізація А/В"
msgid "No art"
msgstr "Без картинки"
+msgctxt "#13516"
+msgid "Add art"
+msgstr "Додати картинку"
+
msgctxt "#13550"
msgid "Pause during refresh rate change"
msgstr "Пауза для зміни частоти дисплею"
msgid "TV recordings"
msgstr "Записи ТБ"
-msgctxt "#19018"
-msgid "Default folder for PVR thumbnails"
-msgstr "Папка для ескізів PVR за промовчанням"
-
msgctxt "#19019"
msgid "Channels"
msgstr "Канали"
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 "Неможливо відтворити запис. Див. журнал."
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 "Запис перервано"
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 запускається"
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."
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."
msgid "Writer"
msgstr "Сценарій"
+msgctxt "#20418"
+msgid "Writers"
+msgstr "Сценаристи"
+
msgctxt "#20419"
msgid "Replace file names with library titles"
msgstr "Показувати назви з медіатеки замість імен файлів"
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 "Показувати приховані файли та папки"
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 "Змінити медіаресурс"
msgid "Remove media share"
msgstr "Видалити медіаресурс"
-msgctxt "#21366"
-msgid "Subtitle folder"
-msgstr "Папка субтитрів"
-
msgctxt "#21367"
msgid "Movie & alternate subtitle directory"
msgstr "Папка для фільмів і альтернативних субтитрів"
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"
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 "Додаткові категорії"
msgid "Skin is missing some files"
msgstr "У обкладинці бракує файлів"
+msgctxt "#24121"
+msgid "Enter search string"
+msgstr "Рядок пошуку"
+
msgctxt "#25000"
msgid "Notifications"
msgstr "Сповіщення"
msgid "Flac"
msgstr "Flac"
-msgctxt "#34100"
-msgid "Speaker Configuration"
-msgstr "Конфігурація динаміків"
-
msgctxt "#34101"
msgid "2.0"
msgstr "2.0"
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 "Ще немає доступної інформації."
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 "Ще немає доступної інформації."
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 "Ще немає доступної інформації."
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 "Ще немає доступної інформації."
msgctxt "#36420"
msgid "No info available yet."
msgstr "Ще немає доступної інформації."
+
+msgctxt "#36426"
+msgid "Switch to channel"
+msgstr "Переключитися на канал"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Запис"
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"
msgid "Thunderstorms"
msgstr "Momaqaldiroq"
+msgctxt "#371"
+msgid "Partly"
+msgstr "Qisman"
+
msgctxt "#375"
msgid "Snow"
msgstr "Qor"
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"
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"
msgctxt "#36041"
msgid "* Item folder"
msgstr "* Element jildi"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Yozish"
msgctxt "#35500"
msgid "Location"
msgstr "Địa điểm"
+
+msgctxt "#36428"
+msgid "Record"
+msgstr "Ghi lại"
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"
msgid "Credits"
msgstr "Credit"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Tắt"
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"
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"
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"
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"
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"
msgid "Credits"
msgstr "Diolchiadau"
-msgctxt "#471"
-msgid "Modchip"
-msgstr "Modchip"
-
msgctxt "#474"
msgid "Off"
msgstr "Diffodd"
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)"
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"
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"
msgid "Group by"
msgstr "Grwpio yn ôl"
-msgctxt "#21460"
-msgid "Subtitle location"
-msgstr "Lleoliad isdeitlau"
-
msgctxt "#21461"
msgid "Fixed"
msgstr "Sefydlog"
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"
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"
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"
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
// 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;
#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
{
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
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;
#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
// 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);
#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
{
// 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;
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
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
// 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;
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
// 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;
LIBS=
ifneq (@USE_EXTERNAL_FFMPEG@,1)
+ifneq (@USE_STATIC_FFMPEG@,1)
LIBS+=$(AVUTIL_SO) \
$(AVCODEC_SO) \
$(AVFORMAT_SO) \
$(SWSCALE_SO) \
$(SWRESAMPLE_SO)
endif
+endif
.PHONY: $(DIRS) codecs
ifneq ($(findstring osx,$(ARCH)), osx)
+ifneq (@USE_STATIC_FFMPEG@,1)
codecs: $(addprefix $(SYSDIR)/, $(LIBS));
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 $@
// 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;
}
}
*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;
}
* Private to the FFmpeg AVHWAccel implementation
*/
unsigned report_id;
- unsigned last_slice_count;
};
/**
#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;
};
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;
}
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;
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)
if (!ret)
ff_mpeg_draw_horiz_band(s, 0, avctx->height);
- ctx->last_slice_count = ctx_pic->slice_count;
return ret;
}
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)
// 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);
// 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) {
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)
av_free(cpath);
cpath = av_strdup(¶m[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(¶m[7]);
+ cdomain = av_strdup(¶m[7+leading_dot]);
} else if (!av_strncasecmp("secure", param, 6) ||
!av_strncasecmp("comment", param, 7) ||
!av_strncasecmp("max-age", param, 7) ||
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 {
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;
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)
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;
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;
if (!ts->stream->nb_streams)
ts->stop_parse = 2;
+ set_pmt_found(ts, h->id);
+
for(;;) {
st = 0;
pes = NULL;
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.
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;
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
+++ /dev/null
-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
-
+++ /dev/null
-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
-
--- /dev/null
+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
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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(¶m[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(¶m[7]);
++ cdomain = av_strdup(¶m[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
+
--- /dev/null
+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
+
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();
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;
# 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
--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
--- /dev/null
+#!/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
// 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)
{
+++ /dev/null
-# 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
#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
# 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*)
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*)
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
; 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/
+++ /dev/null
-@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%
+++ /dev/null
-; 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/
+++ /dev/null
-@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%
+++ /dev/null
-; filename mirror of the file
-tinyxml-2.6.2_1-win32.7z http://mirrors.xbmc.org/build-deps/win32/
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}
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
{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
<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" />
<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">
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
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%
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"
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%
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
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%
<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>
<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>
<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>
<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>
<?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>
<?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>
<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>
<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>
</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">
<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>
</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>
<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">
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],
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);
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;
}
#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();
}
#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;
}
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;
/* 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();
#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
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include "SDL_anigif.h"
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
<!-- 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" />
<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"
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
+import android.view.View;
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);
+ }
+ }
+
}
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
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))
}
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))
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)}")
return t.substring(start,c)
}
+ public static List SwigType_templateparmlist(String t)
+ {
+ int i = t.indexOf('<');
+ return SwigType_parmlist(t.substring(i))
+ }
+
/* -----------------------------------------------------------------------------
* SwigType_parmlist()
*
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)
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
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
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
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
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
./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
+
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"
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
nettle: gmp
pythonmodule-pil: $(ZLIB) libjpeg-turbo libpng freetype2 python26
libsdl: $(LINUX_SYSTEM_LIBS)
+libxslt: libgcrypt
.installed-$(PLATFORM): $(DEPENDS)
touch $@
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
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)
--- /dev/null
+--- 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
# 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
-$(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:
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)" ..
--- /dev/null
+--- 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
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
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)
--- /dev/null
+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)
+
.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 $@
#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
./configure --prefix=$(PREFIX)
ifeq ($(OS),android)
-CONFIGURE += --enable-codec=libstagefright
+CONFIGURE += --enable-codec=libstagefright,amcodec
endif
+CONFIGURE += $(CONFIG_EXTRA)
+
all: $(SOURCE)/libxbmc.so
// 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;
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();
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);
}
// 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
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;
CAddonInstaller::Get().UpdateRepos();
CAEFactory::GarbageCollect();
+
}
// Global Idle Time in Seconds
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;
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);
}
}
-void CApplicationPlayer::CloseFile()
+void CApplicationPlayer::CloseFile(bool reopen)
{
boost::shared_ptr<IPlayer> player = GetInternal();
if (player)
{
++m_iPlayerOPSeq;
- player->CloseFile();
+ player->CloseFile(reopen);
}
}
// 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);
}
}
int m_iPlaySpeed;
// player management
- void CloseFile();
+ void CloseFile(bool reopen = false);
void ClosePlayer();
void ClosePlayerGapless(PLAYERCOREID newCore);
void CreatePlayer(PLAYERCOREID newCore, IPlayerCallback& callback);
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;
void CFileItem::FillInMimeType(bool lookup /*= true*/)
{
+ // TODO: adapt this to use CMime::GetMimeType()
if (m_mimetype.empty())
{
if( m_bIsFolder )
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())
{
// 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();
{
// 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())
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())
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)
{
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
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();
{
CStdString condition(CGUIInfoLabel::ReplaceLocalize(expression));
StringUtils::Trim(condition);
- StringUtils::ToLower(condition);
if (condition.empty())
return INFO::InfoPtr();
NotifyObservers(ObservableMessageCurrentItem);
}
-void CGUIInfoManager::SetCurrentAlbumThumb(const CStdString thumbFileName)
+void CGUIInfoManager::SetCurrentAlbumThumb(const CStdString &thumbFileName)
{
if (CFile::Exists(thumbFileName))
m_currentFile->SetArt("thumb", thumbFileName);
URIUtils::RemoveSlashAtEnd(path);
path=URIUtils::GetFileName(path);
}
- CURL::Decode(path);
return path;
}
case LISTITEM_FILENAME_AND_PATH:
else
path = item->GetPath();
path = CURL(path).GetWithoutUserDetails();
- CURL::Decode(path);
return path;
}
case LISTITEM_PICTURE_PATH:
#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)
// 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;
}
+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;
}
void CPasswordManager::Save() const
{
- if (!m_permanentCache.size())
+ if (m_permanentCache.empty())
return;
CXBMCTinyXML doc;
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;
{
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);
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;
}
}
{ // 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();
{
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;
}
}
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
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())
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
&& !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;
\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;
};
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);
if (!(s.st_mode & S_IFDIR))
#endif
{
- Encode(archiveName);
+ archiveName = Encode(archiveName);
if (is_apk)
{
CURL c("apk://" + archiveName + "/" + strURL.substr(iPos + 1));
/* 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)
strHostName = m_strHostName;
if (URIUtils::ProtocolHasEncodedHostname(m_strProtocol))
- strURL += URLEncodeInline(strHostName);
+ strURL += Encode(strHostName);
else
strURL += strHostName;
}
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 += "@";
}
if (m_strHostName != "")
{
if( URIUtils::ProtocolHasEncodedHostname(m_strProtocol) )
- strURL += URLEncodeInline(m_strHostName);
+ strURL += Encode(m_strHostName);
else
strURL += m_strHostName;
if (HasPort())
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() );
{
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
}
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)
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);
}
// URLDecode since the original path may be an URL
- CURL::Decode(strFilename);
+ strFilename = CURL::Decode(strFilename);
return strFilename;
}
const CStdStringArray ®exps = 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))
{
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++)
{
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 &&
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;
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");
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) : "";
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
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));
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
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;
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;
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)
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;
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);
}
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
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();
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;
// 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;
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 (...)
{
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;
}
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
return false;
}
-bool CAddonDatabase::GetAddon(int id, AddonPtr& addon)
+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);
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();
}
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;
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();
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)
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()
}
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);
+}
+
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
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;
};
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);
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)
{
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;
}
}
// 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;
}
// 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)
{
while (size > limit && i < items.Size())
{
size -= items[i]->m_dwSize;
+ db.RemovePackage(items[i]->GetPath());
CFileUtils::DeleteItem(items[i++],true);
}
while (size > limit && i < items.Size())
{
size -= items[i]->m_dwSize;
+ db.RemovePackage(items[i]->GetPath());
CFileUtils::DeleteItem(items[i++],true);
}
}
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
if (archivedFiles.Size() != 1 || !archivedFiles[0]->m_bIsFolder)
{ // invalid package
+ db.RemovePackage(package);
CFile::Delete(package);
return false;
}
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;
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;
}
}
}
-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() : "";
#include "utils/Stopwatch.h"
#include "threads/Event.h"
+class CAddonDatabase;
+
class CAddonInstaller : public IJobCallback
{
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
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);
*/
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;
&& 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());
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);
#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
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)
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);
+ }
+ }
+ }
}
}
bEncoded = (strstr(option, "urlencoded") != NULL);
}
if (bEncoded)
- CURL::Decode(value);
+ value = CURL::Decode(value);
if (CGUIKeyboardFactory::ShowAndGetInput(value, label, true, bHidden))
{
else
((CGUIButtonControl*) control)->SetLabel2(value);
if (bEncoded)
- CURL::Encode(value);
+ value = CURL::Encode(value);
}
}
else if (strcmp(type, "number") == 0 && CGUIDialogNumeric::ShowAndGetNumber(value, label))
// 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;
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
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)
{
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)
{
{
}
+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;
// 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);
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;
}
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())
DirList m_dirs;
static VECADDONS Parse(const DirInfo& dir);
- private:
static std::string FetchChecksum(const std::string& url);
+ private:
CRepository(const CRepository &rhs);
};
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);
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)
// 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);
// 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);
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
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();
*/
#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;
};
}
#include "XBMCApp.h"
#include "guilib/Key.h"
#include "windowing/WinEvents.h"
+#include "android/jni/KeyCharacterMap.h"
typedef struct {
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++)
(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:
(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:
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));
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);
~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);
};
--- /dev/null
+/*
+ * 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");
+ }
+}
+
--- /dev/null
+#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;
+};
+
+};
+
void setStreamVolume(int index = 0, int flags = 0);
static void PopulateStaticFields();
+ static int STREAM_MUSIC;
private:
CJNIAudioManager();
-
- static int STREAM_MUSIC;
};
+
--- /dev/null
+/*
+ * 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);
+}
+
--- /dev/null
+#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);
+};
+
+};
+
#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"
CJNICursor::PopulateStaticFields();
CJNIContentResolver::PopulateStaticFields();
CJNIConnectivityManager::PopulateStaticFields();
+ CJNIAudioFormat::PopulateStaticFields();
CJNIAudioManager::PopulateStaticFields();
+ CJNIAudioTrack::PopulateStaticFields();
CJNISurface::PopulateStaticFields();
CJNIMediaCodec::PopulateStaticFields();
CJNIMediaCodecInfoCodecProfileLevel::PopulateStaticFields();
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+#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);
+};
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
SRCS += View.cpp
SRCS += Window.cpp
SRCS += Build.cpp
+SRCS += KeyCharacterMap.cpp
LIB = jni.a
#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"
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)
#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;
}
return AE->IsSettingVisible(value);
}
+
+void CAEFactory::KeepConfiguration(unsigned int millis)
+{
+ if (AE)
+ AE->KeepConfiguration(millis);
+}
{
AE_ENGINE_NULL,
AE_ENGINE_COREAUDIO,
- AE_ENGINE_PULSE,
AE_ENGINE_ACTIVE,
AE_ENGINE_PIAUDIO
};
static void SettingOptionsAudioQualityLevelsFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int ¤t);
static void SettingOptionsAudioStreamsilenceFiller(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int ¤t);
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();
#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.")
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();
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
}
#include <string>
#include <vector>
-#include "Utils/AEDeviceInfo.h"
+#include "cores/AudioEngine/Utils/AEDeviceInfo.h"
class IAESink;
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);
};
#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"
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"
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)
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)
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;
}
break;
}
}
- else if (&m_sink.m_dataPort)
+ else if (port == &m_sink.m_dataPort)
{
switch (signal)
{
m_state = AE_TOP_CONFIGURED_SUSPEND;
m_extDeferData = true;
}
+ msg->Reply(CActiveAEControlProtocol::ACC);
return;
case CActiveAEControlProtocol::PAUSESTREAM:
CActiveAEStream *stream;
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:
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)
{
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;
break;
}
}
- else if (&m_sink.m_dataPort)
+ else if (port == &m_sink.m_dataPort)
{
switch (signal)
{
break;
}
}
- else if (&m_sink.m_dataPort)
+ else if (port == &m_sink.m_dataPort)
{
switch (signal)
{
break;
}
}
+ else if (port == NULL) // timeout
+ {
+ switch (signal)
+ {
+ case CActiveAEControlProtocol::TIMEOUT:
+ m_extTimeout = 1000;
+ return;
+ default:
+ break;
+ }
+ }
break;
case AE_TOP_CONFIGURED_IDLE:
{
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();
}
if (!m_extDrain && HasWork())
{
- ResampleSounds();
ClearDiscardedBuffers();
m_extTimeout = 100;
return;
m_bStateMachineSelfTrigger = false;
m_extDrain = false;
m_extDeferData = false;
+ m_extKeepConfig = 0;
// start sink
m_sink.Start();
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)
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);
AEAudioFormat outputFormat;
if (m_mode == MODE_RAW)
{
+ inputFormat.m_frames = m_sinkFormat.m_frames;
outputFormat = inputFormat;
sinkInputFormat = m_sinkFormat;
}
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);
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);
// 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)
{
(*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))
{
// 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();
}
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__);
void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, int *mode)
{
+ int oldMode = m_mode;
if (mode)
*mode = MODE_PCM;
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))
{
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) &&
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;
5000,
&config, sizeof(config)))
{
- bool success = reply->signal == CSinkControlProtocol::ACC ? true : false;
+ bool success = reply->signal == CSinkControlProtocol::ACC;
if (!success)
{
reply->Release();
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;
}
&reply,
2000))
{
- bool success = reply->signal == CSinkDataProtocol::ACC ? true : false;
+ bool success = reply->signal == CSinkDataProtocol::ACC;
if (!success)
{
reply->Release();
}
}
-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
&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__);
m_extError = true;
}
+ // make sure we open sink on next configure
+ m_currDevice = "";
+
m_inMsgEvent.Reset();
}
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");
&reply,
5000))
{
- bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+ bool success = reply->signal == CActiveAEControlProtocol::ACC;
reply->Release();
if (!success)
{
setting == "audiooutput.audiodevice" ||
setting == "audiooutput.config" ||
setting == "audiooutput.ac3passthrough" ||
+ setting == "audiooutput.ac3transcode" ||
setting == "audiooutput.eac3passthrough" ||
setting == "audiooutput.dtspassthrough" ||
setting == "audiooutput.truehdpassthrough" ||
setting == "audiooutput.processquality" ||
setting == "audiooutput.passthrough" ||
setting == "audiooutput.samplerate" ||
- setting == "audiooutput.normalizelevels")
+ setting == "audiooutput.normalizelevels" ||
+ setting == "audiooutput.guisoundmode")
{
m_controlPort.SendOutMessage(CActiveAEControlProtocol::RECONFIGURE);
}
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;
}
&reply,
5000))
{
- bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+ bool success = reply->signal == CActiveAEControlProtocol::ACC;
reply->Release();
if (!success)
{
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);
}
//-----------------------------------------------------------------------------
{
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;
*/
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)
{
false,
true,
NULL,
- AE_QUALITY_MID);
+ m_settings.resampleQuality);
dst_samples = resampler->CalcDstSampleCount(sound->GetSound(true)->nb_samples,
m_internalFormat.m_sampleRate,
&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;
&reply,1000,
&stream, sizeof(CActiveAEStream*)))
{
- bool success = reply->signal == CActiveAEControlProtocol::ACC ? true : false;
+ bool success = reply->signal == CActiveAEControlProtocol::ACC;
reply->Release();
if (!success)
{
#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
std::string passthoughdevice;
int channels;
bool ac3passthrough;
+ bool ac3transcode;
bool eac3passthrough;
bool dtspassthrough;
bool truehdpassthrough;
bool normalizelevels;
bool passthrough;
int config;
+ int guisoundmode;
unsigned int samplerate;
AEQuality resampleQuality;
};
STREAMRESAMPLERATIO,
STREAMFADE,
STOPSOUND,
- SOUNDMODE,
GETSTATE,
DISPLAYLOST,
DISPLAYRESET,
+ KEEPCONFIG,
TIMEOUT,
};
enum InSignal
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;
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();
bool InitSink();
void DrainSink();
void UnconfigureSink();
- bool IsSinkCompatible(const AEAudioFormat format, const std::string &device);
void Start();
void Dispose();
void LoadSettings();
bool m_extError;
bool m_extDrain;
XbmcThreads::EndTime m_extDrainTimer;
+ unsigned int m_extKeepConfig;
bool m_extDeferData;
enum
AudioSettings m_settings;
CEngineStats m_stats;
IAEEncoder *m_encoder;
+ std::string m_currDevice;
// buffers
CActiveAEBufferPoolResample *m_sinkBuffers;
};
std::list<SoundState> m_sounds_playing;
std::vector<CActiveAESound*> m_sounds;
- int m_soundMode;
float m_volume;
bool m_muted;
*/
#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;
#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
CActiveAEResample::CActiveAEResample()
{
m_pContext = NULL;
+ m_loaded = false;
+ if (m_dllAvUtil.Load() && m_dllSwResample.Load())
+ m_loaded = true;
}
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;
#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
{
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;
#include <sstream>
#include "ActiveAESink.h"
-#include "Utils/AEUtil.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
#include "utils/EndianSwap.h"
#include "ActiveAE.h"
}
}
-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;
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
{
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;
}
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
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;
#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
{
const std::string *device;
};
+struct SinkReply
+{
+ AEAudioFormat format;
+ float cacheTotal;
+ float latency;
+ bool hasVolume;
+};
+
class CSinkControlProtocol : public Protocol
{
public:
CONFIGURE,
UNCONFIGURE,
SILENCEMODE,
- ISCOMPATIBLE,
VOLUME,
FLUSH,
TIMEOUT,
std::string GetDefaultDevice(bool passthrough);
void Start();
void Dispose();
- bool HasVolume();
AEDeviceType GetDeviceType(const std::string &device);
bool HasPassthroughDevice();
CSinkControlProtocol m_controlPort;
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);
bool m_bStateMachineSelfTrigger;
int m_extTimeout;
bool m_extError;
- int m_extSilenceTimeout;
+ unsigned int m_extSilenceTimeout;
XbmcThreads::EndTime m_extSilenceTimer;
CSampleBuffer m_sampleOfSilence;
*
*/
-#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"
*/
#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;
#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"
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()
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);
while(copied < size)
{
- buf = (uint8_t*)data;
+ buf = ((uint8_t*)data) + copied;
bytesToCopy = size - copied;
if (m_currentBuffer)
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;
// 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;
}
//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;
MsgStreamSample msgData;
msgData.buffer = m_currentBuffer;
msgData.stream = this;
+ RemapBuffer();
m_streamPort->SendOutMessage(CActiveAEDataProtocol::STREAMSAMPLE, &msgData, sizeof(MsgStreamSample));
m_currentBuffer = NULL;
}
MsgStreamSample msgData;
msgData.buffer = m_currentBuffer;
msgData.stream = this;
+ RemapBuffer();
m_streamPort->SendOutMessage(CActiveAEDataProtocol::STREAMSAMPLE, &msgData, sizeof(MsgStreamSample));
m_currentBuffer = NULL;
}
*
*/
-#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
{
void IncFreeBuffers();
void DecFreeBuffers();
void ResetFreeBuffers();
+ void InitRemapper();
+ void RemapBuffer();
public:
virtual unsigned int GetSpace();
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;
CCoreAudioAE::CCoreAudioAE() :
m_Initialized (false ),
+ m_deviceLost (false ),
m_callbackRunning (false ),
m_lastStreamFormat (AE_FMT_INVALID),
m_lastChLayoutCount (0 ),
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()
else
return false;
}
+ else if (settingId == "audiooutput.stereoupmix")
+ {
+ if (CSettings::Get().GetInt("audiooutput.channels") > AE_CH_LAYOUT_2_0)
+ return true;
+ }
return true;
}
// Prevent multiple init/deinit
bool m_Initialized;
+ bool m_deviceLost;
bool m_callbackRunning;
AEAudioFormat m_format;
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;
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.");
// 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;
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);
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;
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;
}
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};
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;
~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();
"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, ¶mSize, ¤tFormat);
- 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)
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
// 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;
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)",
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)",
virtual ~CCoreAudioStream();
bool Open(AudioStreamID streamId);
- void Close();
+ void Close(bool restore = true);
AudioStreamID GetId() {return m_StreamId;}
UInt32 GetDirection();
}
void CCoreAudioUnit::GetFormatDesc(AEAudioFormat format,
- AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc)
+ AudioStreamBasicDescription *streamDesc, AudioStreamBasicDescription *coreaudioDesc, bool encoded)
{
unsigned int bps = CAEUtil::DataFormatToBits(format.m_dataFormat);
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
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();
+++ /dev/null
-/*
- * 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;
-}
+++ /dev/null
-#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;
-};
-};
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#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
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#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
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#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
* @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; }
};
*
*/
-#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
{
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.
*
*/
-#include "utils/StdString.h"
-#include "AE.h"
+#include <string>
class IAESound
{
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
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
#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"
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,
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;
}
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)
}
#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;
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);
/* 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))
}
}
-bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
+bool CAESinkALSA::InitializeHW(const ALSAConfig &inconfig, ALSAConfig &outconfig)
{
snd_pcm_hw_params_t *hw_params;
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)
}
/* 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;
}
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);
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;
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)
{
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;
#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
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);
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 ¶ms);
static bool TryDevice(const std::string &name, snd_pcm_t **pcmp, snd_config_t *lconf);
*/
#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
}
#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;
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()
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);
}
}
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";
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
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);
-}
*
*/
-#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"; }
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 ();
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;
};
#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"
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)
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 */
*
*/
-#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"
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 ();
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;
*/
#include "system.h"
-
+#include "threads/Thread.h"
#include "cores/AudioEngine/Interfaces/AESink.h"
class CAESinkNULL : public CThread, public IAESink
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 ();
#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"
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
*
*/
-#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"
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 ();
--- /dev/null
+/*
+ * 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
--- /dev/null
+#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;
+};
--- /dev/null
+/*
+ * 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, ¶m);
+
+ 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
--- /dev/null
+#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
#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"
{
}
-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;
#include "system.h"
-#include "Interfaces/AESink.h"
+#include "cores/AudioEngine/Interfaces/AESink.h"
#include <stdint.h>
class CAESinkProfiler : public IAESink
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 ();
#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"
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)
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)
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;
+ }
}
}
*
*/
-#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"
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 ();
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;
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])
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;
}
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;
}
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;
}
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)
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);
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;
}
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))
#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
}
}
-bool CExternalPlayer::CloseFile()
+bool CExternalPlayer::CloseFile(bool reopen)
{
m_bAbortRequest = true;
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
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;
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;
m_RenderUpdateCallBackFn = NULL;
m_RenderUpdateCallBackCtx = NULL;
+ m_RenderFeaturesCallBackFn = NULL;
+ m_RenderFeaturesCallBackCtx = NULL;
}
CBaseRenderer::~CBaseRenderer()
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:
// rendering flags
unsigned m_iFlags;
+ ERenderFormat m_format;
const void* m_RenderUpdateCallBackCtx;
RenderUpdateCallBackFn m_RenderUpdateCallBackFn;
#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
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;
}
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);
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:
// 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);
}
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();
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;
}
bool m_bValidated;
std::vector<ERenderFormat> m_formats;
bool m_bImageReady;
- ERenderFormat m_format;
GLenum m_textureTarget;
unsigned short m_renderMethod;
RenderQuality m_renderQuality;
}
// 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);
}
// 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);
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;
#include "guilib/GUIFont.h"
#include "cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayText.h"
#include "cores/VideoRenderers/RenderManager.h"
+#include "cores/VideoRenderers/OverlayRendererUtil.h"
using namespace OVERLAY;
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);
#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 {
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;
+}
+
}
, int& min_x, int& max_x
, int& min_y, int& max_y);
bool convert_quad(ASS_Image* images, SQuads& quads);
+ int GetStereoscopicDepth();
}
"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)
return true;
}
+void DefaultFilterShader::OnCompiledAndLinked()
+{
+ m_hSourceTex = glGetUniformLocation(ProgramHandle(), "img");
+}
+
+bool DefaultFilterShader::OnEnabled()
+{
+ glUniform1i(m_hSourceTex, m_sourceTexUnit);
+ VerifyGLState();
+ return true;
+}
+
#endif
bool OnEnabled();
};
+ class DefaultFilterShader : public BaseVideoFilterShader
+ {
+ public:
+ void OnCompiledAndLinked();
+ bool OnEnabled();
+ };
+
} // end namespace
#endif
m_clearColour = 0;
m_format = RENDER_FMT_NONE;
m_processor = NULL;
+ m_neededBuffers = 0;
}
CWinRenderer::~CWinRenderer()
// clear colour for "black" bars
DWORD m_clearColour;
- ERenderFormat m_format;
unsigned int m_extended_format;
// Width and height of the render target
m_layout = 0;
m_bLpcmMode = false;
- m_bNeedConversion = false;
m_pFrame1 = NULL;
m_iSampleFormat = AV_SAMPLE_FMT_NONE;
m_pFrame1 = m_dllAvCodec.avcodec_alloc_frame();
m_bOpenedCodec = true;
m_iSampleFormat = AV_SAMPLE_FMT_NONE;
+
return true;
}
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)
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;
}
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);
}
}
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;
}
}
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;
#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>
#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:
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
+ }
};
//-----------------------------------------------------------------------------------
typedef struct am_private_t
{
am_packet_t am_pkt;
+ aml_generic_param gcodec;
codec_para_t vcodec;
pstream_type stream_type;
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;
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;
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)
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);
"OMX.Nvidia",
"OMX.rk",
"OMX.qcom",
+ "OMX.Intel",
NULL
};
for (const char **ptr = cansurfacerender_decoders; *ptr; ptr++)
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:
}
}
- ConfigureMediaCodec();
+ if (!ConfigureMediaCodec())
+ {
+ m_codec.reset();
+ SAFE_DELETE(m_bitstream);
+ return false;
+ }
// setup a YUV420P DVDVideoPicture buffer.
// first make sure all properties are reset.
}
}
-void CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
+bool CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
{
// setup a MediaFormat to match the video content,
// used by codec during configure
{
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)
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);
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)
// 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);
}
}
protected:
void FlushInternal(void);
- void ConfigureMediaCodec(void);
+ bool ConfigureMediaCodec(void);
int GetOutputPicture(void);
void OutputFormatChanged(void);
{
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;
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;
#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"
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)
RESOLVE_METHOD(mpeg2_skip)
END_METHOD_RESOLVE()
};
+#endif//STATIC_LINK
&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)
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;
m_outputSurfaces.pop();
}
m_config.context->GetProcs().vdp_video_mixer_destroy(m_videoMixer);
-
- delete [] m_BlackBar;
}
void CMixer::Flush()
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) &&
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
{
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__);
- }
}
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
{
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;
{
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();
{
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;
}
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;
#include "URL.h"
#include "guilib/Geometry.h"
#include "utils/StringUtils.h"
+#include "dialogs/GUIDialogKaiToast.h"
+#include "guilib/LocalizeStrings.h"
#define LIBBLURAY_BYTESEEK 0
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
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:
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);
/* 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))
}
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
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();
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;
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()
}
}
+bool CDVDInputStreamBluray::HasMenu()
+{
+ return m_navmode;
+}
+
#endif
extern "C"
{
#include <libbluray/bluray.h>
+#include <libbluray/bluray-version.h>
#include <libbluray/keys.h>
#include <libbluray/overlay.h>
}
}
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; }
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;
HOLD_HELD,
HOLD_DATA,
HOLD_STILL,
+ HOLD_ERROR
} m_hold;
BD_EVENT m_event;
#ifdef HAVE_LIBBLURAY_BDJ
*/
#include "DVDInputStreamFFmpeg.h"
+#include "xbmc/playlists/PlayListM3U.h"
+#include "settings/Settings.h"
+#include "Util.h"
+#include "utils/log.h"
using namespace XFILE;
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;
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
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();
#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 ))
ASS_Image* img = pOverlay->m_libass->RenderImage(width, height, pts);
+ int depth = OVERLAY::GetStereoscopicDepth();
+
while(img)
{
unsigned int color = img->color;
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++)
{
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;
}
}
-bool CDVDPlayer::CloseFile()
+bool CDVDPlayer::CloseFile(bool reopen)
{
CLog::Log(LOGNOTICE, "CDVDPlayer::CloseFile()");
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)
{
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);
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;
}
{
CDVDInputStream::IMenus* pStream = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream);
if (pStream)
- return true;
+ return pStream->HasMenu();
else
return false;
}
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)
{
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;
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)
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++;
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()
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;
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;
#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()
{
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;
}
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()
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;
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
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;
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;
}
m_extradata = NULL;
m_extrasize = 0;
- while(!m_vizqueue.empty())
- m_vizqueue.pop();
-
m_dllAvUtil.Unload();
while(!m_ampqueue.empty())
m_submitted = 0.0f;
m_maxLevel = 0.0f;
- /* dummy call to inform PiAudioAE that audo is inactive */
- CAEFactory::FreeStream(0);
-
return true;
}
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)
{
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);
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);
void COMXAudio::RegisterAudioCallback(IAudioCallback *pCallback)
{
+ CSingleLock lock (m_critSection);
if(!m_Passthrough && !m_HWDecode)
{
m_pCallback = pCallback;
void COMXAudio::UnRegisterAudioCallback()
{
+ CSingleLock lock (m_critSection);
m_pCallback = NULL;
}
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);
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;
height = max_height;
clamped = true;
}
- // Texture.cpp wants even width/height
- width = (width + 15) & ~15;
- height = (height + 15) & ~15;
return clamped;
}
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;
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
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;
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;
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;
-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
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)
{
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;
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;
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;
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();
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;
}
}
-bool COMXPlayer::CloseFile()
+bool COMXPlayer::CloseFile(bool reopen)
{
CLog::Log(LOGDEBUG, "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
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)
{
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);
|| 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))
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);
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;
/* 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;
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;
}
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())
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++;
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()
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);
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
{
// 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();
m_bAllowFullscreen = false; // only allow on first configure
}
- flags |= GetStereoModeFlags(m_hints.stereo_mode);
+ flags |= GetStereoModeFlags(GetStereoMode());
if(flags & CONF_FLAGS_STEREO_MODE_SBS)
{
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;
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;
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);
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",
<defaultplayer>omxplayer</defaultplayer>
<defaultdvdplayer>omxplayer</defaultdvdplayer>
</video>
- <audio>
- <defaultplayer>omxplayer</defaultplayer>
- <streamsilence>false</streamsilence>
- </audio>
</advancedsettings>
*/
#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;
};
#endif
else if (strFileType.Equals("tta"))
return new DVDPlayerCodec();
+ else if (strFileType.Equals("tak"))
+ return new DVDPlayerCodec();
return NULL;
}
*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)
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;
}
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)
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;
}
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)
{
}
}
-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)
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;
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;
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);
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;
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)
{
m_openCount = 0;
m_sqlite = true;
m_bMultiWrite = false;
+ m_multipleExecute = false;
}
CDatabase::~CDatabase(void)
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 = "";
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
}
m_openCount = 0;
+ m_multipleExecute = false;
if (NULL == m_pDB.get() ) return ;
if (NULL != m_pDS.get()) m_pDS->close();
void RollbackTransaction();
bool InTransaction();
- static CStdString FormatSQL(CStdString strStmt, ...);
CStdString PrepareSQL(CStdString strStmt, ...) const;
/*!
/*!
* @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);
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.
*/
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;
};
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())
{
if (val->isString() && !val->asString().empty())
m_parameter.push_back(val->asString());
}
+ if (m_parameter.empty())
+ m_parameter.push_back("");
}
else
return false;
m_parameter.assign(values.begin(), values.end());
}
+CStdString CDatabaseQueryRule::ValidateParameter(const CStdString ¶meter) 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 ¶m, const CDatabase &db, const CStdString &strType) const
{
CStdString parameter;
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)
{
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))
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 ¶meter) 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 ¶m,
const CDatabase &db, const CStdString &type) const;
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)
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);
}
// 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);
}
// 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";
}
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;
CONTEXT_BUTTON_SET_MOVIESET_ART,
CONTEXT_BUTTON_BEGIN,
CONTEXT_BUTTON_END,
+ CONTEXT_BUTTON_NOW,
CONTEXT_BUTTON_FIND,
CONTEXT_BUTTON_DELETE_PLUGIN,
CONTEXT_BUTTON_SORTASC,
// \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
// \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
// \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 = "";
// \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)
// \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
// \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;
// \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
}
// sort the items
- items.Sort(SortByLabel, SortOrderAscending);
+ items.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle);
CGUIDialogSelect* pDialog = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
pDialog->Reset();
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)
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)
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)
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;
{
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;
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())
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);
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)
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) "
}
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) "
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());
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;
case ACTION_MOVE_RIGHT:
case ACTION_MOVE_DOWN:
case ACTION_MOVE_UP:
+ case ACTION_NAV_BACK:
{ // use base class implementation
return CGUIControl::OnAction(action);
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;
SetBlock(GetBlock(m_item->item, m_channelCursor));
SetInvalid();
+ GoToNow();
}
void CGUIEPGGridContainer::ChannelScroll(int amount)
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
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);
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
{
void GoToBegin();
void GoToEnd();
+ void GoToNow();
void SetStartEnd(CDateTime start, CDateTime end);
void SetChannel(const PVR::CPVRChannel &channel);
void SetChannel(const CStdString &channel);
#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;
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;
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));
}
#endif
-CStdString URLEncode(CStdString str);
-
class CAfpConnection : public CCriticalSection
{
public:
* <http://www.gnu.org/licenses/>.
*
*/
-
+#include "system.h"
+#ifdef HAVE_LIBBLURAY
#include "BlurayDirectory.h"
#include "utils/log.h"
#include "utils/URIUtils.h"
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)
} /* namespace XFILE */
+#endif
\ No newline at end of file
/* 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.
if(it != array.begin())
filename += "/";
- partial = *it;
- CURL::Encode(partial);
- filename += partial;
+ filename += CURL::Encode(*it);
}
/* make sure we keep slashes */
m_seekable = false;
else if (name.Equals("Accept-Charset"))
SetAcceptCharset(value);
+ else if (name.Equals("HttpProxy"))
+ SetStreamProxy(value, PROXY_HTTP);
else
SetRequestHeader(name, value);
}
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;
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; }
{
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)
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);
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)
{
#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() );
}
#endif
+#if defined(TARGET_WINDOWS)
+struct __stat64;
+#define NFSSTAT struct __stat64
+#else
+#define NFSSTAT struct stat
+#endif
+
class DllLibNfsInterface
{
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;
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))
{
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")
#include "Util.h"
#include "URL.h"
#include "utils/StringUtils.h"
-#include "settings/AdvancedSettings.h"
#include "commons/Exception.h"
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;
{
public:
CFile();
- virtual ~CFile();
+ ~CFile();
bool Open(const CStdString& strFileName, const unsigned int flags = 0);
bool OpenForWrite(const CStdString& strFileName, bool bOverWrite = false);
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];
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];
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];
IFile* CFileFactory::CreateLoader(const CURL& url)
{
- CWakeOnAccess::Get().WakeUpHost(url);
+ if (!CWakeOnAccess::Get().WakeUpHost(url))
+ return NULL;
CStdString strProtocol = url.GetProtocol();
StringUtils::ToLower(strProtocol);
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() )
{
#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() );
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);
{
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 "";
}
// 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;
}
// 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;
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 += "/";
}
if (!musicDatabase.GetSong(idSong, song))
return "";
+ StringUtils::ToLower(strExtension);
if (!URIUtils::HasExtension(song.strFileName, strExtension))
return "";
if(ret == 0)
{
- struct stat tmpBuffer = {0};
+ NFSSTAT tmpBuffer = {0};
fullpath = dirName;
URIUtils::AddSlashAtEnd(fullpath);
fullpath.append(resolvedLink);
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)
#include "system.h"
#ifdef HAS_FILESYSTEM_NFS
-#include "DllLibNfs.h"
#include "NFSFile.h"
#include "threads/SingleLock.h"
#include "utils/log.h"
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;
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 = "";
//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;
}
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;
return -1;
- struct stat tmpBuffer = {0};
+ NFSSTAT tmpBuffer = {0};
ret = gNfsConnection.GetImpl()->nfs_stat(gNfsConnection.GetNfsContext(), filename.c_str(), &tmpBuffer);
{
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;
buffer->st_atime = tmpBuffer.st_atime;
buffer->st_mtime = tmpBuffer.st_mtime;
buffer->st_ctime = tmpBuffer.st_ctime;
+#endif
}
}
return ret;
#include <list>
#include "SectionLoader.h"
#include <map>
+#include "DllLibNfs.h" // for define NFSSTAT
#ifdef TARGET_WINDOWS
#define S_IRGRP 0
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();
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;
// 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;
#if defined(TARGET_DARWIN)
// Create the directory.
- CURL::Decode(strMountPoint);
+ strMountPoint = CURL::Decode(strMountPoint);
CreateDirectory(strMountPoint, NULL);
// Massage the path.
{
#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;
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");
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 */
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);
{
// 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;
// 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();
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;
//*********************************************************************************************
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());
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)
{
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)) {
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
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()));
#include "DirectoryNodeGrouped.h"
#include "QueryParams.h"
#include "video/VideoDatabase.h"
+#include "video/VideoDbUrl.h"
using namespace XFILE::VIDEODATABASEDIRECTORY;
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
pItem->m_bIsFolder = true;
pItem->SetCanQueue(false);
+ pItem->SetSpecialSort(SortSpecialOnTop);
items.Add(pItem);
}
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();
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());
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);
TestDirectory.cpp \
TestFile.cpp \
TestFileFactory.cpp \
+ TestNfsFile.cpp \
TestRarFile.cpp \
TestZipFile.cpp
--- /dev/null
+/*
+ * 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));
/* 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 */
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;
}
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 )
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;
uint32_t AccessType;
uint32_t Start;
uint32_t Length;
+ uint32_t Start_Correction;
};
struct AD {
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];
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)
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)
// 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);
}
// scrolls the said amount
void CGUIBaseContainer::Scroll(int amount)
{
+ ResetAutoScrolling();
ScrollToOffset(GetOffset() + amount);
}
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)
m_wasReset = true;
m_items.clear();
m_lastItem.reset();
+ ResetAutoScrolling();
}
void CGUIBaseContainer::LoadLayout(TiXmlElement *layout)
*/
void SetRenderOffset(const CPoint &offset);
+ void SetAutoScrolling(const TiXmlNode *node);
+ void ResetAutoScrolling();
+ void UpdateAutoScrolling(unsigned int currentTime);
+
#ifdef _DEBUG
virtual void DumpTextureUse();
#endif
*/
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;
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();
}
(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))
((CGUIListContainer *)control)->SetType(viewType, viewLabel);
((CGUIListContainer *)control)->SetPageControl(pageControl);
((CGUIListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_WRAPLIST)
{
((CGUIWrappingListContainer *)control)->SetType(viewType, viewLabel);
((CGUIWrappingListContainer *)control)->SetPageControl(pageControl);
((CGUIWrappingListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIWrappingListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_EPGGRID)
{
((CGUIFixedListContainer *)control)->SetType(viewType, viewLabel);
((CGUIFixedListContainer *)control)->SetPageControl(pageControl);
((CGUIFixedListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIFixedListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_PANEL)
{
((CGUIPanelContainer *)control)->SetType(viewType, viewLabel);
((CGUIPanelContainer *)control)->SetPageControl(pageControl);
((CGUIPanelContainer *)control)->SetRenderOffset(offset);
+ ((CGUIPanelContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTROL_TEXTBOX)
{
if (infoLabels.size())
((CGUITextBox *)control)->SetInfo(infoLabels[0]);
((CGUITextBox *)control)->SetAutoScrolling(pControlNode);
+ ((CGUITextBox *)control)->SetMinHeight(minHeight);
}
else if (type == CGUIControl::GUICONTROL_SELECTBUTTON)
{
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();
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;
}
// 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;
// \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
// \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);
// \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;
label->SetSelected(selected);
label->SetScrolling(focused);
}
+ else if ((*it)->GetControlType() == CGUIControl::GUICONTROL_LISTGROUP)
+ ((CGUIListGroup *)(*it))->SetState(selected, focused);
}
}
ar >> value;
m_artFallbacks.insert(make_pair(key, value));
}
+ SetInvalid();
}
}
void CGUIListItem::Serialize(CVariant &value)
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
{
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)
m_autoScrollDelay = 3000;
m_autoScrollDelayTime = 0;
m_autoScrollRepeatAnim = NULL;
+ m_minHeight = 0;
+ m_renderHeight = height;
}
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);
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;
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();
}
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.
{
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)
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)
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);
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;
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;
// 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)
{
m_lines.clear();
m_lastText.clear();
+ m_lastUtf8Text.clear();
m_textWidth = m_textHeight = 0;
}
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;
// 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;
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();
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);
}
{
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();
}
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)
{
// 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");
}
}
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);
}
// 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)
{
void CGUIWindowManager::Remove(int id)
{
CSingleLock lock(g_graphicsContext);
+ m_idCache.Invalidate();
WindowMap::iterator it = m_mapWindows.find(id);
if (it != m_mapWindows.end())
{
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*/)
#include "IMsgTargetCallback.h"
#include "DirtyRegionTracker.h"
#include "utils/GlobalsHandling.h"
+#include "guilib/WindowIDs.h"
#include <list>
class CGUIDialog;
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;
};
/*!
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);
}
}
}
-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);
}
#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;
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
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;
\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.
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;
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);
}
-void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
+void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName, bool immediately /*= false */)
{
CSingleLock lock(g_graphicsContext);
{
//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;
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;
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"))
{
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:
#include "imagefactory.h"
#include "guilib/JpegIO.h"
#include "guilib/cximage.h"
+#include "utils/Mime.h"
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)
{
return new CXImage(strMimeType);
}
-
-IImage* ImageFactory::CreateFallbackLoader(const CURL& url)
-{
- return new CXImage("image/"+url.GetFileType());
-}
\ No newline at end of file
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
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.");
}
#else
m_bInitialized = true;
- CLog::Log(LOGINFO, "LIRC %s: sucessfully started", __FUNCTION__);
+ CLog::Log(LOGINFO, "LIRC %s: successfully started", __FUNCTION__);
#endif
}
else
{
// 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
{
// 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"));
CStdString path;
VECSOURCES shares;
g_mediaManager.GetLocalDrives(shares);
+ g_mediaManager.GetNetworkLocations(shares);
+ g_mediaManager.GetRemovableDrives(shares);
bool singleFile;
bool thumbs=false;
bool actorThumbs=false;
--- /dev/null
+/*
+ * 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);
+ }
+}
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.
-SRCS=InfoExpression.cpp \
+SRCS=InfoBool.cpp \
+ InfoExpression.cpp \
SkinVariable.cpp \
LIB=info.a
return InternalError;
CAlbum album;
- if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
+ if (!musicdatabase.GetAlbum(albumID, album, false))
return InvalidParams;
CStdString path;
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"))
if (ParameterNotNull(parameterObject, "yearsactive"))
CopyStringArray(parameterObject["yearsactive"], artist.yearsActive);
- if (musicdatabase.SetArtistInfo(id, artist) <= 0)
+ if (!musicdatabase.UpdateArtist(artist))
return InternalError;
CJSONRPCUtils::NotifyItemUpdated();
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"))
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();
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();
{
CAlbum album;
int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
- if (musicdatabase.GetAlbumInfo(albumid, album, NULL))
+ if (musicdatabase.GetAlbum(albumid, album, false))
{
item->SetFromAlbum(album);
return true;
}
}
-
- if (field == "lastmodified" && item->m_dateTime.IsValid())
- {
- result[field] = item->m_dateTime.GetAsLocalizedDateTime();
- return true;
- }
if (item->HasProperty(field))
{
\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);
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);
\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);
\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);
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[] = {
"\"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\": {"
"\"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\" }"
+ "}"
+ "}"
"}"
"}"
"}",
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);
}
}
}
"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" }
+ }
+ }
}
}
},
"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": {
// ============================================================
// ============================================================
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;
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)
/**
* 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:
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
/**
{
XBMC_TRACE;
- if (dlg)
+ if (dlg && open)
{
DelayedCallGuard dg;
dlg->Close();
throw WindowException("Error: Window is NULL, this is not possible :-)");
dlg = pDialog;
+ open = true;
pDialog->SetHeading(heading);
{
DelayedCallGuard dcguard(languageHook);
dlg->Close();
+ open = false;
}
bool DialogProgress::iscanceled()
class DialogProgress : public AddonClass
{
CGUIDialogProgress* dlg;
+ bool open;
protected:
virtual void deallocating();
public:
- DialogProgress() : dlg(NULL) {}
+ DialogProgress() : dlg(NULL), open(false) {}
virtual ~DialogProgress();
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
* 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;
}
}
}
+ 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;
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,
String ListItem::getProperty(const char* key)
{
LOCKGUI;
- CStdString lowerKey = key;
+ String lowerKey = key;
StringUtils::ToLower(lowerKey);
CStdString value;
if (lowerKey == "startoffset")
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);
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")
}
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")
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")
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());
}
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());
}
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;
}
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;
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;
std::string uAction = tuple.second();
LOCKGUI;
- CStdString property;
+ String property;
property = StringUtils::Format("contextmenulabel(%i)", itemCount);
item->SetProperty(property, uText);
#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"
{
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:
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
* 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
* 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
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)
PulseActionEvent();
std::vector<CStdString> params;
- CApplicationMessenger::Get().ActivateWindow(iOldWindowId, params, false);
+ {
+ DelayedCallGuard dcguard(languageHook);
+ CApplicationMessenger::Get().ActivateWindow(iOldWindowId, params, false);
+ }
iOldWindowId = 0;
}
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();
#endif
public:
- Window(int existingWindowId) throw (WindowException);
+ Window(int existingWindowId = -1) throw (WindowException);
virtual ~Window();
namespace xbmcgui
{
WindowDialog::WindowDialog() throw(WindowException) :
- WindowDialogMixin(this)
+ Window(true), WindowDialogMixin(this)
{
CSingleLock lock(g_graphicsContext);
setWindow(new Interceptor<CGUIWindow>("CGUIWindow",this,getNextAvailalbeWindowId()));
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;
* 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});',
'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'),
* 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});',
'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)}");')
// ---------------------------------------------------------
// 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");
#include "LanguageHook.h"
#include "swig.h"
#include "utils/StringUtils.h"
+#include "interfaces/legacy/AddonString.h"
#include <string>
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?
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);
*/
%>
<%
- 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)
*/
%>
<%
- 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 ? '->' : '.'
if (<%if (ispointer) { %>${api} != NULL && <%}%>pos != XBMCAddon::none)
{ <%
- swigTypeParser.SwigType_parmlist(vectype).eachWithIndex { curType, entryIndex ->
+ types.eachWithIndex { curType, entryIndex ->
%>
if (pos == XBMCAddon::${altSwitch[entryIndex]})
{
*/
%>
<%
-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()
{
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};
}
<%
*/
%>
<%
- 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 ? '->' : '.'
<% } // this ends the if (ispointer)
%> {
PyObject* pyentry${seq}; <%
- swigTypeParser.SwigType_parmlist(vectype).eachWithIndex { curType, entryIndex ->
+ types.eachWithIndex { curType, entryIndex ->
%>
if (vecSize > ${entryIndex})
*/
%>
<%
- matcher = type =~ /shared_ptr<\((.*)\)>/
- itype = matcher[0][1]
+ itype = swigTypeParser.SwigType_templateparmlist(type)[0]
pointertype = swigTypeParser.SwigType_makepointer(itype)
int seq = sequence.increment()
%>
*
*/
%>
+<%
+ 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;
}
}
*/
%>
<%
- 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;
}
}
*/
%>
<%
- 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;
*/
%>
<%
- 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()
%feature("python:coerceToUnicode") XBMCAddon::xbmc::getLocalizedString "true"
+%include "interfaces/legacy/AddonString.h"
%include "interfaces/legacy/ModuleXbmc.h"
%feature("director") Player;
%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"
%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"
%feature("knownapitypes") XBMCAddon::xbmcplugin "XBMCAddon::xbmcgui::ListItem"
%include "interfaces/legacy/swighelper.h"
+%include "interfaces/legacy/AddonString.h"
%include "interfaces/legacy/ModuleXbmcplugin.h"
%}
%include "interfaces/legacy/swighelper.h"
-
+%include "interfaces/legacy/AddonString.h"
%include "interfaces/legacy/File.h"
%rename ("st_atime") XBMCAddon::xbmcvfs::Stat::atime;
GenerateGDL();
- CLog::Log(LOGINFO, "HAL: Sucessfully initialized");
+ CLog::Log(LOGINFO, "HAL: Successfully initialized");
m_Notifications = true;
}
bool CRBP::Initialize()
{
+ CSingleLock lock (m_critSection);
+ if (m_initialized)
+ return true;
+
m_initialized = m_DllBcmHost->Load();
if(!m_initialized)
return false;
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;
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)
#if defined(TARGET_RASPBERRY_PI)
#include "DllBCM.h"
#include "OMXCore.h"
+#include "threads/CriticalSection.h"
class CRBP
{
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);
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;
{
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;
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);
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)
song.artistCredits.push_back(artistCredit);
}
- songArtistCreditsNode = songArtistCreditsNode->NextSiblingElement("albumArtistCredits");
+ songArtistCreditsNode = songArtistCreditsNode->NextSiblingElement("songArtistCredits");
}
XMLUtils::GetString(node, "musicBrainzTrackID", song.strMusicBrainzTrackID);
if (bIncrement)
song.iTrack = song.iTrack + 1;
- songs.push_back(song);
+ infoSongs.push_back(song);
}
node = node->NextSiblingElement("track");
}
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");
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()
{
bCompilation = false;
iTimesPlayed = 0;
songs.clear();
+ infoSongs.clear();
}
CStdString GetArtistString() const;
int iYear;
bool bCompilation;
int iTimesPlayed;
- VECSONGS songs;
+ VECSONGS songs; ///< Local songs
+ VECSONGS infoSongs; ///< Scraped songs
};
typedef std::vector<CAlbum> VECALBUMS;
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;
if (strMusicBrainzArtistID > a.strMusicBrainzArtistID) return false;
return false;
}
+
+ void MergeScrapedArtist(const CArtist& source, bool override = true);
void Reset()
{
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;
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");
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");
"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");
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");
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();
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"
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)
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,
{
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())
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;
}
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());
}
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;
}
}
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;
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;
// 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)
{
}
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());
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)
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)
{
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
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;
}
}
}
-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)
{
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;
}
}
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;
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
// 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;
// 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 (...)
// (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 (...)
{
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());
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);
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
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)
{
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();
int CMusicDatabase::GetMinVersion() const
{
- return 37;
+ return 44;
}
unsigned int CMusicDatabase::GetSongIDs(const Filter &filter, vector<pair<int,int> > &songIDs)
// 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;
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)
{
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");
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)
{
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);
return;
}
}
- pDS->next();
current++;
}
- pDS->close();
if (progress)
progress->Close();
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++;
}
while (!m_pDS->eof())
{
- CSong song = GetSongFromDataset( false );
+ CSong song = GetSongFromDataset();
CStdString songnum = StringUtils::Format("%06d", song.iKaraokeNumber);
if ( asHTML )
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()) )
{
if (idArtist > -1)
{
CArtist artist;
- if (GetArtistInfo(idArtist,artist))
+ if (GetArtist(idArtist, artist))
SetPropertiesFromArtist(item,artist);
}
int idAlbum = item.GetMusicInfoTag()->GetAlbumId();
if (idAlbum > -1)
{
CAlbum album;
- if (GetAlbumInfo(idAlbum,album,NULL,true)) // true to force additional information
+ if (GetAlbum(idAlbum, album, false))
SetPropertiesFromAlbum(item,album);
}
}
void EmptyCache();
void Clean();
int Cleanup(CGUIDialogProgress *pDlgProgress=NULL);
- void DeleteAlbumInfo();
bool LookupCDDBInfo(bool bRequery=false);
void DeleteCDDBInfo();
\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
\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)
\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
\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
/////////////////////////////////////////////////
// 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
*/
/////////////////////////////////////////////////
// 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);
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
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();
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
album_strArtists,
album_strGenres,
album_iYear,
- album_idAlbumInfo,
album_strMoods,
album_strStyles,
album_strThemes,
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,
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;
};
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();
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;
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
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));
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"));
{
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();
}
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; }
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)
continue;
}
else if (!DoScan(*it))
- cancelled = true;
- commit = !cancelled;
+ {
+ commit = false;
+ break;
+ }
}
if (commit)
{
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();
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;
{
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)
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;
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();
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();
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)
m_needsCleanup = true;
CFileItemList scannedItems;
- if (ScanTags(items, scannedItems) == INFO_CANCELLED)
+ if (ScanTags(items, scannedItems) == INFO_CANCELLED || scannedItems.Size() == 0)
return 0;
VECALBUMS albums;
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));
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());
}
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());
}
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)
{
{
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);
}
}
}
-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)
{
{
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
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
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
\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
\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
\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;
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 )
MusicInfoTagLoaderNSF.cpp \
MusicInfoTagLoaderShn.cpp \
MusicInfoTagLoaderSPC.cpp \
- MusicInfoTagLoaderWav.cpp \
MusicInfoTagLoaderYM.cpp \
TagLoaderTagLib.cpp \
TagLibVFSStream.cpp \
{
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;
#include "TagLoaderTagLib.h"
#include "MusicInfoTagLoaderCDDA.h"
#include "MusicInfoTagLoaderShn.h"
-#include "MusicInfoTagLoaderWav.h"
#ifdef HAS_MOD_PLAYER
#include "cores/ModPlayer.h"
#endif
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" ||
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();
+++ /dev/null
-/*
- * 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;
-}
-
+++ /dev/null
-#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);
-};
-}
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);
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")
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)
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") {}
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)));
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)
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")
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")
#include <taglib/s3mfile.h>
#include <taglib/trueaudiofile.h>
#include <taglib/vorbisfile.h>
+#include <taglib/wavfile.h>
#include <taglib/wavpackfile.h>
#include <taglib/xmfile.h>
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();
{
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
}
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;
{
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())
{
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)
{
}
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)
{
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;
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);
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);
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 + "/";
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);
#include <map>
#include <string>
+#define TMP_COVERART_PATH "special://temp/airtunes_album_thumb.jpg"
+
using namespace XFILE;
using namespace ANNOUNCEMENT;
#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)
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);
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();
}
}
}
CFileItem item;
item.SetPath(pipe->GetName());
item.SetMimeType("audio/x-xbmc-pcm");
+ m_streamStarted = true;
CApplicationMessenger::Get().PlayFile(item);
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)
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;
}
delete device_xbmc;
+ m_streamStarted = false;
return 0;
}
~CAirTunesServer();
bool Initialize(const CStdString &password);
void Deinitialize();
+ static void RefreshCoverArt();
+ static void RefreshMetadata();
int m_port;
#if defined(HAVE_LIBSHAIRPLAY)
#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
{
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;
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());
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
}
}
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;
}
}
if (g_application.IsCurrentThread() || !g_application.m_pPlayer->IsPlaying())
CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, heading, LOCALIZED(13029));
- return;
+ return false;
}
{
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)
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();
bool m_enabled;
- void WakeUpHost(const WakeUpEntry& server);
+ bool WakeUpHost(const WakeUpEntry& server);
};
url = "image/";
else
url = "vfs/";
- CURL::Encode(strPath);
- url += strPath;
+ url += CURL::Encode(strPath);
details["path"] = url;
return true;
}
{
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();
}
}
/*----------------------------------------------------------------------
+| 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
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())
{
class CUPnPServer;
class CFileItem;
class CThumbLoader;
+class PLT_DeviceData;
class PLT_HttpRequestContext;
class PLT_MediaItemResource;
class PLT_MediaObject;
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);
#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")
, m_control(NULL)
, m_delegate(NULL)
, m_started(false)
+, m_stopremote(false)
{
m_control = CUPnP::GetInstance()->m_MediaController;
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
, 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
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");
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 */
#include "cores/IPlayer.h"
class PLT_MediaController;
+class CGUIDialogBusy;
+
+namespace XbmcThreads { class EndTime; }
+
namespace UPNP
{
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;
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 */
",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:*"
}
// 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)) {
else
filename = URIUtils::GetFileName(file_path);
- CURL::Encode(filename);
+ filename = CURL::Encode(filename);
md5state.append(file_path);
md5state.getDigest(md5);
md5 += "/" + filename;
}
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);
}
}
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(),
iPad3,
iPad4WIFI,
iPad4,
- iPad4GSMCDMA,
+ iPad4GSMCDMA,
+ iPadAirWifi,
+ iPadAirCellular,
+ iPadMini2Wifi,
+ iPadMini2Cellular,
};
// platform strings are based on http://theiphonewiki.com/wiki/Models
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;
[_internalWindow setBackgroundColor:[UIColor blackColor]];
[_internalWindow setScreen:[UIScreen mainScreen]];
[_internalWindow makeKeyAndVisible];
+ [_internalWindow setRootViewController:self];
[self setWantsFullScreenLayout:YES];
[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)
}
}
}
+//--------------------------------------------------------------
@end
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;
@synthesize _screenIdx;
@synthesize _externalScreen;
@synthesize _glView;
+@synthesize _lastTouchControllerOrientation;
//--------------------------------------------------------------
- (void) fadeFromBlack:(CGFloat) delaySecs
[_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 ...
{
if([self willSwitchToInternal:screenIdx] && _externalTouchController != nil)
{
+ _lastTouchControllerOrientation = [_externalTouchController interfaceOrientation];
[_externalTouchController release];
_externalTouchController = nil;
}
<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>
<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>
- (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;
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)
{
}
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
bool *_canceled;
BOOL _deactivated;
UITextField *_textField;
- UILabel *_heading;
+ UITextField *_heading;
int _keyboardIsShowing; // 0: not, 1: will show, 2: showing
CGFloat _kbHeight;
}
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];
#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();
- (void)screenDidDisconnect:(NSNotification *)aNotification
{
[IOSScreenManager updateResolutions];
- //switch back to mainscreen when external screen is removed
- [[IOSScreenManager sharedInstance] screenDisconnect];
}
- (void)registerScreenNotifications:(BOOL)bRegister
}
@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];
@try
{
- retVal = UIApplicationMain(argc,argv,@"XBMCApplication",@"XBMCApplicationDelegate");
+ retVal = UIApplicationMain(argc,argv,@"UIApplication",@"XBMCApplicationDelegate");
//UIApplicationMain(argc, argv, nil, nil);
}
@catch (id theException)
- (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
}
// 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°
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;
}
//--------------------------------------------------------------
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
/* 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();
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)
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);
}
}
}
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;
/* 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
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);
}
}
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;
virtual bool FindComPort(CStdString &strLocation) { return false; }
+ virtual bool IsInitialised(void) const { return m_bInitialised; }
+
protected:
virtual void Process(void);
virtual bool ScanForDevices(void);
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();
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),
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)
{
if (!HasSetting(strKey))
{
+ PeripheralDeviceSetting deviceSetting = { NULL, order };
switch(setting->GetType())
{
case SettingTypeBool:
if (boolSetting)
{
boolSetting->SetVisible(mappedSetting->IsVisible());
- m_settings.insert(make_pair(strKey, boolSetting));
+ deviceSetting.m_setting = boolSetting;
}
}
break;
if (intSetting)
{
intSetting->SetVisible(mappedSetting->IsVisible());
- m_settings.insert(make_pair(strKey, intSetting));
+ deviceSetting.m_setting = intSetting;
}
}
break;
if (floatSetting)
{
floatSetting->SetVisible(mappedSetting->IsVisible());
- m_settings.insert(make_pair(strKey, floatSetting));
+ deviceSetting.m_setting = floatSetting;
}
}
break;
if (stringSetting)
{
stringSetting->SetVisible(mappedSetting->IsVisible());
- m_settings.insert(make_pair(strKey, stringSetting));
+ deviceSetting.m_setting = stringSetting;
}
}
break;
//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();
}
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;
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();
}
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();
}
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();
}
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();
}
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;
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;
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;
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);
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;
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);
}
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();
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);
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();
* @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.
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;
};
}
#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
m_currentButton.iButton = 0;
m_currentButton.iDuration = 0;
- m_screensaverLastActivated.SetValid(false);
+ m_standbySent.SetValid(false);
m_configuration.Clear();
}
// 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();
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)
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 */
/* 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)
iAlertString = 36027;
break;
case CEC_ALERT_CONNECTION_LOST:
+ bReopenConnection = true;
iAlertString = 36030;
break;
#if defined(CEC_ALERT_PERMISSION_ERROR)
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)
{
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();
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;
}
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;
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);
virtual void OnSettingChanged(const CStdString &strChangedSetting);
protected:
- bool m_bInitialised;
CStdString m_strKeymap;
};
}
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)
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()
// 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;
// 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)
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);
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)
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__);
// 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);
}
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))
{
}
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))
{
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/",
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"),
dialog->SetHeading(20093); // Profile name
dialog->Reset();
- dialog->SetUseDetails(true);
- dialog->EnableButton(true, 222); // Cancel
dialog->SetItems(&items);
dialog->SetSelected(autoLoginProfileId);
dialog->DoModal();
{
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 (...) {}
}
}
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)
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 "
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)
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))
{
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, "
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)
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
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)
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));
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;
// 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);
}
}
}
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;
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))
{
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;
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();
{
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);
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())
bool CPVRDatabase::ResetEPG(void)
{
- CStdString strQuery = FormatSQL("UPDATE channels SET idEpg = 0");
+ CStdString strQuery = PrepareSQL("UPDATE channels SET idEpg = 0");
return ExecuteQuery(strQuery);
}
/* 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);
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))
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) "
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) "
delete m_pendingUpdates.at(iJobPtr);
m_pendingUpdates.clear();
+ HideProgressDialog();
+
SetState(ManagerStateStopped);
}
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)
CDateTime::GetCurrentDateTime().GetAsTime(tNow);
playingChannel->SetLastWatched(tNow);
bPersistChannel = true;
+
+ m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(playingChannel->IsRadio()));
}
}
CDateTime::GetCurrentDateTime().GetAsTime(tNow);
channel->SetLastWatched(tNow);
bPersistChannel = true;
+
+ m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(channel->IsRadio()));
}
m_addons->CloseStream();
time_t tNow;
CDateTime::GetCurrentDateTime().GetAsTime(tNow);
currentChannel->SetLastWatched(tNow);
+
+ m_channelGroups->SetLastPlayedGroup(GetPlayingGroup(currentChannel->IsRadio()));
}
// store channel settings
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);
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)
#include "threads/Event.h"
#include "threads/Thread.h"
#include "utils/JobManager.h"
+#include "utils/Observer.h"
class CGUIDialogProgressBarHandle;
class CStopWatch;
typedef boost::shared_ptr<PVR::CPVRChannelGroup> CPVRChannelGroupPtr;
- class CPVRManager : public ISettingCallback, private CThread
+ class CPVRManager : public ISettingCallback, private CThread, public Observable
{
friend class CPVRClients;
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;
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;
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();
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;
* @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);
*/
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;
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.
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
CPVRChannelGroupInternal::~CPVRChannelGroupInternal(void)
{
Unload();
+ g_PVRManager.UnregisterObserver(this);
}
bool CPVRChannelGroupInternal::Load(void)
if (CPVRChannelGroup::Load())
{
UpdateChannelPaths();
- g_PVRManager.TriggerEpgsCreate();
+ g_PVRManager.RegisterObserver(this);
+
return true;
}
return true;
}
+
+void CPVRChannelGroupInternal::Notify(const Observable &obs, const ObservableMessage msg)
+{
+ if (msg == ObservableMessageManagerStateChanged)
+ {
+ g_PVRManager.TriggerEpgsCreate();
+ }
+}
*/
#include "PVRChannelGroup.h"
+#include "utils/Observer.h"
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;
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.
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;
+}
*/
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.
CCriticalSection m_critSection;
bool m_bUpdateChannelsOnly;
bool m_bIsUpdating;
+ CPVRChannelGroupPtr m_lastPlayedGroups[2]; /*!< used to store the last played groups */
};
}
{
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;
{
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")
#include "utils/log.h"
#include "threads/SingleLock.h"
#include "video/VideoDatabase.h"
+#include "settings/Settings.h"
#include "utils/URIUtils.h"
#include "utils/StringUtils.h"
#include "pvr/PVRManager.h"
#include "pvr/addons/PVRClients.h"
#include "PVRRecordings.h"
-#include "utils/StringUtils.h"
using namespace PVR;
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));
}
}
}
-void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList *results, bool bAutoSkip /* = true */)
+void CPVRRecordings::GetSubDirectories(const CStdString &strBase, CFileItemList *results)
{
CStdString strUseBase = TrimSlashes(strBase);
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());
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;
}
}
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)
if (StringUtils::StartsWith(strFileName, "recordings"))
{
strFileName.erase(0, 10);
- GetSubDirectories(strFileName, &items, true);
+ GetSubDirectories(strFileName, &items);
bSuccess = true;
}
}
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);
#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"
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())
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);
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 */
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"))
/* 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;
{
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")
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();
}
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)
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)
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
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())
{
}
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 */
OnContextButtonStopRecord(pItem.get(), button) ||
OnContextButtonBegin(pItem.get(), button) ||
OnContextButtonEnd(pItem.get(), button) ||
+ OnContextButtonNow(pItem.get(), button) ||
CGUIWindowPVRCommon::OnContextButton(itemNumber, button);
}
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
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));
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)
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;
if (button == CONTEXT_BUTTON_PLAY_ITEM)
{
- bReturn = PlayEpgItem(item);
+ bReturn = ActionPlayEpg(item);
}
return bReturn;
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);
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);
}
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);
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);
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
{
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;
}
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)));
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)
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);
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);
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)
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);
}
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);
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);
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);
}
void CGUIWindowTestPatternGL::BeginRender()
{
glDisable(GL_TEXTURE_2D);
+ glDisable(GL_BLEND);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
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 */
m_iPVRTimeCorrection = 0;
m_iPVRInfoToggleInterval = 3000;
- m_bPVRShowEpgInfoOnEpgItemSelect = false;
m_iPVRMinVideoCacheLevel = 5;
m_iPVRMinAudioCacheLevel = 10;
m_bPVRCacheInDvdPlayer = true;
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";
{
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);
/* 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) */
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");
#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;
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()
int m_bounceDirectionX;
int m_bounceDirectionY;
int m_blinkFrame;
+
+ float m_white;
+ float m_black;
};
#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)
{
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()
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;
}
bool CAndroidStorageProvider::PumpDriveChangeEvents(IStorageEventsCallback *callback)
{
- return false;
+ VECSOURCES drives;
+ GetRemovableDrives(drives);
+ bool changed = drives.size() != m_removableLength;
+ m_removableLength = drives.size();
+ return changed;
}
class CAndroidStorageProvider : public IStorageProvider
{
public:
- CAndroidStorageProvider() { }
+ CAndroidStorageProvider();
virtual ~CAndroidStorageProvider() { }
virtual void Initialize() { }
virtual std::vector<CStdString> GetDiskUsage();
virtual bool PumpDriveChangeEvents(IStorageEventsCallback *callback);
+
+private:
+ std::string unescape(const std::string& str);
+ unsigned int m_removableLength;
};
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;
}
}
m_isFileSystem = false;
m_isSystemInternal = false;
m_isOptical = false;
- m_PartitionSizeGiB = 0.0f;
+ m_PartitionSize = 0;
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();
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;
}
}
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)
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
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)
else
userMaxPrio = 0;
+ if (geteuid() == 0)
+ userMaxPrio = GetMaxPriority();
+
// keep priority in bounds
int prio = iPriority;
if (prio >= GetMaxPriority())
void aml_permissions()
{
+ if (!aml_present())
+ return;
+
// most all aml devices are already rooted.
int ret = system("ls /system/xbin/su");
if (ret != 0)
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)
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)
CArchive& CArchive::operator>>(CVariant& variant)
{
- size_t type;
+ int type;
*this >> type;
variant = CVariant((CVariant::VariantType)type);
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);
// 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);
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))
Utf32ToUtf8,
Utf32ToW,
WToUtf32,
- SubtitleCharsetToW,
+ SubtitleCharsetToUtf8,
Utf8ToUserCharset,
UserCharsetToUtf8,
Utf32ToUserCharset,
Utf16LEtoUtf8,
Utf8toW,
Utf8ToSystem,
+ SystemToUtf8,
Ucs2CharsetToUtf8,
NumberOfStdConversionTypes /* Dummy sentinel entry */
};
/* 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),
/* 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)
};
void CCharsetConverter::resetSystemCharset(void)
{
CInnerConverter::m_stdConversion[Utf8ToSystem].Reset();
+ CInnerConverter::m_stdConversion[SystemToUtf8].Reset();
}
void CCharsetConverter::resetUserCharset(void)
void CCharsetConverter::resetSubtitleCharset(void)
{
- CInnerConverter::m_stdConversion[SubtitleCharsetToW].Reset();
+ CInnerConverter::m_stdConversion[SubtitleCharsetToUtf8].Reset();
}
void CCharsetConverter::resetKaraokeCharset(void)
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,
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
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)
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();
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);
#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)
{
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);
+}
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);
/**
*/
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;
};
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()))
{
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)
{
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://"))
return total_read;
}
-
* <http://www.gnu.org/licenses/>.
*
*/
+#include <string>
#include "FileItem.h"
class CFileUtils
#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;
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*/)
{
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
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()
m_params.clear();
m_protoLine.clear();
m_headerdone = false;
+ m_lastHeaderLine.clear();
}
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;
};
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);
}
{ 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" },
SRCS += XBMCTinyXML.cpp
SRCS += XMLUtils.cpp
SRCS += Utf8Utils.cpp
+SRCS += XSLTUtils.cpp
SRCS += ActorProtocol.cpp
ifeq (@USE_OPENGLES@,1)
#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;
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;
+}
#include <string>
#include <map>
+class CURL;
+
class CFileItem;
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;
ObservableMessageTimersReset,
ObservableMessageRecordings,
ObservableMessagePeripheralsChanged,
+ ObservableMessageManagerStateChanged
} ObservableMessage;
class Observer
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;
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;
}
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();
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();
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;
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;
/*
- * 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
#include "log.h"
#include "CharsetConverter.h"
#include "utils/StringUtils.h"
-
+#include "utils/XSLTUtils.h"
#include <sstream>
#include <cstring>
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();
}
}
+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
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);
}
}
}
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];
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();
}
#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
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);
#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>
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())
{
{
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
{
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());
#include "StreamDetails.h"
#include "StreamUtils.h"
#include "Variant.h"
+#include "LangInfo.h"
+#include "utils/LangCodeExpander.h"
const float VIDEOASPECT_EPSILON = 0.025f;
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)
else if (iWidth <= 1920 && iHeight <= 1080)
return "1080";
// 4K
- else
+ else if (iWidth * iHeight >= 6000000)
return "4K";
+ else
+ return "";
}
CStdString CStreamDetails::VideoAspectToAspectDescription(float fAspect)
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;
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)
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);
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);
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");
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);
\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;
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 } };
CStdString GetUnameVersion();
#endif
#if defined(TARGET_WINDOWS)
- CStdString CSysInfo::GetUAWindowsVersion();
+ CStdString GetUAWindowsVersion();
#endif
CStdString GetUserAgent();
bool HasInternet();
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);
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;
}
}
}
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, "/");
#if 0 // options are not used
strBuffer = strCachePath;
- CURL::Encode(strBuffer);
+ strBuffer = CURL::Encode(strBuffer);
strUrlPath += "?cache=";
strUrlPath += strBuffer;
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);
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);
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)
{
strStringValue = pNode->Value();
if (encoded && strcasecmp(encoded,"yes") == 0)
- CURL::Decode(strStringValue);
+ strStringValue = CURL::Decode(strStringValue);
return true;
}
strStringValue.clear();
--- /dev/null
+/*
+ * 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;
+}
--- /dev/null
+#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;
+};
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)
{
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());
}
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;
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();
}
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();
}
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();
}
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));
}
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);
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());
}
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();
{
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();
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) "
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(),
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)
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);
}
}
- 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)
{
XMLUtils::GetInt(root, "version", iVersion);
CLog::Log(LOGDEBUG, "%s: Starting import (export version = %i)", __FUNCTION__, iVersion);
- BeginTransaction();
TiXmlElement *movie = root->FirstChildElement();
int current = 0;
if (progress->IsCanceled())
{
progress->Close();
- RollbackTransaction();
return;
}
}
}
-
- CommitTransaction();
}
catch (...)
{
CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
- RollbackTransaction();
}
if (progress)
progress->Close();
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()));
}
// 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)
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());
}
}
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;
// 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))
{
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;
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);
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;
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;
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() &&
#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"
#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)
*/
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();
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)
{
std::string status;
CFileItemList subs;
{
- CSingleLock lock(m_section);
+ CSingleLock lock(m_critsection);
status = m_status;
subs.Assign(*m_subtitles);
}
return CFileItemPtr();
}
-void CGUIDialogSubtitles::Search()
+void CGUIDialogSubtitles::Search(const std::string &search/*=""*/)
{
if (m_currentService.empty())
return; // no services available
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)
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);
void CGUIDialogSubtitles::OnSearchComplete(const CFileItemList *items)
{
- CSingleLock lock(m_section);
+ CSingleLock lock(m_critsection);
m_subtitles->Assign(*items);
UpdateStatus(SEARCH_COMPLETE);
m_updateSubsList = true;
void CGUIDialogSubtitles::UpdateStatus(STATUS status)
{
- CSingleLock lock(m_section);
+ CSingleLock lock(m_critsection);
std::string label;
switch (status)
{
{
CGUIMessage msg(GUI_MSG_LABEL_RESET, GetID(), CONTROL_SUBLIST);
OnMessage(msg);
- CSingleLock lock(m_section);
+ CSingleLock lock(m_critsection);
m_subtitles->Clear();
}
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);
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
};
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)
{
{
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
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;
}
OnInfo(itemNumber);
return true;
+ case CONTEXT_BUTTON_STOP_SCANNING:
+ {
+ g_application.StopVideoScan();
+ return true;
+ }
+
case CONTEXT_BUTTON_SCAN:
{
if( !item)
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 ||
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);
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)
{
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;
}
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)
#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"
" 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)
{
}
}
-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;
#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;
}
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();
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);
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
}
--- /dev/null
+
+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
--- /dev/null
+<?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
--- /dev/null
+<?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
#define _SHADER_H_
#include <vector>
-#include "d3dx9.h"
+#include <d3dx9.h>
#include "Renderer.h"
enum EShaderType
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
{
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 )
g_currPresetId = GetRandomPreset();
}
}
- else if ( CSettings::Get().RandomPresetsEnabled )
+ else if ( GetUserSettings().RandomPresetsEnabled )
{
g_currPresetId = GetRandomPreset();
}
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;
}
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];
case STATE_RENDER_PRESET:
{
// OutputDebugString("STATE = STATE_RENDER_PRESET\n");
- if ( !CSettings::Get().PresetLocked )
+ if ( !GetUserSettings().PresetLocked )
{
g_mainCounter -= g_timePass;
}
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 )
}
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 ) );
// 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;
// Renderer::Rect( -1.0, -1.0, 1.0, 1.0, 0xff000000 );
/*
- if ( CSettings::Get().ShowAudioAnalysis )
+ if ( GetUserSettings().ShowAudioAnalysis )
{
FLOAT BAR_WIDTH = 1.0f / 128;
/ *
}
*/
- 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 );
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 );
Vortex* g_Vortex = NULL;
// settings vector
-StructSetting** g_structSettings;
+//StructSetting** g_structSettings;
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 )
}
}
-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 );
}
//-----------------------------------------------------------------------------
extern "C" void ADDON_Destroy()
{
- Stop();
+ ADDON_Stop();
}
//-- HasSettings --------------------------------------------------------------
{
userSettings.ShowAudioAnalysis = *(bool*)value == 1;
}
+ else if (strcmpi(id, "LockPreset") == 0)
+ {
+ userSettings.PresetLocked = *(bool*)value == 1;
+ }
else
return ADDON_STATUS_UNKNOWN;
//
#include "as_atomic.h"
+#include "threads/Atomics.h"
BEGIN_AS_NAMESPACE
}
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)
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;
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
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"
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;
#include "guilib/gui3d.h"
#include "linux/DllBCM.h"
#include "utils/StringUtils.h"
+#include "settings/Settings.h"
#ifndef __VIDEOCORE4__
#define __VIDEOCORE4__
}
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)
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);
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);
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);
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);
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
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
}
}
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;
/*! \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
AddRecentlyAddedJobs(updateRA);
else
m_updateRA |= updateRA;
-
- return true;
}
break;