aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/atrac1denc.cpp10
-rw-r--r--src/atrac1denc.h5
2 files changed, 10 insertions, 5 deletions
diff --git a/src/atrac1denc.cpp b/src/atrac1denc.cpp
index a6e2d45..5901286 100644
--- a/src/atrac1denc.cpp
+++ b/src/atrac1denc.cpp
@@ -166,10 +166,10 @@ TPCMEngine::TProcessLambda TAtrac1Decoder::GetLambda() {
TPCMEngine::TProcessLambda TAtrac1Encoder::GetLambda() {
const uint32_t srcChannels = Aea->GetChannelNum();
- vector<IAtrac1BitAlloc*> bitAlloc(srcChannels);
- for (auto& x : bitAlloc) {
- x = new TAtrac1SimpleBitAlloc(Aea.get(), Settings.GetBfuIdxConst(), Settings.GetFastBfuNumSearch());
+ BitAllocs.reserve(srcChannels);
+ for (uint32_t ch = 0; ch < srcChannels; ch++) {
+ BitAllocs.emplace_back(new TAtrac1SimpleBitAlloc(Aea.get(), Settings.GetBfuIdxConst(), Settings.GetFastBfuNumSearch()));
}
struct TChannelData {
@@ -185,7 +185,7 @@ TPCMEngine::TProcessLambda TAtrac1Encoder::GetLambda() {
using TData = vector<TChannelData>;
auto buf = std::make_shared<TData>(srcChannels);
- return [this, srcChannels, bitAlloc, buf](float* data, const TPCMEngine::ProcessMeta& /*meta*/) {
+ return [this, srcChannels, buf](float* data, const TPCMEngine::ProcessMeta& /*meta*/) {
TAtrac1Data::TBlockSizeMod blockSz[2];
uint32_t windowMasks[2] = {0};
@@ -234,7 +234,7 @@ TPCMEngine::TProcessLambda TAtrac1Encoder::GetLambda() {
}
for (uint32_t channel = 0; channel < srcChannels; channel++) {
- bitAlloc[channel]->Write(Scaler.ScaleFrame((*buf)[channel].Specs, blockSz[channel]), blockSz[channel], Loudness / LoudFactor);
+ BitAllocs[channel]->Write(Scaler.ScaleFrame((*buf)[channel].Specs, blockSz[channel]), blockSz[channel], Loudness / LoudFactor);
}
return TPCMEngine::EProcessResult::PROCESSED;
diff --git a/src/atrac1denc.h b/src/atrac1denc.h
index 525596e..e261dec 100644
--- a/src/atrac1denc.h
+++ b/src/atrac1denc.h
@@ -27,9 +27,13 @@
#include <assert.h>
#include <vector>
+#include <memory>
namespace NAtracDEnc {
+namespace NAtrac1 {
+ class IAtrac1BitAlloc;
+}
class TAtrac1MDCT {
NMDCT::TMDCT<512> Mdct512;
@@ -62,6 +66,7 @@ class TAtrac1Encoder : public IProcessor, public TAtrac1MDCT {
Atrac1AnalysisFilterBank<float> AnalysisFilterBank[2];
const std::vector<float> LoudnessCurve;
+ std::vector<std::unique_ptr<NAtrac1::IAtrac1BitAlloc>> BitAllocs;
class TTransientDetectors {
std::vector<TTransientDetector> transientDetectorLow;