Use correct RestorationInfo when encoding tilesize Also, factor out some long constants to avoid line wrapping. BUG=aomedia:1009 Change-Id: I7850c27d22ef8b927c3554f1083bc7bdf2c7c6b3
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index d576bd9..165164d 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -1110,10 +1110,8 @@ #if CONFIG_LOOP_RESTORATION static void decode_restoration_mode(AV1_COMMON *cm, struct aom_read_bit_buffer *rb) { - int p; - RestorationInfo *rsi; - for (p = 0; p < MAX_MB_PLANE; ++p) { - rsi = &cm->rst_info[p]; + for (int p = 0; p < MAX_MB_PLANE; ++p) { + RestorationInfo *rsi = &cm->rst_info[p]; if (aom_rb_read_bit(rb)) { rsi->frame_restoration_type = aom_rb_read_bit(rb) ? RESTORE_SGRPROJ : RESTORE_WIENER; @@ -1122,21 +1120,24 @@ aom_rb_read_bit(rb) ? RESTORE_SWITCHABLE : RESTORE_NONE; } } - cm->rst_info[0].restoration_unit_size = RESTORATION_TILESIZE_MAX; - cm->rst_info[1].restoration_unit_size = RESTORATION_TILESIZE_MAX; - cm->rst_info[2].restoration_unit_size = RESTORATION_TILESIZE_MAX; if (cm->rst_info[0].frame_restoration_type != RESTORE_NONE || cm->rst_info[1].frame_restoration_type != RESTORE_NONE || cm->rst_info[2].frame_restoration_type != RESTORE_NONE) { - cm->rst_info[0].restoration_unit_size = RESTORATION_TILESIZE_MAX >> 2; - cm->rst_info[1].restoration_unit_size = RESTORATION_TILESIZE_MAX >> 2; - cm->rst_info[2].restoration_unit_size = RESTORATION_TILESIZE_MAX >> 2; - rsi = &cm->rst_info[0]; + const int qsize = RESTORATION_TILESIZE_MAX >> 2; + for (int p = 0; p < MAX_MB_PLANE; ++p) + cm->rst_info[p].restoration_unit_size = qsize; + + RestorationInfo *rsi = &cm->rst_info[0]; rsi->restoration_unit_size <<= aom_rb_read_bit(rb); - if (rsi->restoration_unit_size != (RESTORATION_TILESIZE_MAX >> 2)) { + if (rsi->restoration_unit_size != qsize) { rsi->restoration_unit_size <<= aom_rb_read_bit(rb); } + } else { + const int size = RESTORATION_TILESIZE_MAX; + for (int p = 0; p < MAX_MB_PLANE; ++p) + cm->rst_info[p].restoration_unit_size = size; } + int s = AOMMIN(cm->subsampling_x, cm->subsampling_y); if (s && (cm->rst_info[1].frame_restoration_type != RESTORE_NONE || cm->rst_info[2].frame_restoration_type != RESTORE_NONE)) {
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index d2a8c3a..023e568 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -2446,10 +2446,8 @@ #if CONFIG_LOOP_RESTORATION static void encode_restoration_mode(AV1_COMMON *cm, struct aom_write_bit_buffer *wb) { - int p; - RestorationInfo *rsi; - for (p = 0; p < MAX_MB_PLANE; ++p) { - rsi = &cm->rst_info[p]; + for (int p = 0; p < MAX_MB_PLANE; ++p) { + RestorationInfo *rsi = &cm->rst_info[p]; switch (rsi->frame_restoration_type) { case RESTORE_NONE: aom_wb_write_bit(wb, 0); @@ -2473,11 +2471,12 @@ if (cm->rst_info[0].frame_restoration_type != RESTORE_NONE || cm->rst_info[1].frame_restoration_type != RESTORE_NONE || cm->rst_info[2].frame_restoration_type != RESTORE_NONE) { - aom_wb_write_bit( - wb, rsi->restoration_unit_size != (RESTORATION_TILESIZE_MAX >> 2)); - if (rsi->restoration_unit_size != (RESTORATION_TILESIZE_MAX >> 2)) { - aom_wb_write_bit( - wb, rsi->restoration_unit_size != (RESTORATION_TILESIZE_MAX >> 1)); + RestorationInfo *rsi = &cm->rst_info[0]; + const int qsize = RESTORATION_TILESIZE_MAX >> 2; + const int hsize = RESTORATION_TILESIZE_MAX >> 1; + aom_wb_write_bit(wb, rsi->restoration_unit_size != qsize); + if (rsi->restoration_unit_size != qsize) { + aom_wb_write_bit(wb, rsi->restoration_unit_size != hsize); } } int s = AOMMIN(cm->subsampling_x, cm->subsampling_y);