1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#pragma once
#include "effects/effectprocessor.h"
#include "effects/effectmanifest.h"
#include "engine/effects/engineeffectparameter.h"
#include <lilv-0/lilv/lilv.h>
#include "effects/defs.h"
#include "engine/engine.h"
class LV2EffectGroupState : public EffectState {
public:
LV2EffectGroupState(const mixxx::EngineParameters& bufferParameters, const LilvPlugin* pPlugin)
: EffectState(bufferParameters) {
m_pInstance = lilv_plugin_instantiate(pPlugin, bufferParameters.sampleRate(), nullptr);
}
~LV2EffectGroupState() {
lilv_instance_deactivate(m_pInstance);
lilv_instance_free(m_pInstance);
}
LilvInstance* lilvIinstance() {
return m_pInstance;
}
private:
LilvInstance* m_pInstance;
};
class LV2EffectProcessor : public EffectProcessor {
public:
LV2EffectProcessor(EngineEffect* pEngineEffect,
EffectManifestPointer pManifest,
const LilvPlugin* plugin,
const QList<int>& audioPortIndices,
const QList<int>& controlPortIndices);
~LV2EffectProcessor();
void initialize(
const QSet<ChannelHandleAndGroup>& activeInputChannels,
EffectsManager* pEffectsManager,
const mixxx::EngineParameters& bufferParameters) override;
EffectState* createState(const mixxx::EngineParameters& bufferParameters) final;
bool loadStatesForInputChannel(const ChannelHandle* inputChannel,
const EffectStatesMap* pStatesMap) override;
// Called from main thread for garbage collection after the last audio thread
// callback executes process() with EffectEnableState::Disabling
void deleteStatesForInputChannel(const ChannelHandle* inputChannel) override;
void process(const ChannelHandle& inputHandle,
const ChannelHandle& outputHandle,
const CSAMPLE* pInput, CSAMPLE* pOutput,
const mixxx::EngineParameters& bufferParameters,
const EffectEnableState enableState,
const GroupFeatureState& groupFeatures) override;
private:
LV2EffectGroupState* createGroupState(const mixxx::EngineParameters& bufferParameters);
QList<EngineEffectParameter*> m_parameters;
float* m_inputL;
float* m_inputR;
float* m_outputL;
float* m_outputR;
float* m_params;
const LilvPlugin* m_pPlugin;
const QList<int> m_audioPortIndices;
const QList<int> m_controlPortIndices;
EffectsManager* m_pEffectsManager;
ChannelHandleMap<ChannelHandleMap<LV2EffectGroupState*>> m_channelStateMatrix;
};
|