diff options
| author | JF <jf@codingfield.com> | 2021-03-07 20:29:59 (GMT) |
|---|---|---|
| committer | Gitea <gitea@fake.local> | 2021-03-07 20:29:59 (GMT) |
| commit | 5cd4b36d6bbf22095e0ff54aa3773febc6e1f22e (patch) | |
| tree | eac51e42451d827c30fd6572b377c5bbf03f0e24 /src/components/rle/RleDecoder.h | |
| parent | b89c92b71d82b4e3bf612519a5cf9b2f12886168 (diff) | |
| parent | e63596b291f973cdeb01cd0ac276861895bd4489 (diff) | |
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/components/rle/RleDecoder.h')
| -rw-r--r-- | src/components/rle/RleDecoder.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/components/rle/RleDecoder.h b/src/components/rle/RleDecoder.h new file mode 100644 index 0000000..0f607fb --- /dev/null +++ b/src/components/rle/RleDecoder.h @@ -0,0 +1,33 @@ +#pragma once + +#include <cstdint> +#include <cstddef> + +namespace Pinetime { + namespace Tools { + /* 1-bit RLE decoder. Provide the encoded buffer to the constructor and then call DecodeNext() by + * specifying the output (decoded) buffer and the maximum number of bytes this buffer can handle. + * + * Code from https://github.com/daniel-thompson/wasp-bootloader by Daniel Thompson released under the MIT license. + */ + class RleDecoder { + public: + RleDecoder(const uint8_t* buffer, size_t size); + RleDecoder(const uint8_t* buffer, size_t size, uint16_t foregroundColor, uint16_t backgroundColor); + + void DecodeNext(uint8_t* output, size_t maxBytes); + + private: + const uint8_t* buffer; + size_t size; + + int encodedBufferIndex = 0; + int y = 0; + uint16_t bp = 0; + uint16_t foregroundColor = 0xffff; + uint16_t backgroundColor = 0; + uint16_t color = backgroundColor; + int processedCount = 0; + }; + } +} |
