blob: c88dea011c7fc7e288ace69fdd378e5d97a83a51 [file] [log] [blame]
#### 9.4 Loop Filter Type and Levels {#h-09-04}
VP8 supports two types of loop filters having different computational
complexity. The following bits occur in the header to support the
selection of the baseline type, strength, and sharpness behavior of
the loop filter used for the current frame.
| Index | Description
| ------ | ------------------
| `L(1)` | filter_type
| `L(6)` | loop_filter_level
| `L(3)` | sharpness_level
The meaning of these numbers will be further explained in Section 15.
VP8 has a feature in the bitstream that enables adjustment of the
loop filter level based on a macroblock's prediction mode and
reference frame. The per-macroblock adjustment is done through delta
values against the default loop filter level for the current frame.
This subsection contains flag and value information for implementing
per-macroblock loop filter level adjustment to default decoder
behavior. The data in this section is used in the decoding of the
ensuing per-macroblock information and applies to the entire frame.
`L(1)` is a one-bit flag indicating if the macroblock loop filter
adjustment is on for the current frame. `0` means that such a feature
is not supported in the current frame, and `1` means this feature is
enabled for the current frame.
Whether the adjustment is based on a reference frame or encoding
mode, the adjustment of the loop filter level is done via a delta
value against a baseline loop filter value. The delta values are
updated for the current frame if an `L(1)` bit,
`mode_ref_lf_delta_update`, takes the value `1`. There are two groups of
delta values: One group of delta values is for reference frame-based
adjustments, and the other group is for mode-based adjustments. The
number of delta values in the two groups is `MAX_REF_LF_DELTAS` and
`MAX_MODE_LF_DELTAS`, respectively. For every value within the two
groups, there is a one-bit `L(1)` to indicate if the particular value
is updated. When one is updated (1), it is transmitted as a six-bit-
magnitude `L(6)` followed by a one-bit sign flag `(L(1)` -- `0` for
positive and `1` for negative).