diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-07-18 00:28:51 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-07-18 00:28:51 +0300 |
commit | d831e9ebb098a585792dedd62a3c01e59c4656a2 (patch) | |
tree | 882aa49feeaf8f69b829d34ec103b7c80d57fe9b | |
parent | 91a4ae90590356b513e5f882ff81a5ca9fda961d (diff) | |
download | atracdenc-d831e9ebb098a585792dedd62a3c01e59c4656a2.tar.gz |
Compilation fixed
-rw-r--r-- | CMakeLists.txt | 12 | ||||
-rw-r--r-- | src/atrac/atrac3.h | 2 | ||||
-rw-r--r-- | src/atrac/atrac3_bitstream.cpp | 16 | ||||
-rw-r--r-- | src/atrac/atrac_psy_common.cpp | 4 | ||||
-rw-r--r-- | src/atrac3denc.cpp | 14 | ||||
-rw-r--r-- | src/atrac3denc.h | 9 | ||||
-rw-r--r-- | src/compressed_io.h | 1 | ||||
-rw-r--r-- | src/gain_processor.h | 2 | ||||
-rw-r--r-- | src/oma/liboma/src/liboma.c | 6 | ||||
-rw-r--r-- | src/transient_detector_ut.cpp | 2 |
10 files changed, 43 insertions, 25 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bce62f..6b36f06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,18 @@ endmacro(use_cxx11) use_cxx11() +macro(use_c11) + if (CMAKE_VERSION VERSION_LESS "3.1") + if (CMAKE_C_COMPILER_ID STREQUAL "GNU") + set (CMAKE_C_FLAGS "--std=gnu11 ${CMAKE_C_FLAGS}") + endif () + else () + set (CMAKE_C_STANDARD 11) + endif () +endmacro(use_c11) + +use_c11() + add_subdirectory(3rd/gtest-1.7.0) add_subdirectory(src) add_subdirectory(test) diff --git a/src/atrac/atrac3.h b/src/atrac/atrac3.h index a1e35f3..21f1e34 100644 --- a/src/atrac/atrac3.h +++ b/src/atrac/atrac3.h @@ -35,7 +35,7 @@ class TAtrac3Data { public: static constexpr uint8_t MaxBfus = 32; static constexpr uint32_t NumSamples = 1024; -protected: +//protected: static const uint32_t MDCTSz = 512; static double ScaleTable[64]; static double EncodeWindow[256]; diff --git a/src/atrac/atrac3_bitstream.cpp b/src/atrac/atrac3_bitstream.cpp index 3822a67..e3256b7 100644 --- a/src/atrac/atrac3_bitstream.cpp +++ b/src/atrac/atrac3_bitstream.cpp @@ -7,10 +7,13 @@ #include <vector> #include <cstdlib> +#include <cstring> + namespace NAtracDEnc { namespace NAtrac3 { using std::vector; +using std::memset; static const uint32_t FixedBitAllocTable[TAtrac3Data::MaxBfus] = { 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -115,8 +118,6 @@ std::pair<uint8_t, vector<uint32_t>> TAtrac3BitStreamWriter::CreateAllocation(co uint8_t numBfu = 32; vector<uint32_t> precisionPerEachBlocks(numBfu); - uint32_t targetBitsPerBfus; - uint32_t curBitsPerBfus; uint8_t mode; for (;;) { precisionPerEachBlocks.resize(numBfu); @@ -139,7 +140,6 @@ std::pair<uint8_t, vector<uint32_t>> TAtrac3BitStreamWriter::CreateAllocation(co if (consumption.second < minBits) { if (maxShift - minShift < 0.1) { precisionPerEachBlocks = tmpAlloc; - curBitsPerBfus = consumption.second; mode = consumption.first; break; } @@ -150,12 +150,10 @@ std::pair<uint8_t, vector<uint32_t>> TAtrac3BitStreamWriter::CreateAllocation(co shift += (maxShift - shift) / 2; } else { precisionPerEachBlocks = tmpAlloc; - curBitsPerBfus = consumption.second; mode = consumption.first; break; } } - targetBitsPerBfus = bitsAvaliablePerBfus; break; } @@ -342,12 +340,6 @@ uint16_t TAtrac3BitStreamWriter::EncodeTonalComponents(const std::vector<TTonalC } lastPos = k; checkPos = lastPos; - bool shouldBreakCurrentGroup = true; - for (uint16_t k = j+1; k < 16; ++k) { - if (bandFlags[k]) { - shouldBreakCurrentGroup = false; - } - } } assert(subGroupEndPos == checkPos); @@ -363,7 +355,7 @@ vector<uint32_t> TAtrac3BitStreamWriter::CalcBitsAllocation(const std::vector<TS const TFloat shift) { vector<uint32_t> bitsPerEachBlock(bfuNum); - for (int i = 0; i < bitsPerEachBlock.size(); ++i) { + for (size_t i = 0; i < bitsPerEachBlock.size(); ++i) { const uint32_t fix = FixedBitAllocTable[i]; int tmp = spread * ( (TFloat)scaledBlocks[i].ScaleFactorIndex/3.2) + (1.0 - spread) * fix - shift; if (tmp > 7) { diff --git a/src/atrac/atrac_psy_common.cpp b/src/atrac/atrac_psy_common.cpp index 44f973c..f6f3bf7 100644 --- a/src/atrac/atrac_psy_common.cpp +++ b/src/atrac/atrac_psy_common.cpp @@ -5,13 +5,13 @@ namespace NAtracDEnc { //returns 1 for tone-like, 0 - noise-like TFloat AnalizeScaleFactorSpread(const std::vector<TScaledBlock>& scaledBlocks) { TFloat s = 0.0; - for (int i = 0; i < scaledBlocks.size(); ++i) { + for (size_t i = 0; i < scaledBlocks.size(); ++i) { s += scaledBlocks[i].ScaleFactorIndex; } s /= scaledBlocks.size(); TFloat sigma = 0.0; TFloat t = 0.0; - for (int i = 0; i < scaledBlocks.size(); ++i) { + for (size_t i = 0; i < scaledBlocks.size(); ++i) { t = (scaledBlocks[i].ScaleFactorIndex - s); t *= t; sigma += t; diff --git a/src/atrac3denc.cpp b/src/atrac3denc.cpp index b0ecc48..487d79a 100644 --- a/src/atrac3denc.cpp +++ b/src/atrac3denc.cpp @@ -53,6 +53,12 @@ void TAtrac3MDCT::Mdct(TFloat specs[1024], TFloat* bands[4], TFloat maxLevels[4] } } +void TAtrac3MDCT::Mdct(TFloat specs[1024], TFloat* bands[4], TGainModulatorArray gainModulators) +{ + static TFloat dummy[4]; + Mdct(specs, bands, dummy, gainModulators); +} + void TAtrac3MDCT::Midct(TFloat specs[1024], TFloat* bands[4], TGainDemodulatorArray gainDemodulators) { for (int band = 0; band < 4; ++band) { @@ -193,7 +199,7 @@ uint32_t TAtrac3Processor::CheckLevelOverflow(const TFloat probe, uint32_t level } vector<TAtrac3Data::SubbandInfo::TGainPoint> TAtrac3Processor::FilterCurve(const vector<SubbandInfo::TGainPoint>& curve, - const int threshold) + const uint32_t threshold) { if (curve.empty()) return curve; @@ -268,7 +274,7 @@ std::vector<TFloat> TAtrac3Processor::CalcBaseLevel(const TFloat prev, const std TFloat maxRel = 1.0; bool done = false; //TODO: recheck it. It looks like we realy need to compare only prev and last point - for (int i = gain.size() - 1; i < gain.size(); ++i) { + for (size_t i = gain.size() - 1; i < gain.size(); ++i) { if (prev > gain[i] && prev / gain[i] > maxRel) { maxRel = prev / gain[i]; done = true; @@ -289,7 +295,7 @@ std::vector<TFloat> TAtrac3Processor::CalcBaseLevel(const TFloat prev, const std baseLine[baseLine.size() - 1] = val1; TFloat a = (baseLine[baseLine.size() - 1] - baseLine[0]) / baseLine.size(); - for (int i = 1; i < baseLine.size() - 1; i++) { + for (size_t i = 1; i < baseLine.size() - 1; i++) { baseLine[i] = i * a + baseLine[0]; } return baseLine; @@ -369,7 +375,7 @@ TPCMEngine<TFloat>::TProcessLambda TAtrac3Processor::GetEncodeLambda() vector<TFloat> specs(1024); TFloat src[NumSamples]; - for (int i = 0; i < NumSamples; ++i) { + for (size_t i = 0; i < NumSamples; ++i) { src[i] = data[meta.Channels == 1 ? i : (i * 2 + channel)] / 4.0; //no mono mode in atrac3. //TODO we can TFloat frame after encoding } diff --git a/src/atrac3denc.h b/src/atrac3denc.h index 4b0980c..586a467 100644 --- a/src/atrac3denc.h +++ b/src/atrac3denc.h @@ -16,7 +16,7 @@ #include <array> namespace NAtracDEnc { -class TAtrac3MDCT : public virtual NAtrac3::TAtrac3Data { +class TAtrac3MDCT : public NAtrac3::TAtrac3Data { NMDCT::TMDCT<512> Mdct512; NMDCT::TMIDCT<512> Midct512; public: @@ -33,6 +33,9 @@ public: void Mdct(TFloat specs[1024], TFloat* bands[4], TFloat maxLevels[4], + TGainModulatorArray gainModulators); + void Mdct(TFloat specs[1024], + TFloat* bands[4], TGainModulatorArray gainModulators = TGainModulatorArray()); void Midct(TFloat specs[1024], TFloat* bands[4], @@ -44,7 +47,7 @@ protected: //returns threshhold typedef std::function<float(const TFloat* p, uint16_t len)> TTonalDetector; -class TAtrac3Processor : public IProcessor<TFloat>, public TAtrac3MDCT, public virtual NAtrac3::TAtrac3Data { +class TAtrac3Processor : public IProcessor<TFloat>, public TAtrac3MDCT { TCompressedIOPtr Oma; const NAtrac3::TAtrac3EncoderSettings Params; TFloat PcmBuffer[2][4][256 + 256]; //2 channel, 4 band, 256 sample + 256 for overlap buffer @@ -62,7 +65,7 @@ public: #endif uint32_t CheckLevelOverflow(TFloat max, uint32_t levelIdx); std::vector<SubbandInfo::TGainPoint> FilterCurve(const std::vector<SubbandInfo::TGainPoint>& curve, - const int threshold); + uint32_t threshold); TFloat LimitRel(TFloat x); std::vector<TFloat> CalcBaseLevel(TFloat prev, const std::vector<TFloat>& gain); TAtrac3Data::SubbandInfo CreateSubbandInfo(TFloat* in[4], uint32_t channel, TTransientDetector* transientDetector); diff --git a/src/compressed_io.h b/src/compressed_io.h index 8b6a235..cc45a7f 100644 --- a/src/compressed_io.h +++ b/src/compressed_io.h @@ -2,6 +2,7 @@ #include <vector> #include <array> #include <string> +#include <memory> class ICompressedIO { public: diff --git a/src/gain_processor.h b/src/gain_processor.h index 0fa9728..02c7206 100644 --- a/src/gain_processor.h +++ b/src/gain_processor.h @@ -3,7 +3,7 @@ #include "config.h" template<class T> -class TGainProcessor : public virtual T { +class TGainProcessor : public T { public: typedef std::function<void(TFloat* out, TFloat* cur, TFloat* prev)> TGainDemodulator; diff --git a/src/oma/liboma/src/liboma.c b/src/oma/liboma/src/liboma.c index 42a5601..50297d0 100644 --- a/src/oma/liboma/src/liboma.c +++ b/src/oma/liboma/src/liboma.c @@ -3,9 +3,14 @@ #include <stdio.h> #include <stdlib.h> +#include <stdint.h> #include <string.h> #include <assert.h> +//to use htonl +//TODO: rewrite +#include <arpa/inet.h> + static const int OMA_HEADER_SIZE = 96; static const int liboma_samplerates[8] = { 32000, 44100, 48000, 88200, 96000, 0 }; static const char* codec_name[6] = { "ATRAC3", "ATRAC3PLUS", "MPEG1LAYER3", "LPCM", "", "OMAC_ID_WMA" }; @@ -92,7 +97,6 @@ static int oma_write_atrac3_header(uint32_t *params, oma_info_t *info) { static int oma_read_atrac3p_header(uint32_t params, oma_info_t* info) { const int channel_id = (params >> 10) & 7; if (channel_id == 0) { - fprintf(stderr, ""); return -1; } const int samplerate = liboma_samplerates[(params >> 13) & 0x7]; diff --git a/src/transient_detector_ut.cpp b/src/transient_detector_ut.cpp index 3627d7d..5c018c3 100644 --- a/src/transient_detector_ut.cpp +++ b/src/transient_detector_ut.cpp @@ -20,7 +20,7 @@ TEST(AnalyzeGain, AnalyzeGainSimple) { in[i] = 0.5; } } - vector<TFloat> res = AnalyzeGain(in, 256, 32); + vector<TFloat> res = AnalyzeGain(in, 256, 32, false); EXPECT_EQ(res.size(), 32); // for (TFloat v : res) |