Audacity 3.2.0
Public Member Functions | Public Attributes | List of all members
LadspaEffect::Instance Struct Reference
Inheritance diagram for LadspaEffect::Instance:
[legend]
Collaboration diagram for LadspaEffect::Instance:
[legend]

Public Member Functions

 Instance (const PerTrackEffect &processor)
 
bool ProcessInitialize (EffectSettings &settings, double sampleRate, ChannelNames chanMap) override
 
bool ProcessFinalize () noexcept override
 
size_t ProcessBlock (EffectSettings &settings, const float *const *inBlock, float *const *outBlock, size_t blockLen) override
 Called for destructive effect computation. More...
 
SampleCount GetLatency (const EffectSettings &settings, double sampleRate) const override
 
bool RealtimeInitialize (EffectSettings &settings, double sampleRate) override
 
bool RealtimeAddProcessor (EffectSettings &settings, EffectOutputs *pOutputs, unsigned numChannels, float sampleRate) override
 
bool RealtimeSuspend () override
 
bool RealtimeResume () override
 
bool RealtimeProcessStart (MessagePackage &package) override
 settings are possibly changed, since last call, by an asynchronous dialog More...
 
size_t RealtimeProcess (size_t group, EffectSettings &settings, const float *const *inBuf, float *const *outBuf, size_t numSamples) override
 
bool RealtimeProcessEnd (EffectSettings &settings) noexcept override
 settings can be updated to let a dialog change appearance at idle More...
 
bool RealtimeFinalize (EffectSettings &settings) noexcept override
 
unsigned GetAudioInCount () const override
 How many input buffers to allocate at once. More...
 
unsigned GetAudioOutCount () const override
 How many output buffers to allocate at once. More...
 
const LadspaEffectGetEffect () const
 
- Public Member Functions inherited from PerTrackEffect::Instance
 Instance (const PerTrackEffect &processor)
 
 ~Instance () override
 
bool Process (EffectSettings &settings) final
 Uses the other virtual functions of this class. More...
 
bool ProcessInitialize (EffectSettings &settings, double sampleRate, ChannelNames chanMap) override
 
bool ProcessFinalize () noexcept override
 
- Public Member Functions inherited from EffectInstanceEx
virtual bool Init ()
 Call once to set up state for whole list of tracks to be processed. More...
 
virtual bool Process (EffectSettings &settings)=0
 Actually do the effect here. More...
 
 ~EffectInstanceEx () override
 
- Public Member Functions inherited from EffectInstance
virtual ~EffectInstance ()
 
virtual size_t GetBlockSize () const =0
 
virtual size_t SetBlockSize (size_t maxBlockSize)=0
 
virtual unsigned GetAudioInCount () const =0
 How many input buffers to allocate at once. More...
 
virtual unsigned GetAudioOutCount () const =0
 How many output buffers to allocate at once. More...
 
virtual bool RealtimeInitialize (EffectSettings &settings, double sampleRate)
 
virtual bool RealtimeAddProcessor (EffectSettings &settings, EffectOutputs *pOutputs, unsigned numChannels, float sampleRate)
 
virtual bool RealtimeSuspend ()
 
virtual bool RealtimeResume ()
 
virtual std::unique_ptr< MessageMakeMessage () const
 Called on the main thread, in which the result may be cloned. More...
 
virtual bool UsesMessages () const noexcept
 
virtual bool RealtimeProcessStart (MessagePackage &package)
 settings are possibly changed, since last call, by an asynchronous dialog More...
 
virtual size_t RealtimeProcess (size_t group, EffectSettings &settings, const float *const *inBuf, float *const *outBuf, size_t numSamples)
 
virtual bool RealtimeProcessEnd (EffectSettings &settings) noexcept
 settings can be updated to let a dialog change appearance at idle More...
 
virtual bool RealtimeFinalize (EffectSettings &settings) noexcept
 
virtual size_t GetTailSize () const
 
virtual SampleCount GetLatency (const EffectSettings &settings, double sampleRate) const
 
virtual bool NeedsDither () const
 
virtual bool ProcessInitialize (EffectSettings &settings, double sampleRate, ChannelNames chanMap)=0
 
virtual bool ProcessFinalize () noexcept=0
 
virtual size_t ProcessBlock (EffectSettings &settings, const float *const *inBlock, float *const *outBlock, size_t blockLen)=0
 Called for destructive effect computation. More...
 
- Public Member Functions inherited from EffectInstanceWithBlockSize
 ~EffectInstanceWithBlockSize () override
 
size_t GetBlockSize () const override
 
size_t SetBlockSize (size_t maxBlockSize) override
 

Public Attributes

bool mReady { false }
 
LADSPA_Handle mMaster {}
 
std::vector< LADSPA_HandlemSlaves
 
const bool mUseLatency
 

Additional Inherited Members

- Public Types inherited from EffectInstance
using Message = EffectSettingsAccess::Message
 
using SampleCount = uint64_t
 
- Protected Attributes inherited from PerTrackEffect::Instance
const PerTrackEffectmProcessor
 
- Protected Attributes inherited from EffectInstanceWithBlockSize
size_t mBlockSize { 0 }
 

Detailed Description

Definition at line 919 of file LadspaEffect.cpp.

Constructor & Destructor Documentation

◆ Instance()

LadspaEffect::Instance::Instance ( const PerTrackEffect processor)
explicit

Definition at line 963 of file LadspaEffect.cpp.

964 : PerTrackEffect::Instance{ processor }
965 , mUseLatency{ LoadUseLatency(processor) }
966{
967}
bool LoadUseLatency(const EffectDefinitionInterface &effect)

Member Function Documentation

◆ GetAudioInCount()

unsigned LadspaEffect::Instance::GetAudioInCount ( ) const
overridevirtual

How many input buffers to allocate at once.

If the instance processes channels independently, this can return 1 The result is not necessarily well defined before RealtimeInitialize

Implements EffectInstance.

Definition at line 1055 of file LadspaEffect.cpp.

1056{
1057 return GetEffect().mAudioIns;
1058}
unsigned mAudioIns
Definition: LadspaEffect.h:163
const LadspaEffect & GetEffect() const

◆ GetAudioOutCount()

unsigned LadspaEffect::Instance::GetAudioOutCount ( ) const
overridevirtual

How many output buffers to allocate at once.

The result is not necessarily well defined before RealtimeInitialize

Implements EffectInstance.

Definition at line 1050 of file LadspaEffect.cpp.

1051{
1052 return GetEffect().mAudioOuts;
1053}
unsigned mAudioOuts
Definition: LadspaEffect.h:167

◆ GetEffect()

const LadspaEffect & LadspaEffect::Instance::GetEffect ( ) const
inline

Definition at line 951 of file LadspaEffect.cpp.

952 { return static_cast<const LadspaEffect &>(mProcessor); }
An Effect that calls up a LADSPA plug in, i.e. many possible effects from this one class.
Definition: LadspaEffect.h:67
const PerTrackEffect & mProcessor

References PerTrackEffect::Instance::mProcessor.

◆ GetLatency()

auto LadspaEffect::Instance::GetLatency ( const EffectSettings settings,
double  sampleRate 
) const
overridevirtual

Default implementation returns 0

Reimplemented from EffectInstance.

Definition at line 974 of file LadspaEffect.cpp.

976{
977 auto &effect = GetEffect();
978 auto &controls = GetSettings(settings).controls;
979 if (mUseLatency && effect.mLatencyPort >= 0)
980 return controls[effect.mLatencyPort];
981 return 0;
982}
static Settings & settings()
Definition: TrackInfo.cpp:87
static LadspaEffectSettings & GetSettings(EffectSettings &settings)
Assume settings originated from MakeSettings() and copies thereof.
Definition: Effect.h:178
std::vector< float > controls
Definition: LadspaEffect.h:50

References LadspaEffectSettings::controls, EffectWithSettings< LadspaEffectSettings, StatelessPerTrackEffect >::GetSettings(), and settings().

Here is the call graph for this function:

◆ ProcessBlock()

size_t LadspaEffect::Instance::ProcessBlock ( EffectSettings settings,
const float *const *  inBlock,
float *const *  outBlock,
size_t  blockLen 
)
overridevirtual

Called for destructive effect computation.

Implements EffectInstance.

Definition at line 1013 of file LadspaEffect.cpp.

1015{
1016 auto &effect = GetEffect();
1017 for (unsigned i = 0; i < effect.mAudioIns; ++i)
1018 effect.mData->connect_port(mMaster, effect.mInputPorts[i],
1019 const_cast<float*>(inBlock[i]));
1020
1021 for (unsigned i = 0; i < effect.mAudioOuts; ++i)
1022 effect.mData->connect_port(mMaster, effect.mOutputPorts[i], outBlock[i]);
1023
1024 effect.mData->run(mMaster, blockLen);
1025 return blockLen;
1026}

◆ ProcessFinalize()

bool LadspaEffect::Instance::ProcessFinalize ( )
overridevirtualnoexcept

Called at end of destructive processing, for each (mono/stereo) track Default implementation does nothing, returns true This may be called during stack unwinding:

Implements EffectInstance.

Definition at line 1000 of file LadspaEffect.cpp.

1001{
1002return GuardedCall<bool>([&]{
1003 if (mReady) {
1004 mReady = false;
1006 mMaster = nullptr;
1007 }
1008
1009 return true;
1010});
1011}
void FreeInstance(LADSPA_Handle handle) const

◆ ProcessInitialize()

bool LadspaEffect::Instance::ProcessInitialize ( EffectSettings settings,
double  sampleRate,
ChannelNames  chanMap 
)
overridevirtual

Called at start of destructive processing, for each (mono/stereo) track Default implementation does nothing, returns true

Parameters
chanMapnull or array terminated with ChannelNameEOL. Do not retain the pointer
Postcondition
GetAudioInCount() and GetAudioOutCount() are well defined

Implements EffectInstance.

Definition at line 984 of file LadspaEffect.cpp.

986{
987 /* Instantiate the plugin */
988 if (!mReady) {
989 auto &effect = GetEffect();
990 auto &ladspaSettings = GetSettings(settings);
991 // Destructive effect processing doesn't need output ports
992 mMaster = effect.InitInstance(sampleRate, ladspaSettings, nullptr);
993 if (!mMaster)
994 return false;
995 mReady = true;
996 }
997 return true;
998}

References EffectWithSettings< LadspaEffectSettings, StatelessPerTrackEffect >::GetSettings(), and settings().

Here is the call graph for this function:

◆ RealtimeAddProcessor()

bool LadspaEffect::Instance::RealtimeAddProcessor ( EffectSettings settings,
EffectOutputs pOutputs,
unsigned  numChannels,
float  sampleRate 
)
overridevirtual
Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1033 of file LadspaEffect.cpp.

1035{
1036 auto &effect = GetEffect();
1037 auto &ladspaSettings = GetSettings(settings);
1038 // Connect to outputs only if this is the first processor for the track.
1039 // (What's right when a mono effect is on a stereo channel? Unclear, but
1040 // this definitely causes connection with the first channel.)
1041 auto pLadspaOutputs = mSlaves.empty()
1042 ? static_cast<LadspaEffectOutputs *>(pOutputs) : nullptr;
1043 auto slave = effect.InitInstance(sampleRate, ladspaSettings, pLadspaOutputs);
1044 if (!slave)
1045 return false;
1046 mSlaves.push_back(slave);
1047 return true;
1048}
std::vector< LADSPA_Handle > mSlaves
Carry output control port information back to main thread.
Definition: LadspaEffect.h:54

References EffectWithSettings< LadspaEffectSettings, StatelessPerTrackEffect >::GetSettings(), and settings().

Here is the call graph for this function:

◆ RealtimeFinalize()

bool LadspaEffect::Instance::RealtimeFinalize ( EffectSettings settings)
overridevirtualnoexcept
Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1060 of file LadspaEffect.cpp.

1061{
1062return GuardedCall<bool>([&]{
1063 auto &effect = GetEffect();
1064 for (size_t i = 0, cnt = mSlaves.size(); i < cnt; ++i)
1065 effect.FreeInstance(mSlaves[i]);
1066 mSlaves.clear();
1067
1068 return true;
1069});
1070}

◆ RealtimeInitialize()

bool LadspaEffect::Instance::RealtimeInitialize ( EffectSettings settings,
double  sampleRate 
)
overridevirtual
Returns
success
Postcondition
GetAudioInCount() and GetAudioOutCount() are well defined

Default implementation does nothing, returns false (so assume realtime is not supported). Other member functions related to realtime return true or zero, but will not be called, unless a derived class overrides RealtimeInitialize.

Reimplemented from EffectInstance.

Definition at line 1028 of file LadspaEffect.cpp.

1029{
1030 return true;
1031}

◆ RealtimeProcess()

size_t LadspaEffect::Instance::RealtimeProcess ( size_t  group,
EffectSettings settings,
const float *const *  inBuf,
float *const *  outBuf,
size_t  numSamples 
)
overridevirtual
Returns
success Default implementation does nothing, returns 0

Reimplemented from EffectInstance.

Definition at line 1093 of file LadspaEffect.cpp.

1095{
1096 if (group >= mSlaves.size())
1097 return 0;
1098
1099 auto &effect = GetEffect();
1100 for (unsigned i = 0; i < effect.mAudioIns; ++i)
1101 effect.mData->connect_port(mSlaves[group], effect.mInputPorts[i],
1102 const_cast<float*>(inbuf[i]));
1103
1104 for (unsigned i = 0; i < effect.mAudioOuts; ++i)
1105 effect.mData->connect_port(
1106 mSlaves[group], effect.mOutputPorts[i], outbuf[i]);
1107
1108 effect.mData->run(mSlaves[group], numSamples);
1109
1110 return numSamples;
1111}

◆ RealtimeProcessEnd()

bool LadspaEffect::Instance::RealtimeProcessEnd ( EffectSettings settings)
overridevirtualnoexcept

settings can be updated to let a dialog change appearance at idle

Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1113 of file LadspaEffect.cpp.

1114{
1115 return true;
1116}

◆ RealtimeProcessStart()

bool LadspaEffect::Instance::RealtimeProcessStart ( MessagePackage package)
overridevirtual

settings are possibly changed, since last call, by an asynchronous dialog

Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1088 of file LadspaEffect.cpp.

1089{
1090 return true;
1091}

◆ RealtimeResume()

bool LadspaEffect::Instance::RealtimeResume ( )
overridevirtual
Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1080 of file LadspaEffect.cpp.

1081{
1082 if (auto fn = GetEffect().mData->activate)
1083 for (auto &slave : mSlaves)
1084 fn(slave);
1085 return true;
1086}
static const auto fn
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:155
void(* activate)(LADSPA_Handle Instance)
Definition: ladspa.h:489

References _LADSPA_Descriptor::activate, fn, and LadspaEffect::mData.

◆ RealtimeSuspend()

bool LadspaEffect::Instance::RealtimeSuspend ( )
overridevirtual
Returns
success Default implementation does nothing, returns true

Reimplemented from EffectInstance.

Definition at line 1072 of file LadspaEffect.cpp.

1073{
1074 if (auto fn = GetEffect().mData->deactivate)
1075 for (auto &slave : mSlaves)
1076 fn(slave);
1077 return true;
1078}
void(* deactivate)(LADSPA_Handle Instance)
Definition: ladspa.h:549

References _LADSPA_Descriptor::deactivate, fn, and LadspaEffect::mData.

Member Data Documentation

◆ mMaster

LADSPA_Handle LadspaEffect::Instance::mMaster {}

Definition at line 955 of file LadspaEffect.cpp.

◆ mReady

bool LadspaEffect::Instance::mReady { false }

Definition at line 954 of file LadspaEffect.cpp.

◆ mSlaves

std::vector<LADSPA_Handle> LadspaEffect::Instance::mSlaves

Definition at line 958 of file LadspaEffect.cpp.

◆ mUseLatency

const bool LadspaEffect::Instance::mUseLatency

Definition at line 960 of file LadspaEffect.cpp.


The documentation for this struct was generated from the following file: