Combine identical arrays

This commit is contained in:
Chris Robinson
2020-01-04 00:59:49 -08:00
parent 462bcd4ab7
commit cdd24c7d01
7 changed files with 30 additions and 52 deletions
+3 -13
View File
@@ -2809,19 +2809,9 @@ START_API_FUNC
if((voice->mFmtChannels == FmtBFormat2D || voice->mFmtChannels == FmtBFormat3D)
&& device->mAmbiOrder > voice->mAmbiOrder)
{
const ALuint *OrderFromChan;
if(voice->mFmtChannels == FmtBFormat2D)
{
static const ALuint Order2DFromChan[MAX_AMBI2D_CHANNELS]{
0, 1,1, 2,2, 3,3,};
OrderFromChan = Order2DFromChan;
}
else
{
static const ALuint Order3DFromChan[MAX_AMBI_CHANNELS]{
0, 1,1,1, 2,2,2,2,2, 3,3,3,3,3,3,3,};
OrderFromChan = Order3DFromChan;
}
const uint8_t *OrderFromChan{(voice->mFmtChannels == FmtBFormat2D) ?
AmbiIndex::OrderFrom2DChannel.data() :
AmbiIndex::OrderFromChannel.data()};
const BandSplitter splitter{400.0f / static_cast<float>(device->Frequency)};
+3 -13
View File
@@ -2267,19 +2267,9 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
if((voice.mFmtChannels == FmtBFormat2D || voice.mFmtChannels == FmtBFormat3D)
&& device->mAmbiOrder > voice.mAmbiOrder)
{
const ALuint *OrderFromChan;
if(voice.mFmtChannels == FmtBFormat2D)
{
static const ALuint Order2DFromChan[MAX_AMBI2D_CHANNELS]{
0, 1,1, 2,2, 3,3,};
OrderFromChan = Order2DFromChan;
}
else
{
static const ALuint Order3DFromChan[MAX_AMBI_CHANNELS]{
0, 1,1,1, 2,2,2,2,2, 3,3,3,3,3,3,3,};
OrderFromChan = Order3DFromChan;
}
const uint8_t *OrderFromChan{(voice.mFmtChannels == FmtBFormat2D) ?
AmbiIndex::OrderFrom2DChannel.data() :
AmbiIndex::OrderFromChannel.data()};
const BandSplitter splitter{400.0f / static_cast<float>(device->Frequency)};
+1 -4
View File
@@ -904,15 +904,12 @@ void CalcPanningAndFilters(ALvoice *voice, const ALfloat xpos, const ALfloat ypo
GetAmbiLayout(voice->mAmbiLayout).data()};
const float *scales{GetAmbiScales(voice->mAmbiScaling).data()};
static const uint8_t OrderFromChan[MAX_AMBI_CHANNELS]{
0, 1,1,1, 2,2,2,2,2, 3,3,3,3,3,3,3,
};
static const uint8_t ChansPerOrder[MAX_AMBI_ORDER+1]{1, 3, 5, 7,};
static const uint8_t OrderOffset[MAX_AMBI_ORDER+1]{0, 1, 4, 9,};
for(ALuint c{0};c < num_channels;c++)
{
const size_t acn{index_map[c]};
const size_t order{OrderFromChan[acn]};
const size_t order{AmbiIndex::OrderFromChannel[acn]};
const size_t tocopy{ChansPerOrder[order]};
const size_t offset{OrderOffset[order]};
const float scale{scales[acn]};
+7
View File
@@ -120,6 +120,13 @@ struct AmbiIndex {
static constexpr std::array<uint8_t,MAX_AMBI2D_CHANNELS> From2D{{
0, 1,3, 4,8, 9,15
}};
static constexpr std::array<uint8_t,MAX_AMBI_CHANNELS> OrderFromChannel{{
0, 1,1,1, 2,2,2,2,2, 3,3,3,3,3,3,3,
}};
static constexpr std::array<uint8_t,MAX_AMBI2D_CHANNELS> OrderFrom2DChannel{{
0, 1,1, 2,2, 3,3,
}};
};
#endif /* AMBIDEFS_H */
+10 -16
View File
@@ -78,12 +78,10 @@ BFormatDec::BFormatDec(const AmbDecConf *conf, const bool allow_2band, const ALu
ALfloat (&mtx)[MAX_AMBI_CHANNELS] = mMatrix.Single[chanmap[i]];
for(size_t j{0},k{0};j < coeff_count;j++)
{
const size_t l{periphonic ? j : AmbiIndex::From2D[j]};
if(!(conf->ChanMask&(1u<<l))) continue;
mtx[j] = conf->HFMatrix[i][k] / coeff_scale[l] *
((l>=9) ? conf->HFOrderGain[3] :
(l>=4) ? conf->HFOrderGain[2] :
(l>=1) ? conf->HFOrderGain[1] : conf->HFOrderGain[0]);
const size_t acn{periphonic ? j : AmbiIndex::From2D[j]};
if(!(conf->ChanMask&(1u<<acn))) continue;
mtx[j] = conf->HFMatrix[i][k] / coeff_scale[acn] *
conf->HFOrderGain[AmbiIndex::OrderFromChannel[acn]];
++k;
}
}
@@ -99,16 +97,12 @@ BFormatDec::BFormatDec(const AmbDecConf *conf, const bool allow_2band, const ALu
ALfloat (&mtx)[sNumBands][MAX_AMBI_CHANNELS] = mMatrix.Dual[chanmap[i]];
for(size_t j{0},k{0};j < coeff_count;j++)
{
const size_t l{periphonic ? j : AmbiIndex::From2D[j]};
if(!(conf->ChanMask&(1u<<l))) continue;
mtx[sHFBand][j] = conf->HFMatrix[i][k] / coeff_scale[l] *
((l>=9) ? conf->HFOrderGain[3] :
(l>=4) ? conf->HFOrderGain[2] :
(l>=1) ? conf->HFOrderGain[1] : conf->HFOrderGain[0]) * ratio;
mtx[sLFBand][j] = conf->LFMatrix[i][k] / coeff_scale[l] *
((l>=9) ? conf->LFOrderGain[3] :
(l>=4) ? conf->LFOrderGain[2] :
(l>=1) ? conf->LFOrderGain[1] : conf->LFOrderGain[0]) / ratio;
const size_t acn{periphonic ? j : AmbiIndex::From2D[j]};
if(!(conf->ChanMask&(1u<<acn))) continue;
mtx[sHFBand][j] = conf->HFMatrix[i][k] / coeff_scale[acn] *
conf->HFOrderGain[AmbiIndex::OrderFromChannel[acn]] * ratio;
mtx[sLFBand][j] = conf->LFMatrix[i][k] / coeff_scale[acn] *
conf->LFOrderGain[AmbiIndex::OrderFromChannel[acn]] / ratio;
++k;
}
}
+4 -6
View File
@@ -292,9 +292,6 @@ void BuildBFormatHrtf(const HrtfStore *Hrtf, DirectHrtfState *state,
ALuint ldelay, rdelay;
};
static const int OrderFromChan[MAX_AMBI_CHANNELS]{
0, 1,1,1, 2,2,2,2,2, 3,3,3,3,3,3,3,
};
/* Set this to true for dual-band HRTF processing. May require better
* calculation of the new IR length to deal with the head and tail
* generated by the HF scaling.
@@ -384,7 +381,8 @@ void BuildBFormatHrtf(const HrtfStore *Hrtf, DirectHrtfState *state,
/* For single-band decoding, apply the HF scale to the response. */
for(size_t i{0u};i < state->Coeffs.size();++i)
{
const double mult{double{AmbiOrderHFGain[OrderFromChan[i]]} * AmbiMatrix[c][i]};
const size_t order{AmbiIndex::OrderFromChannel[i]};
const double mult{double{AmbiOrderHFGain[order]} * AmbiMatrix[c][i]};
const ALuint numirs{HRIR_LENGTH - maxu(ldelay, rdelay)};
ALuint lidx{ldelay}, ridx{rdelay};
for(ALuint j{0};j < numirs;++j)
@@ -425,7 +423,7 @@ void BuildBFormatHrtf(const HrtfStore *Hrtf, DirectHrtfState *state,
for(size_t i{0u};i < state->Coeffs.size();++i)
{
const ALdouble mult{AmbiMatrix[c][i]};
const ALdouble hfgain{AmbiOrderHFGain[OrderFromChan[i]]};
const ALdouble hfgain{AmbiOrderHFGain[AmbiIndex::OrderFromChannel[i]]};
ALuint j{HRIR_LENGTH*3 - ldelay};
for(ALuint lidx{0};lidx < HRIR_LENGTH;++lidx,++j)
tmpres[i][lidx][0] += (tmpflt[0][j]*hfgain + tmpflt[1][j]) * mult;
@@ -445,7 +443,7 @@ void BuildBFormatHrtf(const HrtfStore *Hrtf, DirectHrtfState *state,
for(size_t i{0u};i < state->Coeffs.size();++i)
{
const ALdouble mult{AmbiMatrix[c][i]};
const ALdouble hfgain{AmbiOrderHFGain[OrderFromChan[i]]};
const ALdouble hfgain{AmbiOrderHFGain[AmbiIndex::OrderFromChannel[i]]};
ALuint j{HRIR_LENGTH*3 - rdelay};
for(ALuint ridx{0};ridx < HRIR_LENGTH;++ridx,++j)
tmpres[i][ridx][1] += (tmpflt[0][j]*hfgain + tmpflt[1][j]) * mult;
+2
View File
@@ -65,6 +65,8 @@ constexpr std::array<uint8_t,MAX_AMBI_CHANNELS> AmbiIndex::FromFuMa;
constexpr std::array<uint8_t,MAX_AMBI2D_CHANNELS> AmbiIndex::FromFuMa2D;
constexpr std::array<uint8_t,MAX_AMBI_CHANNELS> AmbiIndex::FromACN;
constexpr std::array<uint8_t,MAX_AMBI2D_CHANNELS> AmbiIndex::From2D;
constexpr std::array<uint8_t,MAX_AMBI_CHANNELS> AmbiIndex::OrderFromChannel;
constexpr std::array<uint8_t,MAX_AMBI2D_CHANNELS> AmbiIndex::OrderFrom2DChannel;
namespace {