diff options
author | Rupert Swarbrick <rupert.swarbrick@argondesign.com> | 2018-10-17 20:16:00 +0300 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2018-11-14 17:16:55 +0300 |
commit | 2532642bbbdfcc77140846e1403a6b393eaba974 (patch) | |
tree | f1ec61d91d9dfd708ed39a9ab4ff2fb4516d5695 | |
parent | 066b02c2d8926222ff547679b900573de7415713 (diff) |
Fix how we read the UV quantization level
See section 5.9.12 of the AV1 spec. The flag controlling U and V share
a quantization level wasn't being read.
-rw-r--r-- | src/obu.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -523,9 +523,13 @@ static int parse_frame_hdr(Dav1dContext *const c, GetBits *const gb, hdr->quant.yac = dav1d_get_bits(gb, 8); hdr->quant.ydc_delta = dav1d_get_bits(gb, 1) ? dav1d_get_sbits(gb, 6) : 0; if (seqhdr->layout != DAV1D_PIXEL_LAYOUT_I400) { + // If the sequence header says that delta_q might be different + // for U, V, we must check whether it actually is for this + // frame. + int diff_uv_delta = seqhdr->separate_uv_delta_q ? dav1d_get_bits(gb, 1) : 0; hdr->quant.udc_delta = dav1d_get_bits(gb, 1) ? dav1d_get_sbits(gb, 6) : 0; hdr->quant.uac_delta = dav1d_get_bits(gb, 1) ? dav1d_get_sbits(gb, 6) : 0; - if (seqhdr->separate_uv_delta_q) { + if (diff_uv_delta) { hdr->quant.vdc_delta = dav1d_get_bits(gb, 1) ? dav1d_get_sbits(gb, 6) : 0; hdr->quant.vac_delta = dav1d_get_bits(gb, 1) ? dav1d_get_sbits(gb, 6) : 0; } else { |