Support for delta-q at superblock level
Change-Id: I4128af44776d1f361bddc1fdffb75ed2224dbfa5
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index e4f2ee7..e3c7698 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -1209,6 +1209,26 @@
}
#endif // CONFIG_SUPERTX
+#if CONFIG_DELTA_Q
+ if (cm->delta_q_present_flag) {
+ int i;
+ for (i = 0; i < MAX_SEGMENTS; i++) {
+ xd->plane[0].seg_dequant[i][0] =
+ av1_dc_quant(xd->current_qindex, cm->y_dc_delta_q, cm->bit_depth);
+ xd->plane[0].seg_dequant[i][1] =
+ av1_ac_quant(xd->current_qindex, 0, cm->bit_depth);
+ xd->plane[1].seg_dequant[i][0] =
+ av1_dc_quant(xd->current_qindex, cm->uv_dc_delta_q, cm->bit_depth);
+ xd->plane[1].seg_dequant[i][1] =
+ av1_ac_quant(xd->current_qindex, cm->uv_ac_delta_q, cm->bit_depth);
+ xd->plane[2].seg_dequant[i][0] =
+ av1_dc_quant(xd->current_qindex, cm->uv_dc_delta_q, cm->bit_depth);
+ xd->plane[2].seg_dequant[i][1] =
+ av1_ac_quant(xd->current_qindex, cm->uv_ac_delta_q, cm->bit_depth);
+ }
+ }
+#endif
+
if (mbmi->skip) {
dec_reset_skip_context(xd);
}
@@ -3485,6 +3505,27 @@
setup_segmentation(cm, rb);
+#if CONFIG_DELTA_Q
+ {
+ struct segmentation *const seg = &cm->seg;
+ int segment_quantizer_active = 0;
+ for (i = 0; i < MAX_SEGMENTS; i++) {
+ if (segfeature_active(seg, i, SEG_LVL_ALT_Q)) {
+ segment_quantizer_active = 1;
+ }
+ }
+
+ if (segment_quantizer_active == 0) {
+ cm->delta_q_present_flag = aom_rb_read_bit(rb);
+ } else {
+ cm->delta_q_present_flag = 0;
+ }
+ if (cm->delta_q_present_flag) {
+ xd->prev_qindex = cm->base_qindex;
+ }
+ }
+#endif
+
for (i = 0; i < MAX_SEGMENTS; ++i) {
const int qindex = cm->seg.enabled
? av1_get_qindex(&cm->seg, i, cm->base_qindex)