Support for delta-q at superblock level
Change-Id: I4128af44776d1f361bddc1fdffb75ed2224dbfa5
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 66056c0..37bc0f4 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -598,6 +598,38 @@
mbmi->segment_id = read_intra_segment_id(cm, xd, mi_offset, x_mis, y_mis, r);
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
+
+#if CONFIG_DELTA_Q
+ if (cm->delta_q_present_flag) {
+ int b_col = mi_col & 7;
+ int b_row = mi_row & 7;
+ int read_delta_q_flag = (b_col == 0 && b_row == 0);
+ if ((bsize != BLOCK_64X64 || mbmi->skip == 0) && read_delta_q_flag) {
+ int sign, abs, tmp, delta_qindex;
+
+ abs = 0;
+ tmp = aom_read_bit(r, ACCT_STR);
+ while (tmp == 0 && abs < 2) {
+ tmp = aom_read_bit(r, ACCT_STR);
+ abs++;
+ }
+ if (tmp == 0) {
+ abs = aom_read_literal(r, 6, ACCT_STR);
+ }
+
+ if (abs) {
+ sign = aom_read_bit(r, ACCT_STR);
+ } else {
+ sign = 1;
+ }
+
+ delta_qindex = sign ? -abs : abs;
+ xd->current_qindex = xd->prev_qindex + delta_qindex;
+ xd->prev_qindex = xd->current_qindex;
+ }
+ }
+#endif
+
mbmi->tx_size = read_tx_size_intra(cm, xd, r);
mbmi->ref_frame[0] = INTRA_FRAME;
mbmi->ref_frame[1] = NONE;
@@ -1655,6 +1687,35 @@
if (!supertx_enabled) {
#endif // CONFIG_SUPERTX
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
+#if CONFIG_DELTA_Q
+ if (cm->delta_q_present_flag) {
+ BLOCK_SIZE bsize = mbmi->sb_type;
+ int b_col = mi_col & 7;
+ int b_row = mi_row & 7;
+ int read_delta_q_flag = (b_col == 0 && b_row == 0);
+ if ((bsize != BLOCK_64X64 || mbmi->skip == 0) && read_delta_q_flag) {
+ int sign, abs, tmp, delta_qindex;
+
+ abs = 0;
+ tmp = aom_read_bit(r, ACCT_STR);
+ while (tmp == 0 && abs < 2) {
+ tmp = aom_read_bit(r, ACCT_STR);
+ abs++;
+ }
+ if (tmp == 0) {
+ abs = aom_read_literal(r, 6, ACCT_STR);
+ }
+ if (abs) {
+ sign = aom_read_bit(r, ACCT_STR);
+ } else {
+ sign = 1;
+ }
+ delta_qindex = sign ? -abs : abs;
+ xd->current_qindex = xd->prev_qindex + delta_qindex;
+ xd->prev_qindex = xd->current_qindex;
+ }
+ }
+#endif
inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r);
#if CONFIG_VAR_TX