aboutsummaryrefslogtreecommitdiffstats
path: root/src/atrac/atrac1_bitalloc.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2015-12-08 01:55:41 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2015-12-08 01:55:41 +0300
commit8b704f5ce2d0666b5b6dc3fb6881b1e6b2dff1bd (patch)
tree359d9493c51d28d6ef8de880c6befe324fb9682b /src/atrac/atrac1_bitalloc.cpp
parentac9a328f40be52aec6665d021d1a42a0d5258d7b (diff)
downloadatracdenc-8b704f5ce2d0666b5b6dc3fb6881b1e6b2dff1bd.tar.gz
support of short window for encoding (without transient detection)
Diffstat (limited to 'src/atrac/atrac1_bitalloc.cpp')
-rw-r--r--src/atrac/atrac1_bitalloc.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/atrac/atrac1_bitalloc.cpp b/src/atrac/atrac1_bitalloc.cpp
index 2066cbf..971e392 100644
--- a/src/atrac/atrac1_bitalloc.cpp
+++ b/src/atrac/atrac1_bitalloc.cpp
@@ -144,7 +144,7 @@ uint32_t TAtrac1SimpleBitAlloc::CheckBfuUsage(bool* changed, uint32_t curBfuId,
}
return curBfuId;
}
-uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlocks) {
+uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlocks, const TBlockSize& blockSize) {
uint32_t bfuIdx = BfuIdxConst ? BfuIdxConst - 1 : 7;
bool autoBfu = !BfuIdxConst;
double spread = AnalizeSpread(scaledBlocks);
@@ -155,8 +155,8 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
for (;;) {
bitsPerEachBlock.resize(BfuAmountTab[bfuIdx]);
const uint32_t bitsAvaliablePerBfus = SoundUnitSize * 8 - BitsPerBfuAmountTabIdx - 32 - 2 - 3 - bitsPerEachBlock.size() * (BitsPerIDWL + BitsPerIDSF);
- double maxShift = 9;
- double minShift = -2;
+ double maxShift = 15;
+ double minShift = -3;
double shift = 3.0;
const uint32_t maxBits = bitsAvaliablePerBfus;
const uint32_t minBits = bitsAvaliablePerBfus - 110;
@@ -169,7 +169,7 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
bitsUsed += SpecsPerBlock[i] * tmpAlloc[i];
}
- //std::cout << spread << " bitsUsed: " << bitsUsed << " min " << minBits << " max " << maxBits << endl;
+ //std::cout << spread << " bitsUsed: " << bitsUsed << " min " << minBits << " max " << maxBits << " " << maxShift << " " << minShift << " " << endl;
if (bitsUsed < minBits) {
if (maxShift - minShift < 0.1) {
if (autoBfu) {
@@ -203,24 +203,24 @@ uint32_t TAtrac1SimpleBitAlloc::Write(const std::vector<TScaledBlock>& scaledBlo
}
}
ApplyBoost(&bitsPerEachBlock, curBitsPerBfus, targetBitsPerBfus);
- WriteBitStream(bitsPerEachBlock, scaledBlocks, bfuIdx);
+ WriteBitStream(bitsPerEachBlock, scaledBlocks, bfuIdx, blockSize);
return BfuAmountTab[bfuIdx];
}
-void TAtrac1BitStreamWriter::WriteBitStream(const vector<uint32_t>& bitsPerEachBlock, const std::vector<TScaledBlock>& scaledBlocks, uint32_t bfuAmountIdx) {
+void TAtrac1BitStreamWriter::WriteBitStream(const vector<uint32_t>& bitsPerEachBlock, const std::vector<TScaledBlock>& scaledBlocks, uint32_t bfuAmountIdx, const TBlockSize& blockSize) {
NBitStream::TBitStream bitStream;
int bitUsed = 0;
if (bfuAmountIdx >= (1 << BitsPerBfuAmountTabIdx)) {
cerr << "Wrong bfuAmountIdx (" << bfuAmountIdx << "), frame skiped" << endl;
return;
}
- bitStream.Write(0x2, 2);
+ bitStream.Write(0x2 - blockSize.LogCount[0], 2);
bitUsed+=2;
- bitStream.Write(0x2, 2);
+ bitStream.Write(0x2 - blockSize.LogCount[1], 2);
bitUsed+=2;
- bitStream.Write(0x3, 2);
+ bitStream.Write(0x3 - blockSize.LogCount[2], 2);
bitStream.Write(0, 2);
bitUsed+=4;