Remove unnecessary structs and buffers

This commit is contained in:
Chris Robinson 2019-01-05 22:24:38 -08:00
parent 3f35fcc4b5
commit aa29bf5933
2 changed files with 18 additions and 23 deletions

View File

@ -19,10 +19,11 @@
namespace {
using namespace std::placeholders;
#define HF_BAND 0
#define LF_BAND 1
static_assert(BFormatDec::sNumBands == 2, "Unexpected BFormatDec::sNumBands");
static_assert(AmbiUpsampler::sNumBands == 2, "Unexpected AmbiUpsampler::sNumBands");
constexpr ALfloat Ambi3DDecoderHFScale[MAX_AMBI_ORDER+1] = {
2.00000000f, 1.15470054f
@ -89,12 +90,12 @@ void BFormatDec::reset(const AmbDecConf *conf, bool allow_2band, ALsizei inchans
const ALfloat gain0{std::sqrt(Ambi3DDecoderHFScale[0] / hfscales[0])};
const ALfloat gain1{std::sqrt(Ambi3DDecoderHFScale[1] / hfscales[1])};
mUpSampler[0].Shelf.setParams(BiquadType::HighShelf, gain0, xover_norm,
mShelf[0].setParams(BiquadType::HighShelf, gain0, xover_norm,
calc_rcpQ_from_slope(gain0, 1.0f));
mUpSampler[1].Shelf.setParams(BiquadType::HighShelf, gain1, xover_norm,
mShelf[1].setParams(BiquadType::HighShelf, gain1, xover_norm,
calc_rcpQ_from_slope(gain1, 1.0f));
for(ALsizei i{2};i < 4;i++)
mUpSampler[i].Shelf.copyParamsFrom(mUpSampler[1].Shelf);
std::for_each(std::begin(mShelf)+2, std::end(mShelf),
std::bind(std::mem_fn(&BiquadFilter::copyParamsFrom), _1, mShelf[1]));
}
const bool periphonic{(conf->ChanMask&AMBI_PERIPHONIC_MASK) != 0};
@ -176,12 +177,12 @@ void BFormatDec::reset(ALsizei inchans, ALuint srate, ALsizei chancount, const C
const ALfloat gain0{std::sqrt(Ambi3DDecoderHFScale[0] / hfscales[0])};
const ALfloat gain1{std::sqrt(Ambi3DDecoderHFScale[1] / hfscales[1])};
mUpSampler[0].Shelf.setParams(BiquadType::HighShelf, gain0, xover_norm,
mShelf[0].setParams(BiquadType::HighShelf, gain0, xover_norm,
calc_rcpQ_from_slope(gain0, 1.0f));
mUpSampler[1].Shelf.setParams(BiquadType::HighShelf, gain1, xover_norm,
mShelf[1].setParams(BiquadType::HighShelf, gain1, xover_norm,
calc_rcpQ_from_slope(gain1, 1.0f));
for(ALsizei i{2};i < 4;i++)
mUpSampler[i].Shelf.copyParamsFrom(mUpSampler[1].Shelf);
std::for_each(std::begin(mShelf)+2, std::end(mShelf),
std::bind(std::mem_fn(&BiquadFilter::copyParamsFrom), _1, mShelf[1]));
}
for(ALsizei i{0};i < chancount;i++)
@ -248,7 +249,7 @@ void BFormatDec::upSample(ALfloat (*OutBuffer)[BUFFERSIZE], const ALfloat (*InSa
*/
for(ALsizei i{0};i < InChannels;i++)
{
mUpSampler[i].Shelf.process(mSamples[0].data(), InSamples[i], SamplesToDo);
mShelf[i].process(mSamples[0].data(), InSamples[i], SamplesToDo);
const ALfloat *RESTRICT src{al::assume_aligned<16>(mSamples[0].data())};
ALfloat *dst{al::assume_aligned<16>(OutBuffer[i])};
@ -267,8 +268,8 @@ void AmbiUpsampler::reset(const ALsizei out_order, const ALfloat xover_norm)
calc_rcpQ_from_slope(gain0, 1.0f));
mShelf[1].setParams(BiquadType::HighShelf, gain1, xover_norm,
calc_rcpQ_from_slope(gain1, 1.0f));
for(ALsizei i{2};i < 4;i++)
mShelf[i].copyParamsFrom(mShelf[1]);
std::for_each(std::begin(mShelf)+2, std::end(mShelf),
std::bind(std::mem_fn(&BiquadFilter::copyParamsFrom), _1, mShelf[1]));
}
void AmbiUpsampler::process(ALfloat (*OutBuffer)[BUFFERSIZE], const ALfloat (*InSamples)[BUFFERSIZE], const ALsizei InChannels, const ALsizei SamplesToDo)
@ -279,9 +280,9 @@ void AmbiUpsampler::process(ALfloat (*OutBuffer)[BUFFERSIZE], const ALfloat (*In
for(ALsizei i{0};i < InChannels;i++)
{
mShelf[i].process(mSamples[0], InSamples[i], SamplesToDo);
mShelf[i].process(mSamples, InSamples[i], SamplesToDo);
const ALfloat *RESTRICT src{al::assume_aligned<16>(mSamples[0])};
const ALfloat *RESTRICT src{al::assume_aligned<16>(mSamples)};
ALfloat *dst{al::assume_aligned<16>(OutBuffer[i])};
std::transform(src, src+SamplesToDo, dst, dst, std::plus<float>{});
}

View File

@ -33,9 +33,8 @@ private:
std::array<ALfloat,BUFFERSIZE> *mSamplesHF;
std::array<ALfloat,BUFFERSIZE> *mSamplesLF;
struct {
BiquadFilter Shelf;
} mUpSampler[4];
/* Shelf filters used for upsampling. */
BiquadFilter mShelf[4];
ALsizei mNumChannels;
ALboolean mDualBand;
@ -59,13 +58,8 @@ public:
* with bformatdec.
*/
class AmbiUpsampler {
public:
static constexpr size_t sNumBands{2};
private:
alignas(16) ALfloat mSamples[sNumBands][BUFFERSIZE];
BiquadFilter mShelf[4];
alignas(16) ALfloat mSamples[BUFFERSIZE];
public:
void reset(const ALsizei out_order, const ALfloat xover_norm);