diff options
63 files changed, 1631 insertions, 842 deletions
diff --git a/addons/skin.confluence/720p/DialogPVRGuideSearch.xml b/addons/skin.confluence/720p/DialogPVRGuideSearch.xml index c215575f1e..dedb182d10 100644 --- a/addons/skin.confluence/720p/DialogPVRGuideSearch.xml +++ b/addons/skin.confluence/720p/DialogPVRGuideSearch.xml @@ -416,7 +416,7 @@ <align>center</align> <aligny>center</aligny> <font>font12_title</font> - <label>409</label> + <label>10035</label> <onleft>26</onleft> <onright>25</onright> <onup>24</onup> diff --git a/addons/skin.confluence/720p/DialogSubtitles.xml b/addons/skin.confluence/720p/DialogSubtitles.xml index f63dd19f2d..2124b24196 100644 --- a/addons/skin.confluence/720p/DialogSubtitles.xml +++ b/addons/skin.confluence/720p/DialogSubtitles.xml @@ -284,27 +284,25 @@ </control> <control type="group" id="130"> <control type="grouplist"> - <left>20</left> - <top>660</top> - <width>305</width> - <height>40</height> - <align>right</align> + <left>50</left> + <top>659</top> + <width>605</width> + <height>30</height> <orientation>horizontal</orientation> <itemgap>5</itemgap> <control type="image"> - <width>40</width> - <height>40</height> + <width>30</width> + <height>30</height> <texture>DefaultIconInfo.png</texture> </control> <control type="label"> <description>notification</description> - <width min="10" max="260">auto</width> - <height>40</height> + <width min="10" max="560">auto</width> + <height>30</height> <font>font13</font> <textcolor>white</textcolor> - <label>31413</label> + <label>$LOCALIZE[31413]</label> <aligny>center</aligny> - <wrapmultiline>true</wrapmultiline> </control> </control> </control> diff --git a/configure.in b/configure.in index 42dd00e706..7390167cdd 100644 --- a/configure.in +++ b/configure.in @@ -625,24 +625,22 @@ case $host in use_sdl=no use_x11=no build_shared_lib=yes - ;; + ;; 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 + use_static_ffmpeg=yes ;; 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 + use_static_ffmpeg=yes ;; i386-*-freebsd*) ARCH="x86-freebsd" @@ -698,6 +696,7 @@ case $host in use_sdl=no use_x11=no use_wayland=no + use_static_ffmpeg=yes ;; arm*-*linux-android*) target_platform=target_android @@ -875,9 +874,8 @@ elif test "$use_arch" = "arm"; then fi fi fi -if test "$target_platform" = "target_linux"; then +if test "$use_static_ffmpeg" = "yes"; 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 @@ -2804,7 +2802,6 @@ XB_CONFIG_MODULE([lib/ffmpeg], [ LDFLAGS="$(echo "$LDFLAGS" | sed "s/-Wl,-Bsymbolic-functions//g")" \ ./configure \ --extra-cflags="$PASSED_CFLAGS $FFMPEG_EXTRACFLAGS" \ - --disable-static \ `if test "$use_debug" = "no"; then echo --disable-debug; fi` \ `if test "$cross_compiling" = "yes"; then echo --enable-cross-compile; fi` \ `if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\ @@ -2828,7 +2825,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [ --disable-ffserver \ --disable-ffmpeg \ --disable-crystalhd \ - `if test "$use_static_ffmpeg" = "yes"; then echo --enable-static; else echo --enable-shared; fi` \ + `if test "$use_static_ffmpeg" = "yes"; then echo --enable-static --disable-shared; else echo --disable-static --enable-shared; fi` \ --disable-doc \ --enable-postproc \ --enable-gpl \ diff --git a/language/English/strings.po b/language/English/strings.po index ba434d9729..413e6a508e 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -1282,7 +1282,7 @@ msgid "Original stream's language" msgstr "" msgctxt "#309" -msgid "User Interface language" +msgid "User interface language" msgstr "" #empty strings from id 310 to 311 @@ -5646,7 +5646,7 @@ msgid "Scan for new content" msgstr "" msgctxt "#13350" -msgid "Now playing..." +msgid "Current playlist" msgstr "" msgctxt "#13351" @@ -5992,87 +5992,101 @@ msgctxt "#13438" msgid "Allow hardware acceleration (amcodec)" msgstr "" +#: system/settings/settings.xml msgctxt "#13439" msgid "Allow hardware acceleration (MediaCodec)" msgstr "" +#: system/settings/settings.xml msgctxt "#13440" -msgid "Allow frame-multi-threaded decoding" +msgid "Allow multi threaded software decoding" msgstr "" -#. Description of Mpeg-2 Codec for VDPAU #: system/settings/settings.xml msgctxt "#13441" msgid "Use Mpeg-2 VDPAU" msgstr "" -#. Description of setting #13441 'Use Mpeg-2 VDPAU' +#. Description of setting "Videos -> Playback -> Use Mpeg-2 VDPAU" with label #13441 #: system/settings/settings.xml msgctxt "#13442" msgid "Enable this option to use hardware acceleration for Mpeg-(1/2) codecs. If disabled the CPU will be used instead. Older Radeon Cards tend to segfault with this enabled." msgstr "" -#. Description of Mpeg-4 Codec for VDPAU #: system/settings/settings.xml msgctxt "#13443" msgid "Use Mpeg-4 VDPAU" msgstr "" -#. Description of setting #13443 'Use Mpeg-4 VDPAU' +#. Description of setting "Videos -> Playback -> Use Mpeg-4 VDPAU" with label #13443 #: system/settings/settings.xml msgctxt "#13444" msgid "Enable this option to use hardware acceleration for the Mpeg-4 codec. If disabled the CPU will be used instead. Some ION Hardware has problems with this being enabled by default." msgstr "" -#. Description of VC-1 Codec for VDPAU #: system/settings/settings.xml msgctxt "#13445" msgid "Use VC-1 VDPAU" msgstr "" -#. Description of setting #13445 'Use VC-1 VDPAU' +#. Description of setting "Videos -> Playback -> Use VC-1 VDPAU" with label #13445 #: system/settings/settings.xml msgctxt "#13446" msgid "Enable this option to use hardware acceleration for VC-1 based codecs. If disabled the CPU will be used instead. AMD Hardware with VDPAU cannot decode VC-1 Simple." msgstr "" -#. Description of Mpeg-2 Codec for VAAPI #: system/settings/settings.xml msgctxt "#13447" msgid "Use Mpeg-2 VAAPI" msgstr "" -#. Description of setting #13447 'Use Mpeg-2 VAAPI' +#. Description of setting "Videos -> Playback -> Use Mpeg-2 VAAPI" with label #13447 #: system/settings/settings.xml msgctxt "#13448" msgid "Enable this option to use hardware acceleration for Mpeg-(1/2) codecs. If disabled the CPU will be used instead. Some Mpeg-2 Videos might have green artifacts." msgstr "" -#. Description of Mpeg-4 Codec for VAAPI #: system/settings/settings.xm msgctxt "#13449" msgid "Use Mpeg-4 VAAPI" msgstr "" -#. Description of setting #13449 'Use Mpeg-4 VAAPI' +#. Description of setting "Videos -> Playback -> Use Mpeg-4 VAAPI" with label #13449 #: system/settings/settings.xml msgctxt "#13450" msgid "Enable this option to use hardware acceleration for the Mpeg-4 codec. If disabled the CPU will be used instead." msgstr "" -#. Description of VC-1 Codec for VAAPI #: system/settings/settings.xm msgctxt "#13451" msgid "Use VC-1 VAAPI" msgstr "" -#. Description of setting #13451 'Use VC-1 VAAPI' +#. Description of setting "Videos -> Playback -> Use VC-1 VAAPI" with label #13451 #: system/settings/settings.xml msgctxt "#13452" msgid "Enable this option to use hardware acceleration for VC-1 based codecs. If disabled the CPU will be used instead. Especially VC-1 Interlaced fails hard on Intel hardware." msgstr "" -#empty strings from id 13453 to 13499 +#. Label for a setting to configure the video decoding method +#: system/settings/settings.xml +msgctxt "#13454" +msgid "Decoding method" +msgstr "" + +#. Option for video related setting #13454: Decoding method +#: system/settings/settings.xml +msgctxt "#13455" +msgid "Software" +msgstr "" + +#. Option for video related setting #13454: Decoding method +#: system/settings/settings.xml +msgctxt "#13456" +msgid "Hardware accelerated" +msgstr "" + +#empty strings from id 13457 to 13499 #: system/settings/settings.xml msgctxt "#13500" @@ -6347,12 +6361,12 @@ msgstr "" #: system/settings/settings.xml msgctxt "#14027" -msgid "Local Network" +msgid "Video cache - Local Network" msgstr "" #: system/settings/settings.xml msgctxt "#14028" -msgid "Internet" +msgid "Video cache - Internet" msgstr "" #empty string with id 14029 @@ -6364,12 +6378,12 @@ msgstr "" #: system/settings/settings.xml msgctxt "#14031" -msgid "Local Network" +msgid "Audio cache - Local Network" msgstr "" #: system/settings/settings.xml msgctxt "#14032" -msgid "Internet" +msgid "Audio cache - Internet" msgstr "" #empty string with id 14033 @@ -6389,7 +6403,10 @@ msgctxt "#14036" msgid "Services" msgstr "" -#empty string with id 14037 +#: system/settings/settings.xml +msgctxt "#14037" +msgid "DVD cache - Local Network" +msgstr "" msgctxt "#14038" msgid "Network settings changed" @@ -6667,7 +6684,13 @@ msgctxt "#14100" msgid "Stop ripping CD" msgstr "" -#empty strings from id 14101 to 15011 +#. Name of a settings category related to video playback +#: system/settings/settings.xml +msgctxt "#14101" +msgid "Acceleration" +msgstr "" + +#empty strings from id 14102 to 15011 #: xbmc/video/VideoDatabase.cpp msgctxt "#15012" @@ -8169,7 +8192,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#19221" -msgid "Synchronise channel groups with backends" +msgid "Synchronise channel groups with backend(s)" msgstr "" msgctxt "#19222" @@ -9750,6 +9773,7 @@ msgctxt "#20220" msgid "Override song tags with online information" msgstr "" +#. Description of setting "Music -> Library -> Override song tags with online information" with label #20220 #: 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." @@ -9938,7 +9962,7 @@ msgid "This will reset the calibration values for %s" msgstr "" msgctxt "#20327" -msgid "to it's default values." +msgid "to its default values." msgstr "" msgctxt "#20328" @@ -10184,11 +10208,6 @@ msgctxt "#20381" msgid "Specials" msgstr "" -#: system/settings/settings.xml -msgctxt "#20382" -msgid "Automatically grab season thumbs" -msgstr "" - msgctxt "#20383" msgid "Selected folder contains a single video" msgstr "" @@ -10321,7 +10340,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#20412" -msgid "Flatten TV shows" +msgid "Flatten TV show seasons" msgstr "" msgctxt "#20413" @@ -10675,7 +10694,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#21369" -msgid "Enable mouse and Touch Screen support" +msgid "Enable mouse and touch screen support" msgstr "" msgctxt "#21370" @@ -11075,7 +11094,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#21460" -msgid "Subtitle location on screen" +msgid "Subtitle position on screen" msgstr "" #: system/settings/settings.xml @@ -11123,17 +11142,7 @@ msgctxt "#21469" msgid "%s to %s" msgstr "" -#empty strings from id 21470 to 21599 - -#: xbmc/cores/dvdplayer/DVDPlayer.cpp -msgctxt "#21600" -msgid "Prefer external subtitles" -msgstr "" - -#: system/settings/settings.xml -msgctxt "#21601" -msgid "Prefer external subtitles to internal ones" -msgstr "" +#empty strings from id 21470 to 21601 #: xbmc/Util.cpp msgctxt "#21602" @@ -11832,12 +11841,19 @@ msgctxt "#24022" msgid "Enable" msgstr "" +#. Defines the state of the add-on in the add-on manager window #: xbmc/filesystem/AddonsDirectory.cpp msgctxt "#24023" +msgid "Disabled" +msgstr "" + +#. Used as an error message (triggered from content dialog) on disabled scrapers +#: xbmc/settings/dialogs/GUIDialogContentSettings.cpp +msgctxt "#24024" msgid "Add-on disabled" msgstr "" -#empty strings from id 24024 to 24026 +#empty strings from id 24025 to 24026 #: xbmc/addons/addon.cpp msgctxt "#24027" @@ -12143,9 +12159,10 @@ msgctxt "#24105" msgid "Pause when searching for subtitles" msgstr "" +#. Description of setting "Videos -> Subtitles -> Save subtitles to movie folder" with label #24115 #: system/settings/settings.xml msgctxt "#24106" -msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder" +msgid "Specify where downloaded subtitles should be saved, the same location as the video or a custom location." msgstr "" #: xbmc/dialogs/GUIDialogSubtitles.cpp @@ -12173,6 +12190,7 @@ msgctxt "#24111" msgid "Languages to download subtitles for" msgstr "" +#. Description of setting "Videos -> Subtitles -> Languages to download subtitles for" with label #24111 #: system/settings/settings.xml msgctxt "#24112" msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages." @@ -12190,7 +12208,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#24115" -msgid "Save subtitles to movie folder" +msgid "Subtitle storage location" msgstr "" #: system/settings/settings.xml @@ -12198,9 +12216,10 @@ msgctxt "#24116" msgid "Default TV Service" msgstr "" +#. Description of setting "Videos -> Subtitles -> Default TV Service" with label #24116 #: system/settings/settings.xml msgctxt "#24117" -msgid "Select service that will be used as default to search for TV Show subtitles" +msgid "Select service that will be used as default to search for TV Show subtitles." msgstr "" #: system/settings/settings.xml @@ -12208,9 +12227,10 @@ msgctxt "#24118" msgid "Default Movie Service" msgstr "" +#. Description of setting "Videos -> Subtitles -> Default Movie Service" with label #24118 #: system/settings/settings.xml msgctxt "#24119" -msgid "Select service that will be used as default to search for Movie subtitles" +msgid "Select service that will be used as default to search for Movie subtitles." msgstr "" #: xbmc/dialogs/GUIDialogSubtitles.cpp @@ -12223,7 +12243,29 @@ msgctxt "#24121" msgid "Enter search string" msgstr "" -#empty strings from id 24122 to 24999 +#. Button in Add-on Manager -> Available Updates for updating all add-ons when auto-updating is off. +#: xbmc/filesystem/AddonDirectory.cpp +msgctxt "#24122" +msgid "Update all" +msgstr "" + +#. Description of setting "Videos -> Subtitles -> Pause when searching for subtitles" with label #24105 +#: system/settings/settings.xml +msgctxt "#24123" +msgid "Pause the current video while searching for subtitles and resume once the subtitle is available." +msgstr "" + +#: system/settings/settings.xml +msgctxt "#24124" +msgid "Next to the video" +msgstr "" + +#: system/settings/settings.xml +msgctxt "#24125" +msgid "Custom location" +msgstr "" + +#empty strings from id 24126 to 24999 msgctxt "#25000" msgid "Notifications" @@ -12762,6 +12804,7 @@ msgctxt "#34110" msgid "7.1" msgstr "" +#. Description of setting "System -> Audio output -> Keep audio device alive" with label #421 #: system/settings/settings.xml 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." @@ -13225,171 +13268,205 @@ msgstr "" #empty strings from id 36043 to 36100 #strings from 36100 to 36999 are reserved for settings descriptions +#. Description of settings section "Appearance" #: system/settings/settings.xml msgctxt "#36101" -msgid "Change the look and feel of the User Interface." +msgid "Change the look and feel of the user interface." msgstr "" +#. Description of settings category "Appearance -> Skin" with label #166 #: system/settings/settings.xml msgctxt "#36102" -msgid "No info available yet." +msgid "Category containing all Skin related settings." msgstr "" +#. Description of setting "Appearance -> Skin -> Skin" with label #166 #: system/settings/settings.xml msgctxt "#36103" -msgid "Select the skin for the User Interface. This will define the look and feel of XBMC." +msgid "Select the skin for the user interface. This will define the look and feel of XBMC." msgstr "" +#. Description of setting "Appearance -> Skin -> Settings" with label #21417 #: system/settings/settings.xml msgctxt "#36104" msgid "Change specific skin settings. The available options are dependent on the skin used." msgstr "" +#. Description of setting "Appearance -> Skin -> Theme" with label #15111 #: system/settings/settings.xml msgctxt "#36105" msgid "Change the theme associated with your selected skin." msgstr "" +#. Description of setting "Appearance -> Skin -> Colours" with label #14078 #: system/settings/settings.xml msgctxt "#36106" msgid "Change the colours of your selected skin." msgstr "" +#. Description of setting "Appearance -> Skin -> Fonts" with label #13303 #: system/settings/settings.xml msgctxt "#36107" -msgid "Choose the fonts displayed in the User Interface. The font sets are configured by your skin." +msgid "Choose the fonts displayed in the user interface. The font sets are configured by your skin." msgstr "" +#. Description of setting "Appearance -> Skin -> Zoom" with label #20109 #: system/settings/settings.xml msgctxt "#36108" -msgid "Resize the view of the GUI." +msgid "Resize the view of the user interface." msgstr "" +#. Description of setting "Appearance -> Skin -> Startup window" with label #512 #: system/settings/settings.xml msgctxt "#36109" msgid "Select the media window that XBMC displays on startup." msgstr "" +#. Description of setting "Appearance -> Skin -> Navigation sounds" with label #15108 #: system/settings/settings.xml msgctxt "#36110" -msgid "Select or disable the sound scheme used in the User Interface." +msgid "Select or disable the sound scheme used in the user interface." msgstr "" +#. Description of setting "Appearance -> Skin -> Show RSS news feed" with label #13305 #: system/settings/settings.xml msgctxt "#36111" msgid "Turn this off to remove the scrolling RSS news ticker." msgstr "" +#. Description of setting "Appearance -> Skin -> Edit" with label #21450 #: system/settings/settings.xml msgctxt "#36112" msgid "Edit the RSS feeds." msgstr "" +#. Description of settings category "Appearance -> International" with label #14090 #: system/settings/settings.xml msgctxt "#36113" -msgid "No info available yet." +msgid "Category containing all locale/regional settings." msgstr "" +#. Description of setting "Appearance -> International -> Language" with label #248 #: system/settings/settings.xml msgctxt "#36114" -msgid "Chooses the language of the User Interface." +msgid "Chooses the language of the user interface." msgstr "" +#. Description of setting "Appearance -> International -> Region" with label #20026 #: system/settings/settings.xml msgctxt "#36115" msgid "Select the formats for temperature, time and date. The available options depend on the selected language." msgstr "" +#. Description of setting "Appearance -> International -> Character set" with label #14091 #: system/settings/settings.xml msgctxt "#36116" -msgid "Choose which character set is used for displaying text in the GUI." +msgid "Choose which character set is used for displaying text in the user interface." msgstr "" +#. Description of setting "Appearance -> International -> Timezone country" with label #14079 #: system/settings/settings.xml msgctxt "#36117" msgid "Select country location." msgstr "" + Description of setting "Appearance -> International -> Timezone" with label #14080 #: system/settings/settings.xml msgctxt "#36118" msgid "Select your current timezone." msgstr "" +#. Description of setting "Appearance -> International -> Preferred audio language" with label #285 #: system/settings/settings.xml msgctxt "#36119" msgid "Select the default audio track when different language tracks are available." msgstr "" +#. Description of setting "Video -> Subtitles -> Preferred subtitle language" with label #286 #: system/settings/settings.xml msgctxt "#36120" msgid "Select the default subtitles when different languages are available." msgstr "" +#. Description of settings category "Appearance -> File lists" with label #14081 #: system/settings/settings.xml msgctxt "#36121" -msgid "No info available yet." +msgid "Category containing settings related to how file lists are displayed." msgstr "" +#. Description of setting "Appearance -> File lists -> Show parent folder items" with label #13306 #: system/settings/settings.xml msgctxt "#36122" msgid "Display the (..) item in lists for visiting the parent folder." msgstr "" +#. Description of setting "Appearance -> File lists -> Show file extensions" with label #497 #: system/settings/settings.xml 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 "" +#. #. Description of setting "Appearance -> File lists -> Ignore articles when sorting (e.g. "the")" with label #13399 #: system/settings/settings.xml 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 "" +#. Description of setting "Appearance -> File lists -> Allow file renaming and deletion" with label #14071 #: system/settings/settings.xml 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 "" +#. Description of setting "Appearance -> File lists -> Show "Add source" buttons in files lists" with label #21382 #: system/settings/settings.xml msgctxt "#36126" -msgid "Show the add source button from root sections of the user interface." +msgid "Show the add source button in root sections of the user interface." msgstr "" +#. Description of setting "Appearance -> File lists -> Show hidden files and directories" with label #21330 #: system/settings/settings.xml msgctxt "#36127" -msgid "Show hidden files and directories." +msgid "Show hidden files and directories when listing files." msgstr "" +#. Description of settings category "Appearance -> Screensaver" with label #360 #: system/settings/settings.xml msgctxt "#36128" -msgid "No info available yet." +msgid "Category containing all screensaver settings." msgstr "" +#. Description of setting "Appearance -> Screensaver -> Screensaver time" with label #355 #: system/settings/settings.xml msgctxt "#36129" msgid "Set the amount of idle time required before displaying the screensaver." msgstr "" +#. Description of setting "Appearance -> Screensaver -> Screensaver mode" with label #356 #: system/settings/settings.xml 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 "" +#. #. Description of setting "Appearance -> Screensaver -> Settings" with label #21417 #: system/settings/settings.xml msgctxt "#36131" msgid "Change specific screensaver settings. The available options are dependent on the screensaver used." msgstr "" +#. Description of setting "Appearance -> Screensaver -> Preview" with label #1000 #: system/settings/settings.xml msgctxt "#36132" msgid "Preview the selected screensaver." msgstr "" +#. Description of setting "Appearance -> Screensaver -> Use visualisation if playing audio" with label #13392 #: system/settings/settings.xml msgctxt "#36133" msgid "If music is being played, XBMC will start the selected visualisation instead of displaying the screensaver." msgstr "" +#. Description of setting "Appearance -> Screensaver -> Use dim if paused during video playback" with label #22014 #: system/settings/settings.xml msgctxt "#36134" msgid "Dim the display when media is paused. Not valid for the 'Dim' screensaver mode." @@ -13410,99 +13487,116 @@ msgctxt "#36137" msgid "No info available yet." msgstr "" +#. Description of settings section "Videos" with label #3 #: system/settings/settings.xml msgctxt "#36138" -msgid "No info available yet." +msgid "Section that contains settings related to videos and how they are handled." msgstr "" +#. Description of settings category "Videos -> Library" with label #14022 #: system/settings/settings.xml msgctxt "#36139" -msgid "No info available yet." +msgid "Category containing the settings for how the video library is handled." msgstr "" +#. Description of setting "Videos -> Library -> Enable" with label #24022 #: system/settings/settings.xml msgctxt "#36140" -msgid "No info available yet." +msgid "Enable the video library." msgstr "" +#. Description of setting "Videos -> Library -> Show plot for unwatched items" with label #20369 #: system/settings/settings.xml msgctxt "#36141" msgid "Show plot information for unwatched media in the Video Library." msgstr "" -#: system/settings/settings.xml -msgctxt "#36142" -msgid "No info available yet." -msgstr "" +# empty string with id 36142 +#. Description of setting "Videos -> Library -> Download actor thumbnails when adding to library" with label #20402 #: system/settings/settings.xml msgctxt "#36143" msgid "Get thumbnails for actors when scanning media." msgstr "" +#. Description of setting "Videos -> Library -> Flatten TV show seasons" with label #20412 #: system/settings/settings.xml msgctxt "#36144" msgid "Remove the TV show season node, toggles between 'If only one season' (default), 'Always' and 'Never'." msgstr "" +#. Description of setting "Videos -> Library -> Group movies in sets" with label #20458 #: system/settings/settings.xml msgctxt "#36145" msgid "Group movies into 'Movie sets' when browsing the movie library." msgstr "" +#. Description of setting "Videos -> Library -> Update library on startup" with label #22000 #: system/settings/settings.xml msgctxt "#36146" msgid "Check for new media files on XBMC startup." msgstr "" +#. Description of setting "Videos -> Library -> Hide progress of library updates" with label #22001 +#. Description of setting "Music -> Library -> Hide progress of library updates" with label #22001 #: system/settings/settings.xml msgctxt "#36147" msgid "Hide the library scanning progress bar during scans." msgstr "" +#. Description of setting "Videos -> Library -> Clean library..." with label #334 +#. Description of setting "Music -> Library -> Clean library..." with label #334 #: system/settings/settings.xml 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 "" +#. Description of setting "Videos -> Library -> Export video library" with label #647 #: system/settings/settings.xml msgctxt "#36149" msgid "Export the Video Library database to XML files. This will optionally overwrite your current XML files." msgstr "" +#. Description of setting "Videos -> Library -> Import video library" with label #648 #: system/settings/settings.xml msgctxt "#36150" msgid "Import a XML file into the Video Library database." msgstr "" +#. Description of settings category "Videos -> Playback" with label #14086 #: system/settings/settings.xml msgctxt "#36151" -msgid "No info available yet." +msgid "Category containing settings for how video playback is handled." msgstr "" +#. Description of setting "Videos -> Playback -> Play the next video automatically" with label #13433 #: system/settings/settings.xml msgctxt "#36152" -msgid "Enable automatic playback of the next file in the list of the selected item." +msgid "Enable automatic playback of the next file in the list." msgstr "" +#. Description of setting "Videos -> Playback -> Render method" with label #13415 #: system/settings/settings.xml msgctxt "#36153" msgid "Adjust the method used to process and display video." msgstr "" +#. Description of setting "Videos -> Playback -> Enable HQ Scalers for scalings above" with label #13435 #: system/settings/settings.xml msgctxt "#36154" -msgid "No info available yet." +msgid "Use high quality scalars when upscaling a video by at least this percentage." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (VDPAU)" with label #13425 #: system/settings/settings.xml msgctxt "#36155" -msgid "Enable hardware decoding of video files." +msgid "Enable VDPAU hardware decoding of video files, mainly used for Nvidia graphics and in some circumstances AMD graphics." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (VAAPI)" with label #13426 #: system/settings/settings.xml msgctxt "#36156" -msgid "No info available yet." +msgid "Enable VAAPI hardware decoding of video files, mainly used for Intel graphics and in some circumstances AMD graphics." msgstr "" #: system/settings/settings.xml @@ -13510,116 +13604,139 @@ msgctxt "#36157" msgid "No info available yet." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (DXVA2)" with label #13427 #: system/settings/settings.xml msgctxt "#36158" -msgid "No info available yet." +msgid "Enable DXVA2 hardware decoding of video files." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (CrystalHD)" with label #13428 #: system/settings/settings.xml msgctxt "#36159" -msgid "No info available yet." +msgid "Enable CrystalHD decoding of video files." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (VDADecoder)" with label #13429 #: system/settings/settings.xml msgctxt "#36160" -msgid "No info available yet." +msgid "Enable VDA hardware decoding of video files." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (OpenMax)" with label #13430 #: system/settings/settings.xml msgctxt "#36161" -msgid "No info available yet." +msgid "Enable OpenMax hardware decoding of video files." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (VideoToolbox)" with label #13432 #: system/settings/settings.xml msgctxt "#36162" -msgid "No info available yet." +msgid "Enable VideoToolbox hardware decoding of video files." msgstr "" +#. Description of setting "Videos -> Playback -> Use pixel buffer objects" with label #13424 #: system/settings/settings.xml msgctxt "#36163" -msgid "No info available yet." +msgid "Enable decoding of video files using pixel buffer objects." msgstr "" +#. Description of setting "Videos -> Playback -> Adjust display refresh rate to match video" with label #170 #: system/settings/settings.xml msgctxt "#36164" -msgid "Select when the refresh rate adjustments should take place." +msgid "Allow the refresh rate of the display to be changed so that it best matches the video frame rate. This may yield smoother video playback." msgstr "" +#. Description of setting "Videos -> Playback -> Pause during refresh rate change" with label #13550 #: system/settings/settings.xml 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." +msgid "Pause for a small amount of time during a refresh rate change." msgstr "" +#. Description of setting "Videos -> Playback -> Sync playback to display" with label #13510 #: system/settings/settings.xml msgctxt "#36166" msgid "Synchronise the video to the refresh rate of the monitor." msgstr "" +#. Description of setting "Videos -> Playback -> A/V sync method" with label #13500 #: system/settings/settings.xml 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 "" +#. Description of setting "Videos -> Playback -> Maximum speedup/slowdown amount (%)" with label #13504 #: system/settings/settings.xml msgctxt "#36168" msgid "Maximum video speed adjust to match actual screen refresh rate." msgstr "" +#. Description of setting "System -> Audio output -> Resample quality" with label #13505 #: system/settings/settings.xml 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 "" +#. Description of setting "Videos -> Playback -> Allowed error in aspect ratio to minimise black bars" with label #22021 #: system/settings/settings.xml 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 "" +#. Description of setting "Videos -> Playback -> Display 4:3 videos as" with label #173 #: system/settings/settings.xml msgctxt "#36171" msgid "Select the zoom level that 4:3 videos are shown on widescreen displays." msgstr "" +#. Description of setting "Videos -> Playback -> VDPAU Studio level colour conversion" with label #13122 #: system/settings/settings.xml msgctxt "#36172" msgid "VDPAU studio level conversion provides a way for advanced applications like XBMC to influence the colour space conversion." msgstr "" +#. Description of setting "Videos -> Playback -> VDPAU HQ Upscaling level" with label #13121 #: system/settings/settings.xml msgctxt "#36173" -msgid "No info available yet." +msgid "Enable upscaling using VDPAU." msgstr "" +#. Description of setting "Videos -> Playback -> Activate Teletext" with label #23050 #: system/settings/settings.xml msgctxt "#36174" msgid "Enable Teletext when watching a live TV stream." msgstr "" +#. Description of setting "Videos -> Playback -> "Scale Teletext to 4:3" with label #23055 #: system/settings/settings.xml msgctxt "#36175" msgid "Scale Teletext to 4:3 ratio." msgstr "" +#. Description of settings category "Videos -> File lists" with label #14081 #: system/settings/settings.xml msgctxt "#36176" -msgid "No info available yet." +msgid "Category containing settings for how video file lists are handled." msgstr "" +#. Description of setting "Videos -> File lists -> Default select action" with label #22079 #: system/settings/settings.xml 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 "" +#. Description of setting "Videos -> File lists -> Extract thumbnails and video information" with label #20433 #: system/settings/settings.xml msgctxt "#36178" -msgid "No info available yet." +msgid "Extract thumbnails and metadata information such as codec and aspect ratio from videos." msgstr "" +#. Description of setting "Videos -> File lists -> Replace file names with library titles" with label #20419 #: system/settings/settings.xml msgctxt "#36179" msgid "When a file is scanned into the library it will display the metadata title instead of the file name." msgstr "" +#. Description of setting "Videos -> File lists -> Extract thumbnails and video information" with label #20433 #: system/settings/settings.xml msgctxt "#36180" msgid "Extract thumbnails and information, such as codecs and aspect ratio, to display in Library Mode." @@ -13630,76 +13747,91 @@ msgctxt "#36181" msgid "No info available yet." msgstr "" +#. Description of setting "Videos -> File lists -> Combine split video items" with label #20435 #: system/settings/settings.xml 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." +msgid "Combines multi-part video files, DVD folders, and movie folders down to a single item in non-library views." msgstr "" +#. Description of setting "Videos -> File lists -> Flatten library hierarchy" with label #20456 #: system/settings/settings.xml msgctxt "#36183" msgid "Removes the title, genre etc nodes from the library view. Selecting a category takes you straight to the title view." msgstr "" +#. Description of settings category "Videos -> Subtitles" with label #287 #: system/settings/settings.xml msgctxt "#36184" -msgid "No info available yet." +msgid "Category containing settings for how subtitles are handled." msgstr "" +#. Description of setting "Videos -> Subtitles -> Font to use for text subtitles" with label #14089 #: system/settings/settings.xml msgctxt "#36185" -msgid "No info available yet." +msgid "Set the font type to be used for subtitles." msgstr "" +#. Description of setting "Videos -> Subtitles -> - Size" with label #289 #: system/settings/settings.xml msgctxt "#36186" -msgid "No info available yet." +msgid "Set the font size to be used for subtitles." msgstr "" +#. Description of setting "Videos -> Subtitles -> - Style" with label #736 #: system/settings/settings.xml msgctxt "#36187" -msgid "No info available yet." +msgid "Set the font style to be used for subtitles." msgstr "" +#. Description of setting "Videos -> Subtitles -> - Colour" with label #737 #: system/settings/settings.xml msgctxt "#36188" -msgid "No info available yet." +msgid "Set the font colour to be used for subtitles." msgstr "" +#. Description of setting "Videos -> Subtitles -> - Character set" with label #735 #: system/settings/settings.xml msgctxt "#36189" -msgid "No info available yet." +msgid "Set the font character set to be used for subtitles." msgstr "" +#. Description of setting "Videos -> Subtitles -> Override ASS/SSA subtitles fonts" with label #21368 #: system/settings/settings.xml msgctxt "#36190" -msgid "No info available yet." +msgid "Override ASS/SSA subtitles fonts." msgstr "" +#. Description of setting "Videos -> Subtitles -> Custom subtitle folder" with label #21366 #: system/settings/settings.xml msgctxt "#36191" msgid "Set a custom directory for your subtitles. This can be a file share." msgstr "" +#. Description of setting "Videos -> Subtitles -> Subtitle location on screen" with label #21460 #: system/settings/settings.xml msgctxt "#36192" msgid "Location of subtitles on the screen." msgstr "" +#. Description of settings category "Videos -> DVDs" with label #14087 #: system/settings/settings.xml msgctxt "#36193" -msgid "No info available yet." +msgid "Category containing settings for how DVDs are handled." msgstr "" +#. Description of setting "Videos -> DVDs -> Play DVDs automatically" with label #14088 #: system/settings/settings.xml msgctxt "#36194" msgid "Autorun DVD video when inserted in drive." msgstr "" +#. Description of setting "Videos -> DVDs -> Forced DVD player region" with label #21372 #: system/settings/settings.xml msgctxt "#36195" msgid "Force a region for DVD playback." msgstr "" +#. Description of setting "Videos -> DVDs -> Attempt to skip introduction before DVD menu" with label #21882 #: system/settings/settings.xml msgctxt "#36196" msgid "Attempt to skip 'unskippable' introductions before DVD menu." @@ -13747,7 +13879,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36205" -msgid "Sort the channels by channel number on the server, but uses XBMC's own numbering for channels." +msgid "Sort the channels by channel number on the backend, but use XBMC's own numbering for channels." msgstr "" #: system/settings/settings.xml @@ -13817,17 +13949,17 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36219" -msgid "Default EPG window to show. Defaults to Timeline." +msgid "Default EPG window to show." msgstr "" #: system/settings/settings.xml msgctxt "#36220" -msgid "Number of days of EPG data to import from backends. Defaults to 3 days." +msgid "Number of days of EPG data to import from backends." msgstr "" #: system/settings/settings.xml msgctxt "#36221" -msgid "Time between EPG data imports from backends. Defaults to 120 minutes." +msgid "Time between EPG data imports from backends." msgstr "" #: system/settings/settings.xml @@ -13862,7 +13994,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36228" -msgid "Show the last viewed channel if switching to live tv." +msgid "Continue with the last viewed channel on startup." msgstr "" #: system/settings/settings.xml @@ -13892,27 +14024,27 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36234" -msgid "Duration of the recording when pressing the record button, or when creating a new manual timer. Defaults to 180 minutes." +msgid "Duration of instant recordings when pressing the record button." msgstr "" #: system/settings/settings.xml msgctxt "#36235" -msgid "Priority of the recording. Higher number means higher priority. Defaults to 50. Not supported by all Add-ons and backends." +msgid "Priority of the recording. Higher number means higher priority. Not supported by all Add-ons and backends." msgstr "" #: system/settings/settings.xml msgctxt "#36236" -msgid "Delete recording after this time. Defaults to 99 days. Not supported by all Add-ons and backends." +msgid "Delete recording after this time. Not supported by all Add-ons and backends." msgstr "" #: system/settings/settings.xml msgctxt "#36237" -msgid "Start recordings before the actual time. Defaults to 2 minutes. Not supported by all Add-ons and backends." +msgid "Start recordings before the actual time. Not supported by all Add-ons and backends." msgstr "" #: system/settings/settings.xml msgctxt "#36238" -msgid "End recordings after the actual time. Defaults to 10 minutes. Not supported by all Add-ons and backends." +msgid "End recordings after the actual time. Not supported by all Add-ons and backends." msgstr "" #: system/settings/settings.xml @@ -13932,17 +14064,17 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36242" -msgid "The command will not be executed when a recording will be started within this timeout. Defaults to 15 minutes." +msgid "The command will not be executed when a recording will be started within this timeout." msgstr "" #: system/settings/settings.xml msgctxt "#36243" -msgid "The command to execute. Defaults to '/usr/bin/setwakeup.sh'." +msgid "The command to execute." msgstr "" #: system/settings/settings.xml msgctxt "#36244" -msgid "Time to substract from the start time of the next scheduled recording. Defaults to 15 minutes." +msgid "Time to substract from the start time of the next scheduled recording." msgstr "" #: system/settings/settings.xml @@ -13972,7 +14104,7 @@ msgstr "" #: system/settings/settings.xml 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." +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." msgstr "" #: system/settings/settings.xml @@ -13985,36 +14117,43 @@ msgctxt "#36252" msgid "No info available yet." msgstr "" +#. Description of settings section "Music" with label #2 #: system/settings/settings.xml msgctxt "#36253" -msgid "No info available yet." +msgid "Section that contains settings related to music files and how they are handled." msgstr "" +#. Description of setting "Music -> Library -> Enable" with label #24022 #: system/settings/settings.xml msgctxt "#36254" -msgid "No info available yet." +msgid "Enable the music library." msgstr "" +#. Description of setting "Music -> Library -> Include artists who appear only on compilations" with label #13414 #: system/settings/settings.xml msgctxt "#36255" msgid "Determine if artists that appear only on compilations are shown in the library artist view." msgstr "" +#. Description of setting "Music -> Library -> Include artists who appear only on compilations" with label #13414 #: system/settings/settings.xml msgctxt "#36256" msgid "Automatically fetch album and artist information via scrapers during scan." msgstr "" +#. Description of setting "Music -> Library -> Default service for album information" with label #20193 #: system/settings/settings.xml msgctxt "#36257" -msgid "Select the default album information source" +msgid "Select the default album information source." msgstr "" +#. Description of setting "Music -> Library -> Default service for artist information" with label #20194 #: system/settings/settings.xml msgctxt "#36258" msgid "Select the default artist information source. See the Add-ons Manager for options." msgstr "" +#. Description of setting "Music -> Library -> Update library on startup" with label #22000 #: system/settings/settings.xml msgctxt "#36259" msgid "Check for new and removed media files on XBMC startup." @@ -14027,202 +14166,241 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36261" -msgid "Path where taken screenshots will be stored." +msgid "No info available yet." msgstr "" +#. Description of setting "Music -> Library -> Export music library" with label #20196 #: system/settings/settings.xml msgctxt "#36262" msgid "Export the Music Library database to XML files. This will optionally overwrite your current XML files." msgstr "" +#. Description of setting "Music -> Library -> Import music library" with label #20197 #: system/settings/settings.xml msgctxt "#36263" msgid "Import a XML file into the Music Library database." msgstr "" +#. Description of settings category "Music -> Playback" with label #14086 #: system/settings/settings.xml msgctxt "#36264" -msgid "No info available yet." +msgid "Category containing settings for how music playback is handled." msgstr "" +#. Description of setting "Music -> Playback -> Play the next song automatically" with label #489 #: system/settings/settings.xml 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 "" +#. Description of setting "Music -> Playback -> Queue songs on selection" with label #14084 #: system/settings/settings.xml msgctxt "#36266" -msgid "When songs are added to a playlist they are queued instead of playback starting immediately." +msgid "When songs are selected they are queued instead of playback starting immediately." msgstr "" +#. Description of setting "Music -> Playback -> ReplayGain volume adjustments" with label #638 #: system/settings/settings.xml 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 "" +#. Description of setting "Music -> Playback -> PreAmp Level - ReplayGained files" with label #641 #: system/settings/settings.xml msgctxt "#36268" msgid "Default is 89dB per standard. Change with caution." msgstr "" +#. Description of setting "Music -> Playback -> PreAmp Level - Non ReplayGained files" with label #642 #: system/settings/settings.xml msgctxt "#36269" msgid "Default is 89dB per standard. Change with caution." msgstr "" +#. Description of setting "Music -> Playback -> Avoid clipping on ReplayGained files" with label #643 #: system/settings/settings.xml msgctxt "#36270" -msgid "Reduce the volume of the file if clipping is likely to occur." +msgid "Reduce the volume of the file if clipping will occur." msgstr "" +#. Description of setting "Music -> Playback -> Crossfade between songs" with label #13314 #: system/settings/settings.xml msgctxt "#36271" msgid "Smoothly fade from one audio track to the next. You can set the amount of overlap from 1-15 seconds." msgstr "" +#. Description of setting "Music -> Playback -> Crossfade between songs on the same album" with label #13400 #: system/settings/settings.xml msgctxt "#36272" msgid "Allow crassfading to occur when both tracks are from the same album." msgstr "" +#. Description of setting "Music -> Playback -> "Visualisation" with label #250 #: system/settings/settings.xml msgctxt "#36273" msgid "Select the visualisation that will be displayed while listening to music." msgstr "" +#. Description of setting "Music -> File lists -> Enable tag reading" with label #258 #: system/settings/settings.xml msgctxt "#36274" msgid "Read the tag information from song files. For large directories this can slow down read time, especially over a network." msgstr "" +#. Description of setting "Music -> File lists -> Track naming template" with label #13307 #: system/settings/settings.xml 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." +msgid "Control the way that the names of songs are displayed in the user interface. In order to function properly, tag reading needs to be enabled." msgstr "" +#. Description of setting "Music -> File lists -> Track naming template - right" with label #13387 #: system/settings/settings.xml 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." +msgid "Used for formatting the second column in file lists." msgstr "" +#. Description of setting "Music -> File lists -> Now Playing - Track naming template" with label #13307 #: system/settings/settings.xml msgctxt "#36277" -msgid "No info available yet." +msgid "Control the way that the names of songs are displayed in the now playing list." msgstr "" +#. Description of setting "Music -> File lists -> Now Playing - Track naming template - right" with label #13387 #: system/settings/settings.xml msgctxt "#36278" -msgid "No info available yet." +msgid "Used for formatting the second column in the now playing list." msgstr "" +#. Description of setting "Music -> File lists -> Library - Track naming template" with label #13307 #: system/settings/settings.xml msgctxt "#36279" -msgid "No info available yet." +msgid "Control the way that the names of songs are displayed in library lists." msgstr "" +#. Description of setting "Music -> File lists -> Library - Track naming template - right" with label #13387 #: system/settings/settings.xml msgctxt "#36280" -msgid "No info available yet." +msgid "Used for formatting the second column in library lists." msgstr "" +#. Description of setting "Music -> File lists -> Search for thumbnails on remote shares" with label #14059 #: system/settings/settings.xml 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 "" +#. Description of settings category "Music -> Audio CDs" with label #620 #: system/settings/settings.xml msgctxt "#36282" -msgid "No info available yet." +msgid "Category containing settings for how CDs are handled." msgstr "" +#. Description of setting "Music -> Audio CDs -> Audio CD Insert Action" with label #14097 #: system/settings/settings.xml msgctxt "#36283" msgid "Autorun CDs when inserted in drive." msgstr "" +#. Description of setting "Music -> Audio CDs -> Lookup audio CD track names from freedb.org" with label #227 #: system/settings/settings.xml msgctxt "#36284" msgid "Read the information belonging to an audio CD from an internet database." msgstr "" +#. Description of setting "Music -> Audio CDs -> Saved music folder" label #20000 #: system/settings/settings.xml msgctxt "#36285" msgid "Select the location on your hard drive where ripped tracks will be saved to." msgstr "" +#. Description of setting "Music -> Audio CDs -> Track naming template" with label #13307 #: system/settings/settings.xml 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." +msgid "Control how saved music is named from the tags. 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 "" +#. Description of setting "Music -> Audio CDs -> Encoder" with label #621 #: system/settings/settings.xml msgctxt "#36287" msgid "Select which audio encoder to use when ripping." msgstr "" +#. Description of setting "Music -> Audio CDs -> Quality" with label #622 #: system/settings/settings.xml msgctxt "#36288" msgid "Select which quality you want to rip your files." msgstr "" +#. Description of setting "Music -> Audio CDs -> "Bitrate" with label #623 #: system/settings/settings.xml msgctxt "#36289" msgid "Select which bitrate to use for the specified audio encoder for audio compression." msgstr "" +#. Description of setting "Music -> Audio CDs -> Compression level" with label #665 #: system/settings/settings.xml msgctxt "#36290" -msgid "For FLAC define compression level, default 5" +msgid "For FLAC define compression level, default 5." msgstr "" +#. Description of setting "Music -> Audio CDs -> "Eject disc when CD ripping is complete" with label #14099 #: system/settings/settings.xml msgctxt "#36291" msgid "Auto eject disc after rip is complete." msgstr "" +#. Description of settings category "Music -> Karaoke" with label #13327 #: system/settings/settings.xml msgctxt "#36292" -msgid "No info available yet." +msgid "Category containing the settings for how karaoke is handled." msgstr "" +#. Description of setting "Music -> Karaoke -> Enable karaoke support" with label #13323 #: system/settings/settings.xml msgctxt "#36293" msgid "When playing any music file, XBMC will look for a matching .cdg file and display its graphics." msgstr "" +#. Description of setting "Music -> Karaoke -> Show song selector automatically" with label #22037 #: system/settings/settings.xml msgctxt "#36294" -msgid "No info available yet." +msgid "Show song selection dialog once the last song in the queue has been played." msgstr "" +#. Description of setting "Music -> Karaoke -> Font" with label #22030 #: system/settings/settings.xml msgctxt "#36295" -msgid "Select the font used during karoake." +msgid "Select the font type used during karoake." msgstr "" +#. Description of setting "Music -> Karaoke -> Size" with label #22031 #: system/settings/settings.xml msgctxt "#36296" msgid "Select the size of the font used during karoake." msgstr "" +#. Description of setting "Music -> Karaoke -> Colours" with label #22032 #: system/settings/settings.xml msgctxt "#36297" msgid "Select the font colour used during karoake." msgstr "" +#. Description of setting "Music -> Karaoke -> Charset" with label #22033 #: system/settings/settings.xml msgctxt "#36298" msgid "Select the character set used during karoake." msgstr "" +#. Description of setting "Music -> Karaoke -> Export karaoke titles..." with label #22038 #: system/settings/settings.xml msgctxt "#36299" -msgid "No info available yet." +msgid "Export the karaoke numbered songs to HTML or CSV files." msgstr "" +#. Description of setting "Music -> Karaoke -> Import karaoke titles..." with label #22036 #: system/settings/settings.xml msgctxt "#36300" -msgid "No info available yet." +msgid "Import the karaoke numbered songs from HTML or CSV files." msgstr "" #: system/settings/settings.xml @@ -14240,296 +14418,356 @@ msgctxt "#36303" msgid "No info available yet." msgstr "" +#. Description of settings section "Pictures" with label #1 #: system/settings/settings.xml msgctxt "#36304" -msgid "No info available yet." +msgid "Section that contains settings related to pictures and how they are handled." msgstr "" +#. Description of settings category "Pictures -> File lists" with label #14081 #: system/settings/settings.xml msgctxt "#36305" -msgid "No info available yet." +msgid "Category containing settings for how picture file lists are handled." msgstr "" +#. Description of setting "Pictures -> Show EXIF picture information" with label #14082 #: system/settings/settings.xml msgctxt "#36306" msgid "If EXIF information exists (date, time, camera used, etc.), it will be displayed." msgstr "" +#. Description of setting "Pictures -> Automatically generate thumbnails" with label #13360 #: system/settings/settings.xml msgctxt "#36307" msgid "Automatically generate picture thumbnails when entering picture folder." msgstr "" +#. Description of setting "Pictures -> Rotate pictures using EXIF information" with label #20184 #: system/settings/settings.xml msgctxt "#36308" msgid "Pictures will automatically rotate according to information in the EXIF tag, if found." msgstr "" +#. Description of setting "Pictures -> Show video files in listings" with label #22022 #: system/settings/settings.xml msgctxt "#36309" -msgid "Show video media in picture file lists, since most digital cameras nowadays have video recording capabilities." +msgid "Show videos in picture file lists." msgstr "" +#. Description of setting "Pictures -> Resolution" with label #169 #: system/settings/settings.xml msgctxt "#36310" msgid "No info available yet." msgstr "" + +#. Description of settings category "Pictures -> Slideshow" with label #108 #: system/settings/settings.xml msgctxt "#36311" -msgid "No info available yet." +msgid "Category containing settings for how picture slideshows are handled." msgstr "" +#. Description of setting "Pictures -> Slideshow -> Amount of time to display each image" with label #12378 #: system/settings/settings.xml msgctxt "#36312" msgid "Select the amount of time that each image is displayed in a slideshow." msgstr "" +#. Description of setting "Pictures -> Slideshow -> Use pan and zoom effects" with label #12379 #: system/settings/settings.xml msgctxt "#36313" msgid "Images in a slideshow will pan and zoom while displayed." msgstr "" +#. Description of setting "Pictures -> Slideshow -> Randomise" with label #13319 #: system/settings/settings.xml msgctxt "#36314" msgid "View slideshow images in a random order." msgstr "" +#. Description of settings section "Weather" with label #8 #: system/settings/settings.xml msgctxt "#36315" -msgid "No info available yet." +msgid "Section that contains weather related settings." msgstr "" +#. Description of settings category "Weather -> General" with label #16000 #: system/settings/settings.xml msgctxt "#36316" -msgid "No info available yet." +msgid "Category containing settings for how weather addons are handled." msgstr "" +#. Description of settings category "Weather -> General -> Locations with label #0 #: system/settings/settings.xml msgctxt "#36317" msgid "Select up to three locations for which the weather can be displayed." msgstr "" +#. Description of settings category "Weather -> General -> Service for weather information" with label #24029 #: system/settings/settings.xml msgctxt "#36318" msgid "Specify the default weather information source. See the Add-ons Manager for options." msgstr "" +#. Description of settings section "Services" with label #14036 #: system/settings/settings.xml msgctxt "#36319" -msgid "No info available yet." +msgid "Section containing settings for how network services are handled." msgstr "" +#. Description of settings category "Services -> General" with label #16000 #: system/settings/settings.xml msgctxt "#36320" -msgid "No info available yet." +msgid "Category containing settings used for all services." msgstr "" +#. Description of settings category "Services -> General -> Device name" with label #1271 #: system/settings/settings.xml msgctxt "#36321" msgid "Display name of the XBMC installation when using various network services." msgstr "" +#. Description of settings category "Services -> UPnP" with label #20187 #: system/settings/settings.xml msgctxt "#36322" -msgid "No info available yet." +msgid "Category containing settings for how the UPnP service is handled." msgstr "" +#. Description of setting "Services -> UPnP -> Share video and music libraries through UPnP" with label #21360 #: system/settings/settings.xml msgctxt "#36323" -msgid "Enable the UPnP server. This will allow you to stream media to any UPnP client." +msgid "Enable the UPnP server. This allows you to stream media to a UPnP client." msgstr "" +#. Description of setting "Services -> UPnP -> Announce library updates via UPnP" with label #20188 #: system/settings/settings.xml msgctxt "#36324" msgid "When a manual or automatical library update occurs, notify UPnP clients." msgstr "" +#. Description of setting "Services -> UPnP -> Allow control of XBMC via UPnP" with label #21881 #: system/settings/settings.xml msgctxt "#36325" -msgid "No info available yet." +msgid "Enable the UPnP client. This allows you to stream media from any UPnP server with a control point and control playback from that server." msgstr "" +#. Description of setting "Services -> UPnP -> Look for remote UPnP players" with label #21361 #: system/settings/settings.xml 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." +msgid "Enable the UPnP control point. This allows you to stream media to any UPnP client and control playback from XBMC." msgstr "" +#. Description of settings category "Services -> Webserver" with label #20187 #: system/settings/settings.xml msgctxt "#36327" -msgid "No info available yet." +msgid "Category containing settings for how the webserver service is handled." msgstr "" +#. Description of setting "Services -> Webserver -> Allow control of XBMC via HTTP" with label #263 #: system/settings/settings.xml msgctxt "#36328" msgid "Enable remote users to control XBMC through the built-in webserver." msgstr "" +#. Description of setting "Services -> Webserver -> Port" with label #730 #: system/settings/settings.xml msgctxt "#36329" msgid "Define the webserver port." msgstr "" +#. Description of setting "Services -> Webserver -> Username" with label #1048 #: system/settings/settings.xml msgctxt "#36330" msgid "Define the webserver username." msgstr "" +#. Description of setting "Services -> Webserver -> Password" with label #1048 #: system/settings/settings.xml msgctxt "#36331" -msgid "Define webserver password." +msgid "Define the webserver password." msgstr "" +#. Description of setting "Services -> Webserver -> Web interface" with label #199 #: system/settings/settings.xml msgctxt "#36332" msgid "Select between web interfaces installed via the Add-on Manager." msgstr "" +#. Description of settings category "Services -> Remote Control" with label #790 #: system/settings/settings.xml msgctxt "#36333" -msgid "No info available yet." +msgid "Category containing settings for how the remote control service is handled." msgstr "" +#. Description of setting "Services -> Remote Control -> Allow programs on this system to control XBMC" with label #791 #: system/settings/settings.xml msgctxt "#36334" msgid "Allow programs on this computer to control XBMC via the Web Interface or the JSON-RPC interface protocol." msgstr "" +#. Description of setting "Services -> Remote Control -> Port" with label #792 #: system/settings/settings.xml msgctxt "#36335" -msgid "No info available yet." +msgid "Define the remote control port." msgstr "" +#. Description of setting "Services -> Remote Control -> Port range" with label #793 #: system/settings/settings.xml msgctxt "#36336" -msgid "No info available yet." +msgid "Define the remote control port range." msgstr "" +#. Description of setting "Services -> Remote Control -> Maximum number of clients" with label #797 #: system/settings/settings.xml msgctxt "#36337" -msgid "No info available yet." +msgid "Define the maximum number of clients that can connect." msgstr "" +#. Description of setting "Services -> Remote Control -> Allow programs on other systems to control XBMC" with label #794 #: system/settings/settings.xml msgctxt "#36338" msgid "Allow programs on the network to control XBMC." msgstr "" +#. Description of setting "Services -> Remote Control -> Initial repeat delay (ms)" with label #795 #: system/settings/settings.xml msgctxt "#36339" -msgid "No info available yet." +msgid "Initial repeat delay (ms)." msgstr "" +#. Description of setting "Services -> Remote Control -> Continuous repeat delay (ms)" with label #796 #: system/settings/settings.xml msgctxt "#36340" -msgid "No info available yet." +msgid "Continuous repeat delay (ms)." msgstr "" +#. Description of settings category "Services -> Zeroconf" with label #1259 #: system/settings/settings.xml msgctxt "#36341" -msgid "No info available yet." +msgid "Category containing settings for how the zeroconf network discovery service is handled, required for AirPlay." msgstr "" +#. Description of setting "Services -> Zeroconf -> Announce these services to other systems via Zeroconf" with label #1260 #: system/settings/settings.xml msgctxt "#36342" -msgid "No info available yet." +msgid "Allows applications on the network to discover XBMC's running services." msgstr "" +#. Description of setting "Services -> AirPlay -> Allow XBMC to receive AirPlay content" with label #1270 #: system/settings/settings.xml msgctxt "#36343" -msgid "No info available yet." +msgid "Allows XBMC to receive content from other AirPlay devices or applications." msgstr "" +#. Description of setting "Services -> AirPlay -> Use password protection" with label #1272 #: system/settings/settings.xml msgctxt "#36344" -msgid "No info available yet." +msgid "Enable AirPlay password protection." msgstr "" +#. Description of setting "Services -> AirPlay -> Password" with label #733 #: system/settings/settings.xml msgctxt "#36345" -msgid "No info available yet." +msgid "Sets the AirPlay password." msgstr "" +#. Description of settings category "Services -> SMB Client" with label #1200 #: system/settings/settings.xml msgctxt "#36346" -msgid "No info available yet." +msgid "Category containing settings for how the SMB Client (samba) service is handled." msgstr "" +#. Description of setting "Services -> SMB Client -> WINS server" with label #1207 #: system/settings/settings.xml msgctxt "#36347" -msgid "No info available yet." +msgid "If a WINS server is running on the network, enter its IP address here. Otherwise, leave blank." msgstr "" +#. Description of setting "Services -> SMB Client -> Workgroup" with label #1202 #: system/settings/settings.xml msgctxt "#36348" -msgid "No info available yet." +msgid "If a WINS server is running on the network, enter its workgroup name here. Otherwise, leave blank." msgstr "" +#. Description of settings section "System" with label #13000 #: system/settings/settings.xml msgctxt "#36349" -msgid "No info available yet." +msgid "Section that contains the System related settings for the device XBMC is installed on." msgstr "" +#. Description of setting "System -> Power saving -> Try to wake remote servers on access" with label #13026 #: system/settings/settings.xml msgctxt "#36350" msgid "Automatically send 'Wake-On-Lan' to server(s) right before trying to access shared files or services." msgstr "" +#. Description of setting "System -> Video output -> Display Mode" with label #21373 #: system/settings/settings.xml msgctxt "#36351" -msgid "No info available yet." +msgid "Display XBMC in a window, or fullscreen on the selected screen." msgstr "" +#. Description of setting "System -> Video output -> Resolution" with label #169 #: system/settings/settings.xml msgctxt "#36352" -msgid "No info available yet." +msgid "Changes the resolution that the user interface is displayed in." msgstr "" +#. Description of setting "System -> Video output -> Refresh Rate" with label #243 #: system/settings/settings.xml msgctxt "#36353" -msgid "No info available yet." +msgid "Changes the refresh rate that the user interface is displayed in." msgstr "" +#. Description of setting "System -> Video output -> Use a fullscreen window rather than true fullscreen" with label #14083 #: system/settings/settings.xml 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." +msgid "Display XBMC in a fullscreen window. The main benefit is for multi-screen configurations, so that XBMC can be used without minimising other applications. This uses a more resources so playback may be less smooth." msgstr "" +#. Description of setting "System -> Video output -> Blank other displays" with label #13130 #: system/settings/settings.xml msgctxt "#36355" msgid "In a multi-screen configuration, the screens where XBMC is not displayed are blacked out." msgstr "" +#. Description of setting "System -> Video output -> Vertical blank sync" with label #13105 #: system/settings/settings.xml msgctxt "#36356" msgid "Eliminate vertical tearing." msgstr "" +#. Description of setting "System -> Video output -> Video calibration..." with label #214 #: system/settings/settings.xml 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." +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 "" +#. Description of setting "System -> Video output -> Test patterns..." with label #226 #: system/settings/settings.xml msgctxt "#36358" msgid "Test patterns for display hardware calibration." msgstr "" +#. Description of setting "System -> Video output -> Use limited colour range (16-235)" with label #36042 #: system/settings/settings.xml msgctxt "#36359" -msgid "No info available yet." +msgid "Use limited colour range (16-235) instead of full colour range (0-255). Limited range should be used if your display is a regular HDMI TV and doesn't have a PC or other mode to display full range colour, however if your display is a PC monitor then leave this disabled to get proper blacks." msgstr "" +#. Description of settings category "System -> Audio output" with label #772 #: system/settings/settings.xml msgctxt "#36360" -msgid "No info available yet." +msgid "Category containing settings for how audio output is handled." msgstr "" +#. Description of setting "System -> Audio output -> Output configuration" with label #337 #: system/settings/settings.xml 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 "" +#. Description of setting "System -> Audio output -> Number of channels" with label #34100 #: system/settings/settings.xml msgctxt "#36362" 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." @@ -14540,16 +14778,19 @@ msgctxt "#36363" msgid "Boost AC3 streams that have been downmixed to 2 channels." msgstr "" +#. Description of setting "System -> Audio output -> Number of channels" with label #252 #: system/settings/settings.xml msgctxt "#36364" -msgid "Select to enable upmixing of 2 channel audio 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 channel configuration." msgstr "" +#. Description of setting "System -> Audio output -> Dolby Digital (AC3) capable receiver" with label #364 #: system/settings/settings.xml msgctxt "#36365" msgid "Select this option if your receiver is capable of decoding AC3 streams." msgstr "" +#. Description of setting "System -> Audio output -> DTS capable receiver" with label #254 #: system/settings/settings.xml msgctxt "#36366" msgid "Select this option if your receiver is capable of decoding DTS streams." @@ -14560,214 +14801,256 @@ 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 "" +#. Description of setting "System -> Audio output -> Enable passthrough" with label #348 #: system/settings/settings.xml msgctxt "#36368" msgid "Select to enable the passthrough audio options for playback of encoded audio such as Dolby Digital." msgstr "" +#. Description of setting "System -> Audio output -> TrueHD capable receiver" with label #349 #: system/settings/settings.xml msgctxt "#36369" msgid "Select this option if your receiver is capable of decoding TrueHD streams." msgstr "" +#. Description of setting "System -> Audio output -> DTS-HD capable receiver" with label #347 #: system/settings/settings.xml msgctxt "#36370" msgid "Select this option if your receiver is capable of decoding DTS-HD streams." msgstr "" +#. Description of setting "System -> Audio output -> Audio output device" with label #545 #: system/settings/settings.xml msgctxt "#36371" -msgid "Select the device to be used for playback of audio that has been decoded such as mp3" +msgid "Select the device to be used for playback of audio that has been decoded such as mp3." msgstr "" +#. Description of setting "System -> Audio output -> Passthrough output device" with label #546 #: system/settings/settings.xml 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 "" +#. Description of setting "System -> Audio output -> Play GUI sounds" with label #34120 #: system/settings/settings.xml msgctxt "#36373" msgid "Configure how interface sounds are handled, such as menu navigation and important notifications." msgstr "" +#. Description of settings category "System -> Input devices" with label #14094 #: system/settings/settings.xml msgctxt "#36374" -msgid "No info available yet." +msgid "Category containing settings for how input devices are handled." msgstr "" +#. Description of setting "System -> Input devices -> Peripherals" with label #35000 #: system/settings/settings.xml msgctxt "#36375" -msgid "No info available yet." +msgid "Configure any attached peripheral devices." msgstr "" +#. Description of setting "System -> Input devices -> Remote control sends keyboard presses" with label #21449 #: system/settings/settings.xml 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 "" +#. Description of setting "System -> Input devices -> Enable mouse and Touch Screen support" with label #21369 #: system/settings/settings.xml 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 "" +#. Description of setting "System -> Input devices -> Enable joystick and gamepad support" with label #35100 #: system/settings/settings.xml msgctxt "#36378" msgid "Use a joystick to control XBMC." msgstr "" +#. Description of settings category "System -> Internet access" with label #798 #: system/settings/settings.xml msgctxt "#36379" -msgid "No info available yet." +msgid "Category containing settings for internet access." msgstr "" +#. Description of setting "System -> Internet access -> Use an HTTP proxy server to access the internet" with label #708 #: system/settings/settings.xml msgctxt "#36380" msgid "If your internet connection uses a proxy, configure it here." msgstr "" +#. Description of setting "System -> Internet access -> Proxy type" with label #1180 #: system/settings/settings.xml msgctxt "#36381" msgid "Configure which proxy type is used." msgstr "" +#. Description of setting "System -> Internet access -> Server" with label #706 #: system/settings/settings.xml msgctxt "#36382" msgid "Configure the proxy server address." msgstr "" +#. Description of setting "System -> Internet access -> Port" with label #730 #: system/settings/settings.xml msgctxt "#36383" msgid "Configure the proxy server port." msgstr "" +#. Description of setting "System -> Internet access -> Username" with label #1048 #: system/settings/settings.xml msgctxt "#36384" msgid "Configure the proxy server username." msgstr "" +#. Description of setting "System -> Internet access -> Password" with label #733 #: system/settings/settings.xml msgctxt "#36385" msgid "Configure the proxy server password." msgstr "" +#. Description of setting "System -> Internet access -> Internet connection bandwidth limitation" with label #14041 #: system/settings/settings.xml msgctxt "#36386" msgid "If you have limited bandwidth available, XBMC will try to keep within these limits." msgstr "" +#. Description of settings category "System -> Power saving" with label #14095 #: system/settings/settings.xml 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." +msgid "Category containing settings for power saving." msgstr "" +#. Description of setting "System -> Power saving -> Put display to sleep when idle" with label #1450 #: system/settings/settings.xml msgctxt "#36388" -msgid "No info available yet." +msgid "Turn off display when idle. Useful for TVs that turn off when there is no display signal detected." msgstr "" +#. Description of setting "System -> Power saving -> Shutdown function timer" with label #357 #: system/settings/settings.xml msgctxt "#36389" msgid "Define how long XBMC should idle before shutting down." msgstr "" +#. Description of setting "System -> Power saving -> Shutdown function" with label #13008 #: system/settings/settings.xml msgctxt "#36390" msgid "Define what action XBMC should do when it has been idle for a long period of time." msgstr "" +#. Description of settings category "System -> Debugging" with label #14092 #: system/settings/settings.xml msgctxt "#36391" -msgid "Turn debug logging on or off. Useful for troubleshooting." +msgid "Category containing settings for debugging functions." msgstr "" +#. Description of setting "System -> Debugging -> Enable debug logging" with label #20191 #: system/settings/settings.xml msgctxt "#36392" -msgid "No info available yet." +msgid "Turn debug logging on or off. Useful for troubleshooting." msgstr "" +#. Description of setting "System -> Debugging -> Screenshot folder" with label #20004 #: system/settings/settings.xml msgctxt "#36393" msgid "Folder used to save screenshots taken within XBMC." msgstr "" +#. Description of setting "System -> Debugging -> Verbose logging..." with label #666 #: system/settings/settings.xml msgctxt "#36394" msgid "Specify additional libraries to be included in the debug log." msgstr "" +#. Description of settings category "System -> Master lock" with label #12360 #: system/settings/settings.xml msgctxt "#36395" -msgid "Open the Master Lock dialogue, where you can configure your Master Lock options." +msgid "Category containing settings for the master lock function." msgstr "" +#. Description of setting "System -> Master lock -> Master lock code and settings" with label #20100 #: system/settings/settings.xml msgctxt "#36396" msgid "Define the PIN code used for the master lock." msgstr "" +#. Description of setting "System -> Master lock -> Ask for master lock code on startup" with label #20076 #: system/settings/settings.xml msgctxt "#36397" -msgid "If enabled, the master lock code is required to unlock XBMC on startup " +msgid "If enabled, the master lock code is required to unlock XBMC on startup." msgstr "" +#. Description of setting "System -> Master lock -> Max Retries" with label #20076 #: system/settings/settings.xml msgctxt "#36398" msgid "Define the maximum number of retries before XBMC is closed down." msgstr "" +#. Description of settings category "System -> Cache" with label #439 #: system/settings/settings.xml msgctxt "#36399" -msgid "No info available yet." +msgid "Category containing settings for the cache function." msgstr "" +#. Description of settings category "System -> Cache -> Video/Audio/DVD cache - Hard disk" with label #14025 #: system/settings/settings.xml msgctxt "#36400" -msgid "No info available yet." +msgid "Enable cache for playback of Video, Audio or DVDs from hard disk." msgstr "" +#. Description of settings category "System -> Cache -> Video cache - DVD-ROM" with label #14026 #: system/settings/settings.xml msgctxt "#36401" -msgid "No info available yet." +msgid "Enable cache for playback of Video from DVD-ROM." msgstr "" +#. Description of settings category "System -> Cache -> Video cache - Local Network" with label #14027 #: system/settings/settings.xml msgctxt "#36402" -msgid "No info available yet." +msgid "Enable cache for Video playback from Local Network." msgstr "" +#. Description of settings category "System -> Cache -> Video cache - Internet" with label #14028 #: system/settings/settings.xml msgctxt "#36403" -msgid "No info available yet." +msgid "Enable cache for Video playback from Internet." msgstr "" +#. Description of settings category "System -> Cache -> Audio cache - DVD-ROM" with label #14030 #: system/settings/settings.xml msgctxt "#36404" -msgid "No info available yet." +msgid "Enable cache for playback of Audio from DVD-ROM." msgstr "" +#. Description of settings category "System -> Cache -> Audio cache - Local Network" with label #14031 #: system/settings/settings.xml msgctxt "#36405" -msgid "No info available yet." +msgid "Enable cache for Audio playback from Local Network." msgstr "" +#. Description of settings category "System -> Cache -> Audio cache - Internet" with label #14032 #: system/settings/settings.xml msgctxt "#36406" -msgid "No info available yet." +msgid "Enable cache for Audio playback from Internet." msgstr "" +#. Description of settings category "System -> Cache -> DVD cache - DVD-ROM" with label #14034 #: system/settings/settings.xml msgctxt "#36407" -msgid "No info available yet." +msgid "Enable cache for playback of DVD from DVD-ROM." msgstr "" +#. Description of settings category "System -> Cache -> DVD cache - Local Network" with label #14037 #: system/settings/settings.xml msgctxt "#36408" -msgid "No info available yet." +msgid "Enable cache for DVD playback from Local Network." msgstr "" +#. Description of settings category "System -> Cache -> Unknown type cache - Internet" with label #14060 #: system/settings/settings.xml msgctxt "#36409" -msgid "No info available yet." +msgid "Enable cache of unknown types from Internet." msgstr "" #: system/settings/settings.xml @@ -14800,21 +15083,25 @@ msgctxt "#36415" msgid "No info available yet." msgstr "" +#. Description of setting "System -> Input Devices -> Apple remote" with label #13600 #: system/settings/settings.xml msgctxt "#36416" -msgid "Define the Apple remote standard used." +msgid "Specify the type of remote used." msgstr "" +#. Description of setting "System -> Input Devices -> Allow start of XBMC with remote" with label #13602 #: system/settings/settings.xml msgctxt "#36417" -msgid "No info available yet." +msgid "Always run an XBMC helper so that the remote can be used to start XBMC." msgstr "" +#. Description of setting "System -> Input Devices -> Sequence delay time" with label #13603 #: system/settings/settings.xml msgctxt "#36418" -msgid "No info available yet." +msgid "Specify the delay between button sequences on a universal remote." msgstr "" +#. Description of settings category "Weather -> General -> Settings" with label #21417 #: system/settings/settings.xml msgctxt "#36419" msgid "Define locations used for retrieving weather information." @@ -14825,19 +15112,22 @@ msgctxt "#36420" msgid "No info available yet." msgstr "" +#. Description of setting "Videos -> Playback -> Prefer VDPAU Video Mixer" with label #13437 #: system/settings/settings.xml msgctxt "#36421" -msgid "Bypassing VDPAU mixer saves resources on low power systems but slightly reduces picture quality" +msgid "Bypassing VDPAU mixer saves resources on low power systems but slightly reduces picture quality." msgstr "" +#. Description of setting "Videos -> Playback -> Allow hardware acceleration (amcodec)" with label #13438 #: system/settings/settings.xml msgctxt "#36422" -msgid "Enable hardware video decode using AMLogic decoder" +msgid "Enable hardware video decode using AMLogic decoder." msgstr "" +#. Description of setting "Videos -> Playback -> Allow frame-multi-threaded decoding" with label #13440 #: system/settings/settings.xml msgctxt "#36423" -msgid "Use frame-multi-threaded decoding instead of hardware accelerated decoding (less reliable than default single thread mode)." +msgid "Enables frame-multi-threaded software decoding (less reliable than the default single threaded mode)." msgstr "" #: system/settings/settings.xml @@ -14865,12 +15155,25 @@ msgctxt "#36428" msgid "Record" msgstr "" +#. Description of setting "System -> Audio output -> Enable Dolby Digital transcoding" with label #667 #: 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" +msgid "Select this if the audio out connection only supports multichannel audio as Dolby Digital 5.1, such as an SPDIF connection. If your system supports LPCM multichannel sound via HDMI, leave this disabled." +msgstr "" + +#. Description for setting category #14101: Video Acceleration +#: system/settings/settings.xml +msgctxt "#36430" +msgid "Configure how video processing will be accelerated. This includes things like decoding and scaling." msgstr "" -#empty strings from id 36430 to 36499 +#. Description for video related setting #13454: Decoding mode +#: system/settings/settings.xml +msgctxt "#36431" +msgid "Defines whether video decoding should be performed in software (requires more CPU) or with hardware acceleration where possible." +msgstr "" + +#empty strings from id 36432 to 36499 #end reservation #: system/settings/settings.xml @@ -14930,7 +15233,7 @@ msgstr "" #: system/settings/settings.xml msgctxt "#36520" -msgid "Playback mode of stereoscopic videos" +msgid "Playback mode of stereoscopic videos." msgstr "" #: system/settings/settings.xml @@ -14943,9 +15246,10 @@ msgctxt "#36522" msgid "Use preferred mode" msgstr "" +#. Description of setting "System -> Audio output -> Limit sampling rate (kHz)" with label #458 #: system/settings/settings.xml msgctxt "#36523" -msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration" +msgid "Maximum sampling rate for spdif or sampling rate for fixed output configuration." msgstr "" #: system/settings/settings.xml @@ -14993,6 +15297,7 @@ msgctxt "#36532" msgid "Same as movie" msgstr "" +#. Description of setting "System -> Audio output -> Normalize levels on downmix" with label #346 #: settings/DisplaySettings.cpp 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." @@ -15012,26 +15317,31 @@ msgctxt "#36536" msgid "Stereoscopic mode inverted" msgstr "" +#. Description of setting "Videos -> Playback -> Playback mode of stereoscopic videos" with label #36520 #: system/settings/settings.xml msgctxt "#36537" -msgid "No info available yet." +msgid "Set playback mode of stereoscopic 3D videos." msgstr "" +#. Description of setting "Videos -> Playback -> Disable stereoscopic mode when playback is stopped" with label #36526 #: system/settings/settings.xml msgctxt "#36538" -msgid "No info available yet." +msgid "Prevents XBMC exiting out of stereoscopic 3D mode when playback is stopped as not all TVs will recognise the switch from 3D back to 2D without the viewing mode being toggled on the TV." msgstr "" +#. Description of setting "System -> Video output -> Stereoscopic mode (current)" with label #36500 #: system/settings/settings.xml msgctxt "#36539" -msgid "No info available yet." +msgid "Changes the stereoscopic 3D mode of the user interface." msgstr "" +#. Description of setting "System -> Video output -> Preferred mode" with label #36524 #: system/settings/settings.xml msgctxt "#36540" -msgid "No info available yet." +msgid "The preferred stereoscopic 3D mode." msgstr "" +#. Description of setting "Services -> AirPlay -> Allow volume control" with label #1269 #: system/settings/settings.xml msgctxt "#36541" msgid "Allows volume control from AirPlay clients." @@ -15057,9 +15367,10 @@ msgctxt "#36545" msgid "Subtitle stereoscopic depth" msgstr "" +#. Description of setting "Videos -> Subtitles -> Subtitle stereoscopic depth" with label #36545 #: 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." +msgid "Sets the visual depth of subtitles for stereoscopic 3D videos. The higher the value, the closer the subtitles will appear to the viewer." msgstr "" #: system/settings/rbp.xml @@ -15072,9 +15383,35 @@ 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 +#empty strings from id 36549 to 36499 #reserved strings 365XX +#. Description of settings category "Music -> Library" with label #14022 +#: system/settings/settings.xml +msgctxt "#36600" +msgid "Category containing the settings for how the music library is handled." +msgstr "" + +#. Description of settings category "Music -> File lists" with label #14081 +#: system/settings/settings.xml +msgctxt "#36601" +msgid "Category containing settings for how music file lists are handled." +msgstr "" + +#. Description of settings category "Services -> AirPlay" with label #1273 +#: system/settings/settings.xml +msgctxt "#36602" +msgid "Category containing settings for how the AirPlay service is handled." +msgstr "" + +#. Description of settings category "System -> Video output" with label #21373 +#: system/settings/settings.xml +msgctxt "#36603" +msgid "Category containing settings for how video output is handled." +msgstr "" + +#empty strings from id 36604 to 36999 + #: xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp msgctxt "#37000" msgid "(Visually Impaired)" @@ -15117,6 +15454,7 @@ msgctxt "#37015" msgid "Browse Into" msgstr "" +#. Description of setting "System -> Audio output -> Dolby Digital Plus (E-AC3) capable receiver" with label #448 #: system/settings/settings.xml msgctxt "#37016" msgid "Select this option if your receiver is capable of decoding E-AC3 streams." @@ -15132,9 +15470,10 @@ msgctxt "#37018" msgid "Boost centre channel when downmixing" msgstr "" +#. Description of setting "System -> Input devices -> Enable system keys in fullscreen" with label #35103 #: system/settings/settings.xml msgctxt "#37019" -msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen" +msgid "Enables system keys like printscreen, alt-tab and volume keys when in fullscreen." msgstr "" #: system/settings/rbp.xml diff --git a/project/BuildDependencies/scripts/harfbuzz_d.bat b/project/BuildDependencies/scripts/harfbuzz_d.bat deleted file mode 100644 index 1692411d1f..0000000000 --- a/project/BuildDependencies/scripts/harfbuzz_d.bat +++ /dev/null @@ -1,13 +0,0 @@ -@ECHO ON - -SET LOC_PATH=%CD% -SET FILES=%LOC_PATH%\harfbuzz_d.txt - -CALL dlextract.bat harfbuzz %FILES% - -cd %TMP_PATH% - -xcopy harfbuzz-0.7.0\include\* "%CUR_PATH%\include\" /E /Q /I /Y -copy harfbuzz-0.7.0\lib\harfbuzz.lib "%CUR_PATH%\lib\" /Y - -cd %LOC_PATH% diff --git a/project/BuildDependencies/scripts/harfbuzz_d.txt b/project/BuildDependencies/scripts/harfbuzz_d.txt deleted file mode 100644 index a323f03fb0..0000000000 --- a/project/BuildDependencies/scripts/harfbuzz_d.txt +++ /dev/null @@ -1,2 +0,0 @@ -; filename mirror of the file -harfbuzz-0.7.0.7z http://mirrors.xbmc.org/build-deps/win32/ diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj index adc3f99374..0b1c0c62ad 100644 --- a/project/VS2010Express/XBMC.vcxproj +++ b/project/VS2010Express/XBMC.vcxproj @@ -2487,6 +2487,7 @@ <ClInclude Include="..\..\xbmc\view\ViewDatabase.h" /> <ClInclude Include="..\..\xbmc\view\ViewState.h" /> <ClInclude Include="..\..\xbmc\view\ViewStateSettings.h" /> + <ClInclude Include="..\..\xbmc\win32\IMMNotificationClient.h" /> <ClInclude Include="..\..\xbmc\win32\pch.h" /> <ClInclude Include="..\..\xbmc\win32\PlatformDefs.h" /> <ClInclude Include="..\..\xbmc\XBDateTime.h" /> @@ -2916,4 +2917,4 @@ </VisualStudio> </ProjectExtensions> <Import Project="$(SolutionDir)\$(ProjectFileName).targets.user" Condition="Exists('$(SolutionDir)\$(ProjectFileName).targets.user')" /> -</Project> +</Project>
\ No newline at end of file diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters index f994d65f96..829f0531d7 100644 --- a/project/VS2010Express/XBMC.vcxproj.filters +++ b/project/VS2010Express/XBMC.vcxproj.filters @@ -6112,6 +6112,9 @@ <ClInclude Include="..\..\xbmc\utils\XSLTUtils.h"> <Filter>utils</Filter> </ClInclude> + <ClInclude Include="..\..\xbmc\win32\IMMNotificationClient.h"> + <Filter>win32</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc"> @@ -6141,4 +6144,4 @@ <Filter>interfaces\swig</Filter> </None> </ItemGroup> -</Project> +</Project>
\ No newline at end of file diff --git a/system/settings/android.xml b/system/settings/android.xml index 54d8f571b8..0aad89597c 100644 --- a/system/settings/android.xml +++ b/system/settings/android.xml @@ -8,10 +8,13 @@ </category> </section> <section id="videos"> - <category id="videoplayer"> - <group id="2"> - <setting id="videoplayer.usestagefright" type="boolean" label="13436" help="36260"> + <category id="videoacceleration"> + <group id="3"> + <setting id="videoplayer.usestagefright" type="boolean" parent="videoplayer.decodingmethod" label="13436" help="36260"> <requirement>HAVE_LIBSTAGEFRIGHTDECODER</requirement> + <dependencies> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> + </dependencies> <level>2</level> <default>true</default> <updates> @@ -19,8 +22,11 @@ </updates> <control type="toggle" /> </setting> - <setting id="videoplayer.usemediacodec" type="boolean" label="13439" help="36544"> + <setting id="videoplayer.usemediacodec" type="boolean" parent="videoplayer.decodingmethod" label="13439" help="36544"> <visible>HAS_MEDIACODEC</visible> + <dependencies> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> + </dependencies> <level>2</level> <default>true</default> <updates> diff --git a/system/settings/darwin_ios.xml b/system/settings/darwin_ios.xml index 1d67f9bb8c..af1b19dd1d 100644 --- a/system/settings/darwin_ios.xml +++ b/system/settings/darwin_ios.xml @@ -3,9 +3,6 @@ <section id="videos"> <category id="videoplayer"> <group id="2"> - <setting id="videoplayer.hqscalers"> - <visible>false</visible> - </setting> <setting id="videoplayer.adjustrefreshrate"> <visible>false</visible> </setting> @@ -14,6 +11,12 @@ </setting> </group> </category> + <category id="videoacceleration"> + <group id="1"> + <setting id="videoplayer.hqscalers"> + <visible>false</visible> + </setting> + </category> </section> <section id="music"> <category id="audiocds"> diff --git a/system/settings/darwin_osx.xml b/system/settings/darwin_osx.xml index aa1b414de1..0a772775a8 100644 --- a/system/settings/darwin_osx.xml +++ b/system/settings/darwin_osx.xml @@ -10,9 +10,12 @@ </category> </section> <section id="videos"> - <category id="videoplayer"> - <group id="2"> - <setting id="videoplayer.usevda" type="boolean" label="13429" help="36160"> + <category id="videoacceleration"> + <group id="3"> + <setting id="videoplayer.usevda" type="boolean" parent="videoplayer.decodingmethod" label="13429" help="36160"> + <dependencies> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> + </dependencies> <level>2</level> <default>true</default> <control type="toggle" /> diff --git a/system/settings/rbp.xml b/system/settings/rbp.xml index 290d809cf9..6f5889f5c2 100644 --- a/system/settings/rbp.xml +++ b/system/settings/rbp.xml @@ -3,15 +3,16 @@ <section id="videos"> <category id="videoplayer"> <group id="2"> - <setting id="videoplayer.rendermethod"> - <visible>false</visible> - </setting> - <setting id="videoplayer.hqscalers"> - <visible>false</visible> - </setting> <setting id="videoplayer.synctype"> <visible>false</visible> </setting> + </group> + </category> + <category id="videoacceleration"> + <group id="1"> + <visible>false</visible> + </group> + <group id="3"> <setting id="videoplayer.useframemtdec"> <visible>false</visible> </setting> diff --git a/system/settings/settings.xml b/system/settings/settings.xml index 45e81678f2..c84b1ebd41 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -164,16 +164,6 @@ <control type="list" format="string" /> </setting> </group> - <group id="4"> - <setting id="locale.audiolanguage" type="string" label="285" help="36119"> - <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"> <group id="1"> @@ -325,14 +315,14 @@ <default>true</default> <control type="toggle" /> </setting> - <setting id="videolibrary.seasonthumbs" type="boolean" label="20382" help="36142"> - <level>4</level> + <setting id="videolibrary.actorthumbs" type="boolean" label="20402" help="36143"> + <level>1</level> <default>true</default> <control type="toggle" /> </setting> - <setting id="videolibrary.actorthumbs" type="boolean" label="20402" help="36143"> + <setting id="myvideos.flatten" type="boolean" label="20456" help="36183"> <level>1</level> - <default>true</default> + <default>false</default> <control type="toggle" /> </setting> <setting id="videolibrary.flattentvshows" type="integer" label="20412" help="36144"> @@ -352,6 +342,8 @@ <default>false</default> <control type="toggle" /> </setting> + </group> + <group id="2"> <setting id="videolibrary.updateonstartup" type="boolean" label="22000" help="36146"> <level>1</level> <default>false</default> @@ -363,7 +355,7 @@ <control type="toggle" /> </setting> </group> - <group id="2"> + <group id="3"> <setting id="videolibrary.cleanup" type="action" label="334" help="36148"> <level>2</level> <control type="button" format="action" /> @@ -380,6 +372,14 @@ </category> <category id="videoplayer" label="14086" help="36151"> <group id="1"> + <setting id="locale.audiolanguage" type="string" label="285" help="36119"> + <level>1</level> + <default>original</default> + <constraints> + <options>streamlanguages</options> + </constraints> + <control type="list" format="string" /> + </setting> <setting id="videoplayer.autoplaynextitem" type="boolean" label="13433" help="36152"> <level>1</level> <default>false</default> @@ -387,6 +387,129 @@ </setting> </group> <group id="2"> + <setting id="videoplayer.adjustrefreshrate" type="integer" label="170" help="36164"> + <level>2</level> + <default>0</default> <!-- ADJUST_REFRESHRATE_OFF --> + <constraints> + <options> + <option label="351">0</option> <!-- ADJUST_REFRESHRATE_OFF --> + <option label="36035">1</option> <!-- ADJUST_REFRESHRATE_ALWAYS --> + <option label="36036">2</option> <!-- ADJUST_REFRESHRATE_ON_STARTSTOP --> + </options> + </constraints> + <control type="spinner" format="string" /> + </setting> + <setting id="videoplayer.pauseafterrefreshchange" type="integer" parent="videoplayer.adjustrefreshrate" label="13550" help="36165"> + <level>2</level> + <default>0</default> + <constraints> + <options>refreshchangedelays</options> + </constraints> + <dependencies> + <dependency type="enable" setting="videoplayer.adjustrefreshrate" operator="!is">0</dependency> <!-- ADJUST_REFRESHRATE_OFF --> + </dependencies> + <control type="spinner" format="string" /> + </setting> + <setting id="videoplayer.usedisplayasclock" type="boolean" label="13510" help="36166"> + <level>2</level> + <default>false</default> + <control type="toggle" /> + </setting> + <setting id="videoplayer.synctype" type="integer" parent="videoplayer.usedisplayasclock" label="13500" help="36167"> + <level>2</level> + <default>2</default> <!-- SYNC_RESAMPLE --> + <constraints> + <options> + <option label="13501">0</option> <!-- SYNC_DISCON --> + <option label="13502">1</option> <!-- SYNC_SKIPDUP --> + <option label="13503">2</option> <!-- SYNC_RESAMPLE --> + </options> + </constraints> + <dependencies> + <dependency type="enable" setting="videoplayer.usedisplayasclock" operator="is">true</dependency> + </dependencies> + <control type="spinner" format="string" /> + </setting> + <setting id="videoplayer.maxspeedadjust" type="number" label="13504" help="36168"> + <level>4</level> + <default>5.0</default> + <constraints> + <minimum>0.0</minimum> + <step>0.1</step> + <maximum>10.0</maximum> + </constraints> + <dependencies> + <dependency type="enable"> + <and> + <condition setting="videoplayer.usedisplayasclock" operator="is">true</condition> + <condition setting="videoplayer.synctype" operator="is">2</condition> <!-- SYNC_RESAMPLE --> + </and> + </dependency> + </dependencies> + <control type="spinner" format="number" /> + </setting> + <setting id="videoplayer.errorinaspect" type="integer" label="22021" help="36170"> + <level>2</level> + <default>0</default> + <constraints> + <minimum label="231">0</minimum> + <step>1</step> + <maximum>20</maximum> + </constraints> + <control type="spinner" format="string"> + <formatlabel>14047</formatlabel> + </control> + </setting> + <setting id="videoplayer.stretch43" type="integer" label="173" help="36171"> + <level>1</level> + <default>0</default> <!-- ViewModeNormal --> + <constraints> + <options> + <option label="630">0</option> <!-- ViewModeNormal --> + <option label="633">3</option> <!-- ViewModeWideZoom --> + <option label="634">4</option> <!-- ViewModeStretch16x9 --> + <option label="631">1</option> <!-- ViewModeZoom --> + </options> + </constraints> + <control type="spinner" format="string" /> + </setting> + </group> + <group id="3"> + <setting id="videoplayer.teletextenabled" type="boolean" label="23050" help="36174"> + <level>1</level> + <default>true</default> + <control type="toggle" /> + </setting> + <setting id="videoplayer.teletextscale" type="boolean" parent="videoplayer.teletextenabled" label="23055" help="36175"> + <level>1</level> + <default>true</default> + <dependencies> + <dependency type="enable" setting="videoplayer.teletextenabled" operator="is">true</dependency> + </dependencies> + <control type="toggle" /> + </setting> + </group> + <group id="4"> + <setting id="videoplayer.stereoscopicplaybackmode" type="integer" label="36520" help="36537"> + <level>2</level> + <default>0</default> + <constraints> + <options> + <option label="36521">0</option> <!-- ASK --> + <option label="36522">1</option> <!-- Preferred mode --> + </options> + </constraints> + <control type="spinner" format="integer" delayed="true"/> + </setting> + <setting id="videoplayer.quitstereomodeonstop" type="boolean" label="36526" help="36538"> + <level>2</level> + <default>true</default> + <control type="toggle" /> + </setting> + </group> + </category> + <category id="videoacceleration" label="14101" help="36430"> + <group id="1"> <setting id="videoplayer.rendermethod" type="integer" label="13415" help="36153"> <level>2</level> <default>0</default> <!-- RENDER_METHOD_AUTO --> @@ -395,7 +518,7 @@ </constraints> <control type="spinner" format="string" /> </setting> - <setting id="videoplayer.hqscalers" type="integer" label="13435" help="36154"> + <setting id="videoplayer.hqscalers" type="integer" parent="videoplayer.rendermethod" label="13435" help="36154"> <level>2</level> <default>0</default> <constraints> @@ -407,7 +530,53 @@ <formatlabel>14047</formatlabel> </control> </setting> - <setting id="videoplayer.useframemtdec" type="boolean" label="13440" help="36423"> + <setting id="videoplayer.usepbo" type="boolean" parent="videoplayer.rendermethod" label="13424" help="36163"> + <requirement>HAS_GL</requirement> + <dependencies> + <dependency type="enable" setting="videoplayer.rendermethod" operator="is">1</dependency> <!-- only supported with ARB --> + </dependencies> + <level>4</level> + <default>true</default> + <control type="toggle" /> + </setting> + </group> + <group id="2"> + <requirement> + <and> + <or> + <condition>HAS_GL</condition> + <condition>HAS_GLESv2</condition> + </or> + <condition>HAVE_LIBVDPAU</condition> + </and> + </requirement> + <setting id="videoplayer.vdpauUpscalingLevel" type="boolean" label="13121" help="36173"> + <level>4</level> + <default>false</default> + <control type="toggle" /> + </setting> + <setting id="videoplayer.vdpau_allow_xrandr" type="boolean" label="13122" help="36172"> + <level>4</level> + <default>false</default> + <control type="toggle" /> + </setting> + </group> + <group id="3"> + <setting id="videoplayer.decodingmethod" type="integer" label="13454" help="36431"> + <level>2</level> + <default>1</default> + <constraints> + <options> + <option label="13455">0</option> <!-- Software --> + <option label="13456">1</option> <!-- Hardware --> + </options> + </constraints> + <control type="spinner" format="integer" /> + </setting> + <setting id="videoplayer.useframemtdec" type="boolean" parent="videoplayer.decodingmethod" label="13440" help="36423"> + <dependencies> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">0</dependency> + </dependencies> <level>2</level> <default>false</default> <control type="toggle" /> @@ -415,7 +584,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -427,7 +596,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -441,7 +610,7 @@ <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 --> + <condition setting="videoplayer.decodingmethod" operator="is">1</condition> </and> </dependency> </dependencies> @@ -452,7 +621,12 @@ <level>3</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.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevdpaumpeg2" operator="is">true</dependency> </dependencies> <control type="toggle" /> @@ -462,7 +636,12 @@ <level>3</level> <default>false</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.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevdpaumpeg4" operator="is">true</dependency> </dependencies> <control type="toggle" /> @@ -472,7 +651,12 @@ <level>3</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.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevdpauvc1" operator="is">true</dependency> </dependencies> <control type="toggle" /> @@ -480,7 +664,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -489,7 +673,12 @@ <setting id="videoplayer.usevaapimpeg2" type="boolean" parent="videoplayer.usevaapi" label="13447" help="13448"> <requirement>HAVE_LIBVA</requirement> <dependencies> - <dependency type="visible" setting="videoplayer.usevaapi" operator="is">true</dependency> + <dependency type="enable"> + <and> + <condition setting="videoplayer.usevaapi" operator="is">true</condition> + <condition setting="videoplayer.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevaapimpeg2" operator="is">true</dependency> </dependencies> <level>3</level> @@ -499,7 +688,12 @@ <setting id="videoplayer.usevaapimpeg4" type="boolean" parent="videoplayer.usevaapi" label="13449" help="13450"> <requirement>HAVE_LIBVA</requirement> <dependencies> - <dependency type="visible" setting="videoplayer.usevaapi" operator="is">true</dependency> + <dependency type="enable"> + <and> + <condition setting="videoplayer.usevaapi" operator="is">true</condition> + <condition setting="videoplayer.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevaapimpeg4" operator="is">true</dependency> </dependencies> <level>3</level> @@ -509,7 +703,12 @@ <setting id="videoplayer.usevaapivc1" type="boolean" parent="videoplayer.usevaapi" label="13451" help="13452"> <requirement>HAVE_LIBVA</requirement> <dependencies> - <dependency type="visible" setting="videoplayer.usevaapi" operator="is">true</dependency> + <dependency type="enable"> + <and> + <condition setting="videoplayer.usevaapi" operator="is">true</condition> + <condition setting="videoplayer.decodingmethod" operator="is">1</condition> + </and> + </dependency> <dependency type="visible" on="property" name="codecoptionvisible" setting="videoplayer.usevaapivc1" operator="is">true</dependency> </dependencies> <level>3</level> @@ -519,7 +718,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -528,7 +727,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -537,7 +736,7 @@ <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 --> + <dependency type="enable" setting="videoplayer.decodingmethod" operator="is">1</dependency> </dependencies> <level>2</level> <default>true</default> @@ -549,153 +748,9 @@ <default>true</default> <control type="toggle" /> </setting> - <setting id="videoplayer.usepbo" type="boolean" label="13424" help="36163"> - <requirement>HAS_GL</requirement> - <level>4</level> - <default>true</default> - <control type="toggle" /> - </setting> - <setting id="videoplayer.adjustrefreshrate" type="integer" label="170" help="36164"> - <level>2</level> - <default>0</default> <!-- ADJUST_REFRESHRATE_OFF --> - <constraints> - <options> - <option label="351">0</option> <!-- ADJUST_REFRESHRATE_OFF --> - <option label="36035">1</option> <!-- ADJUST_REFRESHRATE_ALWAYS --> - <option label="36036">2</option> <!-- ADJUST_REFRESHRATE_ON_STARTSTOP --> - </options> - </constraints> - <control type="spinner" format="string" /> - </setting> - <setting id="videoplayer.pauseafterrefreshchange" type="integer" label="13550" help="36165"> - <level>2</level> - <default>0</default> - <constraints> - <options>refreshchangedelays</options> - </constraints> - <dependencies> - <dependency type="enable" setting="videoplayer.adjustrefreshrate" operator="!is">0</dependency> <!-- ADJUST_REFRESHRATE_OFF --> - </dependencies> - <control type="spinner" format="string" /> - </setting> - <setting id="videoplayer.usedisplayasclock" type="boolean" label="13510" help="36166"> - <level>2</level> - <default>false</default> - <control type="toggle" /> - </setting> - <setting id="videoplayer.synctype" type="integer" label="13500" help="36167"> - <level>2</level> - <default>2</default> <!-- SYNC_RESAMPLE --> - <constraints> - <options> - <option label="13501">0</option> <!-- SYNC_DISCON --> - <option label="13502">1</option> <!-- SYNC_SKIPDUP --> - <option label="13503">2</option> <!-- SYNC_RESAMPLE --> - </options> - </constraints> - <dependencies> - <dependency type="enable" setting="videoplayer.usedisplayasclock" operator="is">true</dependency> - </dependencies> - <control type="spinner" format="string" /> - </setting> - <setting id="videoplayer.maxspeedadjust" type="number" label="13504" help="36168"> - <level>4</level> - <default>5.0</default> - <constraints> - <minimum>0.0</minimum> - <step>0.1</step> - <maximum>10.0</maximum> - </constraints> - <dependencies> - <dependency type="enable"> - <and> - <condition setting="videoplayer.usedisplayasclock" operator="is">true</condition> - <condition setting="videoplayer.synctype" operator="is">2</condition> <!-- SYNC_RESAMPLE --> - </and> - </dependency> - </dependencies> - <control type="spinner" format="number" /> - </setting> - <setting id="videoplayer.errorinaspect" type="integer" label="22021" help="36170"> - <level>2</level> - <default>0</default> - <constraints> - <minimum label="231">0</minimum> - <step>1</step> - <maximum>20</maximum> - </constraints> - <control type="spinner" format="string"> - <formatlabel>14047</formatlabel> - </control> - </setting> - <setting id="videoplayer.stretch43" type="integer" label="173" help="36171"> - <level>1</level> - <default>0</default> <!-- ViewModeNormal --> - <constraints> - <options> - <option label="630">0</option> <!-- ViewModeNormal --> - <option label="633">3</option> <!-- ViewModeWideZoom --> - <option label="634">4</option> <!-- ViewModeStretch16x9 --> - <option label="631">1</option> <!-- ViewModeZoom --> - </options> - </constraints> - <control type="spinner" format="string" /> - </setting> - <setting id="videoplayer.vdpau_allow_xrandr" type="boolean" label="13122" help="36172"> - <requirement>HAVE_LIBVDPAU</requirement> - <level>4</level> - <default>false</default> - <control type="toggle" /> - </setting> - </group> - <group id="3"> - <requirement> - <and> - <or> - <condition>HAS_GL</condition> - <condition>HAS_GLESv2</condition> - </or> - <condition>HAVE_LIBVDPAU</condition> - </and> - </requirement> - <setting id="videoplayer.vdpauUpscalingLevel" type="boolean" label="13121" help="36173"> - <level>4</level> - <default>false</default> - <control type="toggle" /> - </setting> - </group> - <group id="4"> - <setting id="videoplayer.teletextenabled" type="boolean" label="23050" help="36174"> - <level>1</level> - <default>true</default> - <control type="toggle" /> - </setting> - <setting id="videoplayer.teletextscale" type="boolean" label="23055" help="36175"> - <level>1</level> - <default>true</default> - <control type="toggle" /> - </setting> - </group> - <group id="5"> - <setting id="videoplayer.stereoscopicplaybackmode" type="integer" label="36520" help="36537"> - <level>2</level> - <default>0</default> - <constraints> - <options> - <option label="36521">0</option> <!-- ASK --> - <option label="36522">1</option> <!-- Preferred mode --> - </options> - </constraints> - <control type="spinner" format="integer" delayed="true"/> - </setting> - <setting id="videoplayer.quitstereomodeonstop" type="boolean" label="36526" help="36538"> - <level>2</level> - <default>true</default> - <control type="toggle" /> - </setting> </group> </category> - <category id="myvideos" label="14081" help="36176"> + <category id="myvideos" label="14081" help="36601"> <group id="1"> <setting id="myvideos.selectaction" type="integer" label="22079" help="36177"> <level>1</level> @@ -736,44 +791,10 @@ <default>false</default> <control type="toggle" /> </setting> - <setting id="myvideos.flatten" type="boolean" label="20456" help="36183"> - <level>1</level> - <default>false</default> - <control type="toggle" /> - </setting> </group> </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> @@ -787,36 +808,16 @@ <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"> + <setting id="locale.subtitlelanguage" type="string" label="286" help="36120"> <level>1</level> - <default>-</default> + <default>original</default> <constraints> - <addontype>xbmc.subtitle.module</addontype> - <allowempty>true</allowempty> + <options>streamlanguages</options> </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" /> + <control type="list" format="string" /> </setting> </group> - <group id="3"> + <group id="2"> <setting id="subtitles.align" type="integer" label="21460" help="36192"> <level>1</level> <default>0</default> <!-- SUBTITLE_ALIGN_MANUAL --> @@ -831,6 +832,18 @@ </constraints> <control type="spinner" format="string" /> </setting> + <setting id="subtitles.stereoscopicdepth" type="integer" label="36545" help="36546"> + <level>0</level> + <default>0</default> + <constraints> + <minimum>0</minimum> + <step>1</step> + <maximum>10</maximum> + </constraints> + <control type="spinner" format="integer" delayed="true"/> + </setting> + </group> + <group id="3"> <setting id="subtitles.font" type="string" label="14089" help="36185"> <level>1</level> <default>arial.ttf</default> @@ -906,15 +919,54 @@ </setting> </group> <group id="4"> - <setting id="subtitles.stereoscopicdepth" type="integer" label="36545" help="36546"> + <setting id="subtitles.storagemode" type="integer" label="24115" help="24106"> <level>1</level> <default>0</default> <constraints> - <minimum>0</minimum> - <step>1</step> - <maximum>10</maximum> + <options> + <option label="24124">0</option> <!-- SUBTITLE_STORAGEMODE_MOVIEPATH --> + <option label="24125">1</option> <!-- SUBTITLE_STORAGEMODE_CUSTOMPATH --> + </options> </constraints> - <control type="spinner" format="integer" delayed="true"/> + <control type="spinner" format="integer" /> + </setting> + <setting id="subtitles.custompath" parent="subtitles.storagemode" type="path" label="21366" help="36191"> + <level>1</level> + <default></default> + <constraints> + <allowempty>true</allowempty> + <writable>false</writable> + <sources> + <source>videos</source> + </sources> + </constraints> + <dependencies> + <dependency type="enable" setting="subtitles.storagemode" operator="is">1</dependency> + </dependencies> + <control type="button" format="path"> + <heading>657</heading> + </control> + </setting> + <setting id="subtitles.pauseonsearch" type="boolean" label="24105" help="24123"> + <level>1</level> + <default>true</default> + <control type="toggle" /> + </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> </group> </category> @@ -1033,17 +1085,17 @@ <default>true</default> <control type="toggle" /> </setting> - <setting id="pvrmenu.infotimeout" type="boolean" label="19179" help="36213"> + <setting id="pvrmenu.infotimeout" type="boolean" parent="pvrmenu.infoswitch" label="19179" help="36213"> <level>2</level> <default>true</default> <control type="toggle" /> + <dependencies> + <dependency type="enable"> + <condition setting="pvrmenu.infoswitch" operator="is">true</condition> + </dependency> + </dependencies> </setting> - <setting id="pvrmenu.closechannelosdonswitch" type="boolean" label="19229" help="36214"> - <level>2</level> - <default>false</default> - <control type="toggle" /> - </setting> - <setting id="pvrmenu.infotime" type="integer" label="19184" help="36215"> + <setting id="pvrmenu.infotime" type="integer" parent="pvrmenu.infoswitch" label="19184" help="36215"> <level>2</level> <default>5</default> <constraints> @@ -1054,6 +1106,19 @@ <control type="spinner" format="string"> <formatlabel>14045</formatlabel> </control> + <dependencies> + <dependency type="enable"> + <and> + <condition setting="pvrmenu.infoswitch" operator="is">true</condition> + <condition setting="pvrmenu.infotimeout" operator="is">true</condition> + </and> + </dependency> + </dependencies> + </setting> + <setting id="pvrmenu.closechannelosdonswitch" type="boolean" label="19229" help="36214"> + <level>2</level> + <default>false</default> + <control type="toggle" /> </setting> </group> <group id="2"> @@ -1297,6 +1362,9 @@ <step>5</step> <maximum>360</maximum> </constraints> + <dependencies> + <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency> + </dependencies> <control type="spinner" format="string"> <formatlabel>14044</formatlabel> </control> @@ -1307,6 +1375,9 @@ <constraints> <allowempty>true</allowempty> </constraints> + <dependencies> + <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency> + </dependencies> <control type="edit" format="string" /> </setting> <setting id="pvrpowermanagement.prewakeup" type="integer" label="19246" help="36244"> @@ -1317,6 +1388,9 @@ <step>1</step> <maximum>60</maximum> </constraints> + <dependencies> + <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency> + </dependencies> <control type="spinner" format="string"> <formatlabel>14044</formatlabel> </control> @@ -1327,11 +1401,17 @@ <level>2</level> <default>false</default> <control type="toggle" /> + <dependencies> + <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency> + </dependencies> </setting> <setting id="pvrpowermanagement.dailywakeuptime" type="string" label="19248" help="36246"> <level>2</level> <default>00:00:00</default> <control type="edit" format="string" /> + <dependencies> + <dependency type="enable" setting="pvrpowermanagement.enabled" operator="is">true</dependency> + </dependencies> </setting> </group> </category> @@ -1386,7 +1466,7 @@ </category> </section> <section id="music" label="2" help="36253"> - <category id="musiclibrary" label="14022" help="36138"> + <category id="musiclibrary" label="14022" help="36600"> <group id="1"> <setting id="musiclibrary.enabled" type="boolean" label="24022" help="36254"> <level>4</level> @@ -1426,6 +1506,8 @@ <default>false</default> <control type="toggle" /> </setting> + </group> + <group id="3"> <setting id="musiclibrary.updateonstartup" type="boolean" label="22000" help="36259"> <level>1</level> <default>false</default> @@ -1437,7 +1519,7 @@ <control type="toggle" /> </setting> </group> - <group id="3"> + <group id="4"> <setting id="musiclibrary.cleanup" type="action" label="334" help="36148"> <level>2</level> <control type="button" format="action" /> @@ -1478,7 +1560,7 @@ </constraints> <control type="spinner" format="string" /> </setting> - <setting id="musicplayer.replaygainpreamp" type="integer" label="641" help="36268"> + <setting id="musicplayer.replaygainpreamp" type="integer" parent="musicplayer.replaygaintype" label="641" help="36268"> <level>2</level> <default>89</default> <constraints> @@ -1489,8 +1571,11 @@ <control type="spinner" format="string"> <formatlabel>14050</formatlabel> </control> + <dependencies> + <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency> + </dependencies> </setting> - <setting id="musicplayer.replaygainnogainpreamp" type="integer" label="642" help="36269"> + <setting id="musicplayer.replaygainnogainpreamp" type="integer" parent="musicplayer.replaygaintype" label="642" help="36269"> <level>2</level> <default>89</default> <constraints> @@ -1501,11 +1586,17 @@ <control type="spinner" format="string"> <formatlabel>14050</formatlabel> </control> + <dependencies> + <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency> + </dependencies> </setting> - <setting id="musicplayer.replaygainavoidclipping" type="boolean" label="643" help="36270"> + <setting id="musicplayer.replaygainavoidclipping" type="boolean" parent="musicplayer.replaygaintype" label="643" help="36270"> <level>2</level> <default>false</default> <control type="toggle" /> + <dependencies> + <dependency type="enable" setting="musicplayer.replaygaintype" operator="!is">0</dependency> + </dependencies> </setting> </group> <group id="3"> @@ -1521,15 +1612,11 @@ <formatlabel>14045</formatlabel> </control> </setting> - <setting id="musicplayer.crossfadealbumtracks" type="boolean" label="13400" help="36272"> + <setting id="musicplayer.crossfadealbumtracks" type="boolean" parent="musicplayer.crossfade" label="13400" help="36272"> <level>1</level> <default>true</default> <dependencies> - <dependency type="enable"> - <and> - <condition setting="musicplayer.crossfade" operator="!is">0</condition> - </and> - </dependency> + <dependency type="enable" setting="musicplayer.crossfade" operator="!is">0</dependency> </dependencies> <control type="toggle" /> </setting> @@ -1656,7 +1743,7 @@ </constraints> <control type="spinner" format="string" /> </setting> - <setting id="audiocds.quality" type="integer" label="622" help="36288"> + <setting id="audiocds.quality" type="integer" parent="audiocds.encoder" label="622" help="36288"> <level>2</level> <default>0</default> <!-- CDDARIP_QUALITY_CBR --> <constraints> @@ -1677,7 +1764,7 @@ </dependencies> <control type="spinner" format="string" /> </setting> - <setting id="audiocds.bitrate" type="integer" label="623" help="36289"> + <setting id="audiocds.bitrate" type="integer" parent="audiocds.encoder" label="623" help="36289"> <level>2</level> <default>192</default> <constraints> @@ -1698,7 +1785,7 @@ <formatlabel>14048</formatlabel> </control> </setting> - <setting id="audiocds.compressionlevel" type="integer" label="665" help="36290"> + <setting id="audiocds.compressionlevel" type="integer" parent="audiocds.encoder" label="665" help="36290"> <level>2</level> <default>5</default> <constraints> @@ -1931,7 +2018,7 @@ <default>false</default> <control type="toggle" /> </setting> - <setting id="services.upnpannounce" type="boolean" label="20188" help="36324"> + <setting id="services.upnpannounce" type="boolean" parent="services.upnpserver" label="20188" help="36324"> <level>2</level> <default>true</default> <dependencies> @@ -2100,13 +2187,13 @@ <requirement>HAS_ZEROCONF</requirement> <group id="1"> <setting id="services.zeroconf" type="boolean" label="1260" help="36342"> - <level>2</level> + <level>1</level> <default>true</default> <control type="toggle" /> </setting> </group> </category> - <category id="airplay" label="1273" help="36343"> + <category id="airplay" label="1273" help="36602"> <requirement>HAS_AIRPLAY</requirement> <group id="1"> <setting id="services.airplay" type="boolean" label="1270" help="36343"> @@ -2161,7 +2248,7 @@ </category> </section> <section id="system" label="13000" help="36349"> - <category id="videoscreen" label="21373" help="36350"> + <category id="videoscreen" label="21373" help="36603"> <group id="1"> <setting id="videoscreen.screen" type="integer" label="240" help="36351"> <level>0</level> @@ -2174,7 +2261,7 @@ </dependencies> <control type="spinner" format="string" delayed="true" /> </setting> - <setting id="videoscreen.resolution" type="integer" label="169" help="36352"> + <setting id="videoscreen.resolution" type="integer" parent="videoscreen.screen" label="169" help="36352"> <level>0</level> <default>16</default> <!-- RES_DESKTOP --> <constraints> @@ -2187,7 +2274,7 @@ </dependencies> <control type="list" format="string" /> </setting> - <setting id="videoscreen.screenmode" type="string" label="243" help="36353"> + <setting id="videoscreen.screenmode" type="string" parent="videoscreen.screen" label="243" help="36353"> <requirement>IsStandAlone</requirement> <level>0</level> <default>DESKTOP</default> @@ -2204,7 +2291,7 @@ </dependencies> <control type="spinner" format="string" delayed="true" /> </setting> - <setting id="videoscreen.fakefullscreen" type="boolean" label="14083" help="36354"> + <setting id="videoscreen.fakefullscreen" type="boolean" parent="videoscreen.screen" label="14083" help="36354"> <level>2</level> <default>true</default> <dependencies> @@ -2212,7 +2299,7 @@ </dependencies> <control type="toggle" /> </setting> - <setting id="videoscreen.blankdisplays" type="boolean" label="13130" help="36355"> + <setting id="videoscreen.blankdisplays" type="boolean" parent="videoscreen.screen" label="13130" help="36355"> <level>1</level> <default>false</default> <dependencies> @@ -2409,11 +2496,11 @@ <dependencies> <dependency type="visible"> <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.passthrough">audiooutput.passthrough</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition> </and> </dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <constraints> <options>audiodevicespassthrough</options> @@ -2424,26 +2511,22 @@ <level>2</level> <default>true</default> <dependencies> - <dependency type="visible"> - <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> - <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition> - </and> - </dependency> + <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <control type="toggle" /> </setting> - <setting id="audiooutput.ac3transcode" type="boolean" label="667" help="36429"> + <setting id="audiooutput.ac3transcode" type="boolean" parent="audiooutput.ac3passthrough" label="667" help="36429"> <level>2</level> <default>false</default> <dependencies> - <dependency type="visible"> + <dependency type="enable"> <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> + <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.ac3transcode</dependency> </dependencies> <control type="toggle" /> </setting> @@ -2451,13 +2534,8 @@ <level>2</level> <default>false</default> <dependencies> - <dependency type="visible"> - <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> - <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.eac3passthrough</condition> - <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.eac3passthrough</condition> - </and> - </dependency> + <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <control type="toggle" /> </setting> @@ -2465,12 +2543,8 @@ <level>2</level> <default>false</default> <dependencies> - <dependency type="visible"> - <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> - <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</condition> - </and> - </dependency> + <dependency type="visible" on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.passthrough</dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <control type="toggle" /> </setting> @@ -2480,11 +2554,11 @@ <dependencies> <dependency type="visible"> <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.truehdpassthrough</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.truehdpassthrough</condition> </and> </dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <control type="toggle" /> </setting> @@ -2494,11 +2568,11 @@ <dependencies> <dependency type="visible"> <and> - <condition setting="audiooutput.passthrough" operator="is">true</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.config">audiooutput.dtshdpassthrough</condition> <condition on="property" name="aesettingvisible" setting="audiooutput.passthroughdevice">audiooutput.dtshdpassthrough</condition> </and> </dependency> + <dependency type="enable" setting="audiooutput.passthrough" operator="is">true</dependency> </dependencies> <control type="toggle" /> </setting> @@ -2687,7 +2761,7 @@ </dependencies> <control type="button" format="action" /> </setting> - <setting id="debug.screenshotpath" type="path" label="20004" help="36261"> + <setting id="debug.screenshotpath" type="path" label="20004" help="36393"> <level>1</level> <default></default> <constraints> @@ -2708,7 +2782,7 @@ <hidevalue>true</hidevalue> </control> </setting> - <setting id="masterlock.startuplock" type="boolean" label="20076" help="36397"> + <setting id="masterlock.startuplock" type="boolean" parent="masterlock.lockcode" label="20076" help="36397"> <level>2</level> <default>false</default> <dependencies> @@ -2716,7 +2790,7 @@ </dependencies> <control type="toggle" /> </setting> - <setting id="masterlock.maxretries" type="integer" label="12364" help="36398"> + <setting id="masterlock.maxretries" type="integer" label="12362" help="36398"> <level>4</level> <default>3</default> <constraints> diff --git a/tools/Linux/xbmc.sh.in b/tools/Linux/xbmc.sh.in index 2bead97fe4..db99670547 100644 --- a/tools/Linux/xbmc.sh.in +++ b/tools/Linux/xbmc.sh.in @@ -23,6 +23,7 @@ prefix="@prefix@" exec_prefix="@exec_prefix@" datarootdir="@datarootdir@" LIBDIR="@libdir@" +CRASHLOG_DIR=${CRASHLOG_DIR:-$HOME} # Check for some options used by this script while [ "$#" -gt "0" ] @@ -52,7 +53,7 @@ single_stacktrace() print_crash_report() { - FILE="$HOME/xbmc_crashlog-`date +%Y%m%d_%H%M%S`.log" + FILE="$CRASHLOG_DIR/xbmc_crashlog-`date +%Y%m%d_%H%M%S`.log" echo "############## XBMC CRASH LOG ###############" >> $FILE echo >> $FILE echo "################ SYSTEM INFO ################" >> $FILE diff --git a/xbmc/CueDocument.cpp b/xbmc/CueDocument.cpp index f72f51c0a9..5619054792 100644 --- a/xbmc/CueDocument.cpp +++ b/xbmc/CueDocument.cpp @@ -127,25 +127,16 @@ bool CCueDocument::Parse(const CStdString &strFile) else if (StringUtils::StartsWithNoCase(strLine,"TITLE")) { if (m_iTotalTracks == -1) // No tracks yet - ExtractQuoteInfo(strLine, m_strAlbum); - else if (!ExtractQuoteInfo(strLine, m_Track[m_iTotalTracks].strTitle)) - { - // lets manage tracks titles without quotes - CStdString titleNoQuote = strLine.substr(5); - StringUtils::TrimLeft(titleNoQuote); - if (!titleNoQuote.empty()) - { - g_charsetConverter.unknownToUTF8(titleNoQuote); - m_Track[m_iTotalTracks].strTitle = titleNoQuote; - } - } + m_strAlbum = ExtractInfo(strLine.substr(5)); + else + m_Track[m_iTotalTracks].strTitle = ExtractInfo(strLine.substr(5)); } else if (StringUtils::StartsWithNoCase(strLine,"PERFORMER")) { if (m_iTotalTracks == -1) // No tracks yet - ExtractQuoteInfo(strLine, m_strArtist); + m_strArtist = ExtractInfo(strLine.substr(9)); else // New Artist for this track - ExtractQuoteInfo(strLine, m_Track[m_iTotalTracks].strArtist); + m_Track[m_iTotalTracks].strArtist = ExtractInfo(strLine.substr(9)); } else if (StringUtils::StartsWithNoCase(strLine,"TRACK")) { @@ -176,7 +167,7 @@ bool CCueDocument::Parse(const CStdString &strFile) if(strCurrentFile.size() > 0) bCurrentFileChanged = true; - ExtractQuoteInfo(strLine, strCurrentFile); + strCurrentFile = ExtractInfo(strLine.substr(4)); // Resolve absolute paths (if needed). if (strCurrentFile.length() > 0) @@ -190,16 +181,7 @@ bool CCueDocument::Parse(const CStdString &strFile) } else if (StringUtils::StartsWithNoCase(strLine,"REM GENRE")) { - if (!ExtractQuoteInfo(strLine, m_strGenre)) - { - CStdString genreNoQuote = strLine.substr(9); - StringUtils::TrimLeft(genreNoQuote); - if (!genreNoQuote.empty()) - { - g_charsetConverter.unknownToUTF8(genreNoQuote); - m_strGenre = genreNoQuote; - } - } + m_strGenre = ExtractInfo(strLine.substr(9)); } else if (StringUtils::StartsWithNoCase(strLine,"REM REPLAYGAIN_ALBUM_GAIN")) m_replayGainAlbumGain = (float)atof(strLine.substr(26).c_str()); @@ -299,19 +281,26 @@ bool CCueDocument::ReadNextLine(CStdString &szLine) } //////////////////////////////////////////////////////////////////////////////////// -// Function: ExtractQuoteInfo() +// Function: ExtractInfo() // Extracts the information in quotes from the string line, returning it in quote //////////////////////////////////////////////////////////////////////////////////// -bool CCueDocument::ExtractQuoteInfo(const CStdString &line, CStdString "e) +CStdString CCueDocument::ExtractInfo(const CStdString &line) { - quote.clear(); size_t left = line.find('\"'); - if (left == std::string::npos) return false; - size_t right = line.find('\"', left + 1); - if (right == std::string::npos) return false; - quote = line.substr(left + 1, right - left - 1); - g_charsetConverter.unknownToUTF8(quote); - return true; + if (left != std::string::npos) + { + size_t right = line.find('\"', left + 1); + if (right != std::string::npos) + { + CStdString text = line.substr(left + 1, right - left - 1); + g_charsetConverter.unknownToUTF8(text); + return text; + } + } + CStdString text = line; + StringUtils::Trim(text); + g_charsetConverter.unknownToUTF8(text); + return text; } //////////////////////////////////////////////////////////////////////////////////// diff --git a/xbmc/CueDocument.h b/xbmc/CueDocument.h index 01d28e7ec4..650ffd2409 100644 --- a/xbmc/CueDocument.h +++ b/xbmc/CueDocument.h @@ -79,7 +79,7 @@ private: std::vector<CCueTrack> m_Track; bool ReadNextLine(CStdString &strLine); - bool ExtractQuoteInfo(const CStdString &line, CStdString "e); + CStdString ExtractInfo(const CStdString &line); int ExtractTimeFromIndex(const CStdString &index); int ExtractNumericInfo(const CStdString &info); bool ResolvePath(CStdString &strPath, const CStdString &strBase); diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp index ccc8fdfcdf..e87d29970b 100644 --- a/xbmc/addons/AddonInstaller.cpp +++ b/xbmc/addons/AddonInstaller.cpp @@ -733,7 +733,10 @@ void CAddonInstallJob::OnPostInstall(bool reloadAddon) toast->ResetTimer(); toast->Close(true); } - CSettings::Get().SetString("lookandfeel.skin",m_addon->ID().c_str()); + if (CSettings::Get().GetString("lookandfeel.skin") == m_addon->ID()) + CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin", true); + else + CSettings::Get().SetString("lookandfeel.skin",m_addon->ID().c_str()); } } diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp index fb968ebfa5..b5ddb88713 100644 --- a/xbmc/addons/AddonManager.cpp +++ b/xbmc/addons/AddonManager.cpp @@ -371,13 +371,13 @@ bool CAddonMgr::ReloadSettings(const CStdString &id) return false; } -bool CAddonMgr::GetAllOutdatedAddons(VECADDONS &addons, bool enabled /*= true*/) +bool CAddonMgr::GetAllOutdatedAddons(VECADDONS &addons, bool getLocalVersion /*= false*/) { CSingleLock lock(m_critSection); for (int i = ADDON_UNKNOWN+1; i < ADDON_VIZ_LIBRARY; ++i) { VECADDONS temp; - if (CAddonMgr::Get().GetAddons((TYPE)i, temp, enabled)) + if (CAddonMgr::Get().GetAddons((TYPE)i, temp, true)) { AddonPtr repoAddon; for (unsigned int j = 0; j < temp.size(); j++) @@ -396,17 +396,21 @@ bool CAddonMgr::GetAllOutdatedAddons(VECADDONS &addons, bool enabled /*= true*/) if (temp[j]->Version() < repoAddon->Version() && !m_database.IsAddonBlacklisted(temp[j]->ID(), repoAddon->Version().c_str())) + { + if (getLocalVersion) + repoAddon->Props().version = temp[j]->Version(); addons.push_back(repoAddon); + } } } } return !addons.empty(); } -bool CAddonMgr::HasOutdatedAddons(bool enabled /*= true*/) +bool CAddonMgr::HasOutdatedAddons() { VECADDONS dummy; - return GetAllOutdatedAddons(dummy,enabled); + return GetAllOutdatedAddons(dummy); } bool CAddonMgr::GetAddons(const TYPE &type, VECADDONS &addons, bool enabled /* = true */) diff --git a/xbmc/addons/AddonManager.h b/xbmc/addons/AddonManager.h index 734996696e..8beef1fb63 100644 --- a/xbmc/addons/AddonManager.h +++ b/xbmc/addons/AddonManager.h @@ -99,15 +99,14 @@ namespace ADDON bool ReloadSettings(const CStdString &id); /*! \brief Get all addons with available updates \param addons List to fill with all outdated addons - \param enabled Whether to get only enabled or disabled addons + \param getLocalVersion Whether to get the local addon version or the addon verion from the repository \return True if there are outdated addons otherwise false */ - bool GetAllOutdatedAddons(VECADDONS &addons, bool enabled = true); + bool GetAllOutdatedAddons(VECADDONS &addons, bool getLocalVersion = false); /*! \brief Checks if there is any addon with available updates - \param enabled Whether to check only enabled or disabled addons \return True if there are outdated addons otherwise false */ - bool HasOutdatedAddons(bool enabled = true); + bool HasOutdatedAddons(); CStdString GetString(const CStdString &id, const int number); const char *GetTranslatedString(const cp_cfg_element_t *root, const char *tag); diff --git a/xbmc/addons/GUIWindowAddonBrowser.cpp b/xbmc/addons/GUIWindowAddonBrowser.cpp index d3156df936..4d966b9015 100644 --- a/xbmc/addons/GUIWindowAddonBrowser.cpp +++ b/xbmc/addons/GUIWindowAddonBrowser.cpp @@ -23,6 +23,7 @@ #include "addons/Repository.h" #include "GUIDialogAddonInfo.h" #include "GUIDialogAddonSettings.h" +#include "dialogs/GUIDialogBusy.h" #include "dialogs/GUIDialogYesNo.h" #include "dialogs/GUIDialogSelect.h" #include "dialogs/GUIDialogFileBrowser.h" @@ -208,6 +209,20 @@ bool CGUIWindowAddonBrowser::OnContextButton(int itemNumber, return CGUIMediaWindow::OnContextButton(itemNumber, button); } +class UpdateAddons : public IRunnable +{ + virtual void Run() + { + VECADDONS addons; + CAddonMgr::Get().GetAllOutdatedAddons(addons, true); // get local + for (VECADDONS::iterator i = addons.begin(); i != addons.end(); ++i) + { + CStdString referer = StringUtils::Format("Referer=%s-%s.zip",(*i)->ID().c_str(),(*i)->Version().c_str()); + CAddonInstaller::Get().Install((*i)->ID(), true, referer); // force install + } + } +}; + bool CGUIWindowAddonBrowser::OnClick(int iItem) { CFileItemPtr item = m_vecItems->Get(iItem); @@ -222,6 +237,14 @@ bool CGUIWindowAddonBrowser::OnClick(int iItem) CAddonInstaller::Get().InstallFromZip(path); return true; } + if (item->GetPath() == "addons://update_all/") + { + // fire off a threaded update of all addons + UpdateAddons updater; + if (CGUIDialogBusy::Wait(&updater)) + return Update("addons://downloading/"); + return true; + } if (!item->m_bIsFolder) { // cancel a downloading job diff --git a/xbmc/addons/Repository.cpp b/xbmc/addons/Repository.cpp index a6daf8dad6..e83de95706 100644 --- a/xbmc/addons/Repository.cpp +++ b/xbmc/addons/Repository.cpp @@ -252,6 +252,7 @@ bool CRepositoryUpdateJob::DoWork() CTextureDatabase textureDB; textureDB.Open(); textureDB.BeginMultipleExecute(); + VECADDONS notifications; for (map<string, AddonPtr>::const_iterator i = addons.begin(); i != addons.end(); ++i) { // manager told us to feck off @@ -287,12 +288,8 @@ bool CRepositoryUpdateJob::DoWork() else CAddonInstaller::Get().Install(addon->ID(), true, referer); } - else if (CSettings::Get().GetBool("general.addonnotifications")) - { - CGUIDialogKaiToast::QueueNotification(addon->Icon(), - g_localizeStrings.Get(24061), - addon->Name(),TOAST_DISPLAY_TIME,false,TOAST_DISPLAY_TIME); - } + else + notifications.push_back(addon); } // Check if we should mark the add-on as broken. We may have a newer version @@ -320,6 +317,17 @@ bool CRepositoryUpdateJob::DoWork() } database.CommitMultipleExecute(); textureDB.CommitMultipleExecute(); + if (!notifications.empty() && CSettings::Get().GetBool("general.addonnotifications")) + { + if (notifications.size() == 1) + CGUIDialogKaiToast::QueueNotification(notifications[0]->Icon(), + g_localizeStrings.Get(24061), + notifications[0]->Name(),TOAST_DISPLAY_TIME,false,TOAST_DISPLAY_TIME); + else + CGUIDialogKaiToast::QueueNotification("", + g_localizeStrings.Get(24001), + g_localizeStrings.Get(24061),TOAST_DISPLAY_TIME,false,TOAST_DISPLAY_TIME); + } return true; } diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp index d34c507ff3..1fde9c8511 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp @@ -105,21 +105,9 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device) break; } } - m_format.m_sampleRate = sampleRate; - // default to AE_FMT_S16LE, - // then check if we can support the requested format. - AEDataFormat dataFormat = AE_FMT_S16LE; - for (size_t i = 0; i < m_info.m_dataFormats.size(); i++) - { - if (m_format.m_dataFormat == m_info.m_dataFormats[i]) - { - dataFormat = m_format.m_dataFormat; - break; - } - } - - m_format.m_dataFormat = dataFormat; + m_format.m_sampleRate = sampleRate; + m_format.m_dataFormat = AE_FMT_S16LE; m_format.m_channelLayout = m_info.m_channels; m_format.m_frameSize = m_format.m_channelLayout.Count() * (CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8); diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkDARWINIOS.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkDARWINIOS.cpp index fa49cba2fb..0043934b44 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkDARWINIOS.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkDARWINIOS.cpp @@ -252,7 +252,6 @@ unsigned int CAAudioUnitSink::write(uint8_t *data, unsigned int frames) void CAAudioUnitSink::drain() { - CCriticalSection mutex; unsigned int bytes = m_buffer->GetReadSize(); while (bytes) { diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkDARWINOSX.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkDARWINOSX.cpp index ad914d8856..a9e123dbb1 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkDARWINOSX.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkDARWINOSX.cpp @@ -576,7 +576,6 @@ unsigned int CAESinkDARWINOSX::AddPackets(uint8_t *data, unsigned int frames, bo void CAESinkDARWINOSX::Drain() { - CCriticalSection mutex; int bytes = m_buffer->GetReadSize(); while (bytes) { diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp index a3f0bf2798..2b57961d54 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp @@ -21,7 +21,7 @@ #define INITGUID #include "AESinkDirectSound.h" -#include "utils/Log.h" +#include "utils/log.h" #include <initguid.h> #include <list> #include "threads/SingleLock.h" diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp index 127fc62ea5..e25da7b619 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp +++ b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp @@ -483,8 +483,6 @@ bool CAESinkPULSE::Initialize(AEAudioFormat &format, std::string &device) } 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); @@ -594,7 +592,7 @@ bool CAESinkPULSE::Initialize(AEAudioFormat &format, std::string &device) 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_passthrough ? NULL : &m_Volume, NULL) < 0) + 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)), NULL, NULL) < 0) { CLog::Log(LOGERROR, "PulseAudio: Failed to connect stream to output"); pa_threaded_mainloop_unlock(m_MainLoop); @@ -752,26 +750,6 @@ void CAESinkPULSE::Drain() pa_threaded_mainloop_unlock(m_MainLoop); } -void CAESinkPULSE::SetVolume(float volume) -{ - if (m_IsAllocated && !m_passthrough) - { - 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; diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h index 39fda73a86..256a68edee 100644 --- a/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h +++ b/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.h @@ -44,9 +44,6 @@ public: 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); bool IsInitialized(); CCriticalSection m_sec; @@ -64,7 +61,6 @@ private: unsigned int m_Channels; pa_stream *m_Stream; - pa_cvolume m_Volume; pa_context *m_Context; pa_threaded_mainloop *m_MainLoop; diff --git a/xbmc/cores/AudioEngine/Sinks/osx/CoreAudioStream.cpp b/xbmc/cores/AudioEngine/Sinks/osx/CoreAudioStream.cpp index 4b7a5795e0..05fd5bf359 100644 --- a/xbmc/cores/AudioEngine/Sinks/osx/CoreAudioStream.cpp +++ b/xbmc/cores/AudioEngine/Sinks/osx/CoreAudioStream.cpp @@ -24,6 +24,15 @@ #include "utils/log.h" #include "utils/StdString.h" +// defines taken from CoreAudio/AudioHardware.h from SDK 10.8 +#if !defined kAudioStreamTerminalTypeHDMI +#define kAudioStreamTerminalTypeHDMI 'hdmi' +#endif + +#if !defined kAudioStreamTerminalTypeDisplayPort +#define kAudioStreamTerminalTypeDisplayPort 'dprt' +#endif + CCoreAudioStream::CCoreAudioStream() : m_StreamId (0 ) { diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp index 08a261a89b..f37d090334 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp @@ -48,6 +48,7 @@ #include "RenderCapture.h" #include "RenderFormats.h" #include "cores/IPlayer.h" +#include "cores/dvdplayer/DVDCodecs/DVDCodecUtils.h" #ifdef HAVE_LIBVDPAU #include "cores/dvdplayer/DVDCodecs/Video/VDPAU.h" @@ -3116,9 +3117,11 @@ void CLinuxRendererGL::ToRGBFrame(YV12Image* im, unsigned flipIndexPlane, unsign int srcStride[4] = {}; int srcFormat = -1; - if (m_format == RENDER_FMT_YUV420P) + if (m_format == RENDER_FMT_YUV420P || + m_format == RENDER_FMT_YUV420P10 || + m_format == RENDER_FMT_YUV420P16) { - srcFormat = PIX_FMT_YUV420P; + srcFormat = CDVDCodecUtils::PixfmtFromEFormat(m_format); for (int i = 0; i < 3; i++) { src[i] = im->plane[i]; diff --git a/xbmc/cores/VideoRenderers/WinRenderer.cpp b/xbmc/cores/VideoRenderers/WinRenderer.cpp index 6c16a97875..48794a7f49 100644 --- a/xbmc/cores/VideoRenderers/WinRenderer.cpp +++ b/xbmc/cores/VideoRenderers/WinRenderer.cpp @@ -140,10 +140,11 @@ void CWinRenderer::SelectRenderMethod() { CLog::Log(LOGNOTICE, "D3D: rendering method forced to DXVA processor"); m_renderMethod = RENDER_DXVA; - if (!m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format)) + if (!m_processor || !m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format)) { CLog::Log(LOGNOTICE, "D3D: unable to open DXVA processor"); - m_processor->Close(); + if (m_processor) + m_processor->Close(); m_renderMethod = RENDER_INVALID; } } @@ -155,13 +156,16 @@ void CWinRenderer::SelectRenderMethod() { case RENDER_METHOD_DXVAHD: case RENDER_METHOD_DXVA: - m_renderMethod = RENDER_DXVA; - if (m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format)) - break; - else + if (!m_processor || !m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format)) { CLog::Log(LOGNOTICE, "D3D: unable to open DXVA processor"); - m_processor->Close(); + if (m_processor) + m_processor->Close(); + } + else + { + m_renderMethod = RENDER_DXVA; + break; } // Drop through to pixel shader case RENDER_METHOD_AUTO: @@ -397,8 +401,9 @@ unsigned int CWinRenderer::PreInit() m_iRequestedMethod = CSettings::Get().GetInt("videoplayer.rendermethod"); - if (g_advancedSettings.m_DXVAForceProcessorRenderer || m_iRequestedMethod == RENDER_METHOD_DXVA - || m_iRequestedMethod == RENDER_METHOD_DXVAHD) + if (g_advancedSettings.m_DXVAForceProcessorRenderer + || m_iRequestedMethod == RENDER_METHOD_DXVA + || m_iRequestedMethod == RENDER_METHOD_DXVAHD) { if (m_iRequestedMethod != RENDER_METHOD_DXVA && CSysInfo::IsWindowsVersionAtLeast(CSysInfo::WindowsVersionWin7)) { @@ -407,29 +412,30 @@ unsigned int CWinRenderer::PreInit() { CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA-HD processor - skipping"); SAFE_DELETE(m_processor); - m_processor = new DXVA::CProcessor(); } - else - return 0; } - else + if (!m_processor) + { m_processor = new DXVA::CProcessor(); - - if (!m_processor->PreInit()) - CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA2 processor - skipping"); - else - return 0; + if (!m_processor->PreInit()) + { + CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA2 processor - skipping"); + SAFE_DELETE(m_processor); + } + } } - - if (g_Windowing.IsTextureFormatOk(D3DFMT_L16, 0)) + // allow other color spaces besides YV12 in case DXVA rendering is not used or not available + if (!m_processor || (m_iRequestedMethod != RENDER_METHOD_DXVA && m_iRequestedMethod != RENDER_METHOD_DXVAHD)) { - m_formats.push_back(RENDER_FMT_YUV420P10); - m_formats.push_back(RENDER_FMT_YUV420P16); + if (g_Windowing.IsTextureFormatOk(D3DFMT_L16, 0)) + { + m_formats.push_back(RENDER_FMT_YUV420P10); + m_formats.push_back(RENDER_FMT_YUV420P16); + } + m_formats.push_back(RENDER_FMT_NV12); + m_formats.push_back(RENDER_FMT_YUYV422); + m_formats.push_back(RENDER_FMT_UYVY422); } - m_formats.push_back(RENDER_FMT_NV12); - m_formats.push_back(RENDER_FMT_YUYV422); - m_formats.push_back(RENDER_FMT_UYVY422); - return 0; } diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp index a028d5e920..9b6a34df86 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp @@ -34,6 +34,7 @@ #endif #include "settings/AdvancedSettings.h" #include "settings/Settings.h" +#include "settings/VideoSettings.h" #include "utils/log.h" #include "boost/shared_ptr.hpp" #include "threads/Atomics.h" @@ -70,7 +71,7 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)avctx->opaque; // if frame threading is enabled hw accel is not allowed - if(!ctx->IsHardwareAllowed() || CSettings::Get().GetBool("videoplayer.useframemtdec")) + if((EDECODEMETHOD) CSettings::Get().GetInt("videoplayer.decodingmethod") != VS_DECODEMETHOD_HARDWARE || !ctx->IsHardwareAllowed()) return ctx->m_dllAvCodec.avcodec_default_get_format(avctx, fmt); const PixelFormat * cur = fmt; @@ -249,7 +250,7 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options CLog::Log(LOGDEBUG,"CDVDVideoCodecFFmpeg::Open() Keep default threading for Hi10p: %d", m_pCodecContext->thread_type); } - else if (CSettings::Get().GetBool("videoplayer.useframemtdec")) + else if ((EDECODEMETHOD) CSettings::Get().GetInt("videoplayer.decodingmethod") == VS_DECODEMETHOD_SOFTWARE && CSettings::Get().GetBool("videoplayer.useframemtdec")) { CLog::Log(LOGDEBUG,"CDVDVideoCodecFFmpeg::Open() Keep default threading %d by videoplayer.useframemtdec", m_pCodecContext->thread_type); diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp index cfd3dc32a4..b056c8bc31 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -141,14 +141,13 @@ class PredicateSubtitleFilter private: std::string audiolang; bool original; - bool preferexternal; public: /** \brief The class' operator() decides if the given (subtitle) SelectionStream is relevant wrt. * preferred subtitle language and audio language. If the subtitle is relevant <B>false</B> false is returned. * * A subtitle is relevant if * - it was previously selected, or - * - it's an external sub and "prefer external subs was selected", or + * - it's an external sub, or * - it's a forced sub and "original stream's language" was selected, or * - it's a forced sub and its language matches the audio's language, or * - it's a default sub, or @@ -156,21 +155,17 @@ public: */ PredicateSubtitleFilter(std::string& lang) : audiolang(lang), - original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")), - preferexternal(CSettings::Get().GetBool("subtitles.preferexternal")) + original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")) { }; - + bool operator()(const SelectionStream& ss) const { if (ss.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream) return false; - if (preferexternal) - { - if(ss.source == STREAM_SOURCE_DEMUX_SUB || ss.source == STREAM_SOURCE_TEXT) - return false; - } + if(STREAM_SOURCE_MASK(ss.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(ss.source) == STREAM_SOURCE_TEXT) + return false; if ((ss.flags & CDemuxStream::FLAG_FORCED) && (original || g_LangCodeExpander.CompareLangCodes(ss.language, audiolang))) return false; @@ -217,10 +212,9 @@ static bool PredicateAudioPriority(const SelectionStream& lh, const SelectionStr * * A subtitle lh is 'better than' a subtitle rh (in evaluation order) if * - lh was previously selected, or -* - lh is an external sub and "prefer external subs was selected" and rh not, or +* - lh is an external sub and rh not, or * - lh is a forced sub and ("original stream's language" was selected or subtitles are off) and rh not, or * - lh is an external sub and its language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or -* - lh is an external sub and rh not, or * - lh is language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or * - lh is a default sub and rh not */ @@ -229,14 +223,12 @@ class PredicateSubtitlePriority private: std::string audiolang; bool original; - bool preferextsubs; bool subson; PredicateSubtitleFilter filter; public: PredicateSubtitlePriority(std::string& lang) : audiolang(lang), original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")), - preferextsubs(CSettings::Get().GetBool("subtitles.preferexternal")), subson(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn), filter(lang) { @@ -255,14 +247,12 @@ public: PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream); - if (preferextsubs) - { - PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB - , rh.source == STREAM_SOURCE_DEMUX_SUB); + // prefer external subs + PREDICATE_RETURN(STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_DEMUX_SUB + , STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_DEMUX_SUB); - PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT - , rh.source == STREAM_SOURCE_TEXT); - } + PREDICATE_RETURN(STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_TEXT + , STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_TEXT); if(!subson || original) { @@ -276,16 +266,10 @@ public: CStdString subtitle_language = g_langInfo.GetSubtitleLanguage(); if(!original) { - PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) - , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language)); + PREDICATE_RETURN((STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) + , (STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language)); } - PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB - , rh.source == STREAM_SOURCE_DEMUX_SUB); - - PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT - , rh.source == STREAM_SOURCE_TEXT); - if(!original) { PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) @@ -578,17 +562,9 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options) #endif Create(); - if(!m_ready.WaitMSec(g_advancedSettings.m_videoBusyDialogDelay_ms)) - { - CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); - if(dialog) - { - dialog->Show(); - while(!m_ready.WaitMSec(1)) - g_windowManager.ProcessRenderLoop(false); - dialog->Close(); - } - } + + // wait for the ready event + CGUIDialogBusy::WaitOnEvent(m_ready, g_advancedSettings.m_videoBusyDialogDelay_ms, false); // Playback might have been stopped due to some error if (m_bStop || m_bAbortRequest) diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp index 4fbd3bd81a..a3d3928db6 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.cpp +++ b/xbmc/cores/omxplayer/OMXPlayer.cpp @@ -181,14 +181,13 @@ class PredicateSubtitleFilter private: std::string audiolang; bool original; - bool preferexternal; public: /** \brief The class' operator() decides if the given (subtitle) SelectionStream is relevant wrt. * preferred subtitle language and audio language. If the subtitle is relevant <B>false</B> false is returned. * * A subtitle is relevant if * - it was previously selected, or - * - it's an external sub and "prefer external subs was selected", or + * - it's an external sub, or * - it's a forced sub and "original stream's language" was selected, or * - it's a forced sub and its language matches the audio's language, or * - it's a default sub, or @@ -196,21 +195,17 @@ public: */ PredicateSubtitleFilter(std::string& lang) : audiolang(lang), - original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")), - preferexternal(CSettings::Get().GetBool("subtitles.preferexternal")) + original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")) { }; - + bool operator()(const OMXSelectionStream& ss) const { if (ss.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream) return false; - if (preferexternal) - { - if(ss.source == STREAM_SOURCE_DEMUX_SUB || ss.source == STREAM_SOURCE_TEXT) - return false; - } + if(STREAM_SOURCE_MASK(ss.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(ss.source) == STREAM_SOURCE_TEXT) + return false; if ((ss.flags & CDemuxStream::FLAG_FORCED) && (original || g_LangCodeExpander.CompareLangCodes(ss.language, audiolang))) return false; @@ -261,10 +256,9 @@ static bool PredicateAudioPriority(const OMXSelectionStream& lh, const OMXSelect * * A subtitle lh is 'better than' a subtitle rh (in evaluation order) if * - lh was previously selected, or -* - lh is an external sub and "prefer external subs was selected" and rh not, or +* - lh is an external sub and rh not, or * - lh is a forced sub and ("original stream's language" was selected or subtitles are off) and rh not, or * - lh is an external sub and its language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or -* - lh is an external sub and rh not, or * - lh is language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or * - lh is a default sub and rh not */ @@ -273,14 +267,12 @@ class PredicateSubtitlePriority private: std::string audiolang; bool original; - bool preferextsubs; bool subson; PredicateSubtitleFilter filter; public: PredicateSubtitlePriority(std::string& lang) : audiolang(lang), original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")), - preferextsubs(CSettings::Get().GetBool("subtitles.preferexternal")), subson(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn), filter(lang) { @@ -299,14 +291,12 @@ public: PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream); - if (preferextsubs) - { - PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB - , rh.source == STREAM_SOURCE_DEMUX_SUB); + // prefer external subs + PREDICATE_RETURN(STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_DEMUX_SUB + , STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_DEMUX_SUB); - PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT - , rh.source == STREAM_SOURCE_TEXT); - } + PREDICATE_RETURN(STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_TEXT + , STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_TEXT); if(!subson || original) { @@ -320,16 +310,10 @@ public: CStdString subtitle_language = g_langInfo.GetSubtitleLanguage(); if(!original) { - PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) - , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language)); + PREDICATE_RETURN((STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(lh.source) == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) + , (STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_DEMUX_SUB || STREAM_SOURCE_MASK(rh.source) == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language)); } - PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB - , rh.source == STREAM_SOURCE_DEMUX_SUB); - - PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT - , rh.source == STREAM_SOURCE_TEXT); - if(!original) { PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language) diff --git a/xbmc/dialogs/GUIDialogBusy.cpp b/xbmc/dialogs/GUIDialogBusy.cpp index 79dba075e2..e9ba7d347e 100644 --- a/xbmc/dialogs/GUIDialogBusy.cpp +++ b/xbmc/dialogs/GUIDialogBusy.cpp @@ -21,9 +21,64 @@ #include "GUIDialogBusy.h" #include "guilib/GUIProgressControl.h" #include "guilib/GUIWindowManager.h" +#include "threads/Thread.h" #define PROGRESS_CONTROL 10 +class CBusyWaiter : public CThread +{ +public: + CBusyWaiter(IRunnable *runnable) : CThread(runnable, "waiting") + { + } + + bool Wait() + { + Create(); + return CGUIDialogBusy::WaitOnEvent(m_done); + } + + virtual void Process() + { + CThread::Process(); + m_done.Set(); + } + CEvent m_done; +}; + +bool CGUIDialogBusy::Wait(IRunnable *runnable) +{ + if (!runnable) + return false; + CBusyWaiter waiter(runnable); + return waiter.Wait(); +} + +bool CGUIDialogBusy::WaitOnEvent(CEvent &event, unsigned int displaytime /* = 100 */, bool allowCancel /* = true */) +{ + bool cancelled = false; + if (!event.WaitMSec(displaytime)) + { + // throw up the progress + CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); + if (dialog) + { + dialog->Show(); + while(!event.WaitMSec(1)) + { + g_windowManager.ProcessRenderLoop(false); + if (allowCancel && dialog->IsCanceled()) + { + cancelled = true; + break; + } + } + dialog->Close(); + } + } + return !cancelled; +} + CGUIDialogBusy::CGUIDialogBusy(void) : CGUIDialog(WINDOW_DIALOG_BUSY, "DialogBusy.xml"), m_bLastVisible(false) { diff --git a/xbmc/dialogs/GUIDialogBusy.h b/xbmc/dialogs/GUIDialogBusy.h index d839a24507..0efc2a5783 100644 --- a/xbmc/dialogs/GUIDialogBusy.h +++ b/xbmc/dialogs/GUIDialogBusy.h @@ -22,6 +22,8 @@ #include "guilib/GUIDialog.h" +class IRunnable; +class CEvent; class CGUIDialogBusy: public CGUIDialog { @@ -37,6 +39,23 @@ public: void SetProgress(float progress); bool IsCanceled() { return m_bCanceled; } + + /*! \brief Wait for a runnable to execute off-thread. + Creates a thread to run the given runnable, and while waiting + it displays the busy dialog. + \param runnable the IRunnable to run. + \return true if the runnable completes, false if the user cancels early. + */ + static bool Wait(IRunnable *runnable); + + /*! \brief Wait on an event while displaying the busy dialog. + Throws up the busy dialog after the given time. + \param even the CEvent to wait on. + \param displaytime the time in ms to wait prior to showing the busy dialog (defaults to 100ms) + \param allowCancel whether the user can cancel the wait, defaults to true. + \return true if the event completed, false if cancelled. + */ + static bool WaitOnEvent(CEvent &event, unsigned int timeout = 100, bool allowCancel = true); protected: virtual void Show_Internal(); // modeless'ish bool m_bCanceled; diff --git a/xbmc/dialogs/GUIDialogSelect.cpp b/xbmc/dialogs/GUIDialogSelect.cpp index 453994c2e8..3e9fb102cf 100644 --- a/xbmc/dialogs/GUIDialogSelect.cpp +++ b/xbmc/dialogs/GUIDialogSelect.cpp @@ -132,6 +132,14 @@ bool CGUIDialogSelect::OnMessage(CGUIMessage& message) break; case GUI_MSG_SETFOCUS: { + // make sure the additional button is focused in case the list is empty + // (otherwise it is impossible to navigate to the additional button) + if (m_vecList->IsEmpty() && m_bButtonEnabled && + m_viewControl.HasControl(message.GetControlId())) + { + SET_CONTROL_FOCUS(CONTROL_BUTTON, 0); + return true; + } if (m_viewControl.HasControl(message.GetControlId()) && m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); diff --git a/xbmc/epg/Epg.cpp b/xbmc/epg/Epg.cpp index 5440f82cdf..4f5f07d4bf 100644 --- a/xbmc/epg/Epg.cpp +++ b/xbmc/epg/Epg.cpp @@ -198,7 +198,7 @@ bool CEpg::InfoTagNow(CEpgInfoTag &tag, bool bUpdateIfNeeded /* = true */) if (bUpdateIfNeeded) { - CDateTime lastActiveTag; + CEpgInfoTagPtr lastActiveTag; /* one of the first items will always match if the list is sorted */ for (map<CDateTime, CEpgInfoTagPtr>::const_iterator it = m_tags.begin(); it != m_tags.end(); it++) @@ -210,14 +210,14 @@ bool CEpg::InfoTagNow(CEpgInfoTag &tag, bool bUpdateIfNeeded /* = true */) return true; } else if (it->second->WasActive()) - lastActiveTag = it->first; + lastActiveTag = it->second; } - /* there might be a gap between the last and next event. just return the last if found */ - map<CDateTime, CEpgInfoTagPtr>::const_iterator it = m_tags.find(lastActiveTag); - if (it != m_tags.end()) + /* there might be a gap between the last and next event. return the last if found and it ended not more than 5 minutes ago */ + if (lastActiveTag && + lastActiveTag->EndAsUTC() + CDateTimeSpan(0, 0, 5, 0) >= CDateTime::GetUTCDateTime()) { - tag = *it->second; + tag = *lastActiveTag; return true; } } diff --git a/xbmc/filesystem/AddonsDirectory.cpp b/xbmc/filesystem/AddonsDirectory.cpp index efb994ab42..71a717537a 100644 --- a/xbmc/filesystem/AddonsDirectory.cpp +++ b/xbmc/filesystem/AddonsDirectory.cpp @@ -58,6 +58,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it VECADDONS addons; // get info from repository + bool groupAddons = true; bool reposAsFolders = true; if (path.GetHostName().Equals("enabled")) { @@ -68,6 +69,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it else if (path.GetHostName().Equals("disabled")) { // grab all disabled addons, including disabled repositories reposAsFolders = false; + groupAddons = false; CAddonMgr::Get().GetAllAddons(addons, false, true); items.SetProperty("reponame",g_localizeStrings.Get(24039)); items.SetLabel(g_localizeStrings.Get(24039)); @@ -75,12 +77,14 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it else if (path.GetHostName().Equals("outdated")) { reposAsFolders = false; + groupAddons = false; CAddonMgr::Get().GetAllOutdatedAddons(addons); items.SetProperty("reponame",g_localizeStrings.Get(24043)); items.SetLabel(g_localizeStrings.Get(24043)); } else if (path.GetHostName().Equals("repos")) { + groupAddons = false; CAddonMgr::Get().GetAddons(ADDON_REPOSITORY,addons,true); items.SetLabel(g_localizeStrings.Get(24033)); // Get Add-ons } @@ -133,7 +137,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it if (path.GetFileName().empty()) { - if (!path.GetHostName().Equals("repos")) + if (groupAddons) { for (int i=ADDON_UNKNOWN+1;i<ADDON_VIZ_LIBRARY;++i) { @@ -196,6 +200,13 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it item->SetLabel(g_localizeStrings.Get(24032)); items.Add(item); } + else if (path.GetHostName().Equals("outdated") && items.Size() > 1) + { + CFileItemPtr item(new CFileItem("addons://update_all/", true)); + item->SetLabel(g_localizeStrings.Get(24122)); + item->SetSpecialSort(SortSpecialOnTop); + items.Add(item); + } return true; } diff --git a/xbmc/filesystem/windows/WINSMBDirectory.cpp b/xbmc/filesystem/windows/WINSMBDirectory.cpp index 044e5ddc0a..060c9e2f19 100644 --- a/xbmc/filesystem/windows/WINSMBDirectory.cpp +++ b/xbmc/filesystem/windows/WINSMBDirectory.cpp @@ -95,14 +95,11 @@ bool CWINSMBDirectory::GetDirectory(const CStdString& strPath1, CFileItemList &i memset(&wfd, 0, sizeof(wfd)); //rebuild the URL - std::string strUNCShare = "\\\\?\\UNC\\" + (std::string)url.GetHostName() + "\\" + URIUtils::FixSlashesAndDups(url.GetFileName(), '\\'); - - if(!URIUtils::HasSlashAtEnd(strUNCShare)) - strUNCShare.append("\\"); - - std::wstring strSearchMask; - g_charsetConverter.utf8ToW(strUNCShare, strSearchMask, false, false, true); - strSearchMask += L"*"; + std::wstring strSearchMask(CWIN32Util::ConvertPathToWin32Form(GetLocal(strPath))); + if (!strSearchMask.empty() && strSearchMask[strSearchMask.length() - 1] == '\\') + strSearchMask += L'*'; + else + strSearchMask += L"\\*"; FILETIME localTime; CAutoPtrFind hFind ( FindFirstFileW(strSearchMask.c_str(), &wfd)); diff --git a/xbmc/guilib/GUIFixedListContainer.cpp b/xbmc/guilib/GUIFixedListContainer.cpp index 24dbeb337e..658dc31bdc 100644 --- a/xbmc/guilib/GUIFixedListContainer.cpp +++ b/xbmc/guilib/GUIFixedListContainer.cpp @@ -283,7 +283,7 @@ bool CGUIFixedListContainer::HasPreviousPage() const bool CGUIFixedListContainer::HasNextPage() const { - return (GetOffset() != (int)m_items.size() - m_itemsPerPage && (int)m_items.size() >= m_itemsPerPage); + return (GetOffset() < (int)m_items.size() - m_itemsPerPage && (int)m_items.size() >= m_itemsPerPage); } int CGUIFixedListContainer::GetCurrentPage() const diff --git a/xbmc/guilib/GUIFont.cpp b/xbmc/guilib/GUIFont.cpp index 63ecf856bf..a7ee668324 100644 --- a/xbmc/guilib/GUIFont.cpp +++ b/xbmc/guilib/GUIFont.cpp @@ -204,7 +204,7 @@ void CGUIFont::DrawScrollingText(float x, float y, const vecColors &colors, colo if (!text.size() || ClippedRegionIsEmpty(x, y, maxWidth, alignment)) return; // nothing to render - maxWidth = ROUND(maxWidth / g_graphicsContext.GetGUIScaleX()); + maxWidth = ROUND((maxWidth + scrollInfo.pixelPos) / g_graphicsContext.GetGUIScaleX()); float charWidth = GetCharWidth(scrollInfo.GetCurrentChar(text)); float offset; @@ -239,9 +239,9 @@ void CGUIFont::DrawScrollingText(float x, float y, const vecColors &colors, colo vecColors shadowColors; for (unsigned int i = 0; i < renderColors.size(); i++) shadowColors.push_back((renderColors[i] & 0xff000000) != 0 ? shadowColor : 0); - m_font->DrawTextInternal(x - offset + 1, y + 1, shadowColors, renderText, alignment, maxWidth + scrollInfo.pixelPos + m_font->GetLineHeight(2.0f), scroll); + m_font->DrawTextInternal(x - offset + 1, y + 1, shadowColors, renderText, alignment, maxWidth + m_font->GetLineHeight(2.0f), scroll); } - m_font->DrawTextInternal(x - offset, y, renderColors, renderText, alignment, maxWidth + scrollInfo.pixelPos + m_font->GetLineHeight(2.0f), scroll); + m_font->DrawTextInternal(x - offset, y, renderColors, renderText, alignment, maxWidth + m_font->GetLineHeight(2.0f), scroll); g_graphicsContext.RestoreClipRegion(); } diff --git a/xbmc/guilib/GUIScrollBarControl.cpp b/xbmc/guilib/GUIScrollBarControl.cpp index 20715a9883..2fb40e394c 100644 --- a/xbmc/guilib/GUIScrollBarControl.cpp +++ b/xbmc/guilib/GUIScrollBarControl.cpp @@ -286,13 +286,13 @@ void CGUIScrollBar::SetFromPosition(const CPoint &point) { float fPercent; if (m_orientation == VERTICAL) - fPercent = (point.y - m_guiBackground.GetYPosition() - 0.5f*m_guiBarFocus.GetHeight()) / m_guiBackground.GetHeight(); + fPercent = (point.y - m_guiBackground.GetYPosition() - 0.5f*m_guiBarFocus.GetHeight()) / (m_guiBackground.GetHeight() - m_guiBarFocus.GetHeight()); else - fPercent = (point.x - m_guiBackground.GetXPosition() - 0.5f*m_guiBarFocus.GetWidth()) / m_guiBackground.GetWidth(); + fPercent = (point.x - m_guiBackground.GetXPosition() - 0.5f*m_guiBarFocus.GetWidth()) / (m_guiBackground.GetWidth() - m_guiBarFocus.GetWidth()); if (fPercent < 0) fPercent = 0; if (fPercent > 1) fPercent = 1; - int offset = (int)(floor(fPercent * m_numItems + 0.5f)); + int offset = (int)(floor(fPercent * (m_numItems - m_pageSize) + 0.5f)); if (m_offset != offset) { diff --git a/xbmc/guilib/GUITextureGLES.cpp b/xbmc/guilib/GUITextureGLES.cpp index df47ced8f9..7bc8a1d175 100644 --- a/xbmc/guilib/GUITextureGLES.cpp +++ b/xbmc/guilib/GUITextureGLES.cpp @@ -260,20 +260,12 @@ void CGUITextureGLES::DrawQuad(const CRect &rect, color_t color, CBaseTexture *t glUniform4f(uniColLoc, col[0] / 255.0f, col[1] / 255.0f, col[2] / 255.0f, col[3] / 255.0f); - // Setup vertex position values - #define ROUND_TO_PIXEL(x) (float)(MathUtils::round_int(x)) - ver[0][0] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalXCoord(rect.x1, rect.y1)); - ver[0][1] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalYCoord(rect.x1, rect.y1)); - ver[0][2] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalZCoord(rect.x1, rect.y1)); - ver[1][0] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalXCoord(rect.x2, rect.y1)); - ver[1][1] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalYCoord(rect.x2, rect.y1)); - ver[1][2] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalZCoord(rect.x2, rect.y1)); - ver[2][0] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalXCoord(rect.x2, rect.y2)); - ver[2][1] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalYCoord(rect.x2, rect.y2)); - ver[2][2] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalZCoord(rect.x2, rect.y2)); - ver[3][0] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalXCoord(rect.x1, rect.y2)); - ver[3][1] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalYCoord(rect.x1, rect.y2)); - ver[3][2] = ROUND_TO_PIXEL(g_graphicsContext.ScaleFinalZCoord(rect.x1, rect.y2)); + ver[0][0] = ver[3][0] = rect.x1; + ver[0][1] = ver[1][1] = rect.y1; + ver[1][0] = ver[2][0] = rect.x2; + ver[2][1] = ver[3][1] = rect.y2; + ver[0][2] = ver[1][2] = ver[2][2] = ver[3][2]= 0; + if (texture) { // Setup texture coordinates diff --git a/xbmc/input/SDLJoystick.cpp b/xbmc/input/SDLJoystick.cpp index 03341782f6..e1ff570050 100644 --- a/xbmc/input/SDLJoystick.cpp +++ b/xbmc/input/SDLJoystick.cpp @@ -115,11 +115,16 @@ void CJoystick::Initialize() // Details: Total Axis: 37 Total Hats: 0 Total Buttons: 57 // NOTICE: Enabled Joystick: Microsoft Microsoft® 2.4GHz Transceiver v6.0 // Details: Total Axis: 37 Total Hats: 0 Total Buttons: 57 + // also checks if we have at least 1 button, fixes + // NOTICE: Enabled Joystick: ST LIS3LV02DL Accelerometer + // Details: Total Axis: 3 Total Hats: 0 Total Buttons: 0 int num_axis = SDL_JoystickNumAxes(joy); int num_buttons = SDL_JoystickNumButtons(joy); - if (num_axis > 20 && num_buttons > 50) - CLog::Log(LOGNOTICE, "Your Joystick seems to be a Keyboard, ignoring it: %s Axis: %d Buttons: %d", - SDL_JoystickName(i), num_axis, num_buttons); + if ((num_axis > 20 && num_buttons > 50) || num_buttons == 0) + { + CLog::Log(LOGNOTICE, "Ignoring Joystick %s Axis: %d Buttons: %d: invalid device properties", + SDL_JoystickName(i), num_axis, num_buttons); + } else { m_JoystickNames.push_back(string(SDL_JoystickName(i))); diff --git a/xbmc/network/Network.cpp b/xbmc/network/Network.cpp index 9f7a2cc31d..0d98f9f30f 100644 --- a/xbmc/network/Network.cpp +++ b/xbmc/network/Network.cpp @@ -29,6 +29,7 @@ #ifdef TARGET_WINDOWS #include "utils/SystemInfo.h" #include "win32/WIN32Util.h" +#include "utils/CharsetConverter.h" #endif /* slightly modified in_ether taken from the etherboot project (http://sourceforge.net/projects/etherboot) */ @@ -162,8 +163,14 @@ CStdString CNetwork::GetHostName(void) char hostName[128]; if (gethostname(hostName, sizeof(hostName))) return CStdString("unknown"); - else - return CStdString(hostName); + + std::string hostStr; +#ifdef TARGET_WINDOWS + g_charsetConverter.systemToUtf8(hostName, hostStr); +#else + hostStr = hostName; +#endif + return hostStr; } CNetworkInterface* CNetwork::GetFirstConnectedInterface() diff --git a/xbmc/settings/VideoSettings.h b/xbmc/settings/VideoSettings.h index 293f363bc6..32a2e8dcae 100644 --- a/xbmc/settings/VideoSettings.h +++ b/xbmc/settings/VideoSettings.h @@ -92,6 +92,12 @@ enum ESCALINGMETHOD VS_SCALINGMETHOD_MAX // do not use and keep as last enum value. }; +enum EDECODEMETHOD +{ + VS_DECODEMETHOD_SOFTWARE=0, + VS_DECODEMETHOD_HARDWARE=1 +}; + typedef enum { ViewModeNormal = 0, ViewModeZoom, diff --git a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp index 825c22ff1e..7b5aad31c4 100644 --- a/xbmc/settings/dialogs/GUIDialogContentSettings.cpp +++ b/xbmc/settings/dialogs/GUIDialogContentSettings.cpp @@ -401,7 +401,7 @@ bool CGUIDialogContentSettings::Show(ADDON::ScraperPtr& scraper, VIDEO::SScanSet dialog->m_scraper = scraper; // toast selected but disabled scrapers if (!scraper->Enabled()) - CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(24023), scraper->Name(), 2000, true); + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(24024), scraper->Name(), 2000, true); } dialog->m_bScanRecursive = (settings.recurse > 0 && !settings.parent_name) || (settings.recurse > 1 && settings.parent_name); diff --git a/xbmc/settings/lib/SettingsManager.cpp b/xbmc/settings/lib/SettingsManager.cpp index b2255cb0f0..53334bd676 100644 --- a/xbmc/settings/lib/SettingsManager.cpp +++ b/xbmc/settings/lib/SettingsManager.cpp @@ -860,6 +860,13 @@ bool CSettingsManager::OnSettingsLoading() return true; } +void CSettingsManager::OnSettingsUnloaded() +{ + CSharedLock lock(m_critical); + for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) + (*it)->OnSettingsUnloaded(); +} + void CSettingsManager::OnSettingsLoaded() { CSharedLock lock(m_critical); diff --git a/xbmc/settings/lib/SettingsManager.h b/xbmc/settings/lib/SettingsManager.h index ee6c77486f..30a997fcab 100644 --- a/xbmc/settings/lib/SettingsManager.h +++ b/xbmc/settings/lib/SettingsManager.h @@ -393,6 +393,7 @@ private: // implementation of ISettingsHandler virtual bool OnSettingsLoading(); virtual void OnSettingsLoaded(); + virtual void OnSettingsUnloaded(); virtual bool OnSettingsSaving() const; virtual void OnSettingsSaved() const; virtual void OnSettingsCleared(); diff --git a/xbmc/storage/android/AndroidStorageProvider.cpp b/xbmc/storage/android/AndroidStorageProvider.cpp index 8fc56f426d..d9f8e03815 100644 --- a/xbmc/storage/android/AndroidStorageProvider.cpp +++ b/xbmc/storage/android/AndroidStorageProvider.cpp @@ -27,6 +27,10 @@ #include "utils/RegExp.h" #include "utils/StringUtils.h" #include "utils/URIUtils.h" +#include <cstdio> +#include <cstring> +#include <cstdlib> +#include <map> CAndroidStorageProvider::CAndroidStorageProvider() { @@ -95,23 +99,66 @@ void CAndroidStorageProvider::GetLocalDrives(VECSOURCES &localDrives) void CAndroidStorageProvider::GetRemovableDrives(VECSOURCES &removableDrives) { // mounted usb disks - std::vector<CStdString> result; - CRegExp reMount; + char* buf = NULL; + FILE* pipe; + std::map<std::string, std::string> result; + CRegExp reMount; reMount.RegComp("^(.+?)\\s+(.+?)\\s+(.+?)\\s"); - char line[1024]; - FILE* pipe = fopen("/proc/mounts", "r"); + /* /proc/mounts is only guaranteed atomic for the current read + * operation, so we need to read it all at once. + */ + if ((pipe = fopen("/proc/mounts", "r"))) + { + char* new_buf; + size_t buf_len = 4096; + + while ((new_buf = (char*)realloc(buf, buf_len * sizeof(char)))) + { + size_t nread; + + buf = new_buf; + nread = fread(buf, sizeof(char), buf_len, pipe); + + if (nread == buf_len) + { + rewind(pipe); + buf_len *= 2; + } + else + { + buf[nread] = '\0'; + if (!feof(pipe)) + new_buf = NULL; + break; + } + } + + if (!new_buf) + { + free(buf); + buf = NULL; + } + fclose(pipe); + } + else + CLog::Log(LOGERROR, "Cannot read mount points"); - if (pipe) + if (buf) { - while (fgets(line, sizeof(line) - 1, pipe)) + char* line; + char* saveptr = NULL; + + line = strtok_r(buf, "\n", &saveptr); + + while (line) { if (reMount.RegFind(line) != -1) { bool accepted = false; + std::string device = reMount.GetReplaceString("\\1"); 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 @@ -123,22 +170,23 @@ void CAndroidStorageProvider::GetRemovableDrives(VECSOURCES &removableDrives) || strcmp(fs, "fusefs") == 0 || strcmp(fs, "hfs") == 0) accepted = true; - // Ignore everything but usb - if (!StringUtils::StartsWith(mountStr, "/mnt/usb")) + // Ignore sdcards + if (!StringUtils::StartsWith(device, "/dev/block/vold/") || + mountStr.find("sdcard") != std::string::npos) accepted = false; if(accepted) - result.push_back(mount); + result[device] = mountStr; } + line = strtok_r(NULL, "\n", &saveptr); } - fclose(pipe); - } else - CLog::Log(LOGERROR, "Cannot read mount points"); + free(buf); + } - for (unsigned int i = 0; i < result.size(); i++) + for (std::map<std::string, std::string>::const_iterator i = result.begin(); i != result.end(); ++i) { CMediaSource share; - share.strPath = unescape(result[i]); + share.strPath = unescape(i->second); share.strName = URIUtils::GetFileName(share.strPath); share.m_ignore = true; removableDrives.push_back(share); diff --git a/xbmc/utils/GroupUtils.cpp b/xbmc/utils/GroupUtils.cpp index 8fd9909678..9d810fab21 100644 --- a/xbmc/utils/GroupUtils.cpp +++ b/xbmc/utils/GroupUtils.cpp @@ -36,9 +36,13 @@ typedef map<int, set<CFileItemPtr> > SetMap; bool GroupUtils::Group(GroupBy groupBy, const std::string &baseDir, const CFileItemList &items, CFileItemList &groupedItems, GroupAttribute groupAttributes /* = GroupAttributeNone */) { - if (items.Size() <= 0 || groupBy == GroupByNone) + if (groupBy == GroupByNone) return false; + // nothing to do if there are no items to group + if (items.Size() <= 0) + return true; + SetMap setMap; for (int index = 0; index < items.Size(); index++) { diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp index 95b809114f..1751291307 100644 --- a/xbmc/utils/URIUtils.cpp +++ b/xbmc/utils/URIUtils.cpp @@ -1059,6 +1059,39 @@ std::string URIUtils::FixSlashesAndDups(const std::string& path, const char slas } +std::string URIUtils::CanonicalizePath(const std::string& path, const char slashCharacter /*= '\\'*/) +{ + assert(slashCharacter == '\\' || slashCharacter == '/'); + + if (path.empty()) + return path; + + const std::string slashStr(1, slashCharacter); + vector<std::string> pathVec, resultVec; + StringUtils::Tokenize(path, pathVec, slashStr); + + for (vector<std::string>::const_iterator it = pathVec.begin(); it != pathVec.end(); ++it) + { + if (*it == ".") + { /* skip - do nothing */ } + else if (*it == ".." && !resultVec.empty() && resultVec.back() != "..") + resultVec.pop_back(); + else + resultVec.push_back(*it); + } + + std::string result; + if (path[0] == slashCharacter) + result.push_back(slashCharacter); // add slash at the begin + + result += StringUtils::Join(resultVec, slashStr); + + if (path[path.length() - 1] == slashCharacter && !result.empty() && result[result.length() - 1] != slashCharacter) + result.push_back(slashCharacter); // add slash at the end if result isn't empty and result isn't "/" + + return result; +} + CStdString URIUtils::AddFileToFolder(const CStdString& strFolder, const CStdString& strFile) { diff --git a/xbmc/utils/URIUtils.h b/xbmc/utils/URIUtils.h index cf7ea3f257..3613825bcf 100644 --- a/xbmc/utils/URIUtils.h +++ b/xbmc/utils/URIUtils.h @@ -132,6 +132,18 @@ public: static void RemoveSlashAtEnd(std::string& strFolder); static bool CompareWithoutSlashAtEnd(const CStdString& strPath1, const CStdString& strPath2); static std::string FixSlashesAndDups(const std::string& path, const char slashCharacter = '/', const size_t startFrom = 0); + /** + * Convert path to form without duplicated slashes and without relative directories + * Strip duplicated slashes + * Resolve and remove relative directories ("/../" and "/./") + * Will ignore slashes with other direction than specified + * Will not resolve path starting from relative directory + * @warning Don't use with "protocol://path"-style URLs + * @param path string to process + * @param slashCharacter character to use as directory delimiter + * @return transformed path + */ + static std::string CanonicalizePath(const std::string& path, const char slashCharacter = '\\'); static void CreateArchivePath(CStdString& strUrlPath, const CStdString& strType, diff --git a/xbmc/video/dialogs/GUIDialogSubtitles.cpp b/xbmc/video/dialogs/GUIDialogSubtitles.cpp index 162c0a1b46..e072070ea0 100644 --- a/xbmc/video/dialogs/GUIDialogSubtitles.cpp +++ b/xbmc/video/dialogs/GUIDialogSubtitles.cpp @@ -404,6 +404,8 @@ void CGUIDialogSubtitles::OnDownloadComplete(const CFileItemList *items, const s return; } + SUBTITLE_STORAGEMODE storageMode = (SUBTITLE_STORAGEMODE) CSettings::Get().GetInt("subtitles.storagemode"); + // Get (unstacked) path const CStdString &strCurrentFile = g_application.CurrentUnstackedItem().GetPath(); @@ -419,7 +421,7 @@ void CGUIDialogSubtitles::OnDownloadComplete(const CFileItemList *items, const s strDownloadPath = subPath; strFileName = URIUtils::GetFileName(strCurrentFile); - if (CSettings::Get().GetBool("subtitles.savetomoviefolder") && + if (storageMode == SUBTITLE_STORAGEMODE_MOVIEPATH && CUtil::SupportsWriteFileOperations(strCurrentFilePath)) { strDestPath = strCurrentFilePath; diff --git a/xbmc/video/dialogs/GUIDialogSubtitles.h b/xbmc/video/dialogs/GUIDialogSubtitles.h index f72e9fdb91..614e31f5f6 100644 --- a/xbmc/video/dialogs/GUIDialogSubtitles.h +++ b/xbmc/video/dialogs/GUIDialogSubtitles.h @@ -25,6 +25,12 @@ #include "threads/CriticalSection.h" #include "utils/JobManager.h" +enum SUBTITLE_STORAGEMODE +{ + SUBTITLE_STORAGEMODE_MOVIEPATH = 0, + SUBTITLE_STORAGEMODE_CUSTOMPATH +}; + class CFileItem; class CFileItemList; diff --git a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp index 17b24201cc..fbf21466c2 100644 --- a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp @@ -1449,7 +1449,7 @@ bool CGUIDialogVideoInfo::GetSetForMovie(const CFileItem *movieItem, CFileItemPt CFileItemList listItems; CStdString baseDir = "videodb://movies/sets/"; - if (!CDirectory::GetDirectory(baseDir, listItems) || listItems.Size() <= 0) + if (!CDirectory::GetDirectory(baseDir, listItems)) return false; listItems.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle); diff --git a/xbmc/video/windows/GUIWindowFullScreen.cpp b/xbmc/video/windows/GUIWindowFullScreen.cpp index a4f5729f6e..090b8fc64b 100644 --- a/xbmc/video/windows/GUIWindowFullScreen.cpp +++ b/xbmc/video/windows/GUIWindowFullScreen.cpp @@ -424,6 +424,8 @@ bool CGUIWindowFullScreen::OnMessage(CGUIMessage& message) if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_CUTTER); if (pDialog) pDialog->Close(true); + pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_SUBTITLES); + if (pDialog) pDialog->Close(true); CGUIWindow::OnMessage(message); diff --git a/xbmc/win32/IMMNotificationClient.h b/xbmc/win32/IMMNotificationClient.h new file mode 100644 index 0000000000..aa07537f6b --- /dev/null +++ b/xbmc/win32/IMMNotificationClient.h @@ -0,0 +1,167 @@ +//#pragma once +/* + * Copyright (C) 2014 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 <Audioclient.h> +#include <mmdeviceapi.h> +#include "system.h" // for SAFE_RELEASE +#include "utils/log.h" +#include "cores/AudioEngine/AEFactory.h" + +class CMMNotificationClient : public IMMNotificationClient +{ + LONG _cRef; + IMMDeviceEnumerator *_pEnumerator; + + +public: + CMMNotificationClient() : _cRef(1), _pEnumerator(NULL) + { + } + + ~CMMNotificationClient() + { + SAFE_RELEASE(_pEnumerator); + } + + // IUnknown methods -- AddRef, Release, and QueryInterface + + ULONG STDMETHODCALLTYPE AddRef() + { + return InterlockedIncrement(&_cRef); + } + + ULONG STDMETHODCALLTYPE Release() + { + ULONG ulRef = InterlockedDecrement(&_cRef); + if (0 == ulRef) + { + delete this; + } + return ulRef; + } + + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, VOID **ppvInterface) + { + if (IID_IUnknown == riid) + { + AddRef(); + *ppvInterface = (IUnknown*)this; + } + else if (__uuidof(IMMNotificationClient) == riid) + { + AddRef(); + *ppvInterface = (IMMNotificationClient*)this; + } + else + { + *ppvInterface = NULL; + return E_NOINTERFACE; + } + return S_OK; + } + + // Callback methods for device-event notifications. + + HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId) + { + // if the default device changes this function is called four times. + // therefore we call CAEFactory::DeviceChange() only for one role. + char *pszFlow = "?????"; + char *pszRole = "?????"; + + switch (flow) + { + case eRender: + pszFlow = "eRender"; + break; + case eCapture: + pszFlow = "eCapture"; + break; + } + + switch (role) + { + case eConsole: + pszRole = "eConsole"; + break; + case eMultimedia: + pszRole = "eMultimedia"; + break; + case eCommunications: + pszRole = "eCommunications"; + CAEFactory::DeviceChange(); + break; + } + + CLog::Log(LOGDEBUG, "%s: New default device: flow = %s, role = %s", __FUNCTION__, pszFlow, pszRole); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR pwstrDeviceId) + { + CLog::Log(LOGDEBUG, "%s: Added device: %s", __FUNCTION__, pwstrDeviceId); + CAEFactory::DeviceChange(); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR pwstrDeviceId) + { + CLog::Log(LOGDEBUG, "%s: Removed device: %s", __FUNCTION__, pwstrDeviceId); + CAEFactory::DeviceChange(); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState) + { + char *pszState = "?????"; + + switch (dwNewState) + { + case DEVICE_STATE_ACTIVE: + pszState = "ACTIVE"; + break; + case DEVICE_STATE_DISABLED: + pszState = "DISABLED"; + break; + case DEVICE_STATE_NOTPRESENT: + pszState = "NOTPRESENT"; + break; + case DEVICE_STATE_UNPLUGGED: + pszState = "UNPLUGGED"; + break; + } + CLog::Log(LOGDEBUG, "%s: New device state is DEVICE_STATE_%s", __FUNCTION__, pszState); + CAEFactory::DeviceChange(); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR pwstrDeviceId, const PROPERTYKEY key) + { + CLog::Log(LOGDEBUG, "%s: Changed device property of %s is {%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x}#%d", + __FUNCTION__, pwstrDeviceId, key.fmtid.Data1, key.fmtid.Data2, key.fmtid.Data3, + key.fmtid.Data4[0], key.fmtid.Data4[1], + key.fmtid.Data4[2], key.fmtid.Data4[3], + key.fmtid.Data4[4], key.fmtid.Data4[5], + key.fmtid.Data4[6], key.fmtid.Data4[7], + key.pid); + return S_OK; + } +};
\ No newline at end of file diff --git a/xbmc/win32/WIN32Util.cpp b/xbmc/win32/WIN32Util.cpp index 03e71f01cf..1fb64fa25c 100644 --- a/xbmc/win32/WIN32Util.cpp +++ b/xbmc/win32/WIN32Util.cpp @@ -481,20 +481,25 @@ std::wstring CWIN32Util::ConvertPathToWin32Form(const std::string& pathUtf8) if (pathUtf8.compare(0, 2, "\\\\", 2) != 0) // pathUtf8 don't start from "\\" { // assume local file path in form 'C:\Folder\File.ext' std::string formedPath("\\\\?\\"); // insert "\\?\" prefix - formedPath += URIUtils::FixSlashesAndDups(pathUtf8, '\\'); // fix duplicated and forward slashes + formedPath += URIUtils::CanonicalizePath(URIUtils::FixSlashesAndDups(pathUtf8, '\\'), '\\'); // fix duplicated and forward slashes, resolve relative path convertResult = g_charsetConverter.utf8ToW(formedPath, result, false, false, true); } - else if (pathUtf8.compare(0, 8, "\\\\?\\UNC\\", 8) == 0) // pathUtf8 starts from "\\?\UNC\" - convertResult = g_charsetConverter.utf8ToW(URIUtils::FixSlashesAndDups(pathUtf8, '\\', 7), result, false, false, true); // fix duplicated and forward slashes, don't touch "\\?\UNC" prefix - + { + std::string formedPath("\\\\?\\UNC"); // start from "\\?\UNC" prefix + formedPath += URIUtils::CanonicalizePath(URIUtils::FixSlashesAndDups(pathUtf8.substr(7), '\\'), '\\'); // fix duplicated and forward slashes, resolve relative path, don't touch "\\?\UNC" prefix, + convertResult = g_charsetConverter.utf8ToW(formedPath, result, false, false, true); + } else if (pathUtf8.compare(0, 4, "\\\\?\\", 4) == 0) // pathUtf8 starts from "\\?\", but it's not UNC path - convertResult = g_charsetConverter.utf8ToW(URIUtils::FixSlashesAndDups(pathUtf8, '\\', 4), result, false, false, true); // fix duplicated and forward slashes, don't touch "\\?\" prefix - + { + std::string formedPath("\\\\?"); // start from "\\?" prefix + formedPath += URIUtils::CanonicalizePath(URIUtils::FixSlashesAndDups(pathUtf8.substr(3), '\\'), '\\'); // fix duplicated and forward slashes, resolve relative path, don't touch "\\?" prefix, + convertResult = g_charsetConverter.utf8ToW(formedPath, result, false, false, true); + } else // pathUtf8 starts from "\\", but not from "\\?\UNC\" { // assume UNC path in form '\\server\share\folder\file.ext' - std::string formedPath("\\\\?\\UNC\\"); // append "\\?\UNC\" prefix - formedPath.append(URIUtils::FixSlashesAndDups(pathUtf8, '\\', 2), 2, std::string::npos); // fix duplicated and forward slashes, skip and cut out two first slashes + std::string formedPath("\\\\?\\UNC"); // append "\\?\UNC" prefix + formedPath += URIUtils::CanonicalizePath(URIUtils::FixSlashesAndDups(pathUtf8), '\\'); // fix duplicated and forward slashes, resolve relative path, transform "\\" prefix to single "\" convertResult = g_charsetConverter.utf8ToW(formedPath, result, false, false, true); } diff --git a/xbmc/win32/XBMC_PC.cpp b/xbmc/win32/XBMC_PC.cpp index 97b552e3c9..fa20f4a04d 100644 --- a/xbmc/win32/XBMC_PC.cpp +++ b/xbmc/win32/XBMC_PC.cpp @@ -32,6 +32,8 @@ #include "GUIInfoManager.h" #include "utils/StringUtils.h" #include "utils/CPUInfo.h" +#include <mmdeviceapi.h> +#include "win32/IMMNotificationClient.h" #ifndef _DEBUG #define XBMC_TRACK_EXCEPTIONS @@ -221,12 +223,28 @@ INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR commandLine, INT ) } #endif + HRESULT hr = E_FAIL; + IMMDeviceEnumerator *pEnumerator = NULL; + CMMNotificationClient cMMNC; + hr = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&pEnumerator); + if(SUCCEEDED(hr)) + { + pEnumerator->RegisterEndpointNotificationCallback(&cMMNC); + SAFE_RELEASE(pEnumerator); + } + g_application.Run(); // clear previously set timer resolution timeEndPeriod(1); // the end + hr = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&pEnumerator); + if(SUCCEEDED(hr)) + { + pEnumerator->UnregisterEndpointNotificationCallback(&cMMNC); + SAFE_RELEASE(pEnumerator); + } WSACleanup(); CoUninitialize(); diff --git a/xbmc/windowing/egl/WinSystemEGL.cpp b/xbmc/windowing/egl/WinSystemEGL.cpp index 2f063e6807..dfc4672e67 100644 --- a/xbmc/windowing/egl/WinSystemEGL.cpp +++ b/xbmc/windowing/egl/WinSystemEGL.cpp @@ -306,7 +306,9 @@ bool CWinSystemEGL::DestroyWindow() bool CWinSystemEGL::ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) { CRenderSystemGLES::ResetRenderSystem(newWidth, newHeight, true, 0); - SetVSyncImpl(m_iVSyncMode); + int vsync_mode = CSettings::Get().GetInt("videoscreen.vsync"); + if (vsync_mode != VSYNC_DRIVER) + SetVSyncImpl(m_iVSyncMode); return true; } @@ -314,7 +316,9 @@ bool CWinSystemEGL::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl { CreateNewWindow("", fullScreen, res, NULL); CRenderSystemGLES::ResetRenderSystem(res.iWidth, res.iHeight, fullScreen, res.fRefreshRate); - SetVSyncImpl(m_iVSyncMode); + int vsync_mode = CSettings::Get().GetInt("videoscreen.vsync"); + if (vsync_mode != VSYNC_DRIVER) + SetVSyncImpl(m_iVSyncMode); return true; } diff --git a/xbmc/windowing/windows/WinSystemWin32.cpp b/xbmc/windowing/windows/WinSystemWin32.cpp index d2e13c915b..4391de31fa 100644 --- a/xbmc/windowing/windows/WinSystemWin32.cpp +++ b/xbmc/windowing/windows/WinSystemWin32.cpp @@ -26,6 +26,7 @@ #include "settings/DisplaySettings.h" #include "settings/Settings.h" #include "utils/log.h" +#include "utils/CharsetConverter.h" #ifdef TARGET_WINDOWS #include <tpcshrd.h> @@ -356,10 +357,10 @@ RECT CWinSystemWin32::ScreenRect(int screen) { const MONITOR_DETAILS &details = GetMonitor(screen); - DEVMODE sDevMode; + DEVMODEW sDevMode; ZeroMemory(&sDevMode, sizeof(DEVMODE)); sDevMode.dmSize = sizeof(DEVMODE); - if(!EnumDisplaySettings(details.DeviceName, ENUM_CURRENT_SETTINGS, &sDevMode)) + if(!EnumDisplaySettingsW(details.DeviceNameW.c_str(), ENUM_CURRENT_SETTINGS, &sDevMode)) CLog::Log(LOGERROR, "%s : EnumDisplaySettings failed with %d", __FUNCTION__, GetLastError()); RECT rc; @@ -443,12 +444,12 @@ bool CWinSystemWin32::ChangeResolution(RESOLUTION_INFO res) { const MONITOR_DETAILS &details = GetMonitor(res.iScreen); - DEVMODE sDevMode; + DEVMODEW sDevMode; ZeroMemory(&sDevMode, sizeof(DEVMODE)); sDevMode.dmSize = sizeof(DEVMODE); // If we can't read the current resolution or any detail of the resolution is different than res - if (!EnumDisplaySettings(details.DeviceName, ENUM_CURRENT_SETTINGS, &sDevMode) || + if (!EnumDisplaySettingsW(details.DeviceNameW.c_str(), ENUM_CURRENT_SETTINGS, &sDevMode) || sDevMode.dmPelsWidth != res.iWidth || sDevMode.dmPelsHeight != res.iHeight || sDevMode.dmDisplayFrequency != (int)res.fRefreshRate || ((sDevMode.dmDisplayFlags & DM_INTERLACED) && !(res.dwFlags & D3DPRESENTFLAG_INTERLACED)) || @@ -465,7 +466,7 @@ bool CWinSystemWin32::ChangeResolution(RESOLUTION_INFO res) // CDS_FULLSCREEN is for temporary fullscreen mode and prevents icons and windows from moving // to fit within the new dimensions of the desktop - LONG rc = ChangeDisplaySettingsEx(details.DeviceName, &sDevMode, NULL, CDS_FULLSCREEN, NULL); + LONG rc = ChangeDisplaySettingsExW(details.DeviceNameW.c_str(), &sDevMode, NULL, CDS_FULLSCREEN, NULL); if (rc != DISP_CHANGE_SUCCESSFUL) { CLog::Log(LOGERROR, "%s : ChangeDisplaySettingsEx failed with %d", __FUNCTION__, rc); @@ -540,10 +541,10 @@ void CWinSystemWin32::UpdateResolutions() { for(int mode = 0;; mode++) { - DEVMODE devmode; + DEVMODEW devmode; ZeroMemory(&devmode, sizeof(devmode)); devmode.dmSize = sizeof(devmode); - if(EnumDisplaySettings(m_MonitorsInfo[monitor].DeviceName, mode, &devmode) == 0) + if(EnumDisplaySettingsW(m_MonitorsInfo[monitor].DeviceNameW.c_str(), mode, &devmode) == 0) break; if(devmode.dmBitsPerPel != 32) continue; @@ -583,25 +584,25 @@ void CWinSystemWin32::AddResolution(const RESOLUTION_INFO &res) bool CWinSystemWin32::UpdateResolutionsInternal() { - DISPLAY_DEVICE ddAdapter; + DISPLAY_DEVICEW ddAdapter; ZeroMemory(&ddAdapter, sizeof(ddAdapter)); ddAdapter.cb = sizeof(ddAdapter); DWORD adapter = 0; - while (EnumDisplayDevices(NULL, adapter, &ddAdapter, 0)) + while (EnumDisplayDevicesW(NULL, adapter, &ddAdapter, 0)) { // Exclude displays that are not part of the windows desktop. Using them is too different: no windows, // direct access with GDI CreateDC() or DirectDraw for example. So it may be possible to play video, but GUI? if (!(ddAdapter.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) && (ddAdapter.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { - DISPLAY_DEVICE ddMon; + DISPLAY_DEVICEW ddMon; ZeroMemory(&ddMon, sizeof(ddMon)); ddMon.cb = sizeof(ddMon); bool foundScreen = false; DWORD screen = 0; // Just look for the first active output, we're actually only interested in the information at the adapter level. - while (EnumDisplayDevices(ddAdapter.DeviceName, screen, &ddMon, 0)) + while (EnumDisplayDevicesW(ddAdapter.DeviceName, screen, &ddMon, 0)) { if (ddMon.StateFlags & (DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED)) { @@ -615,33 +616,35 @@ bool CWinSystemWin32::UpdateResolutionsInternal() // Remoting returns no screens. Handle with a dummy screen. if (!foundScreen && screen == 0) { - lstrcpy(ddMon.DeviceString, _T("Dummy Monitor")); // safe: large static array + lstrcpyW(ddMon.DeviceString, L"Dummy Monitor"); // safe: large static array foundScreen = true; } if (foundScreen) { - CLog::Log(LOGNOTICE, "Found screen: %s on %s, adapter %d.", ddMon.DeviceString, ddAdapter.DeviceString, adapter); + std::string monitorStr, adapterStr; + g_charsetConverter.wToUTF8(ddMon.DeviceString, monitorStr); + g_charsetConverter.wToUTF8(ddAdapter.DeviceString, adapterStr); + CLog::Log(LOGNOTICE, "Found screen: %s on %s, adapter %d.", monitorStr.c_str(), adapterStr.c_str(), adapter); // get information about the display's current position and display mode // TODO: for Windows 7/Server 2008 and up, Microsoft recommends QueryDisplayConfig() instead, the API used by the control panel. - DEVMODE dm; + DEVMODEW dm; ZeroMemory(&dm, sizeof(dm)); dm.dmSize = sizeof(dm); - if (EnumDisplaySettingsEx(ddAdapter.DeviceName, ENUM_CURRENT_SETTINGS, &dm, 0) == FALSE) - EnumDisplaySettingsEx(ddAdapter.DeviceName, ENUM_REGISTRY_SETTINGS, &dm, 0); + if (EnumDisplaySettingsExW(ddAdapter.DeviceName, ENUM_CURRENT_SETTINGS, &dm, 0) == FALSE) + EnumDisplaySettingsExW(ddAdapter.DeviceName, ENUM_REGISTRY_SETTINGS, &dm, 0); // get the monitor handle and workspace HMONITOR hm = 0; POINT pt = { dm.dmPosition.x, dm.dmPosition.y }; hm = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL); - MONITOR_DETAILS md; - memset(&md, 0, sizeof(MONITOR_DETAILS)); + MONITOR_DETAILS md = {}; - strcpy(md.MonitorName, ddMon.DeviceString); - strcpy(md.CardName, ddAdapter.DeviceString); - strcpy(md.DeviceName, ddAdapter.DeviceName); + md.MonitorNameW = ddMon.DeviceString; + md.CardNameW = ddAdapter.DeviceString; + md.DeviceNameW = ddAdapter.DeviceName; // width x height @ x,y - bpp - refresh rate // note that refresh rate information is not available on Win9x diff --git a/xbmc/windowing/windows/WinSystemWin32.h b/xbmc/windowing/windows/WinSystemWin32.h index 836eba7694..245d84c557 100644 --- a/xbmc/windowing/windows/WinSystemWin32.h +++ b/xbmc/windowing/windows/WinSystemWin32.h @@ -22,6 +22,7 @@ #define WINDOW_SYSTEM_WIN32_H #include "windowing/WinSystem.h" +#include <string> struct MONITOR_DETAILS { @@ -33,9 +34,9 @@ struct MONITOR_DETAILS bool Interlaced; HMONITOR hMonitor; - char MonitorName[128]; - char CardName[128]; - char DeviceName[128]; + std::wstring MonitorNameW; + std::wstring CardNameW; + std::wstring DeviceNameW; int ScreenNumber; // XBMC POV, not Windows. Windows primary is XBMC #0, then each secondary is +1. }; |