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
17ff0a51f978a6307153cc752b8071144d642b54acrago#define LOG_TAG "DPBase"
18ff0a51f978a6307153cc752b8071144d642b54acrago//#define LOG_NDEBUG 0
19ff0a51f978a6307153cc752b8071144d642b54acrago
20ff0a51f978a6307153cc752b8071144d642b54acrago#include <log/log.h>
219f011fed92c4982819f78c7cfb4c07b27adf7651rago#include "DPBase.h"
22ff0a51f978a6307153cc752b8071144d642b54acrago#include "DPFrequency.h"
239f011fed92c4982819f78c7cfb4c07b27adf7651rago
249f011fed92c4982819f78c7cfb4c07b27adf7651ragonamespace dp_fx {
259f011fed92c4982819f78c7cfb4c07b27adf7651rago
269f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPStage::DPStage() : mInUse(DP_DEFAULT_STAGE_INUSE),
279f011fed92c4982819f78c7cfb4c07b27adf7651rago        mEnabled(DP_DEFAULT_STAGE_ENABLED) {
289f011fed92c4982819f78c7cfb4c07b27adf7651rago}
299f011fed92c4982819f78c7cfb4c07b27adf7651rago
309f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPStage::init(bool inUse, bool enabled) {
319f011fed92c4982819f78c7cfb4c07b27adf7651rago    mInUse = inUse;
329f011fed92c4982819f78c7cfb4c07b27adf7651rago    mEnabled = enabled;
339f011fed92c4982819f78c7cfb4c07b27adf7651rago}
349f011fed92c4982819f78c7cfb4c07b27adf7651rago
359f011fed92c4982819f78c7cfb4c07b27adf7651rago//----
369f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPBandStage::DPBandStage() : mBandCount(0) {
379f011fed92c4982819f78c7cfb4c07b27adf7651rago}
389f011fed92c4982819f78c7cfb4c07b27adf7651rago
399f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPBandStage::init(bool inUse, bool enabled, int bandCount) {
409f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPStage::init(inUse, enabled);
419f011fed92c4982819f78c7cfb4c07b27adf7651rago    mBandCount = inUse ? bandCount : 0;
429f011fed92c4982819f78c7cfb4c07b27adf7651rago}
439f011fed92c4982819f78c7cfb4c07b27adf7651rago
449f011fed92c4982819f78c7cfb4c07b27adf7651rago//---
459f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPBandBase::DPBandBase() {
469f011fed92c4982819f78c7cfb4c07b27adf7651rago    init(DP_DEFAULT_BAND_ENABLED,
479f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_BAND_CUTOFF_FREQUENCY_HZ);
489f011fed92c4982819f78c7cfb4c07b27adf7651rago}
499f011fed92c4982819f78c7cfb4c07b27adf7651rago
509f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPBandBase::init(bool enabled, float cutoffFrequency){
519f011fed92c4982819f78c7cfb4c07b27adf7651rago    mEnabled = enabled;
529f011fed92c4982819f78c7cfb4c07b27adf7651rago    mCutoofFrequencyHz = cutoffFrequency;
539f011fed92c4982819f78c7cfb4c07b27adf7651rago}
549f011fed92c4982819f78c7cfb4c07b27adf7651rago
559f011fed92c4982819f78c7cfb4c07b27adf7651rago//-----
569f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPEqBand::DPEqBand() {
579f011fed92c4982819f78c7cfb4c07b27adf7651rago    init(DP_DEFAULT_BAND_ENABLED,
589f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_BAND_CUTOFF_FREQUENCY_HZ,
599f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_GAIN_DB);
609f011fed92c4982819f78c7cfb4c07b27adf7651rago}
619f011fed92c4982819f78c7cfb4c07b27adf7651rago
629f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPEqBand::init(bool enabled, float cutoffFrequency, float gain) {
639f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPBandBase::init(enabled, cutoffFrequency);
649f011fed92c4982819f78c7cfb4c07b27adf7651rago    setGain(gain);
659f011fed92c4982819f78c7cfb4c07b27adf7651rago}
669f011fed92c4982819f78c7cfb4c07b27adf7651rago
679f011fed92c4982819f78c7cfb4c07b27adf7651ragofloat DPEqBand::getGain() const{
689f011fed92c4982819f78c7cfb4c07b27adf7651rago    return mGainDb;
699f011fed92c4982819f78c7cfb4c07b27adf7651rago}
709f011fed92c4982819f78c7cfb4c07b27adf7651rago
719f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPEqBand::setGain(float gain) {
729f011fed92c4982819f78c7cfb4c07b27adf7651rago    mGainDb = gain;
739f011fed92c4982819f78c7cfb4c07b27adf7651rago}
749f011fed92c4982819f78c7cfb4c07b27adf7651rago
759f011fed92c4982819f78c7cfb4c07b27adf7651rago//------
769f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPMbcBand::DPMbcBand() {
779f011fed92c4982819f78c7cfb4c07b27adf7651rago    init(DP_DEFAULT_BAND_ENABLED,
789f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_BAND_CUTOFF_FREQUENCY_HZ,
799f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_ATTACK_TIME_MS,
809f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_RELEASE_TIME_MS,
819f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_RATIO,
829f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_THRESHOLD_DB,
839f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_KNEE_WIDTH_DB,
849f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_NOISE_GATE_THRESHOLD_DB,
859f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_EXPANDER_RATIO,
869f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_GAIN_DB,
879f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_GAIN_DB);
889f011fed92c4982819f78c7cfb4c07b27adf7651rago}
899f011fed92c4982819f78c7cfb4c07b27adf7651rago
909f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPMbcBand::init(bool enabled, float cutoffFrequency, float attackTime, float releaseTime,
919f011fed92c4982819f78c7cfb4c07b27adf7651rago        float ratio, float threshold, float kneeWidth, float noiseGateThreshold,
929f011fed92c4982819f78c7cfb4c07b27adf7651rago        float expanderRatio, float preGain, float postGain) {
939f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPBandBase::init(enabled, cutoffFrequency);
949f011fed92c4982819f78c7cfb4c07b27adf7651rago    setAttackTime(attackTime);
959f011fed92c4982819f78c7cfb4c07b27adf7651rago    setReleaseTime(releaseTime);
969f011fed92c4982819f78c7cfb4c07b27adf7651rago    setRatio(ratio);
979f011fed92c4982819f78c7cfb4c07b27adf7651rago    setThreshold(threshold);
989f011fed92c4982819f78c7cfb4c07b27adf7651rago    setKneeWidth(kneeWidth);
999f011fed92c4982819f78c7cfb4c07b27adf7651rago    setNoiseGateThreshold(noiseGateThreshold);
1009f011fed92c4982819f78c7cfb4c07b27adf7651rago    setExpanderRatio(expanderRatio);
1019f011fed92c4982819f78c7cfb4c07b27adf7651rago    setPreGain(preGain);
1029f011fed92c4982819f78c7cfb4c07b27adf7651rago    setPostGain(postGain);
1039f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1049f011fed92c4982819f78c7cfb4c07b27adf7651rago
1059f011fed92c4982819f78c7cfb4c07b27adf7651rago//------
1069f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPEq::DPEq() {
1079f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1089f011fed92c4982819f78c7cfb4c07b27adf7651rago
1099f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPEq::init(bool inUse, bool enabled, uint32_t bandCount) {
1109f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPBandStage::init(inUse, enabled, bandCount);
1119f011fed92c4982819f78c7cfb4c07b27adf7651rago    mBands.resize(getBandCount());
1129f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1139f011fed92c4982819f78c7cfb4c07b27adf7651rago
1149f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPEqBand * DPEq::getBand(uint32_t band) {
1159f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (band < getBandCount()) {
1169f011fed92c4982819f78c7cfb4c07b27adf7651rago        return &mBands[band];
1179f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
1189f011fed92c4982819f78c7cfb4c07b27adf7651rago    return NULL;
1199f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1209f011fed92c4982819f78c7cfb4c07b27adf7651rago
1219f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPEq::setBand(uint32_t band, DPEqBand &src) {
1229f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (band < getBandCount()) {
1239f011fed92c4982819f78c7cfb4c07b27adf7651rago        mBands[band] = src;
1249f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
1259f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1269f011fed92c4982819f78c7cfb4c07b27adf7651rago
1279f011fed92c4982819f78c7cfb4c07b27adf7651rago//------
1289f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPMbc::DPMbc() {
1299f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1309f011fed92c4982819f78c7cfb4c07b27adf7651rago
1319f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPMbc::init(bool inUse, bool enabled, uint32_t bandCount) {
1329f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPBandStage::init(inUse, enabled, bandCount);
1339f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (isInUse()) {
1349f011fed92c4982819f78c7cfb4c07b27adf7651rago        mBands.resize(bandCount);
1359f011fed92c4982819f78c7cfb4c07b27adf7651rago    } else {
1369f011fed92c4982819f78c7cfb4c07b27adf7651rago        mBands.resize(0);
1379f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
1389f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1399f011fed92c4982819f78c7cfb4c07b27adf7651rago
1409f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPMbcBand * DPMbc::getBand(uint32_t band) {
1419f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (band < getBandCount()) {
1429f011fed92c4982819f78c7cfb4c07b27adf7651rago        return &mBands[band];
1439f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
1449f011fed92c4982819f78c7cfb4c07b27adf7651rago    return NULL;
1459f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1469f011fed92c4982819f78c7cfb4c07b27adf7651rago
1479f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPMbc::setBand(uint32_t band, DPMbcBand &src) {
1489f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (band < getBandCount()) {
1499f011fed92c4982819f78c7cfb4c07b27adf7651rago        mBands[band] = src;
1509f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
1519f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1529f011fed92c4982819f78c7cfb4c07b27adf7651rago
1539f011fed92c4982819f78c7cfb4c07b27adf7651rago//------
1549f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPLimiter::DPLimiter() {
1559f011fed92c4982819f78c7cfb4c07b27adf7651rago    init(DP_DEFAULT_STAGE_INUSE,
1569f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_STAGE_ENABLED,
1579f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_LINK_GROUP,
1589f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_ATTACK_TIME_MS,
1599f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_RELEASE_TIME_MS,
1609f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_RATIO,
1619f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_THRESHOLD_DB,
1629f011fed92c4982819f78c7cfb4c07b27adf7651rago            DP_DEFAULT_GAIN_DB);
1639f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1649f011fed92c4982819f78c7cfb4c07b27adf7651rago
1659f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPLimiter::init(bool inUse, bool enabled, uint32_t linkGroup, float attackTime, float releaseTime,
1669f011fed92c4982819f78c7cfb4c07b27adf7651rago        float ratio, float threshold, float postGain) {
1679f011fed92c4982819f78c7cfb4c07b27adf7651rago    DPStage::init(inUse, enabled);
1689f011fed92c4982819f78c7cfb4c07b27adf7651rago    setLinkGroup(linkGroup);
1699f011fed92c4982819f78c7cfb4c07b27adf7651rago    setAttackTime(attackTime);
1709f011fed92c4982819f78c7cfb4c07b27adf7651rago    setReleaseTime(releaseTime);
1719f011fed92c4982819f78c7cfb4c07b27adf7651rago    setRatio(ratio);
1729f011fed92c4982819f78c7cfb4c07b27adf7651rago    setThreshold(threshold);
1739f011fed92c4982819f78c7cfb4c07b27adf7651rago    setPostGain(postGain);
1749f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1759f011fed92c4982819f78c7cfb4c07b27adf7651rago
1769f011fed92c4982819f78c7cfb4c07b27adf7651rago//----
177d24e983ec1ff00ef82e3accc042d160f4fca6435ragoDPChannel::DPChannel() : mInitialized(false), mInputGainDb(0), mOutputGainDb(0),
178d24e983ec1ff00ef82e3accc042d160f4fca6435rago        mPreEqInUse(false), mMbcInUse(false), mPostEqInUse(false), mLimiterInUse(false) {
1799f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1809f011fed92c4982819f78c7cfb4c07b27adf7651rago
1819f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPChannel::init(float inputGain, bool preEqInUse, uint32_t preEqBandCount,
1829f011fed92c4982819f78c7cfb4c07b27adf7651rago        bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount,
1839f011fed92c4982819f78c7cfb4c07b27adf7651rago        bool limiterInUse) {
1849f011fed92c4982819f78c7cfb4c07b27adf7651rago    setInputGain(inputGain);
1859f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPreEqInUse = preEqInUse;
1869f011fed92c4982819f78c7cfb4c07b27adf7651rago    mMbcInUse = mbcInUse;
1879f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPostEqInUse = postEqInUse;
1889f011fed92c4982819f78c7cfb4c07b27adf7651rago    mLimiterInUse = limiterInUse;
1899f011fed92c4982819f78c7cfb4c07b27adf7651rago
1909f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPreEq.init(mPreEqInUse, false, preEqBandCount);
1919f011fed92c4982819f78c7cfb4c07b27adf7651rago    mMbc.init(mMbcInUse, false, mbcBandCount);
1929f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPostEq.init(mPostEqInUse, false, postEqBandCount);
1939f011fed92c4982819f78c7cfb4c07b27adf7651rago    mLimiter.init(mLimiterInUse, false, 0, 50, 120, 2, -30, 0);
1949f011fed92c4982819f78c7cfb4c07b27adf7651rago    mInitialized = true;
1959f011fed92c4982819f78c7cfb4c07b27adf7651rago}
1969f011fed92c4982819f78c7cfb4c07b27adf7651rago
1979f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPEq* DPChannel::getPreEq() {
1989f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized) {
1999f011fed92c4982819f78c7cfb4c07b27adf7651rago        return NULL;
2009f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2019f011fed92c4982819f78c7cfb4c07b27adf7651rago    return &mPreEq;
2029f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2039f011fed92c4982819f78c7cfb4c07b27adf7651rago
2049f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPMbc* DPChannel::getMbc() {
2059f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized) {
2069f011fed92c4982819f78c7cfb4c07b27adf7651rago        return NULL;
2079f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2089f011fed92c4982819f78c7cfb4c07b27adf7651rago    return &mMbc;
2099f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2109f011fed92c4982819f78c7cfb4c07b27adf7651rago
2119f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPEq* DPChannel::getPostEq() {
2129f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized) {
2139f011fed92c4982819f78c7cfb4c07b27adf7651rago        return NULL;
2149f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2159f011fed92c4982819f78c7cfb4c07b27adf7651rago    return &mPostEq;
2169f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2179f011fed92c4982819f78c7cfb4c07b27adf7651rago
2189f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPLimiter* DPChannel::getLimiter() {
2199f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized) {
2209f011fed92c4982819f78c7cfb4c07b27adf7651rago        return NULL;
2219f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2229f011fed92c4982819f78c7cfb4c07b27adf7651rago    return &mLimiter;
2239f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2249f011fed92c4982819f78c7cfb4c07b27adf7651rago
2259f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPChannel::setLimiter(DPLimiter &limiter) {
2269f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized) {
2279f011fed92c4982819f78c7cfb4c07b27adf7651rago        return;
2289f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2299f011fed92c4982819f78c7cfb4c07b27adf7651rago    mLimiter = limiter;
2309f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2319f011fed92c4982819f78c7cfb4c07b27adf7651rago
2329f011fed92c4982819f78c7cfb4c07b27adf7651rago//----
2339f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPBase::DPBase() : mInitialized(false), mChannelCount(0), mPreEqInUse(false), mPreEqBandCount(0),
2349f011fed92c4982819f78c7cfb4c07b27adf7651rago        mMbcInUse(false), mMbcBandCount(0), mPostEqInUse(false), mPostEqBandCount(0),
2359f011fed92c4982819f78c7cfb4c07b27adf7651rago        mLimiterInUse(false) {
2369f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2379f011fed92c4982819f78c7cfb4c07b27adf7651rago
2389f011fed92c4982819f78c7cfb4c07b27adf7651ragovoid DPBase::init(uint32_t channelCount, bool preEqInUse, uint32_t preEqBandCount,
2399f011fed92c4982819f78c7cfb4c07b27adf7651rago        bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount,
2409f011fed92c4982819f78c7cfb4c07b27adf7651rago        bool limiterInUse) {
241ff0a51f978a6307153cc752b8071144d642b54acrago    ALOGV("DPBase::init");
2429f011fed92c4982819f78c7cfb4c07b27adf7651rago    mChannelCount = channelCount;
2439f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPreEqInUse = preEqInUse;
2449f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPreEqBandCount = preEqBandCount;
2459f011fed92c4982819f78c7cfb4c07b27adf7651rago    mMbcInUse = mbcInUse;
2469f011fed92c4982819f78c7cfb4c07b27adf7651rago    mMbcBandCount = mbcBandCount;
2479f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPostEqInUse = postEqInUse;
2489f011fed92c4982819f78c7cfb4c07b27adf7651rago    mPostEqBandCount = postEqBandCount;
2499f011fed92c4982819f78c7cfb4c07b27adf7651rago    mLimiterInUse = limiterInUse;
2509f011fed92c4982819f78c7cfb4c07b27adf7651rago    mChannel.resize(mChannelCount);
2519f011fed92c4982819f78c7cfb4c07b27adf7651rago    for (size_t ch = 0; ch < mChannelCount; ch++) {
2529f011fed92c4982819f78c7cfb4c07b27adf7651rago        mChannel[ch].init(0, preEqInUse, preEqBandCount, mbcInUse, mbcBandCount,
2539f011fed92c4982819f78c7cfb4c07b27adf7651rago                postEqInUse, postEqBandCount, limiterInUse);
2549f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2559f011fed92c4982819f78c7cfb4c07b27adf7651rago    mInitialized = true;
2569f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2579f011fed92c4982819f78c7cfb4c07b27adf7651rago
2589f011fed92c4982819f78c7cfb4c07b27adf7651ragoDPChannel* DPBase::getChannel(uint32_t channelIndex) {
2599f011fed92c4982819f78c7cfb4c07b27adf7651rago    if (!mInitialized || channelIndex < 0 || channelIndex >= mChannel.size()) {
2609f011fed92c4982819f78c7cfb4c07b27adf7651rago        return NULL;
2619f011fed92c4982819f78c7cfb4c07b27adf7651rago    }
2629f011fed92c4982819f78c7cfb4c07b27adf7651rago    return & mChannel[channelIndex];
2639f011fed92c4982819f78c7cfb4c07b27adf7651rago}
2649f011fed92c4982819f78c7cfb4c07b27adf7651rago
2659f011fed92c4982819f78c7cfb4c07b27adf7651rago} //namespace dp_fx
266