RFC Errata
RFC 6386, "VP8 Data Format and Decoding Guide", November 2011
Source of RFC: INDEPENDENT
Errata ID: 8717
Status: Reported
Type: Technical
Publication Format(s) : TEXT
Reported By: 20kdc
Date Reported: 2026-01-23
Section 20.4 says:
if (dqf->quant_idx != q || quant_hdr->delta_update)
It should say:
/* if (dqf->quant_idx != q || quant_hdr->delta_update) */
Notes:
In the reference decoder as-provided, in the event that the decoder has previously decoded a frame with a given yac_qi (`vp8_quant_hdr.q_index` in the code) and non-zero deltas, and in the next frame, `yac_qi` remains the same, but all deltas are not provided or are 0, then `quant_idx` will equal q and `delta_update` will be 0, so the table update will not be applied, leading to the previously decoded deltas being used.
libvpx v1.15.2 `vp8/decoder/decodeframe.c` lines 1083 and following (and the equivalent location in the first commit of libvpx) handles a similar optimization; however, the delta values are compared to their previous values in the 'get_delta_q' function.
I believe the error in the reference decoder stems from a misoptimization attempting to 'lay the groundwork' for the same prevention of rebuilding of optimized dequantization tables.
These tables do not exist in the reference decoder, so the code being guarded here is relatively trivial.
I have tested this change on a personal stripped-down fork of the libvpx 'dixie' branch (the closest 'relative' to the reference decoder that can easily be compiled) in order to confirm it does not immediately break decoding, but my test vector library is not particularly extensive, and the bug is one that would likely have to be triggered by chance in a normal encoding.
Still, I believe the evidence in libvpx points to this errata being correct.
libvpx's interpretation appears to better align with the specification (section 9.6. Dequantization Indices), but not with the reference code; as it is the major shipping implementation, and as the behaviour doesn't really make sense, I'm inclined to believe libvpx is correct.
The `get_delta_q` function's use and behaviour is present in the optimized decoder since the 'Initial WebM release' commit, which indicates that the 'non-sticky' behaviour appears to have superseded the reference decoder.
Please note that only removing/commenting this line creates unused code which would not be correctable without a deeper series of changes.
The effects of disabling this optimization in this decoder appear to be trivial (simple once-per-frame logic), but in the 'full' decoder the process is a little more expensive for what appears to be dequantizer optimization reasons.
