Skip to content

Commit ca14df0

Browse files
committed
[refactoring] Get rid of inheritance from data.
1 parent 2ca3d7f commit ca14df0

19 files changed

+132
-119
lines changed

src/atrac/atrac1.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,7 @@ constexpr uint32_t TAtrac1Data::BfuAmountTab[8];
2929
TFloat TAtrac1Data::ScaleTable[64] = {0};
3030
TFloat TAtrac1Data::SineWindow[32] = {0};
3131

32+
const static TAtrac1Data Atrac1Data;
33+
3234
} //namespace NAtrac1
3335
} //namespace NAtracDEnc

src/atrac/atrac1.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -55,32 +55,32 @@ class TAtrac1Data {
5555
public:
5656
static constexpr uint8_t MaxBfus = 52;
5757
static constexpr uint8_t NumQMF = 3;
58-
protected:
59-
static constexpr uint32_t SpecsPerBlock[MaxBfus] = {
58+
59+
static constexpr uint32_t SpecsPerBlock[MaxBfus] = {
6060
8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, // low band
6161
6, 6, 6, 6, 7, 7, 7, 7, 9, 9, 9, 9, 10, 10, 10, 10, // middle band
6262
12, 12, 12, 12, 12, 12, 12, 12, 20, 20, 20, 20, 20, 20, 20, 20 // high band
63-
};
64-
static constexpr uint32_t BlocksPerBand[NumQMF + 1] = {0, 20, 36, 52};
65-
static constexpr uint32_t SpecsStartLong[MaxBfus] = {
63+
};
64+
static constexpr uint32_t BlocksPerBand[NumQMF + 1] = {0, 20, 36, 52};
65+
static constexpr uint32_t SpecsStartLong[MaxBfus] = {
6666
0, 8, 16, 24, 32, 36, 40, 44, 48, 56, 64, 72, 80, 86, 92, 98, 104, 110, 116, 122,
6767
128, 134, 140, 146, 152, 159, 166, 173, 180, 189, 198, 207, 216, 226, 236, 246,
6868
256, 268, 280, 292, 304, 316, 328, 340, 352, 372, 392, 412, 432, 452, 472, 492,
69-
};
69+
};
7070
static constexpr uint32_t SpecsStartShort[MaxBfus] = {
7171
0, 32, 64, 96, 8, 40, 72, 104, 12, 44, 76, 108, 20, 52, 84, 116, 26, 58, 90, 122,
7272
128, 160, 192, 224, 134, 166, 198, 230, 141, 173, 205, 237, 150, 182, 214, 246,
7373
256, 288, 320, 352, 384, 416, 448, 480, 268, 300, 332, 364, 396, 428, 460, 492
7474
};
7575
static const uint32_t SoundUnitSize = 212;
7676
static constexpr uint32_t BfuAmountTab[8] = {20, 28, 32, 36, 40, 44, 48, 52};
77-
static const uint32_t BitsPerBfuAmountTabIdx = 3;
78-
static const uint32_t BitsPerIDWL = 4;
79-
static const uint32_t BitsPerIDSF = 6;
77+
static const uint32_t BitsPerBfuAmountTabIdx = 3;
78+
static const uint32_t BitsPerIDWL = 4;
79+
static const uint32_t BitsPerIDSF = 6;
8080

8181
static TFloat ScaleTable[64];
8282
static TFloat SineWindow[32];
83-
uint32_t BfuToBand(uint32_t i) {
83+
static uint32_t BfuToBand(uint32_t i) {
8484
if (i < 20)
8585
return 0;
8686
if (i < 36)

src/atrac/atrac1_bitalloc.cpp

+27-25
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,29 @@ using std::cerr;
3333
using std::endl;
3434
using std::pair;
3535

36-
static const uint32_t FixedBitAllocTableLong[TAtrac1BitStreamWriter::MaxBfus] = {
36+
static const uint32_t FixedBitAllocTableLong[TAtrac1Data::MaxBfus] = {
3737
7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
3838
6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
3939
4, 4, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 0, 0, 0
4040
};
4141

42-
static const uint32_t FixedBitAllocTableShort[TAtrac1BitStreamWriter::MaxBfus] = {
42+
static const uint32_t FixedBitAllocTableShort[TAtrac1Data::MaxBfus] = {
4343
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
4444
6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
4545
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
4646
};
4747

48-
static const uint32_t BitBoostMask[TAtrac1BitStreamWriter::MaxBfus] = {
48+
static const uint32_t BitBoostMask[TAtrac1Data::MaxBfus] = {
4949
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
5050
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
5151
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
5252
};
5353

5454
TBitsBooster::TBitsBooster() {
55-
for (uint32_t i = 0; i < MaxBfus; ++i) {
55+
for (uint32_t i = 0; i < TAtrac1Data::MaxBfus; ++i) {
5656
if (BitBoostMask[i] == 0)
5757
continue;
58-
const uint32_t nBits = SpecsPerBlock[i];
58+
const uint32_t nBits = TAtrac1Data::SpecsPerBlock[i];
5959
BitsBoostMap.insert(pair<uint32_t, uint32_t>(nBits, i));
6060
}
6161
MaxBitsPerIteration = BitsBoostMap.size() ? (--BitsBoostMap.end())->first : 0;
@@ -108,13 +108,13 @@ TAtrac1SimpleBitAlloc::TAtrac1SimpleBitAlloc(ICompressedOutput* container, uint3
108108
if (ATHLong.size()) {
109109
return;
110110
}
111-
ATHLong.reserve(MaxBfus);
111+
ATHLong.reserve(TAtrac1Data::MaxBfus);
112112
auto ATHSpec = CalcATH(512, 44100);
113-
for (size_t bandNum = 0; bandNum < this->NumQMF; ++bandNum) {
114-
for (size_t blockNum = this->BlocksPerBand[bandNum]; blockNum < this->BlocksPerBand[bandNum + 1]; ++blockNum) {
115-
const size_t specNumStart = this->SpecsStartLong[blockNum];
113+
for (size_t bandNum = 0; bandNum < TAtrac1Data::NumQMF; ++bandNum) {
114+
for (size_t blockNum = TAtrac1Data::BlocksPerBand[bandNum]; blockNum < TAtrac1Data::BlocksPerBand[bandNum + 1]; ++blockNum) {
115+
const size_t specNumStart = TAtrac1Data::SpecsStartLong[blockNum];
116116
float x = 999;
117-
for (size_t line = specNumStart; line < specNumStart + this->SpecsPerBlock[blockNum]; line++) {
117+
for (size_t line = specNumStart; line < specNumStart + TAtrac1Data::SpecsPerBlock[blockNum]; line++) {
118118
x = fmin(x, ATHSpec[line]);
119119
}
120120
x = pow(10, 0.1 * x);
@@ -131,7 +131,7 @@ vector<uint32_t> TAtrac1SimpleBitAlloc::CalcBitsAllocation(const std::vector<TSc
131131
const float loudness) {
132132
vector<uint32_t> bitsPerEachBlock(bfuNum);
133133
for (size_t i = 0; i < bitsPerEachBlock.size(); ++i) {
134-
bool shortBlock = blockSize.LogCount[BfuToBand(i)];
134+
bool shortBlock = blockSize.LogCount[TAtrac1Data::BfuToBand(i)];
135135
const uint32_t fix = shortBlock ? FixedBitAllocTableShort[i] : FixedBitAllocTableLong[i];
136136
float ath = ATHLong[i] * loudness;
137137
//std::cerr << "block: " << i << " Loudness: " << loudness << " " << 10 * log10(scaledBlocks[i].MaxEnergy / ath) << std::endl;
@@ -154,14 +154,14 @@ vector<uint32_t> TAtrac1SimpleBitAlloc::CalcBitsAllocation(const std::vector<TSc
154154
uint32_t TAtrac1SimpleBitAlloc::GetMaxUsedBfuId(const vector<uint32_t>& bitsPerEachBlock) {
155155
uint32_t idx = 7;
156156
for (;;) {
157-
uint32_t bfuNum = BfuAmountTab[idx];
157+
uint32_t bfuNum = TAtrac1Data::BfuAmountTab[idx];
158158
if (bfuNum > bitsPerEachBlock.size()) {
159159
idx--;
160160
} else if (idx != 0) {
161161
assert(bfuNum == bitsPerEachBlock.size());
162162
uint32_t i = 0;
163163
while (idx && bitsPerEachBlock[bfuNum - 1 - i] == 0) {
164-
if (++i >= (BfuAmountTab[idx] - BfuAmountTab[idx-1])) {
164+
if (++i >= (TAtrac1Data::BfuAmountTab[idx] - TAtrac1Data::BfuAmountTab[idx-1])) {
165165
idx--;
166166
bfuNum -= i;
167167
i = 0;
@@ -191,13 +191,15 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
191191
bool autoBfu = !BfuIdxConst;
192192
TFloat spread = AnalizeScaleFactorSpread(scaledBlocks);
193193

194-
vector<uint32_t> bitsPerEachBlock(BfuAmountTab[bfuIdx]);
194+
vector<uint32_t> bitsPerEachBlock(TAtrac1Data::BfuAmountTab[bfuIdx]);
195195
uint32_t targetBitsPerBfus;
196196
uint32_t curBitsPerBfus;
197197
for (;;) {
198-
bitsPerEachBlock.resize(BfuAmountTab[bfuIdx]);
199-
const uint32_t bitsAvaliablePerBfus = SoundUnitSize * 8 - BitsPerBfuAmountTabIdx - 32 - 2 - 3 -
200-
bitsPerEachBlock.size() * (BitsPerIDWL + BitsPerIDSF);
198+
bitsPerEachBlock.resize(TAtrac1Data::BfuAmountTab[bfuIdx]);
199+
const uint32_t bitsAvaliablePerBfus = TAtrac1Data::SoundUnitSize * 8 -
200+
TAtrac1Data::BitsPerBfuAmountTabIdx - 32 - 2 - 3 -
201+
bitsPerEachBlock.size() * (TAtrac1Data::BitsPerIDWL + TAtrac1Data::BitsPerIDSF);
202+
201203
TFloat maxShift = 15;
202204
TFloat minShift = -3;
203205
TFloat shift = 3.0;
@@ -206,11 +208,11 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
206208

207209
bool bfuNumChanged = false;
208210
for (;;) {
209-
const vector<uint32_t>& tmpAlloc = CalcBitsAllocation(scaledBlocks, BfuAmountTab[bfuIdx],
211+
const vector<uint32_t>& tmpAlloc = CalcBitsAllocation(scaledBlocks, TAtrac1Data::BfuAmountTab[bfuIdx],
210212
spread, shift, blockSize, loudness);
211213
uint32_t bitsUsed = 0;
212214
for (size_t i = 0; i < tmpAlloc.size(); i++) {
213-
bitsUsed += SpecsPerBlock[i] * tmpAlloc[i];
215+
bitsUsed += TAtrac1Data::SpecsPerBlock[i] * tmpAlloc[i];
214216
}
215217

216218
if (bitsUsed < minBits) {
@@ -247,7 +249,7 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
247249
}
248250
ApplyBoost(&bitsPerEachBlock, curBitsPerBfus, targetBitsPerBfus);
249251
WriteBitStream(bitsPerEachBlock, scaledBlocks, bfuIdx, blockSize);
250-
return BfuAmountTab[bfuIdx];
252+
return TAtrac1Data::BfuAmountTab[bfuIdx];
251253
}
252254

253255
TAtrac1BitStreamWriter::TAtrac1BitStreamWriter(ICompressedOutput* container)
@@ -262,7 +264,7 @@ void TAtrac1BitStreamWriter::WriteBitStream(const vector<uint32_t>& bitsPerEachB
262264
const TBlockSize& blockSize) {
263265
NBitStream::TBitStream bitStream;
264266
size_t bitUsed = 0;
265-
if (bfuAmountIdx >= (1 << BitsPerBfuAmountTabIdx)) {
267+
if (bfuAmountIdx >= (1 << TAtrac1Data::BitsPerBfuAmountTabIdx)) {
266268
cerr << "Wrong bfuAmountIdx (" << bfuAmountIdx << "), frame skiped" << endl;
267269
return;
268270
}
@@ -276,8 +278,8 @@ void TAtrac1BitStreamWriter::WriteBitStream(const vector<uint32_t>& bitsPerEachB
276278
bitStream.Write(0, 2);
277279
bitUsed+=4;
278280

279-
bitStream.Write(bfuAmountIdx, BitsPerBfuAmountTabIdx);
280-
bitUsed += BitsPerBfuAmountTabIdx;
281+
bitStream.Write(bfuAmountIdx, TAtrac1Data::BitsPerBfuAmountTabIdx);
282+
bitUsed += TAtrac1Data::BitsPerBfuAmountTabIdx;
281283

282284
bitStream.Write(0, 2);
283285
bitStream.Write(0, 3);
@@ -318,8 +320,8 @@ void TAtrac1BitStreamWriter::WriteBitStream(const vector<uint32_t>& bitsPerEachB
318320
bitStream.Write(0x0, 8);
319321

320322
bitUsed+=8;
321-
if (bitUsed > SoundUnitSize * 8) {
322-
cerr << "ATRAC1 bitstream corrupted, used: " << bitUsed << " exp: " << SoundUnitSize * 8 << endl;
323+
if (bitUsed > TAtrac1Data::SoundUnitSize * 8) {
324+
cerr << "ATRAC1 bitstream corrupted, used: " << bitUsed << " exp: " << TAtrac1Data::SoundUnitSize * 8 << endl;
323325
abort();
324326
}
325327
Container->WriteFrame(bitStream.GetBytes());

src/atrac/atrac1_bitalloc.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#pragma once
2020
#include "atrac_scale.h"
2121
#include "../aea.h"
22-
#include "../atrac/atrac1.h"
2322
#include <vector>
2423
#include <map>
2524
#include <cstdint>
@@ -36,7 +35,7 @@ class IAtrac1BitAlloc {
3635
virtual uint32_t Write(const std::vector<TScaledBlock>& scaledBlocks, const TBlockSize& blockSize, float loudness) = 0;
3736
};
3837

39-
class TBitsBooster : public virtual TAtrac1Data {
38+
class TBitsBooster {
4039
std::multimap<uint32_t, uint32_t> BitsBoostMap; //bits needed -> position
4140
uint32_t MaxBitsPerIteration;
4241
uint32_t MinKey;
@@ -45,7 +44,7 @@ class TBitsBooster : public virtual TAtrac1Data {
4544
uint32_t ApplyBoost(std::vector<uint32_t>* bitsPerEachBlock, uint32_t cur, uint32_t target);
4645
};
4746

48-
class TAtrac1BitStreamWriter : public virtual TAtrac1Data {
47+
class TAtrac1BitStreamWriter {
4948
ICompressedOutput* Container;
5049
public:
5150
explicit TAtrac1BitStreamWriter(ICompressedOutput* container);

src/atrac/atrac1_dequantiser.cpp

+11-10
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ TAtrac1Dequantiser::TAtrac1Dequantiser() {
2727
}
2828

2929
void TAtrac1Dequantiser::Dequant(TBitStream* stream, const TBlockSize& bs, TFloat specs[512]) {
30-
uint32_t wordLens[MaxBfus];
31-
uint32_t idScaleFactors[MaxBfus];
32-
const uint32_t numBFUs = BfuAmountTab[stream->Read(3)];
30+
uint32_t wordLens[TAtrac1Data::MaxBfus];
31+
uint32_t idScaleFactors[TAtrac1Data::MaxBfus];
32+
const uint32_t numBFUs = TAtrac1Data::BfuAmountTab[stream->Read(3)];
3333
stream->Read(2);
3434
stream->Read(3);
3535

@@ -40,16 +40,17 @@ void TAtrac1Dequantiser::Dequant(TBitStream* stream, const TBlockSize& bs, TFloa
4040
for (uint32_t i = 0; i < numBFUs; i++) {
4141
idScaleFactors[i] = stream->Read(6);
4242
}
43-
for (uint32_t i = numBFUs; i < MaxBfus; i++) {
43+
for (uint32_t i = numBFUs; i < TAtrac1Data::MaxBfus; i++) {
4444
wordLens[i] = idScaleFactors[i] = 0;
4545
}
4646

47-
for (uint32_t bandNum = 0; bandNum < NumQMF; bandNum++) {
48-
for (uint32_t bfuNum = BlocksPerBand[bandNum]; bfuNum < BlocksPerBand[bandNum + 1]; bfuNum++) {
49-
const uint32_t numSpecs = SpecsPerBlock[bfuNum];
47+
for (uint32_t bandNum = 0; bandNum < TAtrac1Data::NumQMF; bandNum++) {
48+
for (uint32_t bfuNum = TAtrac1Data::BlocksPerBand[bandNum]; bfuNum < TAtrac1Data::BlocksPerBand[bandNum + 1]; bfuNum++) {
49+
const uint32_t numSpecs = TAtrac1Data::SpecsPerBlock[bfuNum];
5050
const uint32_t wordLen = !!wordLens[bfuNum] + wordLens[bfuNum];
51-
const TFloat scaleFactor = ScaleTable[idScaleFactors[bfuNum]];
52-
const uint32_t startPos = bs.LogCount[bandNum] ? SpecsStartShort[bfuNum] : SpecsStartLong[bfuNum];
51+
const TFloat scaleFactor = TAtrac1Data::ScaleTable[idScaleFactors[bfuNum]];
52+
const uint32_t startPos = bs.LogCount[bandNum] ?
53+
TAtrac1Data::SpecsStartShort[bfuNum] : TAtrac1Data::SpecsStartLong[bfuNum];
5354
if (wordLen) {
5455
TFloat maxQuant = 1.0 / (TFloat)((1 << (wordLen - 1)) - 1);
5556
//cout << "BFU ("<< bfuNum << ") :" << "wordLen " << wordLen << " maxQuant " << maxQuant << " scaleFactor " << scaleFactor << " id " << idScaleFactors[bfuNum] << " num Specs " << numSpecs << " short: "<< (int)bs.LogCount[bandNum] << endl;
@@ -61,7 +62,7 @@ void TAtrac1Dequantiser::Dequant(TBitStream* stream, const TBlockSize& bs, TFloa
6162
}
6263
}
6364

64-
}
65+
}
6566
}
6667

6768
} //namespace NAtrac1

src/atrac/atrac1_dequantiser.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
namespace NAtracDEnc {
2525
namespace NAtrac1 {
2626

27-
class TAtrac1Dequantiser : public TAtrac1Data {
27+
class TAtrac1Dequantiser {
2828
public:
2929
TAtrac1Dequantiser();
3030
void Dequant(NBitStream::TBitStream* stream, const TBlockSize& bs, TFloat specs[512]);

src/atrac/atrac3.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ double TAtrac3Data::ScaleTable[64] = {0};
4242
double TAtrac3Data::GainLevel[16];
4343
double TAtrac3Data::GainInterpolation[31];
4444

45+
static const TAtrac3Data Atrac3Data;
46+
4547
const TContainerParams* TAtrac3Data::GetContainerParamsForBitrate(uint32_t bitrate) {
4648
// Set default to LP2 mode
4749
if (bitrate == 0) {

src/atrac/atrac3.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class TAtrac3Data {
5454
public:
5555
static constexpr uint8_t MaxBfus = 32;
5656
static constexpr uint32_t NumSamples = 1024;
57-
//protected:
57+
5858
static const uint32_t MDCTSz = 512;
5959
static double ScaleTable[64];
6060
static double EncodeWindow[256];
@@ -248,6 +248,7 @@ class TAtrac3Data {
248248
typedef std::vector<TTonalVal> TTonalComponents;
249249
};
250250

251+
251252
struct TAtrac3EncoderSettings {
252253
TAtrac3EncoderSettings(uint32_t bitrate, bool noGainControll,
253254
bool noTonalComponents, uint8_t sourceChannels, uint32_t bfuIdxConst)

0 commit comments

Comments
 (0)