Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRupert Swarbrick <rupert.swarbrick@argondesign.com>2018-10-17 20:16:00 +0300
committerRonald S. Bultje <rsbultje@gmail.com>2018-11-14 17:16:55 +0300
commit2532642bbbdfcc77140846e1403a6b393eaba974 (patch)
treef1ec61d91d9dfd708ed39a9ab4ff2fb4516d5695
parent066b02c2d8926222ff547679b900573de7415713 (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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/obu.c b/src/obu.c
index a62f34f..7064a1b 100644
--- a/src/obu.c
+++ b/src/obu.c
@@ -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 {