aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/skin.confluence/sounds/sounds.xml4
-rw-r--r--configure.in1
-rw-r--r--lib/cximage-6.0/CxImage/ximadsp.cpp6
-rw-r--r--lib/cximage-6.0/CxImage/xmemfile.cpp16
-rw-r--r--lib/cximage-6.0/png/pngwutil.c3
-rw-r--r--lib/cximage-6.0/raw/dcraw.c13
-rw-r--r--lib/cximage-6.0/raw/libdcr.c12
-rw-r--r--lib/ffmpeg/libswresample/rematrix.c13
-rw-r--r--lib/ffmpeg/libswresample/swresample.c1
-rw-r--r--lib/ffmpeg/libswresample/swresample_internal.h1
-rw-r--r--lib/ffmpeg/libswresample/version.h2
-rw-r--r--lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch84
-rw-r--r--project/BuildDependencies/scripts/0_package.list4
-rw-r--r--project/VS2010Express/XBMC for Windows.sln162
-rw-r--r--project/Win32BuildSetup/BuildSetup.bat4
-rw-r--r--project/Win32BuildSetup/XBMC for Windows.nsi2
-rw-r--r--system/asound.conf63
-rw-r--r--tools/android/packaging/xbmc/AndroidManifest.xml4
-rw-r--r--tools/arm/arm-scripts/create-pkgsfile.sh41
-rw-r--r--tools/arm/arm-scripts/create-xbmcfile.sh54
-rw-r--r--tools/arm/arm-scripts/install-gcc4.5_armel.sh25
-rw-r--r--tools/arm/arm-scripts/install-pkgs.sh61
-rw-r--r--tools/arm/arm-scripts/pkg-paths.txt66
-rwxr-xr-xtools/buildbot/darwin-depends-check3
-rwxr-xr-xtools/buildbot/gitrev-posix14
-rw-r--r--tools/win32buildtools/nasmw.exebin603648 -> 0 bytes
-rw-r--r--xbmc/Application.cpp12
-rw-r--r--xbmc/CueDocument.cpp24
-rw-r--r--xbmc/addons/Addon.cpp2
-rw-r--r--xbmc/android/jni/ConnectivityManager.cpp2
-rw-r--r--xbmc/android/jni/MediaCodecInfo.cpp2
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp33
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp4
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp11
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp9
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp1
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h1
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp2
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp2
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp2
-rw-r--r--xbmc/cores/DllLoader/exports/emu_msvcrt.cpp2
-rw-r--r--xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp33
-rw-r--r--xbmc/cores/VideoRenderers/LinuxRendererGLES.h2
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/StageFrightVideo.cpp24
-rw-r--r--xbmc/filesystem/PluginDirectory.cpp2
-rw-r--r--xbmc/filesystem/SFTPFile.cpp72
-rw-r--r--xbmc/filesystem/test/TestRarFile.cpp20
-rw-r--r--xbmc/guilib/TextureGL.cpp3
-rw-r--r--xbmc/guilib/TextureManager.cpp1
-rw-r--r--xbmc/interfaces/generic/ScriptInvocationManager.cpp2
-rw-r--r--xbmc/interfaces/legacy/ModuleXbmc.cpp1
-rw-r--r--xbmc/music/windows/GUIWindowMusicBase.cpp2
-rw-r--r--xbmc/music/windows/GUIWindowMusicNav.cpp8
-rw-r--r--xbmc/network/TCPServer.cpp2
-rw-r--r--xbmc/network/WebServer.cpp2
-rw-r--r--xbmc/network/upnp/UPnPServer.cpp18
-rw-r--r--xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp4
-rw-r--r--xbmc/settings/MediaSourceSettings.cpp2
-rw-r--r--xbmc/settings/SettingDependency.cpp4
-rw-r--r--xbmc/settings/SettingsManager.cpp2
-rw-r--r--xbmc/settings/SkinSettings.cpp4
-rw-r--r--xbmc/utils/AMLUtils.cpp37
-rw-r--r--xbmc/utils/CharsetConverter.cpp118
-rw-r--r--xbmc/utils/CharsetConverter.h81
-rw-r--r--xbmc/utils/FileUtils.cpp22
-rw-r--r--xbmc/utils/LegacyPathTranslation.cpp2
-rw-r--r--xbmc/utils/StringUtils.cpp121
-rw-r--r--xbmc/utils/StringUtils.h14
-rw-r--r--xbmc/utils/StringValidation.cpp2
-rw-r--r--xbmc/utils/test/TestStringUtils.cpp24
-rw-r--r--xbmc/video/VideoDatabase.cpp21
-rw-r--r--xbmc/video/windows/GUIWindowVideoBase.cpp2
-rw-r--r--xbmc/video/windows/GUIWindowVideoNav.cpp8
-rw-r--r--xbmc/view/GUIViewState.cpp7
-rw-r--r--xbmc/view/GUIViewState.h1
-rw-r--r--xbmc/view/ViewDatabase.cpp4
-rw-r--r--xbmc/windows/GUIMediaWindow.cpp2
-rw-r--r--xbmc/windows/GUIWindowFileManager.cpp2
78 files changed, 736 insertions, 708 deletions
diff --git a/addons/skin.confluence/sounds/sounds.xml b/addons/skin.confluence/sounds/sounds.xml
index 2613a578dd..e9e53b046c 100644
--- a/addons/skin.confluence/sounds/sounds.xml
+++ b/addons/skin.confluence/sounds/sounds.xml
@@ -11,7 +11,7 @@
<!-- file to play when the action occurs. -->
<!-- Valid entries for <name> can be found at -->
-<!-- http://manual.xboxmediacenter.de/wakka.php?wakka=KeyMappingXML&v=6gu -->
+<!-- http://wiki.xbmc.org/index.php?title=Keymap -->
<!-- Also window specific sound can be played -->
@@ -27,7 +27,7 @@
<!-- by setting the file to play. -->
<!-- Valid entries for <name> can be found at -->
-<!-- http://manual.xboxmediacenter.de/wakka.php?wakka=WindowList&v=13k6 -->
+<!-- http://wiki.xbmc.org/?title=Window_IDs -->
<!-- Note: Only wav files are supported -->
diff --git a/configure.in b/configure.in
index 4127c9ddb0..50bdf838ca 100644
--- a/configure.in
+++ b/configure.in
@@ -920,6 +920,7 @@ fi
AC_LANG_PUSH([C++])
AC_CHECK_TYPES([std::u16string, std::u32string], [], [], [[#include <string>]])
AC_CHECK_TYPES([char16_t, char32_t])
+AC_CHECK_SIZEOF([wchar_t])
AC_LANG_POP([C++])
# Add top source directory for all builds so we can use config.h
diff --git a/lib/cximage-6.0/CxImage/ximadsp.cpp b/lib/cximage-6.0/CxImage/ximadsp.cpp
index f54ffd615a..a21c0661a3 100644
--- a/lib/cximage-6.0/CxImage/ximadsp.cpp
+++ b/lib/cximage-6.0/CxImage/ximadsp.cpp
@@ -654,6 +654,7 @@ bool CxImage::Colorize(BYTE hue, BYTE sat, float blend)
hsl.rgbRed=hue;
hsl.rgbGreen=sat;
hsl.rgbBlue = (BYTE)RGB2GRAY(color.rgbRed,color.rgbGreen,color.rgbBlue);
+ hsl.rgbReserved = (BYTE)0;
hsl = HSLtoRGB(hsl);
//BlendPixelColor(x,y,hsl,blend);
//color.rgbRed = (BYTE)(hsl.rgbRed * blend + color.rgbRed * (1.0f - blend));
@@ -679,6 +680,7 @@ bool CxImage::Colorize(BYTE hue, BYTE sat, float blend)
hsl.rgbRed=hue;
hsl.rgbGreen=sat;
hsl.rgbBlue = (BYTE)RGB2GRAY(color.rgbRed,color.rgbGreen,color.rgbBlue);
+ hsl.rgbReserved = (BYTE)0;
hsl = HSLtoRGB(hsl);
color.rgbRed = (BYTE)(hsl.rgbRed * blend + color.rgbRed * (1.0f - blend));
color.rgbBlue = (BYTE)(hsl.rgbBlue * blend + color.rgbBlue * (1.0f - blend));
@@ -1802,6 +1804,7 @@ bool CxImage::Combine(CxImage* r,CxImage* g,CxImage* b,CxImage* a, long colorspa
c.rgbRed=r->GetPixelIndex(x,y);
c.rgbGreen=g->GetPixelIndex(x,y);
c.rgbBlue=b->GetPixelIndex(x,y);
+ c.rgbReserved = (BYTE)0;
switch (colorspace){
case 1:
BlindSetPixelColor(x,y,HSLtoRGB(c));
@@ -2700,7 +2703,10 @@ bool CxImage::UnsharpMask(float radius /*= 5.0*/, float amount /*= 0.5*/, int th
pPalette = new RGBQUAD[head.biClrUsed];
memcpy(pPalette, GetPalette(),GetPaletteSize());
if (!IncreaseBpp(24))
+ {
+ delete [] pPalette;
return false;
+ }
}
CxImage iDst;
diff --git a/lib/cximage-6.0/CxImage/xmemfile.cpp b/lib/cximage-6.0/CxImage/xmemfile.cpp
index af8db945a3..5a72200238 100644
--- a/lib/cximage-6.0/CxImage/xmemfile.cpp
+++ b/lib/cximage-6.0/CxImage/xmemfile.cpp
@@ -186,9 +186,21 @@ bool CxMemFile::Alloc(DWORD dwNewLen)
// allocate new buffer
if (m_pBuffer == NULL) m_pBuffer = (BYTE*)malloc(dwNewBufferSize);
- else m_pBuffer = (BYTE*)realloc(m_pBuffer, dwNewBufferSize);
+ else
+ {
+ BYTE* new_buf = (BYTE*)realloc(m_pBuffer, dwNewBufferSize);
+ if (!new_buf)
+ {
+ free(m_pBuffer);
+ m_bFreeOnClose = false;
+ return false;
+ }
+ else
+ m_pBuffer = new_buf;
+ }
// I own this buffer now (caller knows nothing about it)
- m_bFreeOnClose = true;
+ if (m_pBuffer)
+ m_bFreeOnClose = true;
m_Edge = dwNewBufferSize;
}
diff --git a/lib/cximage-6.0/png/pngwutil.c b/lib/cximage-6.0/png/pngwutil.c
index fef38aef9d..7f4ba12f67 100644
--- a/lib/cximage-6.0/png/pngwutil.c
+++ b/lib/cximage-6.0/png/pngwutil.c
@@ -1721,7 +1721,6 @@ png_write_tIME(png_structp png_ptr, png_timep mod_time)
png_write_chunk(png_ptr, png_tIME, buf, (png_size_t)7);
}
#endif
-
/* initializes the row writing capability of libpng */
void /* PRIVATE */
png_write_start_row(png_structp png_ptr)
@@ -1790,8 +1789,8 @@ png_write_start_row(png_structp png_ptr)
(png_ptr->rowbytes + 1));
png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
}
-#endif /* PNG_NO_WRITE_FILTERING */
}
+#endif /* PNG_NO_WRITE_FILTERING */
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
/* if interlaced, we need to set up width and height of pass */
diff --git a/lib/cximage-6.0/raw/dcraw.c b/lib/cximage-6.0/raw/dcraw.c
index d57b9151a4..45cd7a96b4 100644
--- a/lib/cximage-6.0/raw/dcraw.c
+++ b/lib/cximage-6.0/raw/dcraw.c
@@ -3485,6 +3485,7 @@ void CLASS subtract (char *fname)
BAYER(row,col) = MAX (BAYER(row,col) - ntohs(pixel[col]), 0);
}
free (pixel);
+ fclose(fp);
black = 0;
}
@@ -4774,7 +4775,7 @@ void CLASS romm_coeff (float romm_cam[3][3])
void CLASS parse_mos (int offset)
{
char data[40];
- int skip, from, i, c, neut[4], planes=0, frot=0;
+ int skip, from, i, j, c, neut[4], planes=0, frot=0;
static const char *mod[] =
{ "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22",
"Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65",
@@ -4802,13 +4803,15 @@ void CLASS parse_mos (int offset)
strcpy (model, mod[i]);
}
if (!strcmp(data,"icc_camera_to_tone_matrix")) {
- for (i=0; i < 9; i++)
- romm_cam[0][i] = int_to_float(get4());
+ for (i=0; i < 3; i++)
+ for (j=0; j < 3; j++)
+ romm_cam[i][j] = int_to_float(get4());
romm_coeff (romm_cam);
}
if (!strcmp(data,"CaptProf_color_matrix")) {
- for (i=0; i < 9; i++)
- fscanf (ifp, "%f", &romm_cam[0][i]);
+ for (i=0; i < 3; i++)
+ for (j=0; j < 3; j++)
+ fscanf (ifp, "%f", &romm_cam[i][j]);
romm_coeff (romm_cam);
}
if (!strcmp(data,"CaptProf_number_of_planes"))
diff --git a/lib/cximage-6.0/raw/libdcr.c b/lib/cximage-6.0/raw/libdcr.c
index 81bf2fb322..ced60c3665 100644
--- a/lib/cximage-6.0/raw/libdcr.c
+++ b/lib/cximage-6.0/raw/libdcr.c
@@ -4735,7 +4735,7 @@ void DCR_CLASS dcr_romm_coeff (DCRAW* p, float romm_cam[3][3])
void DCR_CLASS dcr_parse_mos (DCRAW* p, int offset)
{
char data[40];
- int skip, from, i=0, c, neut[4], planes=0, frot=0;
+ int skip, from, i=0, j, c, neut[4], planes=0, frot=0;
static const char *mod[] =
{ "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22",
"Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65",
@@ -4763,13 +4763,15 @@ void DCR_CLASS dcr_parse_mos (DCRAW* p, int offset)
strcpy (p->model, mod[i]);
}
if (!strcmp(data,"icc_camera_to_tone_matrix")) {
- for (i=0; i < 9; i++)
- romm_cam[0][i] = dcr_int_to_float(dcr_get4(p));
+ for (i=0; i < 3; i++)
+ for (j=0; j < 3; j++)
+ romm_cam[i][j] = dcr_int_to_float(dcr_get4(p));
dcr_romm_coeff (p,romm_cam);
}
if (!strcmp(data,"CaptProf_color_matrix")) {
- for (i=0; i < 9; i++)
- dcr_fscanf(p->obj_, "%f", &romm_cam[0][i]);
+ for (i=0; i < 3; i++)
+ for (j=0; j < 3; j++)
+ dcr_fscanf(p->obj_, "%f", &romm_cam[i][j]);
dcr_romm_coeff (p,romm_cam);
}
if (!strcmp(data,"CaptProf_number_of_planes"))
diff --git a/lib/ffmpeg/libswresample/rematrix.c b/lib/ffmpeg/libswresample/rematrix.c
index 51658cee21..8ab554cf90 100644
--- a/lib/ffmpeg/libswresample/rematrix.c
+++ b/lib/ffmpeg/libswresample/rematrix.c
@@ -116,6 +116,7 @@ av_cold static int auto_matrix(SwrContext *s)
double maxcoef=0;
char buf[128];
const int matrix_encoding = s->matrix_encoding;
+ float maxval;
in_ch_layout = clean_layout(s, s->in_ch_layout);
if(!sane_layout(in_ch_layout)){
@@ -300,8 +301,16 @@ av_cold static int auto_matrix(SwrContext *s)
if(s->rematrix_volume < 0)
maxcoef = -s->rematrix_volume;
- if(( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
- || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) && maxcoef > 1.0){
+ if (s->rematrix_maxval > 0) {
+ maxval = s->rematrix_maxval;
+ } else if ( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
+ || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) {
+ maxval = 1.0;
+ } else
+ maxval = INT_MAX;
+
+ if(maxcoef > maxval){
+ maxcoef /= maxval;
for(i=0; i<SWR_CH_MAX; i++)
for(j=0; j<SWR_CH_MAX; j++){
s->matrix[i][j] /= maxcoef;
diff --git a/lib/ffmpeg/libswresample/swresample.c b/lib/ffmpeg/libswresample/swresample.c
index 9b71b2e122..b9c652a931 100644
--- a/lib/ffmpeg/libswresample/swresample.c
+++ b/lib/ffmpeg/libswresample/swresample.c
@@ -68,6 +68,7 @@ static const AVOption options[]={
{"lfe_mix_level" , "set LFE mix level" , OFFSET(lfe_mix_level ), AV_OPT_TYPE_FLOAT, {.dbl=0 }, -32 , 32 , PARAM},
{"rmvol" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
{"rematrix_volume" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
+{"rematrix_maxval" , "set rematrix maxval" , OFFSET(rematrix_maxval), AV_OPT_TYPE_FLOAT, {.dbl=0.0 }, 0 , 1000 , PARAM},
{"flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
{"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
diff --git a/lib/ffmpeg/libswresample/swresample_internal.h b/lib/ffmpeg/libswresample/swresample_internal.h
index 17b85d5263..be36ba6802 100644
--- a/lib/ffmpeg/libswresample/swresample_internal.h
+++ b/lib/ffmpeg/libswresample/swresample_internal.h
@@ -82,6 +82,7 @@ struct SwrContext {
float clev; ///< center mixing level
float lfe_mix_level; ///< LFE mixing level
float rematrix_volume; ///< rematrixing volume coefficient
+ float rematrix_maxval; ///< maximum value for rematrixing output
enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */
const int *channel_map; ///< channel index (or -1 if muted channel) map
int used_ch_count; ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
diff --git a/lib/ffmpeg/libswresample/version.h b/lib/ffmpeg/libswresample/version.h
index df9df480c7..8272b763b9 100644
--- a/lib/ffmpeg/libswresample/version.h
+++ b/lib/ffmpeg/libswresample/version.h
@@ -30,7 +30,7 @@
#define LIBSWRESAMPLE_VERSION_MAJOR 0
#define LIBSWRESAMPLE_VERSION_MINOR 17
-#define LIBSWRESAMPLE_VERSION_MICRO 102
+#define LIBSWRESAMPLE_VERSION_MICRO 103
#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
LIBSWRESAMPLE_VERSION_MINOR, \
diff --git a/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch b/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch
new file mode 100644
index 0000000000..b826a613b0
--- /dev/null
+++ b/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch
@@ -0,0 +1,84 @@
+From e2b718464e92fcde3d21c6653c88ddec2ab21c3f Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Mon, 22 Jul 2013 03:23:54 +0200
+Subject: [PATCH] swresample: Make rematrix maxvalue user settable
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libswresample/rematrix.c | 13 +++++++++++--
+ libswresample/swresample.c | 1 +
+ libswresample/swresample_internal.h | 1 +
+ libswresample/version.h | 2 +-
+ 4 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
+index 48aff3b..33e2966 100644
+--- a/libswresample/rematrix.c
++++ b/libswresample/rematrix.c
+@@ -120,6 +120,7 @@ av_cold static int auto_matrix(SwrContext *s)
+ double maxcoef=0;
+ char buf[128];
+ const int matrix_encoding = s->matrix_encoding;
++ float maxval;
+
+ in_ch_layout = clean_layout(s, s->in_ch_layout);
+ if(!sane_layout(in_ch_layout)){
+@@ -304,8 +305,16 @@ av_cold static int auto_matrix(SwrContext *s)
+ if(s->rematrix_volume < 0)
+ maxcoef = -s->rematrix_volume;
+
+- if(( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
+- || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) && maxcoef > 1.0){
++ if (s->rematrix_maxval > 0) {
++ maxval = s->rematrix_maxval;
++ } else if ( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
++ || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) {
++ maxval = 1.0;
++ } else
++ maxval = INT_MAX;
++
++ if(maxcoef > maxval){
++ maxcoef /= maxval;
+ for(i=0; i<SWR_CH_MAX; i++)
+ for(j=0; j<SWR_CH_MAX; j++){
+ s->matrix[i][j] /= maxcoef;
+diff --git a/libswresample/swresample.c b/libswresample/swresample.c
+index ba2afdb..cdfe5bf 100644
+--- a/libswresample/swresample.c
++++ b/libswresample/swresample.c
+@@ -68,6 +68,7 @@
+ {"lfe_mix_level" , "set LFE mix level" , OFFSET(lfe_mix_level ), AV_OPT_TYPE_FLOAT, {.dbl=0 }, -32 , 32 , PARAM},
+ {"rmvol" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
+ {"rematrix_volume" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
++{"rematrix_maxval" , "set rematrix maxval" , OFFSET(rematrix_maxval), AV_OPT_TYPE_FLOAT, {.dbl=0.0 }, 0 , 1000 , PARAM},
+
+ {"flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
+ {"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
+diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h
+index 108f837..ab19f21 100644
+--- a/libswresample/swresample_internal.h
++++ b/libswresample/swresample_internal.h
+@@ -82,6 +82,7 @@ struct SwrContext {
+ float clev; ///< center mixing level
+ float lfe_mix_level; ///< LFE mixing level
+ float rematrix_volume; ///< rematrixing volume coefficient
++ float rematrix_maxval; ///< maximum value for rematrixing output
+ enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */
+ const int *channel_map; ///< channel index (or -1 if muted channel) map
+ int used_ch_count; ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
+diff --git a/libswresample/version.h b/libswresample/version.h
+index df9df48..8272b76 100644
+--- a/libswresample/version.h
++++ b/libswresample/version.h
+@@ -30,7 +30,7 @@
+
+ #define LIBSWRESAMPLE_VERSION_MAJOR 0
+ #define LIBSWRESAMPLE_VERSION_MINOR 17
+-#define LIBSWRESAMPLE_VERSION_MICRO 102
++#define LIBSWRESAMPLE_VERSION_MICRO 103
+
+ #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
+ LIBSWRESAMPLE_VERSION_MINOR, \
+--
+1.8.4
+
diff --git a/project/BuildDependencies/scripts/0_package.list b/project/BuildDependencies/scripts/0_package.list
index c4f1115645..0b7e7d67b2 100644
--- a/project/BuildDependencies/scripts/0_package.list
+++ b/project/BuildDependencies/scripts/0_package.list
@@ -9,8 +9,8 @@ dnssd-379.32.1-win32.7z
doxygen-1.8.2-win32
lame_enc-3.99.5-win32.7z
libbluray-0.2.3-win32
-libnfs-1.6.0-win32
+libnfs-1.6.1-win32
libshairplay-c159ca7-win32
libjpeg-turbo-1.2.0-win32
sqlite-3.7.16.1-win32
-taglib-1.8beta-win32
+taglib-1.8-win32
diff --git a/project/VS2010Express/XBMC for Windows.sln b/project/VS2010Express/XBMC for Windows.sln
index c3a65fb334..ddbad971ae 100644
--- a/project/VS2010Express/XBMC for Windows.sln
+++ b/project/VS2010Express/XBMC for Windows.sln
@@ -91,10 +91,8 @@ Global
Debug (DirectX)|Win32 = Debug (DirectX)|Win32
Debug (OpenGL)|Win32 = Debug (OpenGL)|Win32
Debug Testsuite|Win32 = Debug Testsuite|Win32
- Debug|Win32 = Debug|Win32
Release (DirectX)|Win32 = Release (DirectX)|Win32
Release (OpenGL)|Win32 = Release (OpenGL)|Win32
- Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug (DirectX)|Win32.ActiveCfg = Debug (DirectX)|Win32
@@ -103,549 +101,389 @@ Global
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug (OpenGL)|Win32.Build.0 = Debug (OpenGL)|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug Testsuite|Win32.ActiveCfg = Debug Testsuite|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug Testsuite|Win32.Build.0 = Debug Testsuite|Win32
- {3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug|Win32.ActiveCfg = Debug Testsuite|Win32
- {3A68081D-E8F9-4523-9436-530DE9E5530A}.Debug|Win32.Build.0 = Debug Testsuite|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Release (DirectX)|Win32.ActiveCfg = Release (DirectX)|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Release (DirectX)|Win32.Build.0 = Release (DirectX)|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Release (OpenGL)|Win32.ActiveCfg = Release (OpenGL)|Win32
{3A68081D-E8F9-4523-9436-530DE9E5530A}.Release (OpenGL)|Win32.Build.0 = Release (OpenGL)|Win32
- {3A68081D-E8F9-4523-9436-530DE9E5530A}.Release|Win32.ActiveCfg = Release (OpenGL)|Win32
- {3A68081D-E8F9-4523-9436-530DE9E5530A}.Release|Win32.Build.0 = Release (OpenGL)|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug|Win32.ActiveCfg = Debug|Win32
- {B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Debug|Win32.Build.0 = Debug|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release (DirectX)|Win32.Build.0 = Release|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release|Win32.ActiveCfg = Release|Win32
- {B2975495-FBE4-4F94-AAC5-B21A9842BF50}.Release|Win32.Build.0 = Release|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug (DirectX)|Win32.ActiveCfg = Debug (DirectX)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug (DirectX)|Win32.Build.0 = Debug (DirectX)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug (OpenGL)|Win32.ActiveCfg = Debug (OpenGL)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug (OpenGL)|Win32.Build.0 = Debug (OpenGL)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug Testsuite|Win32.ActiveCfg = Debug (DirectX)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug Testsuite|Win32.Build.0 = Debug (DirectX)|Win32
- {FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug|Win32.ActiveCfg = Debug (OpenGL)|Win32
- {FE0A91C0-E30A-47CD-8A92-A508C9292452}.Debug|Win32.Build.0 = Debug (OpenGL)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release (DirectX)|Win32.ActiveCfg = Release (DirectX)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release (DirectX)|Win32.Build.0 = Release (DirectX)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release (OpenGL)|Win32.ActiveCfg = Release (OpenGL)|Win32
{FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release (OpenGL)|Win32.Build.0 = Release (OpenGL)|Win32
- {FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release|Win32.ActiveCfg = Release (OpenGL)|Win32
- {FE0A91C0-E30A-47CD-8A92-A508C9292452}.Release|Win32.Build.0 = Release (OpenGL)|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {00700E12-A63B-4E54-B962-4011A90584BD}.Debug|Win32.ActiveCfg = Debug|Win32
- {00700E12-A63B-4E54-B962-4011A90584BD}.Debug|Win32.Build.0 = Debug|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Release (DirectX)|Win32.Build.0 = Release|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{00700E12-A63B-4E54-B962-4011A90584BD}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {00700E12-A63B-4E54-B962-4011A90584BD}.Release|Win32.ActiveCfg = Release|Win32
- {00700E12-A63B-4E54-B962-4011A90584BD}.Release|Win32.Build.0 = Release|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug|Win32.ActiveCfg = Debug|Win32
- {BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Debug|Win32.Build.0 = Debug|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release (DirectX)|Win32.Build.0 = Release|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release|Win32.ActiveCfg = Release|Win32
- {BA5B08FC-2ECB-4571-9F25-F8054522FC65}.Release|Win32.Build.0 = Release|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {5E479372-4F34-426D-AA1E-9879E94C105D}.Debug|Win32.ActiveCfg = Debug|Win32
- {5E479372-4F34-426D-AA1E-9879E94C105D}.Debug|Win32.Build.0 = Debug|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Release (DirectX)|Win32.Build.0 = Release|Win32
{5E479372-4F34-426D-AA1E-9879E94C105D}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
- {5E479372-4F34-426D-AA1E-9879E94C105D}.Release|Win32.ActiveCfg = Release|Win32
- {5E479372-4F34-426D-AA1E-9879E94C105D}.Release|Win32.Build.0 = Release|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug|Win32.ActiveCfg = Debug|Win32
- {F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Debug|Win32.Build.0 = Debug|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release (DirectX)|Win32.Build.0 = Release|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release|Win32.ActiveCfg = Release|Win32
- {F9E6874D-60A8-49BA-9393-A2105E63ABCF}.Release|Win32.Build.0 = Release|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug|Win32.ActiveCfg = Debug|Win32
- {D8097C41-605D-4917-8957-9DF7F44A18CD}.Debug|Win32.Build.0 = Debug|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Release (DirectX)|Win32.Build.0 = Release|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{D8097C41-605D-4917-8957-9DF7F44A18CD}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {D8097C41-605D-4917-8957-9DF7F44A18CD}.Release|Win32.ActiveCfg = Release|Win32
- {D8097C41-605D-4917-8957-9DF7F44A18CD}.Release|Win32.Build.0 = Release|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug|Win32.ActiveCfg = Debug|Win32
- {19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Debug|Win32.Build.0 = Debug|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release (DirectX)|Win32.Build.0 = Release|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release|Win32.ActiveCfg = Release|Win32
- {19B16CD0-3B47-47B7-AB0E-81EF2BF1B187}.Release|Win32.Build.0 = Release|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug|Win32.ActiveCfg = Debug|Win32
- {22B25AEC-7223-46FC-8356-4418327EFDE1}.Debug|Win32.Build.0 = Debug|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Release (DirectX)|Win32.Build.0 = Release|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{22B25AEC-7223-46FC-8356-4418327EFDE1}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {22B25AEC-7223-46FC-8356-4418327EFDE1}.Release|Win32.ActiveCfg = Release|Win32
- {22B25AEC-7223-46FC-8356-4418327EFDE1}.Release|Win32.Build.0 = Release|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug|Win32.ActiveCfg = Debug|Win32
- {3B424C94-2005-44CC-BFB1-4B6C89090732}.Debug|Win32.Build.0 = Debug|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Release (DirectX)|Win32.Build.0 = Release|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{3B424C94-2005-44CC-BFB1-4B6C89090732}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {3B424C94-2005-44CC-BFB1-4B6C89090732}.Release|Win32.ActiveCfg = Release|Win32
- {3B424C94-2005-44CC-BFB1-4B6C89090732}.Release|Win32.Build.0 = Release|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug|Win32.ActiveCfg = Debug|Win32
- {3843C3D4-E5A6-4030-87EC-E7EE57242106}.Debug|Win32.Build.0 = Debug|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release (DirectX)|Win32.Build.0 = Release|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release|Win32.ActiveCfg = Release|Win32
- {3843C3D4-E5A6-4030-87EC-E7EE57242106}.Release|Win32.Build.0 = Release|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug|Win32.ActiveCfg = Debug|Win32
- {88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Debug|Win32.Build.0 = Debug|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release (DirectX)|Win32.Build.0 = Release|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release|Win32.ActiveCfg = Release|Win32
- {88E7E431-3752-4D58-BCD2-A7E6A1B74247}.Release|Win32.Build.0 = Release|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug|Win32.ActiveCfg = Debug|Win32
- {145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Debug|Win32.Build.0 = Debug|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release (DirectX)|Win32.Build.0 = Release|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release|Win32.ActiveCfg = Release|Win32
- {145287C8-24EA-42FE-8D7D-C13D5E4B054C}.Release|Win32.Build.0 = Release|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug|Win32.ActiveCfg = Debug|Win32
- {8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Debug|Win32.Build.0 = Debug|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release (DirectX)|Win32.Build.0 = Release|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release|Win32.ActiveCfg = Release|Win32
- {8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}.Release|Win32.Build.0 = Release|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {783701E9-4A65-4505-97B0-39E580AA680D}.Debug|Win32.ActiveCfg = Debug|Win32
- {783701E9-4A65-4505-97B0-39E580AA680D}.Debug|Win32.Build.0 = Debug|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Release (DirectX)|Win32.Build.0 = Release|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{783701E9-4A65-4505-97B0-39E580AA680D}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {783701E9-4A65-4505-97B0-39E580AA680D}.Release|Win32.ActiveCfg = Release|Win32
- {783701E9-4A65-4505-97B0-39E580AA680D}.Release|Win32.Build.0 = Release|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug|Win32.ActiveCfg = Debug|Win32
- {44BF83C4-F73A-4093-A29A-11B9016318C4}.Debug|Win32.Build.0 = Debug|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Release (DirectX)|Win32.Build.0 = Release|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{44BF83C4-F73A-4093-A29A-11B9016318C4}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {44BF83C4-F73A-4093-A29A-11B9016318C4}.Release|Win32.ActiveCfg = Release|Win32
- {44BF83C4-F73A-4093-A29A-11B9016318C4}.Release|Win32.Build.0 = Release|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug|Win32.ActiveCfg = Debug|Win32
- {8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Debug|Win32.Build.0 = Debug|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release (DirectX)|Win32.Build.0 = Release|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release|Win32.ActiveCfg = Release|Win32
- {8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}.Release|Win32.Build.0 = Release|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {96798038-06CE-4382-BD5B-F9C366724DEB}.Debug|Win32.ActiveCfg = Debug|Win32
- {96798038-06CE-4382-BD5B-F9C366724DEB}.Debug|Win32.Build.0 = Debug|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Release (DirectX)|Win32.Build.0 = Release|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{96798038-06CE-4382-BD5B-F9C366724DEB}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {96798038-06CE-4382-BD5B-F9C366724DEB}.Release|Win32.ActiveCfg = Release|Win32
- {96798038-06CE-4382-BD5B-F9C366724DEB}.Release|Win32.Build.0 = Release|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug (DirectX)|Win32.ActiveCfg = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug (DirectX)|Win32.Build.0 = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug (OpenGL)|Win32.ActiveCfg = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug (OpenGL)|Win32.Build.0 = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug Testsuite|Win32.ActiveCfg = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug Testsuite|Win32.Build.0 = Release (DLL)|Win32
- {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug|Win32.ActiveCfg = Debug|Win32
- {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug|Win32.Build.0 = Debug|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release (DirectX)|Win32.ActiveCfg = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release (DirectX)|Win32.Build.0 = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release (OpenGL)|Win32.ActiveCfg = Release (DLL)|Win32
{AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release (OpenGL)|Win32.Build.0 = Release (DLL)|Win32
- {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release|Win32.ActiveCfg = Release|Win32
- {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release|Win32.Build.0 = Release|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug (DirectX)|Win32.ActiveCfg = Debug (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug (DirectX)|Win32.Build.0 = Debug (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug (OpenGL)|Win32.ActiveCfg = Debug (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug Testsuite|Win32.ActiveCfg = Debug (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug Testsuite|Win32.Build.0 = Debug (DirectX)|Win32
- {0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug|Win32.ActiveCfg = Debug (DirectX)|Win32
- {0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Debug|Win32.Build.0 = Debug (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Release (DirectX)|Win32.ActiveCfg = Release (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Release (DirectX)|Win32.Build.0 = Release (DirectX)|Win32
{0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Release (OpenGL)|Win32.ActiveCfg = Release (DirectX)|Win32
- {0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Release|Win32.ActiveCfg = Release (DirectX)|Win32
- {0D91724A-E6F6-4708-AF47-9F88BBE2114C}.Release|Win32.Build.0 = Release (DirectX)|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug|Win32.ActiveCfg = Debug|Win32
- {C15B374E-7126-48FF-B618-A375D7B17FCF}.Debug|Win32.Build.0 = Debug|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Release (DirectX)|Win32.Build.0 = Release|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{C15B374E-7126-48FF-B618-A375D7B17FCF}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {C15B374E-7126-48FF-B618-A375D7B17FCF}.Release|Win32.ActiveCfg = Release|Win32
- {C15B374E-7126-48FF-B618-A375D7B17FCF}.Release|Win32.Build.0 = Release|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug|Win32.ActiveCfg = Debug|Win32
- {DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Debug|Win32.Build.0 = Debug|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release (DirectX)|Win32.Build.0 = Release|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release|Win32.ActiveCfg = Release|Win32
- {DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}.Release|Win32.Build.0 = Release|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug (DirectX)|Win32.ActiveCfg = Debug (DirectX)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug (DirectX)|Win32.Build.0 = Debug (DirectX)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug (OpenGL)|Win32.ActiveCfg = Debug (OpenGL)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug (OpenGL)|Win32.Build.0 = Debug (OpenGL)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug Testsuite|Win32.ActiveCfg = Debug (DirectX)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug Testsuite|Win32.Build.0 = Debug (DirectX)|Win32
- {D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug|Win32.ActiveCfg = Debug (OpenGL)|Win32
- {D450FE9A-CE56-4496-B4AB-379094E642F2}.Debug|Win32.Build.0 = Debug (OpenGL)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Release (DirectX)|Win32.ActiveCfg = Release (DirectX)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Release (DirectX)|Win32.Build.0 = Release (DirectX)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Release (OpenGL)|Win32.ActiveCfg = Release (OpenGL)|Win32
{D450FE9A-CE56-4496-B4AB-379094E642F2}.Release (OpenGL)|Win32.Build.0 = Release (OpenGL)|Win32
- {D450FE9A-CE56-4496-B4AB-379094E642F2}.Release|Win32.ActiveCfg = Release (OpenGL)|Win32
- {D450FE9A-CE56-4496-B4AB-379094E642F2}.Release|Win32.Build.0 = Release (OpenGL)|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug|Win32.ActiveCfg = Debug|Win32
- {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug|Win32.Build.0 = Debug|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release (DirectX)|Win32.Build.0 = Release|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release|Win32.ActiveCfg = Release|Win32
- {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release|Win32.Build.0 = Release|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug|Win32.ActiveCfg = Debug|Win32
- {D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Debug|Win32.Build.0 = Debug|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release (DirectX)|Win32.Build.0 = Release|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release|Win32.ActiveCfg = Release|Win32
- {D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}.Release|Win32.Build.0 = Release|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug|Win32.ActiveCfg = Debug|Win32
- {AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Debug|Win32.Build.0 = Debug|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release (DirectX)|Win32.Build.0 = Release|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release|Win32.ActiveCfg = Release|Win32
- {AF6C8945-5DDC-4F62-A48C-86B11B7ED996}.Release|Win32.Build.0 = Release|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug|Win32.ActiveCfg = Debug|Win32
- {3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Debug|Win32.Build.0 = Debug|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release (DirectX)|Win32.Build.0 = Release|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release|Win32.ActiveCfg = Release|Win32
- {3600E1C5-FECA-468C-83F3-FE467DBE2A66}.Release|Win32.Build.0 = Release|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug|Win32.ActiveCfg = Debug|Win32
- {2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Debug|Win32.Build.0 = Debug|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release (DirectX)|Win32.Build.0 = Release|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release|Win32.ActiveCfg = Release|Win32
- {2A8CBFB5-C226-4BB3-8C03-7C75D511A4A2}.Release|Win32.Build.0 = Release|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug|Win32.ActiveCfg = Debug|Win32
- {17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Debug|Win32.Build.0 = Debug|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release (DirectX)|Win32.Build.0 = Release|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release|Win32.ActiveCfg = Release|Win32
- {17238C64-04D6-4B51-B205-4A5A84ADB9FA}.Release|Win32.Build.0 = Release|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug|Win32.ActiveCfg = Debug|Win32
- {FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Debug|Win32.Build.0 = Debug|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release (DirectX)|Win32.Build.0 = Release|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release|Win32.ActiveCfg = Release|Win32
- {FB3AB83A-C37A-4636-87FD-827F8506A8FC}.Release|Win32.Build.0 = Release|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug|Win32.ActiveCfg = Debug|Win32
- {88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug|Win32.Build.0 = Debug|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Release (DirectX)|Win32.Build.0 = Release|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{88968763-3D6B-48A8-B495-CC8C187FAC02}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {88968763-3D6B-48A8-B495-CC8C187FAC02}.Release|Win32.ActiveCfg = Release|Win32
- {88968763-3D6B-48A8-B495-CC8C187FAC02}.Release|Win32.Build.0 = Release|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug|Win32.ActiveCfg = Debug|Win32
- {1E2FB608-3DD2-4021-A598-90008FA6DE85}.Debug|Win32.Build.0 = Debug|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release (DirectX)|Win32.Build.0 = Release|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release|Win32.ActiveCfg = Release|Win32
- {1E2FB608-3DD2-4021-A598-90008FA6DE85}.Release|Win32.Build.0 = Release|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
- {2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug|Win32.ActiveCfg = Debug|Win32
- {2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Debug|Win32.Build.0 = Debug|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release (DirectX)|Win32.Build.0 = Release|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release|Win32.ActiveCfg = Release|Win32
- {2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}.Release|Win32.Build.0 = Release|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.ActiveCfg = Debug|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Win32.Build.0 = Debug|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release (DirectX)|Win32.Build.0 = Release|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.ActiveCfg = Release|Win32
- {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Win32.Build.0 = Release|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
- {6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug|Win32.ActiveCfg = Debug|Win32
- {6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Debug|Win32.Build.0 = Debug|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release (DirectX)|Win32.Build.0 = Release|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release|Win32.ActiveCfg = Release|Win32
- {6D8C91F8-992F-4C83-9DE3-485D64EF8420}.Release|Win32.Build.0 = Release|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug|Win32.ActiveCfg = Debug|Win32
- {87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Debug|Win32.Build.0 = Debug|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release (DirectX)|Win32.Build.0 = Release|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release|Win32.ActiveCfg = Release|Win32
- {87DA0A1E-3F33-4927-A5E5-2D58F2C58E17}.Release|Win32.Build.0 = Release|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug|Win32.ActiveCfg = Debug|Win32
- {034B1D02-CA92-455D-8866-DB95BEE49C10}.Debug|Win32.Build.0 = Debug|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Release (DirectX)|Win32.Build.0 = Release|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{034B1D02-CA92-455D-8866-DB95BEE49C10}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {034B1D02-CA92-455D-8866-DB95BEE49C10}.Release|Win32.ActiveCfg = Release|Win32
- {034B1D02-CA92-455D-8866-DB95BEE49C10}.Release|Win32.Build.0 = Release|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug|Win32.ActiveCfg = Debug|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug|Win32.Build.0 = Debug|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release|Win32.ActiveCfg = Release|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release|Win32.Build.0 = Release|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug (DirectX)|Win32.ActiveCfg = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug (DirectX)|Win32.Build.0 = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug (OpenGL)|Win32.ActiveCfg = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug (OpenGL)|Win32.Build.0 = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug Testsuite|Win32.Build.0 = Debug|Win32
- {F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {F8F1290B-1188-4810-86C9-88178A31D2AF}.Debug|Win32.Build.0 = Debug|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (DirectX)|Win32.ActiveCfg = Release|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (DirectX)|Win32.Build.0 = Release|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (OpenGL)|Win32.ActiveCfg = Release|Win32
{F8F1290B-1188-4810-86C9-88178A31D2AF}.Release (OpenGL)|Win32.Build.0 = Release|Win32
- {F8F1290B-1188-4810-86C9-88178A31D2AF}.Release|Win32.ActiveCfg = Release|Win32
- {F8F1290B-1188-4810-86C9-88178A31D2AF}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/project/Win32BuildSetup/BuildSetup.bat b/project/Win32BuildSetup/BuildSetup.bat
index 7ce32721c5..6b23fe1d0f 100644
--- a/project/Win32BuildSetup/BuildSetup.bat
+++ b/project/Win32BuildSetup/BuildSetup.bat
@@ -190,8 +190,8 @@ IF %comp%==vs2010 (
Echo Desktop.ini>>exclude.txt
Echo dsstdfx.bin>>exclude.txt
Echo exclude.txt>>exclude.txt
- Echo xbmc.txt>>exclude.txt
- Echo xbmc.old.txt>>exclude.txt
+ Echo xbmc.log>>exclude.txt
+ Echo xbmc.old.log>>exclude.txt
rem Exclude userdata files
Echo userdata\advancedsettings.xml>>exclude.txt
Echo userdata\guisettings.xml>>exclude.txt
diff --git a/project/Win32BuildSetup/XBMC for Windows.nsi b/project/Win32BuildSetup/XBMC for Windows.nsi
index d02618188f..5e1b87334f 100644
--- a/project/Win32BuildSetup/XBMC for Windows.nsi
+++ b/project/Win32BuildSetup/XBMC for Windows.nsi
@@ -118,7 +118,7 @@ Section "XBMC" SecXBMC
IfFileExists $INSTDIR\system\python 0 +2
RMDir /r $INSTDIR\system\python
- File /r /x *.so /x mplayer /x *_d.* /x tcl85g.dll /x tclpip85g.dll /x tk85g.dll "${xbmc_root}\Xbmc\system\*.*"
+ File /r /x *.so /x *_d.* /x tcl85g.dll /x tclpip85g.dll /x tk85g.dll "${xbmc_root}\Xbmc\system\*.*"
; delete msvc?90.dll's in INSTDIR, we use the vcredist installer later
Delete "$INSTDIR\msvcr90.dll"
diff --git a/system/asound.conf b/system/asound.conf
deleted file mode 100644
index e3cd2e7c08..0000000000
--- a/system/asound.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-# downmixing to 2 channels
-pcm.xbmc_71to2 {
- @args.0 SLAVE
- @args.SLAVE {
- type string
- default "default"
- }
- type plug
- slave.pcm $SLAVE
- slave.channels 2
- route_policy duplicate
- ttable.0.0 1 # front left speaker
- ttable.1.1 1 # front right speaker
- ttable.2.0 0.7 # rear left speaker
- ttable.3.1 0.7 # rear right speaker
- ttable.4.0 0.7 # center to left mapping
- ttable.4.1 0.7 # center to right mapping
- ttable.5.0 0.5 # LFE (base) to left mapping
- ttable.5.1 0.5 # LFE to right mapping
- ttable.6.0 0.6 # SL to left mapping
- ttable.7.0 0.6 # SR to right mapping
-}
-
-# downmixing to 2 channels
-pcm.xbmc_51to2 {
- @args.0 SLAVE
- @args.SLAVE {
- type string
- default "default"
- }
- type plug
- slave.pcm $SLAVE
- slave.channels 2
- route_policy duplicate
- ttable.0.0 1 # front left speaker
- ttable.1.1 1 # front right speaker
- ttable.2.0 0.7 # rear left speaker
- ttable.3.1 0.7 # rear right speaker
- ttable.4.0 0.7 # center to left mapping
- ttable.4.1 0.7 # center to right mapping
- ttable.5.0 0.5 # LFE (base) to left mapping
- ttable.5.1 0.5 # LFE to right mapping
-}
-
-# downmixing to 2 channels
-pcm.xbmc_50to2 {
- @args.0 SLAVE
- @args.SLAVE {
- type string
- default "default"
- }
- type plug
- slave.pcm $SLAVE
- slave.channels 2
- route_policy duplicate
- ttable.0.0 1 # front left speaker
- ttable.1.1 1 # front right speaker
- ttable.2.0 0.7 # rear left speaker
- ttable.3.1 0.7 # rear right speaker
- ttable.4.0 0.7 # center to left mapping
- ttable.4.1 0.7 # center to right mapping
-}
-
diff --git a/tools/android/packaging/xbmc/AndroidManifest.xml b/tools/android/packaging/xbmc/AndroidManifest.xml
index 1f14fed96a..dd3a84b537 100644
--- a/tools/android/packaging/xbmc/AndroidManifest.xml
+++ b/tools/android/packaging/xbmc/AndroidManifest.xml
@@ -16,7 +16,7 @@
<application android:icon="@drawable/ic_launcher" android:debuggable="true" android:label="@string/app_name" android:hasCode="true">
<activity
android:name=".Splash"
- android:configChanges="orientation|keyboardHidden"
+ android:configChanges="orientation|keyboard|keyboardHidden|navigation"
android:finishOnTaskLaunch="true"
android:launchMode="singleInstance"
android:screenOrientation="sensorLandscape"
@@ -58,7 +58,7 @@
-->
<activity
android:name=".Main"
- android:configChanges="orientation|keyboardHidden"
+ android:configChanges="orientation|keyboard|keyboardHidden|navigation"
android:finishOnTaskLaunch="true"
android:label="XBMC"
android:launchMode="singleInstance"
diff --git a/tools/arm/arm-scripts/create-pkgsfile.sh b/tools/arm/arm-scripts/create-pkgsfile.sh
deleted file mode 100644
index 7a07d1ac0f..0000000000
--- a/tools/arm/arm-scripts/create-pkgsfile.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-
-# This will create a tar file that contains all the armel packages already extracted.
-
-# Dont go further if there are no packages, i.e install-pkgs.sh was not run!
-if [ ! -e pkgs ]
-then
- echo "install-pkgs.sh was not run!!! Exiting!"
- exit
-fi
-
-# Cleanup
-if [ -e pkgs-output.txt ]
-then
- rm pkgs-output.txt
-fi
-
-# Cleanup
-if [ -e pkgs.tar.bz2 ]
-then
- rm pkgs.tar.bz2
-fi
-
-# Extract all deb packages into a temporary directory.
-# Keep the output log, incase something went wrong.
-cd pkgs
-mkdir tmp
-
-echo "Collecting all package data... please wait"
-for i in `ls *.deb`
-do
- dpkg-deb -x $i tmp/ >> ../pkgs-output.txt 2>&1
-done
-echo "Please check pkgs-output.txt for any errors that may have been encountered!"
-
-echo "Creating tar file... please wait"
-cd tmp
-tar cjf ../../pkgs.tar.bz2 ./
-cd ../
-rm -r tmp
-echo "Done! Output: pkgs.tar.bz2"
diff --git a/tools/arm/arm-scripts/create-xbmcfile.sh b/tools/arm/arm-scripts/create-xbmcfile.sh
deleted file mode 100644
index ccf21c5ad6..0000000000
--- a/tools/arm/arm-scripts/create-xbmcfile.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-
-# A re-write of original XBMC Makefile install proceedure that will work with scratchbox.
-
-filename=xbmc.tar.bz2
-prefix=tools/arm/arm-scripts/usr
-cd ../../../
-mkdir -p $prefix
-
-# Install Binaries
-echo "Copying XBMC binary to $prefix/share/xbmc/xbmc.bin"
-install -D xbmc.bin $prefix/share/xbmc/xbmc.bin
-install -D xbmc-xrandr $prefix/share/xbmc/xbmc-xrandr
-# Install Scripts
-install -D tools/Linux/xbmc.sh $prefix/bin/xbmc
-install -D tools/Linux/xbmc-standalone.sh $prefix/bin/xbmc-standalone
-install -D -m 0644 tools/Linux/FEH-ARM.py $prefix/share/xbmc/FEH.py
-install -D -m 0644 tools/Linux/xbmc-xsession.desktop $prefix/share/xsessions/XBMC.desktop
-# Arch dependent files
-find system screensavers visualisations -type f -not -iregex ".*\(svn.*\|win32\(dx\)?\.vis\|osx\.vis\)" -iregex ".*\(arm.*\|\.vis\|\.xbs\)" -exec install -D "{}" $prefix/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
-# Install Datas
-echo "Copying support and legal files..."
-for FILE in `ls README.linux README.armel LICENSE.GPL *.txt`
-do
- install -D -m 0644 "$FILE" $prefix/share/xbmc/"$FILE"
-done
-echo "Done!"
-echo "Copying system files to $prefix/share/xbmc"
-# Arch independent files
-find language media scripts sounds userdata visualisations system -type f -not -iregex ".*\(svn.*\|\.so\|\.dll\|\.pyd\|python/.*\.zlib\|\.vis\)" -exec install -D -m 0644 "{}" $prefix/share/xbmc/"{}" \; -printf " -- %-75.75f\r"
-# Skins
-find skin -type f -not -iregex ".*\(svn.*\|^skin/[^/]*/media/.*[^x][^b][^t]\)" -exec install -D -m 0644 '{}' $prefix/share/xbmc/'{}' \; -printf " -- %-75.75f\r"
-# Icons and links
-mkdir -p $prefix/share/applications $prefix/share/pixmaps
-cp -a tools/Linux/xbmc.png $prefix/share/pixmaps/
-cp -a tools/Linux/xbmc.desktop $prefix/share/applications/
-# Install Web
-mkdir -p $prefix/share/xbmc/web
-cp -r web/Project_Mayhem_III/* $prefix/share/xbmc/web
-find $prefix/share/xbmc/web -depth -name .svn -exec rm -rf {} \;
-echo "...Complete!"
-
-cd arm-scripts
-
-# Cleanup
-if [ -e $filename ]
-then
- rm $filename
-fi
-
-echo "Creating tar file... please wait"
-tar cjf $filename usr
-rm -r usr
-echo "Done! Output: $filename"
diff --git a/tools/arm/arm-scripts/install-gcc4.5_armel.sh b/tools/arm/arm-scripts/install-gcc4.5_armel.sh
deleted file mode 100644
index b9de9d797c..0000000000
--- a/tools/arm/arm-scripts/install-gcc4.5_armel.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-#
-# Download and install gcc-4.5 for arm platform. This is a native install
-# and not a cross-compiler install.
-#
-
-# The URL sources
-URLS="http://ftp.debian.org/debian/pool/main/b/binutils/binutils_2.20.51.20100418-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/cpp-4.5_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/g++-4.5_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/gcc-4.5_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/gcc-4.5-base_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/libgcc1_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/libgomp1_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/libstdc++6_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/g/gcc-4.5/libstdc++6-4.5-dev_4.5-20100321-1_armel.deb \
-http://ftp.debian.org/debian/pool/main/libe/libelf/libelfg0_0.8.13-1_armel.deb"
-
-# Download them using wget
-mkdir -p gcc-4.5-debs
-for u in $URLS; do wget --directory-prefix=./gcc-4.5-debs $u; done
-
-# Install gcc-4.5
-dpkg -i ./gcc-4.5-debs/*.deb
-
diff --git a/tools/arm/arm-scripts/install-pkgs.sh b/tools/arm/arm-scripts/install-pkgs.sh
deleted file mode 100644
index ac4e186c73..0000000000
--- a/tools/arm/arm-scripts/install-pkgs.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-
-# A simple script that will automatically download a predefined list of packages,
-# skipping over those already downloaded, and then extracting them to root folder /
-
-echo "#### Beginning Downloads ####"
-
-# If the temporary pkgs folder has not been created, create it
-if [ ! -e pkgs ]
-then
- mkdir pkgs
-fi
-
-cd pkgs
-# Make a copy of the pkg paths text file for manipulation
-cp ../pkg-paths.txt ./
-
-# Remove lines in the text file that we have already obtained
-for i in *.deb
-do
- sed "/$i/d" pkg-paths.txt > tmpfile
- mv tmpfile pkg-paths.txt
-done
-
-# If theres packages left to download, do so. Otherwise, do nothing
-if test `cat pkg-paths.txt | wc -l` -gt 0
-then
- echo "Downloading:"
- cat pkg-paths.txt
- wget -i pkg-paths.txt -o ../wget-output.txt
-else
- echo "#### Nothing to Download or Extract!!! Exiting... ####"
- exit
-fi
-
-echo "#### Downloads Complete! Please check wget-output.txt for any errors that may have been encountered! ####"
-echo
-echo
-echo "#### Extracting Packages ####"
-# Only install if running from scratchbox!!! (or arm in general)
-if test `uname -m` = "arm"
-then
- # Remove dpkg logfile
- if [ -e ../dpkg-output.txt ]
- then
- rm ../dpkg-output.txt
- fi
-
- for i in `cat pkg-paths.txt`
- do
- # For each .deb package just downloaded,
- # extract the contents to / and redirect the output!
- j=`basename $i`
- echo "Extracting $j..."
- dpkg-deb -x $j / >> ../dpkg-output.txt 2>&1
- done
- echo "#### Extraction Complete! Please check dpkg-output.txt for any errors that may have been encountered! ####"
-else
- echo "#### Extraction FAILED: Did not extract as not running in scratchbox! ####"
-fi
-
diff --git a/tools/arm/arm-scripts/pkg-paths.txt b/tools/arm/arm-scripts/pkg-paths.txt
deleted file mode 100644
index 6c9f69410e..0000000000
--- a/tools/arm/arm-scripts/pkg-paths.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-http://ftp.uk.debian.org/debian/pool/main/b/boost/libboost-dev_1.34.1-14_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libm/libmad/libmad0-dev_0.15.1b-4_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libs/libsamplerate/libsamplerate0-dev_0.1.4-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libs/libsamplerate/libsamplerate0_0.1.4-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libv/libvorbis/libvorbis-dev_1.2.0.dfsg-3.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libv/libvorbis/libvorbisfile3_1.2.0.dfsg-3.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.2.0.dfsg-3.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_0.10.9-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/m/mysql-dfsg-5.0/libmysqlclient15-dev_5.0.51a-24+lenny1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_7.6-2.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/l/lzo2/liblzo2-dev_2.03-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.03-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libc/libcdio/libcdio-dev_0.78.2+dfsg1-3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2-dev_1.2.13-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2debian_1.2.13-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2debian-all_1.2.13-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/a/arts/libartsc0_1.5.9-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/e/esound/libesd0_0.2.36-3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/a/audiofile/libaudiofile0_0.2.6-7_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_0.9.10-3+lenny1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/p/pulseaudio/libpulse0_0.9.10-3+lenny1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/n/nas/libaudio2_1.9.1-5_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/d/directfb/libdirectfb-1.0-0_1.0.1-11_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/a/aalib/libaa1_1.4p5-37+b1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libc/libcap/libcap1_1.10-14_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.3-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/n/ncurses/libncurses5-dev_5.7+20081213-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/n/ncurses/libncurses5_5.7+20081213-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/slang2/libslang2_2.1.3-3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/g/gpm/libgpm2_1.20.4-3.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/sdl-mixer1.2/libsdl-mixer1.2-dev_1.2.8-4_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/sdl-mixer1.2/libsdl-mixer1.2_1.2.8-4_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libm/libmikmod/libmikmod2_3.1.11-a-6_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/smpeg/libsmpeg0_0.4.5+cvs20030824-2.2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/e/enca/libenca-dev_1.9-6_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/e/enca/libenca0_1.9-6_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/j/jasper/libjasper-dev_1.900.1-5.1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libm/libmms/libmms-dev_0.4-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libm/libmms/libmms0_0.4-2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/c/curl/libcurl4-gnutls-dev_7.18.2-8lenny3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/c/curl/libcurl3-gnutls_7.18.2-8lenny3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libi/libidn/libidn11_1.8+20080606-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/o/openldap/libldap-2.4-2_2.4.11-1_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/g/gnutls26/libgnutls26_2.4.2-6+lenny2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libt/libtasn1-3/libtasn1-3_1.4-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.22.dfsg1-23+lenny1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5lenny1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.2-9_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/e/e2fsprogs/libcomerr2_1.41.3-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/c/cmake/cmake_2.6.0-6_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/n/nasm/nasm_2.03.01-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libj/libjpeg6b/libjpeg62-dev_6b-14_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libj/libjpeg6b/libjpeg62_6b-14_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/t/tiff/libtiff4_3.8.2-11_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/p/python2.5/python2.5-dev_2.5.2-15_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/p/python2.5/python2.5_2.5.2-15_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/sdl-image1.2/libsdl-image1.2-dev_1.2.6-3_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/s/sdl-image1.2/libsdl-image1.2_1.2.6-3_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/s/samba/libsmbclient-dev_3.2.5-4lenny7_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/s/samba/libsmbclient_3.2.5-4lenny7_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/s/samba/libwbclient0_3.2.5-4lenny7_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/t/talloc/libtalloc1_1.2.0~git20080616-1_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/f/flac/libflac-dev_1.2.1-1.2_armel.deb
-http://ftp.uk.debian.org/debian/pool/main/libc/libcdio/libiso9660-dev_0.78.2+dfsg1-3_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/d/dbus/libdbus-1-dev_1.2.1-5+lenny1_armel.deb
-http://security.debian.org/debian-security/pool/updates/main/d/dbus/libdbus-1-3_1.2.1-5+lenny1_armel.deb
diff --git a/tools/buildbot/darwin-depends-check b/tools/buildbot/darwin-depends-check
deleted file mode 100755
index 231f67647e..0000000000
--- a/tools/buildbot/darwin-depends-check
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-git diff-tree --quiet -r HEAD@{1}..HEAD@{0} tools/darwin/depends/
-echo $?
diff --git a/tools/buildbot/gitrev-posix b/tools/buildbot/gitrev-posix
deleted file mode 100755
index dd593f1917..0000000000
--- a/tools/buildbot/gitrev-posix
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-#Print the git revision in the form yyyymmdd-abc1234
-#Note: yyyymmdd is the date that abc1234 was committed and not today's date.
-
-which git &>/dev/null
-if [ "$?" != "0" ]; then
- echo "Unknown"
- exit 1
-fi
-git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}' 2>/dev/null
-if [ "$?" != "0" ]; then
- echo "Unknown"
- exit 1
-fi
diff --git a/tools/win32buildtools/nasmw.exe b/tools/win32buildtools/nasmw.exe
deleted file mode 100644
index 8d72cc7c7b..0000000000
--- a/tools/win32buildtools/nasmw.exe
+++ /dev/null
Binary files differ
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 7e02896b74..94e5e9e74b 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -1588,7 +1588,7 @@ void CApplication::OnSettingChanged(const CSetting *setting)
}
else if (settingId == "lookandfeel.skinzoom")
g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE);
- else if (StringUtils::StartsWith(settingId, "audiooutput."))
+ else if (StringUtils::StartsWithNoCase(settingId, "audiooutput."))
{
if (settingId == "audiooutput.guisoundmode")
{
@@ -2226,13 +2226,13 @@ bool CApplication::OnKey(const CKey& key)
m_idleTimer.StartZero();
bool processKey = AlwaysProcess(action);
- if (StringUtils::StartsWith(action.GetName(),"CECToggleState") || StringUtils::StartsWith(action.GetName(),"CECStandby"))
+ if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState") || StringUtils::StartsWithNoCase(action.GetName(),"CECStandby"))
{
bool ret = true;
CLog::Log(LOGDEBUG, "%s: action %s [%d], toggling state of playing device", __FUNCTION__, action.GetName().c_str(), action.GetID());
// do not wake up the screensaver right after switching off the playing device
- if (StringUtils::StartsWith(action.GetName(),"CECToggleState"))
+ if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState"))
ret = CApplicationMessenger::Get().CECToggleState();
else
ret = CApplicationMessenger::Get().CECStandby();
@@ -3371,9 +3371,6 @@ void CApplication::Stop(int exitCode)
SaveFileState(true);
- // cancel any jobs from the jobmanager
- CJobManager::GetInstance().CancelJobs();
-
g_alarmClock.StopThread();
if( m_bSystemScreenSaverEnable )
@@ -3396,6 +3393,9 @@ void CApplication::Stop(int exitCode)
m_ExitCode = exitCode;
CLog::Log(LOGNOTICE, "stop all");
+ // cancel any jobs from the jobmanager
+ CJobManager::GetInstance().CancelJobs();
+
// stop scanning before we kill the network and so on
if (m_musicInfoScanner->IsScanning())
m_musicInfoScanner->Stop();
diff --git a/xbmc/CueDocument.cpp b/xbmc/CueDocument.cpp
index 53b1f14844..e79cb02027 100644
--- a/xbmc/CueDocument.cpp
+++ b/xbmc/CueDocument.cpp
@@ -103,7 +103,7 @@ bool CCueDocument::Parse(const CStdString &strFile)
{
if (!ReadNextLine(strLine))
break;
- if (StringUtils::StartsWith(strLine,"INDEX 01"))
+ if (StringUtils::StartsWithNoCase(strLine,"INDEX 01"))
{
if (bCurrentFileChanged)
{
@@ -124,7 +124,7 @@ bool CCueDocument::Parse(const CStdString &strFile)
if (m_iTotalTracks >= 0)
m_Track[m_iTotalTracks].iStartTime = time; // start time of the next track
}
- else if (StringUtils::StartsWith(strLine,"TITLE"))
+ else if (StringUtils::StartsWithNoCase(strLine,"TITLE"))
{
if (m_iTotalTracks == -1) // No tracks yet
ExtractQuoteInfo(strLine, m_strAlbum);
@@ -140,14 +140,14 @@ bool CCueDocument::Parse(const CStdString &strFile)
}
}
}
- else if (StringUtils::StartsWith(strLine,"PERFORMER"))
+ else if (StringUtils::StartsWithNoCase(strLine,"PERFORMER"))
{
if (m_iTotalTracks == -1) // No tracks yet
ExtractQuoteInfo(strLine, m_strArtist);
else // New Artist for this track
ExtractQuoteInfo(strLine, m_Track[m_iTotalTracks].strArtist);
}
- else if (StringUtils::StartsWith(strLine,"TRACK"))
+ else if (StringUtils::StartsWithNoCase(strLine,"TRACK"))
{
int iTrackNumber = ExtractNumericInfo(strLine.Mid(5));
@@ -164,13 +164,13 @@ bool CCueDocument::Parse(const CStdString &strFile)
bCurrentFileChanged = false;
}
- else if (StringUtils::StartsWith(strLine,"REM DISCNUMBER"))
+ else if (StringUtils::StartsWithNoCase(strLine,"REM DISCNUMBER"))
{
int iDiscNumber = ExtractNumericInfo(strLine.Mid(14));
if (iDiscNumber > 0)
m_iDiscNumber = iDiscNumber;
}
- else if (StringUtils::StartsWith(strLine,"FILE"))
+ else if (StringUtils::StartsWithNoCase(strLine,"FILE"))
{
// already a file name? then the time computation will be changed
if(strCurrentFile.size() > 0)
@@ -182,13 +182,13 @@ bool CCueDocument::Parse(const CStdString &strFile)
if (strCurrentFile.length() > 0)
ResolvePath(strCurrentFile, strFile);
}
- else if (StringUtils::StartsWith(strLine,"REM DATE"))
+ else if (StringUtils::StartsWithNoCase(strLine,"REM DATE"))
{
int iYear = ExtractNumericInfo(strLine.Mid(8));
if (iYear > 0)
m_iYear = iYear;
}
- else if (StringUtils::StartsWith(strLine,"REM GENRE"))
+ else if (StringUtils::StartsWithNoCase(strLine,"REM GENRE"))
{
if (!ExtractQuoteInfo(strLine, m_strGenre))
{
@@ -201,13 +201,13 @@ bool CCueDocument::Parse(const CStdString &strFile)
}
}
}
- else if (StringUtils::StartsWith(strLine,"REM REPLAYGAIN_ALBUM_GAIN"))
+ else if (StringUtils::StartsWithNoCase(strLine,"REM REPLAYGAIN_ALBUM_GAIN"))
m_replayGainAlbumGain = (float)atof(strLine.Mid(26));
- else if (StringUtils::StartsWith(strLine,"REM REPLAYGAIN_ALBUM_PEAK"))
+ else if (StringUtils::StartsWithNoCase(strLine,"REM REPLAYGAIN_ALBUM_PEAK"))
m_replayGainAlbumPeak = (float)atof(strLine.Mid(26));
- else if (StringUtils::StartsWith(strLine,"REM REPLAYGAIN_TRACK_GAIN") && m_iTotalTracks >= 0)
+ else if (StringUtils::StartsWithNoCase(strLine,"REM REPLAYGAIN_TRACK_GAIN") && m_iTotalTracks >= 0)
m_Track[m_iTotalTracks].replayGainTrackGain = (float)atof(strLine.Mid(26));
- else if (StringUtils::StartsWith(strLine,"REM REPLAYGAIN_TRACK_PEAK") && m_iTotalTracks >= 0)
+ else if (StringUtils::StartsWithNoCase(strLine,"REM REPLAYGAIN_TRACK_PEAK") && m_iTotalTracks >= 0)
m_Track[m_iTotalTracks].replayGainTrackPeak = (float)atof(strLine.Mid(26));
}
diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
index 07a50cba39..4e5667135c 100644
--- a/xbmc/addons/Addon.cpp
+++ b/xbmc/addons/Addon.cpp
@@ -314,7 +314,7 @@ bool CAddon::MeetsVersion(const AddonVersion &version) const
// if the addon is one of xbmc's extension point definitions (addonid starts with "xbmc.")
// and the minversion is "0.0.0" i.e. no <backwards-compatibility> tag has been specified
// we need to assume that the current version is not backwards-compatible and therefore check against the actual version
- if (StringUtils::StartsWith(m_props.id, "xbmc.") &&
+ if (StringUtils::StartsWithNoCase(m_props.id, "xbmc.") &&
(strlen(m_props.minversion.c_str()) == 0 || StringUtils::EqualsNoCase(m_props.minversion.c_str(), "0.0.0")))
return m_props.version == version;
diff --git a/xbmc/android/jni/ConnectivityManager.cpp b/xbmc/android/jni/ConnectivityManager.cpp
index f31035ff3d..2acd939cdb 100644
--- a/xbmc/android/jni/ConnectivityManager.cpp
+++ b/xbmc/android/jni/ConnectivityManager.cpp
@@ -38,7 +38,7 @@ int CJNIConnectivityManager::DEFAULT_NETWORK_PREFERENCE(0);
void CJNIConnectivityManager::PopulateStaticFields()
{
- jhclass clazz = find_class("android.net.ConnectivityManager");
+ jhclass clazz = find_class("android/net/ConnectivityManager");
TYPE_MOBILE = (get_static_field<int>(clazz, "TYPE_MOBILE"));
TYPE_WIFI = (get_static_field<int>(clazz, "TYPE_WIFI"));
TYPE_MOBILE_MMS = (get_static_field<int>(clazz, "TYPE_MOBILE_MMS"));
diff --git a/xbmc/android/jni/MediaCodecInfo.cpp b/xbmc/android/jni/MediaCodecInfo.cpp
index 7a924be419..983ab70cdf 100644
--- a/xbmc/android/jni/MediaCodecInfo.cpp
+++ b/xbmc/android/jni/MediaCodecInfo.cpp
@@ -298,7 +298,7 @@ std::vector<int> CJNIMediaCodecInfoCodecCapabilities::colorFormats() const
{
JNIEnv *env = xbmc_jnienv();
- jhintArray colorFormats = get_field<jhintArray>(m_object, "numBytesOfEncryptedData");
+ jhintArray colorFormats = get_field<jhintArray>(m_object, "colorFormats");
jsize size = env->GetArrayLength(colorFormats.get());
std::vector<int> intarray;
intarray.resize(size);
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
index 753829ade8..c0746dc8f4 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
@@ -981,6 +981,7 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt)
if (!(*it)->m_resampleBuffers)
{
(*it)->m_resampleBuffers = new CActiveAEBufferPoolResample((*it)->m_inputBuffers->m_format, outputFormat, m_settings.resampleQuality);
+ (*it)->m_resampleBuffers->m_changeResampler = (*it)->m_forceResampler;
(*it)->m_resampleBuffers->Create(MAX_CACHE_LEVEL*1000, false, m_settings.stereoupmix);
}
if (m_mode == MODE_TRANSCODE || m_streams.size() > 1)
@@ -1073,6 +1074,9 @@ CActiveAEStream* CActiveAE::CreateStream(MsgStreamNew *streamMsg)
if (streamMsg->options & AESTREAM_PAUSED)
stream->m_paused = true;
+ if (streamMsg->options & AESTREAM_FORCE_RESAMPLE)
+ stream->m_forceResampler = true;
+
m_streams.push_back(stream);
return stream;
@@ -1567,6 +1571,7 @@ bool CActiveAE::RunStages()
allStreamsReady = false;
}
+ bool needClamp = false;
for (it = m_streams.begin(); it != m_streams.end() && allStreamsReady; ++it)
{
if ((*it)->m_paused || !(*it)->m_resampleBuffers)
@@ -1634,7 +1639,9 @@ bool CActiveAE::RunStages()
#else
float* fbuffer = (float*) out->pkt->data[j]+i*nb_floats;
for (int k = 0; k < nb_floats; ++k)
- *fbuffer++ *= m_muted ? 0.0 : volume;
+ {
+ fbuffer[k] *= m_muted ? 0.0 : volume;
+ }
#endif
}
}
@@ -1697,9 +1704,21 @@ bool CActiveAE::RunStages()
float *src = (float*)mix->pkt->data[j]+i*nb_floats;
#ifdef __SSE__
CAEUtil::SSEMulAddArray(dst, src, m_muted ? 0.0 : volume, nb_floats);
+ for (int k = 0; k < nb_floats; ++k)
+ {
+ if (fabs(dst[k]) > 1.0f)
+ {
+ needClamp = true;
+ break;
+ }
+ }
#else
for (int k = 0; k < nb_floats; ++k)
- *dst++ += *src++ * m_muted ? 0.0 : volume;
+ {
+ dst[k] += src[k] * m_muted ? 0.0 : volume;
+ if (fabs(dst[k]) > 1.0f)
+ needClamp = true;
+ }
#endif
}
}
@@ -1707,6 +1726,16 @@ bool CActiveAE::RunStages()
}
busy = true;
}
+ }// for
+
+ // finally clamp samples
+ if(out && needClamp)
+ {
+ int nb_floats = out->pkt->nb_samples * out->pkt->config.channels / out->pkt->planes;
+ for(int i=0; i<out->pkt->planes; i++)
+ {
+ CAEUtil::ClampArray((float*)out->pkt->data[i], nb_floats);
+ }
}
// process output buffer, gui sounds, encode, viz
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
index 4d8f36d43f..e64b2485fa 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
@@ -159,7 +159,8 @@ bool CActiveAEBufferPoolResample::Create(unsigned int totaltime, bool remap, boo
if (m_inputFormat.m_channelLayout != m_format.m_channelLayout ||
m_inputFormat.m_sampleRate != m_format.m_sampleRate ||
- m_inputFormat.m_dataFormat != m_format.m_dataFormat)
+ m_inputFormat.m_dataFormat != m_format.m_dataFormat ||
+ m_changeResampler)
{
m_resampler = new CActiveAEResample();
m_resampler->Init(CActiveAEResample::GetAVChannelLayout(m_format.m_channelLayout),
@@ -178,6 +179,7 @@ bool CActiveAEBufferPoolResample::Create(unsigned int totaltime, bool remap, boo
}
m_stereoUpmix = upmix;
+ m_changeResampler = false;
return true;
}
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
index 7649b7ab2c..2c5f41bb69 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
@@ -82,6 +82,15 @@ bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst
m_dllAvUtil.av_opt_set_int(m_pContext, "output_sample_bits", m_dst_bits, 0);
}
+ // tell resampler to clamp float values
+ // not required for sink stage (remapLayout == true)
+ if ((m_dst_fmt == AV_SAMPLE_FMT_FLT || m_dst_fmt == AV_SAMPLE_FMT_FLTP) &&
+ (m_src_fmt == AV_SAMPLE_FMT_FLT || m_src_fmt == AV_SAMPLE_FMT_FLTP) &&
+ !remapLayout)
+ {
+ m_dllAvUtil.av_opt_set_double(m_pContext, "rematrix_maxval", 1.0, 0);
+ }
+
if(!m_pContext)
{
CLog::Log(LOGERROR, "CActiveAEResample::Init - create context failed");
@@ -96,7 +105,7 @@ bool CActiveAEResample::Init(uint64_t dst_chan_layout, int dst_channels, int dst
m_dst_chan_layout = 0;
for (unsigned int out=0; out<remapLayout->Count(); out++)
{
- m_dst_chan_layout += (1 << out);
+ m_dst_chan_layout += (uint64_t) (1 << out);
int idx = GetAVChannelIndex((*remapLayout)[out], m_src_chan_layout);
if (idx >= 0)
{
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
index 077ef2e3ff..295951078f 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
@@ -713,7 +713,7 @@ unsigned int CActiveAESink::OutputSamples(CSampleBuffer* samples)
unsigned int frames = samples->pkt->nb_samples;
unsigned int maxFrames;
int retry = 0;
- int written = 0;
+ unsigned int written = 0;
double sinkDelay = 0.0;
switch(m_convertState)
@@ -756,6 +756,13 @@ unsigned int CActiveAESink::OutputSamples(CSampleBuffer* samples)
else
continue;
}
+ else if (written > maxFrames)
+ {
+ m_extError = true;
+ CLog::Log(LOGERROR, "CActiveAESink::OutputSamples - sink returned error");
+ m_stats->UpdateSinkDelay(0, samples->pool ? maxFrames : 0);
+ return 0;
+ }
frames -= written;
buffer += written*m_sinkFormat.m_frameSize;
sinkDelay = m_sink->GetDelay();
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp
index 897f4637a5..d5b01ea0d6 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp
@@ -55,6 +55,7 @@ CActiveAEStream::CActiveAEStream(AEAudioFormat *format)
m_convertFn = NULL;
m_leftoverBuffer = new uint8_t[m_format.m_frameSize];
m_leftoverBytes = 0;
+ m_forceResampler = false;
}
CActiveAEStream::~CActiveAEStream()
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h
index 75aa47c7f8..607e4caa16 100644
--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h
+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h
@@ -115,6 +115,7 @@ protected:
float m_fadingBase;
float m_fadingTarget;
int m_fadingTime;
+ bool m_forceResampler;
};
}
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
index efe8460580..4a8948b916 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
@@ -291,7 +291,7 @@ void CAESinkAUDIOTRACK::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
m_info.m_sampleRates.push_back(44100);
m_info.m_sampleRates.push_back(48000);
m_info.m_dataFormats.push_back(AE_FMT_S16LE);
-#if defined(__ARM_NEON__)
+#if 0 && defined(__ARM_NEON__)
if (g_cpuInfo.GetCPUFeatures() & CPU_FEATURE_NEON)
m_info.m_dataFormats.push_back(AE_FMT_FLOAT);
#endif
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp
index 58d8ca6809..f4e7649aab 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkDirectSound.cpp
@@ -149,7 +149,7 @@ bool CAESinkDirectSound::Initialize(AEAudioFormat &format, std::string &device)
std::string deviceFriendlyName;
DirectSoundEnumerate(DSEnumCallback, &DSDeviceList);
- if(StringUtils::EndsWith(device, std::string("default")))
+ if(StringUtils::EndsWithNoCase(device, std::string("default")))
strDeviceGUID = GetDefaultDevice();
for (std::list<DSDevice>::iterator itt = DSDeviceList.begin(); itt != DSDeviceList.end(); ++itt)
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
index f049bca9c0..1e87712f4f 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
@@ -231,7 +231,7 @@ bool CAESinkWASAPI::Initialize(AEAudioFormat &format, std::string &device)
hr = pEnumDevices->GetCount(&uiCount);
EXIT_ON_FAILURE(hr, __FUNCTION__": Retrieval of audio endpoint count failed.")
- if(StringUtils::EndsWith(device, std::string("default")))
+ if(StringUtils::EndsWithNoCase(device, std::string("default")))
bdefault = true;
if(!bdefault)
diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
index d54e0d7655..d4565e969e 100644
--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
@@ -516,7 +516,7 @@ extern "C"
bool bResult;
// We need to validate the path here as some calls from ie. libdvdnav
- // or the python DLLs have malformed slashes on Win32 & Xbox
+ // or the python DLLs have malformed slashes on Win32
// (-> E:\test\VIDEO_TS/VIDEO_TS.BUP))
if (bWrite)
bResult = pFile->OpenForWrite(CUtil::ValidatePath(str), bOverwrite);
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
index 14f9a19e1d..ee437a8996 100644
--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
@@ -170,6 +170,12 @@ bool CLinuxRendererGLES::ValidateRenderTarget()
{
CLog::Log(LOGNOTICE,"Using GL_TEXTURE_2D");
+ // function pointer for texture might change in
+ // call to LoadShaders
+ glFinish();
+ for (int i = 0 ; i < NUM_BUFFERS ; i++)
+ (this->*m_textureDelete)(i);
+
// create the yuv textures
LoadShaders();
@@ -419,6 +425,22 @@ void CLinuxRendererGLES::Reset()
}
}
+void CLinuxRendererGLES::Flush()
+{
+ if (!m_bValidated)
+ return;
+
+ glFinish();
+
+ for (int i = 0 ; i < m_NumYV12Buffers ; i++)
+ (this->*m_textureDelete)(i);
+
+ glFinish();
+ m_bValidated = false;
+ m_fbo.Cleanup();
+ m_iYV12RenderBuffer = 0;
+}
+
void CLinuxRendererGLES::Update()
{
if (!m_bConfigured) return;
@@ -795,6 +817,17 @@ inline void CLinuxRendererGLES::ReorderDrawPoints()
}
}
+void CLinuxRendererGLES::ReleaseBuffer(int idx)
+{
+#ifdef HAVE_VIDEOTOOLBOXDECODER
+ YUVBUFFER &buf = m_buffers[idx];
+
+ if (buf.cvBufferRef)
+ CVBufferRelease(buf.cvBufferRef);
+ buf.cvBufferRef = NULL;
+#endif
+}
+
void CLinuxRendererGLES::Render(DWORD flags, int index)
{
// If rendered directly by the hardware
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
index 6ed70ae7c5..e15ec05155 100644
--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
@@ -138,7 +138,9 @@ public:
virtual unsigned int PreInit();
virtual void UnInit();
virtual void Reset(); /* resets renderer after seek for example */
+ virtual void Flush();
virtual void ReorderDrawPoints();
+ virtual void ReleaseBuffer(int idx);
virtual void SetBufferSize(int numBuffers) { m_NumYV12Buffers = numBuffers; }
virtual unsigned int GetMaxBufferSize() { return NUM_BUFFERS; }
virtual unsigned int GetProcessorSize();
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/StageFrightVideo.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/StageFrightVideo.cpp
index 4ca0a27ea9..4060f3bc65 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/StageFrightVideo.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/StageFrightVideo.cpp
@@ -541,19 +541,6 @@ bool CStageFrightVideo::Open(CDVDStreamInfo &hints)
CLog::Log(LOGERROR, "%s::%s - %s\n", CLASSNAME, __func__,"Blacklisted component (MP4)");
goto fail;
}
- else if (!strncmp(component, "OMX.rk.", 7))
- {
- if (g_advancedSettings.m_stagefrightConfig.useAVCcodec != 1 && g_advancedSettings.m_stagefrightConfig.useMP4codec != 1)
- {
- if (p->width % 32 != 0 || p->height % 16 != 0)
- {
- // Buggy. Hard crash on non MOD16 height videos and stride errors for non MOD32 width
- CLog::Log(LOGERROR, "%s::%s - %s\n", CLASSNAME, __func__,"Blacklisted component (MOD16)");
- goto fail;
-
- }
- }
- }
}
cropLeft = cropTop = cropRight = cropBottom = 0;
@@ -616,6 +603,7 @@ int CStageFrightVideo::Decode(uint8_t *pData, int iSize, double dts, double pts
Frame *frame;
int demuxer_bytes = iSize;
uint8_t *demuxer_content = pData;
+ int ret = 0;
if (demuxer_content)
{
@@ -628,12 +616,21 @@ int CStageFrightVideo::Decode(uint8_t *pData, int iSize, double dts, double pts
frame->pts = (dts != DVD_NOPTS_VALUE) ? pts_dtoi(dts) : ((pts != DVD_NOPTS_VALUE) ? pts_dtoi(pts) : 0);
else
frame->pts = (pts != DVD_NOPTS_VALUE) ? pts_dtoi(pts) : ((dts != DVD_NOPTS_VALUE) ? pts_dtoi(dts) : 0);
+
+ // No valid pts? libstagefright asserts on this.
+ if (frame->pts < 0)
+ {
+ free(frame);
+ return ret;
+ }
+
frame->medbuf = p->getBuffer(demuxer_bytes);
if (!frame->medbuf)
{
free(frame);
return VC_ERROR;
}
+
fast_memcpy(frame->medbuf->data(), demuxer_content, demuxer_bytes);
frame->medbuf->meta_data()->clear();
frame->medbuf->meta_data()->setInt64(kKeyTime, frame->pts);
@@ -645,7 +642,6 @@ int CStageFrightVideo::Decode(uint8_t *pData, int iSize, double dts, double pts
p->in_mutex.unlock();
}
- int ret = 0;
if (p->inputBufferAvailable() && p->in_queue.size() < INBUFCOUNT)
ret |= VC_BUFFER;
else
diff --git a/xbmc/filesystem/PluginDirectory.cpp b/xbmc/filesystem/PluginDirectory.cpp
index 438cd7b044..6c95b3ddd8 100644
--- a/xbmc/filesystem/PluginDirectory.cpp
+++ b/xbmc/filesystem/PluginDirectory.cpp
@@ -529,7 +529,7 @@ bool CPluginDirectory::WaitOnScriptResult(const CStdString &scriptPath, int scri
cancelled = true;
startTime = XbmcThreads::SystemClockMillis();
}
- if (cancelled && XbmcThreads::SystemClockMillis() - startTime > timeToKillScript)
+ if ((cancelled && XbmcThreads::SystemClockMillis() - startTime > timeToKillScript) || g_application.m_bStop)
{ // cancel our script
if (scriptId != -1 && CScriptInvocationManager::Get().IsRunning(scriptId))
{
diff --git a/xbmc/filesystem/SFTPFile.cpp b/xbmc/filesystem/SFTPFile.cpp
index 59de2e43e2..79fb944fc2 100644
--- a/xbmc/filesystem/SFTPFile.cpp
+++ b/xbmc/filesystem/SFTPFile.cpp
@@ -56,6 +56,46 @@ static CStdString CorrectPath(const CStdString path)
return "/" + path;
}
+static const char * SFTPErrorText(int sftp_error)
+{
+ switch(sftp_error)
+ {
+ case SSH_FX_OK:
+ return "No error";
+ case SSH_FX_EOF:
+ return "End-of-file encountered";
+ case SSH_FX_NO_SUCH_FILE:
+ return "File doesn't exist";
+ case SSH_FX_PERMISSION_DENIED:
+ return "Permission denied";
+ case SSH_FX_BAD_MESSAGE:
+ return "Garbage received from server";
+ case SSH_FX_NO_CONNECTION:
+ return "No connection has been set up";
+ case SSH_FX_CONNECTION_LOST:
+ return "There was a connection, but we lost it";
+ case SSH_FX_OP_UNSUPPORTED:
+ return "Operation not supported by the server";
+ case SSH_FX_INVALID_HANDLE:
+ return "Invalid file handle";
+ case SSH_FX_NO_SUCH_PATH:
+ return "No such file or directory path exists";
+ case SSH_FX_FILE_ALREADY_EXISTS:
+ return "An attempt to create an already existing file or directory has been made";
+ case SSH_FX_WRITE_PROTECT:
+ return "We are trying to write on a write-protected filesystem";
+ case SSH_FX_NO_MEDIA:
+ return "No media in remote drive";
+ case -1:
+ return "Not a valid error code, probably called on an invalid session";
+ default:
+ CLog::Log(LOGERROR, "SFTPErrorText: Unknown error code: %d", sftp_error);
+ }
+ return "Unknown error code";
+}
+
+
+
CSFTPSession::CSFTPSession(const CStdString &host, unsigned int port, const CStdString &username, const CStdString &password)
{
CLog::Log(LOGINFO, "SFTPSession: Creating new session on host '%s:%d' with user '%s'", host.c_str(), port, username.c_str());
@@ -101,6 +141,7 @@ void CSFTPSession::CloseFileHandle(sftp_file handle)
bool CSFTPSession::GetDirectory(const CStdString &base, const CStdString &folder, CFileItemList &items)
{
+ int sftp_error = SSH_FX_OK;
if (m_connected)
{
sftp_dir dir = NULL;
@@ -109,9 +150,17 @@ bool CSFTPSession::GetDirectory(const CStdString &base, const CStdString &folder
CSingleLock lock(m_critSect);
m_LastActive = XbmcThreads::SystemClockMillis();
dir = sftp_opendir(m_sftp_session, CorrectPath(folder).c_str());
+
+ //Doing as little work as possible within the critical section
+ if (!dir)
+ sftp_error = sftp_get_error(m_sftp_session);
}
- if (dir)
+ if (!dir)
+ {
+ CLog::Log(LOGERROR, "%s: %s", __FUNCTION__, SFTPErrorText(sftp_error));
+ }
+ else
{
bool read = true;
while (read)
@@ -366,7 +415,10 @@ bool CSFTPSession::Connect(const CStdString &host, unsigned int port, const CStd
}
if (!VerifyKnownHost(m_session))
+ {
+ CLog::Log(LOGERROR, "SFTPSession: Host is not known '%s'", ssh_get_error(m_session));
return false;
+ }
int noAuth = SSH_AUTH_DENIED;
@@ -388,10 +440,18 @@ bool CSFTPSession::Connect(const CStdString &host, unsigned int port, const CStd
// Try to authenticate with password
int passwordAuth = SSH_AUTH_DENIED;
- if (method & SSH_AUTH_METHOD_PASSWORD && publicKeyAuth != SSH_AUTH_SUCCESS && (passwordAuth = ssh_userauth_password(m_session, username.c_str(), password.c_str())) == SSH_AUTH_ERROR)
+ if (method & SSH_AUTH_METHOD_PASSWORD)
{
- CLog::Log(LOGERROR, "SFTPSession: Failed to authenticate via password '%s'", ssh_get_error(m_session));
- return false;
+ if (publicKeyAuth != SSH_AUTH_SUCCESS &&
+ (passwordAuth = ssh_userauth_password(m_session, username.c_str(), password.c_str())) == SSH_AUTH_ERROR)
+ {
+ CLog::Log(LOGERROR, "SFTPSession: Failed to authenticate via password '%s'", ssh_get_error(m_session));
+ return false;
+ }
+ }
+ else if (!password.empty())
+ {
+ CLog::Log(LOGERROR, "SFTPSession: Password present, but server does not support password authentication");
}
if (noAuth == SSH_AUTH_SUCCESS || publicKeyAuth == SSH_AUTH_SUCCESS || passwordAuth == SSH_AUTH_SUCCESS)
@@ -412,6 +472,10 @@ bool CSFTPSession::Connect(const CStdString &host, unsigned int port, const CStd
m_connected = true;
}
+ else
+ {
+ CLog::Log(LOGERROR, "SFTPSession: No authentication method successful");
+ }
return m_connected;
}
diff --git a/xbmc/filesystem/test/TestRarFile.cpp b/xbmc/filesystem/test/TestRarFile.cpp
index 9fcf914142..0536159dff 100644
--- a/xbmc/filesystem/test/TestRarFile.cpp
+++ b/xbmc/filesystem/test/TestRarFile.cpp
@@ -210,7 +210,7 @@ TEST(TestRarFile, StoredRAR)
* an uncompressed RAR archive. See TestRarFile.Read test case.
*/
strpathinrar = itemlist[1]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/reffile.txt", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/reffile.txt"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFREG);
@@ -255,7 +255,7 @@ TEST(TestRarFile, StoredRAR)
/* /testsymlink -> testdir/reffile.txt */
strpathinrar = itemlist[2]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlink", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlink"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK);
@@ -270,7 +270,7 @@ TEST(TestRarFile, StoredRAR)
/* /testsymlinksubdir -> testdir/testsubdir/reffile.txt */
strpathinrar = itemlist[3]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlinksubdir", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlinksubdir"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK);
@@ -280,7 +280,7 @@ TEST(TestRarFile, StoredRAR)
/* /testdir/ */
strpathinrar = itemlist[0]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFDIR);
@@ -345,7 +345,7 @@ TEST(TestRarFile, StoredRAR)
/* FIXME: This directory appears a second time as a file */
strpathinrar = itemlist[3]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir"));
/* /testdir/testsymlink -> testsubdir/reffile.txt */
strpathinrar = itemlist[4]->GetPath();
@@ -432,7 +432,7 @@ TEST(TestRarFile, NormalRAR)
/* /reffile.txt */
strpathinrar = itemlist[1]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/reffile.txt", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/reffile.txt"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFREG);
@@ -477,7 +477,7 @@ TEST(TestRarFile, NormalRAR)
/* /testsymlink -> testdir/reffile.txt */
strpathinrar = itemlist[2]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlink", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlink"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK);
@@ -492,7 +492,7 @@ TEST(TestRarFile, NormalRAR)
/* /testsymlinksubdir -> testdir/testsubdir/reffile.txt */
strpathinrar = itemlist[3]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlinksubdir", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlinksubdir"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK);
@@ -502,7 +502,7 @@ TEST(TestRarFile, NormalRAR)
/* /testdir/ */
strpathinrar = itemlist[0]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/"));
EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer));
EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFDIR);
@@ -567,7 +567,7 @@ TEST(TestRarFile, NormalRAR)
/* FIXME: This directory appears a second time as a file */
strpathinrar = itemlist[3]->GetPath();
- ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir", true));
+ ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir"));
/* /testdir/testsymlink -> testsubdir/reffile.txt */
strpathinrar = itemlist[4]->GetPath();
diff --git a/xbmc/guilib/TextureGL.cpp b/xbmc/guilib/TextureGL.cpp
index 2bce969ef4..97da5e2810 100644
--- a/xbmc/guilib/TextureGL.cpp
+++ b/xbmc/guilib/TextureGL.cpp
@@ -23,6 +23,7 @@
#include "windowing/WindowingFactory.h"
#include "utils/log.h"
#include "utils/GLUtils.h"
+#include "guilib/TextureManager.h"
#if defined(HAS_GL) || defined(HAS_GLES)
@@ -50,7 +51,7 @@ void CGLTexture::CreateTextureObject()
void CGLTexture::DestroyTextureObject()
{
if (m_texture)
- glDeleteTextures(1, (GLuint*) &m_texture);
+ g_TextureManager.ReleaseHwTexture(m_texture);
}
void CGLTexture::LoadToGPU()
diff --git a/xbmc/guilib/TextureManager.cpp b/xbmc/guilib/TextureManager.cpp
index 18257d5a47..eff53151a8 100644
--- a/xbmc/guilib/TextureManager.cpp
+++ b/xbmc/guilib/TextureManager.cpp
@@ -487,6 +487,7 @@ void CGUITextureManager::FreeUnusedTextures(unsigned int timeDelay)
void CGUITextureManager::ReleaseHwTexture(unsigned int texture)
{
+ CSingleLock lock(g_graphicsContext);
m_unusedHwTextures.push_back(texture);
}
diff --git a/xbmc/interfaces/generic/ScriptInvocationManager.cpp b/xbmc/interfaces/generic/ScriptInvocationManager.cpp
index 3e47fa506d..b3c98f0dbb 100644
--- a/xbmc/interfaces/generic/ScriptInvocationManager.cpp
+++ b/xbmc/interfaces/generic/ScriptInvocationManager.cpp
@@ -122,7 +122,7 @@ void CScriptInvocationManager::RegisterLanguageInvocationHandler(ILanguageInvoca
string ext = extension;
StringUtils::ToLower(ext);
- if (!StringUtils::StartsWith(ext, "."))
+ if (!StringUtils::StartsWithNoCase(ext, "."))
ext = "." + ext;
CSingleLock lock(m_critSection);
diff --git a/xbmc/interfaces/legacy/ModuleXbmc.cpp b/xbmc/interfaces/legacy/ModuleXbmc.cpp
index 52c870691f..649a462a6d 100644
--- a/xbmc/interfaces/legacy/ModuleXbmc.cpp
+++ b/xbmc/interfaces/legacy/ModuleXbmc.cpp
@@ -122,6 +122,7 @@ namespace XBMCAddon
String executeJSONRPC(const char* jsonrpccommand)
{
TRACE;
+ DelayedCallGuard dg;
#ifdef HAS_JSONRPC
String ret;
diff --git a/xbmc/music/windows/GUIWindowMusicBase.cpp b/xbmc/music/windows/GUIWindowMusicBase.cpp
index 875a3f21c4..72566f763e 100644
--- a/xbmc/music/windows/GUIWindowMusicBase.cpp
+++ b/xbmc/music/windows/GUIWindowMusicBase.cpp
@@ -1154,7 +1154,7 @@ bool CGUIWindowMusicBase::CheckFilterAdvanced(CFileItemList &items) const
bool CGUIWindowMusicBase::CanContainFilter(const CStdString &strDirectory) const
{
- return StringUtils::StartsWith(strDirectory, "musicdb://");
+ return StringUtils::StartsWithNoCase(strDirectory, "musicdb://");
}
void CGUIWindowMusicBase::OnInitWindow()
diff --git a/xbmc/music/windows/GUIWindowMusicNav.cpp b/xbmc/music/windows/GUIWindowMusicNav.cpp
index ef34b82587..15c37dc742 100644
--- a/xbmc/music/windows/GUIWindowMusicNav.cpp
+++ b/xbmc/music/windows/GUIWindowMusicNav.cpp
@@ -447,7 +447,7 @@ void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &butt
{
if (!item->m_bIsFolder) // music video
buttons.Add(CONTEXT_BUTTON_INFO, 20393);
- if (StringUtils::StartsWith(item->GetPath(), "videodb://musicvideos/artist/") && item->m_bIsFolder)
+ if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://musicvideos/artists/") && item->m_bIsFolder)
{
long idArtist = m_musicdatabase.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel());
if (idArtist > - 1)
@@ -565,7 +565,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
return CGUIWindowMusicBase::OnContextButton(itemNumber,button);
// music videos - artists
- if (StringUtils::StartsWith(item->GetPath(), "videodb://musicvideos/artists/"))
+ if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://musicvideos/artists/"))
{
long idArtist = m_musicdatabase.GetArtistByName(item->GetLabel());
if (idArtist == -1)
@@ -582,7 +582,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
}
// music videos - albums
- if (StringUtils::StartsWith(item->GetPath(), "videodb://musicvideos/albums/"))
+ if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://musicvideos/albums/"))
{
long idAlbum = m_musicdatabase.GetAlbumByName(item->GetLabel());
if (idAlbum == -1)
@@ -630,7 +630,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button)
CStdString strPath;
CVideoDatabase database;
database.Open();
- strPath.Format("videodb://musicvideos/artist/%ld/",database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator)));
+ strPath.Format("videodb://musicvideos/artists/%ld/",database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator)));
g_windowManager.ActivateWindow(WINDOW_VIDEO_NAV,strPath);
return true;
}
diff --git a/xbmc/network/TCPServer.cpp b/xbmc/network/TCPServer.cpp
index 4283ce7b21..321ab5757e 100644
--- a/xbmc/network/TCPServer.cpp
+++ b/xbmc/network/TCPServer.cpp
@@ -526,7 +526,7 @@ void CTCPServer::CTCPClient::Send(const char *data, unsigned int size)
do
{
CSingleLock lock (m_critSection);
- sent += send(m_socket, data, size - sent, 0);
+ sent += send(m_socket, data + sent, size - sent, 0);
} while (sent < size);
}
diff --git a/xbmc/network/WebServer.cpp b/xbmc/network/WebServer.cpp
index 68f9cbf83c..82625e19b5 100644
--- a/xbmc/network/WebServer.cpp
+++ b/xbmc/network/WebServer.cpp
@@ -965,7 +965,7 @@ int64_t CWebServer::ParseRangeHeader(const std::string &rangeHeaderValue, int64_
firstPosition = 0;
lastPosition = totalLength - 1;
- if (rangeHeaderValue.empty() || !StringUtils::StartsWith(rangeHeaderValue, "bytes="))
+ if (rangeHeaderValue.empty() || !StringUtils::StartsWithNoCase(rangeHeaderValue, "bytes="))
return totalLength;
int64_t rangesLength = 0;
diff --git a/xbmc/network/upnp/UPnPServer.cpp b/xbmc/network/upnp/UPnPServer.cpp
index dd92e6f3f8..f737495abc 100644
--- a/xbmc/network/upnp/UPnPServer.cpp
+++ b/xbmc/network/upnp/UPnPServer.cpp
@@ -547,7 +547,7 @@ CUPnPServer::OnBrowseMetadata(PLT_ActionReference& action,
// attempt to determine the parent of this item
CStdString parent;
- if (URIUtils::IsVideoDb((const char*)id) || URIUtils::IsMusicDb((const char*)id) || StringUtils::StartsWith((const char*)id, "library://video/")) {
+ if (URIUtils::IsVideoDb((const char*)id) || URIUtils::IsMusicDb((const char*)id) || StringUtils::StartsWithNoCase((const char*)id, "library://video/")) {
if (!URIUtils::GetParentPath((const char*)id, parent)) {
parent = "0";
}
@@ -560,11 +560,11 @@ CUPnPServer::OnBrowseMetadata(PLT_ActionReference& action,
// however this is quicker to implement and subsequently purge when a
// better solution presents itself
CStdString child_id((const char*)id);
- if (StringUtils::StartsWith(child_id, "special://musicplaylists/")) parent = "musicdb://";
- else if (StringUtils::StartsWith(child_id, "special://videoplaylists/")) parent = "library://video/";
- else if (StringUtils::StartsWith(child_id, "sources://video/")) parent = "library://video/";
- else if (StringUtils::StartsWith(child_id, "special://profile/playlists/music/")) parent = "special://musicplaylists/";
- else if (StringUtils::StartsWith(child_id, "special://profile/playlists/video/")) parent = "special://videoplaylists/";
+ if (StringUtils::StartsWithNoCase(child_id, "special://musicplaylists/")) parent = "musicdb://";
+ else if (StringUtils::StartsWithNoCase(child_id, "special://videoplaylists/")) parent = "library://video/";
+ else if (StringUtils::StartsWithNoCase(child_id, "sources://video/")) parent = "library://video/";
+ else if (StringUtils::StartsWithNoCase(child_id, "special://profile/playlists/music/")) parent = "special://musicplaylists/";
+ else if (StringUtils::StartsWithNoCase(child_id, "special://profile/playlists/video/")) parent = "special://videoplaylists/";
else parent = "sources://video/"; // this can only match video sources
}
@@ -729,13 +729,13 @@ CUPnPServer::BuildResponse(PLT_ActionReference& action,
NPT_Reference<CThumbLoader> thumb_loader;
if (URIUtils::IsVideoDb(items.GetPath()) ||
- StringUtils::StartsWith(items.GetPath(), "library://video/") ||
- StringUtils::StartsWith(items.GetPath(), "special://profile/playlists/video/")) {
+ StringUtils::StartsWithNoCase(items.GetPath(), "library://video/") ||
+ StringUtils::StartsWithNoCase(items.GetPath(), "special://profile/playlists/video/")) {
thumb_loader = NPT_Reference<CThumbLoader>(new CVideoThumbLoader());
}
else if (URIUtils::IsMusicDb(items.GetPath()) ||
- StringUtils::StartsWith(items.GetPath(), "special://profile/playlists/music/")) {
+ StringUtils::StartsWithNoCase(items.GetPath(), "special://profile/playlists/music/")) {
thumb_loader = NPT_Reference<CThumbLoader>(new CMusicThumbLoader());
}
diff --git a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp
index 12eaded4f2..cc09fd15e3 100644
--- a/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp
+++ b/xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp
@@ -95,8 +95,8 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
void CGUIDialogPVRChannelsOSD::OnInitWindow()
{
- /* Close dialog immediately if now TV or radio channel is playing */
- if (!g_PVRManager.IsPlaying())
+ /* Close dialog immediately if neither a TV nor a radio channel is playing */
+ if (!g_PVRManager.IsPlayingTV() && !g_PVRManager.IsPlayingRadio())
{
Close();
return;
diff --git a/xbmc/settings/MediaSourceSettings.cpp b/xbmc/settings/MediaSourceSettings.cpp
index 92f9e058b4..e8959b3264 100644
--- a/xbmc/settings/MediaSourceSettings.cpp
+++ b/xbmc/settings/MediaSourceSettings.cpp
@@ -326,7 +326,7 @@ bool CMediaSourceSettings::GetSource(const std::string &category, const TiXmlNod
{
CStdString strPath = pPathName->FirstChild()->ValueStr();
- // make sure there are no virtualpaths or stack paths defined in xboxmediacenter.xml
+ // make sure there are no virtualpaths or stack paths defined in sources.xml
if (!URIUtils::IsStack(strPath))
{
// translate special tags
diff --git a/xbmc/settings/SettingDependency.cpp b/xbmc/settings/SettingDependency.cpp
index a4959e41f2..32ac5d1ce9 100644
--- a/xbmc/settings/SettingDependency.cpp
+++ b/xbmc/settings/SettingDependency.cpp
@@ -131,12 +131,12 @@ bool CSettingDependencyCondition::setTarget(const std::string &target)
bool CSettingDependencyCondition::setOperator(const std::string &op)
{
size_t length = 0;
- if (StringUtils::EndsWith(op, "is"))
+ if (StringUtils::EndsWithNoCase(op, "is"))
{
m_operator = SettingDependencyOperatorEquals;
length = 2;
}
- else if (StringUtils::EndsWith(op, "contains"))
+ else if (StringUtils::EndsWithNoCase(op, "contains"))
{
m_operator = SettingDependencyOperatorContains;
length = 8;
diff --git a/xbmc/settings/SettingsManager.cpp b/xbmc/settings/SettingsManager.cpp
index ae676c7920..9c65ab53ca 100644
--- a/xbmc/settings/SettingsManager.cpp
+++ b/xbmc/settings/SettingsManager.cpp
@@ -476,7 +476,7 @@ bool CSettingsManager::GetBool(const std::string &id) const
if (setting == NULL || setting->GetType() != SettingTypeBool)
{
// Backward compatibility (skins use this setting)
- if (setting == NULL && StringUtils::EqualsNoCase(id.c_str(), "lookandfeel.enablemouse"))
+ if (setting == NULL && StringUtils::EqualsNoCase(id, "lookandfeel.enablemouse"))
return GetBool("input.enablemouse");
return false;
diff --git a/xbmc/settings/SkinSettings.cpp b/xbmc/settings/SkinSettings.cpp
index 31a885c720..13aba27e2f 100644
--- a/xbmc/settings/SkinSettings.cpp
+++ b/xbmc/settings/SkinSettings.cpp
@@ -175,13 +175,13 @@ void CSkinSettings::Reset()
// clear all the settings and strings from this skin.
for (map<int, CSkinBool>::iterator it = m_bools.begin(); it != m_bools.end(); ++it)
{
- if (StringUtils::StartsWith(it->second.name, currentSkin))
+ if (StringUtils::StartsWithNoCase(it->second.name, currentSkin))
it->second.value = false;
}
for (map<int, CSkinString>::iterator it = m_strings.begin(); it != m_strings.end(); ++it)
{
- if (StringUtils::StartsWith(it->second.name, currentSkin))
+ if (StringUtils::StartsWithNoCase(it->second.name, currentSkin))
it->second.value.clear();
}
diff --git a/xbmc/utils/AMLUtils.cpp b/xbmc/utils/AMLUtils.cpp
index 6a3100d23f..6104c54cfd 100644
--- a/xbmc/utils/AMLUtils.cpp
+++ b/xbmc/utils/AMLUtils.cpp
@@ -25,6 +25,7 @@
#include <fcntl.h>
#include <string>
+#include "utils/CPUInfo.h"
#include "utils/log.h"
#include "utils/StringUtils.h"
@@ -104,34 +105,16 @@ int aml_get_cputype()
static int aml_cputype = -1;
if (aml_cputype == -1)
{
- // defualt to m1 SoC
- aml_cputype = 1;
+ std::string cpu_hardware = g_cpuInfo.getCPUHardware();
- FILE *cpuinfo_fd = fopen("/proc/cpuinfo", "r");
- if (cpuinfo_fd)
- {
- char buffer[512];
- while (fgets(buffer, sizeof(buffer), cpuinfo_fd))
- {
- std::string stdbuffer(buffer);
- if (stdbuffer.find("MESON-M3") != std::string::npos)
- {
- aml_cputype = 3;
- break;
- }
- else if (stdbuffer.find("MESON3") != std::string::npos)
- {
- aml_cputype = 3;
- break;
- }
- else if (stdbuffer.find("Meson6") != std::string::npos)
- {
- aml_cputype = 6;
- break;
- }
- }
- fclose(cpuinfo_fd);
- }
+ // default to AMLogic M1
+ aml_cputype = 1;
+ if (cpu_hardware.find("MESON-M3") != std::string::npos)
+ aml_cputype = 3;
+ else if (cpu_hardware.find("MESON3") != std::string::npos)
+ aml_cputype = 3;
+ else if (cpu_hardware.find("Meson6") != std::string::npos)
+ aml_cputype = 6;
}
return aml_cputype;
diff --git a/xbmc/utils/CharsetConverter.cpp b/xbmc/utils/CharsetConverter.cpp
index b7b15104d2..226eef40c8 100644
--- a/xbmc/utils/CharsetConverter.cpp
+++ b/xbmc/utils/CharsetConverter.cpp
@@ -32,30 +32,52 @@
#include <iconv.h>
#if defined(TARGET_DARWIN)
-#ifdef __POWERPC__
- #define WCHAR_CHARSET "UTF-32BE"
-#else
- #define WCHAR_CHARSET "UTF-32LE"
-#endif
+ #define WCHAR_IS_UTF32 1
+ #undef WCHAR_IS_UTF16
+ #ifdef __POWERPC__
+ #define WCHAR_CHARSET "UTF-32BE"
+ #else
+ #define WCHAR_CHARSET "UTF-32LE"
+ #endif
#define UTF8_SOURCE "UTF-8-MAC"
#elif defined(TARGET_WINDOWS)
+ #undef WCHAR_IS_UTF32
+ #define WCHAR_IS_UTF16 1
#define WCHAR_CHARSET "UTF-16LE"
#define UTF8_SOURCE "UTF-8"
#pragma comment(lib, "libfribidi.lib")
#pragma comment(lib, "libiconv.lib")
#elif defined(TARGET_ANDROID)
+ #define WCHAR_IS_UTF32 1
+ #undef WCHAR_IS_UTF16
#define UTF8_SOURCE "UTF-8"
-#ifdef __BIG_ENDIAN__
- #define WCHAR_CHARSET "UTF-32BE"
-#else
- #define WCHAR_CHARSET "UTF-32LE"
-#endif
+ #ifdef __BIG_ENDIAN__
+ #define WCHAR_CHARSET "UTF-32BE"
+ #else
+ #define WCHAR_CHARSET "UTF-32LE"
+ #endif
#else
#define WCHAR_CHARSET "WCHAR_T"
#define UTF8_SOURCE "UTF-8"
+ #ifdef HAVE_CONFIG_H
+ #include "config.h"
+ #endif // HAVE_CONFIG_H
+ #undef WCHAR_IS_UTF32
+ #undef WCHAR_IS_UTF16
+ #ifdef SIZEOF_WCHAR_T
+ #if SIZEOF_WCHAR_T == 4
+ #define WCHAR_IS_UTF32 1
+ #elif SIZEOF_WCHAR_T == 2
+ #define WCHAR_IS_UTF16 1
+ #endif
+ #endif
#endif
+static iconv_t m_iconvUtf8ToUtf32 = (iconv_t)-1;
+static iconv_t m_iconvUtf32ToUtf8 = (iconv_t)-1;
+static iconv_t m_iconvUtf32ToW = (iconv_t)-1;
+static iconv_t m_iconvWToUtf32 = (iconv_t)-1;
static iconv_t m_iconvSubtitleCharsetToW = (iconv_t)-1;
static iconv_t m_iconvUtf8ToStringCharset = (iconv_t)-1;
static iconv_t m_iconvStringCharsetToUtf8 = (iconv_t)-1;
@@ -426,6 +448,10 @@ void CCharsetConverter::reset(void)
{
CSingleLock lock(m_critSection);
+ ICONV_SAFE_CLOSE(m_iconvUtf8ToUtf32);
+ ICONV_SAFE_CLOSE(m_iconvUtf32ToUtf8);
+ ICONV_SAFE_CLOSE(m_iconvUtf32ToW);
+ ICONV_SAFE_CLOSE(m_iconvWToUtf32);
ICONV_SAFE_CLOSE(m_iconvUtf8ToStringCharset);
ICONV_SAFE_CLOSE(m_iconvStringCharsetToUtf8);
ICONV_SAFE_CLOSE(m_iconvSubtitleCharsetToW);
@@ -450,6 +476,78 @@ void CCharsetConverter::reset(void)
}
}
+bool CCharsetConverter::utf8ToUtf32(const std::string& utf8StringSrc, std::u32string& utf32StringDst, bool failOnBadChar /*= true*/)
+{
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvUtf8ToUtf32, 1, UTF8_SOURCE, "UTF-32", utf8StringSrc, utf32StringDst, failOnBadChar);
+}
+
+std::u32string CCharsetConverter::utf8ToUtf32(const std::string& utf8StringSrc, bool failOnBadChar /*= true*/)
+{
+ std::u32string converted;
+ utf8ToUtf32(utf8StringSrc, converted, failOnBadChar);
+ return converted;
+}
+
+bool CCharsetConverter::utf8ToUtf32Visual(const std::string& utf8StringSrc, std::u32string& utf32StringDst, bool bVisualBiDiFlip /*= false*/, bool forceLTRReadingOrder /*= false*/, bool failOnBadChar /*= false*/)
+{
+ if (bVisualBiDiFlip)
+ {
+ std::string strFlipped;
+ if (!logicalToVisualBiDi(utf8StringSrc, strFlipped, FRIBIDI_UTF8, forceLTRReadingOrder ? FRIBIDI_TYPE_LTR : FRIBIDI_TYPE_PDF))
+ return false;
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvUtf8ToUtf32, 1, UTF8_SOURCE, "UTF-32", strFlipped, utf32StringDst, failOnBadChar);
+ }
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvUtf8ToUtf32, 1, UTF8_SOURCE, "UTF-32", utf8StringSrc, utf32StringDst, failOnBadChar);
+}
+
+bool CCharsetConverter::utf32ToUtf8(const std::u32string& utf32StringSrc, std::string& utf8StringDst, bool failOnBadChar /*= true*/)
+{
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvUtf32ToUtf8, m_Utf8CharMaxSize, "UTF-32", "UTF-8", utf32StringSrc, utf8StringDst, failOnBadChar);
+}
+
+std::string CCharsetConverter::utf32ToUtf8(const std::u32string& utf32StringSrc, bool failOnBadChar /*= false*/)
+{
+ std::string converted;
+ utf32ToUtf8(utf32StringSrc, converted, failOnBadChar);
+ return converted;
+}
+
+bool CCharsetConverter::utf32ToW(const std::u32string& utf32StringSrc, std::wstring& wStringDst, bool failOnBadChar /*= true*/)
+{
+#ifdef WCHAR_IS_UTF32
+ wStringDst.assign((const wchar_t*)utf32StringSrc.c_str(), utf32StringSrc.length());
+ return true;
+#else // !WCHAR_IS_UTF32
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvUtf32ToW, 1, "UTF-32", WCHAR_CHARSET, utf32StringSrc, wStringDst, failOnBadChar);
+#endif // !WCHAR_IS_UTF32
+}
+
+bool CCharsetConverter::utf32logicalToVisualBiDi(const std::u32string& logicalStringSrc, std::u32string& visualStringDst, bool forceLTRReadingOrder /*= false*/)
+{
+ visualStringDst.clear();
+ std::string utf8Str;
+ if (!utf32ToUtf8(logicalStringSrc, utf8Str, false))
+ return false;
+
+ return utf8ToUtf32Visual(utf8Str, visualStringDst, true, forceLTRReadingOrder);
+}
+
+bool CCharsetConverter::wToUtf32(const std::wstring& wStringSrc, std::u32string& utf32StringDst, bool failOnBadChar /*= true*/)
+{
+#ifdef WCHAR_IS_UTF32
+ utf32StringDst.assign((const char32_t*)wStringSrc.c_str(), wStringSrc.length());
+ return true;
+#else // !WCHAR_IS_UTF32
+ CSingleLock lock(m_critSection);
+ return convert(m_iconvWToUtf32, 1, WCHAR_CHARSET, "UTF-32", wStringSrc, utf32StringDst, failOnBadChar);
+#endif // !WCHAR_IS_UTF32
+}
+
// The bVisualBiDiFlip forces a flip of characters for hebrew/arabic languages, only set to false if the flipping
// of the string is already made or the string is not displayed in the GUI
bool CCharsetConverter::utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst, bool bVisualBiDiFlip /*= true*/,
diff --git a/xbmc/utils/CharsetConverter.h b/xbmc/utils/CharsetConverter.h
index d347f16681..c545d65ef4 100644
--- a/xbmc/utils/CharsetConverter.h
+++ b/xbmc/utils/CharsetConverter.h
@@ -42,6 +42,87 @@ public:
void clear();
+ /**
+ * Convert UTF-8 string to UTF-32 string.
+ * No RTL logical-visual transformation is performed.
+ * @param utf8StringSrc is source UTF-8 string to convert
+ * @param utf32StringDst is output UTF-32 string, empty on any error
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return true on successful conversion, false on any error
+ */
+ bool utf8ToUtf32(const std::string& utf8StringSrc, std::u32string& utf32StringDst, bool failOnBadChar = true);
+ /**
+ * Convert UTF-8 string to UTF-32 string.
+ * No RTL logical-visual transformation is performed.
+ * @param utf8StringSrc is source UTF-8 string to convert
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return converted string on successful conversion, empty string on any error
+ */
+ std::u32string utf8ToUtf32(const std::string& utf8StringSrc, bool failOnBadChar = true);
+ /**
+ * Convert UTF-8 string to UTF-32 string.
+ * RTL logical-visual transformation is optionally performed.
+ * Use it for readable text, GUI strings etc.
+ * @param utf8StringSrc is source UTF-8 string to convert
+ * @param utf32StringDst is output UTF-32 string, empty on any error
+ * @param bVisualBiDiFlip allow RTL visual-logical transformation if set to true, must be set
+ * to false is logical-visual transformation is already done
+ * @param forceLTRReadingOrder force LTR reading order
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return true on successful conversion, false on any error
+ */
+ bool utf8ToUtf32Visual(const std::string& utf8StringSrc, std::u32string& utf32StringDst, bool bVisualBiDiFlip = false, bool forceLTRReadingOrder = false, bool failOnBadChar = false);
+ /**
+ * Convert UTF-32 string to UTF-8 string.
+ * No RTL visual-logical transformation is performed.
+ * @param utf32StringSrc is source UTF-32 string to convert
+ * @param utf8StringDst is output UTF-8 string, empty on any error
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return true on successful conversion, false on any error
+ */
+ bool utf32ToUtf8(const std::u32string& utf32StringSrc, std::string& utf8StringDst, bool failOnBadChar = false);
+ /**
+ * Convert UTF-32 string to UTF-8 string.
+ * No RTL visual-logical transformation is performed.
+ * @param utf32StringSrc is source UTF-32 string to convert
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return converted string on successful conversion, empty string on any error
+ */
+ std::string utf32ToUtf8(const std::u32string& utf32StringSrc, bool failOnBadChar = false);
+ /**
+ * Convert UTF-32 string to wchar_t string (wstring).
+ * No RTL visual-logical transformation is performed.
+ * @param utf32StringSrc is source UTF-32 string to convert
+ * @param wStringDst is output wchar_t string, empty on any error
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return true on successful conversion, false on any error
+ */
+ bool utf32ToW(const std::u32string& utf32StringSrc, std::wstring& wStringDst, bool failOnBadChar = false);
+ /**
+ * Perform logical to visual flip.
+ * @param logicalStringSrc is source string with logical characters order
+ * @param visualStringDst is output string with visual characters order, empty on any error
+ * @param forceLTRReadingOrder force LTR reading order
+ * @return true on success, false otherwise
+ */
+ bool utf32logicalToVisualBiDi(const std::u32string& logicalStringSrc, std::u32string& visualStringDst, bool forceLTRReadingOrder = false);
+ /**
+ * Strictly convert wchar_t string (wstring) to UTF-32 string.
+ * No RTL visual-logical transformation is performed.
+ * @param wStringSrc is source wchar_t string to convert
+ * @param utf32StringDst is output UTF-32 string, empty on any error
+ * @param failOnBadChar if set to true function will fail on invalid character,
+ * otherwise invalid character will be skipped
+ * @return true on successful conversion, false on any error
+ */
+ bool wToUtf32(const std::wstring& wStringSrc, std::u32string& utf32StringDst, bool failOnBadChar = false);
+
bool utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst,
bool bVisualBiDiFlip = true, bool forceLTRReadingOrder = false,
bool failOnBadChar = false, bool* bWasFlipped = NULL);
diff --git a/xbmc/utils/FileUtils.cpp b/xbmc/utils/FileUtils.cpp
index 220f8ac8bf..18511ee1f8 100644
--- a/xbmc/utils/FileUtils.cpp
+++ b/xbmc/utils/FileUtils.cpp
@@ -116,27 +116,27 @@ bool CFileUtils::RemoteAccessAllowed(const CStdString &strPath)
while (URIUtils::IsInArchive(realPath))
realPath = CURL(realPath).GetHostName();
- if (StringUtils::StartsWith(realPath, "virtualpath://upnproot/"))
+ if (StringUtils::StartsWithNoCase(realPath, "virtualpath://upnproot/"))
return true;
- else if (StringUtils::StartsWith(realPath, "musicdb://"))
+ else if (StringUtils::StartsWithNoCase(realPath, "musicdb://"))
return true;
- else if (StringUtils::StartsWith(realPath, "videodb://"))
+ else if (StringUtils::StartsWithNoCase(realPath, "videodb://"))
return true;
- else if (StringUtils::StartsWith(realPath, "library://video"))
+ else if (StringUtils::StartsWithNoCase(realPath, "library://video"))
return true;
- else if (StringUtils::StartsWith(realPath, "sources://video"))
+ else if (StringUtils::StartsWithNoCase(realPath, "sources://video"))
return true;
- else if (StringUtils::StartsWith(realPath, "special://musicplaylists"))
+ else if (StringUtils::StartsWithNoCase(realPath, "special://musicplaylists"))
return true;
- else if (StringUtils::StartsWith(realPath, "special://profile/playlists"))
+ else if (StringUtils::StartsWithNoCase(realPath, "special://profile/playlists"))
return true;
- else if (StringUtils::StartsWith(realPath, "special://videoplaylists"))
+ else if (StringUtils::StartsWithNoCase(realPath, "special://videoplaylists"))
return true;
- else if (StringUtils::StartsWith(realPath, "addons://sources"))
+ else if (StringUtils::StartsWithNoCase(realPath, "addons://sources"))
return true;
- else if (StringUtils::StartsWith(realPath, "upnp://"))
+ else if (StringUtils::StartsWithNoCase(realPath, "upnp://"))
return true;
- else if (StringUtils::StartsWith(realPath, "plugin://"))
+ else if (StringUtils::StartsWithNoCase(realPath, "plugin://"))
return true;
bool isSource;
for (unsigned int index = 0; index < SourcesSize; index++)
diff --git a/xbmc/utils/LegacyPathTranslation.cpp b/xbmc/utils/LegacyPathTranslation.cpp
index 035eadf8b4..7658b36066 100644
--- a/xbmc/utils/LegacyPathTranslation.cpp
+++ b/xbmc/utils/LegacyPathTranslation.cpp
@@ -95,7 +95,7 @@ std::string CLegacyPathTranslation::TranslatePath(const std::string &legacyPath,
std::string newPath = legacyPath;
for (size_t index = 0; index < translationMapSize; index++)
{
- if (StringUtils::StartsWith(newPath, translationMap[index].legacyPath))
+ if (StringUtils::StartsWithNoCase(newPath, translationMap[index].legacyPath))
{
StringUtils::Replace(newPath, translationMap[index].legacyPath, translationMap[index].newPath);
break;
diff --git a/xbmc/utils/StringUtils.cpp b/xbmc/utils/StringUtils.cpp
index 6d82e48830..d316d715a0 100644
--- a/xbmc/utils/StringUtils.cpp
+++ b/xbmc/utils/StringUtils.cpp
@@ -114,12 +114,26 @@ void StringUtils::ToLower(string &str)
bool StringUtils::EqualsNoCase(const std::string &str1, const std::string &str2)
{
- string tmp1 = str1;
- string tmp2 = str2;
- ToLower(tmp1);
- ToLower(tmp2);
-
- return tmp1.compare(tmp2) == 0;
+ return EqualsNoCase(str1.c_str(), str2.c_str());
+}
+
+bool StringUtils::EqualsNoCase(const std::string &str1, const char *s2)
+{
+ return EqualsNoCase(str1.c_str(), s2);
+}
+
+bool StringUtils::EqualsNoCase(const char *s1, const char *s2)
+{
+ int c1, c2; // Yes, because the return type of tolower() is int.
+ // To make these chars would be to introduce an unnecesary extra bitmask/zero-extend (effectively caller-narowing) into the binary.
+ do
+ {
+ c1 = ::tolower(*s1++);
+ c2 = ::tolower(*s2++);
+ if (c1 != c2) // This includes the possibility that one of the characters is the null-terminator, which implies a string mismatch.
+ return false;
+ } while (c2 != '\0'); // At this point, we know c1 == c2, so there's no need to test them both.
+ return true;
}
string StringUtils::Left(const string &str, size_t count)
@@ -225,24 +239,95 @@ int StringUtils::Replace(std::string &str, const std::string &oldStr, const std:
return replacedChars;
}
-bool StringUtils::StartsWith(const std::string &str, const std::string &str2, bool useCase /* = false */)
+bool StringUtils::StartsWith(const std::string &str1, const std::string &str2)
{
- std::string left = StringUtils::Left(str, str2.size());
-
- if (useCase)
- return left.compare(str2) == 0;
+ return str1.compare(0, str2.size(), str2) == 0;
+}
- return StringUtils::EqualsNoCase(left, str2);
+bool StringUtils::StartsWith(const std::string &str1, const char *s2)
+{
+ return StartsWith(str1.c_str(), s2);
}
-bool StringUtils::EndsWith(const std::string &str, const std::string &str2, bool useCase /* = false */)
+bool StringUtils::StartsWith(const char *s1, const char *s2)
{
- std::string right = StringUtils::Right(str, str2.size());
-
- if (useCase)
- return right.compare(str2) == 0;
+ while (*s2 != '\0')
+ {
+ if (*s1 != *s2)
+ return false;
+ s1++;
+ s2++;
+ }
+ return true;
+}
- return StringUtils::EqualsNoCase(right, str2);
+bool StringUtils::StartsWithNoCase(const std::string &str1, const std::string &str2)
+{
+ return StartsWithNoCase(str1.c_str(), str2.c_str());
+}
+
+bool StringUtils::StartsWithNoCase(const std::string &str1, const char *s2)
+{
+ return StartsWithNoCase(str1.c_str(), s2);
+}
+
+bool StringUtils::StartsWithNoCase(const char *s1, const char *s2)
+{
+ while (*s2 != '\0')
+ {
+ if (::tolower(*s1) != ::tolower(*s2))
+ return false;
+ s1++;
+ s2++;
+ }
+ return true;
+}
+
+bool StringUtils::EndsWith(const std::string &str1, const std::string &str2)
+{
+ if (str1.size() < str2.size())
+ return false;
+ return str1.compare(str1.size() - str2.size(), str2.size(), str2) == 0;
+}
+
+bool StringUtils::EndsWith(const std::string &str1, const char *s2)
+{
+ size_t len2 = strlen(s2);
+ if (str1.size() < len2)
+ return false;
+ return str1.compare(str1.size() - len2, len2, s2) == 0;
+}
+
+bool StringUtils::EndsWithNoCase(const std::string &str1, const std::string &str2)
+{
+ if (str1.size() < str2.size())
+ return false;
+ const char *s1 = str1.c_str() + str1.size() - str2.size();
+ const char *s2 = str2.c_str();
+ while (*s2 != '\0')
+ {
+ if (::tolower(*s1) != ::tolower(*s2))
+ return false;
+ s1++;
+ s2++;
+ }
+ return true;
+}
+
+bool StringUtils::EndsWithNoCase(const std::string &str1, const char *s2)
+{
+ size_t len2 = strlen(s2);
+ if (str1.size() < len2)
+ return false;
+ const char *s1 = str1.c_str() + str1.size() - len2;
+ while (*s2 != '\0')
+ {
+ if (::tolower(*s1) != ::tolower(*s2))
+ return false;
+ s1++;
+ s2++;
+ }
+ return true;
}
void StringUtils::JoinString(const CStdStringArray &strings, const CStdString& delimiter, CStdString& result)
diff --git a/xbmc/utils/StringUtils.h b/xbmc/utils/StringUtils.h
index a75ba7549d..11f6f5e700 100644
--- a/xbmc/utils/StringUtils.h
+++ b/xbmc/utils/StringUtils.h
@@ -55,6 +55,8 @@ public:
static void ToUpper(std::string &str);
static void ToLower(std::string &str);
static bool EqualsNoCase(const std::string &str1, const std::string &str2);
+ static bool EqualsNoCase(const std::string &str1, const char *s2);
+ static bool EqualsNoCase(const char *s1, const char *s2);
static std::string Left(const std::string &str, size_t count);
static std::string Mid(const std::string &str, size_t first, size_t count = std::string::npos);
static std::string Right(const std::string &str, size_t count);
@@ -64,8 +66,16 @@ public:
static std::string& RemoveDuplicatedSpacesAndTabs(std::string& str);
static int Replace(std::string &str, char oldChar, char newChar);
static int Replace(std::string &str, const std::string &oldStr, const std::string &newStr);
- static bool StartsWith(const std::string &str, const std::string &str2, bool useCase = false);
- static bool EndsWith(const std::string &str, const std::string &str2, bool useCase = false);
+ static bool StartsWith(const std::string &str1, const std::string &str2);
+ static bool StartsWith(const std::string &str1, const char *s2);
+ static bool StartsWith(const char *s1, const char *s2);
+ static bool StartsWithNoCase(const std::string &str1, const std::string &str2);
+ static bool StartsWithNoCase(const std::string &str1, const char *s2);
+ static bool StartsWithNoCase(const char *s1, const char *s2);
+ static bool EndsWith(const std::string &str1, const std::string &str2);
+ static bool EndsWith(const std::string &str1, const char *s2);
+ static bool EndsWithNoCase(const std::string &str1, const std::string &str2);
+ static bool EndsWithNoCase(const std::string &str1, const char *s2);
static void JoinString(const CStdStringArray &strings, const CStdString& delimiter, CStdString& result);
static CStdString JoinString(const CStdStringArray &strings, const CStdString& delimiter);
diff --git a/xbmc/utils/StringValidation.cpp b/xbmc/utils/StringValidation.cpp
index 3a1df6decd..79ac19fe2a 100644
--- a/xbmc/utils/StringValidation.cpp
+++ b/xbmc/utils/StringValidation.cpp
@@ -37,7 +37,7 @@ bool StringValidation::IsTime(const std::string &input, void *data)
std::string strTime = input;
StringUtils::Trim(strTime);
- if (StringUtils::EndsWith(strTime, " min"))
+ if (StringUtils::EndsWithNoCase(strTime, " min"))
{
strTime = StringUtils::Left(strTime, strTime.size() - 4);
StringUtils::TrimRight(strTime);
diff --git a/xbmc/utils/test/TestStringUtils.cpp b/xbmc/utils/test/TestStringUtils.cpp
index 3bffc07f45..c7d732d542 100644
--- a/xbmc/utils/test/TestStringUtils.cpp
+++ b/xbmc/utils/test/TestStringUtils.cpp
@@ -175,28 +175,28 @@ TEST(TestStringUtils, StartsWith)
{
std::string refstr = "test";
- EXPECT_FALSE(StringUtils::StartsWith(refstr, "x"));
+ EXPECT_FALSE(StringUtils::StartsWithNoCase(refstr, "x"));
- EXPECT_TRUE(StringUtils::StartsWith(refstr, "te", true));
- EXPECT_TRUE(StringUtils::StartsWith(refstr, "test", true));
- EXPECT_FALSE(StringUtils::StartsWith(refstr, "Te", true));
+ EXPECT_TRUE(StringUtils::StartsWith(refstr, "te"));
+ EXPECT_TRUE(StringUtils::StartsWith(refstr, "test"));
+ EXPECT_FALSE(StringUtils::StartsWith(refstr, "Te"));
- EXPECT_TRUE(StringUtils::StartsWith(refstr, "Te", false));
- EXPECT_TRUE(StringUtils::StartsWith(refstr, "TesT", false));
+ EXPECT_TRUE(StringUtils::StartsWithNoCase(refstr, "Te"));
+ EXPECT_TRUE(StringUtils::StartsWithNoCase(refstr, "TesT"));
}
TEST(TestStringUtils, EndsWith)
{
std::string refstr = "test";
- EXPECT_FALSE(StringUtils::EndsWith(refstr, "x"));
+ EXPECT_FALSE(StringUtils::EndsWithNoCase(refstr, "x"));
- EXPECT_TRUE(StringUtils::EndsWith(refstr, "st", true));
- EXPECT_TRUE(StringUtils::EndsWith(refstr, "test", true));
- EXPECT_FALSE(StringUtils::EndsWith(refstr, "sT", true));
+ EXPECT_TRUE(StringUtils::EndsWith(refstr, "st"));
+ EXPECT_TRUE(StringUtils::EndsWith(refstr, "test"));
+ EXPECT_FALSE(StringUtils::EndsWith(refstr, "sT"));
- EXPECT_TRUE(StringUtils::EndsWith(refstr, "sT", false));
- EXPECT_TRUE(StringUtils::EndsWith(refstr, "TesT", false));
+ EXPECT_TRUE(StringUtils::EndsWithNoCase(refstr, "sT"));
+ EXPECT_TRUE(StringUtils::EndsWithNoCase(refstr, "TesT"));
}
TEST(TestStringUtils, JoinString)
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp
index d770d797b5..6b9ad8c951 100644
--- a/xbmc/video/VideoDatabase.cpp
+++ b/xbmc/video/VideoDatabase.cpp
@@ -7171,7 +7171,7 @@ void CVideoDatabase::GetMusicVideoArtistsByName(const CStdString& strSearch, CFi
CFileItemPtr pItem(new CFileItem(m_pDS->fv("actors.strActor").get_asString()));
CStdString strDir;
strDir.Format("%ld/", m_pDS->fv("actors.idActor").get_asInt());
- pItem->SetPath("videodb://musicvideos/artist/"+ strDir);
+ pItem->SetPath("videodb://musicvideos/artists/"+ strDir);
pItem->m_bIsFolder=true;
items.Add(pItem);
m_pDS->next();
@@ -7969,9 +7969,6 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
int total = m_pDS->num_rows();
int current = 0;
- bool bIsSource;
- VECSOURCES *pShares = CMediaSourceSettings::Get().GetSources("video");
-
while (!m_pDS->eof())
{
CStdString path = m_pDS->fv("path.strPath").get_asString();
@@ -7983,19 +7980,9 @@ void CVideoDatabase::CleanDatabase(CGUIDialogProgressBarHandle* handle, const se
if (URIUtils::IsStack(fullPath))
fullPath = CStackDirectory::GetFirstStackedFile(fullPath);
- // check if we have a internet related file that is part of a media source
- if (URIUtils::IsInternetStream(fullPath, true) && CUtil::GetMatchingSource(fullPath, *pShares, bIsSource) > -1)
- {
- if (!CFile::Exists(fullPath, false))
- filesToDelete += m_pDS->fv("files.idFile").get_asString() + ",";
- }
- else
- {
- // remove optical, internet related and non-existing files
- // note: this will also remove entries from previously existing media sources
- if (URIUtils::IsOnDVD(fullPath) || URIUtils::IsInternetStream(fullPath, true) || !CFile::Exists(fullPath, false))
- filesToDelete += m_pDS->fv("files.idFile").get_asString() + ",";
- }
+ // remove optical, non-existing files
+ if (URIUtils::IsOnDVD(fullPath) || !CFile::Exists(fullPath, false))
+ filesToDelete += m_pDS->fv("files.idFile").get_asString() + ",";
if (!handle)
{
diff --git a/xbmc/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp
index 57c66415bb..b53144778f 100644
--- a/xbmc/video/windows/GUIWindowVideoBase.cpp
+++ b/xbmc/video/windows/GUIWindowVideoBase.cpp
@@ -1791,7 +1791,7 @@ bool CGUIWindowVideoBase::CheckFilterAdvanced(CFileItemList &items) const
bool CGUIWindowVideoBase::CanContainFilter(const CStdString &strDirectory) const
{
- return StringUtils::StartsWith(strDirectory, "videodb://");
+ return StringUtils::StartsWithNoCase(strDirectory, "videodb://");
}
void CGUIWindowVideoBase::AddToDatabase(int iItem)
diff --git a/xbmc/video/windows/GUIWindowVideoNav.cpp b/xbmc/video/windows/GUIWindowVideoNav.cpp
index b888ea7f1c..9a9e8d1ed4 100644
--- a/xbmc/video/windows/GUIWindowVideoNav.cpp
+++ b/xbmc/video/windows/GUIWindowVideoNav.cpp
@@ -674,7 +674,7 @@ void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem)
!pItem->GetPath().Left(9).Equals("newtag://"))
CGUIWindowVideoBase::OnDeleteItem(pItem);
}
- else if (StringUtils::StartsWith(pItem->GetPath(), "videodb://movies/sets/") &&
+ else if (StringUtils::StartsWithNoCase(pItem->GetPath(), "videodb://movies/sets/") &&
pItem->GetPath().size() > 22 && pItem->m_bIsFolder)
{
CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
@@ -967,7 +967,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
if (node == NODE_TYPE_SEASONS && item->m_bIsFolder)
buttons.Add(CONTEXT_BUTTON_SET_SEASON_ART, 13511);
- if (StringUtils::StartsWith(item->GetPath(), "videodb://movies/sets/") && item->GetPath().size() > 22 && item->m_bIsFolder) // sets
+ if (StringUtils::StartsWithNoCase(item->GetPath(), "videodb://movies/sets/") && item->GetPath().size() > 22 && item->m_bIsFolder) // sets
{
buttons.Add(CONTEXT_BUTTON_SET_MOVIESET_ART, 13511);
buttons.Add(CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS, 20465);
@@ -991,7 +991,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt
if (node == NODE_TYPE_ACTOR && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder)
{
- if (StringUtils::StartsWith(m_vecItems->GetPath(), "videodb://musicvideos")) // mvids
+ if (StringUtils::StartsWithNoCase(m_vecItems->GetPath(), "videodb://musicvideos")) // mvids
buttons.Add(CONTEXT_BUTTON_SET_ARTIST_THUMB, 13359);
else
buttons.Add(CONTEXT_BUTTON_SET_ACTOR_THUMB, 20403);
@@ -1533,7 +1533,7 @@ CStdString CGUIWindowVideoNav::GetStartFolder(const CStdString &dir)
else if (dir.Equals("MusicVideoYears"))
return "videodb://musicvideos/years/";
else if (dir.Equals("MusicVideoArtists"))
- return "videodb://musicvideos/artist/";
+ return "videodb://musicvideos/artists/";
else if (dir.Equals("MusicVideoAlbums"))
return "videodb://musicvideos/albums/";
else if (dir.Equals("MusicVideoDirectors"))
diff --git a/xbmc/view/GUIViewState.cpp b/xbmc/view/GUIViewState.cpp
index e2f8677b14..e415725151 100644
--- a/xbmc/view/GUIViewState.cpp
+++ b/xbmc/view/GUIViewState.cpp
@@ -220,6 +220,11 @@ SortDescription CGUIViewState::GetSortMethod() const
return sorting;
}
+bool CGUIViewState::HasMultipleSortMethods() const
+{
+ return m_sortMethods.size() > 1;
+}
+
int CGUIViewState::GetSortMethodLabel() const
{
if (m_currentSortMethod>=0 && m_currentSortMethod<(int)m_sortMethods.size())
@@ -293,6 +298,7 @@ void CGUIViewState::SetSortMethod(SortBy sortBy, SortAttribute sortAttributes /*
break;
}
}
+ SetSortOrder(m_sortOrder);
}
void CGUIViewState::SetSortMethod(SortDescription sortDescription)
@@ -308,6 +314,7 @@ SortDescription CGUIViewState::SetNextSortMethod(int direction /* = 1 */)
m_currentSortMethod = 0;
if (m_currentSortMethod < 0)
m_currentSortMethod = m_sortMethods.size() ? (int)m_sortMethods.size() - 1 : 0;
+ SetSortOrder(m_sortOrder);
SaveViewState();
diff --git a/xbmc/view/GUIViewState.h b/xbmc/view/GUIViewState.h
index 54c766b1e0..eaf69bb75d 100644
--- a/xbmc/view/GUIViewState.h
+++ b/xbmc/view/GUIViewState.h
@@ -40,6 +40,7 @@ public:
SortDescription SetNextSortMethod(int direction = 1);
void SetCurrentSortMethod(int method);
SortDescription GetSortMethod() const;
+ bool HasMultipleSortMethods() const;
int GetSortMethodLabel() const;
void GetSortMethodLabelMasks(LABEL_MASKS& masks) const;
diff --git a/xbmc/view/ViewDatabase.cpp b/xbmc/view/ViewDatabase.cpp
index 25300f19a6..1425a4cb78 100644
--- a/xbmc/view/ViewDatabase.cpp
+++ b/xbmc/view/ViewDatabase.cpp
@@ -93,9 +93,9 @@ bool CViewDatabase::UpdateOldVersion(int version)
{
std::string originalPath = m_pDS->fv(1).get_asString();
std::string path = originalPath;
- if (StringUtils::StartsWith(path, "musicdb://"))
+ if (StringUtils::StartsWithNoCase(path, "musicdb://"))
path = CLegacyPathTranslation::TranslateMusicDbPath(path);
- else if (StringUtils::StartsWith(path, "videodb://"))
+ else if (StringUtils::StartsWithNoCase(path, "videodb://"))
path = CLegacyPathTranslation::TranslateVideoDbPath(path);
if (!StringUtils::EqualsNoCase(path, originalPath))
diff --git a/xbmc/windows/GUIMediaWindow.cpp b/xbmc/windows/GUIMediaWindow.cpp
index 9b28a624f0..493aa27c68 100644
--- a/xbmc/windows/GUIMediaWindow.cpp
+++ b/xbmc/windows/GUIMediaWindow.cpp
@@ -544,7 +544,7 @@ void CGUIMediaWindow::UpdateButtons()
m_viewControl.SetCurrentView(m_guiState->GetViewAsControl());
// Update sort by button
- if (m_guiState->GetSortMethod().sortBy == SortByNone)
+ if (!m_guiState->HasMultipleSortMethods())
CONTROL_DISABLE(CONTROL_BTNSORTBY);
else
CONTROL_ENABLE(CONTROL_BTNSORTBY);
diff --git a/xbmc/windows/GUIWindowFileManager.cpp b/xbmc/windows/GUIWindowFileManager.cpp
index 14efc7ee1c..f1f849ff5d 100644
--- a/xbmc/windows/GUIWindowFileManager.cpp
+++ b/xbmc/windows/GUIWindowFileManager.cpp
@@ -876,7 +876,7 @@ bool CGUIWindowFileManager::GetDirectory(int iList, const CStdString &strDirecto
bool CGUIWindowFileManager::CanRename(int iList)
{
- // TODO: Renaming of shares (requires writing to xboxmediacenter.xml)
+ // TODO: Renaming of shares (requires writing to sources.xml)
// this might be able to be done via the webserver code stuff...
if (m_Directory[iList]->IsVirtualDirectoryRoot()) return false;
if (m_Directory[iList]->IsReadOnly()) return false;