Add VAR_TX_NO_TX_MODE experiment. This experiment removes the tx_mode flag from the uncompressed frame header and instead always uses a constant value. objective-1-fast: master@2017-06-29T00:51:22.142Z -> no_tx_mode@2017-06-29T01:09:32.392Z PSNR | PSNR Cb | PSNR Cr | PSNR HVS | SSIM | MS SSIM | CIEDE 2000 -0.0103 | 0.0183 | -0.0076 | -0.0103 | -0.0052 | -0.0208 | 0.0004 Change-Id: I9d49c4d99ed102e52c86e339f20623063886f49d
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 5578d43..9b80bc4 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -149,6 +149,10 @@ TX_MODE tx_mode; #endif if (cm->all_lossless) return ONLY_4X4; +#if CONFIG_VAR_TX_NO_TX_MODE + (void)rb; + return TX_MODE_SELECT; +#else #if CONFIG_TX64X64 tx_mode = aom_rb_read_bit(rb) ? TX_MODE_SELECT : aom_rb_read_literal(rb, 2); if (tx_mode == ALLOW_32X32) tx_mode += aom_rb_read_bit(rb); @@ -156,6 +160,7 @@ #else return aom_rb_read_bit(rb) ? TX_MODE_SELECT : aom_rb_read_literal(rb, 2); #endif // CONFIG_TX64X64 +#endif // CONFIG_VAR_TX_NO_TX_MODE } #if !CONFIG_EC_ADAPT
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index bf60ae9..c4bd5d2 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -3913,6 +3913,11 @@ *mode = ONLY_4X4; return; } +#if CONFIG_VAR_TX_NO_TX_MODE + (void)wb; + *mode = TX_MODE_SELECT; + return; +#else #if CONFIG_TX64X64 aom_wb_write_bit(wb, *mode == TX_MODE_SELECT); if (*mode != TX_MODE_SELECT) { @@ -3923,6 +3928,7 @@ aom_wb_write_bit(wb, *mode == TX_MODE_SELECT); if (*mode != TX_MODE_SELECT) aom_wb_write_literal(wb, *mode, 2); #endif // CONFIG_TX64X64 +#endif // CONFIG_VAR_TX_NO_TX_MODE } #if !CONFIG_EC_ADAPT
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 511066d..56b1481 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -4532,6 +4532,9 @@ static TX_MODE select_tx_mode(const AV1_COMP *cpi) { if (cpi->common.all_lossless) return ONLY_4X4; +#if CONFIG_VAR_TX_NO_TX_MODE + return TX_MODE_SELECT; +#else if (cpi->sf.tx_size_search_method == USE_LARGESTALL) return ALLOW_32X32 + CONFIG_TX64X64; else if (cpi->sf.tx_size_search_method == USE_FULL_RD || @@ -4539,6 +4542,7 @@ return TX_MODE_SELECT; else return cpi->common.tx_mode; +#endif // CONFIG_VAR_TX_NO_TX_MODE } void av1_init_tile_data(AV1_COMP *cpi) {
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake index 037bb5f..bb0be5c 100644 --- a/build/cmake/aom_config_defaults.cmake +++ b/build/cmake/aom_config_defaults.cmake
@@ -169,4 +169,5 @@ set(CONFIG_SBL_SYMBOL 0 CACHE NUMBER "Internal flag.") set(CONFIG_NCOBMC_ADAPT_WEIGHT 0 CACHE NUMBER "Internal flag.") set(CONFIG_BGSPRITE 0 CACHE NUMBER "Internal flag.") +set(CONFIG_VAR_TX_NO_TX_MODE 1 CACHE NUMBER "Internal flag.") set(CONFIG_ANALYZER 0 CACHE NUMBER "Internal flag.")
diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake index 65911df..4dbaff7 100644 --- a/build/cmake/aom_configure.cmake +++ b/build/cmake/aom_configure.cmake
@@ -237,6 +237,12 @@ endif () endif () +if (CONFIG_VAR_TX_NO_TX_MODE AND NOT CONFIG_VAR_TX) + message(WARNING + "--- CONFIG_VAR_TX_NO_TX_MODE requires CONFIG_VAR_TX, disabling.") + set(CONFIG_VAR_TX_NO_TX_MODE 0) +endif() + if (NOT MSVC) aom_push_var(CMAKE_REQUIRED_LIBRARIES "m") aom_check_c_compiles("fenv_check"
diff --git a/configure b/configure index 04d5da0..5580a86 100755 --- a/configure +++ b/configure
@@ -330,6 +330,7 @@ sbl_symbol ncobmc_adapt_weight bgsprite + var_tx_no_tx_mode " CONFIG_LIST=" dependency_tracking @@ -563,6 +564,10 @@ log_echo "disabling reference_buffer" disable_feature reference_buffer fi + if enabled var_tx_no_tx_mode && ! enabled var_tx; then + log_echo "var_tx_no_tx_mode requires var_tx, so disabling var_tx_no_tx_mode" + disable_feature var_tx_no_tx_mode + fi if enabled ext_tile; then log_echo "ext_tile not compatible with tile_groups, so" log_echo "disabling tile_groups"