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"