mirror of
https://gitlab.com/ecodis/exhale.git
synced 2025-02-09 08:08:45 +01:00
low-rate tuning
This commit is contained in:
parent
c497a38a5f
commit
2e17beffc4
@ -535,7 +535,7 @@ unsigned ExhaleEncoder::psychBitAllocation () // perceptual bit-allocation via s
|
|||||||
const unsigned samplingRate = toSamplingRate (m_frequencyIdx);
|
const unsigned samplingRate = toSamplingRate (m_frequencyIdx);
|
||||||
const unsigned lfeChannelIndex = (m_channelConf >= CCI_6_CH ? __max (5, nChannels - 1) : USAC_MAX_NUM_CHANNELS);
|
const unsigned lfeChannelIndex = (m_channelConf >= CCI_6_CH ? __max (5, nChannels - 1) : USAC_MAX_NUM_CHANNELS);
|
||||||
const uint32_t maxSfbLong = (samplingRate < 37566 ? 51 /*32 kHz*/ : brModeAndFsToMaxSfbLong (m_bitRateMode, samplingRate));
|
const uint32_t maxSfbLong = (samplingRate < 37566 ? 51 /*32 kHz*/ : brModeAndFsToMaxSfbLong (m_bitRateMode, samplingRate));
|
||||||
const uint64_t scaleSr = (samplingRate < 27713 ? 37 - m_bitRateMode : 38 - (m_bitRateMode > 2 ? 1 : 0));
|
const uint64_t scaleSr = (samplingRate < 27713 ? 38 - m_bitRateMode : 38 - (m_bitRateMode > 2 ? 1 : 0));
|
||||||
const uint64_t scaleBr = (m_bitRateMode == 0 ? 32 : scaleSr - eightTimesSqrt256Minus[256 - m_bitRateMode] - ((m_bitRateMode - 1) >> 1));
|
const uint64_t scaleBr = (m_bitRateMode == 0 ? 32 : scaleSr - eightTimesSqrt256Minus[256 - m_bitRateMode] - ((m_bitRateMode - 1) >> 1));
|
||||||
uint32_t* sfbStepSizes = (uint32_t*) m_tempIntBuf;
|
uint32_t* sfbStepSizes = (uint32_t*) m_tempIntBuf;
|
||||||
uint8_t meanSpecFlat[USAC_MAX_NUM_CHANNELS];
|
uint8_t meanSpecFlat[USAC_MAX_NUM_CHANNELS];
|
||||||
|
@ -38,7 +38,7 @@ static inline short getBitCount (EntropyCoder& entrCoder, const int sfIndex, con
|
|||||||
#if EC_TRELLIS_OPT_CODING && !EC_TRAIN
|
#if EC_TRELLIS_OPT_CODING && !EC_TRAIN
|
||||||
static inline double getLagrangeValue (const uint16_t rateIndex) // RD optimization constant
|
static inline double getLagrangeValue (const uint16_t rateIndex) // RD optimization constant
|
||||||
{
|
{
|
||||||
return (108.0 + rateIndex * rateIndex) * 0.0009765625; // /1024
|
return (95.0 + rateIndex * rateIndex) * 0.0009765625; // / 1024
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -191,14 +191,33 @@ uint8_t SfbQuantizer::quantizeMagnSfb (const unsigned* const coeffMagn, const ui
|
|||||||
|
|
||||||
// re-compute least-squares optimal scale factor modifier
|
// re-compute least-squares optimal scale factor modifier
|
||||||
if (dNum > SF_THRESH_POS * dDen) sf++;
|
if (dNum > SF_THRESH_POS * dDen) sf++;
|
||||||
|
#if !SFB_QUANT_PERCEPT_OPT
|
||||||
else
|
else
|
||||||
if (dNum < SF_THRESH_NEG * dDen) sf--;
|
if (dNum < SF_THRESH_NEG * dDen) sf--; // reduces SFB RMS
|
||||||
|
#endif
|
||||||
} // if nonzero
|
} // if nonzero
|
||||||
|
|
||||||
if (sigMaxQ) *sigMaxQ = (numQ > 0 ? maxQ : 0); // a new max
|
if (sigMaxQ) *sigMaxQ = (numQ > 0 ? maxQ : 0); // a new max
|
||||||
if (sigNumQ) *sigNumQ = numQ; // a new nonzero coeff. count
|
if (sigNumQ) *sigNumQ = numQ; // a new nonzero coeff. count
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // EC_TRELLIS_OPT_CODING
|
||||||
|
|
||||||
|
#if SFB_QUANT_PERCEPT_OPT
|
||||||
|
if ((numQ > 0) && (sf > 0 && sf <= scaleFactor)) // recover RMS
|
||||||
|
{
|
||||||
|
const double magnNormDiv = m_lutSfNorm[sf];
|
||||||
|
|
||||||
|
dNum = 0.0; // dDen has normalized energy after quantization
|
||||||
|
for (int i = numCoeffs - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
const double normalizedMagn = (double) coeffMagn[i] * magnNormDiv;
|
||||||
|
|
||||||
|
dNum += normalizedMagn * normalizedMagn; // TODO: use SIMD?
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dNum > SF_THRESH_POS * SF_THRESH_POS * dDen) sf++;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return (uint8_t) __max (0, sf); // optimized scale factor index
|
return (uint8_t) __max (0, sf); // optimized scale factor index
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ uint8_t SpecGapFiller::getSpecGapFillParams (const SfbQuantizer& sfbQuantizer, c
|
|||||||
}
|
}
|
||||||
s = 0;
|
s = 0;
|
||||||
#endif
|
#endif
|
||||||
u = __min (7, uint16_t (14.47118288 + 9.965784285 * log10 (magnSum / (double) u)));
|
u = __min (7 + (specFlat >> 5), uint16_t (14.47118288 + 9.965784285 * log10 (magnSum / (double) u)));
|
||||||
u = __max (1, u - int (specFlat >> 5)); // SFM-adaptive reduction
|
u = __max (1, u - int (specFlat >> 5)); // SFM-adaptive reduction
|
||||||
|
|
||||||
magnSum = pow (2.0, (14 - u) / 3.0); // noiseVal^-1, 23003-3, 7.2
|
magnSum = pow (2.0, (14 - u) / 3.0); // noiseVal^-1, 23003-3, 7.2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user