diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-03-08 02:00:34 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-03-08 02:00:34 +0300 |
commit | c0a41cd391cb29e41a6d00e419830fd235837e80 (patch) | |
tree | e52443d8f1550162246c6bfd3310d5a1906d1be0 | |
parent | f2c1a3777190d00730d0ba3986998d7c799dc0c1 (diff) | |
download | atracdenc-c0a41cd391cb29e41a6d00e419830fd235837e80.tar.gz |
do not use compile time frame size specialisation
-rw-r--r-- | src/aea.cpp | 4 | ||||
-rw-r--r-- | src/aea.h | 3 | ||||
-rw-r--r-- | src/atracdenc.cpp | 4 | ||||
-rw-r--r-- | src/compressed_io.h | 19 |
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); @@ -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; |