Return an intrusive_ptr from EffectStateFactory::create

This commit is contained in:
Chris Robinson
2020-12-28 08:04:23 -08:00
parent 15e05fcef8
commit aae115c35a
16 changed files with 35 additions and 21 deletions
+1 -2
View File
@@ -911,8 +911,7 @@ ALenum ALeffectslot::init()
EffectStateFactory *factory{getFactoryByType(Effect.Type)};
if(!factory) return AL_INVALID_VALUE;
Effect.State.reset(factory->create());
if(!Effect.State) return AL_OUT_OF_MEMORY;
Effect.State = factory->create();
Effect.State->add_ref();
mSlot.mEffectState = Effect.State.get();
+2 -1
View File
@@ -199,7 +199,8 @@ void AutowahState::process(const size_t samplesToDo,
struct AutowahStateFactory final : public EffectStateFactory {
EffectState *create() override { return new AutowahState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new AutowahState{}}; }
};
} // namespace
+1 -1
View File
@@ -180,7 +180,7 @@ struct EffectState : public al::intrusive_ref<EffectState> {
struct EffectStateFactory {
virtual ~EffectStateFactory() = default;
virtual EffectState *create() = 0;
virtual al::intrusive_ptr<EffectState> create() = 0;
};
+4 -2
View File
@@ -259,7 +259,8 @@ void ChorusState::process(const size_t samplesToDo, const al::span<const FloatBu
struct ChorusStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ChorusState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ChorusState{}}; }
};
@@ -267,7 +268,8 @@ struct ChorusStateFactory final : public EffectStateFactory {
* the same processing functions, so piggyback flanger on the chorus functions.
*/
struct FlangerStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ChorusState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ChorusState{}}; }
};
} // namespace
+2 -1
View File
@@ -155,7 +155,8 @@ void CompressorState::process(const size_t samplesToDo,
struct CompressorStateFactory final : public EffectStateFactory {
EffectState *create() override { return new CompressorState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new CompressorState{}}; }
};
} // namespace
+2 -1
View File
@@ -539,7 +539,8 @@ void ConvolutionState::process(const size_t samplesToDo,
struct ConvolutionStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ConvolutionState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ConvolutionState{}}; }
};
} // namespace
+2 -1
View File
@@ -97,7 +97,8 @@ void DedicatedState::process(const size_t samplesToDo, const al::span<const Floa
struct DedicatedStateFactory final : public EffectStateFactory {
EffectState *create() override { return new DedicatedState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new DedicatedState{}}; }
};
} // namespace
+2 -1
View File
@@ -154,7 +154,8 @@ void DistortionState::process(const size_t samplesToDo, const al::span<const Flo
struct DistortionStateFactory final : public EffectStateFactory {
EffectState *create() override { return new DistortionState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new DistortionState{}}; }
};
} // namespace
+2 -1
View File
@@ -155,7 +155,8 @@ void EchoState::process(const size_t samplesToDo, const al::span<const FloatBuff
struct EchoStateFactory final : public EffectStateFactory {
EffectState *create() override { return new EchoState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new EchoState{}}; }
};
} // namespace
+2 -1
View File
@@ -171,7 +171,8 @@ void EqualizerState::process(const size_t samplesToDo, const al::span<const Floa
struct EqualizerStateFactory final : public EffectStateFactory {
EffectState *create() override { return new EqualizerState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new EqualizerState{}}; }
};
} // namespace
+2 -1
View File
@@ -219,7 +219,8 @@ void FshifterState::process(const size_t samplesToDo, const al::span<const Float
struct FshifterStateFactory final : public EffectStateFactory {
EffectState *create() override { return new FshifterState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new FshifterState{}}; }
};
} // namespace
+2 -1
View File
@@ -160,7 +160,8 @@ void ModulatorState::process(const size_t samplesToDo, const al::span<const Floa
struct ModulatorStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ModulatorState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ModulatorState{}}; }
};
} // namespace
+3 -3
View File
@@ -63,12 +63,12 @@ void NullState::process(const size_t/*samplesToDo*/,
struct NullStateFactory final : public EffectStateFactory {
EffectState *create() override;
al::intrusive_ptr<EffectState> create() override;
};
/* Creates EffectState objects of the appropriate type. */
EffectState *NullStateFactory::create()
{ return new NullState{}; }
al::intrusive_ptr<EffectState> NullStateFactory::create()
{ return al::intrusive_ptr<EffectState>{new NullState{}}; }
} // namespace
+2 -1
View File
@@ -247,7 +247,8 @@ void PshifterState::process(const size_t samplesToDo, const al::span<const Float
struct PshifterStateFactory final : public EffectStateFactory {
EffectState *create() override { return new PshifterState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new PshifterState{}}; }
};
} // namespace
+4 -2
View File
@@ -1680,11 +1680,13 @@ void ReverbState::process(const size_t samplesToDo, const al::span<const FloatBu
struct ReverbStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ReverbState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ReverbState{}}; }
};
struct StdReverbStateFactory final : public EffectStateFactory {
EffectState *create() override { return new ReverbState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new ReverbState{}}; }
};
} // namespace
+2 -1
View File
@@ -301,7 +301,8 @@ void VmorpherState::process(const size_t samplesToDo, const al::span<const Float
struct VmorpherStateFactory final : public EffectStateFactory {
EffectState *create() override { return new VmorpherState{}; }
al::intrusive_ptr<EffectState> create() override
{ return al::intrusive_ptr<EffectState>{new VmorpherState{}}; }
};
} // namespace