aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2016-07-18 00:28:51 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2016-07-18 00:28:51 +0300
commitd831e9ebb098a585792dedd62a3c01e59c4656a2 (patch)
tree882aa49feeaf8f69b829d34ec103b7c80d57fe9b
parent91a4ae90590356b513e5f882ff81a5ca9fda961d (diff)
downloadatracdenc-d831e9ebb098a585792dedd62a3c01e59c4656a2.tar.gz
Compilation fixed
-rw-r--r--CMakeLists.txt12
-rw-r--r--src/atrac/atrac3.h2
-rw-r--r--src/atrac/atrac3_bitstream.cpp16
-rw-r--r--src/atrac/atrac_psy_common.cpp4
-rw-r--r--src/atrac3denc.cpp14
-rw-r--r--src/atrac3denc.h9
-rw-r--r--src/compressed_io.h1
-rw-r--r--src/gain_processor.h2
-rw-r--r--src/oma/liboma/src/liboma.c6
-rw-r--r--src/transient_detector_ut.cpp2
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)