diff options
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 Binary files differdeleted file mode 100644 index 8d72cc7c7b..0000000000 --- a/tools/win32buildtools/nasmw.exe +++ /dev/null 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; |