aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/resource.language.en_gb/resources/strings.po4
l---------[-rw-r--r--]system/settings/freebsd.xml165
-rw-r--r--system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl19
-rw-r--r--tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in2
-rwxr-xr-xtools/depends/bootstrap2
-rw-r--r--xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp33
-rw-r--r--xbmc/cores/VideoPlayer/DVDSubtitles/DVDSubtitlesLibass.cpp47
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/YUV2RGBShaderGL.cpp3
-rw-r--r--xbmc/interfaces/builtins/PlayerBuiltins.cpp16
-rw-r--r--xbmc/music/windows/GUIWindowMusicBase.cpp9
-rw-r--r--xbmc/music/windows/GUIWindowMusicNav.cpp29
-rw-r--r--xbmc/rendering/dx/DeviceResources.cpp1
-rw-r--r--xbmc/utils/SystemInfo.cpp2
13 files changed, 111 insertions, 221 deletions
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
index dc73e73828..0b3a3d72f1 100644
--- a/addons/resource.language.en_gb/resources/strings.po
+++ b/addons/resource.language.en_gb/resources/strings.po
@@ -6896,7 +6896,7 @@ msgid "There are no presets available for this visualisation"
msgstr ""
msgctxt "#13390"
-msgid "There are no settings available\nfor this visualisation"
+msgid "There are no settings available[CR]for this visualisation"
msgstr ""
#: xbmc/ContextMenus.h
@@ -19455,7 +19455,7 @@ msgstr ""
#. Description of setting with label #13436 "Use display HDR capabilities"
#: system/settings/settings.xml
msgctxt "#36299"
-msgid "Switch display into HDR mode if media with HDR information is played.\nIf disabled, HDR information are applied using Kodi's internal HDR path."
+msgid "Switch display into HDR mode if media with HDR information is played.[CR]If disabled, HDR information are applied using Kodi's internal HDR path."
msgstr ""
#. Description of setting with label #20226 "Movie set information folder"
diff --git a/system/settings/freebsd.xml b/system/settings/freebsd.xml
index a500ce9fe2..fde0ce778e 100644..120000
--- a/system/settings/freebsd.xml
+++ b/system/settings/freebsd.xml
@@ -1,164 +1 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<settings version="1">
- <section id="player">
- <category id="videoplayer">
- <group id="3">
- <setting id="videoplayer.usevdpau" type="boolean" label="13425" help="36155">
- <requirement>HAVE_LIBVDPAU</requirement>
- <visible>false</visible>
- <level>2</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevdpaumixer" type="boolean" label="13437" help="36421">
- <requirement>HAVE_LIBVDPAU</requirement>
- <visible>false</visible>
- <level>2</level>
- <default>true</default>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
- </dependency>
- </dependencies>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevdpaumpeg2" type="boolean" parent="videoplayer.usevdpau" label="13441" help="13442">
- <requirement>HAVE_LIBVDPAU</requirement>
- <visible>false</visible>
- <level>3</level>
- <default>true</default>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
- </dependency>
- </dependencies>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevdpaumpeg4" type="boolean" parent="videoplayer.usevdpau" label="13443" help="13444">
- <requirement>HAVE_LIBVDPAU</requirement>
- <visible>false</visible>
- <level>3</level>
- <default>false</default>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
- </dependency>
- </dependencies>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevdpauvc1" type="boolean" parent="videoplayer.usevdpau" label="13445" help="13446">
- <requirement>HAVE_LIBVDPAU</requirement>
- <visible>false</visible>
- <level>3</level>
- <default>true</default>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevdpau" operator="is">true</condition> <!-- USE VDPAU -->
- </dependency>
- </dependencies>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapi" type="boolean" label="13426" help="36156">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <level>2</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapimpeg2" type="boolean" parent="videoplayer.usevaapi" label="13447" help="13448">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapimpeg4" type="boolean" parent="videoplayer.usevaapi" label="13449" help="13450">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapivc1" type="boolean" parent="videoplayer.usevaapi" label="13451" help="13452">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapivp8" type="boolean" parent="videoplayer.usevaapi" label="13453" help="13454">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapivp9" type="boolean" parent="videoplayer.usevaapi" label="13455" help="13456">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.usevaapihevc" type="boolean" parent="videoplayer.usevaapi" label="13460" help="13461">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.prefervaapirender" type="boolean" parent="videoplayer.usevaapi" label="13457" help="36433">
- <requirement>HAVE_LIBVA</requirement>
- <visible>false</visible>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.usevaapi" operator="is">true</condition>
- </dependency>
- </dependencies>
- <level>3</level>
- <default>true</default>
- <control type="toggle" />
- </setting>
- </group>
- </category>
- </section>
- <section id="system">
- <category id="display">
- <group id="1">
- <setting id="videoscreen.fakefullscreen">
- <visible>false</visible>
- </setting>
- </group>
- </category>
- </section>
-</settings>
+linux.xml \ No newline at end of file
diff --git a/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl b/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl
index 84e480c5ec..8a4658cd7b 100644
--- a/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl
+++ b/system/shaders/GL/4.0/gl_yuv2rgb_filter4.glsl
@@ -17,6 +17,7 @@ uniform mat3 m_primMat;
uniform float m_gammaDstInv;
uniform float m_gammaSrc;
uniform float m_toneP1;
+uniform float m_luminance;
uniform vec3 m_coefsDst;
in vec2 m_cordY;
in vec2 m_cordU;
@@ -115,9 +116,23 @@ vec4 process()
rgb.rgb = max(vec3(0), m_primMat * rgb.rgb);
rgb.rgb = pow(rgb.rgb, vec3(m_gammaDstInv));
-#if defined(XBMC_TONE_MAPPING)
+#if defined(KODI_TONE_MAPPING_REINHARD)
float luma = dot(rgb.rgb, m_coefsDst);
- rgb.rgb *= tonemap(luma) / luma;
+ rgb.rgb *= reinhard(luma) / luma;
+
+#elif defined(KODI_TONE_MAPPING_ACES)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= (10000.0 / m_luminance) * (2.0 / m_toneP1);
+ rgb.rgb = aces(rgb.rgb);
+ rgb.rgb *= (1.24 / m_toneP1);
+ rgb.rgb = pow(rgb.rgb, vec3(0.27));
+
+#elif defined(KODI_TONE_MAPPING_HABLE)
+ rgb.rgb = inversePQ(rgb.rgb);
+ rgb.rgb *= m_toneP1;
+ float wp = m_luminance / 100.0;
+ rgb.rgb = hable(rgb.rgb * wp) / hable(vec3(wp));
+ rgb.rgb = pow(rgb.rgb, vec3(1.0 / 2.2));
#endif
#endif
diff --git a/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in b/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in
index 0d318be595..bd508d435c 100644
--- a/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in
+++ b/tools/darwin/packaging/darwin_embedded/mkdeb-darwin_embedded.sh.in
@@ -102,7 +102,7 @@ chmod +x $DIRNAME/$PACKAGE/DEBIAN/postinst
# prep @APP_NAME@.app
mkdir -p $DIRNAME/$PACKAGE/Applications
-cp -r $APP $DIRNAME/$PACKAGE/Applications/
+rsync -a --no-links $APP $DIRNAME/$PACKAGE/Applications/
find $DIRNAME/$PACKAGE/Applications/ -name '.svn' -exec rm -rf {} \;
find $DIRNAME/$PACKAGE/Applications/ -name '.git*' -exec rm -rf {} \;
find $DIRNAME/$PACKAGE/Applications/ -name '.DS_Store' -exec rm -rf {} \;
diff --git a/tools/depends/bootstrap b/tools/depends/bootstrap
index d9e14e783f..9f03bce44f 100755
--- a/tools/depends/bootstrap
+++ b/tools/depends/bootstrap
@@ -3,7 +3,7 @@
# Some platforms may not have m4/autoconf. If not, build temporary copies in
# order to bootstrap.
DEPENDS=`dirname $0`
-export PATH=$DEPENDS/pre-build-deps/bin:$PATH
+export PATH="$DEPENDS/pre-build-deps/bin:$PATH"
which m4 >/dev/null 2>/dev/null || make -C $DEPENDS/pre-depends/m4-pre-depends
which autoconf >/dev/null 2>/dev/null || make -C $DEPENDS/pre-depends/autoconf-pre-depends
which autoconf >/dev/null 2>/dev/null || \
diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
index 46e29ba4c3..ff13cad28d 100644
--- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
@@ -70,6 +70,31 @@ static const struct StereoModeConversionMap WmvToInternalStereoModeMap[] =
{}
};
+namespace
+{
+const std::vector<std::string> font_mimetypes = {"application/x-truetype-font",
+ "application/vnd.ms-opentype",
+ "application/x-font-ttf",
+ "application/x-font", // probably incorrect
+ "application/font-sfnt",
+ "font/collection",
+ "font/otf",
+ "font/sfnt",
+ "font/ttf"};
+
+bool AttachmentIsFont(const AVDictionaryEntry* dict)
+{
+ if (dict)
+ {
+ const std::string mimeType = dict->value;
+ return std::find_if(font_mimetypes.begin(), font_mimetypes.end(), [&mimeType](std::string str) {
+ return str == mimeType;
+ }) != font_mimetypes.end();
+ }
+ return false;
+}
+} // namespace
+
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE)
std::string CDemuxStreamAudioFFmpeg::GetStreamName()
@@ -1652,9 +1677,13 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int streamIdx)
}
}
case AVMEDIA_TYPE_ATTACHMENT:
- { //mkv attachments. Only bothering with fonts for now.
+ {
+ // mkv attachments. Only bothering with fonts for now.
+ AVDictionaryEntry* attachmentMimetype =
+ av_dict_get(pStream->metadata, "mimetype", nullptr, 0);
+
if (pStream->codecpar->codec_id == AV_CODEC_ID_TTF ||
- pStream->codecpar->codec_id == AV_CODEC_ID_OTF)
+ pStream->codecpar->codec_id == AV_CODEC_ID_OTF || AttachmentIsFont(attachmentMimetype))
{
std::string fileName = "special://temp/fonts/";
XFILE::CDirectory::Create(fileName);
diff --git a/xbmc/cores/VideoPlayer/DVDSubtitles/DVDSubtitlesLibass.cpp b/xbmc/cores/VideoPlayer/DVDSubtitles/DVDSubtitlesLibass.cpp
index 41c824969f..6baddb26e0 100644
--- a/xbmc/cores/VideoPlayer/DVDSubtitles/DVDSubtitlesLibass.cpp
+++ b/xbmc/cores/VideoPlayer/DVDSubtitles/DVDSubtitlesLibass.cpp
@@ -22,17 +22,8 @@
namespace
{
-void AppendFont(const std::string& font)
+std::string GetDefaultFontPath(std::string& font)
{
- std::string finalFontPath = URIUtils::AddFileToFolder("special://temp/fonts/", font);
- if (XFILE::CFile::Exists(finalFontPath))
- {
- CLog::Log(LOGDEBUG,
- "CDVDSubtitlesLibass: Skipping copy of {} to special://temp/fonts/ (already exists)",
- font);
- return;
- }
-
std::string fontSources[]{"special://home/media/Fonts/", "special://xbmc/media/Fonts/"};
for (const auto& path : fontSources)
@@ -40,12 +31,11 @@ void AppendFont(const std::string& font)
auto fontPath = URIUtils::AddFileToFolder(path, font);
if (XFILE::CFile::Exists(fontPath))
{
- XFILE::CFile::Copy(fontPath, finalFontPath);
- CLog::Log(LOGDEBUG, "CDVDSubtitlesLibass: Copied {} to {}", fontPath, finalFontPath);
- return;
+ return CSpecialProtocol::TranslatePath(fontPath).c_str();
}
- CLog::Log(LOGDEBUG, "CDVDSubtitlesLibass: Could not find font {} in font sources", font);
}
+ CLog::Log(LOGERROR, "CDVDSubtitlesLibass: Could not find font {} in font sources", font);
+ return "";
}
} // namespace
@@ -69,19 +59,18 @@ CDVDSubtitlesLibass::CDVDSubtitlesLibass()
ass_set_message_cb(m_library, libass_log, this);
- // Add configured subtitle font to special://temp/fonts/. This needs to be done before
- // ass_set_fonts_dir. If fontconfig fails it will use the default font.
- const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings();
- std::string forcedFont = settings->GetString(CSettings::SETTING_SUBTITLES_FONT);
- AppendFont(forcedFont);
- strPath = URIUtils::AddFileToFolder(strPath, forcedFont);
-
CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Initializing ASS library font settings");
- // libass uses fontconfig (system lib) which is not wrapped
- // so translate the path before calling into libass
- ass_set_fonts_dir(m_library, CSpecialProtocol::TranslatePath(strPath).c_str());
- ass_set_extract_fonts(m_library, 1);
- ass_set_style_overrides(m_library, NULL);
+
+ const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings();
+ bool overrideFont = settings->GetBool(CSettings::SETTING_SUBTITLES_OVERRIDEASSFONTS);
+ if (!overrideFont)
+ {
+ // libass uses fontconfig (system lib) which is not wrapped
+ // so translate the path before calling into libass
+ ass_set_fonts_dir(m_library, CSpecialProtocol::TranslatePath(strPath).c_str());
+ ass_set_extract_fonts(m_library, 1);
+ ass_set_style_overrides(m_library, nullptr);
+ }
CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Initializing ASS Renderer");
@@ -94,10 +83,10 @@ CDVDSubtitlesLibass::CDVDSubtitlesLibass()
ass_set_use_margins(m_renderer, 0);
ass_set_font_scale(m_renderer, 1);
- int fontconfig = settings->GetBool(CSettings::SETTING_SUBTITLES_OVERRIDEASSFONTS) ? 0 : 1;
// libass uses fontconfig (system lib) which is not wrapped
- // so translate the path before calling into libass
- ass_set_fonts(m_renderer, CSpecialProtocol::TranslatePath(strPath).c_str(), "Arial", fontconfig,
+ // so translate the path before calling into libass
+ std::string forcedFont = settings->GetString(CSettings::SETTING_SUBTITLES_FONT);
+ ass_set_fonts(m_renderer, GetDefaultFontPath(forcedFont).c_str(), "Arial", overrideFont ? 0 : 1,
nullptr, 1);
}
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/YUV2RGBShaderGL.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/YUV2RGBShaderGL.cpp
index 7ef9e8ef10..e437dddf93 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/YUV2RGBShaderGL.cpp
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/YUV2RGBShaderGL.cpp
@@ -272,7 +272,8 @@ float BaseYUV2RGBGLSLShader::GetLuminanceValue() const //Maybe move this to linu
lum3 = static_cast<float>(m_lightMetadata.MaxFALL);
lum1 = (lum1 * 0.5f) + (lum2 * 0.2f) + (lum3 * 0.3f);
}
- else if (m_hasDisplayMetadata && m_displayMetadata.has_luminance)
+ else if (m_hasDisplayMetadata && m_displayMetadata.has_luminance &&
+ m_displayMetadata.max_luminance.num)
{
uint16_t lum = m_displayMetadata.max_luminance.num / m_displayMetadata.max_luminance.den;
lum1 = static_cast<float>(lum);
diff --git a/xbmc/interfaces/builtins/PlayerBuiltins.cpp b/xbmc/interfaces/builtins/PlayerBuiltins.cpp
index 56e5f3faf1..fc5fece030 100644
--- a/xbmc/interfaces/builtins/PlayerBuiltins.cpp
+++ b/xbmc/interfaces/builtins/PlayerBuiltins.cpp
@@ -477,13 +477,19 @@ static int PlayMedia(const std::vector<std::string>& params)
else
items.Sort(SortByLabel, SortOrderAscending);
- int playlist = containsVideo? PLAYLIST_VIDEO : PLAYLIST_MUSIC;;
- if (containsMusic && containsVideo) //mixed content found in the folder
+ int playlist = containsVideo? PLAYLIST_VIDEO : PLAYLIST_MUSIC;
+ // Mixed playlist item played by music player, mixed content folder has music removed
+ if (containsMusic && containsVideo)
{
- for (int i = items.Size() - 1; i >= 0; i--) //remove music entries
+ if (item.IsPlayList())
+ playlist = PLAYLIST_MUSIC;
+ else
{
- if (!items[i]->IsVideo())
- items.Remove(i);
+ for (int i = items.Size() - 1; i >= 0; i--) //remove music entries
+ {
+ if (!items[i]->IsVideo())
+ items.Remove(i);
+ }
}
}
diff --git a/xbmc/music/windows/GUIWindowMusicBase.cpp b/xbmc/music/windows/GUIWindowMusicBase.cpp
index fd1d8a5706..84c6ecf0de 100644
--- a/xbmc/music/windows/GUIWindowMusicBase.cpp
+++ b/xbmc/music/windows/GUIWindowMusicBase.cpp
@@ -565,15 +565,6 @@ void CGUIWindowMusicBase::GetContextButtons(int itemNumber, CContextButtons &but
else if (item->IsPlayList() || m_vecItems->IsPlayList())
buttons.Add(CONTEXT_BUTTON_EDIT, 586);
}
- if (!m_vecItems->IsMusicDb() && !m_vecItems->IsInternetStream() &&
- !item->IsPath("add") && !item->IsParentFolder() &&
- !item->IsPlugin() && !item->IsMusicDb() &&
- !item->IsLibraryFolder() &&
- !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") &&
- (profileManager->GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser))
- {
- buttons.Add(CONTEXT_BUTTON_SCAN, 13352);
- }
#ifdef HAS_DVD_DRIVE
// enable Rip CD Audio or Track button if we have an audio disc
if (CServiceBroker::GetMediaManager().IsDiscInDrive() && m_vecItems->IsCDDA())
diff --git a/xbmc/music/windows/GUIWindowMusicNav.cpp b/xbmc/music/windows/GUIWindowMusicNav.cpp
index fb11c2c5b9..e5dee5e1ca 100644
--- a/xbmc/music/windows/GUIWindowMusicNav.cpp
+++ b/xbmc/music/windows/GUIWindowMusicNav.cpp
@@ -34,6 +34,7 @@
#include "playlists/PlayList.h"
#include "playlists/PlayListFactory.h"
#include "profiles/ProfileManager.h"
+#include "settings/AdvancedSettings.h"
#include "settings/Settings.h"
#include "settings/SettingsComponent.h"
#include "storage/MediaManager.h"
@@ -349,6 +350,12 @@ bool CGUIWindowMusicNav::OnClick(int iItem, const std::string &player /* = "" */
if (item->IsMusicDb() && !item->m_bIsFolder)
m_musicdatabase.SetPropertiesForFileItem(*item);
+ if (item->IsPlayList() &&
+ !CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_playlistAsFolders)
+ {
+ PlayItem(iItem);
+ return true;
+ }
return CGUIWindowMusicBase::OnClick(iItem, player);
}
@@ -561,10 +568,8 @@ void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &butt
}
}
#endif
- if (!inPlaylists && !m_vecItems->IsInternetStream() &&
- !item->IsPath("add") && !item->IsParentFolder() &&
- !item->IsPlugin() &&
- !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") &&
+ // Scan button for music sources except ".." and "Add music source" items
+ if (!item->IsPath("add") && !item->IsParentFolder() &&
(profileManager->GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser))
{
buttons.Add(CONTEXT_BUTTON_SCAN, 13352);
@@ -575,6 +580,22 @@ void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &butt
{
CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons);
+ // Scan button for real folders containing files when navigating within music sources.
+ // Blacklist the bespoke Kodi protocols as to many valid external protocols to whitelist
+ if (m_vecItems->GetContent() == "files" && // Other content not scanned to library
+ !inPlaylists && !m_vecItems->IsInternetStream() && // Not playlists locations or streams
+ !item->IsPath("add") && !item->IsParentFolder() && // Not ".." and "Add items
+ item->m_bIsFolder && // Folders only, but playlists can be folders too
+ !URIUtils::IsLibraryContent(item->GetPath()) && // database folder or .xsp files
+ !URIUtils::IsSpecial(item->GetPath()) && !item->IsPlugin() && !item->IsScript() &&
+ !item->IsPlayList() && // .m3u etc. that as flagged as folders when playlistasfolders
+ !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") &&
+ (profileManager->GetCurrentProfile().canWriteDatabases() ||
+ g_passwordManager.bMasterUser))
+ {
+ buttons.Add(CONTEXT_BUTTON_SCAN, 13352);
+ }
+
CMusicDatabaseDirectory dir;
if (!item->IsParentFolder() && !dir.IsAllItem(item->GetPath()))
diff --git a/xbmc/rendering/dx/DeviceResources.cpp b/xbmc/rendering/dx/DeviceResources.cpp
index d2a949f10f..b66078e475 100644
--- a/xbmc/rendering/dx/DeviceResources.cpp
+++ b/xbmc/rendering/dx/DeviceResources.cpp
@@ -80,6 +80,7 @@ DX::DeviceResources::DeviceResources()
, m_deviceNotify(nullptr)
, m_stereoEnabled(false)
, m_bDeviceCreated(false)
+ , m_IsHDROutput(false)
{
}
diff --git a/xbmc/utils/SystemInfo.cpp b/xbmc/utils/SystemInfo.cpp
index 10bcc90e6d..4a80960f70 100644
--- a/xbmc/utils/SystemInfo.cpp
+++ b/xbmc/utils/SystemInfo.cpp
@@ -554,7 +554,7 @@ std::string CSysInfo::GetKernelVersionFull(void)
unsigned long long v4 = (v & 0x000000000000FFFFL);
kernelVersionFull = StringUtils::Format("%lld.%lld.%lld", v1, v2, v3);
if (v4)
- kernelVersionFull += StringUtils::Format(".ll%d", v4);
+ kernelVersionFull += StringUtils::Format(".%lld", v4);
#elif defined(TARGET_POSIX)
struct utsname un;