diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2025-04-19 14:07:51 +0200 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2025-04-19 14:59:17 +0200 |
commit | e4de6009fbe23bb19a0f8135250ac2b514e0db3b (patch) | |
tree | e5aeec735503d4f701477417a009ba9036ba8355 /src/lib/bs_encode/encode.h | |
parent | 0696e23b2beef4a5525acd5a7013c7d1f3fd2f8e (diff) | |
download | atracdenc-e4de6009fbe23bb19a0f8135250ac2b514e0db3b.tar.gz |
Minimal implementation of AT3P bitstream for residual signal.
* Write scale factor index, wordlen, codetable directly (without VLC)
* Use huffman tables for mantisas
* Some draft of the library to simplify bit allocation code
* Tonal encoding teporary disabled
* Allow c++14
Diffstat (limited to 'src/lib/bs_encode/encode.h')
-rw-r--r-- | src/lib/bs_encode/encode.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/lib/bs_encode/encode.h b/src/lib/bs_encode/encode.h new file mode 100644 index 0000000..9671e10 --- /dev/null +++ b/src/lib/bs_encode/encode.h @@ -0,0 +1,67 @@ +/* + * This file is part of AtracDEnc. + * + * AtracDEnc is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * AtracDEnc is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with AtracDEnc; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include <memory> +#include <vector> +#include <functional> + +namespace NBitStream { +class TBitStream; +} + +namespace NAtracDEnc { + +class TBitAllocHandler { +public: + void Start(size_t targetBits, float minLambda, float maxLambda) noexcept; + float Continue() noexcept; + bool Check(size_t gitBits) const noexcept; + void Submit(size_t gotBits) noexcept; +}; + +class IBitStreamPartEncoder { +public: + using TPtr = std::unique_ptr<IBitStreamPartEncoder>; + enum class EStatus { + Ok, // Ok, go to the next stage + Repeat, // Repeat from first stage + }; + + virtual ~IBitStreamPartEncoder() = default; + virtual EStatus Encode(void* frameData, TBitAllocHandler& ba) = 0; + virtual void Dump(NBitStream::TBitStream& bs) = 0; + +}; + +class TBitStreamEncoder { +public: + class TImpl; + explicit TBitStreamEncoder(std::vector<IBitStreamPartEncoder::TPtr>&& encoders); + ~TBitStreamEncoder(); + + void Do(void* frameData, NBitStream::TBitStream& bs); + TBitStreamEncoder(const TBitStreamEncoder&) = delete; + TBitStreamEncoder& operator=(const TBitStreamEncoder&) = delete; +private: + std::vector<IBitStreamPartEncoder::TPtr> Encoders; + TImpl* Impl; +}; + +} |