ASUS V1/V2 Codecs

Table of Contents

1 Introduction

ASV1/2 are purely intracoded DCT-based codecs, with a per file quantization parameter (QP), use 4:2:0 YCbCr colorspace and operate on macroblocks.
The latest version of this document is available at http://www.mplayerhq.hu/~michael/asv1.{lyx,txt,html,ps}
This document assumes familiarity with mathematical and coding concepts such as the discrete cosine transform, quantization, YUV (YCbCr) colorspaces, macroblocks, and variable length codes (VLCs).

2 Terms and definitions

AC Any DCT coefficient for which the frequency in one or both both dimensions in non-zero.
DC The DCT coefficient for which the frequency is zero in both dimensions
QP Quantization Parameter
(I)DCT (Inverse) Discrete Cosine Transform
VLC Variable Length Code

3 Highlevel Description

3.1 Picture

The picture is split into macroblocks which are coded left->right, top->bottom, as long as MBs are completely within the width/height area that is divisible by 16. If width is not divisible by 16, the right column is coded after the main body. If height is not divisible by 16, the bottom strip is coded after the right column.
Example: 56x56 sized image
0 1 2 9
3 4 5 10
6 7 8 11
12 13 14 15

3.2 Macroblock

16x16 luma + 8x8 chroma as 4 8x8 luma blocks and 2 8x8 chroma blocks
Y:
0 1
2 3
Cb:
4
Cr:
5

3.3 Block

Contains 64(=8x8) coefficients in 16(=4x4) coefficient groups with 4(=2x2) coefficients each
0 1 5 9
2 3 8 12
4 7 11 14
6 10 13 15
Coefficients in the coefficient groups 10..15 cannot be coded (they must be 0) in ASV1.
The first coefficient (DC coefficient) in the first coefficient group must be coded as 0. Note it is coded seperately in the 8 bits prior to the AC coefficients.

3.4 Coefficient group

0 1
2 3

3.5 DC coefficient Dequantization

c00’ = 8c00
c00 quantized and coded DC coefficient
c00 unquantized DC coefficient

3.6 AC coefficient Dequantization

cxy’ = (cxy)/(16)(Dqxy)/(QP)
QP Quantization Parameter from the global header
D 64 for ASV1, 128 forASV2
c quantized and coded coefficient
c’ unquantized coefficient
q ISO MPEG1 intra quantization matrix

4 Bitstream

The bitstream in ASV1 is stored with byte-swapped 32bit words (24..31, 16..23, 8..15, 0..7, 56..63, 48..55, 40..47, 32..39, ...)
The bitstream in ASV2 is stored with the bits in each byte reversed so (7..0, 15..8, 23..16, 31..24, 39..32, ...)

4.1 Fourcc

ASV1 / ASV2

4.2 Global (per file) Header

Length in bits Value
8 QP
24 unkown, 0 for ASV1
8 ’A’
8 ’S’
8 ’U’
8 ’S’
Note, the biSize parameter (in the case of storage in AVI) is 48

4.3 Macroblock

Simply the bitstream of the 6 blocks

4.4 ASV1 Block

8-bit DC coefficient
. for each coefficient group
5bit End Of Block

4.5 ASV2 Block

4-bit coefficient group count
8-bit DC coefficient
2-4bit First Coded coefficient pattern
. for each coded coefficient
. for each coefficient group

5 VLC Codes

5.1 ASV1

5.1.1 Level

0011 -3
011 -2
11 -1
000xxxxxxxx xxxxxxxx
10 1
010 2
0010 3
xxxxxxxx is a twos complement signed 8 bit nubmer (=int8_t)

5.1.2 Coded coefficient pattern

00001 14
00010 13
... ...
01101 2
01110 1
01111 EOB
10 0
11 15

5.2 ASV2

5.2.1 First Coded coefficient pattern

VLC CCP
00 0111
01 0000
100 0110
101 0100
1100 0011
1101 0001
1110 0101
1111 0010

5.2.2 Coded coefficient pattern

VLC CCP
00 0000
010 0100
011 1000
1000 1010
1001 1100
1010 0010
1011 1101
1100 1111
1101 1110
111000 0111
111001 0101
111010 0011
111011 0001
111100 0110
111101 1001
11111 1011

5.2.3 Level

0000111111 -31
... ...
001111 -7
001011 -6
001101 -5
001001 -4
0111 -3
0101 -2
11 -1
00000xxxxxxxx xxxxxxxx
10 1
0100 2
0110 3
001000 4
001100 5
001010 6
001110 7
... ...
0000111110 31
xxxxxxxx is a twos complement signed 8 bit nubmer (=int8_t)

6 Example ASV1 decoder

7 Changelog

0.01 2003-05-21
initial version by Michael Niedermayer with some stuff from Mike Melanson
0.02 2003-05-21
spelling, punctuation, example decoder, various minor changes by Mike Melanson
various minor changes by Michael
0.03 2003-09-01
minor fixes and ASV2 by Michael
0.04 2004-08-24
clarify bitstream order by Michael

8 Copyright

Copyright 2003 Michael Niedermayer <michaelni@gmx.at>
This text can be used under the GNU Free Documentation License or GNU General Public License
see http://www.gnu.org/licenses/fdl.txt