-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathlv2effectprocessor.h
More file actions
68 lines (57 loc) · 2.04 KB
/
lv2effectprocessor.h
File metadata and controls
68 lines (57 loc) · 2.04 KB
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
#pragma once
#include <lilv/lilv.h>
#include "effects/backends/effectprocessor.h"
#include "effects/backends/lv2/lv2manifest.h"
#include "effects/defs.h"
#include "engine/engine.h"
// Refer to EffectProcessor for documentation
class LV2EffectGroupState final : public EffectState {
public:
LV2EffectGroupState(const mixxx::EngineParameters& engineParameters)
: EffectState(engineParameters),
m_pInstance(nullptr) {
}
~LV2EffectGroupState() override {
if (m_pInstance) {
lilv_instance_deactivate(m_pInstance);
lilv_instance_free(m_pInstance);
}
}
LilvInstance* lilvInstance(const LilvPlugin* pPlugin,
const mixxx::EngineParameters& engineParameters) {
if (!m_pInstance) {
m_pInstance = lilv_plugin_instantiate(
pPlugin, engineParameters.sampleRate(), nullptr);
}
return m_pInstance;
}
private:
LilvInstance* m_pInstance;
};
class LV2EffectProcessor final : public EffectProcessorImpl<LV2EffectGroupState> {
public:
LV2EffectProcessor(LV2EffectManifestPointer pManifest);
~LV2EffectProcessor() override;
void loadEngineEffectParameters(
const QMap<QString, EngineEffectParameterPointer>& parameters) override;
void processChannel(
LV2EffectGroupState* channelState,
const CSAMPLE* pInput,
CSAMPLE* pOutput,
const mixxx::EngineParameters& engineParameters,
const EffectEnableState enableState,
const GroupFeatureState& groupFeatures) override;
private:
LV2EffectGroupState* createSpecificState(
const mixxx::EngineParameters& engineParameters) override;
LV2EffectManifestPointer m_pManifest;
QList<EngineEffectParameterPointer> m_engineEffectParameters;
float* m_inputL;
float* m_inputR;
float* m_outputL;
float* m_outputR;
float* m_LV2parameters;
const LilvPlugin* m_pPlugin;
const QList<int> m_audioPortIndices;
const QList<int> m_controlPortIndices;
};