mirror of
https://github.com/google/brotli.git
synced 2024-11-25 04:50:05 +00:00
Clarify Section 7.3
* Acknowledge the fact that the context map is conceptually really a two-dimensional matrix with 2 different keys, but in reality stored as a one-dimensional array. * Mention that InverseMoveToFrontTransform will not cause the context map to have invalid indexes. This gives someone implementing a decoder sanity that they do not have to go through the context map again and check that all values are less than NTREES.
This commit is contained in:
parent
ff3897df2d
commit
542a8b776e
@ -1053,10 +1053,10 @@ implicit zero.
|
|||||||
7. Context modeling
|
7. Context modeling
|
||||||
|
|
||||||
As described in Section 2, the prefix tree used to encode a literal
|
As described in Section 2, the prefix tree used to encode a literal
|
||||||
byte or a distance code depends on the context ID and the block type.
|
byte or a distance code depends on the block type and the context ID.
|
||||||
This section specifies how to compute the context ID for a particular
|
This section specifies how to compute the context ID for a particular
|
||||||
literal and distance code, and how to encode the context map that
|
literal and distance code, and how to encode the context map that
|
||||||
maps a <context ID, block type> pair to the index of a prefix
|
maps a <block type, context ID> pair to the index of a prefix
|
||||||
code in the array of literal and distance prefix codes.
|
code in the array of literal and distance prefix codes.
|
||||||
|
|
||||||
.ti 0
|
.ti 0
|
||||||
@ -1190,15 +1190,21 @@ context map is an integer between 0 and 255, indicating the index
|
|||||||
of the prefix code to be used when encoding the next literal or
|
of the prefix code to be used when encoding the next literal or
|
||||||
distance.
|
distance.
|
||||||
|
|
||||||
The context map is encoded as a one-dimensional array,
|
The context maps are two-dimensional matrices, encoded as
|
||||||
CMAPL[0..(64 * NBLTYPESL - 1)] and CMAPD[0..(4 * NBLTYPESD - 1)].
|
one-dimensional arrays:
|
||||||
|
|
||||||
|
.nf
|
||||||
|
CMAPL[0..(64 * NBLTYPESL - 1)]
|
||||||
|
CMAPD[0..(4 * NBLTYPESD - 1)]
|
||||||
|
.fi
|
||||||
|
|
||||||
The index of the prefix code for encoding a literal or distance
|
The index of the prefix code for encoding a literal or distance
|
||||||
code with context ID, CIDx, and block type, BTYPE_x, is:
|
code with block type, BTYPE_x, and context ID, CIDx, is:
|
||||||
|
|
||||||
|
.nf
|
||||||
index of literal prefix code = CMAPL[64 * BTYPE_L + CIDL]
|
index of literal prefix code = CMAPL[64 * BTYPE_L + CIDL]
|
||||||
|
|
||||||
index of distance prefix code = CMAPD[4 * BTYPE_D + CIDD]
|
index of distance prefix code = CMAPD[4 * BTYPE_D + CIDD]
|
||||||
|
.fi
|
||||||
|
|
||||||
The values of the context map are encoded with the combination
|
The values of the context map are encoded with the combination
|
||||||
of run length encoding for zero values and prefix coding. Let
|
of run length encoding for zero values and prefix coding. Let
|
||||||
@ -1245,11 +1251,11 @@ for literal and distance context maps):
|
|||||||
.fi
|
.fi
|
||||||
|
|
||||||
Note that RLEMAX may be larger than the value necessary to represent
|
Note that RLEMAX may be larger than the value necessary to represent
|
||||||
the longest sequence of zero values.
|
the longest sequence of zero values. Also, the NTREES value is encoded
|
||||||
|
right before the context map as described in Section 9.2.
|
||||||
|
|
||||||
For the encoding of NTREES see Section 9.2. We define the
|
We define the inverse move-to-front transform used in this specification
|
||||||
inverse move-to-front transform used in this specification by the
|
by the following C language function:
|
||||||
following C language function:
|
|
||||||
|
|
||||||
.nf
|
.nf
|
||||||
void InverseMoveToFrontTransform(uint8_t* v, int v_len) {
|
void InverseMoveToFrontTransform(uint8_t* v, int v_len) {
|
||||||
@ -1270,6 +1276,9 @@ following C language function:
|
|||||||
}
|
}
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
|
Note that the inverse move-to-front transform will not produce values
|
||||||
|
outside the [0..NTREES-1] interval.
|
||||||
|
|
||||||
.ti 0
|
.ti 0
|
||||||
8. Static dictionary
|
8. Static dictionary
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user