[NORMATIVE] Let tx64 scan match tx32 scan Change-Id: Icf0d95b4a71a0dfedcbe5466c7b3769de64b1deb
diff --git a/av1/common/scan.c b/av1/common/scan.c index c480e5c..98f019f 100644 --- a/av1/common/scan.c +++ b/av1/common/scan.c
@@ -3214,18 +3214,14 @@ 978, 979, 995, 996, 1008, 1009, 1017, 1018, 1022, 1023 }; -#define av1_default_iscan_32x64 av1_default_iscan_32x32 -#define av1_default_iscan_64x32 av1_default_iscan_32x32 -#define av1_default_iscan_64x64 av1_default_iscan_32x32 -#define av1_default_iscan_16x64 av1_default_iscan_16x32 -#define av1_default_iscan_64x16 av1_default_iscan_32x16 - const SCAN_ORDER av1_default_scan_orders[TX_SIZES] = { { default_scan_4x4, av1_default_iscan_4x4, default_scan_4x4_neighbors }, { default_scan_8x8, av1_default_iscan_8x8, default_scan_8x8_neighbors }, { default_scan_16x16, av1_default_iscan_16x16, default_scan_16x16_neighbors }, { default_scan_32x32, av1_default_iscan_32x32, default_scan_32x32_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, default_scan_64x64_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_32x32, av1_default_iscan_32x32, default_scan_32x32_neighbors }, }; const SCAN_ORDER av1_scan_orders[TX_SIZES_ALL][TX_TYPES] = { @@ -3327,38 +3323,34 @@ }, { // TX_64X64 - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, - { default_scan_64x64, av1_default_iscan_64x64, - default_scan_64x64_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, }, { // TX_4X8 @@ -3516,73 +3508,65 @@ }, { // TX_32X64 - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, - { default_scan_32x64, av1_default_iscan_32x64, - default_scan_32x64_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, }, { // TX_64X32 - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, - { default_scan_64x32, av1_default_iscan_64x32, - default_scan_64x32_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { default_scan_32x32, av1_default_iscan_32x32, + default_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, + { mrow_scan_32x32, av1_mrow_iscan_32x32, mrow_scan_32x32_neighbors }, + { mcol_scan_32x32, av1_mcol_iscan_32x32, mcol_scan_32x32_neighbors }, }, { // TX_4X16 @@ -3702,72 +3686,64 @@ }, { // TX_16X64 - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, - { default_scan_16x64, av1_default_iscan_16x64, - default_scan_16x64_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { default_scan_16x32, av1_default_iscan_16x32, + default_scan_16x32_neighbors }, + { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors }, + { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors }, + { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors }, + { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors }, + { mrow_scan_16x32, av1_mrow_iscan_16x32, mrow_scan_16x32_neighbors }, + { mcol_scan_16x32, av1_mcol_iscan_16x32, mcol_scan_16x32_neighbors }, }, { // TX_64X16 - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, - { default_scan_64x16, av1_default_iscan_64x16, - default_scan_64x16_neighbors }, + // Half of the coefficients of tx64 at higher frequencies are set to + // zeros. So tx32's scan order is used. + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { default_scan_32x16, av1_default_iscan_32x16, + default_scan_32x16_neighbors }, + { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors }, + { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors }, + { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors }, + { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors }, + { mrow_scan_32x16, av1_mrow_iscan_32x16, mrow_scan_32x16_neighbors }, + { mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors }, }, };
diff --git a/test/scan_test.cc b/test/scan_test.cc index 4f312f8..872651a 100644 --- a/test/scan_test.cc +++ b/test/scan_test.cc
@@ -107,7 +107,7 @@ } SCAN_MODE scan_mode; TX_CLASS tx_class = tx_type_to_class[(TX_TYPE)tx_type]; - if ((tx_class == TX_CLASS_2D) || org_rows == 64 || org_cols == 64) { + if (tx_class == TX_CLASS_2D) { if (rows == cols) { scan_mode = SCAN_MODE_ZIG_ZAG; } else if (rows > cols) {