RFC Errata
RFC 6386, "VP8 Data Format and Decoding Guide", November 2011
Source of RFC: INDEPENDENT
Errata ID: 7904
Status: Reported
Type: Technical
Publication Format(s) : TEXT
Reported By: Felix Pahl
Date Reported: 2024-04-21
Section 19.2 says:
token_prob_update() | Type | | ------------------------------------------------- | ----- | | for (i = 0; i < 4; i++) { | | | for (j = 0; j < 8; j++) { | | | for (k = 0; k < 3; k++) { | | | for (l = 0; l < 11; l++) { | | | coeff_prob_update_flag | L(1) | | if (coeff_prob_update_flag) | | | coeff_prob | L(8) | | } | | | } | | | } | | | } | |
It should say:
token_prob_update() | Type | | ------------------------------------------------- | ----- | | for (i = 0; i < 4; i++) { | | | for (j = 0; j < 8; j++) { | | | for (k = 0; k < 3; k++) { | | | for (l = 0; l < 11; l++) { | | | coeff_prob_update_flag | B(p) | | if (coeff_prob_update_flag) | | | coeff_prob | L(8) | | } | | | } | | | } | | | } | |
Notes:
The type of the flag coeff_prob_update_flag is given as L(1), which, according to the table in Section 8 on p. 25, means that this is a single literal bit that should be read with a 50/50 probability coded as 128.
But other parts of the RFC say that these flags are actually read with predetermined probabilities other than 128: Section 13.4 (“Token Probability Updates”) on p. 68 specifies these probabilities in the array coeff_update_probs, and the function decode_entropy_header in the reference implementation (file dixie.c, p. 138/139) uses them (in the array k_coeff_entropy_update_probs) to decode these flags. The current version of libwebp follows the reference implementation and uses these predetermined probabilities.
According to the table on p. 25, the type of such a flag should be specified as B(p), not as L(1).