As I mentioned in the previous post, I wanted to look at this codec because it might be related to the whole XVD
family. It turned out to be completely different even if it’s from the same company and bit reading is done in the same way (which is a very minor thing).
So the codec itself is a delta codec that reminds me of BMV
from Discworld Noir a lot. Essentially it just reads opcodes using static codebook and performs some action depending on them:
- repeat previous pixel value 1/2/4 times or the fixed amount transmitted in the frame header;
- skip 1/2/4 pixels or the fixed amount of pixels transmitted in the frame header;
- copy top/bottom/right/left neighbour pixel;
- set pixel to the average of top/bottom and right/left neighbour pixels;
- or decode pixel difference (for all three components at once) and add it to the previous value.
The main problem REing it was figuring out the decoding loop since for performance reasons decoder tries to group opcodes and handle them at once thus creating 200-something cases to handle. Plus those opcode handlers are just pieces of code that work on data in registers and jump to the function that dispatches next opcode. Of course it does not decompile properly but the amount of instructions is small anyway and it’s the same code repeated over and over again.
Maybe I’ll even write a decoder for it sometime later.
[…] enough now Alaris VGPixel looks more related since VT codec has similar mode of compression. Additionally both the official […]