aboutsummaryrefslogtreecommitdiffstats
path: root/src/atrac3denc.h
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2016-06-19 02:58:23 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2016-06-19 03:31:55 +0300
commit1151d5831f19a9f24dd0c545a4968606712a62d2 (patch)
treec978c1b9a3fc86fef531dd412fe6b7668b7c0567 /src/atrac3denc.h
parent8d65a0bd0774e03b3d10354e15f2f3361a2ce26a (diff)
downloadatracdenc-1151d5831f19a9f24dd0c545a4968606712a62d2.tar.gz
some improvements of ATRAC3 implementation:atrac3
- simple (ATRAC1 like) psychoacoustic added - possibility to encode tonal components - simple tonal component extractor - refactoring
Diffstat (limited to 'src/atrac3denc.h')
-rw-r--r--src/atrac3denc.h46
1 files changed, 35 insertions, 11 deletions
diff --git a/src/atrac3denc.h b/src/atrac3denc.h
index 149f1c6..5984728 100644
--- a/src/atrac3denc.h
+++ b/src/atrac3denc.h
@@ -1,10 +1,13 @@
#pragma once
+#include "config.h"
#include "pcmengin.h"
#include "oma.h"
#include "aea.h"
#include "atrac/atrac3.h"
#include "atrac/atrac3_qmf.h"
+#include "transient_detector.h"
+#include "atrac/atrac3_bitstream.h"
#include "atrac/atrac_scale.h"
#include "mdct/mdct.h"
#include "gain_processor.h"
@@ -13,33 +16,54 @@
#include <array>
namespace NAtracDEnc {
-class TAtrac3MDCT : public virtual TAtrac3Data {
+class TAtrac3MDCT : public virtual NAtrac3::TAtrac3Data {
NMDCT::TMDCT<512> Mdct512;
NMDCT::TMIDCT<512> Midct512;
public:
typedef TGainProcessor<TAtrac3Data> TAtrac3GainProcessor;
TAtrac3GainProcessor GainProcessor;
+ TAtrac3MDCT()
+ : Mdct512(2)
+ {}
public:
using TGainModulator = TAtrac3GainProcessor::TGainModulator;
using TGainDemodulator = TAtrac3GainProcessor::TGainDemodulator;
typedef std::array<TGainDemodulator, 4> TGainDemodulatorArray;
typedef std::array<TGainModulator, 4> TGainModulatorArray;
- void Mdct(double specs[1024], double* bands[4], TGainModulatorArray gainModulators = TGainModulatorArray());
- void Midct(double specs[1024], double* bands[4], TGainDemodulatorArray gainDemodulators = TGainDemodulatorArray());
+ void Mdct(TFloat specs[1024], TFloat* bands[4], TGainModulatorArray gainModulators = TGainModulatorArray());
+ void Midct(TFloat specs[1024], TFloat* bands[4], TGainDemodulatorArray gainDemodulators = TGainDemodulatorArray());
protected:
TAtrac3MDCT::TGainModulatorArray MakeGainModulatorArray(const TAtrac3Data::SubbandInfo& si);
};
-class TAtrac3Processor : public IProcessor<double>, public TAtrac3MDCT, public virtual TAtrac3Data {
- TAeaPtr Oma;
- const TContainerParams Params;
- double PcmBuffer[2][4][256 + 256]; //2 channel, 4 band, 256 sample + 256 for overlap buffer
- Atrac3SplitFilterBank<double> SplitFilterBank[2];
+//returns threshhold
+typedef std::function<float(const TFloat* p, uint16_t len)> TTonalDetector;
+
+class TAtrac3Processor : public IProcessor<TFloat>, public TAtrac3MDCT, public virtual NAtrac3::TAtrac3Data {
+ TCompressedIOPtr Oma;
+ const NAtrac3::TAtrac3EncoderSettings Params;
+ TFloat PcmBuffer[2][4][256 + 256]; //2 channel, 4 band, 256 sample + 256 for overlap buffer
+ Atrac3SplitFilterBank<TFloat> SplitFilterBank[2];
TScaler<TAtrac3Data> Scaler;
+ std::vector<TTransientDetector> TransientDetectors;
+ typedef std::array<uint8_t, NumSpecs> TonalComponentMask;
+#ifdef ATRAC_UT_PUBLIC
+public:
+#endif
+ uint32_t CheckLevelOverflow(const std::vector<TFloat>& gain, const TAtrac3Data::SubbandInfo::TGainPoint& point);
+ std::vector<SubbandInfo::TGainPoint> FilterCurve(const std::vector<TFloat>& gain,
+ const std::vector<SubbandInfo::TGainPoint>& curve,
+ const int threshold);
+ TFloat LimitRel(TFloat x);
+ TAtrac3Data::SubbandInfo CreateSubbandInfo(TFloat* in[4], uint32_t channel, TTransientDetector* transientDetector);
+ TonalComponentMask AnalyzeTonalComponent(TFloat* specs);
+ TTonalComponents ExtractTonalComponents(TFloat* specs, TTonalDetector fn);
+
+ std::vector<NAtrac3::TTonalComponent> MapTonalComponents(const TTonalComponents& tonalComponents);
public:
- TAtrac3Processor(TAeaPtr&& oma, const TContainerParams& params);
+ TAtrac3Processor(TCompressedIOPtr&& oma, NAtrac3::TAtrac3EncoderSettings&& encoderSettings);
~TAtrac3Processor();
- TPCMEngine<double>::TProcessLambda GetDecodeLambda() override;
- TPCMEngine<double>::TProcessLambda GetEncodeLambda() override;
+ TPCMEngine<TFloat>::TProcessLambda GetDecodeLambda() override;
+ TPCMEngine<TFloat>::TProcessLambda GetEncodeLambda() override;
};
}