DPBase.h revision 9f011fed92c4982819f78c7cfb4c07b27adf7651
19f011fed92c4982819f78c7cfb4c07b27adf7651rago/* 29f011fed92c4982819f78c7cfb4c07b27adf7651rago * Copyright (C) 2018 The Android Open Source Project 39f011fed92c4982819f78c7cfb4c07b27adf7651rago * 49f011fed92c4982819f78c7cfb4c07b27adf7651rago * Licensed under the Apache License, Version 2.0 (the "License"); 59f011fed92c4982819f78c7cfb4c07b27adf7651rago * you may not use this file except in compliance with the License. 69f011fed92c4982819f78c7cfb4c07b27adf7651rago * You may obtain a copy of the License at 79f011fed92c4982819f78c7cfb4c07b27adf7651rago * 89f011fed92c4982819f78c7cfb4c07b27adf7651rago * http://www.apache.org/licenses/LICENSE-2.0 99f011fed92c4982819f78c7cfb4c07b27adf7651rago * 109f011fed92c4982819f78c7cfb4c07b27adf7651rago * Unless required by applicable law or agreed to in writing, software 119f011fed92c4982819f78c7cfb4c07b27adf7651rago * distributed under the License is distributed on an "AS IS" BASIS, 129f011fed92c4982819f78c7cfb4c07b27adf7651rago * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f011fed92c4982819f78c7cfb4c07b27adf7651rago * See the License for the specific language governing permissions and 149f011fed92c4982819f78c7cfb4c07b27adf7651rago * limitations under the License. 159f011fed92c4982819f78c7cfb4c07b27adf7651rago */ 169f011fed92c4982819f78c7cfb4c07b27adf7651rago 179f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <stdint.h> 189f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <cmath> 199f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <vector> 209f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <android/log.h> 219f011fed92c4982819f78c7cfb4c07b27adf7651rago 229f011fed92c4982819f78c7cfb4c07b27adf7651ragonamespace dp_fx { 239f011fed92c4982819f78c7cfb4c07b27adf7651rago 249f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_BAND_ENABLED false 259f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_BAND_CUTOFF_FREQUENCY_HZ 1000 269f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_ATTACK_TIME_MS 50 279f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_RELEASE_TIME_MS 120 289f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_RATIO 2 299f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_THRESHOLD_DB -30 309f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_KNEE_WIDTH_DB 0 319f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_NOISE_GATE_THRESHOLD_DB -90 329f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_EXPANDER_RATIO 1 339f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_GAIN_DB 0 349f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_STAGE_INUSE false 359f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_STAGE_ENABLED false 369f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_LINK_GROUP 0 379f011fed92c4982819f78c7cfb4c07b27adf7651rago 389f011fed92c4982819f78c7cfb4c07b27adf7651rago 399f011fed92c4982819f78c7cfb4c07b27adf7651rago 409f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPStage { 419f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 429f011fed92c4982819f78c7cfb4c07b27adf7651rago DPStage(); 439f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPStage() = default; 449f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled); 459f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isInUse() const { 469f011fed92c4982819f78c7cfb4c07b27adf7651rago return mInUse; 479f011fed92c4982819f78c7cfb4c07b27adf7651rago } 489f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isEnabled() const { 499f011fed92c4982819f78c7cfb4c07b27adf7651rago return mEnabled; 509f011fed92c4982819f78c7cfb4c07b27adf7651rago } 519f011fed92c4982819f78c7cfb4c07b27adf7651rago void setEnabled(bool enabled) { 529f011fed92c4982819f78c7cfb4c07b27adf7651rago mEnabled = enabled; 539f011fed92c4982819f78c7cfb4c07b27adf7651rago } 549f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 559f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInUse; 569f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mEnabled; 579f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 589f011fed92c4982819f78c7cfb4c07b27adf7651rago 599f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBandStage : public DPStage { 609f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 619f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBandStage(); 629f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPBandStage() = default; 639f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, int bandCount); 649f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getBandCount() const { 659f011fed92c4982819f78c7cfb4c07b27adf7651rago return mBandCount; 669f011fed92c4982819f78c7cfb4c07b27adf7651rago } 679f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBandCount(uint32_t bandCount) { 689f011fed92c4982819f78c7cfb4c07b27adf7651rago mBandCount = bandCount; 699f011fed92c4982819f78c7cfb4c07b27adf7651rago } 709f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 719f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mBandCount; 729f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 739f011fed92c4982819f78c7cfb4c07b27adf7651rago 749f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBandBase { 759f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 769f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBandBase(); 779f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPBandBase() = default; 789f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency); 799f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isEnabled() const { 809f011fed92c4982819f78c7cfb4c07b27adf7651rago return mEnabled; 819f011fed92c4982819f78c7cfb4c07b27adf7651rago } 829f011fed92c4982819f78c7cfb4c07b27adf7651rago void setEnabled(bool enabled) { 839f011fed92c4982819f78c7cfb4c07b27adf7651rago mEnabled = enabled; 849f011fed92c4982819f78c7cfb4c07b27adf7651rago } 859f011fed92c4982819f78c7cfb4c07b27adf7651rago float getCutoffFrequency() const { 869f011fed92c4982819f78c7cfb4c07b27adf7651rago return mCutoofFrequencyHz; 879f011fed92c4982819f78c7cfb4c07b27adf7651rago } 889f011fed92c4982819f78c7cfb4c07b27adf7651rago void setCutoffFrequency(float cutoffFrequency) { 899f011fed92c4982819f78c7cfb4c07b27adf7651rago mCutoofFrequencyHz = cutoffFrequency; 909f011fed92c4982819f78c7cfb4c07b27adf7651rago } 919f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 929f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mEnabled; 939f011fed92c4982819f78c7cfb4c07b27adf7651rago float mCutoofFrequencyHz; 949f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 959f011fed92c4982819f78c7cfb4c07b27adf7651rago 969f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPEqBand : public DPBandBase { 979f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 989f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEqBand(); 999f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPEqBand() = default; 1009f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency, float gain); 1019f011fed92c4982819f78c7cfb4c07b27adf7651rago float getGain() const; 1029f011fed92c4982819f78c7cfb4c07b27adf7651rago void setGain(float gain); 1039f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1049f011fed92c4982819f78c7cfb4c07b27adf7651rago float mGainDb; 1059f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1069f011fed92c4982819f78c7cfb4c07b27adf7651rago 1079f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPMbcBand : public DPBandBase { 1089f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1099f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbcBand(); 1109f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPMbcBand() = default; 1119f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency, float attackTime, float releaseTime, 1129f011fed92c4982819f78c7cfb4c07b27adf7651rago float ratio, float threshold, float kneeWidth, float noiseGateThreshold, 1139f011fed92c4982819f78c7cfb4c07b27adf7651rago float expanderRatio, float preGain, float postGain); 1149f011fed92c4982819f78c7cfb4c07b27adf7651rago float getAttackTime() const { 1159f011fed92c4982819f78c7cfb4c07b27adf7651rago return mAttackTimeMs; 1169f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1179f011fed92c4982819f78c7cfb4c07b27adf7651rago void setAttackTime(float attackTime) { 1189f011fed92c4982819f78c7cfb4c07b27adf7651rago mAttackTimeMs = attackTime; 1199f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1209f011fed92c4982819f78c7cfb4c07b27adf7651rago float getReleaseTime() const { 1219f011fed92c4982819f78c7cfb4c07b27adf7651rago return mReleaseTimeMs; 1229f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1239f011fed92c4982819f78c7cfb4c07b27adf7651rago void setReleaseTime(float releaseTime) { 1249f011fed92c4982819f78c7cfb4c07b27adf7651rago mReleaseTimeMs = releaseTime; 1259f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1269f011fed92c4982819f78c7cfb4c07b27adf7651rago float getRatio() const { 1279f011fed92c4982819f78c7cfb4c07b27adf7651rago return mRatio; 1289f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1299f011fed92c4982819f78c7cfb4c07b27adf7651rago void setRatio(float ratio) { 1309f011fed92c4982819f78c7cfb4c07b27adf7651rago mRatio = ratio; 1319f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1329f011fed92c4982819f78c7cfb4c07b27adf7651rago float getThreshold() const { 1339f011fed92c4982819f78c7cfb4c07b27adf7651rago return mThresholdDb; 1349f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1359f011fed92c4982819f78c7cfb4c07b27adf7651rago void setThreshold(float threshold) { 1369f011fed92c4982819f78c7cfb4c07b27adf7651rago mThresholdDb = threshold; 1379f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1389f011fed92c4982819f78c7cfb4c07b27adf7651rago float getKneeWidth() const { 1399f011fed92c4982819f78c7cfb4c07b27adf7651rago return mKneeWidthDb; 1409f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1419f011fed92c4982819f78c7cfb4c07b27adf7651rago void setKneeWidth(float kneeWidth) { 1429f011fed92c4982819f78c7cfb4c07b27adf7651rago mKneeWidthDb = kneeWidth; 1439f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1449f011fed92c4982819f78c7cfb4c07b27adf7651rago float getNoiseGateThreshold() const { 1459f011fed92c4982819f78c7cfb4c07b27adf7651rago return mNoiseGateThresholdDb; 1469f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1479f011fed92c4982819f78c7cfb4c07b27adf7651rago void setNoiseGateThreshold(float noiseGateThreshold) { 1489f011fed92c4982819f78c7cfb4c07b27adf7651rago mNoiseGateThresholdDb = noiseGateThreshold; 1499f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1509f011fed92c4982819f78c7cfb4c07b27adf7651rago float getExpanderRatio() const { 1519f011fed92c4982819f78c7cfb4c07b27adf7651rago return mExpanderRatio; 1529f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1539f011fed92c4982819f78c7cfb4c07b27adf7651rago void setExpanderRatio(float expanderRatio) { 1549f011fed92c4982819f78c7cfb4c07b27adf7651rago mExpanderRatio = expanderRatio; 1559f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1569f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPreGain() const { 1579f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreGainDb; 1589f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1599f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPreGain(float preGain) { 1609f011fed92c4982819f78c7cfb4c07b27adf7651rago mPreGainDb = preGain; 1619f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1629f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPostGain() const { 1639f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostGainDb; 1649f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1659f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPostGain(float postGain) { 1669f011fed92c4982819f78c7cfb4c07b27adf7651rago mPostGainDb = postGain; 1679f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1689f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1699f011fed92c4982819f78c7cfb4c07b27adf7651rago float mAttackTimeMs; 1709f011fed92c4982819f78c7cfb4c07b27adf7651rago float mReleaseTimeMs; 1719f011fed92c4982819f78c7cfb4c07b27adf7651rago float mRatio; 1729f011fed92c4982819f78c7cfb4c07b27adf7651rago float mThresholdDb; 1739f011fed92c4982819f78c7cfb4c07b27adf7651rago float mKneeWidthDb; 1749f011fed92c4982819f78c7cfb4c07b27adf7651rago float mNoiseGateThresholdDb; 1759f011fed92c4982819f78c7cfb4c07b27adf7651rago float mExpanderRatio; 1769f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPreGainDb; 1779f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPostGainDb; 1789f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1799f011fed92c4982819f78c7cfb4c07b27adf7651rago 1809f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPEq : public DPBandStage { 1819f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1829f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq(); 1839f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPEq() = default; 1849f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t bandCount); 1859f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEqBand * getBand(uint32_t band); 1869f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBand(uint32_t band, DPEqBand &src); 1879f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1889f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPEqBand> mBands; 1899f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1909f011fed92c4982819f78c7cfb4c07b27adf7651rago 1919f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPMbc : public DPBandStage { 1929f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1939f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc(); 1949f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPMbc() = default; 1959f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t bandCount); 1969f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbcBand * getBand(uint32_t band); 1979f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBand(uint32_t band, DPMbcBand &src); 1989f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1999f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPMbcBand> mBands; 2009f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 2019f011fed92c4982819f78c7cfb4c07b27adf7651rago 2029f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPLimiter : public DPStage { 2039f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 2049f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter(); 2059f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPLimiter() = default; 2069f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t linkGroup, float attackTime, float releaseTime, 2079f011fed92c4982819f78c7cfb4c07b27adf7651rago float ratio, float threshold, float postGain); 2089f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getLinkGroup() const { 2099f011fed92c4982819f78c7cfb4c07b27adf7651rago return mLinkGroup; 2109f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2119f011fed92c4982819f78c7cfb4c07b27adf7651rago void setLinkGroup(uint32_t linkGroup) { 2129f011fed92c4982819f78c7cfb4c07b27adf7651rago mLinkGroup = linkGroup; 2139f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2149f011fed92c4982819f78c7cfb4c07b27adf7651rago float getAttackTime() const { 2159f011fed92c4982819f78c7cfb4c07b27adf7651rago return mAttackTimeMs; 2169f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2179f011fed92c4982819f78c7cfb4c07b27adf7651rago void setAttackTime(float attackTime) { 2189f011fed92c4982819f78c7cfb4c07b27adf7651rago mAttackTimeMs = attackTime; 2199f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2209f011fed92c4982819f78c7cfb4c07b27adf7651rago float getReleaseTime() const { 2219f011fed92c4982819f78c7cfb4c07b27adf7651rago return mReleaseTimeMs; 2229f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2239f011fed92c4982819f78c7cfb4c07b27adf7651rago void setReleaseTime(float releaseTime) { 2249f011fed92c4982819f78c7cfb4c07b27adf7651rago mReleaseTimeMs = releaseTime; 2259f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2269f011fed92c4982819f78c7cfb4c07b27adf7651rago float getRatio() const { 2279f011fed92c4982819f78c7cfb4c07b27adf7651rago return mRatio; 2289f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2299f011fed92c4982819f78c7cfb4c07b27adf7651rago void setRatio(float ratio) { 2309f011fed92c4982819f78c7cfb4c07b27adf7651rago mRatio = ratio; 2319f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2329f011fed92c4982819f78c7cfb4c07b27adf7651rago float getThreshold() const { 2339f011fed92c4982819f78c7cfb4c07b27adf7651rago return mThresholdDb; 2349f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2359f011fed92c4982819f78c7cfb4c07b27adf7651rago void setThreshold(float threshold) { 2369f011fed92c4982819f78c7cfb4c07b27adf7651rago mThresholdDb = threshold; 2379f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2389f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPostGain() const { 2399f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostGainDb; 2409f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2419f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPostGain(float postGain) { 2429f011fed92c4982819f78c7cfb4c07b27adf7651rago mPostGainDb = postGain; 2439f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2449f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 2459f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mLinkGroup; 2469f011fed92c4982819f78c7cfb4c07b27adf7651rago float mAttackTimeMs; 2479f011fed92c4982819f78c7cfb4c07b27adf7651rago float mReleaseTimeMs; 2489f011fed92c4982819f78c7cfb4c07b27adf7651rago float mRatio; 2499f011fed92c4982819f78c7cfb4c07b27adf7651rago float mThresholdDb; 2509f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPostGainDb; 2519f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 2529f011fed92c4982819f78c7cfb4c07b27adf7651rago 2539f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPChannel { 2549f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 2559f011fed92c4982819f78c7cfb4c07b27adf7651rago DPChannel(); 2569f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPChannel() = default; 2579f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(float inputGain, bool preEqInUse, uint32_t preEqBandCount, 2589f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount, 2599f011fed92c4982819f78c7cfb4c07b27adf7651rago bool limiterInUse); 2609f011fed92c4982819f78c7cfb4c07b27adf7651rago 2619f011fed92c4982819f78c7cfb4c07b27adf7651rago float getInputGain() const { 2629f011fed92c4982819f78c7cfb4c07b27adf7651rago if (!mInitialized) { 2639f011fed92c4982819f78c7cfb4c07b27adf7651rago return 0; 2649f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2659f011fed92c4982819f78c7cfb4c07b27adf7651rago return mInputGainDb; 2669f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2679f011fed92c4982819f78c7cfb4c07b27adf7651rago void setInputGain(float gain) { 2689f011fed92c4982819f78c7cfb4c07b27adf7651rago mInputGainDb = gain; 2699f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2709f011fed92c4982819f78c7cfb4c07b27adf7651rago 2719f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq* getPreEq(); 2729f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc* getMbc(); 2739f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq* getPostEq(); 2749f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter *getLimiter(); 2759f011fed92c4982819f78c7cfb4c07b27adf7651rago void setLimiter(DPLimiter &limiter); 2769f011fed92c4982819f78c7cfb4c07b27adf7651rago 2779f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 2789f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInitialized; 2799f011fed92c4982819f78c7cfb4c07b27adf7651rago float mInputGainDb; 2809f011fed92c4982819f78c7cfb4c07b27adf7651rago 2819f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq mPreEq; 2829f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc mMbc; 2839f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq mPostEq; 2849f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter mLimiter; 2859f011fed92c4982819f78c7cfb4c07b27adf7651rago 2869f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPreEqInUse; 2879f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mMbcInUse; 2889f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPostEqInUse; 2899f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mLimiterInUse; 2909f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 2919f011fed92c4982819f78c7cfb4c07b27adf7651rago 2929f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBase { 2939f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 2949f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBase(); 2959f011fed92c4982819f78c7cfb4c07b27adf7651rago virtual ~DPBase() = default; 2969f011fed92c4982819f78c7cfb4c07b27adf7651rago 2979f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(uint32_t channelCount, bool preEqInUse, uint32_t preEqBandCount, 2989f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount, 2999f011fed92c4982819f78c7cfb4c07b27adf7651rago bool limiterInUse); 3009f011fed92c4982819f78c7cfb4c07b27adf7651rago virtual size_t processSamples(float *in, float *out, size_t samples); 3019f011fed92c4982819f78c7cfb4c07b27adf7651rago virtual void reset(); 3029f011fed92c4982819f78c7cfb4c07b27adf7651rago 3039f011fed92c4982819f78c7cfb4c07b27adf7651rago DPChannel* getChannel(uint32_t channelIndex); 3049f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getChannelCount() const { 3059f011fed92c4982819f78c7cfb4c07b27adf7651rago return mChannelCount; 3069f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3079f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getPreEqBandCount() const { 3089f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreEqBandCount; 3099f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3109f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getMbcBandCount() const { 3119f011fed92c4982819f78c7cfb4c07b27adf7651rago return mMbcBandCount; 3129f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3139f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getPostEqBandCount() const { 3149f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostEqBandCount; 3159f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3169f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isPreEQInUse() const { 3179f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreEqInUse; 3189f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3199f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isMbcInUse() const { 3209f011fed92c4982819f78c7cfb4c07b27adf7651rago return mMbcInUse; 3219f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3229f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isPostEqInUse() const { 3239f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostEqInUse; 3249f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3259f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isLimiterInUse() const { 3269f011fed92c4982819f78c7cfb4c07b27adf7651rago return mLimiterInUse; 3279f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3289f011fed92c4982819f78c7cfb4c07b27adf7651rago 3299f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 3309f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInitialized; 3319f011fed92c4982819f78c7cfb4c07b27adf7651rago //general 3329f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mChannelCount; 3339f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPreEqInUse; 3349f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mPreEqBandCount; 3359f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mMbcInUse; 3369f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mMbcBandCount; 3379f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPostEqInUse; 3389f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mPostEqBandCount; 3399f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mLimiterInUse; 3409f011fed92c4982819f78c7cfb4c07b27adf7651rago 3419f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPChannel> mChannel; 3429f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 3439f011fed92c4982819f78c7cfb4c07b27adf7651rago 3449f011fed92c4982819f78c7cfb4c07b27adf7651rago} //namespace dp_fx 345