| |
| |
| ### Section 15: Loop Filter {#h-15-00} |
| |
| |
| Loop filtering is the last stage of frame reconstruction and the |
| next-to-last stage of the decoding process. The loop filter is |
| applied to the entire frame after the summation of predictor and |
| residue signals, as described in Section 14. |
| |
| The purpose of the loop filter is to eliminate (or at least reduce) |
| visually objectionable artifacts associated with the semi- |
| independence of the coding of macroblocks and their constituent |
| subblocks. |
| |
| As was discussed in Section 5, the loop filter is "integral" to |
| decoding, in that the results of loop filtering are used in the |
| prediction of subsequent frames. Consequently, a functional decoder |
| implementation must perform loop filtering exactly as described here. |
| This is distinct from any postprocessing that may be applied only to |
| the image immediately before display; such postprocessing is entirely |
| at the option of the implementor (and/or user) and has no effect on |
| decoding per se. |
| |
| The baseline frame-level parameters controlling the loop filter are |
| defined in the frame header (Section 9.4) along with a mechanism for |
| adjustment based on a macroblock's prediction mode and/or reference |
| frame. The first is a flag (`filter_type`) selecting the type of |
| filter (normal or simple); the other two are numbers |
| (`loop_filter_level` and `sharpness_level`) that adjust the strength or |
| sensitivity of the filter. As described in Sections 9.3 and 10, |
| `loop_filter_level` may also be overridden on a per-macroblock basis |
| using segmentation. |
| |
| Loop filtering is one of the more computationally intensive aspects |
| of VP8 decoding. This is the reason for the existence of the |
| optional, less-demanding simple filter type. |
| |
| Note carefully that loop filtering must be skipped entirely if |
| `loop_filter_level` at either the frame header level or macroblock |
| override level is `0`. In no case should the loop filter be run with a |
| value of `0`; it should instead be skipped. |
| |
| We begin by discussing the aspects of loop filtering that are |
| independent of the controlling parameters and type of filter chosen. |
| |