Side information exists only in Layer III. It follows the frame header, and the CRC when there is one, and tells the decoder how to read the main data: where it starts, how many bits each granule of each channel takes, which Huffman tables and block types are used, and how the values are scaled. All fields are big-endian bit fields, read from the most significant bit.
Size
| MPEG-1 | MPEG-2 and 2.5 (LSF) | |
|---|---|---|
| Single channel | 17 bytes | 9 bytes |
| Stereo, joint stereo, dual channel | 32 bytes | 17 bytes |
| Granules a frame | 2 | 1 |
Layout
| Field | MPEG-1 bits | LSF bits | Meaning |
|---|---|---|---|
main_data_begin | 9 | 8 | how many bytes before this frame’s data its main data starts: see the bit reservoir |
private_bits | 5 mono, 3 stereo | 1 mono, 2 stereo | free for private use; ignored by decoders |
scfsi | 4 for each channel | none | scalefactor selection: 1 for a band group means granule 1 reuses granule 0’s scalefactors there. The four groups are bands 0–5, 6–10, 11–15 and 16–20 |
Then, for each granule (two in MPEG-1, one in LSF), and within it for each channel:
| Field | MPEG-1 bits | LSF bits | Meaning |
|---|---|---|---|
part2_3_length | 12 | 12 | bits of main data for this granule and channel: scalefactors (part 2) and Huffman data (part 3) |
big_values | 9 | 9 | pairs of spectral values coded with the big-value tables, up to 288 |
global_gain | 8 | 8 | the quantiser step for the whole granule, in steps of 1.5 dB; see requantisation |
scalefac_compress | 4 | 9 | selects how many bits the scalefactors take: see scalefactors |
window_switching_flag | 1 | 1 | 1 when the granule uses a window other than the normal long one |
If window_switching_flag is 1:
| Field | Bits | Meaning |
|---|---|---|
block_type | 2 | 0 reserved (not used when switching), 1 start, 2 short (three windows), 3 stop |
mixed_block_flag | 1 | 1 with short blocks means the lowest two subbands use long windows |
table_select[0..1] | 5 each | the Huffman table for each of the two regions |
subblock_gain[0..2] | 3 each | a further gain for each of the three short windows, in steps of 12 dB (eight global gain steps) |
Otherwise:
| Field | Bits | Meaning |
|---|---|---|
table_select[0..2] | 5 each | the Huffman table for each of the three regions |
region0_count | 4 | scalefactor bands in the first region, minus 1 |
region1_count | 3 | scalefactor bands in the second region, minus 1 |
After either branch:
| Field | MPEG-1 bits | LSF bits | Meaning |
|---|---|---|---|
preflag | 1 | none | adds the fixed pretab table to the high-frequency scalefactors; in LSF it is implied by scalefac_compress |
scalefac_scale | 1 | 1 | the scalefactor step: 0 for 0.5, 1 for 1 |
count1table_select | 1 | 1 | 0 uses count1 table A, 1 uses table B |
Block types
| Value | Window | Use |
|---|---|---|
| 0 | normal, long | steady sound; the usual case |
| 1 | start | a long block leading into short ones |
| 2 | short | three short windows, for transients; in mixed blocks only above the lowest two subbands |
| 3 | stop | the long block that follows short ones |
When window_switching_flag is 0, the block type is 0. The decoder also
works out where each Huffman region ends: with window switching, the first region ends
at spectral line 36 (72 at 8 kHz) for short blocks, or at the line that ends scalefactor
band 7 otherwise, and the rest of the spectrum is the second region.
In the explorer
Every field above is shown by name and meaning in the frame’s tree, with the bits it occupies, and the granule and channel it belongs to.