aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2016-03-08 02:00:34 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2016-03-08 02:00:34 +0300
commitc0a41cd391cb29e41a6d00e419830fd235837e80 (patch)
treee52443d8f1550162246c6bfd3310d5a1906d1be0
parentf2c1a3777190d00730d0ba3986998d7c799dc0c1 (diff)
downloadatracdenc-c0a41cd391cb29e41a6d00e419830fd235837e80.tar.gz
do not use compile time frame size specialisation
-rw-r--r--src/aea.cpp4
-rw-r--r--src/aea.h3
-rw-r--r--src/atracdenc.cpp4
-rw-r--r--src/compressed_io.h19
4 files changed, 22 insertions, 8 deletions
diff --git a/src/aea.cpp b/src/aea.cpp
index 7432dcc..124a227 100644
--- a/src/aea.cpp
+++ b/src/aea.cpp
@@ -73,8 +73,8 @@ std::string TAea::GetName() const {
}
std::unique_ptr<TAea::TFrame> TAea::ReadFrame() {
- std::unique_ptr<TAea::TFrame>frame(new TFrame);
- if(fread(frame.get(), frame->size(), 1, Meta.AeaFile) != 1) {
+ std::unique_ptr<TAea::TFrame>frame(new TFrame(212));
+ if(fread(frame->Get(), frame->Size(), 1, Meta.AeaFile) != 1) {
const int errnum = errno;
fclose(Meta.AeaFile);
throw TAeaIOError("Can't read AEA frame", errnum);
diff --git a/src/aea.h b/src/aea.h
index 0ca1e7a..74068de 100644
--- a/src/aea.h
+++ b/src/aea.h
@@ -26,8 +26,7 @@ public:
class TAeaFormatError {
};
-static const int AEA_FRAME_SZ = 212;
-typedef ICompressedIO<AEA_FRAME_SZ> IAtrac1IO;
+typedef ICompressedIO IAtrac1IO;
class TAea : public IAtrac1IO {
static constexpr uint32_t AeaMetaSize = 2048;
diff --git a/src/atracdenc.cpp b/src/atracdenc.cpp
index 1982ba6..6d66cf3 100644
--- a/src/atracdenc.cpp
+++ b/src/atracdenc.cpp
@@ -145,8 +145,8 @@ TPCMEngine<double>::TProcessLambda TAtrac1Processor::GetDecodeLambda() {
const uint32_t srcChannels = Aea->GetChannelNum();
for (uint32_t channel = 0; channel < srcChannels; channel++) {
std::unique_ptr<TAea::TFrame> frame(Aea->ReadFrame());
- TBitStream bitstream(&(*frame.get())[0], frame->size());
- // cout << "frame size: " << bitstream.GetBufSize() << endl;
+
+ TBitStream bitstream(frame->Get(), frame->Size());
TBlockSize mode(&bitstream);
TAtrac1Dequantiser dequantiser;
diff --git a/src/compressed_io.h b/src/compressed_io.h
index 9999f43..d8cfb11 100644
--- a/src/compressed_io.h
+++ b/src/compressed_io.h
@@ -3,10 +3,25 @@
#include <array>
#include <string>
-template<int FRAME_SZ>
class ICompressedIO {
public:
- typedef std::array<char, FRAME_SZ> TFrame;
+ class TFrame {
+ uint64_t Sz;
+ char* Data;
+ TFrame(const TFrame& src) = delete;
+ TFrame() = delete;
+ public:
+ TFrame(uint64_t sz)
+ : Sz(sz)
+ {
+ Data = new char[Sz];
+ }
+ ~TFrame() {
+ delete[] Data;
+ }
+ uint64_t Size() const { return Sz; }
+ char* Get() { return Data; }
+ };
virtual void WriteFrame(std::vector<char> data) = 0;
virtual std::unique_ptr<TFrame> ReadFrame() = 0;
virtual std::string GetName() const = 0;