To my best knowledge, the patent on the QM-coder used in JPEG has expired. I've read this post recently and started to put some arithmetic decoding into C code. After some crunching days of development this is the result: sample image from that post is on one screen - the decoded on the other one.

Decoder code was based on my JPEG81 coefficient decoder.

Arithmetic decoding


The question is how to store 16-bit signed integers with less bits?

For example 13dec:

0000000000001101    = 13

Dividing into parts:

SIGN    'unused' part   significant part
0        00000000000    1101

The significant part is enough to store the number with an additional length. It always starts with 1 from the left, so it doesn't have to be coded either:

length=3 and 3 bits of 101 = 1101


Our number will be 23 + 101bin= 8 + 5 = 13.

OK, but lenght is also a number, how to save bits there?

Lenght could be Huffman-coded - thus saving bits. Or arithmetic coded based on probability.


More to come..