diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX.h index f742e860a7..7c14c98d6f 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -45,48 +45,11 @@ #define _AAX_H_ /// @endcond +#include "AAX_EnvironmentUtilities.h" + #include #include - -#include "AAX_Version.h" -#include "AAX_Enums.h" -#include "AAX_Errors.h" -#include "AAX_Properties.h" - - - -/** @name C++ compiler macros - */ -//@{ -/** @def TI_VERSION - @brief Preprocessor flag indicating compilation for TI - */ -/** @def AAX_CPP11_SUPPORT - @brief Preprocessor toggle for code which requires C++11 compiler support - */ -//@} C++ compiler macros - -#ifndef TI_VERSION - #if defined _TMS320C6X - #define TI_VERSION 1 - #elif defined DOXYGEN_PREPROCESSOR - #define TI_VERSION 0 - #endif -#endif - - -#ifndef AAX_CPP11_SUPPORT - #if (defined __cplusplus) && (__cplusplus >= 201103L) - #define AAX_CPP11_SUPPORT 1 - // VS2015 supports all features except expression SFINAE - #elif ((defined _MSVC_LANG) && (_MSVC_LANG >= 201402)) - #define AAX_CPP11_SUPPORT 1 - // Let Doxygen see the C++11 version of all code - #elif defined DOXYGEN_PREPROCESSOR - #define AAX_CPP11_SUPPORT 1 - #endif -#endif - +#include /** @name C++ keyword macros @@ -343,7 +306,8 @@ typedef int64_t AAX_CTimeOfDay; //!< Hardware running clock value. MIDI pac typedef int64_t AAX_CTransportCounter; //!< Offset of samples from transport start. Same as TimeOfDay, but added for new interfaces as TimeOfDay is a confusing name. typedef float AAX_CSampleRate; //!< Literal sample rate value used by the \ref AAX_IComponentDescriptor::AddSampleRate() "sample rate field". For \ref AAX_eProperty_SampleRate, use a mask of \ref AAX_ESampleRateMask. \sa sampleRateInMask -typedef uint32_t AAX_CTypeID; //!< Matches type of OSType used in classic plugins. +typedef uint32_t AAX_CTypeID; //!< Matches type of OSType used in classic plugins. All type IDs with prefix 'AX', i.e. 0x4158____, are reserved for Avid. +AAX_CONSTEXPR AAX_CTypeID kAAX_TypeID_Undefined = 0; //!< Undefined type ID. This value must not be used for properties requiring a \ref AAX_CTypeID typedef int32_t AAX_Result; typedef int32_t AAX_CPropertyValue; //!< \brief 32-bit property values \details Use this property value type for all properties unless otherwise specified by the property documentation typedef int64_t AAX_CPropertyValue64; //!< \brief 64-bit property values \details Do not use this value type unless specified explicitly in the property documentation @@ -362,6 +326,12 @@ typedef AAX_CSelector AAX_CMeterID; //!< \todo Not used by %AAX plug-ins typedef const char * AAX_CParamID; //!< Parameter identifier \note While this is a string, it must be less than 32 characters in length. (strlen of 31 or less) \sa \ref kAAX_ParameterIdentifierMaxSize typedef AAX_CParamID AAX_CPageTableParamID; //!< \brief Parameter identifier used in a page table \details May be a parameter ID or a parameter name string depending on the page table formatting. Must be less than 32 characters in length (strlen of 31 or less.) \sa \ref subsection_parameter_identifiers in the \ref AAX_Page_Table_Guide typedef const char * AAX_CEffectID; //!< URL-style Effect identifier. Must be unique among all registered effects in the collection. +typedef uint32_t AAX_CInstanceID; //!< Identifier for a plug-in instance +AAX_CONSTEXPR AAX_CInstanceID kAAX_InstanceID_Undefined = 0xFFFFFFFF; //!< Undefined instance ID +typedef uint64_t AAX_CInstanceGroupID; //!< Identifier for a group of instances +AAX_CONSTEXPR AAX_CInstanceGroupID kAAX_InstanceGroupID_Undefined = 0; //!< Undefined instance group ID; instances with this ID have undefined grouping or the host does not support group identification +typedef uint64_t AAX_CTaskID; //!< Identifier for a task instance +AAX_CONSTEXPR AAX_CTaskID kAAX_TaskID_Undefined = 0; //!< Undefined task ID // Forward declarations required for AAX_Feature_UID typedef (the "real" typedef is in AAX_UIDs.h) struct _acfUID; @@ -392,21 +362,6 @@ static const AAX_CTimestamp kAAX_Never = (AAX_CTimestamp) ~0ULL; #endif -/** - - \todo Not used by %AAX plug-ins - remove? - - */ -static -inline -int32_t -AAX_GetStemFormatChannelCount ( - AAX_EStemFormat inStemFormat) -{ - return AAX_STEM_FORMAT_CHANNEL_COUNT (inStemFormat); -} - - /*! \brief %AAX algorithm audio input port data type * * \details @@ -444,60 +399,6 @@ typedef float * const * AAX_CAudioOutPort; typedef float * const AAX_CMeterPort; -/*! \brief Determines whether a particular \ref AAX_CSampleRate is present - in a given mask of \ref AAX_ESampleRateMask. - - \details - \sa kAAX_Property_SampleRate - */ -inline AAX_CBoolean sampleRateInMask(AAX_CSampleRate inSR, uint32_t iMask) -{ - return static_cast( - (44100.0 == inSR) ? ((iMask & AAX_eSampleRateMask_44100) != 0) : - (48000.0 == inSR) ? ((iMask & AAX_eSampleRateMask_48000) != 0) : - (88200.0 == inSR) ? ((iMask & AAX_eSampleRateMask_88200) != 0) : - (96000.0 == inSR) ? ((iMask & AAX_eSampleRateMask_96000) != 0) : - (176400.0 == inSR) ? ((iMask & AAX_eSampleRateMask_176400) != 0) : - (192000.0 == inSR) ? ((iMask & AAX_eSampleRateMask_192000) != 0) : false - ); -} - -/*! \brief Converts from a mask of \ref AAX_ESampleRateMask to the lowest - supported \ref AAX_CSampleRate value in Hz - - */ -inline AAX_CSampleRate getLowestSampleRateInMask(uint32_t iMask) -{ - return ( - ((iMask & AAX_eSampleRateMask_44100) != 0) ? 44100.0f : // AAX_eSamplRateMask_All returns 44100 - ((iMask & AAX_eSampleRateMask_48000) != 0) ? 48000.0f : - ((iMask & AAX_eSampleRateMask_88200) != 0) ? 88200.0f : - ((iMask & AAX_eSampleRateMask_96000) != 0) ? 96000.0f : - ((iMask & AAX_eSampleRateMask_176400) != 0) ? 176400.0f : - ((iMask & AAX_eSampleRateMask_192000) != 0) ? 192000.0f : 0.0f - ); -} - -/*! \brief Returns the \ref AAX_ESampleRateMask selector for a literal - sample rate. - - The given rate must be an exact match with one of the available - selectors. If no exact match is found then - \ref AAX_eSampleRateMask_No is returned. - */ -inline uint32_t getMaskForSampleRate(float inSR) -{ - return ( - (44100.0 == inSR) ? AAX_eSampleRateMask_44100 : - (48000.0 == inSR) ? AAX_eSampleRateMask_48000 : - (88200.0 == inSR) ? AAX_eSampleRateMask_88200 : - (96000.0 == inSR) ? AAX_eSampleRateMask_96000 : - (176400.0 == inSR) ? AAX_eSampleRateMask_176400 : - (192000.0 == inSR) ? AAX_eSampleRateMask_192000 : AAX_eSampleRateMask_No - ); -} - - #ifndef _TMS320C6X #include AAX_ALIGN_FILE_BEGIN @@ -567,7 +468,19 @@ struct AAX_SPlugInIdentifierTriad { AAX_CTypeID mManufacturerID; ///< The Plug-In's manufacturer ID AAX_CTypeID mProductID; ///< The Plug-In's product (Effect) ID AAX_CTypeID mPlugInID; ///< The ID of a specific type in the product (Effect) + + bool IsUndefined() const + { + return mManufacturerID == kAAX_TypeID_Undefined + && mProductID == kAAX_TypeID_Undefined + && mPlugInID == kAAX_TypeID_Undefined; + } + bool IsSameProduct(const AAX_SPlugInIdentifierTriad& inRHS) const + { + return mManufacturerID == inRHS.mManufacturerID && mProductID == inRHS.mProductID; + } }; + typedef struct AAX_SPlugInIdentifierTriad AAX_SPlugInIdentifierTriad, *AAX_SPlugInIdentifierTriadPtr; #ifndef _TMS320C6X @@ -620,6 +533,32 @@ static inline bool operator<=(const AAX_SPlugInIdentifierTriad & lhs, const AAX_ { return false == operator>(lhs, rhs); } + +struct AAX_SPlugInIdentifierHash +{ + size_t operator()(const AAX_SPlugInIdentifierTriad& inPIDef) const + { + size_t const h1 = std::hash{}(inPIDef.mManufacturerID); + size_t const h2 = std::hash{}(inPIDef.mProductID); + size_t const h3 = std::hash{}(inPIDef.mPlugInID); + return std::hash{}(h1 ^ (h2 << 1) ^ (h3 << 2)); // Combine the hashes + } +}; + +struct AAX_SPlugInIdentifierTriadProductHash +{ + size_t operator()(const AAX_SPlugInIdentifierTriad& inPIDef) const + { + return std::hash{}( (static_cast(inPIDef.mManufacturerID) << 32) + inPIDef.mProductID ); + } +}; + +struct AAX_SPlugInIdentifierTriadProductEqual +{ + bool operator()(const AAX_SPlugInIdentifierTriad& lhs, const AAX_SPlugInIdentifierTriad& rhs) const { return lhs.IsSameProduct(rhs); } +}; + + #endif //TI_VERSION @@ -690,6 +629,19 @@ struct AAX_CMidiStream #endif #endif + +// DEPRECATED: Client code should include these headers where needed. They will be removed from AAX.h in future. +#ifndef AAX_SDK__AAX_H_INCLUDES_ADDITIONAL_HEADERS +#define AAX_SDK__AAX_H_INCLUDES_ADDITIONAL_HEADERS 1 +#endif + +#if AAX_SDK__AAX_H_INCLUDES_ADDITIONAL_HEADERS +#include "AAX_Version.h" +#include "AAX_Enums.h" +#include "AAX_Errors.h" +#include "AAX_Properties.h" +#endif + /// @cond ignore #endif // #ifndef _AAX_H_ /// @endcond diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CArrayDataBuffer.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CArrayDataBuffer.h index 07482f769b..6f4ce841eb 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CArrayDataBuffer.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CArrayDataBuffer.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -36,7 +36,7 @@ #include "AAX_IDataBuffer.h" #include "AAX.h" -#include +#include #include #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryDisplayDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryDisplayDelegate.h index 8a41431224..f907385f39 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryDisplayDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryDisplayDelegate.h @@ -53,7 +53,7 @@ This display delegate converts a parameter value to one of two provided strings (e.g. "True" and "False".) - \ingroup DisplayDelegates + \ingroup AAXLibraryFeatures_ParameterManager_DisplayDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryTaperDelegate.h index 4c116e3c59..0a396b7f5d 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CBinaryTaperDelegate.h @@ -47,7 +47,7 @@ When this taper is constructed with a bool template type, its normalized values are automatically typecast to the proper boolean value. - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CEffectGUI.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CEffectGUI.h index 51e4cbb4ac..1837a9a4b0 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CEffectGUI.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CEffectGUI.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -100,6 +100,10 @@ public: //////////////////////////////////////////////////////////////////////// { return AAX_SUCCESS; } + AAX_Result GetMinimumViewSize (AAX_Point * /* oMinimumViewSize */ ) const AAX_OVERRIDE + { + return AAX_SUCCESS; + } //@}end View accessors /** @name GUI update methods diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLinearTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLinearTaperDelegate.h index f15c6266e1..17f0e1f706 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLinearTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLinearTaperDelegate.h @@ -63,7 +63,7 @@ Rounding will be disabled if RealPrecision is set to a value less than 1. This is the default. - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLogTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLogTaperDelegate.h index f4091a6a51..c9672f300c 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLogTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CLogTaperDelegate.h @@ -64,7 +64,7 @@ Rounding will be disabled if RealPrecision is set to a value less than 1 - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CNumberDisplayDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CNumberDisplayDelegate.h index 6d5cf3bf68..060d3be4be 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CNumberDisplayDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CNumberDisplayDelegate.h @@ -45,7 +45,7 @@ This display delegate converts a parameter value to a numeric string using a specified precision. - \ingroup DisplayDelegates + \ingroup AAXLibraryFeatures_ParameterManager_DisplayDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPacketDispatcher.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPacketDispatcher.h index a15207ce2c..6283a15a62 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPacketDispatcher.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPacketDispatcher.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,9 +35,10 @@ #ifndef AAX_CPACKETDISPATCHER_H #define AAX_CPACKETDISPATCHER_H -#include "AAX.h" #include "AAX_IController.h" #include "AAX_CMutex.h" +#include "AAX_Errors.h" +#include "AAX.h" #include #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CParameter.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CParameter.h index 73d4012e2b..080a6cfd00 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CParameter.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CParameter.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2021, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -291,7 +291,13 @@ public: * * */ - AAX_CParameter(AAX_CParamID identifier, const AAX_IString& name, T defaultValue, const AAX_ITaperDelegate& taperDelegate, const AAX_IDisplayDelegate& displayDelegate, bool automatable=false); + AAX_CParameter( + AAX_CParamID identifier, + const AAX_IString& name, + T defaultValue, + const AAX_ITaperDelegate& taperDelegate, + const AAX_IDisplayDelegate& displayDelegate, + bool automatable=false); /*! * \brief Constructs an \ref AAX_CParameter object using the specified taper and display delegates. @@ -299,7 +305,13 @@ public: * This constructor uses an \ref AAX_IString for the parameter identifier, which can be a more * flexible solution for some plug-ins. */ - AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, T defaultValue, const AAX_ITaperDelegate& taperDelegate, const AAX_IDisplayDelegate& displayDelegate, bool automatable=false); + AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + T defaultValue, + const AAX_ITaperDelegate& taperDelegate, + const AAX_IDisplayDelegate& displayDelegate, + bool automatable=false); /*! * \brief Constructs an \ref AAX_CParameter object with no delegates @@ -310,7 +322,11 @@ public: * - \sa \ref AAX_CParameter::SetTaperDelegate() * - \sa \ref AAX_CParameter::SetDisplayDelegate() */ - AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, T defaultValue, bool automatable=false); + AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + T defaultValue, + bool automatable=false); /*! * \brief Constructs an \ref AAX_CParameter object with no delegates or default value @@ -322,7 +338,10 @@ public: * - \sa \ref AAX_CParameter::SetTaperDelegate() * - \sa \ref AAX_CParameter::SetDisplayDelegate() */ - AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, bool automatable=false); + AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + bool automatable=false); /** Move constructor and move assignment operator are allowed */ AAX_DEFAULT_MOVE_CTOR(AAX_CParameter); @@ -504,7 +523,13 @@ private: ////// AAX_CParameter Template Definition /////// template -AAX_CParameter::AAX_CParameter(AAX_CParamID identifier, const AAX_IString& name, T defaultValue, const AAX_ITaperDelegate& taperDelegate, const AAX_IDisplayDelegate& displayDelegate, bool automatable) +AAX_CParameter::AAX_CParameter( + AAX_CParamID identifier, + const AAX_IString& name, + T defaultValue, + const AAX_ITaperDelegate& taperDelegate, + const AAX_IDisplayDelegate& displayDelegate, + bool automatable) : mNames(name) , mAutomatable(automatable) , mNumSteps(0) // Default set below for discrete/continuous @@ -522,7 +547,13 @@ AAX_CParameter::AAX_CParameter(AAX_CParamID identifier, const AAX_IString& na } template -AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, T defaultValue, const AAX_ITaperDelegate& taperDelegate, const AAX_IDisplayDelegate& displayDelegate, bool automatable) +AAX_CParameter::AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + T defaultValue, + const AAX_ITaperDelegate& taperDelegate, + const AAX_IDisplayDelegate& displayDelegate, + bool automatable) : mNames(name) , mAutomatable(automatable) , mNumSteps(0) // Default set below for discrete/continuous @@ -540,7 +571,11 @@ AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IStri } template -AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, T defaultValue, bool automatable) +AAX_CParameter::AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + T defaultValue, + bool automatable) : mNames(name) , mAutomatable(automatable) , mNumSteps(0) @@ -554,11 +589,14 @@ AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IStri , mDefaultValue(defaultValue) { this->InitializeNumberOfSteps(); - this->SetToDefaultValue(); + // set to default value occurs when the taper delegate is set } template -AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IString& name, bool automatable) +AAX_CParameter::AAX_CParameter( + const AAX_IString& identifier, + const AAX_IString& name, + bool automatable) : mNames(name) , mAutomatable(automatable) , mNumSteps(0) @@ -572,7 +610,7 @@ AAX_CParameter::AAX_CParameter(const AAX_IString& identifier, const AAX_IStri , mDefaultValue() { this->InitializeNumberOfSteps(); - this->SetToDefaultValue(); // WARNING: uninitialized default value + // set to default value occurs when the taper delegate is set } template @@ -581,10 +619,15 @@ AAX_CParameter::~AAX_CParameter() //Make sure to remove any registration with the token system. SetAutomationDelegate(0); - delete mTaperDelegate; - mTaperDelegate = 0; - delete mDisplayDelegate; - mDisplayDelegate = 0; + if (mTaperDelegate) { + delete mTaperDelegate; + mTaperDelegate = 0; + } + + if (mDisplayDelegate) { + delete mDisplayDelegate; + mDisplayDelegate = 0; + } } template @@ -637,6 +680,10 @@ void AAX_CParameter::ClearShortenedNames() template void AAX_CParameter::SetValue( T newValue ) { + if (!mTaperDelegate) { + return; + } + double newNormalizedValue = mTaperDelegate->RealToNormalized(newValue); // Always go through the automation delegate even if the control isn't automatable to prevent fighting with other GUIs. @@ -669,6 +716,10 @@ void AAX_CParameter::SetValue( T newValue ) template void AAX_CParameter::UpdateNormalizedValue(double newNormalizedValue) { + if (!mTaperDelegate) { + return; + } + T newValue = mTaperDelegate->NormalizedToReal(newNormalizedValue); if (mNeedNotify || (mValue.Get() != newValue)) { @@ -811,22 +862,25 @@ bool AAX_CParameter::SetValueWithString(const AAX_IString& value); template void AAX_CParameter::SetNormalizedDefaultValue(double newNormalizedDefault) { - T newDefaultValue = mTaperDelegate->NormalizedToReal(newNormalizedDefault); - SetDefaultValue(newDefaultValue); + if (mTaperDelegate) { + T newDefaultValue = mTaperDelegate->NormalizedToReal(newNormalizedDefault); + SetDefaultValue(newDefaultValue); + } } template double AAX_CParameter::GetNormalizedDefaultValue() const { - double normalizedDefault = mTaperDelegate->RealToNormalized(mDefaultValue); - return normalizedDefault; + return mTaperDelegate ? mTaperDelegate->RealToNormalized(mDefaultValue) : 0.f; } template void AAX_CParameter::SetDefaultValue(T newDefaultValue) { - newDefaultValue = mTaperDelegate->ConstrainRealValue(newDefaultValue); - mDefaultValue = newDefaultValue; + if (mTaperDelegate) { + newDefaultValue = mTaperDelegate->ConstrainRealValue(newDefaultValue); + mDefaultValue = newDefaultValue; + } } template @@ -934,28 +988,31 @@ AAX_EParameterOrientation AAX_CParameter::GetOrientation() const template void AAX_CParameter::SetNormalizedValue(double normalizedNewValue) { - T newValue = mTaperDelegate->NormalizedToReal(normalizedNewValue); - this->SetValue(newValue); + if (mTaperDelegate) + { + T newValue = mTaperDelegate->NormalizedToReal(normalizedNewValue); + this->SetValue(newValue); + } } template double AAX_CParameter::GetNormalizedValue() const { T val = GetValue(); - return mTaperDelegate->RealToNormalized(val); -} + return mTaperDelegate ? mTaperDelegate->RealToNormalized(val) : 0.; +} template bool AAX_CParameter::GetValueString(AAX_CString* valueString) const { - return mDisplayDelegate->ValueToString(this->GetValue(), valueString); + return mDisplayDelegate ? mDisplayDelegate->ValueToString(this->GetValue(), valueString) : false; } template bool AAX_CParameter::GetValueString(int32_t /*iMaxNumChars*/, AAX_CString* valueString) const { - return mDisplayDelegate->ValueToString(this->GetValue(), valueString); + return mDisplayDelegate ? mDisplayDelegate->ValueToString(this->GetValue(), valueString) : false; } template @@ -993,6 +1050,10 @@ bool AAX_CParameter::GetNormalizedValueFromDouble(double value, double * template bool AAX_CParameter::GetNormalizedValueFromString(const AAX_CString& valueString, double *normalizedValue) const { + if (!mDisplayDelegate || !mTaperDelegate) { + return false; + } + //First, convert the string to a value using the wrapped parameter's display delegate. T value; if (!mDisplayDelegate->StringToValue(valueString, &value)) @@ -1040,6 +1101,10 @@ bool AAX_CParameter::GetDoubleFromNormalizedValue(double inNormalizedVa template bool AAX_CParameter::GetStringFromNormalizedValue(double normalizedValue, AAX_CString& valueString) const { + if (!mTaperDelegate || !mDisplayDelegate) { + return false; + } + T value = mTaperDelegate->NormalizedToReal(normalizedValue); if (!mDisplayDelegate->ValueToString(value, &valueString)) return false; @@ -1053,6 +1118,10 @@ bool AAX_CParameter::GetStringFromNormalizedValue(double normalizedValue, AAX template bool AAX_CParameter::GetStringFromNormalizedValue(double normalizedValue, int32_t iMaxNumChars, AAX_CString& valueString) const { + if (!mTaperDelegate || !mDisplayDelegate) { + return false; + } + T value = mTaperDelegate->NormalizedToReal(normalizedValue); if (!mDisplayDelegate->ValueToString(value, iMaxNumChars, &valueString)) return false; @@ -1065,7 +1134,11 @@ bool AAX_CParameter::GetStringFromNormalizedValue(double normalizedValue, int template bool AAX_CParameter::SetValueFromString(const AAX_CString& newValueString) -{ +{ + if (!mDisplayDelegate) { + return false; + } + T newValue; if (!mDisplayDelegate->StringToValue(newValueString, &newValue)) return false; @@ -1076,16 +1149,28 @@ bool AAX_CParameter::SetValueFromString(const AAX_CString& newValueString) template void AAX_CParameter::SetTaperDelegate(AAX_ITaperDelegateBase& inTaperDelegate,bool inPreserveValue) { - double normalizeValue = this->GetNormalizedValue (); + // if the object was created without a taper delegate then its default value has not been set + bool const setToDefault = (nullptr == mTaperDelegate); + + double const normalizedValue = mTaperDelegate ? this->GetNormalizedValue () : 0.f; AAX_ITaperDelegate* oldDelegate = mTaperDelegate; mTaperDelegate = ((AAX_ITaperDelegate &) inTaperDelegate).Clone(); - delete oldDelegate; + + if (oldDelegate) { + delete oldDelegate; + } mNeedNotify = true; - if ( inPreserveValue ) + if ( setToDefault ) { + this->SetToDefaultValue(); + } + else if ( inPreserveValue ) { this->SetValue ( mValue.Get() ); - else this->UpdateNormalizedValue ( normalizeValue ); + } + else { + this->UpdateNormalizedValue ( normalizedValue ); + } } template @@ -1093,7 +1178,9 @@ void AAX_CParameter::SetDisplayDelegate(AAX_IDisplayDelegateBase& inDisplayDe { AAX_IDisplayDelegate* oldDelegate = mDisplayDelegate; mDisplayDelegate = ((AAX_IDisplayDelegate &)inDisplayDelegate).Clone(); - delete oldDelegate; + if (oldDelegate) { + delete oldDelegate; + } if (mAutomationDelegate != 0) mAutomationDelegate->PostCurrentValue(this->Identifier(), this->GetNormalizedValue()); // Make sure GUIs are all notified of the change. diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPieceWiseLinearTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPieceWiseLinearTaperDelegate.h index 90cd353741..a364506512 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPieceWiseLinearTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CPieceWiseLinearTaperDelegate.h @@ -62,7 +62,7 @@ Rounding will be disabled if RealPrecision is set to a value less than 1 - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template class AAX_CPieceWiseLinearTaperDelegate : public AAX_ITaperDelegate diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CRangeTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CRangeTaperDelegate.h index 97f18defed..5524dbcd46 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CRangeTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CRangeTaperDelegate.h @@ -86,7 +86,7 @@ Rounding will be disabled if RealPrecision is set to a value less than 1 - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CSessionDocumentClient.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CSessionDocumentClient.h index 9a376dc727..b64d858b8f 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CSessionDocumentClient.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CSessionDocumentClient.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -33,6 +33,7 @@ #define AAX_CSessionDocumentClient_H #include "AAX_ISessionDocumentClient.h" +#include "AAX_Errors.h" #include #ifdef __clang__ @@ -85,7 +86,7 @@ public: //////////////////////////////////////////////////////////////////////// /** * \copydoc AAX_IACFSessionDocumentClient::NotificationReceived() */ - AAX_Result NotificationReceived(/* AAX_ENotificationEvent */ AAX_CTypeID /*inNotificationType*/, const void * /*inNotificationData*/, uint32_t /*inNotificationDataSize*/) AAX_OVERRIDE { return AAX_SUCCESS; } + AAX_Result NotificationReceived(/* AAX_ENotificationEvent */ AAX_CTypeID inNotificationType, const void * inNotificationData, uint32_t inNotificationDataSize) AAX_OVERRIDE { return AAX_SUCCESS; } //@}end %AAX host and plug-in event notification protected: ///////////////////////////////////////////////////////////////////////////// AAX_CSessionDocumentClient diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateDisplayDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateDisplayDelegate.h index 8f9ab75051..35fa76363d 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateDisplayDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateDisplayDelegate.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2014-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2014-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -38,10 +38,8 @@ #include "AAX_IDisplayDelegate.h" #include "AAX_CString.h" -#include -#if defined(WINDOWS_VERSION) || defined(LINUX_VERSION) #include -#endif +#include @@ -51,7 +49,7 @@ This display delegate is similar to AAX_CNumberDisplayDelegate, but does not include precision or spacing templatizations. - \ingroup DisplayDelegates + \ingroup AAXLibraryFeatures_ParameterManager_DisplayDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateTaperDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateTaperDelegate.h index 65746559f2..64ff2599b1 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateTaperDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStateTaperDelegate.h @@ -49,7 +49,7 @@ version of AAX_CLinearTaperDelegate without that class' additional RealPrecision templatization. - \ingroup TaperDelegates + \ingroup AAXLibraryFeatures_ParameterManager_TaperDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDataBuffer.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDataBuffer.h index 4745c7db28..6ba7999b98 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDataBuffer.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDataBuffer.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -34,6 +34,7 @@ #define AAX_CStringDataBuffer_H #include "AAX_IDataBuffer.h" +#include "AAX_Errors.h" #include "AAX.h" #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDisplayDelegate.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDisplayDelegate.h index 484114ba6e..659c0c2df9 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDisplayDelegate.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CStringDisplayDelegate.h @@ -49,7 +49,7 @@ would then be used as a lookup into this delegate, which would return a string for each valid int value. - \ingroup DisplayDelegates + \ingroup AAXLibraryFeatures_ParameterManager_DisplayDelegates */ template diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CTaskAgent.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CTaskAgent.h index aa7f176b2e..0849fa3001 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CTaskAgent.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_CTaskAgent.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -74,11 +74,12 @@ public: //////////////////////////////////////////////////////////////////////// * * \details * Convenience implementation that converts the \ref IACFUnknown - * into an \ref AAX_ITask . Implementations should override the - * version that provides an \ref AAX_ITask object. + * into an \ref AAX_ITask . Implementations should override + * \ref ReceiveTask() instead. */ AAX_Result AddTask(IACFUnknown * iTask) AAX_OVERRIDE; AAX_Result CancelAllTasks() AAX_OVERRIDE; + AAX_Result CancelTask(AAX_CTaskID iTaskID) AAX_OVERRIDE; //@} Task management protected: diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Callbacks.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Callbacks.h index 06adf250ac..a88aff7786 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Callbacks.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Callbacks.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2014-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2014-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -37,6 +37,7 @@ #define AAX_CALLBACKS_H_ /// @endcond +#include "AAX_Enums.h" #include "AAX.h" // Callback IDs diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnumSizeCheck.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnumSizeCheck.h new file mode 100644 index 0000000000..fe3c14cba4 --- /dev/null +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnumSizeCheck.h @@ -0,0 +1,60 @@ +/*================================================================================================*/ +/* + * + * Copyright 2025 Avid Technology, Inc. + * All rights reserved. + * + * This file is part of the Avid AAX SDK. + * + * The AAX SDK is subject to commercial or open-source licensing. + * + * By using the AAX SDK, you agree to the terms of both the Avid AAX SDK License + * Agreement and Avid Privacy Policy. + * + * AAX SDK License: https://developer.avid.com/aax + * Privacy Policy: https://www.avid.com/legal/privacy-policy-statement + * + * Or: You may also use this code under the terms of the GPL v3 (see + * www.gnu.org/licenses). + * + * THE AAX SDK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + * EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + * DISCLAIMED. + * + */ + +/** + * \file AAX_EnumSizeCheck.h + * + * \brief Utility for verifying the underlying type size of %AAX enums + * + */ +/*================================================================================================*/ + +#ifndef AAX_ENUMSIZECHECK_H +#define AAX_ENUMSIZECHECK_H + +#include "AAX_EnvironmentUtilities.h" + +#ifndef _TMS320C6X +#include +#endif + +/** @def AAX_ENUM_SIZE_CHECK + @brief Macro to ensure enum type consistency across binaries + + Verifies that the underlying type for checked %AAX enums is always 4 bytes. + */ + +#ifndef _TMS320C6X + #if defined(AAX_CPP11_SUPPORT) + #define AAX_ENUM_SIZE_CHECK(x) static_assert(sizeof(x) == sizeof(uint32_t), "Enum size check failed for " #x) + #else + // force a compiler error if the size is not 4 bytes + #define AAX_ENUM_SIZE_CHECK(x) extern int __enumSizeCheck[ 2*(sizeof(uint32_t)==sizeof(x)) - 1] + #endif +#else + #define AAX_ENUM_SIZE_CHECK(x) +#endif + +#endif // AAX_ENUMSIZECHECK_H diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Enums.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Enums.h index 27184e9a55..c6461e95a8 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Enums.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Enums.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -37,6 +37,8 @@ #define AAX_ENUMS_H /// @endcond +#include "AAX_EnumSizeCheck.h" +#include "AAX.h" #include #define AAX_INT32_MIN (-2147483647 - 1) /** minimum signed 32 bit value */ @@ -48,13 +50,7 @@ #define AAX_UINT16_MIN 0U /** minimum unsigned 16 bit value */ #define AAX_UINT16_MAX 65535U /** maximum unsigned 16 bit value */ -/** \brief Macro to ensure enum type consistency across binaries - */ -#ifndef _TMS320C6X -#define AAX_ENUM_SIZE_CHECK(x) extern int __enumSizeCheck[ 2*(sizeof(uint32_t)==sizeof(x)) - 1] -#else -#define AAX_ENUM_SIZE_CHECK(x) -#endif + //****************************************************************** @@ -209,6 +205,16 @@ enum AAX_EMaxAudioSuiteTracks AAX_eMaxAudioSuiteTracks = 48 }; AAX_ENUM_SIZE_CHECK( AAX_EMaxAudioSuiteTracks ); +/** @def AAX_STEM_FORMAT + @brief Defines an \ref AAX_EStemFormat value for a stem format using the format's unique index and its channel count + */ + /** @def AAX_STEM_FORMAT_CHANNEL_COUNT + @brief Get the channel count from an \ref AAX_EStemFormat value + */ + /** @def AAX_STEM_FORMAT_INDEX + @brief Get the unique index from an \ref AAX_EStemFormat value + */ + // The channel count ternary here will issue a warning due to a // signed/unsigned mismatch if anyone tries to create an // AAX_STEM_FORMAT definition with a negative channel count. @@ -243,6 +249,7 @@ enum AAX_EStemFormat { // Point source stem formats AAX_eStemFormat_Mono = AAX_STEM_FORMAT ( 0, 1 ), ///< M + AAX_eStemFormat_DummyConnection = AAX_eStemFormat_Mono, AAX_eStemFormat_Stereo = AAX_STEM_FORMAT ( 1, 2 ), ///< L R AAX_eStemFormat_LCR = AAX_STEM_FORMAT ( 2, 3 ), ///< L C R AAX_eStemFormat_LCRS = AAX_STEM_FORMAT ( 3, 4 ), ///< L C R S @@ -290,6 +297,18 @@ enum AAX_EStemFormat AAX_eStemFormat_INT32_MAX = AAX_INT32_MAX }; AAX_ENUM_SIZE_CHECK( AAX_EStemFormat ); +/** \brief Function wrapper for the \ref AAX_STEM_FORMAT_CHANNEL_COUNT macro + + */ +static +inline +int32_t +AAX_GetStemFormatChannelCount ( + AAX_EStemFormat inStemFormat) +{ + return AAX_STEM_FORMAT_CHANNEL_COUNT (inStemFormat); +} + /** @brief Effect category definitions @details @@ -303,7 +322,9 @@ enum AAX_EStemFormat \note The host may handle plug-ins with different categories in different manners, e.g. replacing "analyze" with "reverse" for offline processing of delays and reverbs. - + + \sa \ref AAX_EPlugInRole + */ enum AAX_EPlugInCategory { @@ -321,7 +342,8 @@ enum AAX_EPlugInCategory AAX_ePlugInCategory_HWGenerators = 0x00000400, ///< Fixed hardware audio sources such as SampleCell AAX_ePlugInCategory_SWGenerators = 0x00000800, ///< Virtual instruments, metronomes, and other software audio sources AAX_ePlugInCategory_WrappedPlugin = 0x00001000, ///< All plug-ins wrapped by a thrid party wrapper (i.e. VST to RTAS wrapper), except for VI plug-ins which should be mapped to AAX_PlugInCategory_SWGenerators - AAX_EPlugInCategory_Effect = 0x00002000, ///< Special effects + AAX_ePlugInCategory_Effect = 0x00002000, ///< Special effects + AAX_EPlugInCategory_Effect = AAX_ePlugInCategory_Effect, ///< \deprecated Use AAX_ePlugInCategory_Effect instead // HACK: 32-bit hosts do not have support for AAX_ePlugInCategory_Example #if ( defined(_WIN64) || defined(__LP64__) ) @@ -330,11 +352,35 @@ enum AAX_EPlugInCategory AAX_ePlugInCategory_Example = AAX_EPlugInCategory_Effect, #endif - AAX_EPlugInCategory_MIDIEffect = 0x00010000, ///< MIDI effects + AAX_ePlugInCategory_MIDIEffect = 0x00010000, ///< MIDI effects + AAX_EPlugInCategory_MIDIEffect = AAX_ePlugInCategory_MIDIEffect, ///< \deprecated Use AAX_ePlugInCategory_MIDIEffect instead + - AAX_ePlugInCategory_INT32_MAX = AAX_INT32_MAX }; AAX_ENUM_SIZE_CHECK( AAX_EPlugInCategory ); +#define AAX_DEFINE_ROLE_BITS(role_nibble) (role_nibble << 28) +#define AAX_GET_ROLE_BITS(category_bits) (category_bits & 0xF0000000) +#define AAX_IS_ROLE(category_bits, role) (role == (category_bits & 0xF0000000)) + +/** @brief Effect role definitions + + @details + Used with \ref AAX_IEffectDescriptor::SetRole() to define the role of an Effect. + + Roles are special categories that are defined using the upper four bits of an + \ref AAX_EPlugInCategory value. Unlike categories, roles are mutually exclusive + and the full four bits are checked for equality, rather than as a bitfield. + The category (lower) bits are only used if the role bits are equal to + \ref AAX_ePlugInRole_InsertOrAudioSuite. + + \sa \ref AAX_EPlugInCategory + + */ +enum AAX_EPlugInRole +{ + AAX_ePlugInRole_InsertOrAudioSuite = AAX_DEFINE_ROLE_BITS(0x0), ///< Insert or AudioSuite (default role) +}; AAX_ENUM_SIZE_CHECK( AAX_EPlugInRole ); + /** @brief Effect string identifiers @details @@ -480,6 +526,9 @@ enum AAX_EResourceType \note All 'AX__' four-char IDs are reserved for the %AAX specification */ enum AAX_ENotificationEvent +#if defined(AAX_CPP11_SUPPORT) +: AAX_CTypeID +#endif { /** \brief (not currently sent) The zero-indexed insert position of this plug-in instance within its track @@ -771,6 +820,14 @@ enum AAX_ENotificationEvent */ AAX_eNotificationEvent_HostLocale = 'AXLc', + /** \brief Notify the plug-in that the timeline selection has changed + + \compatibility Supported in Pro Tools 2025.6 and higher + + Data: none
+ Sent by: Host + */ + AAX_eNotificationEvent_TimelineSelectionChanged = 'AXtC', }; AAX_ENUM_SIZE_CHECK( AAX_ENotificationEvent ); @@ -886,6 +943,60 @@ enum AAX_ESampleRateMask AAX_eSampleRateMask_All = AAX_INT32_MAX }; AAX_ENUM_SIZE_CHECK( AAX_ESampleRateMask ); + +/*! \brief Determines whether a particular \ref AAX_CSampleRate is present + in a given mask of \ref AAX_ESampleRateMask. + + \details + \sa kAAX_Property_SampleRate + */ +inline uint8_t sampleRateInMask(float inSR, uint32_t iMask) +{ + return static_cast( // AAX_CBoolean + (44100.0f == inSR) ? ((iMask & AAX_eSampleRateMask_44100) != 0) : + (48000.0f == inSR) ? ((iMask & AAX_eSampleRateMask_48000) != 0) : + (88200.0f == inSR) ? ((iMask & AAX_eSampleRateMask_88200) != 0) : + (96000.0f == inSR) ? ((iMask & AAX_eSampleRateMask_96000) != 0) : + (176400.0f == inSR) ? ((iMask & AAX_eSampleRateMask_176400) != 0) : + (192000.0f == inSR) ? ((iMask & AAX_eSampleRateMask_192000) != 0) : false + ); +} + +/*! \brief Converts from a mask of \ref AAX_ESampleRateMask to the lowest + supported \ref AAX_CSampleRate value in Hz + + */ +inline float getLowestSampleRateInMask(uint32_t iMask) +{ + return ( + ((iMask & AAX_eSampleRateMask_44100) != 0) ? 44100.0f : // AAX_eSamplRateMask_All returns 44100 + ((iMask & AAX_eSampleRateMask_48000) != 0) ? 48000.0f : + ((iMask & AAX_eSampleRateMask_88200) != 0) ? 88200.0f : + ((iMask & AAX_eSampleRateMask_96000) != 0) ? 96000.0f : + ((iMask & AAX_eSampleRateMask_176400) != 0) ? 176400.0f : + ((iMask & AAX_eSampleRateMask_192000) != 0) ? 192000.0f : 0.0f + ); +} + +/*! \brief Returns the \ref AAX_ESampleRateMask selector for a literal + sample rate. + + The given rate must be an exact match with one of the available + selectors. If no exact match is found then + \ref AAX_eSampleRateMask_No is returned. + */ +inline uint32_t getMaskForSampleRate(float inSR) +{ + return ( + (44100.0 == inSR) ? AAX_eSampleRateMask_44100 : + (48000.0 == inSR) ? AAX_eSampleRateMask_48000 : + (88200.0 == inSR) ? AAX_eSampleRateMask_88200 : + (96000.0 == inSR) ? AAX_eSampleRateMask_96000 : + (176400.0 == inSR) ? AAX_eSampleRateMask_176400 : + (192000.0 == inSR) ? AAX_eSampleRateMask_192000 : AAX_eSampleRateMask_No + ); +} + /** @brief FIC stuff that I can't include without DAE library dependence @details @@ -1361,6 +1472,10 @@ enum AAX_ESupportLevel Typically an %AAX plug-in should not need to query this information or change its behavior based on the level of the host. + + \warning %AAX plugin description details are cached and are not re-scanned if the host + level changes. Be careful to avoid changing any cacheable information based on this + data. @sa \ref AAXATTR_Client_Level */ diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnvironmentUtilities.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnvironmentUtilities.h index 532ad1c1a5..1966fe1e9a 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnvironmentUtilities.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_EnvironmentUtilities.h @@ -3,7 +3,7 @@ AAX_EnvironmentUtilities.h - Copyright 2018-2019, 2023-2024 Avid Technology, Inc. + Copyright 2018-2019, 2023-2025 Avid Technology, Inc. All rights reserved. This file is part of the Avid AAX SDK. @@ -35,7 +35,39 @@ #ifndef _AAX_ENVIRONMENTUTILITIES_H_ #define _AAX_ENVIRONMENTUTILITIES_H_ -#include + +/** @name C++ compiler macros + */ +//@{ +/** @def TI_VERSION + @brief Preprocessor flag indicating compilation for TI + */ +/** @def AAX_CPP11_SUPPORT + @brief Preprocessor toggle for code which requires C++11 compiler support + */ +//@} C++ compiler macros + +#ifndef TI_VERSION + #if defined _TMS320C6X + #define TI_VERSION 1 + #elif defined DOXYGEN_PREPROCESSOR + #define TI_VERSION 0 + #endif +#endif + + +#ifndef AAX_CPP11_SUPPORT + #if (defined __cplusplus) && (__cplusplus >= 201103L) + #define AAX_CPP11_SUPPORT 1 + // VS2015 supports all features except expression SFINAE + #elif ((defined _MSVC_LANG) && (_MSVC_LANG >= 201402)) + #define AAX_CPP11_SUPPORT 1 + // Let Doxygen see the C++11 version of all code + #elif defined DOXYGEN_PREPROCESSOR + #define AAX_CPP11_SUPPORT 1 + #endif +#endif + #if (!defined (WINDOWS_VERSION)) # if (defined (_WIN32)) @@ -64,24 +96,9 @@ # error "AAX SDK: Cannot declare more than one OS environment" #endif -#if (!defined (WINDOWS_VERSION) && !defined (MAC_VERSION) && !defined (LINUX_VERSION)) + +#if (!defined (AAX_ALLOW_UNKNOWN_ENVIRONMENT) && !defined (WINDOWS_VERSION) && !defined (MAC_VERSION) && !defined (LINUX_VERSION)) # warning "AAX SDK: Unknown OS environment" #endif -namespace AAX -{ - static bool IsVenueSystem(void) - { -#if WINDOWS_VERSION - static const char * const environmentVariableName = "JEX_HOST_TYPE"; - static const char * const venueEnvironment = "venue"; - static const char * const environment = std::getenv ( environmentVariableName ); - static const bool isVenue = ( NULL != environment) && (0 == strcmp ( environment, venueEnvironment ) ); - return isVenue; -#else - return false; -#endif - } -} - #endif // _AAX_ENVIRONMENTUTILITIES_H_ diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Errors.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Errors.h index 8c19e819d7..7130ca4eba 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Errors.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Errors.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2010-2017, 2019-2021, 2023-2024 Avid Technology, Inc. + * Copyright 2010-2017, 2019-2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -37,7 +37,7 @@ #define AAX_ERRORS_H /// @endcond -#include "AAX_Enums.h" +#include "AAX_EnumSizeCheck.h" /** AAX result codes @@ -86,7 +86,7 @@ enum AAX_EError AAX_ERROR_DUPLICATE_TYPE_ID = -20036, AAX_ERROR_EMPTY_EFFECT_NAME = -20037, AAX_ERROR_UNKNOWN_PLUGIN = -20038, - AAX_ERROR_PROPERTY_UNDEFINED = -20039, + AAX_ERROR_PROPERTY_UNDEFINED = -20039, ///< The plugin does not explicitly define a value for a queried property AAX_ERROR_INVALID_PATH = -20040, AAX_ERROR_UNKNOWN_ID = -20041, AAX_ERROR_UNKNOWN_EXCEPTION = -20042, ///< An AAX plug-in should return this to the host if an unknown exception is caught. Exceptions should never be passed to the host. @@ -99,6 +99,7 @@ enum AAX_EError AAX_ERROR_NO_ABBREVIATED_PARAMETER_NAME = -20049, ///< No parameter name abbreviation with the requested properties has been defined AAX_ERROR_ARGUMENT_OUT_OF_RANGE = -20050, ///< One or more input parameters are out of the expected range, e.g. an index argument that is negative or exceeds the number of elements AAX_ERROR_PRINT_FAILURE = -20051, ///< A failure occurred in a "print" library call such as @c printf + AAX_ERROR_NOTIFICATION_REGISTRATION_FAILED = -20052, AAX_ERROR_PLUGIN_BEGIN = -20600, ///< Custom plug-in error codes may be placed in the range ( \ref AAX_ERROR_PLUGIN_END, \ref AAX_ERROR_PLUGIN_BEGIN ] diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_GUITypes.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_GUITypes.h index 7804efa9dc..bf43725b92 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_GUITypes.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_GUITypes.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2015, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -39,6 +39,7 @@ #ifndef _TMS320C6X +#include "AAX_Errors.h" #include "AAX.h" #include AAX_ALIGN_FILE_BEGIN diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFController.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFController.h index 28e8da794f..4d00f1a94c 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFController.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFController.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -36,6 +36,8 @@ #ifndef _AAX_IACFCONTROLLER_H_ #define _AAX_IACFCONTROLLER_H_ +#include "AAX_Properties.h" +#include "AAX_Enums.h" #include "AAX.h" #ifdef __clang__ @@ -224,6 +226,31 @@ public: GetIsAudioSuite(AAX_CBoolean* outIsAudioSuite) const = 0; }; +/** @copydoc AAX_IACFController + */ +class AAX_IACFController_V4 : public AAX_IACFController_V3 +{ +public: + /** \copydoc AAX_IController::GetInstanceGroupID() */ + virtual + AAX_Result + GetInstanceGroupID(AAX_CInstanceGroupID* outInstanceGroupID) const = 0; +}; + +class AAX_IACFController_V5 : public AAX_IACFController_V4 +{ +public: + /** \copydoc AAX_IController::RegisterForNotification() */ + virtual + AAX_Result + RegisterForNotification(/* AAX_ENotificationEvent */ AAX_CTypeID inNotificationType, IACFUnknown const * inSubscriberObject) = 0; + + /** \copydoc AAX_IController::GetInstanceID() */ + virtual + AAX_Result + GetInstanceID(AAX_CInstanceID* outInstanceID) const = 0; +}; + #ifdef __clang__ #pragma clang diagnostic pop #endif diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectGUI.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectGUI.h index 1e611d5fcd..d284af2aff 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectGUI.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectGUI.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,9 +35,10 @@ #ifndef AAX_IACFEFFECTGUI_H #define AAX_IACFEFFECTGUI_H -#include "AAX.h" #include "AAX_GUITypes.h" #include "AAX_IString.h" +#include "AAX_Enums.h" +#include "AAX.h" #ifdef __clang__ #pragma clang diagnostic push @@ -161,6 +162,9 @@ public: /*! * \brief Retrieves the size of the plug-in window * + * If this method is inapplicable, return \ref AAX_SUCCESS and do not + * modify \p oViewSize. + * * \sa \ref AAX_IViewContainer::SetViewSize() * * \param[out] oViewSize @@ -247,6 +251,31 @@ public: }; + +class AAX_IACFEffectGUI_V2 : public AAX_IACFEffectGUI +{ +public: + /** @name View accessors + */ + //@{ + /*! + * \brief Retrieves the requested minimum size of the plug-in window + * + * The host is not required to respect this minimum size, and may + * provide a smaller window. + * + * If this method is inapplicable, return \ref AAX_SUCCESS and do not + * modify \p oMinimumViewSize. + * + * \sa \ref AAX_IViewContainer::GetViewSize() + * + * \param[out] oMinimumViewSize + * The size of the plug-in window as a point (width, height) + */ + virtual AAX_Result GetMinimumViewSize ( AAX_Point * oMinimumViewSize ) const = 0; + //@}end View accessors +}; + #ifdef __clang__ #pragma clang diagnostic pop #endif diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectParameters.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectParameters.h index 985d03edfd..4dc763af3c 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectParameters.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFEffectParameters.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,6 +35,7 @@ #ifndef AAX_IACFEFFECTPARAMETERS_H #define AAX_IACFEFFECTPARAMETERS_H +#include "AAX_Enums.h" #include "AAX.h" class AAX_IString; diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFFeatureInfo.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFFeatureInfo.h index 3d02879505..d9c2ded316 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFFeatureInfo.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFFeatureInfo.h @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2016-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2016-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -24,6 +24,7 @@ #ifndef AAXLibrary_AAX_IACFFeatureInfo_h #define AAXLibrary_AAX_IACFFeatureInfo_h +#include "AAX_Enums.h" #include "AAX.h" class AAX_IACFPropertyMap; diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFPropertyMap.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFPropertyMap.h index 23f46c43d1..0e8b81c00a 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFPropertyMap.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFPropertyMap.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,6 +35,7 @@ #ifndef AAX_IACFPROPERTYMAP_H #define AAX_IACFPROPERTYMAP_H +#include "AAX_Properties.h" #include "AAX.h" #ifdef __clang__ diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTask.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTask.h index 4f649786fd..38249ff9af 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTask.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTask.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -91,6 +91,13 @@ public: virtual AAX_Result SetDone(AAX_TaskCompletionStatus iStatus) = 0; }; +class AAX_IACFTask_V2 : public AAX_IACFTask +{ +public: + virtual AAX_Result GetID(AAX_CTaskID * outID) const = 0; ///< \copydoc AAX_ITask::GetID() + virtual AAX_Result SetProgressLabel(const char * iLabel) = 0; ///< \copydoc AAX_ITask::SetProgressLabel() +}; + #ifdef __clang__ #pragma clang diagnostic pop #endif diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTaskAgent.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTaskAgent.h index 3bd36c8c66..7e7c9e6821 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTaskAgent.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IACFTaskAgent.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -100,6 +100,27 @@ public: //@} Task management }; +class AAX_IACFTaskAgent_V2 : public AAX_IACFTaskAgent +{ +public: + + /** @name Task management + */ + //@{ + /** + * Request that the agent cancel a task + * + * If the task is already complete, or if it was not previously + * added to the task agent using \ref AddTask(), then this + * method should do nothing and should return \ref AAX_SUCCESS. + * + * \param[in] iTaskID + * The ID of the task to cancel. \sa \ref AAX_IACFTask_V2::GetID() + */ + virtual AAX_Result CancelTask(AAX_CTaskID iTaskID) = 0; + //@} Task management +}; + #ifdef __clang__ #pragma clang diagnostic pop diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ICollection.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ICollection.h index e4af3bc1da..b5ba032c84 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ICollection.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ICollection.h @@ -142,6 +142,10 @@ public: // AAX_IACFCollection \warning Do not use this method to infer host feature support. Instead, use \ref AAX_IDescriptionHost to query the host for specific features. + \warning %AAX plugin description details are cached and might not be re-scanned + even if the host version changes. Be careful to avoid changing any cacheable + information based on this data. See \ref describe_host_feature_checks for more information. + @param[in] outVersion Host version @@ -156,6 +160,10 @@ public: // AAX_ICollection method prototype for the \ref GetEffectDescriptions() method called from the %AAX Library. @sa \ref AAX_UIDs.h for available feature UIDs, e.g. \ref AAXATTR_ClientFeature_AuxOutputStem + + \warning %AAX plugin description details are cached and might not be re-scanned even if + attributes of the host description change. Be careful to avoid changing any cacheable + information based on this data. See \ref describe_host_feature_checks for more information. */ virtual AAX_IDescriptionHost* DescriptionHost() = 0; virtual const AAX_IDescriptionHost* DescriptionHost() const = 0; ///< \copydoc AAX_ICollection::DescriptionHost() @@ -167,6 +175,10 @@ public: // AAX_ICollection @sa \ref AAX_UIDs.h for available host attribute UIDs, e.g. \ref AAXATTR_Client_Level + \warning %AAX plugin description details are cached and might not be re-scanned even if + attributes of the host definition change, for example the host level. Be careful to avoid + changing any cacheable information based on this data. See \ref describe_host_feature_checks for more information. + The implementation of \ref AAX_ICollection owns the referenced object. No AddRef occurs. \ref IACFDefinition::DefineAttribute() is not supported on this object diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IController.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IController.h index b8b9b19c70..3b11ca96f1 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IController.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IController.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -37,11 +37,13 @@ #include "AAX_Properties.h" #include "AAX_IString.h" +#include "AAX_Enums.h" #include "AAX.h" #include // Forward declarations class AAX_IPageTable; +class IACFUnknown; /** @@ -448,6 +450,72 @@ public: virtual AAX_Result GetIsAudioSuite(AAX_CBoolean* outIsAudioSuite) const = 0; + /*! + * \brief CALL: Provides an identifier for the group to which this instance belongs. + * + * Instances that share the same group ID are considered part of the same instance group. + * + * Check for \ref kAAX_InstanceGroupID_Undefined to determine if the instance has undefined + * grouping. Instances sharing this value should not be considered to be part of the same + * group. This value may be provided by hosts that do not support instance group + * identification. + * + * Group ID values are not persistent between host sessions. An instance's Group ID will + * not change during the lifetime of the instance. The host may re-use Group ID values + * after all of the instances in a group have been destroyed. + * + * In Pro Tools: + * - Instances within a multi-mono set will have the same group ID. + * - If an instance is made inactive and then made active again, the instance's group + * ID will remain the same. + * - If the instance is moved to a different insert slot or to a different track, a + * new group ID will be assigned. + * + * \param[out] outInstanceGroupID + * The identifier for the group to which this instance belongs. + */ + virtual + AAX_Result GetInstanceGroupID(AAX_CInstanceGroupID* outInstanceGroupID) const = 0; + + /*! + * \brief CALL: Provides an identifier for this plugin instance + */ + virtual + AAX_Result GetInstanceID(AAX_CInstanceID* outInstanceID) const = 0; + + /*! + * \brief CALL: Subscribe a plugin object to notifications + * + * The plugin should subscribe its objects to any notification types that they require. The + * host may automatically subscribe the plugin to some notification types. + * + * The subscriber object must be one of the plugin objects that can receive notifications via a + * NotificationReceived() method: + * - \ref AAX_IEffectParameters + * - \ref AAX_IEffectGUI + * - \ref AAX_IEffectDirectData + * - \ref AAX_ISessionDocumentClient + * + * The plugin should register an object for notifiations as early as possible in the object's + * lifetime, for example in the object's Initialize() or EffectInit() routine just after the + * controller has been set on the object. + * + * \param[in] inNotificationType + * Type of notification to subscribe to. One of \ref AAX_ENotificationEvent. + * \param[in] inSubscriberObject + * Pointer to the object that should receive notifications. + * + * - \return \ref AAX_ERROR_UNIMPLEMENTED if the host does not support this method + * - \return \ref AAX_ERROR_NULL_ARGUMENT if \p inSubscriberObject is null + * - \return \ref AAX_ERROR_INVALID_ARGUMENT if \p inSubscriberObject is not a valid subscriber + * object address + * - \return AAX_ERROR_NOTIFICATION_REGISTRATION_FAILED if the registration failed for another + * reason, such as an invalid \p inNotificationType + * - \return \ref AAX_SUCCESS if the registration was successful + */ + virtual + AAX_Result RegisterForNotification(/* AAX_ENotificationEvent */ AAX_CTypeID inNotificationType, IACFUnknown const * inSubscriberObject) = 0; + /** * \brief Copy the current page table data for a particular plug-in type * diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IDescriptionHost.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IDescriptionHost.h index 46e9cad4d4..51c2ed894d 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IDescriptionHost.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IDescriptionHost.h @@ -30,6 +30,10 @@ class AAX_IFeatureInfo; /** Interface to host services provided during plug-in description + + \warning %AAX plugin description details are cached and might not be re-scanned even if + attributes of the host description change. Be careful to avoid changing any cacheable + information based on this data. See \ref describe_host_feature_checks for more information. */ class AAX_IDescriptionHost { diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectDescriptor.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectDescriptor.h index 6633c3dbe8..c908d44803 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectDescriptor.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectDescriptor.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -93,6 +93,13 @@ public: */ virtual AAX_Result AddCategory ( uint32_t inCategory ) = 0; + /** @brief Set the plug-in role. See \ref AAX_EPlugInRole. + + @param[in] inRole + The plug-in role + + */ + virtual AAX_Result SetRole ( uint32_t inRole ) = 0; /** @brief Add a category to your plug-in. See \ref AAX_EPlugInCategory. @param[in] inCategory diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectGUI.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectGUI.h index fdfe667a17..314d39f98e 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectGUI.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IEffectGUI.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2014-2017, 2019-2021, 2023-2024 Avid Technology, Inc. + * Copyright 2014-2017, 2019-2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -60,7 +60,7 @@ \ingroup CommonInterface_GUI */ -class AAX_IEffectGUI : public AAX_IACFEffectGUI, +class AAX_IEffectGUI : public AAX_IACFEffectGUI_V2, public CACFUnknown { public: diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IFeatureInfo.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IFeatureInfo.h index e164be543d..d894940e8e 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IFeatureInfo.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IFeatureInfo.h @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2016-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2016-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -24,6 +24,7 @@ #ifndef AAXLibrary_AAX_IFeatureInfo_h #define AAXLibrary_AAX_IFeatureInfo_h +#include "AAX_Enums.h" #include "AAX.h" diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IParameter.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IParameter.h index b86ab3dc8e..fd4e8b5b13 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IParameter.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_IParameter.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,6 +35,7 @@ #ifndef AAX_IPARAMETER_H #define AAX_IPARAMETER_H +#include "AAX_Enums.h" #include "AAX.h" //for types //Forward Declarations @@ -257,7 +258,7 @@ public: * */ //@{ - /** \brief Sets a parameter value using it's normalized representation + /** \brief Sets a parameter value using its normalized representation * * For more information regarding normalized values, see * \ref AAXLibraryFeatures_ParameterManager diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITask.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITask.h index 2631313378..546786ba05 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITask.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITask.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -35,6 +35,7 @@ #include "AAX_IACFTask.h" #include "AAX.h" +#include class AAX_IACFDataBuffer; @@ -123,20 +124,53 @@ public: * * \details * If successful, returns a null pointer. Otherwise, returns - * a pointer back to the same object. This is the expected - * usage pattern: - * - * \code{.cpp} - * // release the task on success, retain it on failure - * myTask = myTask->SetDone(status); - * \endcode + * a pointer back to the same object. See + * \ref SetDone(std::unique_ptr&, AAX_TaskCompletionStatus) + * for an example usage pattern. * * \param[in] iStatus * The final status of the task. This indicates to the host * whether or not the task was performed as requested. */ virtual AAX_ITask * SetDone(AAX_TaskCompletionStatus iStatus) = 0; + + /** + * \brief The identifier for this task + */ + virtual AAX_Result GetID(AAX_CTaskID * outID) const = 0; + + /** + * \brief Set a description of the current progress state + * + * \details + * This label may be shown by the host in a progress dialog or + * other progress reporting UI. If possible, use a localized + * string based on \ref AAX_eNotificationEvent_HostLocale . + * + * \param[in] iDescription + * A UTF-8 string describing the current progress state. + */ + virtual AAX_Result SetProgressLabel(const char * iLabel) = 0; + + /// Helper for \ref SetDone() when using a unique_ptr + static void SetDone(std::unique_ptr & iTask, AAX_TaskCompletionStatus iStatus) { + if (iTask) { + AAX_ITask* const pt = iTask->SetDone(iStatus); + if (pt != iTask.get()) { + iTask.reset(pt); + } + } + } + + /// Helper for \ref SetDone() when using a shared_ptr + static void SetDone(std::shared_ptr & iTask, AAX_TaskCompletionStatus iStatus) { + if (iTask) { + AAX_ITask* const pt = iTask->SetDone(iStatus); + if (pt != iTask.get()) { + iTask.reset(pt); + } + } + } }; - #endif diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITaskAgent.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITaskAgent.h index 91e5d0304e..b5da3e45f9 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITaskAgent.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_ITaskAgent.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -44,7 +44,7 @@ * * \ingroup AuxInterface_TaskAgent */ -class AAX_ITaskAgent : public AAX_IACFTaskAgent +class AAX_ITaskAgent : public AAX_IACFTaskAgent_V2 , public CACFUnknown { public: diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_MIDIUtilities.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_MIDIUtilities.h index 9062f58c23..652c2734a9 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_MIDIUtilities.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_MIDIUtilities.h @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2015, 2023-2024 Avid Technology, Inc. + * Copyright 2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -94,7 +94,9 @@ namespace AAX ,eSpecialData_UnaccentedClick = 0x01 ///< For use when the high status nibble is \ref eStatusNibble_NoteOn and the low status nibble is zero }; - + AAX_CONSTEXPR int32_t kMIDIClocksPerQuarter = 24; + AAX_CONSTEXPR int32_t kMIDIClocksPerSPPBeat = 6; + // // Basic MIDI utility functions // @@ -167,6 +169,49 @@ namespace AAX { return (IsAccentedClick(inPacket) || IsUnaccentedClick(inPacket)); } + + /// Returns true if \c inPacket is a MIDI Beat Clock clock message + inline bool IsMBCClock(const AAX_CMidiPacket* inPacket) + { + return ((inPacket) && + (eStatusByte_TimingClock == inPacket->mData[0])); + } + + /// Returns true if \c inPacket is a MIDI Beat Clock start message + inline bool IsMBCStart(const AAX_CMidiPacket* inPacket) + { + return ((inPacket) && + (eStatusByte_Start == inPacket->mData[0])); + } + + /// Returns true if \c inPacket is a MIDI Beat Clock continue message + inline bool IsMBCContinue(const AAX_CMidiPacket* inPacket) + { + return ((inPacket) && + (eStatusByte_Continue == inPacket->mData[0])); + } + + /// Returns true if \c inPacket is a MIDI Beat Clock stop message + inline bool IsMBCStop(const AAX_CMidiPacket* inPacket) + { + return ((inPacket) && + (eStatusByte_Stop == inPacket->mData[0])); + } + + /// Returns true if \c inPacket is a Song Position Pointer message + inline bool IsSongPositionPointer(const AAX_CMidiPacket* inPacket, int16_t* outPosition) + { + bool const isSongPostion = ( + (inPacket) && + (eStatusByte_SongPosition == inPacket->mData[0])); + + if (isSongPostion && outPosition) + { + *outPosition = (static_cast(0x7F & inPacket->mData[2]) << 7) | static_cast(0x7F & inPacket->mData[1]); + } + + return isSongPostion; + } } // namespace AAX /// @cond ignore diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Properties.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Properties.h index e76f41f5fd..9734442e64 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Properties.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Properties.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019-2021, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019-2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -38,9 +38,7 @@ #define AAX_PROPERTIES_H /// @endcond -#ifndef _AAX_H_ -#include "AAX.h" -#endif +#include "AAX_EnumSizeCheck.h" // Add new values only at the end of existing sections! @@ -204,7 +202,7 @@ enum AAX_EProperty : int32_t */ AAX_eProperty_PlugInID_Deprecated = 18, /** \brief \deprecated Use \ref AAX_eProperty_Deprecated_Native_Plugin_List and \ref AAX_eProperty_Deprecated_DSP_Plugin_List - * See AAX_eProperty_PlugInID_RTAS for an example. + * See AAX_eProperty_PlugInID_Native for an example. */ AAX_eProperty_Deprecated_Plugin_List = 21, /** \brief Specify a list of DSP plug-ins that are related to a plug-in type. @@ -680,6 +678,7 @@ enum AAX_EProperty : int32_t * \note See \ref PTSW-189725 */ AAX_eProperty_UsesClientGUI = 151, + AAX_eProperty_MaxGUIProp, // Intentionally given no explicit value //@}end GUI properties @@ -756,9 +755,7 @@ enum AAX_EProperty : int32_t * cached, so if the plug-in description can change between launches of the host application then the plug-in * should apply this constraint to prevent the host from using stale description information. * - * This property should be applied at the collection level as it affects the entire bundle. - * - * \li Apply this property at the \ref AAX_IEffectDescriptor level + * \li Apply this property at the \ref AAX_ICollection level */ AAX_eProperty_Constraint_NeverCache = 303, /** \brief Indicates whether or not the plug-in supports multi-mono configurations @@ -812,7 +809,7 @@ enum AAX_EProperty : int32_t * page table file. If this property is set to a non-zero value, the plug-in may describe a different * \ref AAX_eResourceType_PageTable for each separate Effect. * - * This property needs to be set at the collection level. + * \li Apply this property at the \ref AAX_ICollection level */ AAX_eProperty_StoreXMLPageTablesByEffect = 307, /** \brief \deprecated Use \ref AAX_eProperty_StoreXMLPageTablesByEffect @@ -848,8 +845,10 @@ enum AAX_EProperty : int32_t */ AAX_eProperty_UsesTransportControl = 311, + AAX_eProperty_MaxFeaturesProp, // Intentionally given no explicit value //@} end Plug-in features + //--------------------------------------------------------------------- #if 0 @@ -922,9 +921,19 @@ enum AAX_EProperty : int32_t */ AAX_eProperty_EnableHostDebugLogs = 401, //@} end Debug properties - + + AAX_eProperty_MaxProp, // ALWAYS LEAVE AS LAST PROPERTY VALUE - AAX_eProperty_MaxCap = 10000 // Maximum possible property value over the lifetime of AAX + AAX_eProperty_MaxCap = 10000, // Maximum possible property value over the lifetime of AAX + + /** \brief Property alias to define both input and output stem formats + * + * This property can be used in place of \ref AAX_eProperty_InputStemFormat and + * \ref AAX_eProperty_OutputStemFormat . It is not registered directly with the + * host. Instead, it is intercepted by \ref AAX_VPropertyMap::AddProperty() and + * replaced with the equivalent input and output stem format properties. + */ + AAX_eProperty_StemFormat = 10001, }; AAX_ENUM_SIZE_CHECK(AAX_EProperty); /// @cond ignore diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_StringUtilities.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_StringUtilities.h index 7a28a4b612..b92d32b1ff 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_StringUtilities.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_StringUtilities.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2014-2016, 2018, 2023-2024 Avid Technology, Inc. + * Copyright 2014-2016, 2018, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -34,8 +34,9 @@ #define AAXLibrary_AAX_StringUtilities_h // AAX headers -#include "AAX.h" +#include "AAX_Properties.h" #include "AAX_Enums.h" +#include "AAX.h" // Standard Library headers #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_UIDs.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_UIDs.h index 828524b621..efc17a3176 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_UIDs.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_UIDs.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019-2021, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019-2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -110,6 +110,10 @@ DEFINE_ACFUID(acfIID, IID_IAAXControllerV1, 0x9d5e3e3d, 0x52dc, 0x5efb, 0x20, 0x DEFINE_ACFUID(acfIID, IID_IAAXControllerV2, 0x4c59aa0e, 0xd7c0, 0x4205, 0x8b, 0x6c, 0x32, 0x46, 0x8d, 0x42, 0xd2, 0x02); /// ACF interface ID for \ref AAX_IACFController_V3 DEFINE_ACFUID(acfIID, IID_IAAXControllerV3, 0xdd6f168c, 0xda86, 0x44f8, 0xb8, 0x64, 0xd6, 0xcd, 0x22, 0x19, 0x26, 0xe7); +/// ACF interface ID for \ref AAX_IACFController_V4 +DEFINE_ACFUID(acfIID, IID_IAAXControllerV4, 0xf19c815c, 0xd885, 0x4677, 0x9e, 0x1f, 0x08, 0x37, 0xc7, 0xa6, 0x9e, 0xb3); +/// ACF interface ID for \ref AAX_IACFController_V5 +DEFINE_ACFUID(acfIID, IID_IAAXControllerV5, 0xff310dbf, 0x04e8, 0x45b1, 0xb3, 0x6a, 0xb8, 0xf4, 0xd9, 0xb8, 0xd4, 0x82); /// ACF component ID for %AAX page table controller components DEFINE_ACFUID(acfIID, AAXCompID_PageTableController, 0x63355d80, 0xbfe1, 0x4291, 0xa6, 0x27, 0xc6, 0x5c, 0xb9, 0x58, 0x91, 0x40); @@ -172,6 +176,8 @@ DEFINE_ACFUID(acfIID, IID_IAAXFeatureInfoV1, 0x24545609, 0xa7c4, 0x44d4, 0xab, 0 DEFINE_ACFUID(acfIID, AAXCompID_Task, 0xa5237386, 0xd1a7, 0x490d, 0x5, 0x8, 0x3, 0x2, 0xd, 0x0, 0x2, 0x1); /// ACF interface ID for \ref AAX_IACFTask DEFINE_ACFUID(acfIID, IID_IAAXTaskV1, 0x9733f64b, 0x45d6, 0x47ba, 0x8, 0xb, 0x9, 0xd, 0xd, 0x7, 0x8, 0xa); +/// ACF interface ID for \ref AAX_IACFTask_V2 +DEFINE_ACFUID(acfIID, IID_IAAXTaskV2, 0x1cb60cfa, 0xbd54, 0x4132, 0x9f, 0xd7, 0xea, 0x69, 0xf5, 0x54, 0x12, 0x97); /// ACF component ID for \ref AAX_ISessionDocument components DEFINE_ACFUID(acfIID, AAXCompID_SessionDocument, 0x65fd4d4a, 0xf85e, 0x46fd, 0x8b, 0x7c, 0xa0, 0x31, 0x5c, 0x93, 0x2a, 0xd1); @@ -210,6 +216,8 @@ DEFINE_ACFUID(acfIID, IID_IAAXHostProcessorV2, 0x457546c0, 0xf6bc, 0x4af9, 0xbf, DEFINE_ACFUID(acfIID, AAXCompID_EffectGUI, 0xab94339d, 0x3b34, 0x35dc, 0x29, 0x32, 0x19, 0x23, 0x1d, 0x1d, 0x48, 0x2a); /// ACF interface ID for \ref AAX_IACFEffectGUI DEFINE_ACFUID(acfIID, IID_IAAXEffectGUIV1, 0x964e323d, 0x424c, 0x5e1a, 0x22, 0x27, 0x28, 0x24, 0x23, 0x22, 0x2e, 0x1e); +/// ACF interface ID for \ref AAX_IACFEffectGUI_V2 +DEFINE_ACFUID(acfIID, IID_IAAXEffectGUIV2, 0xa0a8fb30, 0x7e5d, 0x4b4a, 0xaa, 0x00, 0xbc, 0x33, 0x4a, 0x42, 0x0d, 0xbb); /// ACF component ID for \ref AAX_IEffectDirectData components DEFINE_ACFUID(acfIID, AAXCompID_EffectDirectData, 0xaafe80ab, 0x5b34, 0x4522, 0x49, 0x3b, 0x29, 0x53, 0xcd, 0xdd, 0x48, 0x4b); @@ -222,6 +230,8 @@ DEFINE_ACFUID(acfIID, IID_IAAXEffectDirectDataV2, 0x156ea622, 0xbd2e, 0x11e9, 0x DEFINE_ACFUID(acfIID, AAXCompID_TaskAgent, 0xb0753064, 0xc37e, 0x11ed, 0xaf, 0xa1, 0x02, 0x42, 0xac, 0xe2, 0x00, 0x12); /// ACF interface ID for \ref AAX_IACFTaskAgent DEFINE_ACFUID(acfIID, IID_IAAXTaskAgentV1, 0xc096be3e, 0xbc3e, 0x4c38, 0x86, 0x1d, 0x06, 0xa4, 0xba, 0xa4, 0x10, 0x05); +/// ACF interface ID for \ref AAX_IACFTaskAgent_V2 +DEFINE_ACFUID(acfIID, IID_IAAXTaskAgentV2, 0xa734a715, 0xd590, 0x4402, 0xbc, 0xff, 0x85, 0x64, 0x78, 0x52, 0x60, 0x1b); /// ACF component ID for \ref AAX_ISessionDocumentClient components DEFINE_ACFUID(acfIID, AAXCompID_SessionDocumentClient, 0x2280c3d5, 0x38f9, 0x43c5, 0x90, 0x1d, 0x8d, 0x1a, 0xfe, 0xb4, 0x2f, 0xa5); @@ -264,11 +274,22 @@ using AAX_Feature_UID = acfUID; \brief Client stem format feature support \details - To determine the client's support for specific stem formats, use the property map + The host provides \ref AAX_eSupportLevel_ByProperty . To determine the client's support for + specific stem formats, use the property map Property map contents - Key: \ref AAX_EStemFormat values - Value: \ref AAX_ESupportLevel value; if undefined then no information is available + - Key: \ref AAX_EStemFormat values + - Value: \ref AAX_ESupportLevel value; if undefined then no information is available + + Plugins that require support for a particular stem format in order for one or more of the + included effects to function properly should return an empty \ref AAX_ICollection from the + plugin's Describe routine if the host does not support this feature. + + Note that feature queries should never be used to alter plugin description information that + is included in the host's %AAX plugin cache. For example, the list of included Components + should never be changed based on the host's stem format support. + + \details */ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_StemFormat, 0x729dd3e6, 0xd3dc, 0x484c, 0x91, 0x69, 0xf0, 0x64, 0xa0, 0x12, 0x60, 0x1d); @@ -276,23 +297,65 @@ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_StemFormat, 0x729dd3e6, 0xd \brief Client \ref additionalFeatures_AOS "Auxiliary Output Stem" feature support - Plug-ins must detect when a host does not support AOS in order to avoid running off the end of the output audio buffer list in the - audio algorithm. + \details + The host provides \ref AAX_eSupportLevel_Supported if it supports Auxiliary Output Stems for + %AAX effects. - \ref AAX_IComponentDescriptor::AddAuxOutputStem() "AddAuxOutputStem()" will return an error for hosts that do not support this feature, so typically - a feature support query using this \ref AAX_Feature_UID is not required. + Plug-ins must detect when a host does not support AOS in order to avoid running off the end + of the output audio buffer list in the audio algorithm. + + \ref AAX_IComponentDescriptor::AddAuxOutputStem() "AddAuxOutputStem()" will return an error + for hosts that do not support this feature, so typically a feature support query using this + \ref AAX_Feature_UID is not required. + + Plugins that require Auxiliary Output Stem support for one or more of the included effects to + function properly should return an empty \ref AAX_ICollection from the plugin's Describe + routine if the host does not support this feature. + + This feature query can also be used to dynamically change the behavior of the plugin, for + example to reconfigure the Algorithm component data structure for hosts that do not support + Auxiliary Output Stems. + + Note that feature queries should never be used to alter plugin description information that + is included in the host's %AAX plugin cache. */ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_AuxOutputStem, 0x5bea3f7a, 0x2be8, 0x4fe1, 0x83, 0xb2, 0x94, 0xec, 0x91, 0x31, 0xb8, 0x52); /** \var AAXATTR_ClientFeature_AuxOutputStem \brief Client \ref additionalFeatures_Sidechain "Side Chain" feature support + + \details + The host provides \ref AAX_eSupportLevel_Supported if it supports MIDI for %AAX effects. + + Plugins that require side chain support for one or more of the included effects to function + properly should return an empty \ref AAX_ICollection from the plugin's Describe routine if the + host does not support this feature. + + This feature query can also be used to dynamically change the behavior of the plugin, for example + to select a different Effect GUI factory function for hosts that do not support side chains. + + Note that feature queries should never be used to alter plugin description information that + is included in the host's %AAX plugin cache. */ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_SideChainInput, 0x98b0a514, 0x2b96, 0x4e1f, 0x87, 0x81, 0x99, 0x08, 0xc9, 0xe3, 0xe6, 0x8b); /** \var AAXATTR_ClientFeature_MIDI \brief Client \ref additionalFeatures_MIDI "MIDI" feature support + + \details + The host provides \ref AAX_eSupportLevel_Supported if it supports MIDI for %AAX effects. + + Plugins that require MIDI support for one or more of the included effects to function properly + should return an empty \ref AAX_ICollection from the plugin's Describe routine if the host does + not support this feature. + + This feature query can also be used to dynamically change the behavior of the plugin, for example + to select a different Effect Parameters factory function for hosts that do not support MIDI. + + Note that feature queries should never be used to alter plugin description information that + is included in the host's %AAX plugin cache. */ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_MIDI, 0xf5b0816c, 0x5768, 0x49c2, 0xae, 0x3e, 0x85, 0x0d, 0xe3, 0x42, 0xeb, 0x07); @@ -314,6 +377,12 @@ DEFINE_ACFUID(AAX_Feature_UID, AAXATTR_ClientFeature_MIDI, 0xf5b0816c, 0x5768, 0 Value: one of \ref AAX_EHostLevel Query using the host's \ref IACFDefinition + + Plugins that require a certain host level should return an empty \ref AAX_ICollection from + the plugin's Describe routine if the host does not provide the required level or higher. + + Note that host support queries should never be used to alter plugin description information + that is included in the host's %AAX plugin cache. */ DEFINE_ACFUID(acfUID, AAXATTR_Client_Level, 0xe550868e, 0x1e6a, 0x482b, 0xb5, 0x86, 0x73, 0xf1, 0x24, 0x6e, 0x12, 0x6b); @@ -340,6 +409,15 @@ DEFINE_ACFUID(acfUID, AAXATTR_Client_Level, 0xe550868e, 0x1e6a, 0x482b, 0xb5, 0x 00000111111001110000001100000001, or in decimal: 132580097 Query using the host's \ref IACFDefinition + + Plugins that require a certain host version should return an empty \ref AAX_ICollection from + the plugin's Describe routine if the host does not provide the required level or higher. + + That said, this check should only be used as a last resort. In nearly all cases a plugin + should use other available queries, such as feature queries, to determine host capabilities. + + Note that a host version query should never be used to alter plugin description information + that is included in the host's %AAX plugin cache. */ DEFINE_ACFUID(acfUID, AAXATTR_Client_Version, 0x950cf999, 0x37aa, 0x49de, 0x8d, 0xcc, 0xbe, 0x7f, 0xa7, 0x3e, 0x6a, 0xee); diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VComponentDescriptor.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VComponentDescriptor.h index dd60f93541..7955e13c00 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VComponentDescriptor.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VComponentDescriptor.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -38,6 +38,8 @@ #include "AAX_IComponentDescriptor.h" #include "AAX_IDma.h" #include "AAX_IACFComponentDescriptor.h" +#include "AAX_Properties.h" +#include "AAX_Enums.h" // ACF Includes #include "acfunknown.h" diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VController.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VController.h index 3a0602b751..2e98a73e88 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VController.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VController.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -77,6 +77,8 @@ public: AAX_Result GetHybridSignalLatency(int32_t* outSamples) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetHybridSignalLatency() AAX_Result GetPlugInTargetPlatform(AAX_CTargetPlatform* outTargetPlatform) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetPlugInTargetPlatform() AAX_Result GetIsAudioSuite(AAX_CBoolean* outIsAudioSuite) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetIsAudioSuite() + AAX_Result GetInstanceGroupID(AAX_CInstanceGroupID* outInstanceGroupID) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetInstanceGroupID() + AAX_Result GetInstanceID(AAX_CInstanceID* outInstanceID) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetInstanceID() AAX_Result GetCycleCount( AAX_EProperty inWhichCycleCount, AAX_CPropertyValue* outNumCycles) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetCycleCount() AAX_Result GetTODLocation ( AAX_CTimeOfDay* outTODLocation ) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetTODLocation() AAX_Result GetCurrentAutomationTimestamp(AAX_CTransportCounter* outTimestamp) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetCurrentAutomationTimestamp() @@ -92,6 +94,7 @@ public: // Notification functions AAX_Result SendNotification ( AAX_CTypeID inNotificationType, const void* inNotificationData, uint32_t inNotificationDataSize ) AAX_OVERRIDE; ///< \copydoc AAX_IController::SendNotification(AAX_CTypeID, const void*, uint32_t) AAX_Result SendNotification ( AAX_CTypeID inNotificationType) AAX_OVERRIDE; ///< \copydoc AAX_IController::SendNotification(AAX_CTypeID) \note Not an AAX interface method + AAX_Result RegisterForNotification(/* AAX_ENotificationEvent */ AAX_CTypeID inNotificationType, IACFUnknown const * inSubscriberObject) AAX_OVERRIDE; ///< \copydoc AAX_IController::RegisterForNotification() //Metering functions AAX_Result GetCurrentMeterValue ( AAX_CTypeID inMeterID, float * outMeterValue ) const AAX_OVERRIDE; ///< \copydoc AAX_IController::GetCurrentMeterValue() @@ -155,6 +158,8 @@ private: ACFPtr mIController; ACFPtr mIControllerV2; ACFPtr mIControllerV3; + ACFPtr mIControllerV4; + ACFPtr mIControllerV5; // AAX_IACFPageTableController interface methods are aggregated into AAX_IController ACFPtr mIPageTableController; diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VDescriptionHost.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VDescriptionHost.h index 266fbc508e..bcef724f2e 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VDescriptionHost.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VDescriptionHost.h @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2016-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2016-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -26,6 +26,7 @@ #include "AAX_IDescriptionHost.h" +#include "AAX_Errors.h" #include "ACFPtr.h" diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VEffectDescriptor.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VEffectDescriptor.h index 05850955b1..b52871d5a6 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VEffectDescriptor.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VEffectDescriptor.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -66,6 +66,7 @@ public: AAX_Result AddComponent ( AAX_IComponentDescriptor * inComponentDescriptor ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::AddComponent() AAX_Result AddName ( const char * inPlugInName ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::AddName() AAX_Result AddCategory ( uint32_t inCategory ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::AddCategory() + AAX_Result SetRole ( uint32_t inRole ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::SetRole() AAX_Result AddCategoryBypassParameter ( uint32_t inCategory, AAX_CParamID inParamID ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::AddCategoryBypassParameter() AAX_Result AddProcPtr ( void * inProcPtr, AAX_CProcPtrID inProcID ) AAX_OVERRIDE; ///< \copydoc AAX_IEffectDescriptor::AddProcPtr() /** \copydoc AAX_IEffectDescriptor::NewPropertyMap() diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VTask.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VTask.h index b0dfbc5756..71137127da 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VTask.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_VTask.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* * - * Copyright 2023-2024 Avid Technology, Inc. + * Copyright 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -39,6 +39,8 @@ #include "ACFPtr.h" class IACFUnknown; +class AAX_IACFTask; +class AAX_IACFTask_V2; /*! \brief Version-managed concrete \ref AAX_ITask @@ -56,8 +58,11 @@ public: float GetProgress() const AAX_OVERRIDE; ///< \copydoc AAX_ITask::GetProgress() AAX_Result AddResult(AAX_IACFDataBuffer const * iResult) AAX_OVERRIDE; ///< \copydoc AAX_ITask::AddResult() AAX_ITask * SetDone(AAX_TaskCompletionStatus iStatus) AAX_OVERRIDE; ///< \copydoc AAX_ITask::SetDone() + AAX_Result GetID(AAX_CTaskID * outID) const AAX_OVERRIDE; ///< \copydoc AAX_ITask::GetID() + AAX_Result SetProgressLabel(const char * iLabel) AAX_OVERRIDE; ///< \copydoc AAX_ITask::SetProgressLabel() private: ACFPtr mTaskV1; + ACFPtr mTaskV2; }; #endif diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Version.h b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Version.h index 0852740524..53da81cd44 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Version.h +++ b/modules/juce_audio_plugin_client/AAX/SDK/Interfaces/AAX_Version.h @@ -1,7 +1,7 @@ /*================================================================================================*/ /* - - * Copyright 2013-2017, 2019, 2021-2024 Avid Technology, Inc. + * + * Copyright 2013-2017, 2019, 2021-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -53,11 +53,11 @@ * - SDK 10.2.1 > \c 0x0A02 * */ -#define AAX_SDK_VERSION ( 0x0208 ) +#define AAX_SDK_VERSION ( 0x0209 ) /** \brief An atomic revision number for the source included in this SDK */ -#define AAX_SDK_CURRENT_REVISION ( 20208000 ) +#define AAX_SDK_CURRENT_REVISION ( 20209000 ) #define AAX_SDK_1p0p1_REVISION ( 3712639 ) @@ -85,6 +85,8 @@ #define AAX_SDK_2p6p1_REVISION ( 20206001 ) #define AAX_SDK_2p7p0_REVISION ( 20207000 ) #define AAX_SDK_2p8p0_REVISION ( 20208000 ) +#define AAX_SDK_2p8p1_REVISION ( 20208001 ) +#define AAX_SDK_2p9p0_REVISION ( 20209000 ) //CURREVSTAMP < do not remove this comment diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectDirectData.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectDirectData.cpp index 5d9f0132c7..48ad829088 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectDirectData.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectDirectData.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -29,6 +29,7 @@ #include "AAX_VPrivateDataAccess.h" #include "AAX_VController.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" AAX_CEffectDirectData::AAX_CEffectDirectData() : mController(NULL), diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectParameters.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectParameters.cpp index cee703c3d6..d61c1b45dc 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectParameters.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CEffectParameters.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -941,7 +941,9 @@ AAX_Result AAX_CEffectParameters::UpdatePageTable(uint32_t inTableType, int32_t //---------------------------------------------------------------------------------------------- AAX_Result AAX_CEffectParameters::GetCustomData( AAX_CTypeID /*iDataBlockID*/, uint32_t /*inDataSize*/, void* /*oData*/, uint32_t* oDataWritten) const { - *oDataWritten = 0; + if (oDataWritten) { + *oDataWritten = 0; + } return AAX_SUCCESS; } diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostProcessor.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostProcessor.cpp index e4f198a09c..ec4cd3b46d 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostProcessor.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostProcessor.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2010-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2010-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -29,6 +29,7 @@ #include "AAX_VController.h" #include "AAX_IEffectParameters.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" // *************************************************************************** // METHOD: AAX_CHostProcessor diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostServices.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostServices.cpp index 6e765a938b..97a06303d7 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostServices.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CHostServices.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2018, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2018, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -24,9 +24,10 @@ /*================================================================================================*/ -#include "AAX.h" #include "AAX_CHostServices.h" #include "AAX_VHostServices.h" +#include "AAX_Errors.h" +#include "AAX.h" #include #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CMutex.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CMutex.cpp index 700aab2a20..652b63afff 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CMutex.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CMutex.cpp @@ -35,7 +35,7 @@ #if defined(__GNUC__) #include #include -#elif defined(WIN32) +#elif defined(_WIN32) #include #else #error AAX_CMutex not implemented @@ -46,7 +46,7 @@ struct opaque_aax_mutex_t #if defined(__GNUC__) pthread_t mOwner; pthread_mutex_t mSysMutex; -#elif defined(WIN32) +#elif defined(_WIN32) DWORD mOwner; HANDLE mSysMutex; #endif @@ -61,7 +61,7 @@ AAX_CMutex::AAX_CMutex() mMutex->mOwner = 0; #if defined(__GNUC__) if (::pthread_mutex_init(&mMutex->mSysMutex, NULL) != 0) -#elif defined(WIN32) +#elif defined(_WIN32) mMutex->mSysMutex = ::CreateMutex(NULL, false, NULL); if (0 == mMutex->mSysMutex) #endif @@ -80,7 +80,7 @@ AAX_CMutex::~AAX_CMutex() { #if defined(__GNUC__) ::pthread_mutex_destroy(&mMutex->mSysMutex); -#elif defined(WIN32) +#elif defined(_WIN32) ::CloseHandle(mMutex->mSysMutex); #endif delete mMutex; @@ -104,7 +104,7 @@ bool AAX_CMutex::Lock() mMutex->mOwner = curThread; result = true; } -#elif defined(WIN32) +#elif defined(_WIN32) DWORD curThread = ::GetCurrentThreadId(); if(mMutex->mOwner != curThread) { @@ -130,7 +130,7 @@ void AAX_CMutex::Unlock() mMutex->mOwner = 0; ::pthread_mutex_unlock(&mMutex->mSysMutex); } -#elif defined(WIN32) +#elif defined(_WIN32) if(mMutex->mOwner == ::GetCurrentThreadId()) { mMutex->mOwner = 0; @@ -177,7 +177,7 @@ bool AAX_CMutex::Try_Lock() // current thread already owns the lock result = true; } -#elif defined(WIN32) +#elif defined(_WIN32) if(mMutex->mOwner != ::GetCurrentThreadId()) { // try to acquire the mutex diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CUIDs.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CUIDs.cpp index 43f0bd0ea7..e1f51e31a7 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CUIDs.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_CUIDs.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_IEffectGUI.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_IEffectGUI.cpp index 62344ae028..85365a37ad 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_IEffectGUI.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_IEffectGUI.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 1993-2015, 2023-2024 Avid Technology, Inc. + * Copyright 1993-2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -29,7 +29,8 @@ ACFMETHODIMP AAX_IEffectGUI::InternalQueryInterface(const acfIID & riid, void **ppvObjOut) { - if (riid == IID_IAAXEffectGUIV1 ) + if ( riid == IID_IAAXEffectGUIV1 + || riid == IID_IAAXEffectGUIV2) { *ppvObjOut = static_cast(this); ( static_cast(*ppvObjOut))->AddRef(); diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VAutomationDelegate.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VAutomationDelegate.cpp index 9eac29ae4e..2490501fe1 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VAutomationDelegate.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VAutomationDelegate.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -26,6 +26,7 @@ #include "AAX_VAutomationDelegate.h" #include "AAX_IACFController.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" #include #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VComponentDescriptor.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VComponentDescriptor.cpp index 505b43e73f..a952aa4cc4 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VComponentDescriptor.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VComponentDescriptor.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -30,6 +30,7 @@ #include "AAX_VPropertyMap.h" #include "AAX_UIDs.h" #include "AAX_Assert.h" +#include "AAX_Errors.h" // ACF Includes #include "acfbaseapi.h" diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VController.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VController.cpp index 961331302d..accde1826c 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VController.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VController.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2019, 2021, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -28,6 +28,7 @@ #include "AAX_IACFPageTableController.h" #include "AAX_UIDs.h" #include "AAX_Assert.h" +#include "AAX_Errors.h" #include "acfbaseapi.h" @@ -43,6 +44,8 @@ AAX_VController::AAX_VController( IACFUnknown* pUnknown ) pUnknown->QueryInterface(IID_IAAXControllerV1, (void **)&mIController); pUnknown->QueryInterface(IID_IAAXControllerV2, (void **)&mIControllerV2); pUnknown->QueryInterface(IID_IAAXControllerV3, (void **)&mIControllerV3); + pUnknown->QueryInterface(IID_IAAXControllerV4, (void **)&mIControllerV4); + pUnknown->QueryInterface(IID_IAAXControllerV5, (void **)&mIControllerV5); pUnknown->QueryInterface(IID_IAAXPageTableController, (void **)&mIPageTableController); pUnknown->QueryInterface(IID_IAAXPageTableControllerV2, (void **)&mIPageTableControllerV2); @@ -55,7 +58,7 @@ AAX_VController::AAX_VController( IACFUnknown* pUnknown ) // swallow any failure here - just clear the smart pointer mComponentFactory = NULL; } - } + } } // ****************************************************************************************** @@ -98,6 +101,17 @@ AAX_Result AAX_VController::SendNotification (AAX_CTypeID inNotificationType) return AAX_ERROR_UNIMPLEMENTED; } +// ****************************************************************************************** +// METHOD: RegisterForNotification +// ****************************************************************************************** +AAX_Result AAX_VController::RegisterForNotification(/* AAX_ENotificationEvent */ AAX_CTypeID inNotificationType, IACFUnknown const * inSubscriberObject) +{ + if (mIControllerV5) + return mIControllerV5->RegisterForNotification(inNotificationType, inSubscriberObject); + + return AAX_ERROR_UNIMPLEMENTED; +} + // ****************************************************************************************** // METHOD: GetEffectID // ****************************************************************************************** @@ -322,6 +336,28 @@ AAX_Result AAX_VController::GetIsAudioSuite(AAX_CBoolean* outIsAudioSuite) const return AAX_ERROR_UNIMPLEMENTED; } +// ****************************************************************************************** +// METHOD: GetInstanceGroupID +// ****************************************************************************************** +AAX_Result AAX_VController::GetInstanceGroupID(AAX_CInstanceGroupID* outInstanceGroupID) const +{ + if (mIControllerV4) + return mIControllerV4->GetInstanceGroupID(outInstanceGroupID); + + return AAX_ERROR_UNIMPLEMENTED; +} + +// ****************************************************************************************** +// METHOD: GetInstanceID +// ****************************************************************************************** +AAX_Result AAX_VController::GetInstanceID(AAX_CInstanceID* outInstanceID) const +{ + if (mIControllerV5) + return mIControllerV5->GetInstanceID(outInstanceID); + + return AAX_ERROR_UNIMPLEMENTED; +} + // ****************************************************************************************** // METHOD: GetHostName // ****************************************************************************************** diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VEffectDescriptor.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VEffectDescriptor.cpp index 85f3cb8fb0..da9e78b94c 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VEffectDescriptor.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VEffectDescriptor.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -26,6 +26,7 @@ #include "AAX_VEffectDescriptor.h" #include "AAX_VComponentDescriptor.h" #include "AAX_VPropertyMap.h" +#include "AAX_Errors.h" #include "AAX_UIDs.h" #include "acfbaseapi.h" @@ -114,12 +115,22 @@ AAX_Result AAX_VEffectDescriptor::AddName( const char * inPlugInName ) // ****************************************************************************************** AAX_Result AAX_VEffectDescriptor::AddCategory( uint32_t inCategory ) { + // For now, not checking that the value only contains category bits if ( mIACFEffectDescriptor ) return mIACFEffectDescriptor->AddCategory( inCategory ); return AAX_ERROR_NULL_OBJECT; } +// ****************************************************************************************** +// METHOD: SetRole +// ****************************************************************************************** +AAX_Result AAX_VEffectDescriptor::SetRole( uint32_t inRole ) +{ + // For now, not checking that the value only contains role bits + return this->AddCategory( inRole ); +} + // ****************************************************************************************** // METHOD: AddCategoryBypassParameter // ****************************************************************************************** diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VFeatureInfo.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VFeatureInfo.cpp index 304e6b3a0f..1ed3e2b009 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VFeatureInfo.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VFeatureInfo.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2016-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2016-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -28,6 +28,7 @@ #include "AAX_IACFFeatureInfo.h" #include "AAX_VPropertyMap.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" // Standard includes #include diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostProcessorDelegate.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostProcessorDelegate.cpp index 537df513db..9b709606eb 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostProcessorDelegate.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostProcessorDelegate.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2010-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2010-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -26,6 +26,7 @@ #include "AAX_VHostProcessorDelegate.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" // ****************************************************************************************** // METHOD: AAX_VHostProcessorDelegate diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostServices.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostServices.cpp index 211e11bf59..8b4f4ffdcd 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostServices.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VHostServices.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2018, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2018, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -25,6 +25,7 @@ #include "AAX_VHostServices.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" #include "acfbaseapi.h" #include "ACFPtr.h" diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPageTable.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPageTable.cpp index 06d4f512bf..3ce8906c85 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPageTable.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPageTable.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2016-2017, 2023-2024 Avid Technology, Inc. + * Copyright 2016-2017, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -25,6 +25,7 @@ #include "AAX_VPageTable.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" // ****************************************************************************************** diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPrivateDataAccess.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPrivateDataAccess.cpp index 45980d7728..a9343eeeeb 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPrivateDataAccess.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPrivateDataAccess.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -25,6 +25,7 @@ #include "AAX_VPrivateDataAccess.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" // ****************************************************************************************** // METHOD: AAX_VPrivateDataAccess diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPropertyMap.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPropertyMap.cpp index 5d442677a1..6341ee4338 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPropertyMap.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VPropertyMap.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2017, 2019, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2017, 2019, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -227,6 +227,20 @@ AAX_CBoolean AAX_VPropertyMap::GetPointerProperty ( AAX_EProperty inProperty, co // ****************************************************************************************** AAX_Result AAX_VPropertyMap::AddProperty ( AAX_EProperty inProperty, AAX_CPropertyValue inValue ) { + // AAX_eProperty_StemFormat is an alias to register equivalent input/output stem formats + if (AAX_eProperty_StemFormat == inProperty) + { + AAX_Result inputResult = this->AddProperty(AAX_eProperty_InputStemFormat, inValue); + AAX_Result outputResult = this->AddProperty(AAX_eProperty_OutputStemFormat, inValue); + if (inputResult != AAX_SUCCESS) { + return inputResult; + } + if (outputResult != AAX_SUCCESS) { + return outputResult; + } + return AAX_SUCCESS; + } + // PT-223581: Pro Tools removes plug-ins from the insert menu if unsupported stem formats are detected if ( (AAX_eProperty_InputStemFormat == inProperty) || (AAX_eProperty_OutputStemFormat == inProperty)) { @@ -246,7 +260,7 @@ AAX_Result AAX_VPropertyMap::AddProperty ( AAX_EProperty inProperty, AAX_CProper } // otherwise, it is fine to register stem formats which are unknown to the host } - + if ( mIACFPropertyMap ) { return mIACFPropertyMap->AddProperty ( inProperty, inValue ); diff --git a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VTransport.cpp b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VTransport.cpp index 0c5817f515..ddda294b99 100644 --- a/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VTransport.cpp +++ b/modules/juce_audio_plugin_client/AAX/SDK/Libs/AAXLibrary/source/AAX_VTransport.cpp @@ -1,6 +1,6 @@ /*================================================================================================*/ /* - * Copyright 2013-2015, 2019-2021, 2023-2024 Avid Technology, Inc. + * Copyright 2013-2015, 2019-2021, 2023-2025 Avid Technology, Inc. * All rights reserved. * * This file is part of the Avid AAX SDK. @@ -25,6 +25,7 @@ #include "AAX_VTransport.h" #include "AAX_UIDs.h" +#include "AAX_Errors.h" AAX_VTransport::AAX_VTransport( IACFUnknown* pUnknown ) {