summaryrefslogtreecommitdiffstats
path: root/src/MemlessPoly.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/MemlessPoly.h')
-rw-r--r--src/MemlessPoly.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/MemlessPoly.h b/src/MemlessPoly.h
index 57c0924..612934f 100644
--- a/src/MemlessPoly.h
+++ b/src/MemlessPoly.h
@@ -49,6 +49,12 @@
typedef std::complex<float> complexf;
+enum class dpd_type_t {
+ odd_only_poly,
+ lookup_table
+};
+
+
class MemlessPoly : public PipelinedModCodec, public RemoteControllable
{
public:
@@ -71,8 +77,16 @@ private:
struct input_data_t {
bool terminate = false;
+ dpd_type_t dpd_type;
+
+ // Valid for polynomial types
const float *coefs_am = nullptr;
const float *coefs_pm = nullptr;
+
+ // Valid for LUT
+ float lut_scalefactor = 0.0f;
+ const complexf *lut = nullptr;
+
const complexf *in = nullptr;
size_t start = 0;
size_t stop = 0;
@@ -112,8 +126,16 @@ private:
static void worker_thread(worker_t *workerdata);
+ bool m_dpd_settings_valid = false;
+ dpd_type_t m_dpd_type;
std::vector<float> m_coefs_am; // AM/AM coefficients
std::vector<float> m_coefs_pm; // AM/PM coefficients
+
+ float m_lut_scalefactor; // Scale value applied before looking up in LUT
+
+ static constexpr size_t lut_entries = 32;
+ std::array<complexf, lut_entries> m_lut; // Lookup table correction factors
+
std::string m_coefs_file;
mutable std::mutex m_coefs_mutex;
};