Handmade Hero»Episode Guide
Simple RLE Compression
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:18Set the stage for the day
0:18Set the stage for the day
0:18Set the stage for the day
1:10Blackboard: RLE vs LZ
1:10Blackboard: RLE vs LZ
1:10Blackboard: RLE vs LZ
1:53Blackboard: On exploiting the properties of the data we want to compress
1:53Blackboard: On exploiting the properties of the data we want to compress
1:53Blackboard: On exploiting the properties of the data we want to compress
5:56Blackboard: Run-length Encoding
5:56Blackboard: Run-length Encoding
5:56Blackboard: Run-length Encoding
8:24Blackboard: Distinguishing between "literals" and "runs"
8:24Blackboard: Distinguishing between "literals" and "runs"
8:24Blackboard: Distinguishing between "literals" and "runs"
9:59Blackboard: Various formats developed by Electronic Arts: IFF, ILBM, PCX
9:59Blackboard: Various formats developed by Electronic Arts: IFF, ILBM, PCX
9:59Blackboard: Various formats developed by Electronic Arts: IFF, ILBM, PCX
11:53Blackboard: LZ (Lempel-Ziv) as a more heavy-duty form of compression
11:53Blackboard: LZ (Lempel-Ziv) as a more heavy-duty form of compression
11:53Blackboard: LZ (Lempel-Ziv) as a more heavy-duty form of compression
16:03Blackboard: Encoding an additional offset in LZ
16:03Blackboard: Encoding an additional offset in LZ
16:03Blackboard: Encoding an additional offset in LZ
20:07Blackboard: How LZ gives you RLE almost for free
20:07Blackboard: How LZ gives you RLE almost for free
20:07Blackboard: How LZ gives you RLE almost for free
25:50Blackboard: Replicating blocks
25:50Blackboard: Replicating blocks
25:50Blackboard: Replicating blocks
32:28Blackboard: Why LZ schemes use relative positioning, and choosing how many bits to allocate for the look-back distance
32:28Blackboard: Why LZ schemes use relative positioning, and choosing how many bits to allocate for the look-back distance
32:28Blackboard: Why LZ schemes use relative positioning, and choosing how many bits to allocate for the look-back distance
39:06Blackboard: LZ encoding
39:06Blackboard: LZ encoding
39:06Blackboard: LZ encoding
44:50Blackboard: Keeping a hash table and information of overlapping runs for the back catalogue
44:50Blackboard: Keeping a hash table and information of overlapping runs for the back catalogue
44:50Blackboard: Keeping a hash table and information of overlapping runs for the back catalogue
46:48Blackboard: Entropy encoding and backends, e.g. Huffman, Arithmetic, rANS / tANS
46:48Blackboard: Entropy encoding and backends, e.g. Huffman, Arithmetic, rANS / tANS
46:48Blackboard: Entropy encoding and backends, e.g. Huffman, Arithmetic, rANS / tANS
49:52Blackboard: Charting the frequency of values
49:52Blackboard: Charting the frequency of values
49:52Blackboard: Charting the frequency of values
53:10Blackboard: Huffman
53:10Blackboard: Huffman
53:10Blackboard: Huffman
1:01:21Blackboard: On the inefficiency, size-wise, of Huffman compared to Arithmetic
1:01:21Blackboard: On the inefficiency, size-wise, of Huffman compared to Arithmetic
1:01:21Blackboard: On the inefficiency, size-wise, of Huffman compared to Arithmetic
1:02:32"Please take it with a grain of salt, or even a cube of salt"α
1:02:32"Please take it with a grain of salt, or even a cube of salt"α
1:02:32"Please take it with a grain of salt, or even a cube of salt"α
1:03:27Blackboard: rANS / tANS1
1:03:27Blackboard: rANS / tANS1
1:03:27Blackboard: rANS / tANS1
1:06:43Determine to compress our art assets
1:06:43Determine to compress our art assets
1:06:43Determine to compress our art assets
1:08:16Save test_scene_layer_00.bmp as a png and compress it with 7zip for comparison
1:08:16Save test_scene_layer_00.bmp as a png and compress it with 7zip for comparison
1:08:16Save test_scene_layer_00.bmp as a png and compress it with 7zip for comparison
1:11:09simple_compressor.cpp: Setup the code to make an actual command-line compressor
1:11:09simple_compressor.cpp: Setup the code to make an actual command-line compressor
1:11:09simple_compressor.cpp: Setup the code to make an actual command-line compressor
1:14:56Run the compressor and view the documentation
1:14:56Run the compressor and view the documentation
1:14:56Run the compressor and view the documentation
1:15:16simple_compressor.cpp: Parse the Args
1:15:16simple_compressor.cpp: Parse the Args
1:15:16simple_compressor.cpp: Parse the Args
1:17:46simple_compressor.cpp: Introduce file_contents struct for ReadEntireFileIntoMemory() to return
1:17:46simple_compressor.cpp: Introduce file_contents struct for ReadEntireFileIntoMemory() to return
1:17:46simple_compressor.cpp: Introduce file_contents struct for ReadEntireFileIntoMemory() to return
1:20:39simple_compressor.cpp: Set up the call sites for Compress() and Decompress()
1:20:39simple_compressor.cpp: Set up the call sites for Compress() and Decompress()
1:20:39simple_compressor.cpp: Set up the call sites for Compress() and Decompress()
1:28:53simple_compressor.cpp: Introduce Compress(), Decompress() and Copy()
1:28:53simple_compressor.cpp: Introduce Compress(), Decompress() and Copy()
1:28:53simple_compressor.cpp: Introduce Compress(), Decompress() and Copy()
1:32:38Run the compressor on test1.hha
1:32:38Run the compressor on test1.hha
1:32:38Run the compressor on test1.hha
1:35:00simple_compressor.cpp: Introduce RLECompress() and RLEDecompress()
1:35:00simple_compressor.cpp: Introduce RLECompress() and RLEDecompress()
1:35:00simple_compressor.cpp: Introduce RLECompress() and RLEDecompress()
1:43:01simple_compressor.cpp: Implement RLEDecompress()
1:43:01simple_compressor.cpp: Implement RLEDecompress()
1:43:01simple_compressor.cpp: Implement RLEDecompress()
1:45:32simple_compressor.cpp: Enable RLECompress() to encode a run
1:45:32simple_compressor.cpp: Enable RLECompress() to encode a run
1:45:32simple_compressor.cpp: Enable RLECompress() to encode a run
1:51:33Run the compressor in the debugger
1:51:33Run the compressor in the debugger
1:51:33Run the compressor in the debugger
1:53:18simple_compressor.cpp: Make RLECompress() and RLEDecompress() more symmetric
1:53:18simple_compressor.cpp: Make RLECompress() and RLEDecompress() more symmetric
1:53:18simple_compressor.cpp: Make RLECompress() and RLEDecompress() more symmetric
1:54:59Step in to RLECompress() and inspect the values
1:54:59Step in to RLECompress() and inspect the values
1:54:59Step in to RLECompress() and inspect the values
1:58:20simple_compressor.cpp: Make RLECompress() correctly loop to the MAX_RUN_COUNT and compute the OutSize
1:58:20simple_compressor.cpp: Make RLECompress() correctly loop to the MAX_RUN_COUNT and compute the OutSize
1:58:20simple_compressor.cpp: Make RLECompress() correctly loop to the MAX_RUN_COUNT and compute the OutSize
1:59:41Run the compressor on test1.hha to find that it has output exactly the same size
1:59:41Run the compressor on test1.hha to find that it has output exactly the same size
1:59:41Run the compressor on test1.hha to find that it has output exactly the same size
2:01:08simple_compressor.cpp: Make Compress() use the MaxOutSize value, run the compressor on test1.hha and find that the output is much smaller
2:01:08simple_compressor.cpp: Make Compress() use the MaxOutSize value, run the compressor on test1.hha and find that the output is much smaller
2:01:08simple_compressor.cpp: Make Compress() use the MaxOutSize value, run the compressor on test1.hha and find that the output is much smaller
2:02:15Run the decompressor on test1.scp to find that it doesn't work at all
2:02:15Run the decompressor on test1.scp to find that it doesn't work at all
2:02:15Run the decompressor on test1.scp to find that it doesn't work at all
2:02:56simple_compressor.cpp: Correctly store the InFile.FileSize
2:02:56simple_compressor.cpp: Correctly store the InFile.FileSize
2:02:56simple_compressor.cpp: Correctly store the InFile.FileSize
2:05:02Step in to the compressor and inspect what it does
2:05:02Step in to the compressor and inspect what it does
2:05:02Step in to the compressor and inspect what it does
2:07:04Step in to the decompressor to find that it works fine, and diff the files it produced
2:07:04Step in to the decompressor to find that it works fine, and diff the files it produced
2:07:04Step in to the decompressor to find that it works fine, and diff the files it produced
2:08:39Run the compressor on intro_art.hha to see how it fares with that
2:08:39Run the compressor on intro_art.hha to see how it fares with that
2:08:39Run the compressor on intro_art.hha to see how it fares with that
2:10:34Q&A
🗩
2:10:34Q&A
🗩
2:10:34Q&A
🗩
2:11:21Compress test1.hha and intro_art.hha with 7zip for comparison
2:11:21Compress test1.hha and intro_art.hha with 7zip for comparison
2:11:21Compress test1.hha and intro_art.hha with 7zip for comparison
2:12:38Miblo Awesome stuff! I hadn't been making the distinction between "literals" and "runs" in my thing. My test stuff has been just 0s and 1s, mind, so I was just storing the first Token and then the Counter values
🗪
2:12:38Miblo Awesome stuff! I hadn't been making the distinction between "literals" and "runs" in my thing. My test stuff has been just 0s and 1s, mind, so I was just storing the first Token and then the Counter values
🗪
2:12:38Miblo Awesome stuff! I hadn't been making the distinction between "literals" and "runs" in my thing. My test stuff has been just 0s and 1s, mind, so I was just storing the first Token and then the Counter values
🗪
2:14:14magik603 Tomorrow you will show us what again?
🗪
2:14:14magik603 Tomorrow you will show us what again?
🗪
2:14:14magik603 Tomorrow you will show us what again?
🗪
2:15:36ttbjm Are hardware image decompressors still a thing?
🗪
2:15:36ttbjm Are hardware image decompressors still a thing?
🗪
2:15:36ttbjm Are hardware image decompressors still a thing?
🗪
2:22:54Conclude
🗩
2:22:54Conclude
🗩
2:22:54Conclude
🗩