http://halicery.com/2Image Decoders/JPEG/Arithmetic coding.html

# JPEG

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

### Intro

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
```

Nomenclature:

• 3 is the magnitude category (log2 for binary numbers)
• 101bin is the low order magnitude bits

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.

20151012

More to come..

Fri Jan 1 02:32:56 UTC+0100 2016 © A. Tarpai