summaryrefslogtreecommitdiff
path: root/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd
diff options
context:
space:
mode:
Diffstat (limited to 'src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd')
-rw-r--r--src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd b/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd
new file mode 100644
index 0000000..3141d09
--- /dev/null
+++ b/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/gif-lzw/lsbbitpacker.gd
@@ -0,0 +1,31 @@
+extends Reference
+
+
+class LSBLZWBitPacker:
+ var bit_index: int = 0
+ var stream: int = 0
+
+ var chunks: PoolByteArray = PoolByteArray([])
+
+ func put_byte():
+ chunks.append(stream & 0xff)
+ bit_index -= 8
+ stream >>= 8
+
+ func write_bits(value: int, bits_count: int) -> void:
+ value &= (1 << bits_count) - 1
+ value <<= bit_index
+ stream |= value
+ bit_index += bits_count
+ while bit_index >= 8:
+ self.put_byte()
+
+ func pack() -> PoolByteArray:
+ if bit_index != 0:
+ self.put_byte()
+ return chunks
+
+ func reset() -> void:
+ bit_index = 0
+ stream = 0
+ chunks = PoolByteArray([])