Superblock size choice in EXT_TILE
In current AV1 code base, the default value for superblock_size is
AOM_SUPERBLOCK_SIZE_DYNAMIC, which doesn't suit the needs of the
large-scale coding. While large_scale_tile = 1, we only allow
AOM_SUPERBLOCK_SIZE_64X64 and AOM_SUPERBLOCK_SIZE_128X128 for
superblock_size. If superblock_size = AOM_SUPERBLOCK_SIZE_DYNAMIC,
hard set it to AOM_SUPERBLOCK_SIZE_64X64, that is the default
value in large-scale tile coding.
Change-Id: Ia0c6aca3f0badc2ed2bb325f0f99979b7c8c6882
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 0fcc41b..ba56980 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -345,11 +345,16 @@
RANGE_CHECK_HI(extra_cfg, single_tile_decoding, 1);
if (cfg->large_scale_tile) {
-// TODO(any): Waring. If CONFIG_EXT_TILE is true, tile_columns really
+// TODO(any): Warning. If CONFIG_EXT_TILE is true, tile_columns really
// means tile_width, and tile_rows really means tile_hight. The interface
// should be sanitized.
#if CONFIG_EXT_PARTITION
- if (extra_cfg->superblock_size != AOM_SUPERBLOCK_SIZE_64X64) {
+ // While cfg->large_scale_tile = 1, only allow AOM_SUPERBLOCK_SIZE_64X64 and
+ // AOM_SUPERBLOCK_SIZE_128X128 for superblock_size. If superblock_size =
+ // AOM_SUPERBLOCK_SIZE_DYNAMIC(default), hard set it to
+ // AOM_SUPERBLOCK_SIZE_64X64(default value in large_scale_tile) in
+ // set_encoder_config().
+ if (extra_cfg->superblock_size == AOM_SUPERBLOCK_SIZE_128X128) {
if (extra_cfg->tile_columns != 0)
RANGE_CHECK(extra_cfg, tile_columns, 1, 32);
if (extra_cfg->tile_rows != 0) RANGE_CHECK(extra_cfg, tile_rows, 1, 32);
@@ -726,8 +731,13 @@
(oxcf->large_scale_tile) ? extra_cfg->single_tile_decoding : 0;
if (oxcf->large_scale_tile) {
#if CONFIG_EXT_PARTITION
+ // superblock_size can only be AOM_SUPERBLOCK_SIZE_64X64 or
+ // AOM_SUPERBLOCK_SIZE_128X128 while oxcf->large_scale_tile = 1;
+ if (extra_cfg->superblock_size != AOM_SUPERBLOCK_SIZE_64X64 &&
+ extra_cfg->superblock_size != AOM_SUPERBLOCK_SIZE_128X128)
+ oxcf->superblock_size = AOM_SUPERBLOCK_SIZE_64X64;
const unsigned int max =
- extra_cfg->superblock_size == AOM_SUPERBLOCK_SIZE_64X64 ? 64 : 32;
+ oxcf->superblock_size == AOM_SUPERBLOCK_SIZE_64X64 ? 64 : 32;
#else
const unsigned int max = 64;
#endif // CONFIG_EXT_PARTITION
diff --git a/test/tile_independence_test.cc b/test/tile_independence_test.cc
index 8b36261..18b6e90 100644
--- a/test/tile_independence_test.cc
+++ b/test/tile_independence_test.cc
@@ -31,7 +31,7 @@
init_flags_ = AOM_CODEC_USE_PSNR;
aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
cfg.w = 704;
- cfg.h = 144;
+ cfg.h = 576;
cfg.threads = 1;
cfg.allow_lowbitdepth = 1;
fw_dec_ = codec_->CreateDecoder(cfg, 0);