Files
exhale/src/lib/bitAllocation.h
Christian R. Helmrich f145f63fe5 code cleanup, CBR
2021-09-27 12:00:00 +02:00

61 lines
3.0 KiB
C++

/* bitAllocation.h - header file for class needed for psychoacoustic bit-allocation
* written by C. R. Helmrich, last modified in 2021 - see License.htm for legal notices
*
* The copyright in this software is being made available under the exhale Copyright License
* and comes with ABSOLUTELY NO WARRANTY. This software may be subject to other third-
* party rights, including patent rights. No such rights are granted under this License.
*
* Copyright (c) 2018-2021 Christian R. Helmrich, project ecodis. All rights reserved.
*/
#ifndef _BIT_ALLOCATION_H_
#define _BIT_ALLOCATION_H_
#include "exhaleLibPch.h"
#include "linearPrediction.h"
// constants, experimental macros
#define BA_EPS 1
#define BA_MORE_CBR 0 // 1: force more constant bit-rate (CBR, experimental!)
// class for audio bit-allocation
class BitAllocator
{
private:
// member variables
uint32_t m_avgStepSize[USAC_MAX_NUM_CHANNELS];
uint8_t m_avgSpecFlat[USAC_MAX_NUM_CHANNELS];
uint8_t m_avgTempFlat[USAC_MAX_NUM_CHANNELS];
uint8_t m_rateIndex; // preset
uint8_t* m_tempSfbValue;
LinearPredictor* m_tnsPredictor;
public:
// constructor
BitAllocator ();
// destructor
~BitAllocator () { MFREE (m_tempSfbValue); }
// public functions
void getChAverageSpecFlat (uint8_t meanSpecFlatInCh[USAC_MAX_NUM_CHANNELS], const unsigned nChannels);
void getChAverageTempFlat (uint8_t meanTempFlatInCh[USAC_MAX_NUM_CHANNELS], const unsigned nChannels);
uint16_t getRateCtrlFac (const int32_t rateRatio, const unsigned samplingRate, const uint32_t specFlatness,
const bool prevEightShorts = false);
uint8_t getScaleFac (const uint32_t sfbStepSize, const int32_t* const sfbSignal, const uint8_t sfbWidth,
const uint32_t sfbRmsValue);
unsigned initAllocMemory (LinearPredictor* const linPredictor, const uint8_t numSwb, const uint8_t bitRateMode);
unsigned initSfbStepSizes (const SfbGroupData* const groupData[USAC_MAX_NUM_CHANNELS], const uint8_t numSwbShort,
const uint32_t specAnaStats[USAC_MAX_NUM_CHANNELS],
const uint32_t tempAnaStats[USAC_MAX_NUM_CHANNELS],
const unsigned nChannels, const unsigned samplingRate, uint32_t* const sfbStepSizes,
const unsigned lfeChannelIndex = USAC_MAX_NUM_CHANNELS, const bool tnsDisabled = false);
unsigned imprSfbStepSizes (const SfbGroupData* const groupData[USAC_MAX_NUM_CHANNELS], const uint8_t numSwbShort,
const int32_t* const mdctSpec[USAC_MAX_NUM_CHANNELS], const unsigned nSamplesInFrame,
const unsigned nChannels, const unsigned samplingRate, uint32_t* const sfbStepSizes,
const unsigned firstChannelIndex, const uint8_t* const sfm, const bool commonWindow,
const uint8_t* const sfbStereoData = nullptr, const uint8_t stereoConfig = 0);
}; // BitAllocator
#endif // _BIT_ALLOCATION_H_