Path: blob/master/au3/libraries/lib-ladspa/LadspaInstance.h
10849 views
/**********************************************************************12Audacity: A Digital Audio Editor34LadspaInstance.h56Dominic Mazzoni7Paul Licameli split from LadspaEffect.cpp89**********************************************************************/10#ifndef __AUDACITY_LADSPA_INSTANCE__11#define __AUDACITY_LADSPA_INSTANCE__1213#include "PerTrackEffect.h"14#include "ladspa.h"1516struct LadspaEffectSettings {17explicit LadspaEffectSettings(size_t nPorts = 0)18: controls(nPorts)19{}2021// Allocate as many slots as there are ports, although some may correspond22// to audio, not control, ports and so rest unused23std::vector<float> controls;24};2526//! Carry output control port information back to main thread27struct LADSPA_API LadspaEffectOutputs : EffectOutputs {28~LadspaEffectOutputs() override;29std::unique_ptr<EffectOutputs> Clone() const override;3031void Assign(EffectOutputs&& src) override;3233// Allocate as many slots as there are ports, although some may correspond34// to input and audio ports and remain unused35std::vector<float> controls;36};3738struct LADSPA_API LadspaInstance : PerTrackEffect::Instance, EffectInstanceWithBlockSize39{40//! Get the preference for using latency41static bool LoadUseLatency(42const EffectDefinitionInterface& effect);43//! Set the preference for using latency44static bool SaveUseLatency(45const EffectDefinitionInterface& effect, bool value);4647//! Assume settings originated from MakeSettings() and copies thereof48static inline LadspaEffectSettings& GetSettings(EffectSettings& settings)49{50auto pSettings = settings.cast<LadspaEffectSettings>();51assert(pSettings);52return *pSettings;53}5455//! Assume settings originated from MakeSettings() and copies thereof56static inline const LadspaEffectSettings&57GetSettings(const EffectSettings& settings)58{59return GetSettings(const_cast<EffectSettings&>(settings));60}6162LadspaInstance(const PerTrackEffect& processor, const LADSPA_Descriptor* pData, const ArrayOf<unsigned long>& inputPorts,63const ArrayOf<unsigned long>& outputPorts, unsigned audioIns, unsigned audioOuts, int latencyPort);64bool ProcessInitialize(EffectSettings& settings, double sampleRate, ChannelNames chanMap) override;65bool ProcessFinalize() noexcept override;66size_t ProcessBlock(EffectSettings& settings, const float* const* inBlock, float* const* outBlock, size_t blockLen)67override;6869SampleCount GetLatency(const EffectSettings& settings, double sampleRate)70const override;7172bool RealtimeInitialize(EffectSettings& settings, double sampleRate)73override;74bool RealtimeAddProcessor(EffectSettings& settings, EffectOutputs* pOutputs, unsigned numChannels, float sampleRate)75override;76bool RealtimeSuspend() override;77bool RealtimeResume() override;78bool RealtimeProcessStart(MessagePackage& package) override;79size_t RealtimeProcess(size_t group, EffectSettings& settings, const float* const* inBuf, float* const* outBuf, size_t numSamples)80override;81bool RealtimeProcessEnd(EffectSettings& settings) noexcept override;82bool RealtimeFinalize(EffectSettings& settings) noexcept override;8384unsigned GetAudioInCount() const override;85unsigned GetAudioOutCount() const override;8687LADSPA_Handle InitInstance(88float sampleRate, LadspaEffectSettings& settings, LadspaEffectOutputs* pOutputs) const;89void FreeInstance(LADSPA_Handle handle) const;9091const LADSPA_Descriptor* const mData;92const ArrayOf<unsigned long>& mInputPorts;93const ArrayOf<unsigned long>& mOutputPorts;9495bool mReady{ false };96LADSPA_Handle mMaster{};9798// Realtime processing99std::vector<LADSPA_Handle> mSlaves;100101const unsigned mAudioIns;102const unsigned mAudioOuts;103const int mLatencyPort;104const bool mUseLatency;105};106107#endif108109110