| @@ -1,34 +1,2 @@ | |||||
| This list details modifications made to the VST3 SDK in order to facilitate | This list details modifications made to the VST3 SDK in order to facilitate | ||||
| inclusion in JUCE. | inclusion in JUCE. | ||||
| - `#warning` directives were removed from fstring.cpp, as these cannot be | |||||
| silenced with a `pragma GCC diagnostic ignored "-Wcpp"` when building with | |||||
| g++. | |||||
| - The version check in module_linux.cpp was changed to match the number | |||||
| corresponding to the C++17 standard. | |||||
| - The <limits> header was included in moduleinfoparser.cpp in order to make | |||||
| std::numeric_limits visible when building with the GNU stdlib. | |||||
| - Loop variable types were adjusted in moduleinfoparser.cpp to avoid forming | |||||
| references to temporary values, which produced -Wrange-loop-bind-reference | |||||
| warnings when building with Xcode. | |||||
| - The <cstdint> header was included in moduleinfo.h in order to make uint32_t | |||||
| visible when building with the GNU stdlib. | |||||
| - helper.manifest was added, to be included in the moduleinfo tool in order to | |||||
| force UTF-8 mode on Windows. | |||||
| - std:: qualification was added to std::move call in module.cpp to silence | |||||
| a -Wunqualified-std-cast-call warning. | |||||
| - The main.cpp of moduleinfotool was updated to include information exported | |||||
| by the plugin's IPluginCompatibility object, if present. | |||||
| - Preprocessor definitions that expanded to include the keyword 'defined' were | |||||
| removed in fplatform.h to silence -Wexpansion-to-defined warnings. | |||||
| - Pragma warning was guarded in falignpush.h to silence -Wunknown-pragma | |||||
| warnings. | |||||
| @@ -1,6 +1,6 @@ | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| This license applies only to files referencing this license, | This license applies only to files referencing this license, | ||||
| for other files of the Software Development Kit the respective embedded license text | for other files of the Software Development Kit the respective embedded license text | ||||
| @@ -1,6 +1,6 @@ | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -529,12 +529,10 @@ int8* Buffer::operator + (uint32 i) | |||||
| { | { | ||||
| if (i < memSize) | if (i < memSize) | ||||
| return buffer + i; | return buffer + i; | ||||
| else | |||||
| { | |||||
| static int8 eof; | |||||
| eof = 0; | |||||
| return &eof; | |||||
| } | |||||
| static int8 eof; | |||||
| eof = 0; | |||||
| return &eof; | |||||
| } | } | ||||
| //------------------------------------------------------------------------------------- | //------------------------------------------------------------------------------------- | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -11,7 +11,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -11,7 +11,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -97,6 +97,10 @@ bool AmIBeingDebugged (); | |||||
| if (!(f)) \ | if (!(f)) \ | ||||
| FDebugBreak ("%s(%d) : Assert failed: %s\n", __FILE__, __LINE__, #f); | FDebugBreak ("%s(%d) : Assert failed: %s\n", __FILE__, __LINE__, #f); | ||||
| #define SMTG_ASSERT_MSG(f, msg) \ | |||||
| if (!(f)) \ | |||||
| FDebugBreak ("%s(%d) : Assert failed: [%s] [%s]\n", __FILE__, __LINE__, #f, msg); | |||||
| /** Send "comment" string to the debugger for display. */ | /** Send "comment" string to the debugger for display. */ | ||||
| #define SMTG_WARNING(comment) FDebugPrint ("%s(%d) : %s\n", __FILE__, __LINE__, comment); | #define SMTG_WARNING(comment) FDebugPrint ("%s(%d) : %s\n", __FILE__, __LINE__, comment); | ||||
| @@ -194,6 +198,7 @@ void* operator new (size_t, int, const char*, int); | |||||
| #else | #else | ||||
| /** if DEVELOPMENT is not set, these macros will do nothing. */ | /** if DEVELOPMENT is not set, these macros will do nothing. */ | ||||
| #define SMTG_ASSERT(f) | #define SMTG_ASSERT(f) | ||||
| #define SMTG_ASSERT_MSG(f, msg) | |||||
| #define SMTG_WARNING(s) | #define SMTG_WARNING(s) | ||||
| #define SMTG_PRINTSYSERROR | #define SMTG_PRINTSYSERROR | ||||
| #define SMTG_DEBUGSTR(s) | #define SMTG_DEBUGSTR(s) | ||||
| @@ -10,7 +10,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -350,7 +350,7 @@ namespace Singleton { | |||||
| virtual Steinberg::FClassID isA () const SMTG_OVERRIDE {return className::getFClassID ();} \ | virtual Steinberg::FClassID isA () const SMTG_OVERRIDE {return className::getFClassID ();} \ | ||||
| virtual bool isA (Steinberg::FClassID s) const SMTG_OVERRIDE {return isTypeOf (s, false);} \ | virtual bool isA (Steinberg::FClassID s) const SMTG_OVERRIDE {return isTypeOf (s, false);} \ | ||||
| virtual bool isTypeOf (Steinberg::FClassID s, bool askBaseClass = true) const SMTG_OVERRIDE \ | virtual bool isTypeOf (Steinberg::FClassID s, bool askBaseClass = true) const SMTG_OVERRIDE \ | ||||
| { return (classIDsEqual (s, #className) ? true : (askBaseClass ? baseClass::isTypeOf (s, true) : false)); } | |||||
| { return (FObject::classIDsEqual (s, #className) ? true : (askBaseClass ? baseClass::isTypeOf (s, true) : false)); } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** Delegate refcount functions to BaseClass. | /** Delegate refcount functions to BaseClass. | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -587,6 +587,9 @@ TSize FStreamer::writeString8 (const char8* ptr, bool terminate) | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| TSize FStreamer::readString8 (char8* ptr, TSize size) | TSize FStreamer::readString8 (char8* ptr, TSize size) | ||||
| { | { | ||||
| if (size < 1 || ptr == nullptr) | |||||
| return 0; | |||||
| TSize i = 0; | TSize i = 0; | ||||
| char8 c = 0; | char8 c = 0; | ||||
| while (i < size) | while (i < size) | ||||
| @@ -594,18 +597,19 @@ TSize FStreamer::readString8 (char8* ptr, TSize size) | |||||
| if (readRaw ((void*)&c, sizeof (char)) != sizeof (char)) | if (readRaw ((void*)&c, sizeof (char)) != sizeof (char)) | ||||
| break; | break; | ||||
| ptr[i] = c; | ptr[i] = c; | ||||
| i++; | |||||
| if (c == '\n' || c == '\0') | if (c == '\n' || c == '\0') | ||||
| break; | break; | ||||
| i++; | |||||
| } | } | ||||
| if (c == '\n' && ptr[i - 2] == '\r') | |||||
| ptr[i - 2] = 0; | |||||
| if (i < size) | |||||
| ptr[i] = 0; | |||||
| else | |||||
| ptr[size - 1] = 0; | |||||
| // remove at end \n (LF) or \r\n (CR+LF) | |||||
| if (c == '\n') | |||||
| { | |||||
| if (i > 0 && ptr[i - 1] == '\r') | |||||
| i--; | |||||
| } | |||||
| ptr[i] = 0; | |||||
| return strlen (ptr); | |||||
| return i; | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -293,7 +293,7 @@ static inline int strnicmp16 (const Steinberg::char16* s1, const Steinberg::char | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| static inline int sprintf16 (Steinberg::char16* wcs, const Steinberg::char16* format, ...) | static inline int sprintf16 (Steinberg::char16* wcs, const Steinberg::char16* format, ...) | ||||
| { | { | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -316,7 +316,7 @@ static inline int vsnwprintf (Steinberg::char16* wcs, size_t maxlen, | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| static inline Steinberg::char16* strrchr16 (const Steinberg::char16* str, Steinberg::char16 c) | static inline Steinberg::char16* strrchr16 (const Steinberg::char16* str, Steinberg::char16 c) | ||||
| { | { | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| @@ -667,7 +667,7 @@ int32 ConstString::compare (const ConstString& str, int32 n, CompareMode mode) c | |||||
| return 0; | return 0; | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| else if (isEmpty ()) | |||||
| if (isEmpty ()) | |||||
| return -1; | return -1; | ||||
| if (!isWide && !str.isWide) | if (!isWide && !str.isWide) | ||||
| @@ -676,33 +676,23 @@ int32 ConstString::compare (const ConstString& str, int32 n, CompareMode mode) c | |||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strcmp (*this, str); | return strcmp (*this, str); | ||||
| else | |||||
| return stricmp (*this, str); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp (*this, str, n); | |||||
| else | |||||
| return strnicmp (*this, str, n); | |||||
| return stricmp (*this, str); | |||||
| } | } | ||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp (*this, str, n); | |||||
| return strnicmp (*this, str, n); | |||||
| } | } | ||||
| else if (isWide && str.isWide) | |||||
| if (isWide && str.isWide) | |||||
| { | { | ||||
| if (n < 0) | if (n < 0) | ||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strcmp16 (*this, str); | return strcmp16 (*this, str); | ||||
| else | |||||
| return stricmp16 (*this, str); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (*this, str, n); | |||||
| else | |||||
| return strnicmp16 (*this, str, n); | |||||
| return stricmp16 (*this, str); | |||||
| } | } | ||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (*this, str, n); | |||||
| return strnicmp16 (*this, str, n); | |||||
| } | } | ||||
| return compareAt (0, str, n, mode); | return compareAt (0, str, n, mode); | ||||
| } | } | ||||
| @@ -725,7 +715,7 @@ int32 ConstString::compareAt (uint32 index, const ConstString& str, int32 n, Com | |||||
| return 0; | return 0; | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| else if (isEmpty ()) | |||||
| if (isEmpty ()) | |||||
| return -1; | return -1; | ||||
| if (!isWide && !str.isWide) | if (!isWide && !str.isWide) | ||||
| @@ -746,18 +736,13 @@ int32 ConstString::compareAt (uint32 index, const ConstString& str, int32 n, Com | |||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strcmp (toCompare, str); | return strcmp (toCompare, str); | ||||
| else | |||||
| return stricmp (toCompare, str); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp (toCompare, str, n); | |||||
| else | |||||
| return strnicmp (toCompare, str, n); | |||||
| return stricmp (toCompare, str); | |||||
| } | } | ||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp (toCompare, str, n); | |||||
| return strnicmp (toCompare, str, n); | |||||
| } | } | ||||
| else if (isWide && str.isWide) | |||||
| if (isWide && str.isWide) | |||||
| { | { | ||||
| char16* toCompare = buffer16; | char16* toCompare = buffer16; | ||||
| if (index > 0) | if (index > 0) | ||||
| @@ -775,34 +760,25 @@ int32 ConstString::compareAt (uint32 index, const ConstString& str, int32 n, Com | |||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strcmp16 (toCompare, str.text16 ()); | return strcmp16 (toCompare, str.text16 ()); | ||||
| else | |||||
| return stricmp16 (toCompare, str.text16 ()); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (toCompare, str.text16 (), n); | |||||
| else | |||||
| return strnicmp16 (toCompare, str.text16 (), n); | |||||
| return stricmp16 (toCompare, str.text16 ()); | |||||
| } | } | ||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (toCompare, str.text16 (), n); | |||||
| return strnicmp16 (toCompare, str.text16 (), n); | |||||
| } | } | ||||
| else | |||||
| if (isWide) | |||||
| { | { | ||||
| if (isWide) | |||||
| { | |||||
| String tmp (str.text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return -1; | |||||
| return compareAt (index, tmp, n, mode); | |||||
| } | |||||
| else | |||||
| { | |||||
| String tmp (text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return 1; | |||||
| return tmp.compareAt (index, str, n, mode); | |||||
| } | |||||
| String tmp (str.text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return -1; | |||||
| return compareAt (index, tmp, n, mode); | |||||
| } | } | ||||
| String tmp (text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return 1; | |||||
| return tmp.compareAt (index, str, n, mode); | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -814,28 +790,23 @@ Steinberg::int32 ConstString::naturalCompare (const ConstString& str, CompareMod | |||||
| return 0; | return 0; | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| else if (isEmpty ()) | |||||
| if (isEmpty ()) | |||||
| return -1; | return -1; | ||||
| if (!isWide && !str.isWide) | if (!isWide && !str.isWide) | ||||
| return strnatcmp8 (buffer8, str.text8 (), isCaseSensitive (mode)); | return strnatcmp8 (buffer8, str.text8 (), isCaseSensitive (mode)); | ||||
| else if (isWide && str.isWide) | |||||
| if (isWide && str.isWide) | |||||
| return strnatcmp16 (buffer16, str.text16 (), isCaseSensitive (mode)); | return strnatcmp16 (buffer16, str.text16 (), isCaseSensitive (mode)); | ||||
| else | |||||
| if (isWide) | |||||
| { | { | ||||
| if (isWide) | |||||
| { | |||||
| String tmp (str.text8 ()); | |||||
| tmp.toWideString (); | |||||
| return strnatcmp16 (buffer16, tmp.text16 (), isCaseSensitive (mode)); | |||||
| } | |||||
| else | |||||
| { | |||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| return strnatcmp16 (tmp.text16 (), str.text16 (), isCaseSensitive (mode)); | |||||
| } | |||||
| String tmp (str.text8 ()); | |||||
| tmp.toWideString (); | |||||
| return strnatcmp16 (buffer16, tmp.text16 (), isCaseSensitive (mode)); | |||||
| } | } | ||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| return strnatcmp16 (tmp.text16 (), str.text16 (), isCaseSensitive (mode)); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -845,7 +816,7 @@ bool ConstString::startsWith (const ConstString& str, CompareMode mode /*= kCase | |||||
| { | { | ||||
| return isEmpty (); | return isEmpty (); | ||||
| } | } | ||||
| else if (isEmpty ()) | |||||
| if (isEmpty ()) | |||||
| { | { | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -859,13 +830,13 @@ bool ConstString::startsWith (const ConstString& str, CompareMode mode /*= kCase | |||||
| return strncmp (buffer8, str.buffer8, str.length ()) == 0; | return strncmp (buffer8, str.buffer8, str.length ()) == 0; | ||||
| return strnicmp (buffer8, str.buffer8, str.length ()) == 0; | return strnicmp (buffer8, str.buffer8, str.length ()) == 0; | ||||
| } | } | ||||
| else if (isWide && str.isWide) | |||||
| if (isWide && str.isWide) | |||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strncmp16 (buffer16, str.buffer16, str.length ()) == 0; | return strncmp16 (buffer16, str.buffer16, str.length ()) == 0; | ||||
| return strnicmp16 (buffer16, str.buffer16, str.length ()) == 0; | return strnicmp16 (buffer16, str.buffer16, str.length ()) == 0; | ||||
| } | } | ||||
| else if (isWide) | |||||
| if (isWide) | |||||
| { | { | ||||
| String tmp (str.text8 ()); | String tmp (str.text8 ()); | ||||
| tmp.toWideString (); | tmp.toWideString (); | ||||
| @@ -875,16 +846,13 @@ bool ConstString::startsWith (const ConstString& str, CompareMode mode /*= kCase | |||||
| return strncmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; | return strncmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; | ||||
| return strnicmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; | return strnicmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| if (str.length () > tmp.length ()) | |||||
| return false; | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; | |||||
| return strnicmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; | |||||
| } | |||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| if (str.length () > tmp.length ()) | |||||
| return false; | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; | |||||
| return strnicmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -894,7 +862,7 @@ bool ConstString::endsWith (const ConstString& str, CompareMode mode /*= kCaseSe | |||||
| { | { | ||||
| return isEmpty (); | return isEmpty (); | ||||
| } | } | ||||
| else if (isEmpty ()) | |||||
| if (isEmpty ()) | |||||
| { | { | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -908,13 +876,13 @@ bool ConstString::endsWith (const ConstString& str, CompareMode mode /*= kCaseSe | |||||
| return strncmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; | return strncmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; | ||||
| return strnicmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; | return strnicmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; | ||||
| } | } | ||||
| else if (isWide && str.isWide) | |||||
| if (isWide && str.isWide) | |||||
| { | { | ||||
| if (isCaseSensitive (mode)) | if (isCaseSensitive (mode)) | ||||
| return strncmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; | return strncmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; | ||||
| return strnicmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; | return strnicmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; | ||||
| } | } | ||||
| else if (isWide) | |||||
| if (isWide) | |||||
| { | { | ||||
| String tmp (str.text8 ()); | String tmp (str.text8 ()); | ||||
| tmp.toWideString (); | tmp.toWideString (); | ||||
| @@ -924,16 +892,13 @@ bool ConstString::endsWith (const ConstString& str, CompareMode mode /*= kCaseSe | |||||
| return strncmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; | return strncmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; | ||||
| return strnicmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; | return strnicmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| if (str.length () > tmp.length ()) | |||||
| return false; | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; | |||||
| return strnicmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; | |||||
| } | |||||
| String tmp (text8 ()); | |||||
| tmp.toWideString (); | |||||
| if (str.length () > tmp.length ()) | |||||
| return false; | |||||
| if (isCaseSensitive (mode)) | |||||
| return strncmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; | |||||
| return strnicmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -976,7 +941,7 @@ int32 ConstString::findNext (int32 startIndex, const ConstString& str, int32 n, | |||||
| } | } | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| else if (!isWide && !str.isWide) | |||||
| if (!isWide && !str.isWide) | |||||
| { | { | ||||
| uint32 stringLength = str.length (); | uint32 stringLength = str.length (); | ||||
| n = n < 0 ? stringLength : Min<uint32> (n, stringLength); | n = n < 0 ? stringLength : Min<uint32> (n, stringLength); | ||||
| @@ -1207,7 +1172,7 @@ int32 ConstString::findPrev (int32 startIndex, const ConstString& str, int32 n, | |||||
| } | } | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| else if (!isWide && !str.isWide) | |||||
| if (!isWide && !str.isWide) | |||||
| { | { | ||||
| uint32 stringLength = str.length (); | uint32 stringLength = str.length (); | ||||
| n = n < 0 ? stringLength : Min<uint32> (n, stringLength); | n = n < 0 ? stringLength : Min<uint32> (n, stringLength); | ||||
| @@ -1313,13 +1278,11 @@ int32 ConstString::getFirstDifferent (const ConstString& str, CompareMode mode) | |||||
| return -1; | return -1; | ||||
| return getFirstDifferent (tmp, mode); | return getFirstDifferent (tmp, mode); | ||||
| } | } | ||||
| else | |||||
| { | |||||
| String tmp (text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return -1; | |||||
| return tmp.getFirstDifferent (str, mode); | |||||
| } | |||||
| String tmp (text8 ()); | |||||
| if (tmp.toWideString () == false) | |||||
| return -1; | |||||
| return tmp.getFirstDifferent (str, mode); | |||||
| } | } | ||||
| uint32 len1 = len; | uint32 len1 = len; | ||||
| @@ -1375,8 +1338,7 @@ bool ConstString::scanInt64 (int64& value, uint32 offset, bool scanToEnd) const | |||||
| if (isWide) | if (isWide) | ||||
| return scanInt64_16 (buffer16 + offset, value, scanToEnd); | return scanInt64_16 (buffer16 + offset, value, scanToEnd); | ||||
| else | |||||
| return scanInt64_8 (buffer8 + offset, value, scanToEnd); | |||||
| return scanInt64_8 (buffer8 + offset, value, scanToEnd); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1387,8 +1349,7 @@ bool ConstString::scanUInt64 (uint64& value, uint32 offset, bool scanToEnd) cons | |||||
| if (isWide) | if (isWide) | ||||
| return scanUInt64_16 (buffer16 + offset, value, scanToEnd); | return scanUInt64_16 (buffer16 + offset, value, scanToEnd); | ||||
| else | |||||
| return scanUInt64_8 (buffer8 + offset, value, scanToEnd); | |||||
| return scanUInt64_8 (buffer8 + offset, value, scanToEnd); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1399,8 +1360,7 @@ bool ConstString::scanHex (uint8& value, uint32 offset, bool scanToEnd) const | |||||
| if (isWide) | if (isWide) | ||||
| return scanHex_16 (buffer16 + offset, value, scanToEnd); | return scanHex_16 (buffer16 + offset, value, scanToEnd); | ||||
| else | |||||
| return scanHex_8 (buffer8 + offset, value, scanToEnd); | |||||
| return scanHex_8 (buffer8 + offset, value, scanToEnd); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1411,8 +1371,7 @@ bool ConstString::scanInt32 (int32& value, uint32 offset, bool scanToEnd) const | |||||
| if (isWide) | if (isWide) | ||||
| return scanInt32_16 (buffer16 + offset, value, scanToEnd); | return scanInt32_16 (buffer16 + offset, value, scanToEnd); | ||||
| else | |||||
| return scanInt32_8 (buffer8 + offset, value, scanToEnd); | |||||
| return scanInt32_8 (buffer8 + offset, value, scanToEnd); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1423,8 +1382,7 @@ bool ConstString::scanUInt32 (uint32& value, uint32 offset, bool scanToEnd) cons | |||||
| if (isWide) | if (isWide) | ||||
| return scanUInt32_16 (buffer16 + offset, value, scanToEnd); | return scanUInt32_16 (buffer16 + offset, value, scanToEnd); | ||||
| else | |||||
| return scanUInt32_8 (buffer8 + offset, value, scanToEnd); | |||||
| return scanUInt32_8 (buffer8 + offset, value, scanToEnd); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1434,7 +1392,7 @@ bool ConstString::scanInt64_8 (const char8* text, int64& value, bool scanToEnd) | |||||
| { | { | ||||
| if (sscanf (text, "%" FORMAT_INT64A, &value) == 1) | if (sscanf (text, "%" FORMAT_INT64A, &value) == 1) | ||||
| return true; | return true; | ||||
| else if (scanToEnd == false) | |||||
| if (scanToEnd == false) | |||||
| return false; | return false; | ||||
| text++; | text++; | ||||
| } | } | ||||
| @@ -1460,7 +1418,7 @@ bool ConstString::scanUInt64_8 (const char8* text, uint64& value, bool scanToEnd | |||||
| { | { | ||||
| if (sscanf (text, "%" FORMAT_UINT64A, &value) == 1) | if (sscanf (text, "%" FORMAT_UINT64A, &value) == 1) | ||||
| return true; | return true; | ||||
| else if (scanToEnd == false) | |||||
| if (scanToEnd == false) | |||||
| return false; | return false; | ||||
| text++; | text++; | ||||
| } | } | ||||
| @@ -1510,7 +1468,7 @@ bool ConstString::scanHex_8 (const char8* text, uint8& value, bool scanToEnd) | |||||
| value = (uint8)v; | value = (uint8)v; | ||||
| return true; | return true; | ||||
| } | } | ||||
| else if (scanToEnd == false) | |||||
| if (scanToEnd == false) | |||||
| return false; | return false; | ||||
| text++; | text++; | ||||
| } | } | ||||
| @@ -1565,7 +1523,7 @@ bool ConstString::scanFloat (double& value, uint32 offset, bool scanToEnd) const | |||||
| { | { | ||||
| if (sscanf (txt, "%lf", &value) == 1) | if (sscanf (txt, "%lf", &value) == 1) | ||||
| return true; | return true; | ||||
| else if (scanToEnd == false) | |||||
| if (scanToEnd == false) | |||||
| return false; | return false; | ||||
| txt++; | txt++; | ||||
| } | } | ||||
| @@ -1593,7 +1551,7 @@ char16 ConstString::toLower (char16 c) | |||||
| } | } | ||||
| return c; | return c; | ||||
| #elif SMTG_OS_LINUX | #elif SMTG_OS_LINUX | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| return c; | return c; | ||||
| #else | #else | ||||
| return towlower (c); | return towlower (c); | ||||
| @@ -1621,7 +1579,7 @@ char16 ConstString::toUpper (char16 c) | |||||
| } | } | ||||
| return c; | return c; | ||||
| #elif SMTG_OS_LINUX | #elif SMTG_OS_LINUX | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| return c; | return c; | ||||
| #else | #else | ||||
| return towupper (c); | return towupper (c); | ||||
| @@ -1767,8 +1725,7 @@ bool ConstString::isDigit (uint32 index) const | |||||
| if (isWide) | if (isWide) | ||||
| return ConstString::isCharDigit (buffer16[index]); | return ConstString::isCharDigit (buffer16[index]); | ||||
| else | |||||
| return ConstString::isCharDigit (buffer8[index]); | |||||
| return ConstString::isCharDigit (buffer8[index]); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -1919,7 +1876,7 @@ int32 ConstString::multiByteToWideString (char16* dest, const char8* source, int | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1999,13 +1956,12 @@ int32 ConstString::wideStringToMultiByte (char8* dest, const char16* wideString, | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| } | } | ||||
| return result; | return result; | ||||
| #else | #else | ||||
| #warning DEPRECATED No Linux implementation | |||||
| assert(false && "DEPRECATED No Linux implementation"); | |||||
| assert (false && "DEPRECATED No Linux implementation"); | |||||
| return 0; | return 0; | ||||
| #endif | #endif | ||||
| @@ -2445,12 +2401,10 @@ bool String::setChar8 (uint32 index, char8 c) | |||||
| len = index; | len = index; | ||||
| return true; | return true; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| if (resize (index + 1, isWide, true) == false) | |||||
| return false; | |||||
| len = index + 1; | |||||
| } | |||||
| if (resize (index + 1, isWide, true) == false) | |||||
| return false; | |||||
| len = index + 1; | |||||
| } | } | ||||
| if (index < len && buffer) | if (index < len && buffer) | ||||
| @@ -2497,12 +2451,9 @@ bool String::setChar16 (uint32 index, char16 c) | |||||
| len = index; | len = index; | ||||
| return true; | return true; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| if (resize (index + 1, isWide, true) == false) | |||||
| return false; | |||||
| len = index + 1; | |||||
| } | |||||
| if (resize (index + 1, isWide, true) == false) | |||||
| return false; | |||||
| len = index + 1; | |||||
| } | } | ||||
| if (index < len && buffer) | if (index < len && buffer) | ||||
| @@ -2536,8 +2487,7 @@ String& String::assign (const ConstString& str, int32 n) | |||||
| { | { | ||||
| if (str.isWideString ()) | if (str.isWideString ()) | ||||
| return assign (str.text16 (), n < 0 ? str.length () : n); | return assign (str.text16 (), n < 0 ? str.length () : n); | ||||
| else | |||||
| return assign (str.text8 (), n < 0 ? str.length () : n); | |||||
| return assign (str.text8 (), n < 0 ? str.length () : n); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -2633,8 +2583,7 @@ String& String::append (const ConstString& str, int32 n) | |||||
| { | { | ||||
| if (str.isWideString ()) | if (str.isWideString ()) | ||||
| return append (str.text16 (), n); | return append (str.text16 (), n); | ||||
| else | |||||
| return append (str.text8 (), n); | |||||
| return append (str.text8 (), n); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -2718,7 +2667,7 @@ String& String::append (const char8 c, int32 n) | |||||
| { | { | ||||
| return append (str, 1); | return append (str, 1); | ||||
| } | } | ||||
| else if (n > 1) | |||||
| if (n > 1) | |||||
| { | { | ||||
| if (isWide) | if (isWide) | ||||
| { | { | ||||
| @@ -2752,7 +2701,7 @@ String& String::append (const char16 c, int32 n) | |||||
| char16 str[] = {c, 0}; | char16 str[] = {c, 0}; | ||||
| return append (str, 1); | return append (str, 1); | ||||
| } | } | ||||
| else if (n > 1) | |||||
| if (n > 1) | |||||
| { | { | ||||
| if (!isWide) | if (!isWide) | ||||
| { | { | ||||
| @@ -2781,8 +2730,7 @@ String& String::insertAt (uint32 idx, const ConstString& str, int32 n) | |||||
| { | { | ||||
| if (str.isWideString ()) | if (str.isWideString ()) | ||||
| return insertAt (idx, str.text16 (), n); | return insertAt (idx, str.text16 (), n); | ||||
| else | |||||
| return insertAt (idx, str.text8 (), n); | |||||
| return insertAt (idx, str.text8 (), n); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -2860,8 +2808,7 @@ String& String::replace (uint32 idx, int32 n1, const ConstString& str, int32 n2) | |||||
| { | { | ||||
| if (str.isWideString ()) | if (str.isWideString ()) | ||||
| return replace (idx, n1, str.text16 (), n2); | return replace (idx, n1, str.text16 (), n2); | ||||
| else | |||||
| return replace (idx, n1, str.text8 (), n2); | |||||
| return replace (idx, n1, str.text8 (), n2); | |||||
| } | } | ||||
| // "replace" replaces n1 number of characters at the specified index with | // "replace" replaces n1 number of characters at the specified index with | ||||
| @@ -3749,11 +3696,9 @@ unsigned char* String::toPascalString (unsigned char* buf) | |||||
| } | } | ||||
| return buf; | return buf; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| *buf = 0; | |||||
| return buf; | |||||
| } | |||||
| *buf = 0; | |||||
| return buf; | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -3852,7 +3797,7 @@ void* ConstString::toCFStringRef (uint32 encoding, bool mutableCFString) const | |||||
| return (void*)CFStringCreateWithCString (kCFAllocator, "", encoding); | return (void*)CFStringCreateWithCString (kCFAllocator, "", encoding); | ||||
| } | } | ||||
| } | } | ||||
| return 0; | |||||
| return nullptr; | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -3886,9 +3831,9 @@ template <class T> int32 tstrnatcmp (const T* s1, const T* s2, bool caseSensitiv | |||||
| { | { | ||||
| if (s1 == nullptr && s2 == nullptr) | if (s1 == nullptr && s2 == nullptr) | ||||
| return 0; | return 0; | ||||
| else if (s1 == nullptr) | |||||
| if (s1 == nullptr) | |||||
| return -1; | return -1; | ||||
| else if (s2 == nullptr) | |||||
| if (s2 == nullptr) | |||||
| return 1; | return 1; | ||||
| while (*s1 && *s2) | while (*s1 && *s2) | ||||
| @@ -3949,12 +3894,11 @@ template <class T> int32 tstrnatcmp (const T* s1, const T* s2, bool caseSensitiv | |||||
| if (*s1 == 0 && *s2 == 0) | if (*s1 == 0 && *s2 == 0) | ||||
| return 0; | return 0; | ||||
| else if (*s1 == 0) | |||||
| if (*s1 == 0) | |||||
| return -1; | return -1; | ||||
| else if (*s2 == 0) | |||||
| if (*s2 == 0) | |||||
| return 1; | return 1; | ||||
| else | |||||
| return (int32)(*s1 - *s2); | |||||
| return (int32)(*s1 - *s2); | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -322,7 +322,7 @@ public: | |||||
| String (const ConstString& str, int32 n = -1); ///< assign n characters of str (-1: all) | String (const ConstString& str, int32 n = -1); ///< assign n characters of str (-1: all) | ||||
| String (const FVariant& var); ///< assign from FVariant | String (const FVariant& var); ///< assign from FVariant | ||||
| String (IString* str); ///< assign from IString | String (IString* str); ///< assign from IString | ||||
| ~String (); | |||||
| ~String () SMTG_OVERRIDE; | |||||
| #if SMTG_CPP11_STDLIBSUPPORT | #if SMTG_CPP11_STDLIBSUPPORT | ||||
| String (String&& str); | String (String&& str); | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -78,7 +78,7 @@ class UpdateHandler : public FObject, public IUpdateHandler, public IUpdateManag | |||||
| public: | public: | ||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
| UpdateHandler (); | UpdateHandler (); | ||||
| ~UpdateHandler (); | |||||
| ~UpdateHandler () SMTG_OVERRIDE; | |||||
| using FObject::addDependent; | using FObject::addDependent; | ||||
| using FObject::removeDependent; | using FObject::removeDependent; | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -99,7 +99,7 @@ public: | |||||
| FLock (const char8* name = "FLock"); | FLock (const char8* name = "FLock"); | ||||
| /** Lock destructor. */ | /** Lock destructor. */ | ||||
| ~FLock (); | |||||
| ~FLock () SMTG_OVERRIDE; | |||||
| //-- ILock ----------------------------------------------------------- | //-- ILock ----------------------------------------------------------- | ||||
| void lock () SMTG_OVERRIDE; | void lock () SMTG_OVERRIDE; | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -1,6 +1,6 @@ | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| This license applies only to files referencing this license, | This license applies only to files referencing this license, | ||||
| for other files of the Software Development Kit the respective embedded license text | for other files of the Software Development Kit the respective embedded license text | ||||
| @@ -9,7 +9,7 @@ | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // This file is part of a Steinberg SDK. It is subject to the license terms | // This file is part of a Steinberg SDK. It is subject to the license terms | ||||
| // in the LICENSE file found in the top-level directory of this distribution | // in the LICENSE file found in the top-level directory of this distribution | ||||
| // and at www.steinberg.net/sdklicenses. | |||||
| // and at www.steinberg.net/sdklicenses. | |||||
| // No part of the SDK, including this file, may be copied, modified, propagated, | // No part of the SDK, including this file, may be copied, modified, propagated, | ||||
| // or distributed except according to the terms contained in the LICENSE file. | // or distributed except according to the terms contained in the LICENSE file. | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -26,11 +26,10 @@ | |||||
| #elif defined __BORLANDC__ | #elif defined __BORLANDC__ | ||||
| #pragma -a8 | #pragma -a8 | ||||
| #elif SMTG_OS_WINDOWS | #elif SMTG_OS_WINDOWS | ||||
| //! @brief warning C4996: alignment changed after including header, may be due to missing #pragma pack(pop) | |||||
| #if defined (_MSC_VER) | |||||
| //! @brief warning C4103: alignment changed after including header, may be due to missing #pragma pack(pop) | |||||
| #ifdef _MSC_VER | |||||
| #pragma warning(disable : 4103) | #pragma warning(disable : 4103) | ||||
| #endif | #endif | ||||
| #pragma pack(push) | #pragma pack(push) | ||||
| #if SMTG_PLATFORM_64 | #if SMTG_PLATFORM_64 | ||||
| #pragma pack(16) | #pragma pack(16) | ||||
| @@ -71,6 +71,8 @@ | |||||
| #define SMTG_CPU_ARM_64EC 0 | #define SMTG_CPU_ARM_64EC 0 | ||||
| #endif | #endif | ||||
| #define SMTG_OS_WINDOWS_ARM (SMTG_CPU_ARM_64EC || SMTG_CPU_ARM_64 || SMTG_CPU_ARM) | |||||
| #define BYTEORDER kLittleEndian | #define BYTEORDER kLittleEndian | ||||
| #define COM_COMPATIBLE 1 | #define COM_COMPATIBLE 1 | ||||
| @@ -85,12 +87,12 @@ | |||||
| #endif | #endif | ||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||
| #pragma warning (disable : 4244) // Conversion from 'type1' to 'type2', possible loss of data. | |||||
| #pragma warning (disable : 4250) // Inheritance via dominance is allowed | |||||
| #pragma warning (disable : 4996) // deprecated functions | |||||
| #pragma warning (disable : 4244) //! @brief warning C4244: Conversion from 'type1' to 'type2', possible loss of data. | |||||
| #pragma warning (disable : 4250) //! @brief warning C4250: Inheritance via dominance is allowed | |||||
| #pragma warning (disable : 4996) //! @brief warning C4996: deprecated functions | |||||
| #pragma warning (3 : 4189) // local variable is initialized but not referenced | |||||
| #pragma warning (3 : 4238) // nonstandard extension used : class rvalue used as lvalue | |||||
| #pragma warning (3 : 4189) //! @brief warning C4189: local variable is initialized but not referenced | |||||
| #pragma warning (3 : 4238) //! @brief warning C4238: nonstandard extension used : class rvalue used as lvalue | |||||
| #endif | #endif | ||||
| #if defined (_WIN64) || defined (_M_ARM64) | #if defined (_WIN64) || defined (_M_ARM64) | ||||
| @@ -104,56 +106,35 @@ | |||||
| #endif | #endif | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| #if __cplusplus >= 201103L || _MSC_VER > 1600 || SMTG_INTEL_CXX11_MODE | |||||
| #define SMTG_CPP11 1 | |||||
| #else | |||||
| #define SMTG_CPP11 0 | |||||
| #endif | |||||
| #define SMTG_CPP11 (__cplusplus >= 201103L || _MSC_VER > 1600 || SMTG_INTEL_CXX11_MODE) | |||||
| #define SMTG_CPP11_STDLIBSUPPORT SMTG_CPP11 | #define SMTG_CPP11_STDLIBSUPPORT SMTG_CPP11 | ||||
| #if (__cplusplus >= 201402L || (defined (_MSVC_LANG) && _MSVC_LANG >= 201402L)) | |||||
| #define SMTG_CPP14 1 | |||||
| #else | |||||
| #define SMTG_CPP14 0 | |||||
| #endif | |||||
| #if (__cplusplus >= 201703L || (defined (_MSVC_LANG) && _MSVC_LANG >= 201703L)) | |||||
| #define SMTG_CPP17 1 | |||||
| #else | |||||
| #define SMTG_CPP17 0 | |||||
| #endif | |||||
| #if (_MSC_FULL_VER >= 190023026 || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1300)) | |||||
| #define SMTG_HAS_NOEXCEPT 1 | |||||
| #else | |||||
| #define SMTG_HAS_NOEXCEPT 0 | |||||
| #endif | |||||
| #if (_MSC_FULL_VER >= 190024210L || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1500) || (defined(__MINGW32__) && SMTG_CPP11)) | |||||
| #define SMTG_CPP14 (__cplusplus >= 201402L || ((_MSC_FULL_VER >= 190024210L) && (_MSVC_LANG >= 201402L))) | |||||
| #define SMTG_CPP17 (__cplusplus >= 201703L || ((_MSC_FULL_VER >= 190024210L) && (_MSVC_LANG >= 201703L))) | |||||
| #define SMTG_CPP20 (__cplusplus >= 202002L) | |||||
| #define SMTG_HAS_NOEXCEPT ((_MSC_FULL_VER >= 190023026L) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1300)) | |||||
| #if ((_MSC_FULL_VER >= 190024210L) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1500) || (defined(__MINGW32__) && SMTG_CPP11)) | |||||
| #define SMTG_HAS_CPP11_CONSTEXPR 1 | #define SMTG_HAS_CPP11_CONSTEXPR 1 | ||||
| #else | #else | ||||
| #define SMTG_HAS_CPP11_CONSTEXPR 0 | #define SMTG_HAS_CPP11_CONSTEXPR 0 | ||||
| #endif | #endif | ||||
| #if (((_MSC_VER >= 1915L) && (_MSVC_LANG >= 201402L)) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER > 1700) || (defined(__MINGW32__) && SMTG_CPP14)) | #if (((_MSC_VER >= 1915L) && (_MSVC_LANG >= 201402L)) || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER > 1700) || (defined(__MINGW32__) && SMTG_CPP14)) | ||||
| #define SMTG_HAS_CPP14_CONSTEXPR 1 | #define SMTG_HAS_CPP14_CONSTEXPR 1 | ||||
| #else | #else | ||||
| #define SMTG_HAS_CPP14_CONSTEXPR 0 | #define SMTG_HAS_CPP14_CONSTEXPR 0 | ||||
| #endif | #endif | ||||
| #endif | |||||
| #endif //__cplusplus | |||||
| #define SMTG_DEPRECATED_ATTRIBUTE(message) __declspec (deprecated ("Is Deprecated: " message)) | #define SMTG_DEPRECATED_ATTRIBUTE(message) __declspec (deprecated ("Is Deprecated: " message)) | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LINUX | // LINUX | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| #elif __gnu_linux__ || __linux__ | #elif __gnu_linux__ || __linux__ | ||||
| #define SMTG_OS_LINUX 1 | |||||
| #define SMTG_OS_MACOS 0 | |||||
| #define SMTG_OS_WINDOWS 0 | |||||
| #define SMTG_OS_IOS 0 | |||||
| #define SMTG_OS_OSX 0 | |||||
| #define SMTG_OS_LINUX 1 | |||||
| #define SMTG_OS_MACOS 0 | |||||
| #define SMTG_OS_WINDOWS 0 | |||||
| #define SMTG_OS_WINDOWS_ARM 0 | |||||
| #define SMTG_OS_IOS 0 | |||||
| #define SMTG_OS_OSX 0 | |||||
| #define SMTG_CPU_X86 __i386__ | #define SMTG_CPU_X86 __i386__ | ||||
| #define SMTG_CPU_X86_64 __x86_64__ | #define SMTG_CPU_X86_64 __x86_64__ | ||||
| @@ -196,6 +177,7 @@ | |||||
| #endif | #endif | ||||
| #define SMTG_CPP14 (__cplusplus >= 201402L) | #define SMTG_CPP14 (__cplusplus >= 201402L) | ||||
| #define SMTG_CPP17 (__cplusplus >= 201703L) | #define SMTG_CPP17 (__cplusplus >= 201703L) | ||||
| #define SMTG_CPP20 (__cplusplus >= 202002L) | |||||
| #if defined(__GNUG__) && __GNUG__ < 8 | #if defined(__GNUG__) && __GNUG__ < 8 | ||||
| #define SMTG_CPP11_STDLIBSUPPORT 0 | #define SMTG_CPP11_STDLIBSUPPORT 0 | ||||
| #else | #else | ||||
| @@ -204,23 +186,24 @@ | |||||
| #define SMTG_HAS_NOEXCEPT 1 | #define SMTG_HAS_NOEXCEPT 1 | ||||
| #define SMTG_HAS_CPP11_CONSTEXPR SMTG_CPP11 | #define SMTG_HAS_CPP11_CONSTEXPR SMTG_CPP11 | ||||
| #define SMTG_HAS_CPP14_CONSTEXPR SMTG_CPP14 | #define SMTG_HAS_CPP14_CONSTEXPR SMTG_CPP14 | ||||
| #endif | |||||
| #endif // __cplusplus | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Mac and iOS | // Mac and iOS | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| #elif __APPLE__ | #elif __APPLE__ | ||||
| #include <TargetConditionals.h> | #include <TargetConditionals.h> | ||||
| #define SMTG_OS_LINUX 0 | |||||
| #define SMTG_OS_MACOS 1 | |||||
| #define SMTG_OS_WINDOWS 0 | |||||
| #define SMTG_OS_IOS TARGET_OS_IPHONE | |||||
| #define SMTG_OS_OSX TARGET_OS_MAC && !TARGET_OS_IPHONE | |||||
| #define SMTG_CPU_X86 TARGET_CPU_X86 | |||||
| #define SMTG_CPU_X86_64 TARGET_CPU_X86_64 | |||||
| #define SMTG_CPU_ARM TARGET_CPU_ARM | |||||
| #define SMTG_CPU_ARM_64 TARGET_CPU_ARM64 | |||||
| #define SMTG_CPU_ARM_64EC 0 | |||||
| #define SMTG_OS_LINUX 0 | |||||
| #define SMTG_OS_MACOS 1 | |||||
| #define SMTG_OS_WINDOWS 0 | |||||
| #define SMTG_OS_WINDOWS_ARM 0 | |||||
| #define SMTG_OS_IOS TARGET_OS_IPHONE | |||||
| #define SMTG_OS_OSX TARGET_OS_MAC && !TARGET_OS_IPHONE | |||||
| #define SMTG_CPU_X86 TARGET_CPU_X86 | |||||
| #define SMTG_CPU_X86_64 TARGET_CPU_X86_64 | |||||
| #define SMTG_CPU_ARM TARGET_CPU_ARM | |||||
| #define SMTG_CPU_ARM_64 TARGET_CPU_ARM64 | |||||
| #define SMTG_CPU_ARM_64EC 0 | |||||
| #if !SMTG_OS_IOS | #if !SMTG_OS_IOS | ||||
| #ifndef __CF_USE_FRAMEWORK_INCLUDES__ | #ifndef __CF_USE_FRAMEWORK_INCLUDES__ | ||||
| @@ -274,6 +257,7 @@ | |||||
| #define SMTG_CPP11 (__cplusplus >= 201103L || SMTG_INTEL_CXX11_MODE) | #define SMTG_CPP11 (__cplusplus >= 201103L || SMTG_INTEL_CXX11_MODE) | ||||
| #define SMTG_CPP14 (__cplusplus >= 201402L) | #define SMTG_CPP14 (__cplusplus >= 201402L) | ||||
| #define SMTG_CPP17 (__cplusplus >= 201703L) | #define SMTG_CPP17 (__cplusplus >= 201703L) | ||||
| #define SMTG_CPP20 (__cplusplus >= 202002L) | |||||
| #if defined (_LIBCPP_VERSION) && SMTG_CPP11 | #if defined (_LIBCPP_VERSION) && SMTG_CPP11 | ||||
| #define SMTG_CPP11_STDLIBSUPPORT 1 | #define SMTG_CPP11_STDLIBSUPPORT 1 | ||||
| #define SMTG_HAS_NOEXCEPT 1 | #define SMTG_HAS_NOEXCEPT 1 | ||||
| @@ -283,7 +267,7 @@ | |||||
| #endif | #endif | ||||
| #define SMTG_HAS_CPP11_CONSTEXPR SMTG_CPP11 | #define SMTG_HAS_CPP11_CONSTEXPR SMTG_CPP11 | ||||
| #define SMTG_HAS_CPP14_CONSTEXPR SMTG_CPP14 | #define SMTG_HAS_CPP14_CONSTEXPR SMTG_CPP14 | ||||
| #endif | |||||
| #endif // __cplusplus | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Unknown Platform | // Unknown Platform | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| @@ -291,13 +275,6 @@ | |||||
| #pragma error unknown platform | #pragma error unknown platform | ||||
| #endif | #endif | ||||
| //----------------------------------------------------------------------------- | |||||
| #if SMTG_OS_WINDOWS && (SMTG_CPU_ARM_64EC || SMTG_CPU_ARM_64 || SMTG_CPU_ARM) | |||||
| #define SMTG_OS_WINDOWS_ARM 1 | |||||
| #else | |||||
| #define SMTG_OS_WINDOWS_ARM 0 | |||||
| #endif | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| #if !SMTG_RENAME_ASSERT | #if !SMTG_RENAME_ASSERT | ||||
| #undef WINDOWS | #undef WINDOWS | ||||
| @@ -133,12 +133,11 @@ inline SMTG_CONSTEXPR14 int32 _tstrcmp (const T* src, const T* dst) | |||||
| if (*src == 0 && *dst == 0) | if (*src == 0 && *dst == 0) | ||||
| return 0; | return 0; | ||||
| else if (*src == 0) | |||||
| if (*src == 0) | |||||
| return -1; | return -1; | ||||
| else if (*dst == 0) | |||||
| if (*dst == 0) | |||||
| return 1; | return 1; | ||||
| else | |||||
| return (int32) (*src - *dst); | |||||
| return (int32) (*src - *dst); | |||||
| } | } | ||||
| inline SMTG_CONSTEXPR14 int32 tstrcmp (const tchar* src, const tchar* dst) {return _tstrcmp (src, dst);} | inline SMTG_CONSTEXPR14 int32 tstrcmp (const tchar* src, const tchar* dst) {return _tstrcmp (src, dst);} | ||||
| @@ -169,12 +168,11 @@ inline SMTG_CONSTEXPR14 int32 _tstrncmp (const T* first, const T* last, uint32 c | |||||
| if (*first == 0 && *last == 0) | if (*first == 0 && *last == 0) | ||||
| return 0; | return 0; | ||||
| else if (*first == 0) | |||||
| if (*first == 0) | |||||
| return -1; | return -1; | ||||
| else if (*last == 0) | |||||
| if (*last == 0) | |||||
| return 1; | return 1; | ||||
| else | |||||
| return (int32) (*first - *last); | |||||
| return (int32) (*first - *last); | |||||
| } | } | ||||
| inline SMTG_CONSTEXPR14 int32 tstrncmp (const tchar* first, const tchar* last, uint32 count) {return _tstrncmp (first, last, count);} | inline SMTG_CONSTEXPR14 int32 tstrncmp (const tchar* first, const tchar* last, uint32 count) {return _tstrncmp (first, last, count);} | ||||
| @@ -406,7 +406,7 @@ void FUID::toRegistryString (char8* string) const | |||||
| char8 s5[13]; | char8 s5[13]; | ||||
| Steinberg::toString8 (s5, data, 10, 16); | Steinberg::toString8 (s5, data, 10, 16); | ||||
| snprintf (string, 36, "{%s-%s-%s-%s-%s}", s1, s2, s3, s4, s5); | |||||
| snprintf (string, 40, "{%s-%s-%s-%s-%s}", s1, s2, s3, s4, s5); | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -27,34 +27,39 @@ inline const T& Min (const T& a, const T& b) | |||||
| return b < a ? b : a; | return b < a ? b : a; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline const T& Max (const T& a, const T& b) | inline const T& Max (const T& a, const T& b) | ||||
| { | { | ||||
| return a < b ? b : a; | return a < b ? b : a; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline T Abs (const T& value) | inline T Abs (const T& value) | ||||
| { | { | ||||
| return (value >= (T)0) ? value : -value; | return (value >= (T)0) ? value : -value; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline T Sign (const T& value) | inline T Sign (const T& value) | ||||
| { | { | ||||
| return (value == (T)0) ? 0 : ((value >= (T)0) ? 1 : -1); | return (value == (T)0) ? 0 : ((value >= (T)0) ? 1 : -1); | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline T Bound (T minval, T maxval, T x) | inline T Bound (T minval, T maxval, T x) | ||||
| { | { | ||||
| if (x < minval) | if (x < minval) | ||||
| return minval; | return minval; | ||||
| else if (x > maxval) | |||||
| if (x > maxval) | |||||
| return maxval; | return maxval; | ||||
| return x; | return x; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| void Swap (T& t1, T& t2) | void Swap (T& t1, T& t2) | ||||
| { | { | ||||
| @@ -63,6 +68,7 @@ void Swap (T& t1, T& t2) | |||||
| t2 = tmp; | t2 = tmp; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| bool IsApproximateEqual (T t1, T t2, T epsilon) | bool IsApproximateEqual (T t1, T t2, T epsilon) | ||||
| { | { | ||||
| @@ -76,18 +82,21 @@ bool IsApproximateEqual (T t1, T t2, T epsilon) | |||||
| return false; | return false; | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline T ToNormalized (const T& value, const int32 numSteps) | inline T ToNormalized (const T& value, const int32 numSteps) | ||||
| { | { | ||||
| return value / T (numSteps); | return value / T (numSteps); | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| template <class T> | template <class T> | ||||
| inline int32 FromNormalized (const T& norm, const int32 numSteps) | inline int32 FromNormalized (const T& norm, const int32 numSteps) | ||||
| { | { | ||||
| return Min<int32> (numSteps, int32 (norm * (numSteps + 1))); | return Min<int32> (numSteps, int32 (norm * (numSteps + 1))); | ||||
| } | } | ||||
| //---------------------------------------------------------------------------- | |||||
| // Four character constant | // Four character constant | ||||
| #ifndef CCONST | #ifndef CCONST | ||||
| #define CCONST(a, b, c, d) \ | #define CCONST(a, b, c, d) \ | ||||
| @@ -106,7 +106,7 @@ tresult PLUGIN_API MyPlugin::setState (IBStream* state) | |||||
| UString128 tmp (string); | UString128 tmp (string); | ||||
| char ascii[128]; | char ascii[128]; | ||||
| tmp.toAscii (ascii, 128); | tmp.toAscii (ascii, 128); | ||||
| if (!strncmp (ascii, StateType::kProject, strlen (StateType::kProject))) | |||||
| if (strncmp (ascii, StateType::kProject, strlen (StateType::kProject)) == 0) | |||||
| { | { | ||||
| // we are in project loading context... | // we are in project loading context... | ||||
| } | } | ||||
| @@ -46,25 +46,26 @@ namespace PlugType | |||||
| \defgroup plugType Plug-in Type used for subCategories */ | \defgroup plugType Plug-in Type used for subCategories */ | ||||
| /*@{*/ | /*@{*/ | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| SMTG_CONSTEXPR const CString kFx = "Fx"; ///< others type (not categorized) | |||||
| SMTG_CONSTEXPR const CString kFxAnalyzer = "Fx|Analyzer"; ///< Scope, FFT-Display, Loudness Processing... | SMTG_CONSTEXPR const CString kFxAnalyzer = "Fx|Analyzer"; ///< Scope, FFT-Display, Loudness Processing... | ||||
| SMTG_CONSTEXPR const CString kFxDelay = "Fx|Delay"; ///< Delay, Multi-tap Delay, Ping-Pong Delay... | SMTG_CONSTEXPR const CString kFxDelay = "Fx|Delay"; ///< Delay, Multi-tap Delay, Ping-Pong Delay... | ||||
| SMTG_CONSTEXPR const CString kFxDistortion = "Fx|Distortion"; ///< Amp Simulator, Sub-Harmonic, SoftClipper... | SMTG_CONSTEXPR const CString kFxDistortion = "Fx|Distortion"; ///< Amp Simulator, Sub-Harmonic, SoftClipper... | ||||
| SMTG_CONSTEXPR const CString kFxDynamics = "Fx|Dynamics"; ///< Compressor, Expander, Gate, Limiter, Maximizer, Tape Simulator, EnvelopeShaper... | SMTG_CONSTEXPR const CString kFxDynamics = "Fx|Dynamics"; ///< Compressor, Expander, Gate, Limiter, Maximizer, Tape Simulator, EnvelopeShaper... | ||||
| SMTG_CONSTEXPR const CString kFxEQ = "Fx|EQ"; ///< Equalization, Graphical EQ... | SMTG_CONSTEXPR const CString kFxEQ = "Fx|EQ"; ///< Equalization, Graphical EQ... | ||||
| SMTG_CONSTEXPR const CString kFxFilter = "Fx|Filter"; ///< WahWah, ToneBooster, Specific Filter,... | SMTG_CONSTEXPR const CString kFxFilter = "Fx|Filter"; ///< WahWah, ToneBooster, Specific Filter,... | ||||
| SMTG_CONSTEXPR const CString kFx = "Fx"; ///< others type (not categorized) | |||||
| SMTG_CONSTEXPR const CString kFxGenerator = "Fx|Generator"; ///< Tone Generator, Noise Generator... | |||||
| SMTG_CONSTEXPR const CString kFxInstrument = "Fx|Instrument"; ///< Fx which could be loaded as Instrument too | SMTG_CONSTEXPR const CString kFxInstrument = "Fx|Instrument"; ///< Fx which could be loaded as Instrument too | ||||
| SMTG_CONSTEXPR const CString kFxInstrumentExternal = "Fx|Instrument|External"; ///< Fx which could be loaded as Instrument too and is external (wrapped Hardware) | SMTG_CONSTEXPR const CString kFxInstrumentExternal = "Fx|Instrument|External"; ///< Fx which could be loaded as Instrument too and is external (wrapped Hardware) | ||||
| SMTG_CONSTEXPR const CString kFxSpatial = "Fx|Spatial"; ///< MonoToStereo, StereoEnhancer,... | |||||
| SMTG_CONSTEXPR const CString kFxGenerator = "Fx|Generator"; ///< Tone Generator, Noise Generator... | |||||
| SMTG_CONSTEXPR const CString kFxMastering = "Fx|Mastering"; ///< Dither, Noise Shaping,... | SMTG_CONSTEXPR const CString kFxMastering = "Fx|Mastering"; ///< Dither, Noise Shaping,... | ||||
| SMTG_CONSTEXPR const CString kFxModulation = "Fx|Modulation"; ///< Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... | SMTG_CONSTEXPR const CString kFxModulation = "Fx|Modulation"; ///< Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... | ||||
| SMTG_CONSTEXPR const CString kFxNetwork = "Fx|Network"; ///< using Network | |||||
| SMTG_CONSTEXPR const CString kFxPitchShift = "Fx|Pitch Shift"; ///< Pitch Processing, Pitch Correction, Vocal Tuning... | SMTG_CONSTEXPR const CString kFxPitchShift = "Fx|Pitch Shift"; ///< Pitch Processing, Pitch Correction, Vocal Tuning... | ||||
| SMTG_CONSTEXPR const CString kFxRestoration = "Fx|Restoration"; ///< Denoiser, Declicker,... | SMTG_CONSTEXPR const CString kFxRestoration = "Fx|Restoration"; ///< Denoiser, Declicker,... | ||||
| SMTG_CONSTEXPR const CString kFxReverb = "Fx|Reverb"; ///< Reverberation, Room Simulation, Convolution Reverb... | SMTG_CONSTEXPR const CString kFxReverb = "Fx|Reverb"; ///< Reverberation, Room Simulation, Convolution Reverb... | ||||
| SMTG_CONSTEXPR const CString kFxSpatial = "Fx|Spatial"; ///< MonoToStereo, StereoEnhancer,... | |||||
| SMTG_CONSTEXPR const CString kFxSurround = "Fx|Surround"; ///< dedicated to surround processing: LFE Splitter, Bass Manager... | SMTG_CONSTEXPR const CString kFxSurround = "Fx|Surround"; ///< dedicated to surround processing: LFE Splitter, Bass Manager... | ||||
| SMTG_CONSTEXPR const CString kFxTools = "Fx|Tools"; ///< Volume, Mixer, Tuner... | SMTG_CONSTEXPR const CString kFxTools = "Fx|Tools"; ///< Volume, Mixer, Tuner... | ||||
| SMTG_CONSTEXPR const CString kFxNetwork = "Fx|Network"; ///< using Network | |||||
| SMTG_CONSTEXPR const CString kFxVocals = "Fx|Vocals"; ///< Tools dedicated to vocals | |||||
| SMTG_CONSTEXPR const CString kInstrument = "Instrument"; ///< Effect used as instrument (sound generator), not as insert | SMTG_CONSTEXPR const CString kInstrument = "Instrument"; ///< Effect used as instrument (sound generator), not as insert | ||||
| SMTG_CONSTEXPR const CString kInstrumentDrum = "Instrument|Drum"; ///< Instrument for Drum sounds | SMTG_CONSTEXPR const CString kInstrumentDrum = "Instrument|Drum"; ///< Instrument for Drum sounds | ||||
| @@ -74,16 +75,15 @@ SMTG_CONSTEXPR const CString kInstrumentSampler = "Instrument|Sampler"; ///< In | |||||
| SMTG_CONSTEXPR const CString kInstrumentSynth = "Instrument|Synth"; ///< Instrument based on Synthesis | SMTG_CONSTEXPR const CString kInstrumentSynth = "Instrument|Synth"; ///< Instrument based on Synthesis | ||||
| SMTG_CONSTEXPR const CString kInstrumentSynthSampler = "Instrument|Synth|Sampler"; ///< Instrument based on Synthesis and Samples | SMTG_CONSTEXPR const CString kInstrumentSynthSampler = "Instrument|Synth|Sampler"; ///< Instrument based on Synthesis and Samples | ||||
| SMTG_CONSTEXPR const CString kAmbisonics = "Ambisonics"; ///< used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) | |||||
| SMTG_CONSTEXPR const CString kAnalyzer = "Analyzer"; ///< Meter, Scope, FFT-Display, not selectable as insert plug-in | |||||
| SMTG_CONSTEXPR const CString kNoOfflineProcess = "NoOfflineProcess"; ///< will be NOT used for plug-in offline processing (will work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kOnlyARA = "OnlyARA"; ///< used for plug-ins that require ARA to operate (will not work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kOnlyOfflineProcess = "OnlyOfflineProcess"; ///< used for plug-in offline processing (will not work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kOnlyRealTime = "OnlyRT"; ///< indicates that it supports only realtime process call, no processing faster than realtime | |||||
| SMTG_CONSTEXPR const CString kSpatial = "Spatial"; ///< used for SurroundPanner | SMTG_CONSTEXPR const CString kSpatial = "Spatial"; ///< used for SurroundPanner | ||||
| SMTG_CONSTEXPR const CString kSpatialFx = "Spatial|Fx"; ///< used for SurroundPanner and as insert effect | SMTG_CONSTEXPR const CString kSpatialFx = "Spatial|Fx"; ///< used for SurroundPanner and as insert effect | ||||
| SMTG_CONSTEXPR const CString kOnlyRealTime = "OnlyRT"; ///< indicates that it supports only realtime process call, no processing faster than realtime | |||||
| SMTG_CONSTEXPR const CString kOnlyOfflineProcess = "OnlyOfflineProcess"; ///< used for plug-in offline processing (will not work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kOnlyARA = "OnlyARA"; ///< used for plug-ins that require ARA to operate (will not work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kNoOfflineProcess = "NoOfflineProcess"; ///< will be NOT used for plug-in offline processing (will work as normal insert plug-in) | |||||
| SMTG_CONSTEXPR const CString kUpDownMix = "Up-Downmix"; ///< used for Mixconverter/Up-Mixer/Down-Mixer | SMTG_CONSTEXPR const CString kUpDownMix = "Up-Downmix"; ///< used for Mixconverter/Up-Mixer/Down-Mixer | ||||
| SMTG_CONSTEXPR const CString kAnalyzer = "Analyzer"; ///< Meter, Scope, FFT-Display, not selectable as insert plug-in | |||||
| SMTG_CONSTEXPR const CString kAmbisonics = "Ambisonics"; ///< used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) | |||||
| SMTG_CONSTEXPR const CString kMono = "Mono"; ///< used for Mono only plug-in [optional] | SMTG_CONSTEXPR const CString kMono = "Mono"; ///< used for Mono only plug-in [optional] | ||||
| SMTG_CONSTEXPR const CString kStereo = "Stereo"; ///< used for Stereo only plug-in [optional] | SMTG_CONSTEXPR const CString kStereo = "Stereo"; ///< used for Stereo only plug-in [optional] | ||||
| @@ -76,6 +76,15 @@ const Speaker kSpeakerACN12 = (Speaker)1 << 46; ///< Ambisonic ACN 12 | |||||
| const Speaker kSpeakerACN13 = (Speaker)1 << 47; ///< Ambisonic ACN 13 | const Speaker kSpeakerACN13 = (Speaker)1 << 47; ///< Ambisonic ACN 13 | ||||
| const Speaker kSpeakerACN14 = (Speaker)1 << 48; ///< Ambisonic ACN 14 | const Speaker kSpeakerACN14 = (Speaker)1 << 48; ///< Ambisonic ACN 14 | ||||
| const Speaker kSpeakerACN15 = (Speaker)1 << 49; ///< Ambisonic ACN 15 | const Speaker kSpeakerACN15 = (Speaker)1 << 49; ///< Ambisonic ACN 15 | ||||
| const Speaker kSpeakerACN16 = (Speaker)1 << 50; ///< Ambisonic ACN 16 | |||||
| const Speaker kSpeakerACN17 = (Speaker)1 << 51; ///< Ambisonic ACN 17 | |||||
| const Speaker kSpeakerACN18 = (Speaker)1 << 52; ///< Ambisonic ACN 18 | |||||
| const Speaker kSpeakerACN19 = (Speaker)1 << 53; ///< Ambisonic ACN 19 | |||||
| const Speaker kSpeakerACN20 = (Speaker)1 << 54; ///< Ambisonic ACN 20 | |||||
| const Speaker kSpeakerACN21 = (Speaker)1 << 55; ///< Ambisonic ACN 21 | |||||
| const Speaker kSpeakerACN22 = (Speaker)1 << 56; ///< Ambisonic ACN 22 | |||||
| const Speaker kSpeakerACN23 = (Speaker)1 << 57; ///< Ambisonic ACN 23 | |||||
| const Speaker kSpeakerACN24 = (Speaker)1 << 58; ///< Ambisonic ACN 24 | |||||
| const Speaker kSpeakerTsl = (Speaker)1 << 24; ///< Top Side Left (Tsl) | const Speaker kSpeakerTsl = (Speaker)1 << 24; ///< Top Side Left (Tsl) | ||||
| const Speaker kSpeakerTsr = (Speaker)1 << 25; ///< Top Side Right (Tsr) | const Speaker kSpeakerTsr = (Speaker)1 << 25; ///< Top Side Right (Tsr) | ||||
| @@ -103,6 +112,7 @@ namespace SpeakerArr | |||||
| { | { | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** Speaker Arrangement Definitions. | /** Speaker Arrangement Definitions. | ||||
| * for example: 5.0.5.3 for 5x Middle + 0x LFE + 5x Top + 3x Bottom | |||||
| \ingroup speakerArrangements */ | \ingroup speakerArrangements */ | ||||
| /*@{*/ | /*@{*/ | ||||
| const SpeakerArrangement kEmpty = 0; ///< empty arrangement | const SpeakerArrangement kEmpty = 0; ///< empty arrangement | ||||
| @@ -116,45 +126,46 @@ const SpeakerArrangement kStereoTF = kSpeakerTfl | kSpeakerTfr; ///< Tfl Tfr | |||||
| const SpeakerArrangement kStereoTS = kSpeakerTsl | kSpeakerTsr; ///< Tsl Tsr | const SpeakerArrangement kStereoTS = kSpeakerTsl | kSpeakerTsr; ///< Tsl Tsr | ||||
| const SpeakerArrangement kStereoTR = kSpeakerTrl | kSpeakerTrr; ///< Trl Trr | const SpeakerArrangement kStereoTR = kSpeakerTrl | kSpeakerTrr; ///< Trl Trr | ||||
| const SpeakerArrangement kStereoBF = kSpeakerBfl | kSpeakerBfr; ///< Bfl Bfr | const SpeakerArrangement kStereoBF = kSpeakerBfl | kSpeakerBfr; ///< Bfl Bfr | ||||
| const SpeakerArrangement kCineFront = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLc | kSpeakerRc; ///< L R C Lc Rc | |||||
| /** L R C Lc Rc */ | |||||
| const SpeakerArrangement kCineFront = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLc | kSpeakerRc; | |||||
| /** L R C */ | |||||
| /** L R C */ // 3.0 | |||||
| const SpeakerArrangement k30Cine = kSpeakerL | kSpeakerR | kSpeakerC; | const SpeakerArrangement k30Cine = kSpeakerL | kSpeakerR | kSpeakerC; | ||||
| /** L R C Lfe */ | |||||
| const SpeakerArrangement k31Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe; | |||||
| /** L R C Lfe */ // 3.1 | |||||
| const SpeakerArrangement k31Cine = k30Cine | kSpeakerLfe; | |||||
| /** L R S */ | /** L R S */ | ||||
| const SpeakerArrangement k30Music = kSpeakerL | kSpeakerR | kSpeakerCs; | const SpeakerArrangement k30Music = kSpeakerL | kSpeakerR | kSpeakerCs; | ||||
| /** L R Lfe S */ | /** L R Lfe S */ | ||||
| const SpeakerArrangement k31Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerCs; | |||||
| /** L R C S (LCRS) */ | |||||
| const SpeakerArrangement k31Music = k30Music | kSpeakerLfe; | |||||
| /** L R C S */ // LCRS | |||||
| const SpeakerArrangement k40Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerCs; | const SpeakerArrangement k40Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerCs; | ||||
| /** L R C Lfe S (LCRS+Lfe) */ | |||||
| const SpeakerArrangement k41Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerCs; | |||||
| /** L R Ls Rs (Quadro) */ | |||||
| /** L R C Lfe S */ // LCRS+Lfe | |||||
| const SpeakerArrangement k41Cine = k40Cine | kSpeakerLfe; | |||||
| /** L R Ls Rs */ // 4.0 (Quadro) | |||||
| const SpeakerArrangement k40Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs; | const SpeakerArrangement k40Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs; | ||||
| /** L R Lfe Ls Rs (Quadro+Lfe) */ | |||||
| const SpeakerArrangement k41Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs; | |||||
| /** L R Lfe Ls Rs */ // 4.1 (Quadro+Lfe) | |||||
| const SpeakerArrangement k41Music = k40Music | kSpeakerLfe; | |||||
| /** L R C Ls Rs */ // 5.0 (ITU 0+5+0.0 Sound System B) | /** L R C Ls Rs */ // 5.0 (ITU 0+5+0.0 Sound System B) | ||||
| const SpeakerArrangement k50 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs; | const SpeakerArrangement k50 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs; | ||||
| /** L R C Lfe Ls Rs */ // 5.1 (ITU 0+5+0.1 Sound System B) | /** L R C Lfe Ls Rs */ // 5.1 (ITU 0+5+0.1 Sound System B) | ||||
| const SpeakerArrangement k51 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs; | |||||
| const SpeakerArrangement k51 = k50 | kSpeakerLfe; | |||||
| /** L R C Ls Rs Cs */ | /** L R C Ls Rs Cs */ | ||||
| const SpeakerArrangement k60Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs; | const SpeakerArrangement k60Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs; | ||||
| /** L R C Lfe Ls Rs Cs */ | /** L R C Lfe Ls Rs Cs */ | ||||
| const SpeakerArrangement k61Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs; | |||||
| const SpeakerArrangement k61Cine = k60Cine | kSpeakerLfe; | |||||
| /** L R Ls Rs Sl Sr */ | /** L R Ls Rs Sl Sr */ | ||||
| const SpeakerArrangement k60Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | const SpeakerArrangement k60Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | ||||
| /** L R Lfe Ls Rs Sl Sr */ | /** L R Lfe Ls Rs Sl Sr */ | ||||
| const SpeakerArrangement k61Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | |||||
| const SpeakerArrangement k61Music = k60Music | kSpeakerLfe; | |||||
| /** L R C Ls Rs Lc Rc */ | /** L R C Ls Rs Lc Rc */ | ||||
| const SpeakerArrangement k70Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc; | const SpeakerArrangement k70Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc; | ||||
| /** L R C Lfe Ls Rs Lc Rc */ | /** L R C Lfe Ls Rs Lc Rc */ | ||||
| const SpeakerArrangement k71Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc; | |||||
| const SpeakerArrangement k71Cine = k70Cine | kSpeakerLfe; | |||||
| const SpeakerArrangement k71CineFullFront = k71Cine; | const SpeakerArrangement k71CineFullFront = k71Cine; | ||||
| /** L R C Ls Rs Sl Sr */ // (ITU 0+7+0.0 Sound System I) | /** L R C Ls Rs Sl Sr */ // (ITU 0+7+0.0 Sound System I) | ||||
| const SpeakerArrangement k70Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | const SpeakerArrangement k70Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | ||||
| /** L R C Lfe Ls Rs Sl Sr */ // (ITU 0+7+0.1 Sound System I) | /** L R C Lfe Ls Rs Sl Sr */ // (ITU 0+7+0.1 Sound System I) | ||||
| const SpeakerArrangement k71Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr; | |||||
| const SpeakerArrangement k71Music = k70Music | kSpeakerLfe; | |||||
| /** L R C Lfe Ls Rs Lcs Rcs */ | /** L R C Lfe Ls Rs Lcs Rcs */ | ||||
| const SpeakerArrangement k71CineFullRear = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLcs | kSpeakerRcs; | const SpeakerArrangement k71CineFullRear = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLcs | kSpeakerRcs; | ||||
| @@ -165,31 +176,37 @@ const SpeakerArrangement k71Proximity = kSpeakerL | kSpeakerR | kSpeakerC | | |||||
| /** L R C Ls Rs Lc Rc Cs */ | /** L R C Ls Rs Lc Rc Cs */ | ||||
| const SpeakerArrangement k80Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs; | const SpeakerArrangement k80Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs; | ||||
| /** L R C Lfe Ls Rs Lc Rc Cs */ | /** L R C Lfe Ls Rs Lc Rc Cs */ | ||||
| const SpeakerArrangement k81Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs; | |||||
| const SpeakerArrangement k81Cine = k80Cine | kSpeakerLfe; | |||||
| /** L R C Ls Rs Cs Sl Sr */ | /** L R C Ls Rs Cs Sl Sr */ | ||||
| const SpeakerArrangement k80Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr; | const SpeakerArrangement k80Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr; | ||||
| /** L R C Lfe Ls Rs Cs Sl Sr */ | /** L R C Lfe Ls Rs Cs Sl Sr */ | ||||
| const SpeakerArrangement k81Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr; | |||||
| const SpeakerArrangement k81Music = k80Music | kSpeakerLfe; | |||||
| /** L R C Ls Rs Lc Rc Sl Sr */ | /** L R C Ls Rs Lc Rc Sl Sr */ | ||||
| const SpeakerArrangement k90Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | | const SpeakerArrangement k90Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | | ||||
| kSpeakerSl | kSpeakerSr; | kSpeakerSl | kSpeakerSr; | ||||
| /** L R C Lfe Ls Rs Lc Rc Sl Sr */ | /** L R C Lfe Ls Rs Lc Rc Sl Sr */ | ||||
| const SpeakerArrangement k91Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | | |||||
| kSpeakerSl | kSpeakerSr; | |||||
| const SpeakerArrangement k91Cine = k90Cine | kSpeakerLfe; | |||||
| /** L R C Ls Rs Lc Rc Cs Sl Sr */ | /** L R C Ls Rs Lc Rc Cs Sl Sr */ | ||||
| const SpeakerArrangement k100Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | | const SpeakerArrangement k100Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | | ||||
| kSpeakerSl | kSpeakerSr; | kSpeakerSl | kSpeakerSr; | ||||
| /** L R C Lfe Ls Rs Lc Rc Cs Sl Sr */ | /** L R C Lfe Ls Rs Lc Rc Cs Sl Sr */ | ||||
| const SpeakerArrangement k101Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | | |||||
| kSpeakerSl | kSpeakerSr; | |||||
| const SpeakerArrangement k101Cine = k100Cine | kSpeakerLfe; | |||||
| /** First-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */ | |||||
| /** First-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (4 channels) */ | |||||
| const SpeakerArrangement kAmbi1stOrderACN = kSpeakerACN0 | kSpeakerACN1 | kSpeakerACN2 | kSpeakerACN3; | const SpeakerArrangement kAmbi1stOrderACN = kSpeakerACN0 | kSpeakerACN1 | kSpeakerACN2 | kSpeakerACN3; | ||||
| /** Second-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */ | |||||
| /** Second-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (9 channels) */ | |||||
| const SpeakerArrangement kAmbi2cdOrderACN = kAmbi1stOrderACN | kSpeakerACN4 | kSpeakerACN5 | kSpeakerACN6 | kSpeakerACN7 | kSpeakerACN8; | const SpeakerArrangement kAmbi2cdOrderACN = kAmbi1stOrderACN | kSpeakerACN4 | kSpeakerACN5 | kSpeakerACN6 | kSpeakerACN7 | kSpeakerACN8; | ||||
| /** Third-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */ | |||||
| /** Third-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (16 channels) */ | |||||
| const SpeakerArrangement kAmbi3rdOrderACN = kAmbi2cdOrderACN | kSpeakerACN9 | kSpeakerACN10 | kSpeakerACN11 | kSpeakerACN12 | kSpeakerACN13 | kSpeakerACN14 | kSpeakerACN15; | const SpeakerArrangement kAmbi3rdOrderACN = kAmbi2cdOrderACN | kSpeakerACN9 | kSpeakerACN10 | kSpeakerACN11 | kSpeakerACN12 | kSpeakerACN13 | kSpeakerACN14 | kSpeakerACN15; | ||||
| /** Fourth-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (25 channels) */ | |||||
| const SpeakerArrangement kAmbi4thOrderACN = kAmbi3rdOrderACN | kSpeakerACN16 | kSpeakerACN17 | kSpeakerACN18 | kSpeakerACN19 | kSpeakerACN20 | | |||||
| kSpeakerACN21 | kSpeakerACN22 | kSpeakerACN23 | kSpeakerACN24; | |||||
| /** Fifth-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (36 channels) */ | |||||
| const SpeakerArrangement kAmbi5thOrderACN = 0x000FFFFFFFFF; | |||||
| /** Sixth-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (49 channels) */ | |||||
| const SpeakerArrangement kAmbi6thOrderACN = 0x0001FFFFFFFFFFFF; | |||||
| /** Seventh-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization (64 channels) */ | |||||
| const SpeakerArrangement kAmbi7thOrderACN = 0xFFFFFFFFFFFFFFFF; | |||||
| /*-----------*/ | /*-----------*/ | ||||
| /* 3D formats */ | /* 3D formats */ | ||||
| @@ -210,12 +227,17 @@ const SpeakerArrangement k70MPEG3D = k70CineFrontHigh; | |||||
| const SpeakerArrangement k50_2 = k70CineFrontHigh; | const SpeakerArrangement k50_2 = k70CineFrontHigh; | ||||
| /** L R C Lfe Ls Rs Tfl Tfr */ // 5.1.2 (ITU 2+5+0.1 Sound System C) | /** L R C Lfe Ls Rs Tfl Tfr */ // 5.1.2 (ITU 2+5+0.1 Sound System C) | ||||
| const SpeakerArrangement k71CineFrontHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr; | |||||
| const SpeakerArrangement k71CineFrontHigh = k70CineFrontHigh | kSpeakerLfe; | |||||
| const SpeakerArrangement k71MPEG3D = k71CineFrontHigh; | const SpeakerArrangement k71MPEG3D = k71CineFrontHigh; | ||||
| const SpeakerArrangement k51_2 = k71CineFrontHigh; | const SpeakerArrangement k51_2 = k71CineFrontHigh; | ||||
| /** L R C Ls Rs Tsl Tsr */ // 5.0.2 (Side) | |||||
| const SpeakerArrangement k70CineSideHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr; | |||||
| const SpeakerArrangement k50_2_TS = k70CineSideHigh; | |||||
| /** L R C Lfe Ls Rs Tsl Tsr */ // 5.1.2 (Side) | /** L R C Lfe Ls Rs Tsl Tsr */ // 5.1.2 (Side) | ||||
| const SpeakerArrangement k71CineSideHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr; | |||||
| const SpeakerArrangement k71CineSideHigh = k70CineSideHigh | kSpeakerLfe; | |||||
| const SpeakerArrangement k51_2_TS = k71CineSideHigh; | |||||
| /** L R Lfe Ls Rs Tfl Tfc Tfr Bfc */ // 4.1.3.1 | /** L R Lfe Ls Rs Tfl Tfc Tfr Bfc */ // 4.1.3.1 | ||||
| const SpeakerArrangement k81MPEG3D = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | const SpeakerArrangement k81MPEG3D = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | ||||
| @@ -228,25 +250,21 @@ const SpeakerArrangement k90 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerL | |||||
| const SpeakerArrangement k50_4 = k90; | const SpeakerArrangement k50_4 = k90; | ||||
| /** L R C Lfe Ls Rs Tfl Tfr Trl Trr */ // 5.1.4 (ITU 4+5+0.1 Sound System D) | /** L R C Lfe Ls Rs Tfl Tfr Trl Trr */ // 5.1.4 (ITU 4+5+0.1 Sound System D) | ||||
| const SpeakerArrangement k91 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl| kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| const SpeakerArrangement k91 = k90 | kSpeakerLfe; | |||||
| const SpeakerArrangement k51_4 = k91; | const SpeakerArrangement k51_4 = k91; | ||||
| /** L R C Ls Rs Tfl Tfr Trl Trr Bfc */ // 5.0.4.1 (ITU 4+5+1.0 Sound System E) | /** L R C Ls Rs Tfl Tfr Trl Trr Bfc */ // 5.0.4.1 (ITU 4+5+1.0 Sound System E) | ||||
| const SpeakerArrangement k50_4_1 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfc; | |||||
| const SpeakerArrangement k50_4_1 = k50_4 | kSpeakerBfc; | |||||
| /** L R C Lfe Ls Rs Tfl Tfr Trl Trr Bfc */ // 5.1.4.1 (ITU 4+5+1.1 Sound System E) | |||||
| const SpeakerArrangement k51_4_1 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfc; | |||||
| /** L R C Lfe Ls Rs Tfl Tfr Trl Trr Bfc */ // 5.1.4.1 (ITU 4+5+1.1 Sound System E) | |||||
| const SpeakerArrangement k51_4_1 = k50_4_1 | kSpeakerLfe; | |||||
| /** L R C Ls Rs Sl Sr Tsl Tsr */ // 7.0.2 | /** L R C Ls Rs Sl Sr Tsl Tsr */ // 7.0.2 | ||||
| const SpeakerArrangement k70_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | const SpeakerArrangement k70_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | ||||
| kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr; | kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr; | ||||
| /** L R C Lfe Ls Rs Sl Sr Tsl Tsr */ // 7.1.2 | /** L R C Lfe Ls Rs Sl Sr Tsl Tsr */ // 7.1.2 | ||||
| const SpeakerArrangement k71_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr; | |||||
| const SpeakerArrangement k71_2 = k70_2 | kSpeakerLfe; | |||||
| const SpeakerArrangement k91Atmos = k71_2; // 9.1 Dolby Atmos (3D) | const SpeakerArrangement k91Atmos = k71_2; // 9.1 Dolby Atmos (3D) | ||||
| /** L R C Ls Rs Sl Sr Tfl Tfr Trc */ // 7.0.3 (ITU 3+7+0.0 Sound System F) | /** L R C Ls Rs Sl Sr Tfl Tfr Trc */ // 7.0.3 (ITU 3+7+0.0 Sound System F) | ||||
| @@ -254,16 +272,14 @@ const SpeakerArrangement k70_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeake | |||||
| kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc; | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc; | ||||
| /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trc Lfe2 */ // 7.2.3 (ITU 3+7+0.2 Sound System F) | /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trc Lfe2 */ // 7.2.3 (ITU 3+7+0.2 Sound System F) | ||||
| const SpeakerArrangement k72_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc | kSpeakerLfe2; | |||||
| const SpeakerArrangement k72_3 = k70_3 | kSpeakerLfe | kSpeakerLfe2; | |||||
| /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.0.4 (ITU 4+7+0.0 Sound System J) | /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.0.4 (ITU 4+7+0.0 Sound System J) | ||||
| const SpeakerArrangement k70_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | const SpeakerArrangement k70_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | ||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | ||||
| /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.1.4 (ITU 4+7+0.1 Sound System J) | /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.1.4 (ITU 4+7+0.1 Sound System J) | ||||
| const SpeakerArrangement k71_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| const SpeakerArrangement k71_4 = k70_4 | kSpeakerLfe; | |||||
| const SpeakerArrangement k111MPEG3D = k71_4; | const SpeakerArrangement k111MPEG3D = k71_4; | ||||
| /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 7.0.6 | /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 7.0.6 | ||||
| @@ -272,9 +288,7 @@ const SpeakerArrangement k70_6 = kSpeakerL | kSpeakerR | kSpeakerC | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | ||||
| /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 7.1.6 | /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 7.1.6 | ||||
| const SpeakerArrangement k71_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | | |||||
| kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | |||||
| const SpeakerArrangement k71_6 = k70_6 | kSpeakerLfe; | |||||
| /** L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr */ // 9.0.4 (ITU 4+9+0.0 Sound System G) | /** L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr */ // 9.0.4 (ITU 4+9+0.0 Sound System G) | ||||
| const SpeakerArrangement k90_4 = kSpeakerL | kSpeakerR | kSpeakerC | | const SpeakerArrangement k90_4 = kSpeakerL | kSpeakerR | kSpeakerC | | ||||
| @@ -282,9 +296,7 @@ const SpeakerArrangement k90_4 = kSpeakerL | kSpeakerR | kSpeakerC | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | ||||
| /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr */ // 9.1.4 (ITU 4+9+0.1 Sound System G) | /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr */ // 9.1.4 (ITU 4+9+0.1 Sound System G) | ||||
| const SpeakerArrangement k91_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | | |||||
| kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| const SpeakerArrangement k91_4 = k90_4 | kSpeakerLfe; | |||||
| /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 9.0.6 | /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 9.0.6 | ||||
| const SpeakerArrangement k90_6 = kSpeakerL | kSpeakerR | kSpeakerC | | const SpeakerArrangement k90_6 = kSpeakerL | kSpeakerR | kSpeakerC | | ||||
| @@ -292,18 +304,15 @@ const SpeakerArrangement k90_6 = kSpeakerL | kSpeakerR | kSpeakerC | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | ||||
| /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 9.1.6 | /** L R C Lfe Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr */ // 9.1.6 | ||||
| const SpeakerArrangement k91_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | | |||||
| kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr; | |||||
| const SpeakerArrangement k91_6 = k90_6 | kSpeakerLfe; | |||||
| /** L R C Ls Rs Tc Tfl Tfr Trl Trr */ // 5.0.5 | |||||
| /** L R C Ls Rs Tc Tfl Tfr Trl Trr */ // 5.0.5 (10.0 Auro-3D) | |||||
| const SpeakerArrangement k100 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | const SpeakerArrangement k100 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | ||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | ||||
| const SpeakerArrangement k50_5 = k100; | const SpeakerArrangement k50_5 = k100; | ||||
| /** L R C Lfe Ls Rs Tc Tfl Tfr Trl Trr */ // 5.1.5 | |||||
| const SpeakerArrangement k101 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| /** L R C Lfe Ls Rs Tc Tfl Tfr Trl Trr */ // 5.1.5 (10.1 Auro-3D) | |||||
| const SpeakerArrangement k101 = k50_5 | kSpeakerLfe; | |||||
| const SpeakerArrangement k101MPEG3D = k101; | const SpeakerArrangement k101MPEG3D = k101; | ||||
| const SpeakerArrangement k51_5 = k101; | const SpeakerArrangement k51_5 = k101; | ||||
| @@ -312,14 +321,13 @@ const SpeakerArrangement k102 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeake | |||||
| kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2; | kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2; | ||||
| const SpeakerArrangement k52_5 = k102; | const SpeakerArrangement k52_5 = k102; | ||||
| /** L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr */ // 5.0.6 | |||||
| /** L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr */ // 5.0.6 (11.0 Auro-3D) | |||||
| const SpeakerArrangement k110 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | const SpeakerArrangement k110 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | ||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | ||||
| const SpeakerArrangement k50_6 = k110; | const SpeakerArrangement k50_6 = k110; | ||||
| /** L R C Lfe Ls Rs Tc Tfl Tfc Tfr Trl Trr */ // 5.1.6 | |||||
| const SpeakerArrangement k111 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| /** L R C Lfe Ls Rs Tc Tfl Tfc Tfr Trl Trr */ // 5.1.6 (11.1 Auro-3D) | |||||
| const SpeakerArrangement k111 = k110 | kSpeakerLfe; | |||||
| const SpeakerArrangement k51_6 = k111; | const SpeakerArrangement k51_6 = k111; | ||||
| /** L R C Lfe Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr Lfe2 */ // 7.2.5 | /** L R C Lfe Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr Lfe2 */ // 7.2.5 | ||||
| @@ -327,13 +335,12 @@ const SpeakerArrangement k122 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeake | |||||
| kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2; | kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2; | ||||
| const SpeakerArrangement k72_5 = k122; | const SpeakerArrangement k72_5 = k122; | ||||
| /** L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */ // 7.0.6 | |||||
| /** L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */ // 7.0.6 (13.0 Auro-3D) | |||||
| const SpeakerArrangement k130 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | const SpeakerArrangement k130 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | ||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | ||||
| /** L R C Lfe Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */ // 7.1.6 | |||||
| const SpeakerArrangement k131 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| /** L R C Lfe Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */ // 7.1.6 (13.1 Auro-3D) | |||||
| const SpeakerArrangement k131 = k130 | kSpeakerLfe; | |||||
| /** L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr */ // 6.0.4.4 | /** L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr */ // 6.0.4.4 | ||||
| const SpeakerArrangement k140 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | const SpeakerArrangement k140 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | ||||
| @@ -354,13 +361,61 @@ const SpeakerArrangement k222 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeake | |||||
| const SpeakerArrangement k102_9_3 = k222; | const SpeakerArrangement k102_9_3 = k222; | ||||
| /** L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr */ // 5.0.5.3 | /** L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr */ // 5.0.5.3 | ||||
| const SpeakerArrangement k50_5_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| const SpeakerArrangement k50_5_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfc | kSpeakerBfr; | kSpeakerBfl | kSpeakerBfc | kSpeakerBfr; | ||||
| /** L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr */ // 5.1.5.3 | /** L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr */ // 5.1.5.3 | ||||
| const SpeakerArrangement k51_5_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfc | kSpeakerBfr; | |||||
| const SpeakerArrangement k51_5_3 = k50_5_3 | kSpeakerLfe; | |||||
| /** L R C Ls Rs Tsl Tsr Bfl Bfr */ // 5.0.2.2 | |||||
| const SpeakerArrangement k50_2_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTsl | kSpeakerTsr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr */ // 5.0.4.2 | |||||
| const SpeakerArrangement k50_4_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr */ // 7.0.4.2 | |||||
| const SpeakerArrangement k70_4_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R C Ls Rs Tfl Tfc Tfr Trl Trr */ // 5.0.5.0 (Sony 360RA) | |||||
| const SpeakerArrangement k50_5_Sony = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; | |||||
| /** C Sl Sr Cs Tsl Tsr Bsl Bsr */ // 4.0.2.2 (Sony 360RA) | |||||
| const SpeakerArrangement k40_2_2 = kSpeakerC | kSpeakerSl | kSpeakerSr | kSpeakerCs | | |||||
| kSpeakerTsl | kSpeakerTsr | | |||||
| kSpeakerBsl | kSpeakerBsr; | |||||
| /** L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr */ // 4.0.4.2 (Sony 360RA) | |||||
| const SpeakerArrangement k40_4_2 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R C Ls Rs Tfl Tfc Tfr Bfl Bfr */ // 5.0.3.2 (Sony 360RA) | |||||
| const SpeakerArrangement k50_3_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R C Tfl Tfc Tfr Trl Trr Bfl Bfr */ // 3.0.5.2 (Sony 360RA) | |||||
| const SpeakerArrangement k30_5_2 = kSpeakerL | kSpeakerR | kSpeakerC | | |||||
| kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr; | |||||
| /** L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr */ // 4.0.4.4 (Sony 360RA) | |||||
| const SpeakerArrangement k40_4_4 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr; | |||||
| /** L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr */ // 5.0.4.4 (Sony 360RA) | |||||
| const SpeakerArrangement k50_4_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | | |||||
| kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | | |||||
| kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr; | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** Speaker Arrangement String Representation. | /** Speaker Arrangement String Representation. | ||||
| @@ -403,22 +458,23 @@ const CString kString71Music = "7.1"; | |||||
| const CString kString71MusicOld = "7.1 Music (Dolby)"; | const CString kString71MusicOld = "7.1 Music (Dolby)"; | ||||
| const CString kString71CineTopCenter = "7.1 Cine Top Center"; | const CString kString71CineTopCenter = "7.1 Cine Top Center"; | ||||
| const CString kString71CineCenterHigh = "7.1 Cine Center High"; | const CString kString71CineCenterHigh = "7.1 Cine Center High"; | ||||
| const CString kString71CineFrontHigh = "7.1 Cine Front High"; | |||||
| const CString kString70CineFrontHigh = "7.0 Cine Front High"; | |||||
| const CString kString71CineSideHigh = "7.1 Cine Side High"; | |||||
| const CString kString71CineFullRear = "7.1 Cine Full Rear"; | |||||
| const CString kString71Proximity = "7.1 Proximity"; | |||||
| const CString kString71CineFullRear = "7.1 Cine Full Rear"; | |||||
| const CString kString51_2 = "5.1.2"; | |||||
| const CString kString50_2 = "5.0.2"; | |||||
| const CString kString50_2TopSide = "5.0.2 Top Side"; | |||||
| const CString kString51_2TopSide = "5.1.2 Top Side"; | |||||
| const CString kString71Proximity = "7.1 Proximity"; | |||||
| const CString kString80Cine = "8.0 Cine"; | const CString kString80Cine = "8.0 Cine"; | ||||
| const CString kString80Music = "8.0 Music"; | const CString kString80Music = "8.0 Music"; | ||||
| const CString kString80Cube = "8.0 Cube"; | |||||
| const CString kString40_4 = "8.0 Cube"; | |||||
| const CString kString81Cine = "8.1 Cine"; | const CString kString81Cine = "8.1 Cine"; | ||||
| const CString kString81Music = "8.1 Music"; | const CString kString81Music = "8.1 Music"; | ||||
| const CString kString90Cine = "9.0 Cine"; | const CString kString90Cine = "9.0 Cine"; | ||||
| const CString kString91Cine = "9.1 Cine"; | const CString kString91Cine = "9.1 Cine"; | ||||
| const CString kString100Cine = "10.0 Cine"; | const CString kString100Cine = "10.0 Cine"; | ||||
| const CString kString101Cine = "10.1 Cine"; | const CString kString101Cine = "10.1 Cine"; | ||||
| const CString kString102 = "10.2 Experimental"; | |||||
| const CString kString122 = "12.2"; | |||||
| const CString kString52_5 = "5.2.5"; | |||||
| const CString kString72_5 = "12.2"; | |||||
| const CString kString50_4 = "5.0.4"; | const CString kString50_4 = "5.0.4"; | ||||
| const CString kString51_4 = "5.1.4"; | const CString kString51_4 = "5.1.4"; | ||||
| const CString kString50_4_1 = "5.0.4.1"; | const CString kString50_4_1 = "5.0.4.1"; | ||||
| @@ -435,22 +491,36 @@ const CString kString90_4 = "9.0.4"; | |||||
| const CString kString91_4 = "9.1.4"; | const CString kString91_4 = "9.1.4"; | ||||
| const CString kString90_6 = "9.0.6"; | const CString kString90_6 = "9.0.6"; | ||||
| const CString kString91_6 = "9.1.6"; | const CString kString91_6 = "9.1.6"; | ||||
| const CString kString100 = "10.0 Auro-3D"; | |||||
| const CString kString101 = "10.1 Auro-3D"; | |||||
| const CString kString110 = "11.0 Auro-3D"; | |||||
| const CString kString111 = "11.1 Auro-3D"; | |||||
| const CString kString50_5 = "10.0 Auro-3D"; | |||||
| const CString kString51_5 = "10.1 Auro-3D"; | |||||
| const CString kString50_6 = "11.0 Auro-3D"; | |||||
| const CString kString51_6 = "11.1 Auro-3D"; | |||||
| const CString kString130 = "13.0 Auro-3D"; | const CString kString130 = "13.0 Auro-3D"; | ||||
| const CString kString131 = "13.1 Auro-3D"; | const CString kString131 = "13.1 Auro-3D"; | ||||
| const CString kString81MPEG = "8.1 MPEG"; | |||||
| const CString kString140 = "14.0"; | |||||
| const CString kString41_4_1 = "8.1 MPEG"; | |||||
| const CString kString60_4_4 = "14.0"; | |||||
| const CString kString220 = "22.0"; | |||||
| const CString kString222 = "22.2"; | const CString kString222 = "22.2"; | ||||
| const CString kString220 = "22.0"; | |||||
| const CString kString50_5_3 = "5.0.5.3"; | const CString kString50_5_3 = "5.0.5.3"; | ||||
| const CString kString51_5_3 = "5.1.5.3"; | const CString kString51_5_3 = "5.1.5.3"; | ||||
| const CString kString50_2_2 = "5.0.2.2"; | |||||
| const CString kString50_4_2 = "5.0.4.2"; | |||||
| const CString kString70_4_2 = "7.0.4.2"; | |||||
| const CString kString50_5_Sony = "5.0.5 Sony"; | |||||
| const CString kString40_2_2 = "4.0.3.2"; | |||||
| const CString kString40_4_2 = "4.0.4.2"; | |||||
| const CString kString50_3_2 = "5.0.3.2"; | |||||
| const CString kString30_5_2 = "3.0.5.2"; | |||||
| const CString kString40_4_4 = "4.0.4.4"; | |||||
| const CString kString50_4_4 = "5.0.4.4"; | |||||
| const CString kStringAmbi1stOrder = "1st Order Ambisonics"; | const CString kStringAmbi1stOrder = "1st Order Ambisonics"; | ||||
| const CString kStringAmbi2cdOrder = "2nd Order Ambisonics"; | const CString kStringAmbi2cdOrder = "2nd Order Ambisonics"; | ||||
| const CString kStringAmbi3rdOrder = "3rd Order Ambisonics"; | const CString kStringAmbi3rdOrder = "3rd Order Ambisonics"; | ||||
| const CString kStringAmbi4thOrder = "4th Order Ambisonics"; | |||||
| const CString kStringAmbi5thOrder = "5th Order Ambisonics"; | |||||
| const CString kStringAmbi6thOrder = "6th Order Ambisonics"; | |||||
| const CString kStringAmbi7thOrder = "7th Order Ambisonics"; | |||||
| /*@}*/ | /*@}*/ | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -490,14 +560,15 @@ const CString kString80CineS = "L R C Ls Rs Lc Rc Cs"; | |||||
| const CString kString80MusicS = "L R C Ls Rs Cs Sl Sr"; | const CString kString80MusicS = "L R C Ls Rs Cs Sl Sr"; | ||||
| const CString kString81CineS = "L R C LFE Ls Rs Lc Rc Cs"; | const CString kString81CineS = "L R C LFE Ls Rs Lc Rc Cs"; | ||||
| const CString kString81MusicS = "L R C LFE Ls Rs Cs Sl Sr"; | const CString kString81MusicS = "L R C LFE Ls Rs Cs Sl Sr"; | ||||
| const CString kString80CubeS = "L R Ls Rs Tfl Tfr Trl Trr"; | |||||
| const CString kString40_4S = "L R Ls Rs Tfl Tfr Trl Trr"; | |||||
| const CString kString71CineTopCenterS = "L R C LFE Ls Rs Cs Tc"; | const CString kString71CineTopCenterS = "L R C LFE Ls Rs Cs Tc"; | ||||
| const CString kString71CineCenterHighS = "L R C LFE Ls Rs Cs Tfc"; | const CString kString71CineCenterHighS = "L R C LFE Ls Rs Cs Tfc"; | ||||
| const CString kString71CineFrontHighS = "L R C LFE Ls Rs Tfl Tfr"; | |||||
| const CString kString70CineFrontHighS = "L R C Ls Rs Tfl Tfr"; | |||||
| const CString kString71CineSideHighS = "L R C LFE Ls Rs Tsl Tsr"; | |||||
| const CString kString71CineFullRearS = "L R C LFE Ls Rs Lcs Rcs"; | |||||
| const CString kString71ProximityS = "L R C LFE Ls Rs Pl Pr"; | |||||
| const CString kString71CineFullRearS = "L R C LFE Ls Rs Lcs Rcs"; | |||||
| const CString kString50_2S = "L R C Ls Rs Tfl Tfr"; | |||||
| const CString kString51_2S = "L R C LFE Ls Rs Tfl Tfr"; | |||||
| const CString kString50_2TopSideS = "L R C Ls Rs Tsl Tsr"; | |||||
| const CString kString51_2TopSideS = "L R C LFE Ls Rs Tsl Tsr"; | |||||
| const CString kString71ProximityS = "L R C LFE Ls Rs Pl Pr"; | |||||
| const CString kString90CineS = "L R C Ls Rs Lc Rc Sl Sr"; | const CString kString90CineS = "L R C Ls Rs Lc Rc Sl Sr"; | ||||
| const CString kString91CineS = "L R C LFE Ls Rs Lc Rc Sl Sr"; | const CString kString91CineS = "L R C LFE Ls Rs Lc Rc Sl Sr"; | ||||
| const CString kString100CineS = "L R C Ls Rs Lc Rc Cs Sl Sr"; | const CString kString100CineS = "L R C Ls Rs Lc Rc Cs Sl Sr"; | ||||
| @@ -518,24 +589,38 @@ const CString kString90_4S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; | |||||
| const CString kString91_4S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; | const CString kString91_4S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; | ||||
| const CString kString90_6S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; | const CString kString90_6S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; | ||||
| const CString kString91_6S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; | const CString kString91_6S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; | ||||
| const CString kString100S = "L R C Ls Rs Tc Tfl Tfr Trl Trr"; | |||||
| const CString kString101S = "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr"; | |||||
| const CString kString110S = "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr"; | |||||
| const CString kString111S = "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr"; | |||||
| const CString kString50_5S = "L R C Ls Rs Tc Tfl Tfr Trl Trr"; | |||||
| const CString kString51_5S = "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr"; | |||||
| const CString kString50_5_SonyS = "L R C Ls Rs Tfl Tfc Tfr Trl Trr"; | |||||
| const CString kString50_6S = "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr"; | |||||
| const CString kString51_6S = "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr"; | |||||
| const CString kString130S = "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; | const CString kString130S = "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; | ||||
| const CString kString131S = "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; | const CString kString131S = "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; | ||||
| const CString kString102S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2"; | |||||
| const CString kString122S = "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2"; | |||||
| const CString kString81MPEGS = "L R LFE Ls Rs Tfl Tfc Tfr Bfc"; | |||||
| const CString kString140S = "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; | |||||
| const CString kString222S = "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr"; | |||||
| const CString kString220S = "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr"; | |||||
| const CString kString52_5S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2"; | |||||
| const CString kString72_5S = "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2"; | |||||
| const CString kString41_4_1S = "L R LFE Ls Rs Tfl Tfc Tfr Bfc"; | |||||
| const CString kString30_5_2S = "L R C Tfl Tfc Tfr Trl Trr Bfl Bfr"; | |||||
| const CString kString40_2_2S = "C Sl Sr Cs Tfc Tsl Tsr Trc"; | |||||
| const CString kString40_4_2S = "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr"; | |||||
| const CString kString40_4_4S = "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; | |||||
| const CString kString50_4_4S = "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; | |||||
| const CString kString60_4_4S = "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; | |||||
| const CString kString50_5_3S = "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; | const CString kString50_5_3S = "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; | ||||
| const CString kString51_5_3S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; | const CString kString51_5_3S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; | ||||
| const CString kStringAmbi1stOrderS = "0 1 2 3"; | |||||
| const CString kStringAmbi2cdOrderS = "0 1 2 3 4 5 6 7 8"; | |||||
| const CString kStringAmbi3rdOrderS = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"; | |||||
| const CString kString50_2_2S = "L R C Ls Rs Tsl Tsr Bfl Bfr"; | |||||
| const CString kString50_3_2S = "L R C Ls Rs Tfl Tfc Tfr Bfl Bfr"; | |||||
| const CString kString50_4_2S = "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr"; | |||||
| const CString kString70_4_2S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr"; | |||||
| const CString kString222S = "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr"; | |||||
| const CString kString220S = "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr"; | |||||
| const CString kStringAmbi1stOrderS = "0 1 2 3"; | |||||
| const CString kStringAmbi2cdOrderS = "0 1 2 3 4 5 6 7 8"; | |||||
| const CString kStringAmbi3rdOrderS = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"; | |||||
| const CString kStringAmbi4thOrderS = "0..24"; | |||||
| const CString kStringAmbi5thOrderS = "0..35"; | |||||
| const CString kStringAmbi6thOrderS = "0..48"; | |||||
| const CString kStringAmbi7thOrderS = "0..63"; | |||||
| /*@}*/ | /*@}*/ | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -631,8 +716,9 @@ inline bool hasTopSpeakers (const SpeakerArrangement& arr) | |||||
| /** Returns true if arrangement contains bottom (lower layer) speakers */ | /** Returns true if arrangement contains bottom (lower layer) speakers */ | ||||
| inline bool hasBottomSpeakers (const SpeakerArrangement& arr) | inline bool hasBottomSpeakers (const SpeakerArrangement& arr) | ||||
| { | { | ||||
| if (arr & kSpeakerBfl || arr & kSpeakerBfc || arr & kSpeakerBfl || arr & kSpeakerBfc || | |||||
| arr & kSpeakerBfr) | |||||
| if (arr & kSpeakerBfl || arr & kSpeakerBfc || arr & kSpeakerBfr || | |||||
| arr & kSpeakerBsl || arr & kSpeakerBsr || | |||||
| arr & kSpeakerBrr || arr & kSpeakerBrl || arr & kSpeakerBrc) | |||||
| return true; | return true; | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -672,16 +758,39 @@ inline bool is3D (const SpeakerArrangement& arr) | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** Returns true if arrangement is a Auro configuration. */ | |||||
| /** Returns true if arrangement is a Ambisonic configuration. */ | |||||
| inline bool isAmbisonics (const SpeakerArrangement& arr) | inline bool isAmbisonics (const SpeakerArrangement& arr) | ||||
| { | { | ||||
| if (arr == kAmbi1stOrderACN || arr == kAmbi2cdOrderACN || arr == kAmbi3rdOrderACN) | |||||
| if (arr == kAmbi1stOrderACN || arr == kAmbi2cdOrderACN || arr == kAmbi3rdOrderACN || | |||||
| arr == kAmbi4thOrderACN || arr == kAmbi5thOrderACN || arr == kAmbi6thOrderACN || | |||||
| arr == kAmbi7thOrderACN) | |||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| /** Converts a speaker of a Ambisonic order 1 to 4 to a Ambisonic order 7 (5 to 7) (return 0 when out of range).*/ | |||||
| inline Speaker convertSpeaker_Ambi_1234Order_to_Ambi567Order (Speaker speaker_1234_order) | |||||
| { | |||||
| int32 idx = getSpeakerIndex (speaker_1234_order, kAmbi4thOrderACN); | |||||
| if (idx < 0) | |||||
| return 0; | |||||
| return (Speaker)1 << idx; | |||||
| } | |||||
| //------------------------------------------------------------------------ | |||||
| /** Converts a speaker of a Ambisonic order 5 to 7 to a Ambisonic order 4 (1 to 4) (return 0 when out of range).*/ | |||||
| inline Speaker convertSpeaker_Ambi_567Order_to_Ambi1234Order (Speaker speaker_567_order) | |||||
| { | |||||
| int32 idx = getSpeakerIndex (speaker_567_order, kAmbi7thOrderACN); | |||||
| if (idx < 0) | |||||
| return 0; | |||||
| return getSpeaker (kAmbi4thOrderACN, idx); | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** Returns the speaker arrangement associated to a string representation. | /** Returns the speaker arrangement associated to a string representation. | ||||
| Returns kEmpty if no associated arrangement is known. */ | Returns kEmpty if no associated arrangement is known. */ | ||||
| @@ -755,22 +864,24 @@ inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr) | |||||
| return k81Cine; | return k81Cine; | ||||
| if (!strcmp8 (arrStr, kString81Music)) | if (!strcmp8 (arrStr, kString81Music)) | ||||
| return k81Music; | return k81Music; | ||||
| if (!strcmp8 (arrStr, kString102)) | |||||
| return k102; | |||||
| if (!strcmp8 (arrStr, kString122)) | |||||
| return k122; | |||||
| if (!strcmp8 (arrStr, kString80Cube)) | |||||
| return k80Cube; | |||||
| if (!strcmp8 (arrStr, kString52_5)) | |||||
| return k52_5; | |||||
| if (!strcmp8 (arrStr, kString72_5)) | |||||
| return k72_5; | |||||
| if (!strcmp8 (arrStr, kString40_4)) | |||||
| return k40_4; | |||||
| if (!strcmp8 (arrStr, kString71CineTopCenter)) | if (!strcmp8 (arrStr, kString71CineTopCenter)) | ||||
| return k71CineTopCenter; | return k71CineTopCenter; | ||||
| if (!strcmp8 (arrStr, kString71CineCenterHigh)) | if (!strcmp8 (arrStr, kString71CineCenterHigh)) | ||||
| return k71CineCenterHigh; | return k71CineCenterHigh; | ||||
| if (!strcmp8 (arrStr, kString71CineFrontHigh)) | |||||
| return k71CineFrontHigh; | |||||
| if (!strcmp8 (arrStr, kString70CineFrontHigh)) | |||||
| return k70CineFrontHigh; | |||||
| if (!strcmp8 (arrStr, kString71CineSideHigh)) | |||||
| return k71CineSideHigh; | |||||
| if (!strcmp8 (arrStr, kString50_2)) | |||||
| return k50_2; | |||||
| if (!strcmp8 (arrStr, kString51_2)) | |||||
| return k51_2; | |||||
| if (!strcmp8 (arrStr, kString50_2TopSide)) | |||||
| return k50_2_TS; | |||||
| if (!strcmp8 (arrStr, kString51_2TopSide)) | |||||
| return k51_2_TS; | |||||
| if (!strcmp8 (arrStr, kString71CineFullRear)) | if (!strcmp8 (arrStr, kString71CineFullRear)) | ||||
| return k71CineFullRear; | return k71CineFullRear; | ||||
| if (!strcmp8 (arrStr, kString90Cine)) | if (!strcmp8 (arrStr, kString90Cine)) | ||||
| @@ -789,8 +900,8 @@ inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr) | |||||
| return k50_4_1; | return k50_4_1; | ||||
| if (!strcmp8 (arrStr, kString51_4_1)) | if (!strcmp8 (arrStr, kString51_4_1)) | ||||
| return k51_4_1; | return k51_4_1; | ||||
| if (!strcmp8 (arrStr, kString81MPEG)) | |||||
| return k81MPEG3D; | |||||
| if (!strcmp8 (arrStr, kString41_4_1)) | |||||
| return k41_4_1; | |||||
| if (!strcmp8 (arrStr, kString70_2)) | if (!strcmp8 (arrStr, kString70_2)) | ||||
| return k70_2; | return k70_2; | ||||
| if (!strcmp8 (arrStr, kString71_2)) | if (!strcmp8 (arrStr, kString71_2)) | ||||
| @@ -815,20 +926,20 @@ inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr) | |||||
| return k90_6; | return k90_6; | ||||
| if (!strcmp8 (arrStr, kString91_6)) | if (!strcmp8 (arrStr, kString91_6)) | ||||
| return k91_6; | return k91_6; | ||||
| if (!strcmp8 (arrStr, kString100)) | |||||
| return k100; | |||||
| if (!strcmp8 (arrStr, kString101)) | |||||
| return k101; | |||||
| if (!strcmp8 (arrStr, kString110)) | |||||
| return k110; | |||||
| if (!strcmp8 (arrStr, kString111)) | |||||
| return k111; | |||||
| if (!strcmp8 (arrStr, kString50_5)) | |||||
| return k50_5; | |||||
| if (!strcmp8 (arrStr, kString51_5)) | |||||
| return k51_5; | |||||
| if (!strcmp8 (arrStr, kString50_6)) | |||||
| return k50_6; | |||||
| if (!strcmp8 (arrStr, kString51_6)) | |||||
| return k51_6; | |||||
| if (!strcmp8 (arrStr, kString130)) | if (!strcmp8 (arrStr, kString130)) | ||||
| return k130; | return k130; | ||||
| if (!strcmp8 (arrStr, kString131)) | if (!strcmp8 (arrStr, kString131)) | ||||
| return k131; | return k131; | ||||
| if (!strcmp8 (arrStr, kString140)) | |||||
| return k140; | |||||
| if (!strcmp8 (arrStr, kString60_4_4)) | |||||
| return k60_4_4; | |||||
| if (!strcmp8 (arrStr, kString222)) | if (!strcmp8 (arrStr, kString222)) | ||||
| return k222; | return k222; | ||||
| if (!strcmp8 (arrStr, kString220)) | if (!strcmp8 (arrStr, kString220)) | ||||
| @@ -837,12 +948,42 @@ inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr) | |||||
| return k50_5_3; | return k50_5_3; | ||||
| if (!strcmp8 (arrStr, kString51_5_3)) | if (!strcmp8 (arrStr, kString51_5_3)) | ||||
| return k51_5_3; | return k51_5_3; | ||||
| if (!strcmp8 (arrStr, kString50_2_2)) | |||||
| return k50_2_2; | |||||
| if (!strcmp8 (arrStr, kString50_4_2)) | |||||
| return k50_4_2; | |||||
| if (!strcmp8 (arrStr, kString70_4_2)) | |||||
| return k70_4_2; | |||||
| if (!strcmp8 (arrStr, kString50_5_Sony)) | |||||
| return k50_5_Sony; | |||||
| if (!strcmp8 (arrStr, kString40_2_2)) | |||||
| return k40_2_2; | |||||
| if (!strcmp8 (arrStr, kString40_4_2)) | |||||
| return k40_4_2; | |||||
| if (!strcmp8 (arrStr, kString50_3_2)) | |||||
| return k50_3_2; | |||||
| if (!strcmp8 (arrStr, kString30_5_2)) | |||||
| return k30_5_2; | |||||
| if (!strcmp8 (arrStr, kString40_4_4)) | |||||
| return k40_4_4; | |||||
| if (!strcmp8 (arrStr, kString50_4_4)) | |||||
| return k50_4_4; | |||||
| if (!strcmp8 (arrStr, kStringAmbi1stOrder)) | if (!strcmp8 (arrStr, kStringAmbi1stOrder)) | ||||
| return kAmbi1stOrderACN; | return kAmbi1stOrderACN; | ||||
| if (!strcmp8 (arrStr, kStringAmbi2cdOrder)) | if (!strcmp8 (arrStr, kStringAmbi2cdOrder)) | ||||
| return kAmbi2cdOrderACN; | return kAmbi2cdOrderACN; | ||||
| if (!strcmp8 (arrStr, kStringAmbi3rdOrder)) | if (!strcmp8 (arrStr, kStringAmbi3rdOrder)) | ||||
| return kAmbi3rdOrderACN; | return kAmbi3rdOrderACN; | ||||
| if (!strcmp8 (arrStr, kStringAmbi4thOrder)) | |||||
| return kAmbi4thOrderACN; | |||||
| if (!strcmp8 (arrStr, kStringAmbi5thOrder)) | |||||
| return kAmbi5thOrderACN; | |||||
| if (!strcmp8 (arrStr, kStringAmbi6thOrder)) | |||||
| return kAmbi6thOrderACN; | |||||
| if (!strcmp8 (arrStr, kStringAmbi7thOrder)) | |||||
| return kAmbi7thOrderACN; | |||||
| return kEmpty; | return kEmpty; | ||||
| } | } | ||||
| @@ -854,6 +995,7 @@ inline CString getSpeakerArrangementString (SpeakerArrangement arr, bool withSpe | |||||
| switch (arr) | switch (arr) | ||||
| { | { | ||||
| case kMono: return withSpeakersName ? kStringMonoS : kStringMono; | case kMono: return withSpeakersName ? kStringMonoS : kStringMono; | ||||
| //--- Stereo pairs--- | |||||
| case kStereo: return withSpeakersName ? kStringStereoS : kStringStereo; | case kStereo: return withSpeakersName ? kStringStereoS : kStringStereo; | ||||
| case kStereoSurround: return withSpeakersName ? kStringStereoRS : kStringStereoR; | case kStereoSurround: return withSpeakersName ? kStringStereoRS : kStringStereoR; | ||||
| case kStereoCenter: return withSpeakersName ? kStringStereoCS : kStringStereoC; | case kStereoCenter: return withSpeakersName ? kStringStereoCS : kStringStereoC; | ||||
| @@ -863,59 +1005,61 @@ inline CString getSpeakerArrangementString (SpeakerArrangement arr, bool withSpe | |||||
| case kStereoTS: return withSpeakersName ? kStringStereoTSS : kStringStereoTS; | case kStereoTS: return withSpeakersName ? kStringStereoTSS : kStringStereoTS; | ||||
| case kStereoTR: return withSpeakersName ? kStringStereoTRS : kStringStereoTR; | case kStereoTR: return withSpeakersName ? kStringStereoTRS : kStringStereoTR; | ||||
| case kStereoBF: return withSpeakersName ? kStringStereoBFS : kStringStereoBF; | case kStereoBF: return withSpeakersName ? kStringStereoBFS : kStringStereoBF; | ||||
| //--- --- | |||||
| case kCineFront: return withSpeakersName ? kStringCineFrontS : kStringCineFront; | case kCineFront: return withSpeakersName ? kStringCineFrontS : kStringCineFront; | ||||
| case k30Cine: return withSpeakersName ? kString30CineS : kString30Cine; | case k30Cine: return withSpeakersName ? kString30CineS : kString30Cine; | ||||
| case k30Music: return withSpeakersName ? kString30MusicS : kString30Music; | |||||
| case k31Cine: return withSpeakersName ? kString31CineS : kString31Cine; | case k31Cine: return withSpeakersName ? kString31CineS : kString31Cine; | ||||
| case k30Music: return withSpeakersName ? kString30MusicS : kString30Music; | |||||
| case k31Music: return withSpeakersName ? kString31MusicS : kString31Music; | case k31Music: return withSpeakersName ? kString31MusicS : kString31Music; | ||||
| case k40Cine: return withSpeakersName ? kString40CineS : kString40Cine; | case k40Cine: return withSpeakersName ? kString40CineS : kString40Cine; | ||||
| case k40Music: return withSpeakersName ? kString40MusicS : kString40Music; | |||||
| case k41Cine: return withSpeakersName ? kString41CineS : kString41Cine; | case k41Cine: return withSpeakersName ? kString41CineS : kString41Cine; | ||||
| case k40Music: return withSpeakersName ? kString40MusicS : kString40Music; | |||||
| case k41Music: return withSpeakersName ? kString41MusicS : kString41Music; | case k41Music: return withSpeakersName ? kString41MusicS : kString41Music; | ||||
| case k50: return withSpeakersName ? kString50S : kString50; | case k50: return withSpeakersName ? kString50S : kString50; | ||||
| case k51: return withSpeakersName ? kString51S : kString51; | case k51: return withSpeakersName ? kString51S : kString51; | ||||
| case k60Cine: return withSpeakersName ? kString60CineS : kString60Cine; | case k60Cine: return withSpeakersName ? kString60CineS : kString60Cine; | ||||
| case k60Music: return withSpeakersName ? kString60MusicS : kString60Music; | |||||
| case k61Cine: return withSpeakersName ? kString61CineS : kString61Cine; | case k61Cine: return withSpeakersName ? kString61CineS : kString61Cine; | ||||
| case k60Music: return withSpeakersName ? kString60MusicS : kString60Music; | |||||
| case k61Music: return withSpeakersName ? kString61MusicS : kString61Music; | case k61Music: return withSpeakersName ? kString61MusicS : kString61Music; | ||||
| case k70Cine: return withSpeakersName ? kString70CineS : kString70Cine; | case k70Cine: return withSpeakersName ? kString70CineS : kString70Cine; | ||||
| case k70Music: return withSpeakersName ? kString70MusicS : kString70Music; | |||||
| case k71Cine: return withSpeakersName ? kString71CineS : kString71Cine; | case k71Cine: return withSpeakersName ? kString71CineS : kString71Cine; | ||||
| case k70Music: return withSpeakersName ? kString70MusicS : kString70Music; | |||||
| case k71Music: return withSpeakersName ? kString71MusicS : kString71Music; | case k71Music: return withSpeakersName ? kString71MusicS : kString71Music; | ||||
| case k71Proximity: return withSpeakersName ? kString71ProximityS : kString71Proximity; | case k71Proximity: return withSpeakersName ? kString71ProximityS : kString71Proximity; | ||||
| case k80Cine: return withSpeakersName ? kString80CineS : kString80Cine; | case k80Cine: return withSpeakersName ? kString80CineS : kString80Cine; | ||||
| case k80Music: return withSpeakersName ? kString80MusicS : kString80Music; | |||||
| case k81Cine: return withSpeakersName ? kString81CineS : kString81Cine; | case k81Cine: return withSpeakersName ? kString81CineS : kString81Cine; | ||||
| case k80Music: return withSpeakersName ? kString80MusicS : kString80Music; | |||||
| case k81Music: return withSpeakersName ? kString81MusicS : kString81Music; | case k81Music: return withSpeakersName ? kString81MusicS : kString81Music; | ||||
| case k81MPEG3D: return withSpeakersName ? kString81MPEGS : kString81MPEG; | |||||
| case k102: return withSpeakersName ? kString102S : kString102; | |||||
| case k122: return withSpeakersName ? kString122S : kString122; | |||||
| case k80Cube: return withSpeakersName ? kString80CubeS : kString80Cube; | |||||
| case k71CineTopCenter: return withSpeakersName ? kString71CineTopCenterS : kString71CineTopCenter; | |||||
| case k71CineCenterHigh: return withSpeakersName ? kString71CineCenterHighS : kString71CineCenterHigh; | |||||
| case k71CineFrontHigh: return withSpeakersName ? kString71CineFrontHighS : kString71CineFrontHigh; | |||||
| case k70CineFrontHigh: return withSpeakersName ? kString70CineFrontHighS : kString70CineFrontHigh; | |||||
| case k71CineSideHigh: return withSpeakersName ? kString71CineSideHighS : kString71CineSideHigh; | |||||
| case k71CineFullRear: return withSpeakersName ? kString71CineFullRearS : kString71CineFullRear; | |||||
| case k90Cine: return withSpeakersName ? kString90CineS : kString90Cine; | |||||
| case k71CineFullRear: return withSpeakersName ? kString71CineFullRearS : kString71CineFullRear; | |||||
| case k90Cine: return withSpeakersName ? kString90CineS : kString90Cine; | |||||
| case k91Cine: return withSpeakersName ? kString91CineS : kString91Cine; | case k91Cine: return withSpeakersName ? kString91CineS : kString91Cine; | ||||
| case k100Cine: return withSpeakersName ? kString100CineS : kString100Cine; | case k100Cine: return withSpeakersName ? kString100CineS : kString100Cine; | ||||
| case k101Cine: return withSpeakersName ? kString101CineS : kString101Cine; | case k101Cine: return withSpeakersName ? kString101CineS : kString101Cine; | ||||
| case k100: return withSpeakersName ? kString100S : kString100; | |||||
| case k101: return withSpeakersName ? kString101S : kString101; | |||||
| case k110: return withSpeakersName ? kString110S : kString110; | |||||
| case k111: return withSpeakersName ? kString111S : kString111; | |||||
| //---With Tops --- | |||||
| case k71CineTopCenter: return withSpeakersName ? kString71CineTopCenterS : kString71CineTopCenter; | |||||
| case k71CineCenterHigh: return withSpeakersName ? kString71CineCenterHighS : kString71CineCenterHigh; | |||||
| case k50_2_TS: return withSpeakersName ? kString50_2TopSideS : kString50_2TopSide; | |||||
| case k51_2_TS: return withSpeakersName ? kString51_2TopSideS : kString51_2TopSide; | |||||
| case k40_4: return withSpeakersName ? kString40_4S : kString40_4; | |||||
| case k50_2: return withSpeakersName ? kString50_2S : kString50_2; | |||||
| case k51_2: return withSpeakersName ? kString51_2S : kString51_2; | |||||
| case k50_4: return withSpeakersName ? kString50_4S : kString50_4; | case k50_4: return withSpeakersName ? kString50_4S : kString50_4; | ||||
| case k51_4: return withSpeakersName ? kString51_4S : kString51_4; | case k51_4: return withSpeakersName ? kString51_4S : kString51_4; | ||||
| case k50_4_1: return withSpeakersName ? kString50_4_1S : kString50_4_1; | |||||
| case k51_4_1: return withSpeakersName ? kString51_4_1S : kString51_4_1; | |||||
| case k50_5: return withSpeakersName ? kString50_5S : kString50_5; | |||||
| case k51_5: return withSpeakersName ? kString51_5S : kString51_5; | |||||
| case k52_5: return withSpeakersName ? kString52_5S : kString52_5; | |||||
| case k50_6: return withSpeakersName ? kString50_6S : kString50_6; | |||||
| case k51_6: return withSpeakersName ? kString51_6S : kString51_6; | |||||
| case k70_2: return withSpeakersName ? kString70_2S : kString70_2; | case k70_2: return withSpeakersName ? kString70_2S : kString70_2; | ||||
| case k71_2: return withSpeakersName ? kString71_2S : kString71_2; | case k71_2: return withSpeakersName ? kString71_2S : kString71_2; | ||||
| case k70_3: return withSpeakersName ? kString70_3S : kString70_3; | case k70_3: return withSpeakersName ? kString70_3S : kString70_3; | ||||
| case k72_3: return withSpeakersName ? kString72_3S : kString72_3; | case k72_3: return withSpeakersName ? kString72_3S : kString72_3; | ||||
| case k70_4: return withSpeakersName ? kString70_4S : kString70_4; | case k70_4: return withSpeakersName ? kString70_4S : kString70_4; | ||||
| case k71_4: return withSpeakersName ? kString71_4S : kString71_4; | case k71_4: return withSpeakersName ? kString71_4S : kString71_4; | ||||
| case k72_5: return withSpeakersName ? kString72_5S : kString72_5; | |||||
| case k70_6: return withSpeakersName ? kString70_6S : kString70_6; | case k70_6: return withSpeakersName ? kString70_6S : kString70_6; | ||||
| case k71_6: return withSpeakersName ? kString71_6S : kString71_6; | case k71_6: return withSpeakersName ? kString71_6S : kString71_6; | ||||
| case k90_4: return withSpeakersName ? kString90_4S : kString90_4; | case k90_4: return withSpeakersName ? kString90_4S : kString90_4; | ||||
| @@ -924,21 +1068,44 @@ inline CString getSpeakerArrangementString (SpeakerArrangement arr, bool withSpe | |||||
| case k91_6: return withSpeakersName ? kString91_6S : kString91_6; | case k91_6: return withSpeakersName ? kString91_6S : kString91_6; | ||||
| case k130: return withSpeakersName ? kString130S : kString130; | case k130: return withSpeakersName ? kString130S : kString130; | ||||
| case k131: return withSpeakersName ? kString131S : kString131; | case k131: return withSpeakersName ? kString131S : kString131; | ||||
| case k140: return withSpeakersName ? kString140S : kString140; | |||||
| case k222: return withSpeakersName ? kString222S : kString222; | |||||
| case k220: return withSpeakersName ? kString220S : kString220; | |||||
| //--- With Tops and Bottoms --- | |||||
| case k41_4_1: return withSpeakersName ? kString41_4_1S : kString41_4_1; | |||||
| case k50_4_1: return withSpeakersName ? kString50_4_1S : kString50_4_1; | |||||
| case k51_4_1: return withSpeakersName ? kString51_4_1S : kString51_4_1; | |||||
| case k50_5_3: return withSpeakersName ? kString50_5_3S : kString50_5_3; | case k50_5_3: return withSpeakersName ? kString50_5_3S : kString50_5_3; | ||||
| case k51_5_3: return withSpeakersName ? kString51_5_3S : kString51_5_3; | case k51_5_3: return withSpeakersName ? kString51_5_3S : kString51_5_3; | ||||
| break; | |||||
| } | |||||
| case k50_2_2: return withSpeakersName ? kString50_2_2S : kString50_2_2; | |||||
| case k50_4_2: return withSpeakersName ? kString50_4_2S : kString50_4_2; | |||||
| case k60_4_4: return withSpeakersName ? kString60_4_4S : kString60_4_4; | |||||
| case k70_4_2: return withSpeakersName ? kString70_4_2S : kString70_4_2; | |||||
| case k50_5_Sony: return withSpeakersName ? kString50_5_SonyS : kString50_5_Sony; | |||||
| case k40_2_2: return withSpeakersName ? kString40_2_2S : kString40_2_2; | |||||
| case k40_4_2: return withSpeakersName ? kString40_4_2S : kString40_4_2; | |||||
| case k50_3_2: return withSpeakersName ? kString50_3_2S : kString50_3_2; | |||||
| case k30_5_2: return withSpeakersName ? kString30_5_2S : kString30_5_2; | |||||
| case k40_4_4: return withSpeakersName ? kString40_4_4S : kString40_4_4; | |||||
| case k50_4_4: return withSpeakersName ? kString50_4_4S : kString50_4_4; | |||||
| case k220: return withSpeakersName ? kString220S : kString220; | |||||
| case k222: return withSpeakersName ? kString222S : kString222; | |||||
| } | |||||
| //--- Ambisonics --- | |||||
| if (arr == kAmbi1stOrderACN) | if (arr == kAmbi1stOrderACN) | ||||
| return withSpeakersName ? kStringAmbi1stOrderS : kStringAmbi1stOrder; | return withSpeakersName ? kStringAmbi1stOrderS : kStringAmbi1stOrder; | ||||
| if (arr == kAmbi2cdOrderACN) | if (arr == kAmbi2cdOrderACN) | ||||
| return withSpeakersName ? kStringAmbi2cdOrderS : kStringAmbi2cdOrder; | return withSpeakersName ? kStringAmbi2cdOrderS : kStringAmbi2cdOrder; | ||||
| if (arr == kAmbi3rdOrderACN) | if (arr == kAmbi3rdOrderACN) | ||||
| return withSpeakersName ? kStringAmbi3rdOrderS : kStringAmbi3rdOrder; | return withSpeakersName ? kStringAmbi3rdOrderS : kStringAmbi3rdOrder; | ||||
| if (arr == kAmbi4thOrderACN) | |||||
| return withSpeakersName ? kStringAmbi4thOrderS : kStringAmbi4thOrder; | |||||
| if (arr == kAmbi5thOrderACN) | |||||
| return withSpeakersName ? kStringAmbi5thOrderS : kStringAmbi5thOrder; | |||||
| if (arr == kAmbi6thOrderACN) | |||||
| return withSpeakersName ? kStringAmbi6thOrderS : kStringAmbi6thOrder; | |||||
| if (arr == kAmbi7thOrderACN) | |||||
| return withSpeakersName ? kStringAmbi7thOrderS : kStringAmbi7thOrder; | |||||
| return kStringEmpty; | return kStringEmpty; | ||||
| } | } | ||||
| @@ -1041,6 +1208,24 @@ inline CString getSpeakerShortName (const SpeakerArrangement& arr, int32 index) | |||||
| return "14"; | return "14"; | ||||
| if (speaker == kSpeakerACN15) | if (speaker == kSpeakerACN15) | ||||
| return "15"; | return "15"; | ||||
| if (speaker == kSpeakerACN16) | |||||
| return "16"; | |||||
| if (speaker == kSpeakerACN17) | |||||
| return "17"; | |||||
| if (speaker == kSpeakerACN18) | |||||
| return "18"; | |||||
| if (speaker == kSpeakerACN19) | |||||
| return "19"; | |||||
| if (speaker == kSpeakerACN20) | |||||
| return "20"; | |||||
| if (speaker == kSpeakerACN21) | |||||
| return "21"; | |||||
| if (speaker == kSpeakerACN22) | |||||
| return "22"; | |||||
| if (speaker == kSpeakerACN23) | |||||
| return "23"; | |||||
| if (speaker == kSpeakerACN24) | |||||
| return "24"; | |||||
| if (speaker == kSpeakerTsl) | if (speaker == kSpeakerTsl) | ||||
| return "Tsl"; | return "Tsl"; | ||||
| @@ -24,17 +24,18 @@ namespace Vst { | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| /** VST 3 SDK Version */ | /** VST 3 SDK Version */ | ||||
| #ifndef kVstVersionString | #ifndef kVstVersionString | ||||
| #define kVstVersionString "VST 3.7.7" ///< SDK version for PClassInfo2 | |||||
| #define kVstVersionString "VST 3.7.8" ///< SDK version for PClassInfo2 | |||||
| #endif | #endif | ||||
| #define kVstVersionMajor 3 | #define kVstVersionMajor 3 | ||||
| #define kVstVersionMinor 7 | #define kVstVersionMinor 7 | ||||
| #define kVstVersionSub 7 | |||||
| #define kVstVersionSub 8 | |||||
| #define VST_VERSION ((kVstVersionMajor << 16) | (kVstVersionMinor << 8) | kVstVersionSub) | #define VST_VERSION ((kVstVersionMajor << 16) | (kVstVersionMinor << 8) | kVstVersionSub) | ||||
| // Versions History which allows to write such code: | // Versions History which allows to write such code: | ||||
| // #if VST_VERSION >= VST_3_6_5_VERSION | // #if VST_VERSION >= VST_3_6_5_VERSION | ||||
| #define VST_3_7_8_VERSION 0x030708 | |||||
| #define VST_3_7_7_VERSION 0x030707 | #define VST_3_7_7_VERSION 0x030707 | ||||
| #define VST_3_7_6_VERSION 0x030706 | #define VST_3_7_6_VERSION 0x030706 | ||||
| #define VST_3_7_5_VERSION 0x030705 | #define VST_3_7_5_VERSION 0x030705 | ||||
| @@ -1,6 +1,6 @@ | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -35,13 +35,14 @@ | |||||
| // OF THE POSSIBILITY OF SUCH DAMAGE. | // OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| #include "public.sdk/source/common/memorystream.h" | |||||
| #include "public.sdk/source/vst/hosting/module.h" | #include "public.sdk/source/vst/hosting/module.h" | ||||
| #include "public.sdk/source/vst/moduleinfo/moduleinfocreator.h" | #include "public.sdk/source/vst/moduleinfo/moduleinfocreator.h" | ||||
| #include "public.sdk/source/vst/moduleinfo/moduleinfoparser.h" | #include "public.sdk/source/vst/moduleinfo/moduleinfoparser.h" | ||||
| #include "public.sdk/source/vst/utility/stringconvert.h" | |||||
| #include "public.sdk/source/common/readfile.h" | |||||
| #include "base/source/fcommandline.h" | #include "base/source/fcommandline.h" | ||||
| #include "pluginterfaces/vst/vsttypes.h" | #include "pluginterfaces/vst/vsttypes.h" | ||||
| #include "pluginterfaces/base/iplugincompatibility.h" | |||||
| #include "pluginterfaces/base/fplatform.h" | |||||
| #include <cstdio> | #include <cstdio> | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iostream> | #include <iostream> | ||||
| @@ -73,26 +74,10 @@ void printUsage (std::ostream& s) | |||||
| s << " moduleinfotool -validate -path MODULE_PATH [-infopath PATH]\n"; | s << " moduleinfotool -validate -path MODULE_PATH [-infopath PATH]\n"; | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| std::string loadFile (const std::string& path) | |||||
| { | |||||
| std::ifstream file (path, std::ios_base::in | std::ios_base::binary); | |||||
| if (!file.is_open ()) | |||||
| return {}; | |||||
| auto size = file.seekg (0, std::ios_base::end).tellg (); | |||||
| file.seekg (0, std::ios_base::beg); | |||||
| std::string data; | |||||
| data.resize (size); | |||||
| file.read (data.data (), data.size ()); | |||||
| if (file.bad ()) | |||||
| return {}; | |||||
| return data; | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| std::optional<ModuleInfo::CompatibilityList> openAndParseCompatJSON (const std::string& path) | std::optional<ModuleInfo::CompatibilityList> openAndParseCompatJSON (const std::string& path) | ||||
| { | { | ||||
| auto data = loadFile (path); | |||||
| auto data = readFile (path); | |||||
| if (data.empty ()) | if (data.empty ()) | ||||
| { | { | ||||
| std::cout << "Can not read '" << path << "'\n"; | std::cout << "Can not read '" << path << "'\n"; | ||||
| @@ -111,35 +96,6 @@ std::optional<ModuleInfo::CompatibilityList> openAndParseCompatJSON (const std:: | |||||
| return result; | return result; | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| std::optional<ModuleInfo::CompatibilityList> loadCompatibilityFromModule (const VST3::Hosting::Module& module) | |||||
| { | |||||
| const auto& factory = module.getFactory(); | |||||
| const auto& infos = factory.classInfos(); | |||||
| const auto iter = std::find_if (infos.begin(), infos.end(), [&] (const auto& info) | |||||
| { | |||||
| return info.category() == kPluginCompatibilityClass; | |||||
| }); | |||||
| if (iter == infos.end()) | |||||
| return {}; | |||||
| const auto compatibility = factory.createInstance<Steinberg::IPluginCompatibility> (iter->ID()); | |||||
| if (compatibility == nullptr) | |||||
| return {}; | |||||
| Steinberg::MemoryStream stream; | |||||
| if (compatibility->getCompatibilityJSON (&stream) != kResultOk) | |||||
| return {}; | |||||
| const std::string_view streamView (stream.getData(), stream.getSize()); | |||||
| return ModuleInfoLib::parseCompatibilityJson (streamView, nullptr); | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| int createJSON (const std::optional<ModuleInfo::CompatibilityList>& compat, | int createJSON (const std::optional<ModuleInfo::CompatibilityList>& compat, | ||||
| const std::string& modulePath, const std::string& moduleVersion, | const std::string& modulePath, const std::string& moduleVersion, | ||||
| @@ -155,9 +111,6 @@ int createJSON (const std::optional<ModuleInfo::CompatibilityList>& compat, | |||||
| auto moduleInfo = ModuleInfoLib::createModuleInfo (*module, false); | auto moduleInfo = ModuleInfoLib::createModuleInfo (*module, false); | ||||
| if (compat) | if (compat) | ||||
| moduleInfo.compatibility = *compat; | moduleInfo.compatibility = *compat; | ||||
| else if (auto loaded = loadCompatibilityFromModule (*module)) | |||||
| moduleInfo.compatibility = *loaded; | |||||
| moduleInfo.version = moduleVersion; | moduleInfo.version = moduleVersion; | ||||
| std::stringstream output; | std::stringstream output; | ||||
| @@ -275,7 +228,7 @@ int validate (const std::string& modulePath, std::string infoJsonPath) | |||||
| infoJsonPath = *path; | infoJsonPath = *path; | ||||
| } | } | ||||
| auto data = loadFile (infoJsonPath); | |||||
| auto data = readFile (infoJsonPath); | |||||
| if (data.empty ()) | if (data.empty ()) | ||||
| { | { | ||||
| std::cerr << "Empty or non existing file: '" << infoJsonPath << "'" << '\n'; | std::cerr << "Empty or non existing file: '" << infoJsonPath << "'" << '\n'; | ||||
| @@ -364,13 +317,19 @@ int run (int argc, char* argv[]) | |||||
| if (valueMap.count (optOutputPath) != 0) | if (valueMap.count (optOutputPath) != 0) | ||||
| { | { | ||||
| writeToFile = true; | writeToFile = true; | ||||
| #if SMTG_OS_WINDOWS | |||||
| auto tmp = VST3::StringConvert::convert (valueMap[optOutputPath]); | |||||
| auto outputFile = reinterpret_cast<const wchar_t*> (tmp.data ()); | |||||
| #else | |||||
| auto outputFile = valueMap[optOutputPath]; | auto outputFile = valueMap[optOutputPath]; | ||||
| #endif | |||||
| auto ostream = new std::ofstream (outputFile); | auto ostream = new std::ofstream (outputFile); | ||||
| if (ostream->is_open ()) | if (ostream->is_open ()) | ||||
| outputStream = ostream; | outputStream = ostream; | ||||
| else | else | ||||
| { | { | ||||
| std::cout << "Cannot create output file: " << outputFile << '\n'; | |||||
| std::cout << "Cannot create output file: " << valueMap[optOutputPath] << '\n'; | |||||
| return result; | return result; | ||||
| } | } | ||||
| } | } | ||||
| @@ -394,7 +353,53 @@ int run (int argc, char* argv[]) | |||||
| } // Steinberg | } // Steinberg | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| #if SMTG_OS_WINDOWS | |||||
| //------------------------------------------------------------------------ | |||||
| #include <Windows.h> | |||||
| #include <vector> | |||||
| //------------------------------------------------------------------------ | |||||
| using Utf8String = std::string; | |||||
| //------------------------------------------------------------------------ | |||||
| using Utf8Args = std::vector<Utf8String>; | |||||
| Utf8Args toUtf8Args (int argc, wchar_t* wargv[]) | |||||
| { | |||||
| Utf8Args utf8Args; | |||||
| for (int i = 0; i < argc; i++) | |||||
| { | |||||
| auto str = reinterpret_cast<const Steinberg::Vst::TChar*>(wargv[i]); | |||||
| utf8Args.push_back (VST3::StringConvert::convert (str)); | |||||
| } | |||||
| return utf8Args; | |||||
| } | |||||
| //------------------------------------------------------------------------ | |||||
| using Utf8ArgPtrs = std::vector<char*>; | |||||
| Utf8ArgPtrs toUtf8ArgPtrs (Utf8Args& utf8Args) | |||||
| { | |||||
| Utf8ArgPtrs utf8ArgPtrs; | |||||
| for (auto& el : utf8Args) | |||||
| { | |||||
| utf8ArgPtrs.push_back (el.data ()); | |||||
| } | |||||
| return utf8ArgPtrs; | |||||
| } | |||||
| //------------------------------------------------------------------------ | |||||
| int wmain (int argc, wchar_t* wargv[]) | |||||
| { | |||||
| Utf8Args utf8Args = toUtf8Args (argc, wargv); | |||||
| Utf8ArgPtrs utf8ArgPtrs = toUtf8ArgPtrs (utf8Args); | |||||
| char** argv = &(utf8ArgPtrs.at (0)); | |||||
| return Steinberg::ModuleInfoTool::run (argc, argv); | |||||
| } | |||||
| #else | |||||
| int main (int argc, char* argv[]) | int main (int argc, char* argv[]) | ||||
| { | { | ||||
| return Steinberg::ModuleInfoTool::run (argc, argv); | return Steinberg::ModuleInfoTool::run (argc, argv); | ||||
| } | } | ||||
| #endif | |||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -36,7 +36,7 @@ | |||||
| #include "memorystream.h" | #include "memorystream.h" | ||||
| #include "pluginterfaces/base/futils.h" | #include "pluginterfaces/base/futils.h" | ||||
| #include <stdlib.h> | |||||
| #include <cstdlib> | |||||
| namespace Steinberg { | namespace Steinberg { | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -51,7 +51,7 @@ class CPluginView : public FObject, public IPlugView | |||||
| public: | public: | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| CPluginView (const ViewRect* rect = nullptr); | CPluginView (const ViewRect* rect = nullptr); | ||||
| virtual ~CPluginView (); | |||||
| ~CPluginView () SMTG_OVERRIDE; | |||||
| /** Returns its current frame rectangle. */ | /** Returns its current frame rectangle. */ | ||||
| const ViewRect& getRect () const { return rect; } | const ViewRect& getRect () const { return rect; } | ||||
| @@ -0,0 +1,76 @@ | |||||
| //----------------------------------------------------------------------------- | |||||
| // Project : VST SDK | |||||
| // Flags : clang-format SMTGSequencer | |||||
| // | |||||
| // Category : readfile | |||||
| // Filename : public.sdk/source/common/readfile.cpp | |||||
| // Created by : Steinberg, 3/2023 | |||||
| // Description : read file routine | |||||
| // | |||||
| //----------------------------------------------------------------------------- | |||||
| // LICENSE | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | |||||
| // Redistribution and use in source and binary forms, with or without modification, | |||||
| // are permitted provided that the following conditions are met: | |||||
| // | |||||
| // * Redistributions of source code must retain the above copyright notice, | |||||
| // this list of conditions and the following disclaimer. | |||||
| // * Redistributions in binary form must reproduce the above copyright notice, | |||||
| // this list of conditions and the following disclaimer in the documentation | |||||
| // and/or other materials provided with the distribution. | |||||
| // * Neither the name of the Steinberg Media Technologies nor the names of its | |||||
| // contributors may be used to endorse or promote products derived from this | |||||
| // software without specific prior written permission. | |||||
| // | |||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |||||
| // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |||||
| // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |||||
| // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | |||||
| // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |||||
| // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||||
| // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | |||||
| // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | |||||
| // OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| //----------------------------------------------------------------------------- | |||||
| #include "readfile.h" | |||||
| #include "public.sdk/source/vst/utility/stringconvert.h" | |||||
| #include "pluginterfaces/base/fplatform.h" | |||||
| #include <fstream> | |||||
| #include <sstream> | |||||
| namespace Steinberg { | |||||
| //------------------------------------------------------------------------ | |||||
| std::string readFile (const std::string& path) | |||||
| { | |||||
| #if SMTG_OS_WINDOWS | |||||
| auto u16Path = VST3::StringConvert::convert (path); | |||||
| std::ifstream file (reinterpret_cast<const wchar_t*> (u16Path.data ()), | |||||
| std::ios_base::in | std::ios_base::binary); | |||||
| #else | |||||
| std::ifstream file (path, std::ios_base::in | std::ios_base::binary); | |||||
| #endif | |||||
| if (!file.is_open ()) | |||||
| return {}; | |||||
| #if SMTG_CPP17 | |||||
| auto size = file.seekg (0, std::ios_base::end).tellg (); | |||||
| file.seekg (0, std::ios_base::beg); | |||||
| std::string data; | |||||
| data.resize (size); | |||||
| file.read (data.data (), data.size ()); | |||||
| if (file.bad ()) | |||||
| return {}; | |||||
| return data; | |||||
| #else | |||||
| std::stringstream buffer; | |||||
| buffer << file.rdbuf (); | |||||
| return buffer.str (); | |||||
| #endif | |||||
| } | |||||
| //------------------------------------------------------------------------ | |||||
| } // namespace Steinberg | |||||
| @@ -0,0 +1,55 @@ | |||||
| //----------------------------------------------------------------------------- | |||||
| // Flags : clang-format SMTGSequencer | |||||
| // Project : VST SDK | |||||
| // | |||||
| // Category : readfile | |||||
| // Filename : public.sdk/source/common/readfile.h | |||||
| // Created by : Steinberg, 3/2023 | |||||
| // Description : read file routine | |||||
| // | |||||
| //----------------------------------------------------------------------------- | |||||
| // LICENSE | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | |||||
| // Redistribution and use in source and binary forms, with or without modification, | |||||
| // are permitted provided that the following conditions are met: | |||||
| // | |||||
| // * Redistributions of source code must retain the above copyright notice, | |||||
| // this list of conditions and the following disclaimer. | |||||
| // * Redistributions in binary form must reproduce the above copyright notice, | |||||
| // this list of conditions and the following disclaimer in the documentation | |||||
| // and/or other materials provided with the distribution. | |||||
| // * Neither the name of the Steinberg Media Technologies nor the names of its | |||||
| // contributors may be used to endorse or promote products derived from this | |||||
| // software without specific prior written permission. | |||||
| // | |||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |||||
| // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |||||
| // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |||||
| // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | |||||
| // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |||||
| // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||||
| // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | |||||
| // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | |||||
| // OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| //----------------------------------------------------------------------------- | |||||
| #pragma once | |||||
| #include <string> | |||||
| namespace Steinberg { | |||||
| //------------------------------------------------------------------------ | |||||
| /** Reads entire file content | |||||
| \ingroup sdkBase | |||||
| Returns entire file content at the given path | |||||
| \endcode | |||||
| */ | |||||
| std::string readFile (const std::string& path); | |||||
| //------------------------------------------------------------------------ | |||||
| } // namespace Steinberg | |||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -186,6 +186,7 @@ public: | |||||
| const std::string& getName () const noexcept { return name; } | const std::string& getName () const noexcept { return name; } | ||||
| const std::string& getPath () const noexcept { return path; } | const std::string& getPath () const noexcept { return path; } | ||||
| const PluginFactory& getFactory () const noexcept { return factory; } | const PluginFactory& getFactory () const noexcept { return factory; } | ||||
| bool isBundle () const noexcept { return hasBundleStructure; } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| protected: | protected: | ||||
| virtual ~Module () noexcept = default; | virtual ~Module () noexcept = default; | ||||
| @@ -194,6 +195,7 @@ protected: | |||||
| PluginFactory factory {nullptr}; | PluginFactory factory {nullptr}; | ||||
| std::string name; | std::string name; | ||||
| std::string path; | std::string path; | ||||
| bool hasBundleStructure {true}; | |||||
| }; | }; | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -43,23 +43,31 @@ | |||||
| #include <sys/utsname.h> | #include <sys/utsname.h> | ||||
| #include <unistd.h> | #include <unistd.h> | ||||
| #if (__cplusplus >= 201703L) | |||||
| #if SMTG_CPP17 | |||||
| #if __has_include(<filesystem>) | #if __has_include(<filesystem>) | ||||
| #define USE_EXPERIMENTAL_FS 0 | #define USE_EXPERIMENTAL_FS 0 | ||||
| #elif __has_include(<experimental/filesystem>) | #elif __has_include(<experimental/filesystem>) | ||||
| #define USE_EXPERIMENTAL_FS 1 | #define USE_EXPERIMENTAL_FS 1 | ||||
| #endif | #endif | ||||
| #else | |||||
| #else // !SMTG_CPP17 | |||||
| #define USE_EXPERIMENTAL_FS 1 | #define USE_EXPERIMENTAL_FS 1 | ||||
| #endif | |||||
| #endif // SMTG_CPP17 | |||||
| #if USE_EXPERIMENTAL_FS == 1 | #if USE_EXPERIMENTAL_FS == 1 | ||||
| #include <experimental/filesystem> | #include <experimental/filesystem> | ||||
| namespace filesystem = std::experimental::filesystem; | namespace filesystem = std::experimental::filesystem; | ||||
| #else | |||||
| #else // USE_FILESYSTEM == 0 | |||||
| #include <filesystem> | #include <filesystem> | ||||
| namespace filesystem = std::filesystem; | namespace filesystem = std::filesystem; | ||||
| #endif | |||||
| #endif // USE_FILESYSTEM | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| extern "C" { | extern "C" { | ||||
| @@ -347,9 +355,9 @@ Module::SnapshotList Module::getSnapshots (const std::string& modulePath) | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| Optional<std::string> Module::getModuleInfoPath (const std::string& modulePath) | Optional<std::string> Module::getModuleInfoPath (const std::string& modulePath) | ||||
| { | { | ||||
| SnapshotList result; | |||||
| filesystem::path path (modulePath); | filesystem::path path (modulePath); | ||||
| path /= "Contents"; | path /= "Contents"; | ||||
| path /= "Resources"; | |||||
| path /= "moduleinfo.json"; | path /= "moduleinfo.json"; | ||||
| if (filesystem::exists (path)) | if (filesystem::exists (path)) | ||||
| return {path.generic_string ()}; | return {path.generic_string ()}; | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -373,10 +373,10 @@ Optional<std::string> Module::getModuleInfoPath (const std::string& modulePath) | |||||
| auto bundleUrl = [NSURL fileURLWithPath:nsString]; | auto bundleUrl = [NSURL fileURLWithPath:nsString]; | ||||
| if (!bundleUrl) | if (!bundleUrl) | ||||
| return {}; | return {}; | ||||
| auto contentsUrl = [bundleUrl URLByAppendingPathComponent:@"Contents"]; | |||||
| if (!contentsUrl) | |||||
| return {}; | |||||
| auto moduleInfoUrl = [contentsUrl URLByAppendingPathComponent:@"moduleinfo.json"]; | |||||
| auto moduleInfoUrl = [NSBundle URLForResource:@"moduleinfo" | |||||
| withExtension:@"json" | |||||
| subdirectory:nullptr | |||||
| inBundleWithURL:bundleUrl]; | |||||
| if (!moduleInfoUrl) | if (!moduleInfoUrl) | ||||
| return {}; | return {}; | ||||
| NSError* error = nil; | NSError* error = nil; | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -93,6 +93,13 @@ namespace { | |||||
| #define USE_OLE !USE_FILESYSTEM | #define USE_OLE !USE_FILESYSTEM | ||||
| // for testing only | |||||
| #if 0 // DEVELOPMENT | |||||
| #define LOG_ENABLE 1 | |||||
| #else | |||||
| #define LOG_ENABLE 0 | |||||
| #endif | |||||
| #if SMTG_PLATFORM_64 | #if SMTG_PLATFORM_64 | ||||
| #if SMTG_OS_WINDOWS_ARM | #if SMTG_OS_WINDOWS_ARM | ||||
| @@ -201,13 +208,23 @@ public: | |||||
| "LoadLibrary failed with error number : " + std::to_string (lastError); | "LoadLibrary failed with error number : " + std::to_string (lastError); | ||||
| } | } | ||||
| } | } | ||||
| else | |||||
| { | |||||
| hasBundleStructure = false; | |||||
| } | |||||
| return instance; | return instance; | ||||
| } | } | ||||
| //--- ----------------------------------------------------------------------- | //--- ----------------------------------------------------------------------- | ||||
| bool load (const std::string& inPath, std::string& errorDescription) override | bool load (const std::string& inPath, std::string& errorDescription) override | ||||
| { | { | ||||
| if (filesystem::is_directory (inPath)) | |||||
| // filesystem::u8path is deprecated in C++20 | |||||
| #if SMTG_CPP20 | |||||
| const filesystem::path tmp (inPath); | |||||
| #else | |||||
| const filesystem::path tmp = filesystem::u8path (inPath); | |||||
| #endif | |||||
| if (filesystem::is_directory (tmp)) | |||||
| { | { | ||||
| // try as package (bundle) | // try as package (bundle) | ||||
| mModule = loadAsPackage (inPath); | mModule = loadAsPackage (inPath); | ||||
| @@ -357,6 +374,16 @@ VST3::Optional<filesystem::path> resolveShellLink (const filesystem::path& p) | |||||
| #endif | #endif | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| void addToPathList (Module::PathList& pathList, const std::string& toAdd) | |||||
| { | |||||
| #if LOG_ENABLE | |||||
| std::cout << "=> add: " << toAdd << "\n"; | |||||
| #endif | |||||
| pathList.push_back (toAdd); | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| void findFilesWithExt (const filesystem::path& path, const std::string& ext, | void findFilesWithExt (const filesystem::path& path, const std::string& ext, | ||||
| Module::PathList& pathList, bool recursive = true) | Module::PathList& pathList, bool recursive = true) | ||||
| @@ -382,7 +409,7 @@ void findFilesWithExt (const filesystem::path& path, const std::string& ext, | |||||
| filesystem::path result; | filesystem::path result; | ||||
| if (checkVST3Package (finalPath, &result)) | if (checkVST3Package (finalPath, &result)) | ||||
| { | { | ||||
| pathList.push_back (result.generic_string ()); | |||||
| addToPathList (pathList, result.generic_string ()); | |||||
| continue; | continue; | ||||
| } | } | ||||
| } | } | ||||
| @@ -393,7 +420,7 @@ void findFilesWithExt (const filesystem::path& path, const std::string& ext, | |||||
| findFilesWithExt (finalPath, ext, pathList, recursive); | findFilesWithExt (finalPath, ext, pathList, recursive); | ||||
| } | } | ||||
| else if (cpExt == ext) | else if (cpExt == ext) | ||||
| pathList.push_back (finalPath.generic_string ()); | |||||
| addToPathList (pathList, finalPath.generic_string ()); | |||||
| #else | #else | ||||
| const auto& cp = p.path (); | const auto& cp = p.path (); | ||||
| const auto& cpExt = cp.extension (); | const auto& cpExt = cp.extension (); | ||||
| @@ -405,13 +432,13 @@ void findFilesWithExt (const filesystem::path& path, const std::string& ext, | |||||
| filesystem::path result; | filesystem::path result; | ||||
| if (checkVST3Package (p, &result)) | if (checkVST3Package (p, &result)) | ||||
| { | { | ||||
| pathList.push_back (result.generic_u8string ()); | |||||
| addToPathList (pathList, result.generic_u8string ()); | |||||
| continue; | continue; | ||||
| } | } | ||||
| findFilesWithExt (cp, ext, pathList, recursive); | findFilesWithExt (cp, ext, pathList, recursive); | ||||
| } | } | ||||
| else | else | ||||
| pathList.push_back (cp.generic_u8string ()); | |||||
| addToPathList (pathList, cp.generic_u8string ()); | |||||
| } | } | ||||
| else if (recursive) | else if (recursive) | ||||
| { | { | ||||
| @@ -431,13 +458,13 @@ void findFilesWithExt (const filesystem::path& path, const std::string& ext, | |||||
| filesystem::path result; | filesystem::path result; | ||||
| if (checkVST3Package (*resolvedLink, &result)) | if (checkVST3Package (*resolvedLink, &result)) | ||||
| { | { | ||||
| pathList.push_back (result.generic_u8string ()); | |||||
| addToPathList (pathList, result.generic_u8string ()); | |||||
| continue; | continue; | ||||
| } | } | ||||
| findFilesWithExt (*resolvedLink, ext, pathList, recursive); | findFilesWithExt (*resolvedLink, ext, pathList, recursive); | ||||
| } | } | ||||
| else | else | ||||
| pathList.push_back (resolvedLink->generic_u8string ()); | |||||
| addToPathList (pathList, resolvedLink->generic_u8string ()); | |||||
| } | } | ||||
| else if (filesystem::is_directory (*resolvedLink)) | else if (filesystem::is_directory (*resolvedLink)) | ||||
| { | { | ||||
| @@ -502,18 +529,24 @@ Module::PathList Module::getModulePaths () | |||||
| PathList list; | PathList list; | ||||
| if (auto knownFolder = getKnownFolder (FOLDERID_UserProgramFilesCommon)) | if (auto knownFolder = getKnownFolder (FOLDERID_UserProgramFilesCommon)) | ||||
| { | { | ||||
| filesystem::path p (*knownFolder); | |||||
| p.append ("VST3"); | |||||
| findModules (p, list); | |||||
| filesystem::path path (*knownFolder); | |||||
| path.append ("VST3"); | |||||
| #if LOG_ENABLE | |||||
| std::cout << "Check folder: " << path << "\n"; | |||||
| #endif | |||||
| findModules (path, list); | |||||
| } | } | ||||
| if (auto knownFolder = getKnownFolder (FOLDERID_ProgramFilesCommon)) | if (auto knownFolder = getKnownFolder (FOLDERID_ProgramFilesCommon)) | ||||
| { | { | ||||
| filesystem::path p (*knownFolder); | |||||
| p.append ("VST3"); | |||||
| findModules (p, list); | |||||
| filesystem::path path (*knownFolder); | |||||
| path.append ("VST3"); | |||||
| #if LOG_ENABLE | |||||
| std::cout << "Check folder: " << path << "\n"; | |||||
| #endif | |||||
| findModules (path, list); | |||||
| } | } | ||||
| // find plug-ins located in VST3 (application folder) | // find plug-ins located in VST3 (application folder) | ||||
| WCHAR modulePath[kIPPathNameMax]; | WCHAR modulePath[kIPPathNameMax]; | ||||
| GetModuleFileNameW (nullptr, modulePath, kIPPathNameMax); | GetModuleFileNameW (nullptr, modulePath, kIPPathNameMax); | ||||
| @@ -521,6 +554,9 @@ Module::PathList Module::getModulePaths () | |||||
| filesystem::path path (appPath); | filesystem::path path (appPath); | ||||
| path = path.parent_path (); | path = path.parent_path (); | ||||
| path = path.append ("VST3"); | path = path.append ("VST3"); | ||||
| #if LOG_ENABLE | |||||
| std::cout << "Check folder: " << path << "\n"; | |||||
| #endif | |||||
| findModules (path, list); | findModules (path, list); | ||||
| return list; | return list; | ||||
| @@ -540,6 +576,7 @@ Optional<std::string> Module::getModuleInfoPath (const std::string& modulePath) | |||||
| path = Optional<filesystem::path> {p}; | path = Optional<filesystem::path> {p}; | ||||
| } | } | ||||
| *path /= "Resources"; | |||||
| *path /= "moduleinfo.json"; | *path /= "moduleinfo.json"; | ||||
| if (filesystem::exists (*path)) | if (filesystem::exists (*path)) | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -81,8 +81,8 @@ struct Iterator | |||||
| bool operator== (const Iterator& other) const { return other.el == el; } | bool operator== (const Iterator& other) const { return other.el == el; } | ||||
| bool operator!= (const Iterator& other) const { return other.el != el; } | bool operator!= (const Iterator& other) const { return other.el != el; } | ||||
| JsonElement operator* () const { return el; } | |||||
| JsonElement operator-> () const { return el; } | |||||
| const JsonElement& operator* () const { return el; } | |||||
| const JsonElement& operator-> () const { return el; } | |||||
| Iterator& operator++ () | Iterator& operator++ () | ||||
| { | { | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -306,4 +306,4 @@ void outputJson (const ModuleInfo& info, std::ostream& output) | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| } // Steinberg::ModuelInfoLib | |||||
| } // Steinberg::ModuleInfoLib | |||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -38,8 +38,8 @@ | |||||
| #include "moduleinfoparser.h" | #include "moduleinfoparser.h" | ||||
| #include "jsoncxx.h" | #include "jsoncxx.h" | ||||
| #include "pluginterfaces/base/ipluginbase.h" | #include "pluginterfaces/base/ipluginbase.h" | ||||
| #include <stdexcept> | |||||
| #include <limits> | #include <limits> | ||||
| #include <stdexcept> | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| namespace Steinberg::ModuleInfoLib { | namespace Steinberg::ModuleInfoLib { | ||||
| @@ -141,7 +141,7 @@ struct ModuleInfoJsonParser | |||||
| uint32_t parsed {0}; | uint32_t parsed {0}; | ||||
| if (auto obj = value.asObject ()) | if (auto obj = value.asObject ()) | ||||
| { | { | ||||
| for (const auto el : *obj) | |||||
| for (const auto& el : *obj) | |||||
| { | { | ||||
| auto elementName = el.name ().text (); | auto elementName = el.name ().text (); | ||||
| if (elementName == "Vendor") | if (elementName == "Vendor") | ||||
| @@ -172,7 +172,7 @@ struct ModuleInfoJsonParser | |||||
| auto flags = el.value ().asObject (); | auto flags = el.value ().asObject (); | ||||
| if (!flags) | if (!flags) | ||||
| throw parse_error ("Expect 'Flags' to be a JSON Object", el.name ()); | throw parse_error ("Expect 'Flags' to be a JSON Object", el.name ()); | ||||
| for (const auto flag : *flags) | |||||
| for (const auto& flag : *flags) | |||||
| { | { | ||||
| auto flagName = flag.name ().text (); | auto flagName = flag.name ().text (); | ||||
| auto flagValue = flag.value ().asBoolean (); | auto flagValue = flag.value ().asBoolean (); | ||||
| @@ -229,7 +229,7 @@ struct ModuleInfoJsonParser | |||||
| auto array = value.asArray (); | auto array = value.asArray (); | ||||
| if (!array) | if (!array) | ||||
| throw parse_error ("Expect Classes Array", value); | throw parse_error ("Expect Classes Array", value); | ||||
| for (const auto classInfoEl : *array) | |||||
| for (const auto& classInfoEl : *array) | |||||
| { | { | ||||
| auto classInfo = classInfoEl.value ().asObject (); | auto classInfo = classInfoEl.value ().asObject (); | ||||
| if (!classInfo) | if (!classInfo) | ||||
| @@ -239,7 +239,7 @@ struct ModuleInfoJsonParser | |||||
| uint32_t parsed {0}; | uint32_t parsed {0}; | ||||
| for (const auto el : *classInfo) | |||||
| for (const auto& el : *classInfo) | |||||
| { | { | ||||
| auto elementName = el.name ().text (); | auto elementName = el.name ().text (); | ||||
| if (elementName == "CID") | if (elementName == "CID") | ||||
| @@ -291,7 +291,7 @@ struct ModuleInfoJsonParser | |||||
| auto subCatArr = el.value ().asArray (); | auto subCatArr = el.value ().asArray (); | ||||
| if (!subCatArr) | if (!subCatArr) | ||||
| throw parse_error ("Expect Array here", el.value ()); | throw parse_error ("Expect Array here", el.value ()); | ||||
| for (const auto catEl : *subCatArr) | |||||
| for (const auto& catEl : *subCatArr) | |||||
| { | { | ||||
| auto cat = getText (catEl.value ()); | auto cat = getText (catEl.value ()); | ||||
| ci.subCategories.emplace_back (cat); | ci.subCategories.emplace_back (cat); | ||||
| @@ -319,13 +319,13 @@ struct ModuleInfoJsonParser | |||||
| auto snapArr = el.value ().asArray (); | auto snapArr = el.value ().asArray (); | ||||
| if (!snapArr) | if (!snapArr) | ||||
| throw parse_error ("Expect Array here", el.value ()); | throw parse_error ("Expect Array here", el.value ()); | ||||
| for (const auto snapEl : *snapArr) | |||||
| for (const auto& snapEl : *snapArr) | |||||
| { | { | ||||
| auto snap = snapEl.value ().asObject (); | auto snap = snapEl.value ().asObject (); | ||||
| if (!snap) | if (!snap) | ||||
| throw parse_error ("Expect Object here", snapEl.value ()); | throw parse_error ("Expect Object here", snapEl.value ()); | ||||
| ModuleInfo::Snapshot snapshot; | ModuleInfo::Snapshot snapshot; | ||||
| for (const auto spEl : *snap) | |||||
| for (const auto& spEl : *snap) | |||||
| { | { | ||||
| auto spElName = spEl.name ().text (); | auto spElName = spEl.name ().text (); | ||||
| if (spElName == "Path") | if (spElName == "Path") | ||||
| @@ -369,14 +369,14 @@ struct ModuleInfoJsonParser | |||||
| auto arr = value.asArray (); | auto arr = value.asArray (); | ||||
| if (!arr) | if (!arr) | ||||
| throw parse_error ("Expect Array here", value); | throw parse_error ("Expect Array here", value); | ||||
| for (const auto el : *arr) | |||||
| for (const auto& el : *arr) | |||||
| { | { | ||||
| auto obj = el.value ().asObject (); | auto obj = el.value ().asObject (); | ||||
| if (!obj) | if (!obj) | ||||
| throw parse_error ("Expect Object here", el.value ()); | throw parse_error ("Expect Object here", el.value ()); | ||||
| ModuleInfo::Compatibility compat; | ModuleInfo::Compatibility compat; | ||||
| for (const auto objEl : *obj) | |||||
| for (const auto& objEl : *obj) | |||||
| { | { | ||||
| auto elementName = objEl.name ().text (); | auto elementName = objEl.name ().text (); | ||||
| if (elementName == "New") | if (elementName == "New") | ||||
| @@ -386,7 +386,7 @@ struct ModuleInfoJsonParser | |||||
| auto oldElArr = objEl.value ().asArray (); | auto oldElArr = objEl.value ().asArray (); | ||||
| if (!oldElArr) | if (!oldElArr) | ||||
| throw parse_error ("Expect Array here", objEl.value ()); | throw parse_error ("Expect Array here", objEl.value ()); | ||||
| for (const auto old : *oldElArr) | |||||
| for (const auto& old : *oldElArr) | |||||
| { | { | ||||
| compat.oldCID.emplace_back (getText (old.value ())); | compat.oldCID.emplace_back (getText (old.value ())); | ||||
| } | } | ||||
| @@ -416,7 +416,7 @@ struct ModuleInfoJsonParser | |||||
| }; | }; | ||||
| uint32_t parsed {0}; | uint32_t parsed {0}; | ||||
| for (const auto el : *docObj) | |||||
| for (const auto& el : *docObj) | |||||
| { | { | ||||
| auto elementName = el.name ().text (); | auto elementName = el.name ().text (); | ||||
| if (elementName == "Name") | if (elementName == "Name") | ||||
| @@ -9,7 +9,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -120,7 +120,7 @@ extern std::string convert (const std::u16string& str); | |||||
| extern std::string convert (const char* str, uint32_t max); | extern std::string convert (const char* str, uint32_t max); | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| } // String | |||||
| } // StringConvert | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| inline const Steinberg::Vst::TChar* toTChar (const std::u16string& str) | inline const Steinberg::Vst::TChar* toTChar (const std::u16string& str) | ||||
| @@ -128,5 +128,20 @@ inline const Steinberg::Vst::TChar* toTChar (const std::u16string& str) | |||||
| return reinterpret_cast<const Steinberg::Vst::TChar*> (str.data ()); | return reinterpret_cast<const Steinberg::Vst::TChar*> (str.data ()); | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| /** | |||||
| * convert an number to an UTF-16 string | |||||
| * | |||||
| * @param value number | |||||
| * | |||||
| * @return UTF-16 string | |||||
| */ | |||||
| template<typename NumberT> | |||||
| std::u16string toString (NumberT value) | |||||
| { | |||||
| auto u8str = std::to_string (value); | |||||
| return StringConvert::convert (u8str); | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| } // VST3 | } // VST3 | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -50,7 +50,8 @@ Bus::Bus (const TChar* _name, BusType _busType, int32 _flags) | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| bool Bus::getInfo (BusInfo& info) | bool Bus::getInfo (BusInfo& info) | ||||
| { | { | ||||
| name.copyTo16 (info.name, 0, str16BufferSize (info.name) - 1); | |||||
| memset (info.name, 0, sizeof (String128)); | |||||
| name.copy (info.name, 128); | |||||
| info.busType = busType; | info.busType = busType; | ||||
| info.flags = flags; | info.flags = flags; | ||||
| return true; | return true; | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -37,10 +37,13 @@ | |||||
| #pragma once | #pragma once | ||||
| #include "base/source/fobject.h" | #include "base/source/fobject.h" | ||||
| #include "base/source/fstring.h" | |||||
| #include "pluginterfaces/vst/ivstcomponent.h" | #include "pluginterfaces/vst/ivstcomponent.h" | ||||
| #include "pluginterfaces/vst/ivstaudioprocessor.h" | #include "pluginterfaces/vst/ivstaudioprocessor.h" | ||||
| #include <string> | |||||
| #if SMTG_CPP_17 | |||||
| #include <string_view> | |||||
| #endif | |||||
| #include <vector> | #include <vector> | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -64,8 +67,13 @@ public: | |||||
| /** Activates the bus. */ | /** Activates the bus. */ | ||||
| void setActive (TBool state) { active = state; } | void setActive (TBool state) { active = state; } | ||||
| #if SMTG_CPP_17 | |||||
| /** Sets a new name for this bus. */ | /** Sets a new name for this bus. */ | ||||
| void setName (String newName) { name = newName; } | |||||
| void setName (std::u16string_view newName) { name = newName; } | |||||
| #else | |||||
| /** Sets a new name for this bus. */ | |||||
| void setName (const std::u16string& newName) { name = newName; } | |||||
| #endif | |||||
| /** Sets a new busType for this bus. */ | /** Sets a new busType for this bus. */ | ||||
| void setBusType (BusType newBusType) { busType = newBusType; } | void setBusType (BusType newBusType) { busType = newBusType; } | ||||
| @@ -79,7 +87,7 @@ public: | |||||
| OBJ_METHODS (Vst::Bus, FObject) | OBJ_METHODS (Vst::Bus, FObject) | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| protected: | protected: | ||||
| String name; ///< name | |||||
| std::u16string name; ///< name | |||||
| BusType busType; ///< kMain or kAux, see \ref BusTypes | BusType busType; ///< kMain or kAux, see \ref BusTypes | ||||
| int32 flags; ///< flags, see \ref BusInfo::BusFlags | int32 flags; ///< flags, see \ref BusInfo::BusFlags | ||||
| TBool active; ///< activation state | TBool active; ///< activation state | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -70,7 +70,7 @@ BusList* Component::getBusList (MediaType type, BusDirection dir) | |||||
| { | { | ||||
| if (type == kAudio) | if (type == kAudio) | ||||
| return dir == kInput ? &audioInputs : &audioOutputs; | return dir == kInput ? &audioInputs : &audioOutputs; | ||||
| else if (type == kEvent) | |||||
| if (type == kEvent) | |||||
| return dir == kInput ? &eventInputs : &eventOutputs; | return dir == kInput ? &eventInputs : &eventOutputs; | ||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -349,6 +349,8 @@ bool EditControllerEx1::addUnit (Unit* unit) | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| tresult PLUGIN_API EditControllerEx1::getUnitInfo (int32 unitIndex, UnitInfo& info /*out*/) | tresult PLUGIN_API EditControllerEx1::getUnitInfo (int32 unitIndex, UnitInfo& info /*out*/) | ||||
| { | { | ||||
| if (unitIndex < 0 || unitIndex >= static_cast<int32> (units.size ())) | |||||
| return kResultFalse; | |||||
| if (Unit* unit = units.at (unitIndex)) | if (Unit* unit = units.at (unitIndex)) | ||||
| { | { | ||||
| info = unit->getInfo (); | info = unit->getInfo (); | ||||
| @@ -559,9 +561,10 @@ tresult ProgramList::getProgramInfo (int32 programIndex, CString attributeId, | |||||
| StringMap::const_iterator it = programInfos[programIndex].find (attributeId); | StringMap::const_iterator it = programInfos[programIndex].find (attributeId); | ||||
| if (it != programInfos[programIndex].end ()) | if (it != programInfos[programIndex].end ()) | ||||
| { | { | ||||
| if (!it->second.isEmpty ()) | |||||
| if (!it->second.empty ()) | |||||
| { | { | ||||
| it->second.copyTo16 (value, 0, 128); | |||||
| memset (value, 0, sizeof (String128)); | |||||
| it->second.copy (value, 128); | |||||
| return kResultTrue; | return kResultTrue; | ||||
| } | } | ||||
| } | } | ||||
| @@ -574,7 +577,8 @@ tresult ProgramList::getProgramName (int32 programIndex, String128 name /*out*/) | |||||
| { | { | ||||
| if (programIndex >= 0 && programIndex < static_cast<int32> (programNames.size ())) | if (programIndex >= 0 && programIndex < static_cast<int32> (programNames.size ())) | ||||
| { | { | ||||
| programNames.at (programIndex).copyTo16 (name, 0, 128); | |||||
| memset (name, 0, sizeof (String128)); | |||||
| programNames.at (programIndex).copy (name, 128); | |||||
| return kResultTrue; | return kResultTrue; | ||||
| } | } | ||||
| return kResultFalse; | return kResultFalse; | ||||
| @@ -606,7 +610,7 @@ Parameter* ProgramList::getParameter () | |||||
| unitId); | unitId); | ||||
| for (const auto& programName : programNames) | for (const auto& programName : programNames) | ||||
| { | { | ||||
| listParameter->appendString (programName); | |||||
| listParameter->appendString (programName.data ()); | |||||
| } | } | ||||
| parameter = listParameter; | parameter = listParameter; | ||||
| } | } | ||||
| @@ -684,7 +688,8 @@ tresult ProgramListWithPitchNames::getPitchName (int32 programIndex, int16 midiP | |||||
| PitchNameMap::const_iterator it = pitchNames[programIndex].find (midiPitch); | PitchNameMap::const_iterator it = pitchNames[programIndex].find (midiPitch); | ||||
| if (it != pitchNames[programIndex].end ()) | if (it != pitchNames[programIndex].end ()) | ||||
| { | { | ||||
| it->second.copyTo16 (name, 0, 128); | |||||
| memset (name, 0, sizeof (String128)); | |||||
| it->second.copy (name, 128); | |||||
| return kResultTrue; | return kResultTrue; | ||||
| } | } | ||||
| } | } | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -39,13 +39,13 @@ | |||||
| #include "public.sdk/source/vst/vstcomponentbase.h" | #include "public.sdk/source/vst/vstcomponentbase.h" | ||||
| #include "public.sdk/source/vst/vstparameters.h" | #include "public.sdk/source/vst/vstparameters.h" | ||||
| #include "public.sdk/source/common/pluginview.h" | #include "public.sdk/source/common/pluginview.h" | ||||
| #include "base/source/fstring.h" | |||||
| #include "pluginterfaces/vst/ivsteditcontroller.h" | #include "pluginterfaces/vst/ivsteditcontroller.h" | ||||
| #include "pluginterfaces/vst/ivstunits.h" | #include "pluginterfaces/vst/ivstunits.h" | ||||
| #include <vector> | |||||
| #include <map> | #include <map> | ||||
| #include <string> | |||||
| #include <vector> | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| namespace Steinberg { | namespace Steinberg { | ||||
| @@ -241,8 +241,8 @@ public: | |||||
| OBJ_METHODS (ProgramList, FObject) | OBJ_METHODS (ProgramList, FObject) | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| protected: | protected: | ||||
| using StringMap = std::map<String, String>; | |||||
| using StringVector = std::vector<String>; | |||||
| using StringMap = std::map<std::string, std::u16string>; | |||||
| using StringVector = std::vector<std::u16string>; | |||||
| using ProgramInfoVector = std::vector<StringMap>; | using ProgramInfoVector = std::vector<StringMap>; | ||||
| ProgramListInfo info; | ProgramListInfo info; | ||||
| UnitID unitId; | UnitID unitId; | ||||
| @@ -275,7 +275,7 @@ public: | |||||
| OBJ_METHODS (ProgramListWithPitchNames, ProgramList) | OBJ_METHODS (ProgramListWithPitchNames, ProgramList) | ||||
| protected: | protected: | ||||
| using PitchNameMap = std::map<int16, String>; | |||||
| using PitchNameMap = std::map<int16, std::u16string>; | |||||
| using PitchNamesVector = std::vector<PitchNameMap>; | using PitchNamesVector = std::vector<PitchNameMap>; | ||||
| PitchNamesVector pitchNames; | PitchNamesVector pitchNames; | ||||
| }; | }; | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -45,14 +45,13 @@ namespace Vst { | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| // Parameter Implementation | // Parameter Implementation | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| Parameter::Parameter () : valueNormalized (0.), precision (4) | |||||
| Parameter::Parameter () | |||||
| { | { | ||||
| info = {}; | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| Parameter::Parameter (const ParameterInfo& info) | Parameter::Parameter (const ParameterInfo& info) | ||||
| : info (info), valueNormalized (info.defaultNormalizedValue), precision (4) | |||||
| : info (info), valueNormalized (info.defaultNormalizedValue) | |||||
| { | { | ||||
| } | } | ||||
| @@ -60,10 +59,7 @@ Parameter::Parameter (const ParameterInfo& info) | |||||
| Parameter::Parameter (const TChar* title, ParamID tag, const TChar* units, | Parameter::Parameter (const TChar* title, ParamID tag, const TChar* units, | ||||
| ParamValue defaultValueNormalized, int32 stepCount, int32 flags, | ParamValue defaultValueNormalized, int32 stepCount, int32 flags, | ||||
| UnitID unitID, const TChar* shortTitle) | UnitID unitID, const TChar* shortTitle) | ||||
| : precision (4) | |||||
| { | { | ||||
| info = {}; | |||||
| UString (info.title, str16BufferSize (String128)).assign (title); | UString (info.title, str16BufferSize (String128)).assign (title); | ||||
| if (units) | if (units) | ||||
| UString (info.units, str16BufferSize (String128)).assign (units); | UString (info.units, str16BufferSize (String128)).assign (units); | ||||
| @@ -302,7 +298,7 @@ bool StringListParameter::replaceString (int32 index, const String128 string) | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| void StringListParameter::toString (ParamValue _valueNormalized, String128 string) const | void StringListParameter::toString (ParamValue _valueNormalized, String128 string) const | ||||
| { | { | ||||
| int32 index = (int32)toPlain (_valueNormalized); | |||||
| int32 index = static_cast<int32> (toPlain (_valueNormalized)); | |||||
| if (const TChar* valueString = strings.at (index)) | if (const TChar* valueString = strings.at (index)) | ||||
| { | { | ||||
| UString (string, str16BufferSize (String128)).assign (valueString); | UString (string, str16BufferSize (String128)).assign (valueString); | ||||
| @@ -345,7 +341,7 @@ ParamValue StringListParameter::toNormalized (ParamValue plainValue) const | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| // ParameterContainer Implementation | // ParameterContainer Implementation | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| ParameterContainer::ParameterContainer () : params (nullptr) | |||||
| ParameterContainer::ParameterContainer () | |||||
| { | { | ||||
| } | } | ||||
| @@ -389,6 +385,14 @@ Parameter* ParameterContainer::addParameter (const ParameterInfo& info) | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| //------------------------------------------------------------------------ | |||||
| Parameter* ParameterContainer::getParameterByIndex (int32 index) const | |||||
| { | |||||
| if (!params || index < 0 || index >= static_cast<int32> (params->size ())) | |||||
| return nullptr; | |||||
| return params->at (index); | |||||
| } | |||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| Parameter* ParameterContainer::getParameter (ParamID tag) const | Parameter* ParameterContainer::getParameter (ParamID tag) const | ||||
| { | { | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -98,9 +98,9 @@ public: | |||||
| OBJ_METHODS (Parameter, FObject) | OBJ_METHODS (Parameter, FObject) | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| protected: | protected: | ||||
| ParameterInfo info; | |||||
| ParamValue valueNormalized; | |||||
| int32 precision; | |||||
| ParameterInfo info {0}; | |||||
| ParamValue valueNormalized {0.}; | |||||
| int32 precision {4}; | |||||
| }; | }; | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -212,7 +212,7 @@ public: | |||||
| int32 getParameterCount () const { return params ? static_cast<int32> (params->size ()) : 0; } | int32 getParameterCount () const { return params ? static_cast<int32> (params->size ()) : 0; } | ||||
| /** Gets parameter by index. */ | /** Gets parameter by index. */ | ||||
| Parameter* getParameterByIndex (int32 index) const { return params ? params->at (index) : nullptr; } | |||||
| Parameter* getParameterByIndex (int32 index) const; | |||||
| /** Removes all parameters. */ | /** Removes all parameters. */ | ||||
| void removeAll () | void removeAll () | ||||
| @@ -231,7 +231,7 @@ public: | |||||
| protected: | protected: | ||||
| using ParameterPtrVector = std::vector<IPtr<Parameter>>; | using ParameterPtrVector = std::vector<IPtr<Parameter>>; | ||||
| using IndexMap = std::map<ParamID, ParameterPtrVector::size_type>; | using IndexMap = std::map<ParamID, ParameterPtrVector::size_type>; | ||||
| ParameterPtrVector* params; | |||||
| ParameterPtrVector* params {nullptr}; | |||||
| IndexMap id2index; | IndexMap id2index; | ||||
| }; | }; | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -176,7 +176,7 @@ bool PresetFile::loadPreset (IBStream* stream, const FUID& classID, IComponent* | |||||
| } | } | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| PresetFile::PresetFile (IBStream* stream) : stream (stream), entryCount (0) | |||||
| PresetFile::PresetFile (IBStream* stream) : stream (stream) | |||||
| { | { | ||||
| memset (entries, 0, sizeof (entries)); | memset (entries, 0, sizeof (entries)); | ||||
| @@ -780,7 +780,7 @@ tresult PLUGIN_API ReadOnlyBStream::read (void* buffer, int32 numBytes, int32* n | |||||
| if (!sourceStream) | if (!sourceStream) | ||||
| return kNotInitialized; | return kNotInitialized; | ||||
| int32 maxBytesToRead = (int32) (sectionSize - seekPosition); | |||||
| int32 maxBytesToRead = static_cast<int32> (sectionSize - seekPosition); | |||||
| if (numBytes > maxBytesToRead) | if (numBytes > maxBytesToRead) | ||||
| numBytes = maxBytesToRead; | numBytes = maxBytesToRead; | ||||
| if (numBytes <= 0) | if (numBytes <= 0) | ||||
| @@ -8,7 +8,7 @@ | |||||
| // | // | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // LICENSE | // LICENSE | ||||
| // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| // (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| // Redistribution and use in source and binary forms, with or without modification, | // Redistribution and use in source and binary forms, with or without modification, | ||||
| // are permitted provided that the following conditions are met: | // are permitted provided that the following conditions are met: | ||||
| @@ -124,7 +124,7 @@ public: | |||||
| TSize size; | TSize size; | ||||
| }; | }; | ||||
| IBStream* getStream () { return stream; } ///< Returns the associated stream. | |||||
| IBStream* getStream () const { return stream; } ///< Returns the associated stream. | |||||
| const FUID& getClassID () const { return classID; } ///< Returns the associated classID (component ID: Processor part (not the controller!)). | const FUID& getClassID () const { return classID; } ///< Returns the associated classID (component ID: Processor part (not the controller!)). | ||||
| void setClassID (const FUID& uid) { classID = uid; }///< Sets the associated classID (component ID: Processor part (not the controller!)). | void setClassID (const FUID& uid) { classID = uid; }///< Sets the associated classID (component ID: Processor part (not the controller!)). | ||||
| @@ -223,7 +223,7 @@ protected: | |||||
| FUID classID; ///< classID is the FUID of the component (processor) part | FUID classID; ///< classID is the FUID of the component (processor) part | ||||
| enum { kMaxEntries = 128 }; | enum { kMaxEntries = 128 }; | ||||
| Entry entries[kMaxEntries]; | Entry entries[kMaxEntries]; | ||||
| int32 entryCount; | |||||
| int32 entryCount {0}; | |||||
| }; | }; | ||||
| //------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||||
| @@ -92,6 +92,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-W#warnings", | |||||
| #include <pluginterfaces/base/conststringtable.h> | #include <pluginterfaces/base/conststringtable.h> | ||||
| #include <pluginterfaces/base/funknown.h> | #include <pluginterfaces/base/funknown.h> | ||||
| #include <pluginterfaces/base/ipluginbase.h> | #include <pluginterfaces/base/ipluginbase.h> | ||||
| #include <pluginterfaces/base/iplugincompatibility.h> | |||||
| #include <pluginterfaces/base/ustring.h> | #include <pluginterfaces/base/ustring.h> | ||||
| #include <pluginterfaces/gui/iplugview.h> | #include <pluginterfaces/gui/iplugview.h> | ||||
| #include <pluginterfaces/gui/iplugviewcontentscalesupport.h> | #include <pluginterfaces/gui/iplugviewcontentscalesupport.h> | ||||