Consolidate data structure for CDEF
Combine the primary and secondary damping factors as only one damping
factor is used according to the spec.
Change-Id: Idae886954e936c753676f41e71f7ce68e2e17eda
diff --git a/av1/common/cdef.c b/av1/common/cdef.c
index 94202c0..67602dc 100644
--- a/av1/common/cdef.c
+++ b/av1/common/cdef.c
@@ -238,8 +238,7 @@
for (int pli = 0; pli < num_planes; pli++) {
int coffset;
int rend, cend;
- int pri_damping = cdef_info->cdef_pri_damping;
- int sec_damping = cdef_info->cdef_sec_damping;
+ int damping = cdef_info->cdef_damping;
int hsize = nhb << mi_wide_l2[pli];
int vsize = nvb << mi_high_l2[pli];
@@ -350,7 +349,7 @@
}
if (cm->seq_params.use_highbitdepth) {
- cdef_filter_fb(
+ av1_cdef_filter_fb(
NULL,
&CONVERT_TO_SHORTPTR(
xd->plane[pli]
@@ -360,9 +359,9 @@
xd->plane[pli].dst.stride,
&src[CDEF_VBORDER * CDEF_BSTRIDE + CDEF_HBORDER], xdec[pli],
ydec[pli], dir, NULL, var, pli, dlist, cdef_count, level,
- sec_strength, pri_damping, sec_damping, coeff_shift);
+ sec_strength, damping, coeff_shift);
} else {
- cdef_filter_fb(
+ av1_cdef_filter_fb(
&xd->plane[pli]
.dst.buf[xd->plane[pli].dst.stride *
(MI_SIZE_64X64 * fbr << mi_high_l2[pli]) +
@@ -370,7 +369,7 @@
NULL, xd->plane[pli].dst.stride,
&src[CDEF_VBORDER * CDEF_BSTRIDE + CDEF_HBORDER], xdec[pli],
ydec[pli], dir, NULL, var, pli, dlist, cdef_count, level,
- sec_strength, pri_damping, sec_damping, coeff_shift);
+ sec_strength, damping, coeff_shift);
}
}
cdef_left = 1;
diff --git a/av1/common/cdef_block.c b/av1/common/cdef_block.c
index dfd5882..9620014 100644
--- a/av1/common/cdef_block.c
+++ b/av1/common/cdef_block.c
@@ -173,12 +173,12 @@
return var ? (strength * (4 + i) + 8) >> 4 : 0;
}
-void cdef_filter_fb(uint8_t *dst8, uint16_t *dst16, int dstride, uint16_t *in,
- int xdec, int ydec, int dir[CDEF_NBLOCKS][CDEF_NBLOCKS],
- int *dirinit, int var[CDEF_NBLOCKS][CDEF_NBLOCKS], int pli,
- cdef_list *dlist, int cdef_count, int level,
- int sec_strength, int pri_damping, int sec_damping,
- int coeff_shift) {
+void av1_cdef_filter_fb(uint8_t *dst8, uint16_t *dst16, int dstride,
+ uint16_t *in, int xdec, int ydec,
+ int dir[CDEF_NBLOCKS][CDEF_NBLOCKS], int *dirinit,
+ int var[CDEF_NBLOCKS][CDEF_NBLOCKS], int pli,
+ cdef_list *dlist, int cdef_count, int level,
+ int sec_strength, int damping, int coeff_shift) {
int bi;
int bx;
int by;
@@ -186,8 +186,7 @@
int pri_strength = level << coeff_shift;
sec_strength <<= coeff_shift;
- sec_damping += coeff_shift - (pli != AOM_PLANE_Y);
- pri_damping += coeff_shift - (pli != AOM_PLANE_Y);
+ damping += coeff_shift - (pli != AOM_PLANE_Y);
bsize =
ydec ? (xdec ? BLOCK_4X4 : BLOCK_8X4) : (xdec ? BLOCK_4X8 : BLOCK_8X8);
bsizex = 3 - xdec;
@@ -241,7 +240,7 @@
&dst8[(by << bsizey) * dstride + (bx << bsizex)], NULL, dstride,
&in[(by * CDEF_BSTRIDE << bsizey) + (bx << bsizex)],
(pli ? t : adjust_strength(t, var[by][bx])), s, t ? dir[by][bx] : 0,
- pri_damping, sec_damping, bsize, coeff_shift);
+ damping, damping, bsize, coeff_shift);
else
cdef_filter_block(
NULL,
@@ -250,6 +249,6 @@
dirinit ? 1 << bsizex : dstride,
&in[(by * CDEF_BSTRIDE << bsizey) + (bx << bsizex)],
(pli ? t : adjust_strength(t, var[by][bx])), s, t ? dir[by][bx] : 0,
- pri_damping, sec_damping, bsize, coeff_shift);
+ damping, damping, bsize, coeff_shift);
}
}
diff --git a/av1/common/cdef_block.h b/av1/common/cdef_block.h
index 8321d48..d8bf31c 100644
--- a/av1/common/cdef_block.h
+++ b/av1/common/cdef_block.h
@@ -49,10 +49,10 @@
void copy_cdef_16bit_to_16bit(uint16_t *dst, int dstride, uint16_t *src,
cdef_list *dlist, int cdef_count, int bsize);
-void cdef_filter_fb(uint8_t *dst8, uint16_t *dst16, int dstride, uint16_t *in,
- int xdec, int ydec, int dir[CDEF_NBLOCKS][CDEF_NBLOCKS],
- int *dirinit, int var[CDEF_NBLOCKS][CDEF_NBLOCKS], int pli,
- cdef_list *dlist, int cdef_count, int level,
- int sec_strength, int pri_damping, int sec_damping,
- int coeff_shift);
+void av1_cdef_filter_fb(uint8_t *dst8, uint16_t *dst16, int dstride,
+ uint16_t *in, int xdec, int ydec,
+ int dir[CDEF_NBLOCKS][CDEF_NBLOCKS], int *dirinit,
+ int var[CDEF_NBLOCKS][CDEF_NBLOCKS], int pli,
+ cdef_list *dlist, int cdef_count, int level,
+ int sec_strength, int damping, int coeff_shift);
#endif // AOM_AV1_COMMON_CDEF_BLOCK_H_
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index d6e1b5e..81de9e5 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -183,8 +183,7 @@
} BufferPool;
typedef struct {
- int cdef_pri_damping;
- int cdef_sec_damping;
+ int cdef_damping;
int nb_cdef_strengths;
int cdef_strengths[CDEF_MAX_STRENGTHS];
int cdef_uv_strengths[CDEF_MAX_STRENGTHS];
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 71c8384..abe3e61 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -1998,8 +1998,7 @@
CdefInfo *const cdef_info = &cm->cdef_info;
if (cm->allow_intrabc) return;
- cdef_info->cdef_pri_damping = aom_rb_read_literal(rb, 2) + 3;
- cdef_info->cdef_sec_damping = cdef_info->cdef_pri_damping;
+ cdef_info->cdef_damping = aom_rb_read_literal(rb, 2) + 3;
cdef_info->cdef_bits = aom_rb_read_literal(rb, 2);
cdef_info->nb_cdef_strengths = 1 << cdef_info->cdef_bits;
for (int i = 0; i < cdef_info->nb_cdef_strengths; i++) {
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 9c0567a..1178f82 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1958,8 +1958,7 @@
if (cm->allow_intrabc) return;
const int num_planes = av1_num_planes(cm);
int i;
- aom_wb_write_literal(wb, cm->cdef_info.cdef_pri_damping - 3, 2);
- assert(cm->cdef_info.cdef_pri_damping == cm->cdef_info.cdef_sec_damping);
+ aom_wb_write_literal(wb, cm->cdef_info.cdef_damping - 3, 2);
aom_wb_write_literal(wb, cm->cdef_info.cdef_bits, 2);
for (i = 0; i < cm->cdef_info.nb_cdef_strengths; i++) {
aom_wb_write_literal(wb, cm->cdef_info.cdef_strengths[i],
diff --git a/av1/encoder/pickcdef.c b/av1/encoder/pickcdef.c
index 2ad75a1..06a4c98 100644
--- a/av1/encoder/pickcdef.c
+++ b/av1/encoder/pickcdef.c
@@ -299,8 +299,7 @@
CdefInfo *const cdef_info = &cm->cdef_info;
cdef_info->cdef_bits = 0;
cdef_info->nb_cdef_strengths = 1;
- cdef_info->cdef_pri_damping = 3 + (cm->base_qindex >> 6);
- cdef_info->cdef_sec_damping = 3 + (cm->base_qindex >> 6);
+ cdef_info->cdef_damping = 3 + (cm->base_qindex >> 6);
int predicted_y_f1 = 0;
int predicted_y_f2 = 0;
@@ -366,8 +365,7 @@
const int nhfb = (cm->mi_cols + MI_SIZE_64X64 - 1) / MI_SIZE_64X64;
int *sb_index = aom_malloc(nvfb * nhfb * sizeof(*sb_index));
int *selected_strength = aom_malloc(nvfb * nhfb * sizeof(*sb_index));
- const int pri_damping = 3 + (cm->base_qindex >> 6);
- const int sec_damping = 3 + (cm->base_qindex >> 6);
+ const int damping = 3 + (cm->base_qindex >> 6);
const int fast = pick_method == CDEF_FAST_SEARCH;
const int total_strengths = fast ? REDUCED_TOTAL_STRENGTHS : TOTAL_STRENGTHS;
DECLARE_ALIGNED(32, uint16_t, tmp_dst[1 << (MAX_SB_SIZE_LOG2 * 2)]);
@@ -494,10 +492,10 @@
(fbr * MI_SIZE_64X64 << mi_high_l2[pli]) - yoff,
(fbc * MI_SIZE_64X64 << mi_wide_l2[pli]) - xoff,
stride[pli], ysize, xsize);
- cdef_filter_fb(NULL, tmp_dst, CDEF_BSTRIDE, in, xdec[pli], ydec[pli],
- dir, &dirinit, var, pli, dlist, cdef_count, threshold,
- sec_strength + (sec_strength == 3), pri_damping,
- sec_damping, coeff_shift);
+ av1_cdef_filter_fb(
+ NULL, tmp_dst, CDEF_BSTRIDE, in, xdec[pli], ydec[pli], dir,
+ &dirinit, var, pli, dlist, cdef_count, threshold,
+ sec_strength + (sec_strength == 3), damping, coeff_shift);
const uint64_t curr_mse = compute_cdef_dist(
ref_coeff[pli] +
(fbr * MI_SIZE_64X64 << mi_high_l2[pli]) * stride[pli] +
@@ -584,8 +582,7 @@
}
}
- cdef_info->cdef_pri_damping = pri_damping;
- cdef_info->cdef_sec_damping = sec_damping;
+ cdef_info->cdef_damping = damping;
aom_free(mse[0]);
aom_free(mse[1]);