Deringing support for 4:2:2 by not deringing chroma
No change in output for 4:2:0 and 4:4:4
Change-Id: Ic46753d23a5b5f90b611a3da1a4574870519957c
diff --git a/av1/common/dering.c b/av1/common/dering.c
index fd5167a..4519031 100644
--- a/av1/common/dering.c
+++ b/av1/common/dering.c
@@ -60,18 +60,24 @@
int dec_y[3];
int pli;
int coeff_shift = AOMMAX(cm->bit_depth - 8, 0);
+ int nplanes;
+ if (xd->plane[1].subsampling_x == xd->plane[1].subsampling_y &&
+ xd->plane[2].subsampling_x == xd->plane[2].subsampling_y)
+ nplanes = 3;
+ else
+ nplanes = 1;
nvsb = (cm->mi_rows + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
nhsb = (cm->mi_cols + MAX_MIB_SIZE - 1) / MAX_MIB_SIZE;
bskip = aom_malloc(sizeof(*bskip) * cm->mi_rows * cm->mi_cols);
av1_setup_dst_planes(xd->plane, frame, 0, 0);
- for (pli = 0; pli < 3; pli++) {
+ for (pli = 0; pli < nplanes; pli++) {
dec_x[pli] = xd->plane[pli].subsampling_x;
dec_y[pli] = xd->plane[pli].subsampling_y;
bsize_x[pli] = 8 >> dec_x[pli];
bsize_y[pli] = 8 >> dec_y[pli];
}
stride = bsize_x[0] * cm->mi_cols;
- for (pli = 0; pli < 3; pli++) {
+ for (pli = 0; pli < nplanes; pli++) {
src[pli] = aom_malloc(sizeof(*src) * cm->mi_rows * cm->mi_cols * 64);
for (r = 0; r < bsize_y[pli] * cm->mi_rows; ++r) {
for (c = 0; c < bsize_x[pli] * cm->mi_cols; ++c) {
@@ -108,7 +114,7 @@
->mbmi.dering_gain);
if (level == 0 || sb_all_skip(cm, sbr * MAX_MIB_SIZE, sbc * MAX_MIB_SIZE))
continue;
- for (pli = 0; pli < 3; pli++) {
+ for (pli = 0; pli < nplanes; pli++) {
int16_t dst[MAX_MIB_SIZE * MAX_MIB_SIZE * 8 * 8];
int threshold;
/* FIXME: This is a temporary hack that uses more conservative
@@ -149,7 +155,7 @@
}
}
}
- for (pli = 0; pli < 3; pli++) {
+ for (pli = 0; pli < nplanes; pli++) {
aom_free(src[pli]);
}
aom_free(bskip);