summaryrefslogtreecommitdiffstats
path: root/third_party/aom/test
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2020-04-07 23:30:51 -0400
committerMatt A. Tobin <email@mattatobin.com>2020-04-07 23:30:51 -0400
commit5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb (patch)
tree45d55e3e5e73c4255c4d71258d9be5b2d004d28f /third_party/aom/test
parent50f1986697a7412e4160976fa5e11217b4ef1f44 (diff)
downloadUXP-5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb.tar
UXP-5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb.tar.gz
UXP-5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb.tar.lz
UXP-5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb.tar.xz
UXP-5545a8983ff0ef1fb52e64aef8e66fa9b13c1cbb.zip
Move aom source to a sub-directory under media/libaom
There is no damned reason to treat this differently than any other media lib given its license and there never was.
Diffstat (limited to 'third_party/aom/test')
-rw-r--r--third_party/aom/test/accounting_test.cc75
-rw-r--r--third_party/aom/test/acm_random.h84
-rw-r--r--third_party/aom/test/active_map_test.cc103
-rw-r--r--third_party/aom/test/altref_test.cc97
-rw-r--r--third_party/aom/test/aom_integer_test.cc177
-rwxr-xr-xthird_party/aom/test/aomcx_set_ref.sh58
-rwxr-xr-xthird_party/aom/test/aomdec.sh147
-rwxr-xr-xthird_party/aom/test/aomenc.sh269
-rw-r--r--third_party/aom/test/aq_segment_test.cc108
-rw-r--r--third_party/aom/test/arf_freq_test.cc223
-rw-r--r--third_party/aom/test/av1_config_test.cc164
-rw-r--r--third_party/aom/test/av1_convolve_2d_test.cc249
-rw-r--r--third_party/aom/test/av1_convolve_2d_test_util.cc705
-rw-r--r--third_party/aom/test/av1_convolve_2d_test_util.h117
-rw-r--r--third_party/aom/test/av1_convolve_scale_test.cc529
-rw-r--r--third_party/aom/test/av1_encoder_parms_get_to_decoder.cc158
-rw-r--r--third_party/aom/test/av1_ext_tile_test.cc215
-rw-r--r--third_party/aom/test/av1_fwd_txfm1d_test.cc105
-rw-r--r--third_party/aom/test/av1_fwd_txfm2d_test.cc511
-rw-r--r--third_party/aom/test/av1_highbd_iht_test.cc315
-rw-r--r--third_party/aom/test/av1_horz_only_frame_superres_test.cc362
-rw-r--r--third_party/aom/test/av1_inv_txfm1d_test.cc157
-rw-r--r--third_party/aom/test/av1_inv_txfm2d_test.cc378
-rw-r--r--third_party/aom/test/av1_quantize_test.cc239
-rw-r--r--third_party/aom/test/av1_round_shift_array_test.cc129
-rw-r--r--third_party/aom/test/av1_txfm_test.cc371
-rw-r--r--third_party/aom/test/av1_txfm_test.h135
-rw-r--r--third_party/aom/test/av1_wedge_utils_test.cc390
-rwxr-xr-xthird_party/aom/test/best_encode.sh103
-rw-r--r--third_party/aom/test/binary_codes_test.cc83
-rw-r--r--third_party/aom/test/blend_a64_mask_1d_test.cc339
-rw-r--r--third_party/aom/test/blend_a64_mask_test.cc583
-rw-r--r--third_party/aom/test/blockd_test.cc122
-rw-r--r--third_party/aom/test/boolcoder_test.cc173
-rw-r--r--third_party/aom/test/borders_test.cc85
-rw-r--r--third_party/aom/test/cdef_test.cc425
-rw-r--r--third_party/aom/test/cfl_test.cc567
-rw-r--r--third_party/aom/test/clear_system_state.h31
-rw-r--r--third_party/aom/test/codec_factory.h170
-rw-r--r--third_party/aom/test/coding_path_sync.cc205
-rw-r--r--third_party/aom/test/comp_avg_pred_test.cc72
-rw-r--r--third_party/aom/test/comp_avg_pred_test.h555
-rw-r--r--third_party/aom/test/comp_mask_variance_test.cc574
-rw-r--r--third_party/aom/test/convolve_round_test.cc183
-rw-r--r--third_party/aom/test/convolve_test.cc856
-rw-r--r--third_party/aom/test/corner_match_test.cc100
-rw-r--r--third_party/aom/test/cpu_speed_test.cc180
-rw-r--r--third_party/aom/test/datarate_test.cc255
-rw-r--r--third_party/aom/test/decode_api_test.cc55
-rw-r--r--third_party/aom/test/decode_multithreaded_test.cc185
-rw-r--r--third_party/aom/test/decode_perf_test.cc246
-rw-r--r--third_party/aom/test/decode_test_driver.cc114
-rw-r--r--third_party/aom/test/decode_test_driver.h165
-rwxr-xr-xthird_party/aom/test/decode_to_md5.sh77
-rwxr-xr-xthird_party/aom/test/decode_with_drops.sh68
-rw-r--r--third_party/aom/test/divu_small_test.cc41
-rw-r--r--third_party/aom/test/dr_prediction_test.cc369
-rwxr-xr-xthird_party/aom/test/dump_obu.sh70
-rw-r--r--third_party/aom/test/ec_test.cc159
-rw-r--r--third_party/aom/test/encode_api_test.cc73
-rw-r--r--third_party/aom/test/encode_perf_test.cc188
-rw-r--r--third_party/aom/test/encode_test_driver.cc288
-rw-r--r--third_party/aom/test/encode_test_driver.h249
-rw-r--r--third_party/aom/test/encodetxb_test.cc262
-rw-r--r--third_party/aom/test/end_to_end_test.cc199
-rw-r--r--third_party/aom/test/error_block_test.cc171
-rw-r--r--third_party/aom/test/error_resilience_test.cc438
-rw-r--r--third_party/aom/test/ethread_test.cc273
-rwxr-xr-xthird_party/aom/test/examples.sh29
-rw-r--r--third_party/aom/test/external_frame_buffer_test.cc512
-rw-r--r--third_party/aom/test/fft_test.cc256
-rw-r--r--third_party/aom/test/film_grain_table_test.cc250
-rw-r--r--third_party/aom/test/filterintra_test.cc134
-rw-r--r--third_party/aom/test/frame_size_tests.cc78
-rw-r--r--third_party/aom/test/function_equivalence_test.h69
-rw-r--r--third_party/aom/test/fwht4x4_test.cc98
-rwxr-xr-xthird_party/aom/test/gviz_api.py1087
-rw-r--r--third_party/aom/test/hash_test.cc133
-rw-r--r--third_party/aom/test/hbd_metrics_test.cc239
-rw-r--r--third_party/aom/test/hiprec_convolve_test.cc62
-rw-r--r--third_party/aom/test/hiprec_convolve_test_util.cc331
-rw-r--r--third_party/aom/test/hiprec_convolve_test_util.h93
-rw-r--r--third_party/aom/test/horz_superres_test.cc322
-rw-r--r--third_party/aom/test/i420_video_source.h34
-rw-r--r--third_party/aom/test/intra_edge_test.cc337
-rw-r--r--third_party/aom/test/intrabc_test.cc168
-rw-r--r--third_party/aom/test/intrapred_test.cc266
-rw-r--r--third_party/aom/test/invalid_file_test.cc122
-rw-r--r--third_party/aom/test/ivf_video_source.h114
-rwxr-xr-xthird_party/aom/test/lightfield_test.sh98
-rw-r--r--third_party/aom/test/log2_test.cc50
-rw-r--r--third_party/aom/test/lossless_test.cc126
-rw-r--r--third_party/aom/test/lpf_test.cc627
-rw-r--r--third_party/aom/test/masked_sad_test.cc342
-rw-r--r--third_party/aom/test/masked_variance_test.cc459
-rw-r--r--third_party/aom/test/md5_helper.h76
-rw-r--r--third_party/aom/test/metrics_template.html422
-rw-r--r--third_party/aom/test/monochrome_test.cc130
-rw-r--r--third_party/aom/test/motion_vector_test.cc105
-rw-r--r--third_party/aom/test/noise_model_test.cc1343
-rw-r--r--third_party/aom/test/obmc_sad_test.cc237
-rw-r--r--third_party/aom/test/obmc_variance_test.cc345
-rw-r--r--third_party/aom/test/onyxc_int_test.cc22
-rw-r--r--third_party/aom/test/pickrst_test.cc187
-rw-r--r--third_party/aom/test/qm_test.cc81
-rw-r--r--third_party/aom/test/quantize_func_test.cc425
-rw-r--r--third_party/aom/test/reconinter_test.cc258
-rw-r--r--third_party/aom/test/register_state_check.h148
-rw-r--r--third_party/aom/test/resize_test.cc642
-rwxr-xr-xthird_party/aom/test/run_encodes.sh39
-rw-r--r--third_party/aom/test/sad_test.cc1528
-rw-r--r--third_party/aom/test/scalability_test.cc81
-rw-r--r--third_party/aom/test/scan_test.cc133
-rw-r--r--third_party/aom/test/segment_binarization_sync.cc61
-rw-r--r--third_party/aom/test/selfguided_filter_test.cc410
-rwxr-xr-xthird_party/aom/test/set_maps.sh52
-rw-r--r--third_party/aom/test/simd_avx2_test.cc15
-rw-r--r--third_party/aom/test/simd_cmp_avx2.cc15
-rw-r--r--third_party/aom/test/simd_cmp_impl.h2171
-rw-r--r--third_party/aom/test/simd_cmp_neon.cc17
-rw-r--r--third_party/aom/test/simd_cmp_sse2.cc18
-rw-r--r--third_party/aom/test/simd_cmp_sse4.cc18
-rw-r--r--third_party/aom/test/simd_cmp_ssse3.cc18
-rw-r--r--third_party/aom/test/simd_impl.h1141
-rw-r--r--third_party/aom/test/simd_neon_test.cc17
-rw-r--r--third_party/aom/test/simd_sse2_test.cc18
-rw-r--r--third_party/aom/test/simd_sse4_test.cc18
-rw-r--r--third_party/aom/test/simd_ssse3_test.cc18
-rwxr-xr-xthird_party/aom/test/simple_decoder.sh58
-rwxr-xr-xthird_party/aom/test/simple_encoder.sh53
-rw-r--r--third_party/aom/test/subtract_test.cc249
-rw-r--r--third_party/aom/test/sum_squares_test.cc228
-rw-r--r--third_party/aom/test/superframe_test.cc109
-rw-r--r--third_party/aom/test/test-data.sha1507
-rw-r--r--third_party/aom/test/test.cmake438
-rw-r--r--third_party/aom/test/test_data_download_worker.cmake46
-rw-r--r--third_party/aom/test/test_data_util.cmake598
-rw-r--r--third_party/aom/test/test_intra_pred_speed.cc1464
-rw-r--r--third_party/aom/test/test_libaom.cc74
-rw-r--r--third_party/aom/test/test_runner.cmake28
-rw-r--r--third_party/aom/test/test_vector_test.cc172
-rw-r--r--third_party/aom/test/test_vectors.cc140
-rw-r--r--third_party/aom/test/test_vectors.h26
-rw-r--r--third_party/aom/test/tile_independence_test.cc173
-rwxr-xr-xthird_party/aom/test/tools_common.sh477
-rw-r--r--third_party/aom/test/transform_test_base.h342
-rwxr-xr-xthird_party/aom/test/twopass_encoder.sh54
-rw-r--r--third_party/aom/test/util.h53
-rw-r--r--third_party/aom/test/variance_test.cc2064
-rw-r--r--third_party/aom/test/video_source.h259
-rwxr-xr-xthird_party/aom/test/visual_metrics.py466
-rw-r--r--third_party/aom/test/warp_filter_test.cc56
-rw-r--r--third_party/aom/test/warp_filter_test_util.cc480
-rw-r--r--third_party/aom/test/warp_filter_test_util.h103
-rw-r--r--third_party/aom/test/webm_video_source.h96
-rw-r--r--third_party/aom/test/wiener_test.cc280
-rw-r--r--third_party/aom/test/y4m_test.cc180
-rw-r--r--third_party/aom/test/y4m_video_source.h123
-rw-r--r--third_party/aom/test/yuv_video_source.h123
159 files changed, 0 insertions, 42085 deletions
diff --git a/third_party/aom/test/accounting_test.cc b/third_party/aom/test/accounting_test.cc
deleted file mode 100644
index 8b5c8af13..000000000
--- a/third_party/aom/test/accounting_test.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/acm_random.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/bitreader.h"
-#include "aom_dsp/bitwriter.h"
-
-using libaom_test::ACMRandom;
-
-TEST(AV1, TestAccounting) {
- const int kBufferSize = 10000;
- const int kSymbols = 1024;
- aom_writer bw;
- uint8_t bw_buffer[kBufferSize];
- aom_start_encode(&bw, bw_buffer);
- for (int i = 0; i < kSymbols; i++) {
- aom_write(&bw, 0, 32);
- aom_write(&bw, 0, 32);
- aom_write(&bw, 0, 32);
- }
- aom_stop_encode(&bw);
- aom_reader br;
- aom_reader_init(&br, bw_buffer, bw.pos);
-
- Accounting accounting;
- aom_accounting_init(&accounting);
- br.accounting = &accounting;
- for (int i = 0; i < kSymbols; i++) {
- aom_read(&br, 32, "A");
- }
- // Consecutive symbols that are the same are coalesced.
- GTEST_ASSERT_EQ(accounting.syms.num_syms, 1);
- GTEST_ASSERT_EQ(accounting.syms.syms[0].samples, (unsigned int)kSymbols);
-
- aom_accounting_reset(&accounting);
- GTEST_ASSERT_EQ(accounting.syms.num_syms, 0);
-
- // Should record 2 * kSymbols accounting symbols.
- aom_reader_init(&br, bw_buffer, bw.pos);
- br.accounting = &accounting;
- for (int i = 0; i < kSymbols; i++) {
- aom_read(&br, 32, "A");
- aom_read(&br, 32, "B");
- aom_read(&br, 32, "B");
- }
- GTEST_ASSERT_EQ(accounting.syms.num_syms, kSymbols * 2);
- uint32_t tell_frac = aom_reader_tell_frac(&br);
- for (int i = 0; i < accounting.syms.num_syms; i++) {
- tell_frac -= accounting.syms.syms[i].bits;
- }
- GTEST_ASSERT_EQ(tell_frac, 0U);
-
- GTEST_ASSERT_EQ(aom_accounting_dictionary_lookup(&accounting, "A"),
- aom_accounting_dictionary_lookup(&accounting, "A"));
-
- // Check for collisions. The current aom_accounting_hash function returns
- // the same hash code for AB and BA.
- GTEST_ASSERT_NE(aom_accounting_dictionary_lookup(&accounting, "AB"),
- aom_accounting_dictionary_lookup(&accounting, "BA"));
-}
diff --git a/third_party/aom/test/acm_random.h b/third_party/aom/test/acm_random.h
deleted file mode 100644
index 0a8317fd5..000000000
--- a/third_party/aom/test/acm_random.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_ACM_RANDOM_H_
-#define AOM_TEST_ACM_RANDOM_H_
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "aom/aom_integer.h"
-
-namespace libaom_test {
-
-class ACMRandom {
- public:
- ACMRandom() : random_(DeterministicSeed()) {}
-
- explicit ACMRandom(int seed) : random_(seed) {}
-
- void Reset(int seed) { random_.Reseed(seed); }
-
- uint32_t Rand31(void) {
- return random_.Generate(testing::internal::Random::kMaxRange);
- }
-
- uint16_t Rand16(void) {
- const uint32_t value =
- random_.Generate(testing::internal::Random::kMaxRange);
- return (value >> 15) & 0xffff;
- }
-
- int16_t Rand15Signed(void) {
- const uint32_t value =
- random_.Generate(testing::internal::Random::kMaxRange);
- return (value >> 17) & 0xffff;
- }
-
- uint16_t Rand12(void) {
- const uint32_t value =
- random_.Generate(testing::internal::Random::kMaxRange);
- // There's a bit more entropy in the upper bits of this implementation.
- return (value >> 19) & 0xfff;
- }
-
- int16_t Rand9Signed(void) {
- // Use 9 bits: values between 255 (0x0FF) and -256 (0x100).
- const uint32_t value = random_.Generate(512);
- return static_cast<int16_t>(value) - 256;
- }
-
- uint8_t Rand8(void) {
- const uint32_t value =
- random_.Generate(testing::internal::Random::kMaxRange);
- // There's a bit more entropy in the upper bits of this implementation.
- return (value >> 23) & 0xff;
- }
-
- uint8_t Rand8Extremes(void) {
- // Returns a random value near 0 or near 255, to better exercise
- // saturation behavior.
- const uint8_t r = Rand8();
- return r < 128 ? r << 4 : r >> 4;
- }
-
- int PseudoUniform(int range) { return random_.Generate(range); }
-
- int operator()(int n) { return PseudoUniform(n); }
-
- static int DeterministicSeed(void) { return 0xbaba; }
-
- private:
- testing::internal::Random random_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_ACM_RANDOM_H_
diff --git a/third_party/aom/test/active_map_test.cc b/third_party/aom/test/active_map_test.cc
deleted file mode 100644
index a2b0546ed..000000000
--- a/third_party/aom/test/active_map_test.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <climits>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-class ActiveMapTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- static const int kWidth = 208;
- static const int kHeight = 144;
-
- ActiveMapTest() : EncoderTest(GET_PARAM(0)) {}
- virtual ~ActiveMapTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- cpu_used_ = GET_PARAM(2);
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, cpu_used_);
- } else if (video->frame() == 3) {
- aom_active_map_t map = aom_active_map_t();
- /* clang-format off */
- uint8_t active_map[9 * 13] = {
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1,
- 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0,
- };
- /* clang-format on */
- map.cols = (kWidth + 15) / 16;
- map.rows = (kHeight + 15) / 16;
- ASSERT_EQ(map.cols, 13u);
- ASSERT_EQ(map.rows, 9u);
- map.active_map = active_map;
- encoder->Control(AOME_SET_ACTIVEMAP, &map);
- } else if (video->frame() == 15) {
- aom_active_map_t map = aom_active_map_t();
- map.cols = (kWidth + 15) / 16;
- map.rows = (kHeight + 15) / 16;
- map.active_map = NULL;
- encoder->Control(AOME_SET_ACTIVEMAP, &map);
- }
- }
-
- void DoTest() {
- // Validate that this non multiple of 64 wide clip encodes
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_target_bitrate = 400;
- cfg_.rc_resize_mode = 0;
- cfg_.g_pass = AOM_RC_ONE_PASS;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.kf_max_dist = 90000;
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", kWidth, kHeight, 30,
- 1, 0, 20);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-
- int cpu_used_;
-};
-
-TEST_P(ActiveMapTest, Test) { DoTest(); }
-
-class ActiveMapTestLarge : public ActiveMapTest {};
-
-TEST_P(ActiveMapTestLarge, Test) { DoTest(); }
-
-AV1_INSTANTIATE_TEST_CASE(ActiveMapTestLarge,
- ::testing::Values(::libaom_test::kRealTime),
- ::testing::Range(0, 5));
-
-AV1_INSTANTIATE_TEST_CASE(ActiveMapTest,
- ::testing::Values(::libaom_test::kRealTime),
- ::testing::Range(5, 9));
-
-} // namespace
diff --git a/third_party/aom/test/altref_test.cc b/third_party/aom/test/altref_test.cc
deleted file mode 100644
index dabb1475a..000000000
--- a/third_party/aom/test/altref_test.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-namespace {
-
-class AltRefForcedKeyTestLarge
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- AltRefForcedKeyTestLarge()
- : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
- cpu_used_(GET_PARAM(2)), forced_kf_frame_num_(1), frame_num_(0) {}
- virtual ~AltRefForcedKeyTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.g_threads = 0;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- encoder->Control(AOME_SET_CPUUSED, cpu_used_);
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
-#if CONFIG_AV1_ENCODER
- // override test default for tile columns if necessary.
- if (GET_PARAM(0) == &libaom_test::kAV1) {
- encoder->Control(AV1E_SET_TILE_COLUMNS, 6);
- }
-#endif
- }
- frame_flags_ =
- (video->frame() == forced_kf_frame_num_) ? AOM_EFLAG_FORCE_KF : 0;
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- if (frame_num_ == forced_kf_frame_num_) {
- ASSERT_TRUE(!!(pkt->data.frame.flags & AOM_FRAME_IS_KEY))
- << "Frame #" << frame_num_ << " isn't a keyframe!";
- }
- ++frame_num_;
- }
-
- ::libaom_test::TestMode encoding_mode_;
- int cpu_used_;
- unsigned int forced_kf_frame_num_;
- unsigned int frame_num_;
-};
-
-TEST_P(AltRefForcedKeyTestLarge, Frame1IsKey) {
- const aom_rational timebase = { 1, 30 };
- const int lag_values[] = { 3, 15, 25, -1 };
-
- forced_kf_frame_num_ = 1;
- for (int i = 0; lag_values[i] != -1; ++i) {
- frame_num_ = 0;
- cfg_.g_lag_in_frames = lag_values[i];
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- timebase.den, timebase.num, 0, 30);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-}
-
-TEST_P(AltRefForcedKeyTestLarge, ForcedFrameIsKey) {
- const aom_rational timebase = { 1, 30 };
- const int lag_values[] = { 3, 15, 25, -1 };
-
- for (int i = 0; lag_values[i] != -1; ++i) {
- frame_num_ = 0;
- forced_kf_frame_num_ = lag_values[i] - 1;
- cfg_.g_lag_in_frames = lag_values[i];
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- timebase.den, timebase.num, 0, 30);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-}
-
-AV1_INSTANTIATE_TEST_CASE(AltRefForcedKeyTestLarge,
- ::testing::Values(::libaom_test::kOnePassGood),
- ::testing::Values(2, 5));
-
-} // namespace
diff --git a/third_party/aom/test/aom_integer_test.cc b/third_party/aom/test/aom_integer_test.cc
deleted file mode 100644
index fe88a54e9..000000000
--- a/third_party/aom/test/aom_integer_test.cc
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "aom/aom_integer.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-const uint64_t kMaximumLeb128CodedSize = 8;
-const uint8_t kLeb128PadByte = 0x80; // Binary: 10000000
-const uint64_t kMaximumLeb128Value = UINT32_MAX;
-const uint32_t kSizeTestNumValues = 6;
-const uint32_t kSizeTestExpectedSizes[kSizeTestNumValues] = {
- 1, 1, 2, 3, 4, 5
-};
-const uint64_t kSizeTestInputs[kSizeTestNumValues] = {
- 0, 0x7f, 0x3fff, 0x1fffff, 0xffffff, 0x10000000
-};
-
-const uint8_t kOutOfRangeLeb128Value[5] = { 0x80, 0x80, 0x80, 0x80,
- 0x10 }; // UINT32_MAX + 1
-} // namespace
-
-TEST(AomLeb128, DecodeTest) {
- const size_t num_leb128_bytes = 3;
- const uint8_t leb128_bytes[num_leb128_bytes] = { 0xE5, 0x8E, 0x26 };
- const uint64_t expected_value = 0x98765; // 624485
- const size_t expected_length = 3;
- uint64_t value = ~0ULL; // make sure value is cleared by the function
- size_t length;
- ASSERT_EQ(
- aom_uleb_decode(&leb128_bytes[0], num_leb128_bytes, &value, &length), 0);
- ASSERT_EQ(expected_value, value);
- ASSERT_EQ(expected_length, length);
-
- // Make sure the decoder stops on the last marked LEB128 byte.
- aom_uleb_decode(&leb128_bytes[0], num_leb128_bytes + 1, &value, &length);
- ASSERT_EQ(expected_value, value);
- ASSERT_EQ(expected_length, length);
-}
-
-TEST(AomLeb128, EncodeTest) {
- const uint32_t test_value = 0x98765; // 624485
- const uint8_t expected_bytes[3] = { 0xE5, 0x8E, 0x26 };
- const size_t kWriteBufferSize = 4;
- uint8_t write_buffer[kWriteBufferSize] = { 0 };
- size_t bytes_written = 0;
- ASSERT_EQ(aom_uleb_encode(test_value, kWriteBufferSize, &write_buffer[0],
- &bytes_written),
- 0);
- ASSERT_EQ(bytes_written, 3u);
- for (size_t i = 0; i < bytes_written; ++i) {
- ASSERT_EQ(write_buffer[i], expected_bytes[i]);
- }
-}
-
-TEST(AomLeb128, EncodeDecodeTest) {
- const uint32_t value = 0x98765; // 624485
- const size_t kWriteBufferSize = 4;
- uint8_t write_buffer[kWriteBufferSize] = { 0 };
- size_t bytes_written = 0;
- ASSERT_EQ(aom_uleb_encode(value, kWriteBufferSize, &write_buffer[0],
- &bytes_written),
- 0);
- ASSERT_EQ(bytes_written, 3u);
- uint64_t decoded_value;
- size_t decoded_length;
- aom_uleb_decode(&write_buffer[0], bytes_written, &decoded_value,
- &decoded_length);
- ASSERT_EQ(value, decoded_value);
- ASSERT_EQ(bytes_written, decoded_length);
-}
-
-TEST(AomLeb128, FixedSizeEncodeTest) {
- const uint32_t test_value = 0x123;
- const uint8_t expected_bytes[4] = { 0xa3, 0x82, 0x80, 0x00 };
- const size_t kWriteBufferSize = 4;
- uint8_t write_buffer[kWriteBufferSize] = { 0 };
- size_t bytes_written = 0;
- ASSERT_EQ(0, aom_uleb_encode_fixed_size(test_value, kWriteBufferSize,
- kWriteBufferSize, &write_buffer[0],
- &bytes_written));
- ASSERT_EQ(kWriteBufferSize, bytes_written);
- for (size_t i = 0; i < bytes_written; ++i) {
- ASSERT_EQ(write_buffer[i], expected_bytes[i]);
- }
-}
-
-TEST(AomLeb128, FixedSizeEncodeDecodeTest) {
- const uint32_t value = 0x1;
- const size_t kWriteBufferSize = 4;
- uint8_t write_buffer[kWriteBufferSize] = { 0 };
- size_t bytes_written = 0;
- ASSERT_EQ(
- aom_uleb_encode_fixed_size(value, kWriteBufferSize, kWriteBufferSize,
- &write_buffer[0], &bytes_written),
- 0);
- ASSERT_EQ(bytes_written, 4u);
- uint64_t decoded_value;
- size_t decoded_length;
- aom_uleb_decode(&write_buffer[0], bytes_written, &decoded_value,
- &decoded_length);
- ASSERT_EQ(value, decoded_value);
- ASSERT_EQ(bytes_written, decoded_length);
-}
-
-TEST(AomLeb128, SizeTest) {
- for (size_t i = 0; i < kSizeTestNumValues; ++i) {
- ASSERT_EQ(kSizeTestExpectedSizes[i],
- aom_uleb_size_in_bytes(kSizeTestInputs[i]));
- }
-}
-
-TEST(AomLeb128, DecodeFailTest) {
- // Input buffer containing what would be a valid 9 byte LEB128 encoded
- // unsigned integer.
- const uint8_t kAllPadBytesBuffer[kMaximumLeb128CodedSize + 1] = {
- kLeb128PadByte, kLeb128PadByte, kLeb128PadByte,
- kLeb128PadByte, kLeb128PadByte, kLeb128PadByte,
- kLeb128PadByte, kLeb128PadByte, 0
- };
- uint64_t decoded_value;
-
- // Test that decode fails when result would be valid 9 byte integer.
- ASSERT_EQ(aom_uleb_decode(&kAllPadBytesBuffer[0], kMaximumLeb128CodedSize + 1,
- &decoded_value, NULL),
- -1);
-
- // Test that encoded value missing terminator byte within available buffer
- // range causes decode error.
- ASSERT_EQ(aom_uleb_decode(&kAllPadBytesBuffer[0], kMaximumLeb128CodedSize,
- &decoded_value, NULL),
- -1);
-
- // Test that LEB128 input that decodes to a value larger than 32-bits fails.
- size_t value_size = 0;
- ASSERT_EQ(aom_uleb_decode(&kOutOfRangeLeb128Value[0],
- sizeof(kOutOfRangeLeb128Value), &decoded_value,
- &value_size),
- -1);
-}
-
-TEST(AomLeb128, EncodeFailTest) {
- const size_t kWriteBufferSize = 4;
- const uint32_t kValidTestValue = 1;
- uint8_t write_buffer[kWriteBufferSize] = { 0 };
- size_t coded_size = 0;
- ASSERT_EQ(
- aom_uleb_encode(kValidTestValue, kWriteBufferSize, NULL, &coded_size),
- -1);
- ASSERT_EQ(aom_uleb_encode(kValidTestValue, kWriteBufferSize, &write_buffer[0],
- NULL),
- -1);
-
- const uint32_t kValueOutOfRangeForBuffer = 0xFFFFFFFF;
- ASSERT_EQ(aom_uleb_encode(kValueOutOfRangeForBuffer, kWriteBufferSize,
- &write_buffer[0], &coded_size),
- -1);
-
- const uint64_t kValueOutOfRange = kMaximumLeb128Value + 1;
- ASSERT_EQ(aom_uleb_encode(kValueOutOfRange, kWriteBufferSize,
- &write_buffer[0], &coded_size),
- -1);
-
- const size_t kPadSizeOutOfRange = 5;
- ASSERT_EQ(aom_uleb_encode_fixed_size(kValidTestValue, kWriteBufferSize,
- kPadSizeOutOfRange, &write_buffer[0],
- &coded_size),
- -1);
-}
diff --git a/third_party/aom/test/aomcx_set_ref.sh b/third_party/aom/test/aomcx_set_ref.sh
deleted file mode 100755
index f51b73c58..000000000
--- a/third_party/aom/test/aomcx_set_ref.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom aom_cx_set_ref example. To add new tests to this
-## file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to aom_cx_set_ref_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $YUV_RAW_INPUT is required.
-aom_cx_set_ref_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
-}
-
-# Runs aom_cx_set_ref and updates the reference frame before encoding frame 90.
-# $1 is the codec name, which aom_cx_set_ref does not support at present: It's
-# currently used only to name the output file.
-# TODO(tomfinegan): Pass the codec param once the example is updated to support
-# AV1.
-aom_set_ref() {
- local encoder="${LIBAOM_BIN_PATH}/aom_cx_set_ref${AOM_TEST_EXE_SUFFIX}"
- local codec="$1"
- local output_file="${AOM_TEST_OUTPUT_DIR}/aom_cx_set_ref_${codec}.ivf"
- local ref_frame_num=4
- local limit=10
- if [ ! -x "${encoder}" ]; then
- elog "${encoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \
- "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" \
- "${ref_frame_num}" "${limit}" ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-aom_cx_set_ref_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- aom_set_ref av1 || return 1
- fi
-}
-
-aom_cx_set_ref_tests="aom_cx_set_ref_av1"
-
-run_tests aom_cx_set_ref_verify_environment "${aom_cx_set_ref_tests}"
-
diff --git a/third_party/aom/test/aomdec.sh b/third_party/aom/test/aomdec.sh
deleted file mode 100755
index 927142287..000000000
--- a/third_party/aom/test/aomdec.sh
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests aomdec. To add new tests to this file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to aomdec_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: Make sure input is available.
-aomdec_verify_environment() {
- if [ "$(av1_encode_available)" != "yes" ] ; then
- if [ ! -e "${AV1_IVF_FILE}" ] || \
- [ ! -e "${AV1_OBU_ANNEXB_FILE}" ] || \
- [ ! -e "${AV1_OBU_SEC5_FILE}" ] || \
- [ ! -e "${AV1_WEBM_FILE}" ]; then
- elog "Libaom test data must exist before running this test script when " \
- " encoding is disabled. "
- return 1
- fi
- fi
- if [ -z "$(aom_tool_path aomdec)" ]; then
- elog "aomdec not found. It must exist in LIBAOM_BIN_PATH or its parent."
- return 1
- fi
-}
-
-# Wrapper function for running aomdec with pipe input. Requires that
-# LIBAOM_BIN_PATH points to the directory containing aomdec. $1 is used as the
-# input file path and shifted away. All remaining parameters are passed through
-# to aomdec.
-aomdec_pipe() {
- local input="$1"
- shift
- if [ ! -e "${input}" ]; then
- elog "Input file ($input) missing in aomdec_pipe()"
- return 1
- fi
- cat "${file}" | aomdec - "$@" ${devnull}
-}
-
-
-# Wrapper function for running aomdec. Requires that LIBAOM_BIN_PATH points to
-# the directory containing aomdec. $1 one is used as the input file path and
-# shifted away. All remaining parameters are passed through to aomdec.
-aomdec() {
- local decoder="$(aom_tool_path aomdec)"
- local input="$1"
- shift
- eval "${AOM_TEST_PREFIX}" "${decoder}" "$input" "$@" ${devnull}
-}
-
-aomdec_can_decode_av1() {
- if [ "$(av1_decode_available)" = "yes" ]; then
- echo yes
- fi
-}
-
-aomdec_av1_ivf() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="${AV1_IVF_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --ivf
- fi
- aomdec "${AV1_IVF_FILE}" --summary --noblit
- fi
-}
-
-aomdec_av1_ivf_error_resilient() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="av1.error-resilient.ivf"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --ivf --error-resilient=1
- fi
- aomdec "${file}" --summary --noblit
- fi
-}
-
-aomdec_av1_ivf_multithread() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="${AV1_IVF_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --ivf
- fi
- for threads in 2 3 4 5 6 7 8; do
- aomdec "${file}" --summary --noblit --threads=$threads
- done
- fi
-}
-
-aomdec_aom_ivf_pipe_input() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="${AV1_IVF_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --ivf
- fi
- aomdec_pipe "${AV1_IVF_FILE}" --summary --noblit
- fi
-}
-
-aomdec_av1_obu_annexb() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="${AV1_OBU_ANNEXB_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --obu --annexb=1
- fi
- aomdec "${file}" --summary --noblit --annexb
- fi
-}
-
-aomdec_av1_obu_section5() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
- local file="${AV1_OBU_SEC5_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}" --obu
- fi
- aomdec "${file}" --summary --noblit
- fi
-}
-
-aomdec_av1_webm() {
- if [ "$(aomdec_can_decode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- local file="${AV1_WEBM_FILE}"
- if [ ! -e "${file}" ]; then
- encode_yuv_raw_input_av1 "${file}"
- fi
- aomdec "${AV1_WEBM_FILE}" --summary --noblit
- fi
-}
-
-aomdec_tests="aomdec_av1_ivf
- aomdec_av1_ivf_error_resilient
- aomdec_av1_ivf_multithread
- aomdec_aom_ivf_pipe_input
- aomdec_av1_obu_annexb
- aomdec_av1_obu_section5
- aomdec_av1_webm"
-
-run_tests aomdec_verify_environment "${aomdec_tests}"
diff --git a/third_party/aom/test/aomenc.sh b/third_party/aom/test/aomenc.sh
deleted file mode 100755
index b030397a3..000000000
--- a/third_party/aom/test/aomenc.sh
+++ /dev/null
@@ -1,269 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests aomenc using hantro_collage_w352h288.yuv as input. To add
-## new tests to this file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to aomenc_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: Make sure input is available.
-aomenc_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- elog "The file ${YUV_RAW_INPUT##*/} must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- if [ ! -e "${Y4M_NOSQ_PAR_INPUT}" ]; then
- elog "The file ${Y4M_NOSQ_PAR_INPUT##*/} must exist in"
- elog "LIBAOM_TEST_DATA_PATH."
- return 1
- fi
- fi
- if [ -z "$(aom_tool_path aomenc)" ]; then
- elog "aomenc not found. It must exist in LIBAOM_BIN_PATH or its parent."
- return 1
- fi
-}
-
-aomenc_can_encode_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- echo yes
- fi
-}
-
-aomenc_can_encode_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- echo yes
- fi
-}
-
-# Utilities that echo aomenc input file parameters.
-y4m_input_non_square_par() {
- echo ""${Y4M_NOSQ_PAR_INPUT}""
-}
-
-y4m_input_720p() {
- echo ""${Y4M_720P_INPUT}""
-}
-
-# Wrapper function for running aomenc with pipe input. Requires that
-# LIBAOM_BIN_PATH points to the directory containing aomenc. $1 is used as the
-# input file path and shifted away. All remaining parameters are passed through
-# to aomenc.
-aomenc_pipe() {
- local encoder="$(aom_tool_path aomenc)"
- local input="$1"
- shift
- cat "${input}" | eval "${AOM_TEST_PREFIX}" "${encoder}" - \
- --test-decode=fatal \
- "$@" ${devnull}
-}
-
-# Wrapper function for running aomenc. Requires that LIBAOM_BIN_PATH points to
-# the directory containing aomenc. $1 one is used as the input file path and
-# shifted away. All remaining parameters are passed through to aomenc.
-aomenc() {
- local encoder="$(aom_tool_path aomenc)"
- local input="$1"
- shift
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${input}" \
- --test-decode=fatal \
- "$@" ${devnull}
-}
-
-aomenc_av1_ivf() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- local output="${AV1_IVF_FILE}"
- if [ -e "${AV1_IVF_FILE}" ]; then
- output="${AOM_TEST_OUTPUT_DIR}/av1_test.ivf"
- fi
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --ivf \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_obu_annexb() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- local output="${AV1_OBU_ANNEXB_FILE}"
- if [ -e "${AV1_OBU_ANNEXB_FILE}" ]; then
- output="${AOM_TEST_OUTPUT_DIR}/av1_test.annexb.obu"
- fi
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --obu \
- --annexb=1 \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_obu_section5() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- local output="${AV1_OBU_SEC5_FILE}"
- if [ -e "${AV1_OBU_SEC5_FILE}" ]; then
- output="${AOM_TEST_OUTPUT_DIR}/av1_test.section5.obu"
- fi
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --obu \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_webm() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- local output="${AV1_WEBM_FILE}"
- if [ -e "${AV1_WEBM_FILE}" ]; then
- output="${AOM_TEST_OUTPUT_DIR}/av1_test.webm"
- fi
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_webm_1pass() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- local output="${AOM_TEST_OUTPUT_DIR}/av1_test.webm"
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --passes=1 \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_ivf_lossless() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- local output="${AOM_TEST_OUTPUT_DIR}/av1_lossless.ivf"
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --ivf \
- --output="${output}" \
- --lossless=1
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_ivf_minq0_maxq0() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ]; then
- local output="${AOM_TEST_OUTPUT_DIR}/av1_lossless_minq0_maxq0.ivf"
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --ivf \
- --output="${output}" \
- --min-q=0 \
- --max-q=0
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_webm_lag5_frames10() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- local lag_total_frames=10
- local lag_frames=5
- local output="${AOM_TEST_OUTPUT_DIR}/av1_lag5_frames10.webm"
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --limit=${lag_total_frames} \
- --lag-in-frames=${lag_frames} \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-# TODO(fgalligan): Test that DisplayWidth is different than video width.
-aomenc_av1_webm_non_square_par() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- local output="${AOM_TEST_OUTPUT_DIR}/av1_non_square_par.webm"
- aomenc $(y4m_input_non_square_par) \
- $(aomenc_encode_test_fast_params) \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-aomenc_av1_webm_cdf_update_mode() {
- if [ "$(aomenc_can_encode_av1)" = "yes" ] && \
- [ "$(webm_io_available)" = "yes" ]; then
- for mode in 0 1 2; do
- local output="${AOM_TEST_OUTPUT_DIR}/cdf_mode_${mode}.webm"
- aomenc $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --cdf-update-mode=${mode} \
- --output="${output}"
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- done
- fi
-}
-
-aomenc_tests="aomenc_av1_ivf
- aomenc_av1_obu_annexb
- aomenc_av1_obu_section5
- aomenc_av1_webm
- aomenc_av1_webm_1pass
- aomenc_av1_ivf_lossless
- aomenc_av1_ivf_minq0_maxq0
- aomenc_av1_webm_lag5_frames10
- aomenc_av1_webm_non_square_par
- aomenc_av1_webm_cdf_update_mode"
-
-run_tests aomenc_verify_environment "${aomenc_tests}"
diff --git a/third_party/aom/test/aq_segment_test.cc b/third_party/aom/test/aq_segment_test.cc
deleted file mode 100644
index bbb5027d4..000000000
--- a/third_party/aom/test/aq_segment_test.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "config/aom_config.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-class AqSegmentTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- AqSegmentTest() : EncoderTest(GET_PARAM(0)) {}
- virtual ~AqSegmentTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- set_cpu_used_ = GET_PARAM(2);
- aq_mode_ = 0;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- encoder->Control(AV1E_SET_AQ_MODE, aq_mode_);
- encoder->Control(AV1E_SET_DELTAQ_MODE, deltaq_mode_);
- encoder->Control(AOME_SET_MAX_INTRA_BITRATE_PCT, 100);
- }
- }
-
- void DoTest(int aq_mode) {
- aq_mode_ = aq_mode;
- deltaq_mode_ = 0;
- cfg_.kf_max_dist = 12;
- cfg_.rc_min_quantizer = 8;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.g_lag_in_frames = 6;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 500;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_target_bitrate = 300;
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352,
- 288, 30, 1, 0, 15);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-
- int set_cpu_used_;
- int aq_mode_;
- int deltaq_mode_;
-};
-
-// Validate that this AQ segmentation mode (AQ=1, variance_ap)
-// encodes and decodes without a mismatch.
-TEST_P(AqSegmentTest, TestNoMisMatchAQ1) { DoTest(1); }
-
-// Validate that this AQ segmentation mode (AQ=2, complexity_aq)
-// encodes and decodes without a mismatch.
-TEST_P(AqSegmentTest, TestNoMisMatchAQ2) { DoTest(2); }
-
-// Validate that this AQ segmentation mode (AQ=3, cyclic_refresh_aq)
-// encodes and decodes without a mismatch.
-TEST_P(AqSegmentTest, TestNoMisMatchAQ3) { DoTest(3); }
-
-class AqSegmentTestLarge : public AqSegmentTest {};
-
-TEST_P(AqSegmentTestLarge, TestNoMisMatchAQ1) { DoTest(1); }
-
-TEST_P(AqSegmentTestLarge, TestNoMisMatchAQ2) { DoTest(2); }
-
-TEST_P(AqSegmentTestLarge, TestNoMisMatchAQ3) { DoTest(3); }
-
-// Validate that this delta q mode
-// encodes and decodes without a mismatch.
-TEST_P(AqSegmentTest, TestNoMisMatchExtDeltaQ) {
- cfg_.rc_end_usage = AOM_CQ;
- aq_mode_ = 0;
- deltaq_mode_ = 2;
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 15);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-AV1_INSTANTIATE_TEST_CASE(AqSegmentTest,
- ::testing::Values(::libaom_test::kRealTime,
- ::libaom_test::kOnePassGood),
- ::testing::Range(5, 9));
-AV1_INSTANTIATE_TEST_CASE(AqSegmentTestLarge,
- ::testing::Values(::libaom_test::kRealTime,
- ::libaom_test::kOnePassGood),
- ::testing::Range(3, 5));
-} // namespace
diff --git a/third_party/aom/test/arf_freq_test.cc b/third_party/aom/test/arf_freq_test.cc
deleted file mode 100644
index 083f4022f..000000000
--- a/third_party/aom/test/arf_freq_test.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "test/yuv_video_source.h"
-#include "av1/encoder/ratectrl.h"
-
-namespace {
-
-const unsigned int kFrames = 100;
-const int kBitrate = 500;
-
-#define ARF_NOT_SEEN 1000001
-#define ARF_SEEN_ONCE 1000000
-
-typedef struct {
- const char *filename;
- unsigned int width;
- unsigned int height;
- unsigned int framerate_num;
- unsigned int framerate_den;
- unsigned int input_bit_depth;
- aom_img_fmt fmt;
- aom_bit_depth_t bit_depth;
- unsigned int profile;
-} TestVideoParam;
-
-typedef struct {
- libaom_test::TestMode mode;
- int cpu_used;
-} TestEncodeParam;
-
-const TestVideoParam kTestVectors[] = {
- // artificially increase framerate to trigger default check
- { "hantro_collage_w352h288.yuv", 352, 288, 5000, 1, 8, AOM_IMG_FMT_I420,
- AOM_BITS_8, 0 },
- { "hantro_collage_w352h288.yuv", 352, 288, 30, 1, 8, AOM_IMG_FMT_I420,
- AOM_BITS_8, 0 },
- { "rush_hour_444.y4m", 352, 288, 30, 1, 8, AOM_IMG_FMT_I444, AOM_BITS_8, 1 },
- // Add list of profile 2/3 test videos here ...
-};
-
-const TestEncodeParam kEncodeVectors[] = {
- { ::libaom_test::kOnePassGood, 2 }, { ::libaom_test::kOnePassGood, 5 },
- { ::libaom_test::kTwoPassGood, 1 }, { ::libaom_test::kTwoPassGood, 2 },
- { ::libaom_test::kTwoPassGood, 5 }, { ::libaom_test::kRealTime, 5 },
-};
-
-const int kMinArfVectors[] = {
- // NOTE: 0 refers to the default built-in logic in:
- // av1_rc_get_default_min_gf_interval(...)
- 0, 4, 8, 12, 15
-};
-
-int is_extension_y4m(const char *filename) {
- const char *dot = strrchr(filename, '.');
- if (!dot || dot == filename)
- return 0;
- else
- return !strcmp(dot, ".y4m");
-}
-
-class ArfFreqTestLarge
- : public ::libaom_test::CodecTestWith3Params<TestVideoParam,
- TestEncodeParam, int>,
- public ::libaom_test::EncoderTest {
- protected:
- ArfFreqTestLarge()
- : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(1)),
- test_encode_param_(GET_PARAM(2)), min_arf_requested_(GET_PARAM(3)) {}
-
- virtual ~ArfFreqTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(test_encode_param_.mode);
- if (test_encode_param_.mode != ::libaom_test::kRealTime) {
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_end_usage = AOM_VBR;
- } else {
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- }
- }
-
- virtual void BeginPassHook(unsigned int) {
- min_run_ = ARF_NOT_SEEN;
- run_of_visible_frames_ = 0;
- }
-
- int GetNumFramesInPkt(const aom_codec_cx_pkt_t *pkt) {
- const uint8_t *buffer = reinterpret_cast<uint8_t *>(pkt->data.frame.buf);
- const uint8_t marker = buffer[pkt->data.frame.sz - 1];
- const int mag = ((marker >> 3) & 3) + 1;
- int frames = (marker & 0x7) + 1;
- const unsigned int index_sz = 2 + mag * frames;
- // Check for superframe or not.
- // Assume superframe has only one visible frame, the rest being
- // invisible. If superframe index is not found, then there is only
- // one frame.
- if (!((marker & 0xe0) == 0xc0 && pkt->data.frame.sz >= index_sz &&
- buffer[pkt->data.frame.sz - index_sz] == marker)) {
- frames = 1;
- }
- return frames;
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- if (pkt->kind != AOM_CODEC_CX_FRAME_PKT) return;
- const int frames = GetNumFramesInPkt(pkt);
- if (frames == 1) {
- run_of_visible_frames_++;
- } else if (frames == 2) {
- if (min_run_ == ARF_NOT_SEEN) {
- min_run_ = ARF_SEEN_ONCE;
- } else if (min_run_ == ARF_SEEN_ONCE ||
- run_of_visible_frames_ < min_run_) {
- min_run_ = run_of_visible_frames_;
- }
- run_of_visible_frames_ = 1;
- } else {
- min_run_ = 0;
- run_of_visible_frames_ = 1;
- }
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AV1E_SET_TILE_COLUMNS, 4);
- encoder->Control(AOME_SET_CPUUSED, test_encode_param_.cpu_used);
- encoder->Control(AV1E_SET_MIN_GF_INTERVAL, min_arf_requested_);
- if (test_encode_param_.mode != ::libaom_test::kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
- }
-
- int GetMinVisibleRun() const { return min_run_; }
-
- int GetMinArfDistanceRequested() const {
- if (min_arf_requested_)
- return min_arf_requested_;
- else
- return av1_rc_get_default_min_gf_interval(
- test_video_param_.width, test_video_param_.height,
- (double)test_video_param_.framerate_num /
- test_video_param_.framerate_den);
- }
-
- TestVideoParam test_video_param_;
- TestEncodeParam test_encode_param_;
-
- private:
- int min_arf_requested_;
- int min_run_;
- int run_of_visible_frames_;
-};
-
-TEST_P(ArfFreqTestLarge, MinArfFreqTest) {
- cfg_.rc_target_bitrate = kBitrate;
- cfg_.g_error_resilient = 0;
- cfg_.g_profile = test_video_param_.profile;
- cfg_.g_input_bit_depth = test_video_param_.input_bit_depth;
- cfg_.g_bit_depth = test_video_param_.bit_depth;
- init_flags_ = AOM_CODEC_USE_PSNR;
- if (cfg_.g_bit_depth > 8) init_flags_ |= AOM_CODEC_USE_HIGHBITDEPTH;
-
- testing::internal::scoped_ptr<libaom_test::VideoSource> video;
- if (is_extension_y4m(test_video_param_.filename)) {
- video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
- kFrames));
- } else {
- video.reset(new libaom_test::YUVVideoSource(
- test_video_param_.filename, test_video_param_.fmt,
- test_video_param_.width, test_video_param_.height,
- test_video_param_.framerate_num, test_video_param_.framerate_den, 0,
- kFrames));
- }
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
- const int min_run = GetMinVisibleRun();
- const int min_arf_dist_requested = GetMinArfDistanceRequested();
- if (min_run != ARF_NOT_SEEN && min_run != ARF_SEEN_ONCE) {
- const int min_arf_dist = min_run + 1;
- EXPECT_GE(min_arf_dist, min_arf_dist_requested);
- }
-}
-
-#if CONFIG_AV1_ENCODER
-// TODO(angiebird): 25-29 fail in high bitdepth mode.
-// TODO(zoeliu): This ArfFreqTest does not work with BWDREF_FRAME, as
-// BWDREF_FRAME is also a non-show frame, and the minimum run between two
-// consecutive BWDREF_FRAME's may vary between 1 and any arbitrary positive
-// number as long as it does not exceed the gf_group interval.
-INSTANTIATE_TEST_CASE_P(
- DISABLED_AV1, ArfFreqTestLarge,
- ::testing::Combine(
- ::testing::Values(
- static_cast<const libaom_test::CodecFactory *>(&libaom_test::kAV1)),
- ::testing::ValuesIn(kTestVectors), ::testing::ValuesIn(kEncodeVectors),
- ::testing::ValuesIn(kMinArfVectors)));
-#endif // CONFIG_AV1_ENCODER
-} // namespace
diff --git a/third_party/aom/test/av1_config_test.cc b/third_party/aom/test/av1_config_test.cc
deleted file mode 100644
index e2f2c5390..000000000
--- a/third_party/aom/test/av1_config_test.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include <string.h>
-
-#include "common/av1_config.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-//
-// Input buffers containing exactly one Sequence Header OBU.
-//
-// Each buffer is named according to the OBU storage format (Annex-B vs Low
-// Overhead Bitstream Format) and the type of Sequence Header OBU ("Full"
-// Sequence Header OBUs vs Sequence Header OBUs with the
-// reduced_still_image_flag set).
-//
-const uint8_t kAnnexBFullSequenceHeaderObu[] = {
- 0x0c, 0x08, 0x00, 0x00, 0x00, 0x04, 0x45, 0x7e, 0x3e, 0xff, 0xfc, 0xc0, 0x20
-};
-const uint8_t kAnnexBReducedStillImageSequenceHeaderObu[] = {
- 0x08, 0x08, 0x18, 0x22, 0x2b, 0xf1, 0xfe, 0xc0, 0x20
-};
-
-const uint8_t kLobfFullSequenceHeaderObu[] = {
- 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x45, 0x7e, 0x3e, 0xff, 0xfc, 0xc0, 0x20
-};
-
-const uint8_t kLobfReducedStillImageSequenceHeaderObu[] = {
- 0x0a, 0x07, 0x18, 0x22, 0x2b, 0xf1, 0xfe, 0xc0, 0x20
-};
-
-const uint8_t kAv1cAllZero[] = { 0, 0, 0, 0 };
-
-// The size of AV1 config when no configOBUs are present at the end of the
-// configuration structure.
-const size_t kAv1cNoConfigObusSize = 4;
-
-bool VerifyAv1c(const uint8_t *const obu_buffer, size_t obu_buffer_length,
- bool is_annexb) {
- Av1Config av1_config;
- memset(&av1_config, 0, sizeof(av1_config));
- bool parse_ok = get_av1config_from_obu(obu_buffer, obu_buffer_length,
- is_annexb, &av1_config) == 0;
- if (parse_ok) {
- EXPECT_EQ(1, av1_config.marker);
- EXPECT_EQ(1, av1_config.version);
- EXPECT_EQ(0, av1_config.seq_profile);
- EXPECT_EQ(0, av1_config.seq_level_idx_0);
- EXPECT_EQ(0, av1_config.seq_tier_0);
- EXPECT_EQ(0, av1_config.high_bitdepth);
- EXPECT_EQ(0, av1_config.twelve_bit);
- EXPECT_EQ(0, av1_config.monochrome);
- EXPECT_EQ(1, av1_config.chroma_subsampling_x);
- EXPECT_EQ(1, av1_config.chroma_subsampling_y);
- EXPECT_EQ(0, av1_config.chroma_sample_position);
- EXPECT_EQ(0, av1_config.initial_presentation_delay_present);
- EXPECT_EQ(0, av1_config.initial_presentation_delay_minus_one);
- }
- return parse_ok && ::testing::Test::HasFailure() == false;
-}
-
-TEST(Av1Config, ObuInvalidInputs) {
- Av1Config av1_config;
- memset(&av1_config, 0, sizeof(av1_config));
- ASSERT_EQ(-1, get_av1config_from_obu(NULL, 0, 0, NULL));
- ASSERT_EQ(-1,
- get_av1config_from_obu(&kLobfFullSequenceHeaderObu[0], 0, 0, NULL));
- ASSERT_EQ(
- -1, get_av1config_from_obu(&kLobfFullSequenceHeaderObu[0],
- sizeof(kLobfFullSequenceHeaderObu), 0, NULL));
- ASSERT_EQ(-1, get_av1config_from_obu(NULL, sizeof(kLobfFullSequenceHeaderObu),
- 0, NULL));
- ASSERT_EQ(-1, get_av1config_from_obu(&kLobfFullSequenceHeaderObu[0], 0, 0,
- &av1_config));
-}
-
-TEST(Av1Config, ReadInvalidInputs) {
- Av1Config av1_config;
- memset(&av1_config, 0, sizeof(av1_config));
- size_t bytes_read = 0;
- ASSERT_EQ(-1, read_av1config(NULL, 0, NULL, NULL));
- ASSERT_EQ(-1, read_av1config(NULL, 4, NULL, NULL));
- ASSERT_EQ(-1, read_av1config(&kAv1cAllZero[0], 0, NULL, NULL));
- ASSERT_EQ(-1, read_av1config(&kAv1cAllZero[0], 4, &bytes_read, NULL));
- ASSERT_EQ(-1, read_av1config(NULL, 4, &bytes_read, &av1_config));
-}
-
-TEST(Av1Config, WriteInvalidInputs) {
- Av1Config av1_config;
- memset(&av1_config, 0, sizeof(av1_config));
- size_t bytes_written = 0;
- uint8_t av1c_buffer[4] = { 0 };
- ASSERT_EQ(-1, write_av1config(NULL, 0, NULL, NULL));
- ASSERT_EQ(-1, write_av1config(&av1_config, 0, NULL, NULL));
- ASSERT_EQ(-1, write_av1config(&av1_config, 0, &bytes_written, NULL));
-
- ASSERT_EQ(-1,
- write_av1config(&av1_config, 0, &bytes_written, &av1c_buffer[0]));
- ASSERT_EQ(-1, write_av1config(&av1_config, 4, &bytes_written, NULL));
-}
-
-TEST(Av1Config, GetAv1ConfigFromLobfObu) {
- // Test parsing of a Sequence Header OBU with the reduced_still_picture_header
- // unset-- aka a full Sequence Header OBU.
- ASSERT_TRUE(VerifyAv1c(kLobfFullSequenceHeaderObu,
- sizeof(kLobfFullSequenceHeaderObu), false));
-
- // Test parsing of a reduced still image Sequence Header OBU.
- ASSERT_TRUE(VerifyAv1c(kLobfReducedStillImageSequenceHeaderObu,
- sizeof(kLobfReducedStillImageSequenceHeaderObu),
- false));
-}
-
-TEST(Av1Config, GetAv1ConfigFromAnnexBObu) {
- // Test parsing of a Sequence Header OBU with the reduced_still_picture_header
- // unset-- aka a full Sequence Header OBU.
- ASSERT_TRUE(VerifyAv1c(kAnnexBFullSequenceHeaderObu,
- sizeof(kAnnexBFullSequenceHeaderObu), true));
-
- // Test parsing of a reduced still image Sequence Header OBU.
- ASSERT_TRUE(VerifyAv1c(kAnnexBReducedStillImageSequenceHeaderObu,
- sizeof(kAnnexBReducedStillImageSequenceHeaderObu),
- true));
-}
-
-TEST(Av1Config, ReadWriteConfig) {
- Av1Config av1_config;
- memset(&av1_config, 0, sizeof(av1_config));
-
- // Test writing out the AV1 config.
- size_t bytes_written = 0;
- uint8_t av1c_buffer[4] = { 0 };
- ASSERT_EQ(0, write_av1config(&av1_config, sizeof(av1c_buffer), &bytes_written,
- &av1c_buffer[0]));
- ASSERT_EQ(kAv1cNoConfigObusSize, bytes_written);
- for (size_t i = 0; i < kAv1cNoConfigObusSize; ++i) {
- ASSERT_EQ(kAv1cAllZero[i], av1c_buffer[i])
- << "Mismatch in output Av1Config at offset=" << i;
- }
-
- // Test reading the AV1 config.
- size_t bytes_read = 0;
- ASSERT_EQ(0, read_av1config(&kAv1cAllZero[0], sizeof(kAv1cAllZero),
- &bytes_read, &av1_config));
- ASSERT_EQ(kAv1cNoConfigObusSize, bytes_read);
- ASSERT_EQ(0, write_av1config(&av1_config, sizeof(av1c_buffer), &bytes_written,
- &av1c_buffer[0]));
- for (size_t i = 0; i < kAv1cNoConfigObusSize; ++i) {
- ASSERT_EQ(kAv1cAllZero[i], av1c_buffer[i])
- << "Mismatch in output Av1Config at offset=" << i;
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/av1_convolve_2d_test.cc b/third_party/aom/test/av1_convolve_2d_test.cc
deleted file mode 100644
index 03286260e..000000000
--- a/third_party/aom/test/av1_convolve_2d_test.cc
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/av1_convolve_2d_test_util.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-using libaom_test::AV1Convolve2D::AV1Convolve2DSrTest;
-using libaom_test::AV1Convolve2D::AV1JntConvolve2DTest;
-using libaom_test::AV1HighbdConvolve2D::AV1HighbdConvolve2DSrTest;
-using libaom_test::AV1HighbdConvolve2D::AV1HighbdJntConvolve2DTest;
-namespace {
-
-TEST_P(AV1Convolve2DSrTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(0)); }
-
-TEST_P(AV1Convolve2DSrTest, CheckOutput) { RunCheckOutput(GET_PARAM(0)); }
-
-INSTANTIATE_TEST_CASE_P(
- C_COPY, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_2d_copy_sr_c, 0, 0));
-INSTANTIATE_TEST_CASE_P(
- C_X, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_x_sr_c, 1, 0));
-INSTANTIATE_TEST_CASE_P(
- C_Y, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_y_sr_c, 0, 1));
-INSTANTIATE_TEST_CASE_P(
- C, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_2d_sr_c, 1, 1));
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2_COPY, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_convolve_2d_copy_sr_sse2, 0, 0));
-INSTANTIATE_TEST_CASE_P(
- SSE2_X, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_x_sr_sse2, 1, 0));
-INSTANTIATE_TEST_CASE_P(
- SSE2_Y, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_y_sr_sse2, 0, 1));
-INSTANTIATE_TEST_CASE_P(
- SSE2, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_2d_sr_sse2, 1, 1));
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2_COPY, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_convolve_2d_copy_sr_avx2, 0, 0));
-INSTANTIATE_TEST_CASE_P(
- AVX2_X, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_x_sr_avx2, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2_Y, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_y_sr_avx2, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_2d_sr_avx2, 1, 1));
-#endif // HAVE_AVX2
-#endif // HAVE_SSE2
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON_X, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_x_sr_neon, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- NEON_Y, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_y_sr_neon, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(
- NEON, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_convolve_2d_sr_neon, 1, 1));
-
-INSTANTIATE_TEST_CASE_P(NEON_COPY, AV1Convolve2DSrTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_convolve_2d_copy_sr_neon, 0, 0));
-#endif // HAVE_NEON
-
-TEST_P(AV1JntConvolve2DTest, CheckOutput) { RunCheckOutput(GET_PARAM(0)); }
-TEST_P(AV1JntConvolve2DTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(0)); }
-
-INSTANTIATE_TEST_CASE_P(
- C_COPY, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_2d_copy_c, 0, 0));
-
-INSTANTIATE_TEST_CASE_P(
- C_X, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_x_c, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- C_Y, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_y_c, 0, 1));
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2_COPY, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_jnt_convolve_2d_copy_sse2, 0, 0));
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE2_X, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_x_sse2, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2_Y, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_y_sse2, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_2d_ssse3, 1, 1));
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2_COPY, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_jnt_convolve_2d_copy_avx2, 0, 0));
-INSTANTIATE_TEST_CASE_P(
- AVX2_X, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_x_avx2, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2_Y, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_y_avx2, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_2d_avx2, 1, 1));
-#endif // HAVE_AVX2
-#endif // HAVE_SSE4_1
-#endif // HAVE_SSE2
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON_COPY, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(
- av1_jnt_convolve_2d_copy_neon, 0, 0));
-
-INSTANTIATE_TEST_CASE_P(
- NEON, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_2d_neon, 1, 1));
-INSTANTIATE_TEST_CASE_P(
- NEON_X, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_x_neon, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(
- NEON_Y, AV1JntConvolve2DTest,
- libaom_test::AV1Convolve2D::BuildParams(av1_jnt_convolve_y_neon, 0, 1));
-#endif // HAVE_NEON
-
-TEST_P(AV1HighbdConvolve2DSrTest, CheckOutput) { RunCheckOutput(GET_PARAM(1)); }
-TEST_P(AV1HighbdConvolve2DSrTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(1));
-}
-
-INSTANTIATE_TEST_CASE_P(C_X, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_x_sr_c, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(C_Y, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_y_sr_c, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(C_COPY, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_2d_copy_sr_c, 0, 0));
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2_COPY, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_2d_copy_sr_sse2, 0, 0));
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(SSSE3, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_2d_sr_ssse3, 1, 1));
-INSTANTIATE_TEST_CASE_P(SSSE3_X, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_x_sr_ssse3, 1, 0));
-INSTANTIATE_TEST_CASE_P(SSSE3_Y, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_y_sr_ssse3, 0, 1));
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_2d_sr_avx2, 1, 1));
-INSTANTIATE_TEST_CASE_P(AVX2_X, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_x_sr_avx2, 1, 0));
-INSTANTIATE_TEST_CASE_P(AVX2_Y, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_y_sr_avx2, 0, 1));
-INSTANTIATE_TEST_CASE_P(AVX2_COPY, AV1HighbdConvolve2DSrTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_convolve_2d_copy_sr_avx2, 0, 0));
-#endif // HAVE_AVX2
-#endif // HAVE_SSSE3
-#endif // HAVE_SSE2
-TEST_P(AV1HighbdJntConvolve2DTest, CheckOutput) {
- RunCheckOutput(GET_PARAM(1));
-}
-
-TEST_P(AV1HighbdJntConvolve2DTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(1));
-}
-
-INSTANTIATE_TEST_CASE_P(C_X, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_x_c, 1, 0));
-
-INSTANTIATE_TEST_CASE_P(C_Y, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_y_c, 0, 1));
-
-INSTANTIATE_TEST_CASE_P(C_COPY, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_2d_copy_c, 0, 0));
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1_COPY, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_2d_copy_sse4_1, 0, 0));
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_2d_sse4_1, 1, 1));
-INSTANTIATE_TEST_CASE_P(SSE4_1_X, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_x_sse4_1, 1, 0));
-INSTANTIATE_TEST_CASE_P(SSE4_1_Y, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_y_sse4_1, 0, 1));
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2_COPY, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_2d_copy_avx2, 0, 0));
-INSTANTIATE_TEST_CASE_P(AVX2, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_2d_avx2, 1, 1));
-INSTANTIATE_TEST_CASE_P(AVX2_X, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_x_avx2, 1, 0));
-INSTANTIATE_TEST_CASE_P(AVX2_Y, AV1HighbdJntConvolve2DTest,
- libaom_test::AV1HighbdConvolve2D::BuildParams(
- av1_highbd_jnt_convolve_y_avx2, 0, 1));
-#endif // HAVE_AVX2
-#endif // HAVE_SSE4_1
-} // namespace
diff --git a/third_party/aom/test/av1_convolve_2d_test_util.cc b/third_party/aom/test/av1_convolve_2d_test_util.cc
deleted file mode 100644
index 409fd23e1..000000000
--- a/third_party/aom/test/av1_convolve_2d_test_util.cc
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "test/av1_convolve_2d_test_util.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/common_data.h"
-#include "av1/common/convolve.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-namespace libaom_test {
-
-const int kMaxSize = 128 + 32; // padding
-namespace AV1Convolve2D {
-
-::testing::internal::ParamGenerator<Convolve2DParam> BuildParams(
- convolve_2d_func filter, int has_subx, int has_suby) {
- return ::testing::Combine(::testing::Values(filter),
- ::testing::Values(has_subx),
- ::testing::Values(has_suby),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-AV1Convolve2DSrTest::~AV1Convolve2DSrTest() {}
-void AV1Convolve2DSrTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1Convolve2DSrTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1Convolve2DSrTest::RunCheckOutput(convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int has_subx = GET_PARAM(1);
- const int has_suby = GET_PARAM(2);
- const int block_idx = GET_PARAM(3);
- int hfilter, vfilter, subx, suby;
- uint8_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, uint8_t, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, output2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
- for (int i = 0; i < MAX_SB_SQUARE; ++i)
- output[i] = output2[i] = rnd_.Rand31();
-
- // Make sure that sizes 2xN and Nx2 are also tested for chroma.
- const int num_sizes =
- (block_size_wide[block_idx] == 4 || block_size_high[block_idx] == 4) ? 2
- : 1;
- for (int shift = 0; shift < num_sizes; ++shift) { // luma and chroma
- const int out_w = block_size_wide[block_idx] >> shift;
- const int out_h = block_size_high[block_idx] >> shift;
- for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) {
- for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL;
- ++vfilter) {
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
- for (int do_average = 0; do_average < 1; ++do_average) {
- ConvolveParams conv_params1 =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, 8);
- ConvolveParams conv_params2 =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, 8);
-
- const int subx_range = has_subx ? 16 : 1;
- const int suby_range = has_suby ? 16 : 1;
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_convolve_2d_sr_c(input + offset_r * w + offset_c, w, output,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params1);
- test_impl(input + offset_r * w + offset_c, w, output2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2);
-
- if (memcmp(output, output2, sizeof(output))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output[idx], output2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-void AV1Convolve2DSrTest::RunSpeedTest(convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int has_subx = GET_PARAM(1);
- const int has_suby = GET_PARAM(2);
- const int block_idx = GET_PARAM(3);
-
- uint8_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, uint8_t, output[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
-
- int hfilter = EIGHTTAP_REGULAR, vfilter = EIGHTTAP_REGULAR;
- int subx = 0, suby = 0;
-
- const int do_average = 0;
- ConvolveParams conv_params2 =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, 8);
-
- // Make sure that sizes 2xN and Nx2 are also tested for chroma.
- const int num_sizes =
- (block_size_wide[block_idx] == 4 || block_size_high[block_idx] == 4) ? 2
- : 1;
- for (int shift = 0; shift < num_sizes; ++shift) { // luma and chroma
- const int out_w = block_size_wide[block_idx] >> shift;
- const int out_h = block_size_high[block_idx] >> shift;
- const int num_loops = 1000000000 / (out_w + out_h);
-
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(input, w, output, MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("%d,%d convolve %3dx%-3d: %7.2f us\n", has_subx, has_suby, out_w,
- out_h, 1000.0 * elapsed_time / num_loops);
- }
-}
-
-AV1JntConvolve2DTest::~AV1JntConvolve2DTest() {}
-void AV1JntConvolve2DTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1JntConvolve2DTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1JntConvolve2DTest::RunCheckOutput(convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int has_subx = GET_PARAM(1);
- const int has_suby = GET_PARAM(2);
- const int block_idx = GET_PARAM(3);
- int hfilter, vfilter, subx, suby;
- uint8_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output2[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, output8_1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, output8_2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- output1[i] = output2[i] = rnd_.Rand16();
- output8_1[i] = output8_2[i] = rnd_.Rand8();
- }
-
- const int out_w = block_size_wide[block_idx];
- const int out_h = block_size_high[block_idx];
- for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) {
- for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) {
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
- for (int do_average = 0; do_average <= 1; ++do_average) {
- ConvolveParams conv_params1 =
- get_conv_params_no_round(do_average, 0, output1, MAX_SB_SIZE, 1, 8);
- ConvolveParams conv_params2 =
- get_conv_params_no_round(do_average, 0, output2, MAX_SB_SIZE, 1, 8);
-
- // Test special case where jnt_comp_avg is not used
- conv_params1.use_jnt_comp_avg = 0;
- conv_params2.use_jnt_comp_avg = 0;
-
- const int subx_range = has_subx ? 16 : 1;
- const int suby_range = has_suby ? 16 : 1;
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_jnt_convolve_2d_c(input + offset_r * w + offset_c, w, output8_1,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params1);
- test_impl(input + offset_r * w + offset_c, w, output8_2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2);
-
- for (int i = 0; i < out_h; ++i) {
- for (int j = 0; j < out_w; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output1[idx], output2[idx])
- << "Mismatch at unit tests for av1_jnt_convolve_2d\n"
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx << ")";
- }
- }
-
- if (memcmp(output8_1, output8_2, sizeof(output8_1))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output8_1[idx], output8_2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
- }
- }
- }
-
- // Test different combination of fwd and bck offset weights
- for (int k = 0; k < 2; ++k) {
- for (int l = 0; l < 4; ++l) {
- conv_params1.use_jnt_comp_avg = 1;
- conv_params2.use_jnt_comp_avg = 1;
- conv_params1.fwd_offset = quant_dist_lookup_table[k][l][0];
- conv_params1.bck_offset = quant_dist_lookup_table[k][l][1];
- conv_params2.fwd_offset = quant_dist_lookup_table[k][l][0];
- conv_params2.bck_offset = quant_dist_lookup_table[k][l][1];
-
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_jnt_convolve_2d_c(input + offset_r * w + offset_c, w,
- output8_1, MAX_SB_SIZE, out_w, out_h,
- filter_params_x, filter_params_y, subx,
- suby, &conv_params1);
- test_impl(input + offset_r * w + offset_c, w, output8_2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2);
-
- for (int i = 0; i < out_h; ++i) {
- for (int j = 0; j < out_w; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output1[idx], output2[idx])
- << "Mismatch at unit tests for "
- "av1_jnt_convolve_2d\n"
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
- if (memcmp(output8_1, output8_2, sizeof(output8_1))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output8_1[idx], output8_2[idx])
- << out_w << "x" << out_h
- << " Pixel mismatch at index " << idx << " = (" << i
- << ", " << j << "), sub pixel offset = (" << suby
- << ", " << subx << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-void AV1JntConvolve2DTest::RunSpeedTest(convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int has_subx = GET_PARAM(1);
- const int has_suby = GET_PARAM(2);
- const int block_idx = GET_PARAM(3);
-
- int subx = 0, suby = 0;
- uint8_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, output8[MAX_SB_SQUARE]);
- int hfilter = EIGHTTAP_REGULAR, vfilter = EIGHTTAP_REGULAR;
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- output[i] = rnd_.Rand16();
- output8[i] = rnd_.Rand8();
- }
-
- const int out_w = block_size_wide[block_idx];
- const int out_h = block_size_high[block_idx];
- const int num_loops = 1000000000 / (out_w + out_h);
- const int do_average = 0;
-
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
-
- ConvolveParams conv_params =
- get_conv_params_no_round(do_average, 0, output, MAX_SB_SIZE, 1, 8);
-
- conv_params.use_jnt_comp_avg = 0;
-
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(input + offset_r * w + offset_c, w, output8, MAX_SB_SIZE, out_w,
- out_h, filter_params_x, filter_params_y, subx, suby,
- &conv_params);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("%d,%d convolve %3dx%-3d: %7.2f us\n", has_subx, has_suby, out_w,
- out_h, 1000.0 * elapsed_time / num_loops);
-}
-} // namespace AV1Convolve2D
-
-namespace AV1HighbdConvolve2D {
-::testing::internal::ParamGenerator<HighbdConvolve2DParam> BuildParams(
- highbd_convolve_2d_func filter, int has_subx, int has_suby) {
- return ::testing::Combine(
- ::testing::Range(8, 13, 2), ::testing::Values(filter),
- ::testing::Values(has_subx), ::testing::Values(has_suby),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-AV1HighbdConvolve2DSrTest::~AV1HighbdConvolve2DSrTest() {}
-void AV1HighbdConvolve2DSrTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1HighbdConvolve2DSrTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1HighbdConvolve2DSrTest::RunSpeedTest(
- highbd_convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int bd = GET_PARAM(0);
- const int has_subx = GET_PARAM(2);
- const int has_suby = GET_PARAM(3);
- const int block_idx = GET_PARAM(4);
- int hfilter, vfilter, subx, suby;
- uint16_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, uint16_t, output[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j)
- input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
-
- hfilter = EIGHTTAP_REGULAR;
- vfilter = EIGHTTAP_REGULAR;
- int do_average = 0;
-
- const int offset_r = 3;
- const int offset_c = 3;
- subx = 0;
- suby = 0;
-
- ConvolveParams conv_params =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, bd);
-
- // Make sure that sizes 2xN and Nx2 are also tested for chroma.
- const int num_sizes =
- (block_size_wide[block_idx] == 4 || block_size_high[block_idx] == 4) ? 2
- : 1;
-
- for (int shift = 0; shift < num_sizes; ++shift) { // luma and chroma
- const int out_w = block_size_wide[block_idx] >> shift;
- const int out_h = block_size_high[block_idx] >> shift;
- const int num_loops = 1000000000 / (out_w + out_h);
-
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < num_loops; ++i)
- test_impl(input + offset_r * w + offset_c, w, output, MAX_SB_SIZE, out_w,
- out_h, filter_params_x, filter_params_y, subx, suby,
- &conv_params, bd);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("%d,%d convolve %3dx%-3d: %7.2f us\n", has_subx, has_suby, out_w,
- out_h, 1000.0 * elapsed_time / num_loops);
- }
-}
-
-void AV1HighbdConvolve2DSrTest::RunCheckOutput(
- highbd_convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int bd = GET_PARAM(0);
- const int has_subx = GET_PARAM(2);
- const int has_suby = GET_PARAM(3);
- const int block_idx = GET_PARAM(4);
- int hfilter, vfilter, subx, suby;
- uint16_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, uint16_t, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, output2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j)
- input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- for (int i = 0; i < MAX_SB_SQUARE; ++i)
- output[i] = output2[i] = rnd_.Rand31();
-
- // Make sure that sizes 2xN and Nx2 are also tested for chroma.
- const int num_sizes =
- (block_size_wide[block_idx] == 4 || block_size_high[block_idx] == 4) ? 2
- : 1;
- for (int shift = 0; shift < num_sizes; ++shift) { // luma and chroma
- const int out_w = block_size_wide[block_idx] >> shift;
- const int out_h = block_size_high[block_idx] >> shift;
- for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) {
- for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL;
- ++vfilter) {
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
- for (int do_average = 0; do_average < 1; ++do_average) {
- ConvolveParams conv_params1 =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, bd);
- ConvolveParams conv_params2 =
- get_conv_params_no_round(do_average, 0, NULL, 0, 0, bd);
-
- const int subx_range = has_subx ? 16 : 1;
- const int suby_range = has_suby ? 16 : 1;
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_highbd_convolve_2d_sr_c(input + offset_r * w + offset_c, w,
- output, MAX_SB_SIZE, out_w, out_h,
- filter_params_x, filter_params_y,
- subx, suby, &conv_params1, bd);
- test_impl(input + offset_r * w + offset_c, w, output2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2, bd);
-
- if (memcmp(output, output2, sizeof(output))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output[idx], output2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-AV1HighbdJntConvolve2DTest::~AV1HighbdJntConvolve2DTest() {}
-void AV1HighbdJntConvolve2DTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1HighbdJntConvolve2DTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1HighbdJntConvolve2DTest::RunSpeedTest(
- highbd_convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int bd = GET_PARAM(0);
- const int block_idx = GET_PARAM(4);
- int hfilter, vfilter, subx, suby;
- uint16_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, output16[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j)
- input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- for (int i = 0; i < MAX_SB_SQUARE; ++i) output[i] = rnd_.Rand16();
- hfilter = EIGHTTAP_REGULAR;
- vfilter = EIGHTTAP_REGULAR;
- int do_average = 0;
- const int out_w = block_size_wide[block_idx];
- const int out_h = block_size_high[block_idx];
-
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
-
- ConvolveParams conv_params =
- get_conv_params_no_round(do_average, 0, output, MAX_SB_SIZE, 1, bd);
-
- // Test special case where jnt_comp_avg is not used
- conv_params.use_jnt_comp_avg = 0;
-
- subx = 0;
- suby = 0;
- // Choose random locations within the source block
- const int offset_r = 3;
- const int offset_c = 3;
-
- const int num_loops = 1000000000 / (out_w + out_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < num_loops; ++i)
- test_impl(input + offset_r * w + offset_c, w, output16, MAX_SB_SIZE, out_w,
- out_h, filter_params_x, filter_params_y, subx, suby, &conv_params,
- bd);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("convolve %3dx%-3d: %7.2f us\n", out_w, out_h,
- 1000.0 * elapsed_time / num_loops);
-}
-
-void AV1HighbdJntConvolve2DTest::RunCheckOutput(
- highbd_convolve_2d_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int bd = GET_PARAM(0);
- const int has_subx = GET_PARAM(2);
- const int has_suby = GET_PARAM(3);
- const int block_idx = GET_PARAM(4);
- int hfilter, vfilter, subx, suby;
- uint16_t input[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, CONV_BUF_TYPE, output2[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, output16_1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, output16_2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j)
- input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- output1[i] = output2[i] = rnd_.Rand16();
- output16_1[i] = output16_2[i] = rnd_.Rand16();
- }
-
- const int out_w = block_size_wide[block_idx];
- const int out_h = block_size_high[block_idx];
- for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) {
- for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) {
- const InterpFilterParams *filter_params_x =
- av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter,
- out_w);
- const InterpFilterParams *filter_params_y =
- av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter,
- out_h);
- for (int do_average = 0; do_average <= 1; ++do_average) {
- ConvolveParams conv_params1 = get_conv_params_no_round(
- do_average, 0, output1, MAX_SB_SIZE, 1, bd);
- ConvolveParams conv_params2 = get_conv_params_no_round(
- do_average, 0, output2, MAX_SB_SIZE, 1, bd);
-
- // Test special case where jnt_comp_avg is not used
- conv_params1.use_jnt_comp_avg = 0;
- conv_params2.use_jnt_comp_avg = 0;
-
- const int subx_range = has_subx ? 16 : 1;
- const int suby_range = has_suby ? 16 : 1;
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_highbd_jnt_convolve_2d_c(input + offset_r * w + offset_c, w,
- output16_1, MAX_SB_SIZE, out_w, out_h,
- filter_params_x, filter_params_y, subx,
- suby, &conv_params1, bd);
- test_impl(input + offset_r * w + offset_c, w, output16_2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2, bd);
-
- for (int i = 0; i < out_h; ++i) {
- for (int j = 0; j < out_w; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output1[idx], output2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx << ")";
- }
- }
-
- if (memcmp(output16_1, output16_2, sizeof(output16_1))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output16_1[idx], output16_2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
- }
- }
- }
-
- // Test different combination of fwd and bck offset weights
- for (int k = 0; k < 2; ++k) {
- for (int l = 0; l < 4; ++l) {
- conv_params1.use_jnt_comp_avg = 1;
- conv_params2.use_jnt_comp_avg = 1;
- conv_params1.fwd_offset = quant_dist_lookup_table[k][l][0];
- conv_params1.bck_offset = quant_dist_lookup_table[k][l][1];
- conv_params2.fwd_offset = quant_dist_lookup_table[k][l][0];
- conv_params2.bck_offset = quant_dist_lookup_table[k][l][1];
-
- const int subx_range = has_subx ? 16 : 1;
- const int suby_range = has_suby ? 16 : 1;
- for (subx = 0; subx < subx_range; ++subx) {
- for (suby = 0; suby < suby_range; ++suby) {
- // Choose random locations within the source block
- const int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_highbd_jnt_convolve_2d_c(
- input + offset_r * w + offset_c, w, output16_1, MAX_SB_SIZE,
- out_w, out_h, filter_params_x, filter_params_y, subx, suby,
- &conv_params1, bd);
- test_impl(input + offset_r * w + offset_c, w, output16_2,
- MAX_SB_SIZE, out_w, out_h, filter_params_x,
- filter_params_y, subx, suby, &conv_params2, bd);
-
- for (int i = 0; i < out_h; ++i) {
- for (int j = 0; j < out_w; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output1[idx], output2[idx])
- << out_w << "x" << out_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << suby << ", " << subx
- << ")";
- }
- }
-
- if (memcmp(output16_1, output16_2, sizeof(output16_1))) {
- for (int i = 0; i < MAX_SB_SIZE; ++i) {
- for (int j = 0; j < MAX_SB_SIZE; ++j) {
- int idx = i * MAX_SB_SIZE + j;
- ASSERT_EQ(output16_1[idx], output16_2[idx])
- << out_w << "x" << out_h
- << " Pixel mismatch at index " << idx << " = (" << i
- << ", " << j << "), sub pixel offset = (" << suby
- << ", " << subx << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-} // namespace AV1HighbdConvolve2D
-} // namespace libaom_test
diff --git a/third_party/aom/test/av1_convolve_2d_test_util.h b/third_party/aom/test/av1_convolve_2d_test_util.h
deleted file mode 100644
index e0eb58410..000000000
--- a/third_party/aom/test/av1_convolve_2d_test_util.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_AV1_CONVOLVE_2D_TEST_UTIL_H_
-#define AOM_TEST_AV1_CONVOLVE_2D_TEST_UTIL_H_
-
-#include "config/av1_rtcd.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-
-namespace libaom_test {
-
-namespace AV1Convolve2D {
-
-typedef void (*convolve_2d_func)(const uint8_t *src, int src_stride,
- uint8_t *dst, int dst_stride, int w, int h,
- const InterpFilterParams *filter_params_x,
- const InterpFilterParams *filter_params_y,
- const int subpel_x_q4, const int subpel_y_q4,
- ConvolveParams *conv_params);
-
-typedef ::testing::tuple<convolve_2d_func, int, int, BLOCK_SIZE>
- Convolve2DParam;
-
-::testing::internal::ParamGenerator<Convolve2DParam> BuildParams(
- convolve_2d_func filter, int subx_exist, int suby_exist);
-
-class AV1Convolve2DSrTest : public ::testing::TestWithParam<Convolve2DParam> {
- public:
- virtual ~AV1Convolve2DSrTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(convolve_2d_func test_impl);
- void RunSpeedTest(convolve_2d_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-class AV1JntConvolve2DTest : public ::testing::TestWithParam<Convolve2DParam> {
- public:
- virtual ~AV1JntConvolve2DTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(convolve_2d_func test_impl);
- void RunSpeedTest(convolve_2d_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-} // namespace AV1Convolve2D
-
-namespace AV1HighbdConvolve2D {
-typedef void (*highbd_convolve_2d_func)(
- const uint16_t *src, int src_stride, uint16_t *dst, int dst_stride, int w,
- int h, const InterpFilterParams *filter_params_x,
- const InterpFilterParams *filter_params_y, const int subpel_x_q4,
- const int subpel_y_q4, ConvolveParams *conv_params, int bd);
-
-typedef ::testing::tuple<int, highbd_convolve_2d_func, int, int, BLOCK_SIZE>
- HighbdConvolve2DParam;
-
-::testing::internal::ParamGenerator<HighbdConvolve2DParam> BuildParams(
- highbd_convolve_2d_func filter, int subx_exist, int suby_exist);
-
-class AV1HighbdConvolve2DSrTest
- : public ::testing::TestWithParam<HighbdConvolve2DParam> {
- public:
- virtual ~AV1HighbdConvolve2DSrTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(highbd_convolve_2d_func test_impl);
- void RunSpeedTest(highbd_convolve_2d_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-class AV1HighbdJntConvolve2DTest
- : public ::testing::TestWithParam<HighbdConvolve2DParam> {
- public:
- virtual ~AV1HighbdJntConvolve2DTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(highbd_convolve_2d_func test_impl);
- void RunSpeedTest(highbd_convolve_2d_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-} // namespace AV1HighbdConvolve2D
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_AV1_CONVOLVE_2D_TEST_UTIL_H_
diff --git a/third_party/aom/test/av1_convolve_scale_test.cc b/third_party/aom/test/av1_convolve_scale_test.cc
deleted file mode 100644
index 3b1698eeb..000000000
--- a/third_party/aom/test/av1_convolve_scale_test.cc
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <vector>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-#include "av1/common/common_data.h"
-
-namespace {
-const int kTestIters = 10;
-const int kPerfIters = 1000;
-
-const int kVPad = 32;
-const int kHPad = 32;
-const int kXStepQn = 16;
-const int kYStepQn = 20;
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-
-enum NTaps { EIGHT_TAP, TEN_TAP, TWELVE_TAP };
-int NTapsToInt(NTaps ntaps) { return 8 + static_cast<int>(ntaps) * 2; }
-
-// A 16-bit filter with a configurable number of taps.
-class TestFilter {
- public:
- void set(NTaps ntaps, bool backwards);
-
- InterpFilterParams params_;
-
- private:
- std::vector<int16_t> coeffs_;
-};
-
-void TestFilter::set(NTaps ntaps, bool backwards) {
- const int n = NTapsToInt(ntaps);
- assert(n >= 8 && n <= 12);
-
- // The filter has n * SUBPEL_SHIFTS proper elements and an extra 8 bogus
- // elements at the end so that convolutions can read off the end safely.
- coeffs_.resize(n * SUBPEL_SHIFTS + 8);
-
- // The coefficients are pretty much arbitrary, but convolutions shouldn't
- // over or underflow. For the first filter (subpels = 0), we use an
- // increasing or decreasing ramp (depending on the backwards parameter). We
- // don't want any zero coefficients, so we make it have an x-intercept at -1
- // or n. To ensure absence of under/overflow, we normalise the area under the
- // ramp to be I = 1 << FILTER_BITS (so that convolving a constant function
- // gives the identity).
- //
- // When increasing, the function has the form:
- //
- // f(x) = A * (x + 1)
- //
- // Summing and rearranging for A gives A = 2 * I / (n * (n + 1)). If the
- // filter is reversed, we have the same A but with formula
- //
- // g(x) = A * (n - x)
- const int I = 1 << FILTER_BITS;
- const float A = 2.f * I / (n * (n + 1.f));
- for (int i = 0; i < n; ++i) {
- coeffs_[i] = static_cast<int16_t>(A * (backwards ? (n - i) : (i + 1)));
- }
-
- // For the other filters, make them slightly different by swapping two
- // columns. Filter k will have the columns (k % n) and (7 * k) % n swapped.
- const size_t filter_size = sizeof(coeffs_[0] * n);
- int16_t *const filter0 = &coeffs_[0];
- for (int k = 1; k < SUBPEL_SHIFTS; ++k) {
- int16_t *filterk = &coeffs_[k * n];
- memcpy(filterk, filter0, filter_size);
-
- const int idx0 = k % n;
- const int idx1 = (7 * k) % n;
-
- const int16_t tmp = filterk[idx0];
- filterk[idx0] = filterk[idx1];
- filterk[idx1] = tmp;
- }
-
- // Finally, write some rubbish at the end to make sure we don't use it.
- for (int i = 0; i < 8; ++i) coeffs_[n * SUBPEL_SHIFTS + i] = 123 + i;
-
- // Fill in params
- params_.filter_ptr = &coeffs_[0];
- params_.taps = n;
- // These are ignored by the functions being tested. Set them to whatever.
- params_.subpel_shifts = SUBPEL_SHIFTS;
- params_.interp_filter = EIGHTTAP_REGULAR;
-}
-
-template <typename SrcPixel>
-class TestImage {
- public:
- TestImage(int w, int h, int bd) : w_(w), h_(h), bd_(bd) {
- assert(bd < 16);
- assert(bd <= 8 * static_cast<int>(sizeof(SrcPixel)));
-
- // Pad width by 2*kHPad and then round up to the next multiple of 16
- // to get src_stride_. Add another 16 for dst_stride_ (to make sure
- // something goes wrong if we use the wrong one)
- src_stride_ = (w_ + 2 * kHPad + 15) & ~15;
- dst_stride_ = src_stride_ + 16;
-
- // Allocate image data
- src_data_.resize(2 * src_block_size());
- dst_data_.resize(2 * dst_block_size());
- dst_16_data_.resize(2 * dst_block_size());
- }
-
- void Initialize(ACMRandom *rnd);
- void Check() const;
-
- int src_stride() const { return src_stride_; }
- int dst_stride() const { return dst_stride_; }
-
- int src_block_size() const { return (h_ + 2 * kVPad) * src_stride(); }
- int dst_block_size() const { return (h_ + 2 * kVPad) * dst_stride(); }
-
- const SrcPixel *GetSrcData(bool ref, bool borders) const {
- const SrcPixel *block = &src_data_[ref ? 0 : src_block_size()];
- return borders ? block : block + kHPad + src_stride_ * kVPad;
- }
-
- SrcPixel *GetDstData(bool ref, bool borders) {
- SrcPixel *block = &dst_data_[ref ? 0 : dst_block_size()];
- return borders ? block : block + kHPad + dst_stride_ * kVPad;
- }
-
- CONV_BUF_TYPE *GetDst16Data(bool ref, bool borders) {
- CONV_BUF_TYPE *block = &dst_16_data_[ref ? 0 : dst_block_size()];
- return borders ? block : block + kHPad + dst_stride_ * kVPad;
- }
-
- private:
- int w_, h_, bd_;
- int src_stride_, dst_stride_;
-
- std::vector<SrcPixel> src_data_;
- std::vector<SrcPixel> dst_data_;
- std::vector<CONV_BUF_TYPE> dst_16_data_;
-};
-
-template <typename Pixel>
-void FillEdge(ACMRandom *rnd, int num_pixels, int bd, bool trash, Pixel *data) {
- if (!trash) {
- memset(data, 0, sizeof(*data) * num_pixels);
- return;
- }
- const Pixel mask = (1 << bd) - 1;
- for (int i = 0; i < num_pixels; ++i) data[i] = rnd->Rand16() & mask;
-}
-
-template <typename Pixel>
-void PrepBuffers(ACMRandom *rnd, int w, int h, int stride, int bd,
- bool trash_edges, Pixel *data) {
- assert(rnd);
- const Pixel mask = (1 << bd) - 1;
-
- // Fill in the first buffer with random data
- // Top border
- FillEdge(rnd, stride * kVPad, bd, trash_edges, data);
- for (int r = 0; r < h; ++r) {
- Pixel *row_data = data + (kVPad + r) * stride;
- // Left border, contents, right border
- FillEdge(rnd, kHPad, bd, trash_edges, row_data);
- for (int c = 0; c < w; ++c) row_data[kHPad + c] = rnd->Rand16() & mask;
- FillEdge(rnd, kHPad, bd, trash_edges, row_data + kHPad + w);
- }
- // Bottom border
- FillEdge(rnd, stride * kVPad, bd, trash_edges, data + stride * (kVPad + h));
-
- const int bpp = sizeof(*data);
- const int block_elts = stride * (h + 2 * kVPad);
- const int block_size = bpp * block_elts;
-
- // Now copy that to the second buffer
- memcpy(data + block_elts, data, block_size);
-}
-
-template <typename SrcPixel>
-void TestImage<SrcPixel>::Initialize(ACMRandom *rnd) {
- PrepBuffers(rnd, w_, h_, src_stride_, bd_, false, &src_data_[0]);
- PrepBuffers(rnd, w_, h_, dst_stride_, bd_, true, &dst_data_[0]);
- PrepBuffers(rnd, w_, h_, dst_stride_, bd_, true, &dst_16_data_[0]);
-}
-
-template <typename SrcPixel>
-void TestImage<SrcPixel>::Check() const {
- // If memcmp returns 0, there's nothing to do.
- const int num_pixels = dst_block_size();
- const SrcPixel *ref_dst = &dst_data_[0];
- const SrcPixel *tst_dst = &dst_data_[num_pixels];
-
- const CONV_BUF_TYPE *ref_16_dst = &dst_16_data_[0];
- const CONV_BUF_TYPE *tst_16_dst = &dst_16_data_[num_pixels];
-
- if (0 == memcmp(ref_dst, tst_dst, sizeof(*ref_dst) * num_pixels)) {
- if (0 == memcmp(ref_16_dst, tst_16_dst, sizeof(*ref_16_dst) * num_pixels))
- return;
- }
- // Otherwise, iterate through the buffer looking for differences (including
- // the edges)
- const int stride = dst_stride_;
- for (int r = 0; r < h_ + 2 * kVPad; ++r) {
- for (int c = 0; c < w_ + 2 * kHPad; ++c) {
- const int32_t ref_value = ref_dst[r * stride + c];
- const int32_t tst_value = tst_dst[r * stride + c];
-
- EXPECT_EQ(tst_value, ref_value)
- << "Error at row: " << (r - kVPad) << ", col: " << (c - kHPad);
- }
- }
-
- for (int r = 0; r < h_ + 2 * kVPad; ++r) {
- for (int c = 0; c < w_ + 2 * kHPad; ++c) {
- const int32_t ref_value = ref_16_dst[r * stride + c];
- const int32_t tst_value = tst_16_dst[r * stride + c];
-
- EXPECT_EQ(tst_value, ref_value)
- << "Error in 16 bit buffer "
- << "Error at row: " << (r - kVPad) << ", col: " << (c - kHPad);
- }
- }
-}
-
-typedef tuple<int, int> BlockDimension;
-
-struct BaseParams {
- BaseParams(BlockDimension dims, NTaps ntaps_x, NTaps ntaps_y, bool avg)
- : dims(dims), ntaps_x(ntaps_x), ntaps_y(ntaps_y), avg(avg) {}
-
- BlockDimension dims;
- NTaps ntaps_x, ntaps_y;
- bool avg;
-};
-
-template <typename SrcPixel>
-class ConvolveScaleTestBase : public ::testing::Test {
- public:
- ConvolveScaleTestBase() : image_(NULL) {}
- virtual ~ConvolveScaleTestBase() { delete image_; }
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- // Implemented by subclasses (SetUp depends on the parameters passed
- // in and RunOne depends on the function to be tested. These can't
- // be templated for low/high bit depths because they have different
- // numbers of parameters)
- virtual void SetUp() = 0;
- virtual void RunOne(bool ref) = 0;
-
- protected:
- void SetParams(const BaseParams &params, int bd) {
- width_ = ::testing::get<0>(params.dims);
- height_ = ::testing::get<1>(params.dims);
- ntaps_x_ = params.ntaps_x;
- ntaps_y_ = params.ntaps_y;
- bd_ = bd;
- avg_ = params.avg;
-
- filter_x_.set(ntaps_x_, false);
- filter_y_.set(ntaps_y_, true);
- convolve_params_ =
- get_conv_params_no_round(avg_ != false, 0, NULL, 0, 1, bd);
-
- delete image_;
- image_ = new TestImage<SrcPixel>(width_, height_, bd_);
- }
-
- void SetConvParamOffset(int i, int j, int is_compound, int do_average,
- int use_jnt_comp_avg) {
- if (i == -1 && j == -1) {
- convolve_params_.use_jnt_comp_avg = use_jnt_comp_avg;
- convolve_params_.is_compound = is_compound;
- convolve_params_.do_average = do_average;
- } else {
- convolve_params_.use_jnt_comp_avg = use_jnt_comp_avg;
- convolve_params_.fwd_offset = quant_dist_lookup_table[i][j][0];
- convolve_params_.bck_offset = quant_dist_lookup_table[i][j][1];
- convolve_params_.is_compound = is_compound;
- convolve_params_.do_average = do_average;
- }
- }
-
- void Run() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int i = 0; i < kTestIters; ++i) {
- int is_compound = 0;
- SetConvParamOffset(-1, -1, is_compound, 0, 0);
- Prep(&rnd);
- RunOne(true);
- RunOne(false);
- image_->Check();
-
- is_compound = 1;
- for (int do_average = 0; do_average < 2; do_average++) {
- for (int use_jnt_comp_avg = 0; use_jnt_comp_avg < 2;
- use_jnt_comp_avg++) {
- for (int j = 0; j < 2; ++j) {
- for (int k = 0; k < 4; ++k) {
- SetConvParamOffset(j, k, is_compound, do_average,
- use_jnt_comp_avg);
- Prep(&rnd);
- RunOne(true);
- RunOne(false);
- image_->Check();
- }
- }
- }
- }
- }
- }
-
- void SpeedTest() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- Prep(&rnd);
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (int i = 0; i < kPerfIters; ++i) RunOne(true);
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (int i = 0; i < kPerfIters; ++i) RunOne(false);
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: CDEFSpeedTest, SIMD slower than C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
- }
-
- static int RandomSubpel(ACMRandom *rnd) {
- const uint8_t subpel_mode = rnd->Rand8();
- if ((subpel_mode & 7) == 0) {
- return 0;
- } else if ((subpel_mode & 7) == 1) {
- return SCALE_SUBPEL_SHIFTS - 1;
- } else {
- return 1 + rnd->PseudoUniform(SCALE_SUBPEL_SHIFTS - 2);
- }
- }
-
- void Prep(ACMRandom *rnd) {
- assert(rnd);
-
- // Choose subpel_x_ and subpel_y_. They should be less than
- // SCALE_SUBPEL_SHIFTS; we also want to add extra weight to "interesting"
- // values: 0 and SCALE_SUBPEL_SHIFTS - 1
- subpel_x_ = RandomSubpel(rnd);
- subpel_y_ = RandomSubpel(rnd);
-
- image_->Initialize(rnd);
- }
-
- int width_, height_, bd_;
- NTaps ntaps_x_, ntaps_y_;
- bool avg_;
- int subpel_x_, subpel_y_;
- TestFilter filter_x_, filter_y_;
- TestImage<SrcPixel> *image_;
- ConvolveParams convolve_params_;
-};
-
-typedef tuple<int, int> BlockDimension;
-
-typedef void (*LowbdConvolveFunc)(const uint8_t *src, int src_stride,
- uint8_t *dst, int dst_stride, int w, int h,
- const InterpFilterParams *filter_params_x,
- const InterpFilterParams *filter_params_y,
- const int subpel_x_qn, const int x_step_qn,
- const int subpel_y_qn, const int y_step_qn,
- ConvolveParams *conv_params);
-
-// Test parameter list:
-// <tst_fun, dims, ntaps_x, ntaps_y, avg>
-typedef tuple<LowbdConvolveFunc, BlockDimension, NTaps, NTaps, bool>
- LowBDParams;
-
-class LowBDConvolveScaleTest
- : public ConvolveScaleTestBase<uint8_t>,
- public ::testing::WithParamInterface<LowBDParams> {
- public:
- virtual ~LowBDConvolveScaleTest() {}
-
- void SetUp() {
- tst_fun_ = GET_PARAM(0);
-
- const BlockDimension &block = GET_PARAM(1);
- const NTaps ntaps_x = GET_PARAM(2);
- const NTaps ntaps_y = GET_PARAM(3);
- const int bd = 8;
- const bool avg = GET_PARAM(4);
-
- SetParams(BaseParams(block, ntaps_x, ntaps_y, avg), bd);
- }
-
- void RunOne(bool ref) {
- const uint8_t *src = image_->GetSrcData(ref, false);
- uint8_t *dst = image_->GetDstData(ref, false);
- convolve_params_.dst = image_->GetDst16Data(ref, false);
- const int src_stride = image_->src_stride();
- const int dst_stride = image_->dst_stride();
- if (ref) {
- av1_convolve_2d_scale_c(src, src_stride, dst, dst_stride, width_, height_,
- &filter_x_.params_, &filter_y_.params_, subpel_x_,
- kXStepQn, subpel_y_, kYStepQn, &convolve_params_);
- } else {
- tst_fun_(src, src_stride, dst, dst_stride, width_, height_,
- &filter_x_.params_, &filter_y_.params_, subpel_x_, kXStepQn,
- subpel_y_, kYStepQn, &convolve_params_);
- }
- }
-
- private:
- LowbdConvolveFunc tst_fun_;
-};
-
-const BlockDimension kBlockDim[] = {
- make_tuple(2, 2), make_tuple(2, 4), make_tuple(4, 4),
- make_tuple(4, 8), make_tuple(8, 4), make_tuple(8, 8),
- make_tuple(8, 16), make_tuple(16, 8), make_tuple(16, 16),
- make_tuple(16, 32), make_tuple(32, 16), make_tuple(32, 32),
- make_tuple(32, 64), make_tuple(64, 32), make_tuple(64, 64),
- make_tuple(64, 128), make_tuple(128, 64), make_tuple(128, 128),
-};
-
-const NTaps kNTaps[] = { EIGHT_TAP };
-
-TEST_P(LowBDConvolveScaleTest, Check) { Run(); }
-TEST_P(LowBDConvolveScaleTest, DISABLED_Speed) { SpeedTest(); }
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, LowBDConvolveScaleTest,
- ::testing::Combine(::testing::Values(av1_convolve_2d_scale_sse4_1),
- ::testing::ValuesIn(kBlockDim),
- ::testing::ValuesIn(kNTaps), ::testing::ValuesIn(kNTaps),
- ::testing::Bool()));
-
-typedef void (*HighbdConvolveFunc)(const uint16_t *src, int src_stride,
- uint16_t *dst, int dst_stride, int w, int h,
- const InterpFilterParams *filter_params_x,
- const InterpFilterParams *filter_params_y,
- const int subpel_x_qn, const int x_step_qn,
- const int subpel_y_qn, const int y_step_qn,
- ConvolveParams *conv_params, int bd);
-
-// Test parameter list:
-// <tst_fun, dims, ntaps_x, ntaps_y, avg, bd>
-typedef tuple<HighbdConvolveFunc, BlockDimension, NTaps, NTaps, bool, int>
- HighBDParams;
-
-class HighBDConvolveScaleTest
- : public ConvolveScaleTestBase<uint16_t>,
- public ::testing::WithParamInterface<HighBDParams> {
- public:
- virtual ~HighBDConvolveScaleTest() {}
-
- void SetUp() {
- tst_fun_ = GET_PARAM(0);
-
- const BlockDimension &block = GET_PARAM(1);
- const NTaps ntaps_x = GET_PARAM(2);
- const NTaps ntaps_y = GET_PARAM(3);
- const bool avg = GET_PARAM(4);
- const int bd = GET_PARAM(5);
-
- SetParams(BaseParams(block, ntaps_x, ntaps_y, avg), bd);
- }
-
- void RunOne(bool ref) {
- const uint16_t *src = image_->GetSrcData(ref, false);
- uint16_t *dst = image_->GetDstData(ref, false);
- convolve_params_.dst = image_->GetDst16Data(ref, false);
- const int src_stride = image_->src_stride();
- const int dst_stride = image_->dst_stride();
-
- if (ref) {
- av1_highbd_convolve_2d_scale_c(
- src, src_stride, dst, dst_stride, width_, height_, &filter_x_.params_,
- &filter_y_.params_, subpel_x_, kXStepQn, subpel_y_, kYStepQn,
- &convolve_params_, bd_);
- } else {
- tst_fun_(src, src_stride, dst, dst_stride, width_, height_,
- &filter_x_.params_, &filter_y_.params_, subpel_x_, kXStepQn,
- subpel_y_, kYStepQn, &convolve_params_, bd_);
- }
- }
-
- private:
- HighbdConvolveFunc tst_fun_;
-};
-
-const int kBDs[] = { 8, 10, 12 };
-
-TEST_P(HighBDConvolveScaleTest, Check) { Run(); }
-TEST_P(HighBDConvolveScaleTest, DISABLED_Speed) { SpeedTest(); }
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, HighBDConvolveScaleTest,
- ::testing::Combine(::testing::Values(av1_highbd_convolve_2d_scale_sse4_1),
- ::testing::ValuesIn(kBlockDim),
- ::testing::ValuesIn(kNTaps), ::testing::ValuesIn(kNTaps),
- ::testing::Bool(), ::testing::ValuesIn(kBDs)));
-} // namespace
diff --git a/third_party/aom/test/av1_encoder_parms_get_to_decoder.cc b/third_party/aom/test/av1_encoder_parms_get_to_decoder.cc
deleted file mode 100644
index e8470e5d5..000000000
--- a/third_party/aom/test/av1_encoder_parms_get_to_decoder.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-
-#include "aom/aom_decoder.h"
-#include "av1/decoder/decoder.h"
-
-namespace {
-
-const int kMaxPsnr = 100;
-
-struct ParamPassingTestVideo {
- const char *name;
- uint32_t width;
- uint32_t height;
- uint32_t bitrate;
- int frames;
-};
-
-const ParamPassingTestVideo kAV1ParamPassingTestVector = {
- "niklas_1280_720_30.y4m", 1280, 720, 600, 3
-};
-
-struct EncodeParameters {
- int32_t lossless;
- aom_color_primaries_t color_primaries;
- aom_transfer_characteristics_t transfer_characteristics;
- aom_matrix_coefficients_t matrix_coefficients;
- aom_color_range_t color_range;
- aom_chroma_sample_position_t chroma_sample_position;
- int32_t render_size[2];
-};
-
-const EncodeParameters kAV1EncodeParameterSet[] = {
- { 1,
- AOM_CICP_CP_BT_709,
- AOM_CICP_TC_BT_709,
- AOM_CICP_MC_BT_709,
- AOM_CR_STUDIO_RANGE,
- AOM_CSP_UNKNOWN,
- { 0, 0 } },
- { 0,
- AOM_CICP_CP_BT_470_M,
- AOM_CICP_TC_BT_470_M,
- AOM_CICP_MC_BT_470_B_G,
- AOM_CR_FULL_RANGE,
- AOM_CSP_VERTICAL,
- { 0, 0 } },
- { 1,
- AOM_CICP_CP_BT_601,
- AOM_CICP_TC_BT_601,
- AOM_CICP_MC_BT_601,
- AOM_CR_STUDIO_RANGE,
- AOM_CSP_COLOCATED,
- { 0, 0 } },
- { 0,
- AOM_CICP_CP_BT_2020,
- AOM_CICP_TC_BT_2020_10_BIT,
- AOM_CICP_MC_BT_2020_NCL,
- AOM_CR_FULL_RANGE,
- AOM_CSP_RESERVED,
- { 640, 480 } },
-};
-
-class AVxEncoderParmsGetToDecoder
- : public ::libaom_test::EncoderTest,
- public ::libaom_test::CodecTestWithParam<EncodeParameters> {
- protected:
- AVxEncoderParmsGetToDecoder()
- : EncoderTest(GET_PARAM(0)), encode_parms(GET_PARAM(1)) {}
-
- virtual ~AVxEncoderParmsGetToDecoder() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(::libaom_test::kTwoPassGood);
- cfg_.g_lag_in_frames = 25;
- test_video_ = kAV1ParamPassingTestVector;
- cfg_.rc_target_bitrate = test_video_.bitrate;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_COLOR_PRIMARIES, encode_parms.color_primaries);
- encoder->Control(AV1E_SET_TRANSFER_CHARACTERISTICS,
- encode_parms.transfer_characteristics);
- encoder->Control(AV1E_SET_MATRIX_COEFFICIENTS,
- encode_parms.matrix_coefficients);
- encoder->Control(AV1E_SET_COLOR_RANGE, encode_parms.color_range);
- encoder->Control(AV1E_SET_CHROMA_SAMPLE_POSITION,
- encode_parms.chroma_sample_position);
- encoder->Control(AV1E_SET_LOSSLESS, encode_parms.lossless);
- if (encode_parms.render_size[0] > 0 && encode_parms.render_size[1] > 0) {
- encoder->Control(AV1E_SET_RENDER_SIZE, encode_parms.render_size);
- }
- }
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- (void)pts;
- if (encode_parms.render_size[0] > 0 && encode_parms.render_size[1] > 0) {
- EXPECT_EQ(encode_parms.render_size[0], (int)img.r_w);
- EXPECT_EQ(encode_parms.render_size[1], (int)img.r_h);
- }
- EXPECT_EQ(encode_parms.color_primaries, img.cp);
- EXPECT_EQ(encode_parms.transfer_characteristics, img.tc);
- EXPECT_EQ(encode_parms.matrix_coefficients, img.mc);
- EXPECT_EQ(encode_parms.color_range, img.range);
- EXPECT_EQ(encode_parms.chroma_sample_position, img.csp);
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (encode_parms.lossless) {
- EXPECT_EQ(kMaxPsnr, pkt->data.psnr.psnr[0]);
- }
- }
-
- virtual bool HandleDecodeResult(const aom_codec_err_t res_dec,
- libaom_test::Decoder *decoder) {
- EXPECT_EQ(AOM_CODEC_OK, res_dec) << decoder->DecodeError();
- return AOM_CODEC_OK == res_dec;
- }
-
- ParamPassingTestVideo test_video_;
-
- private:
- EncodeParameters encode_parms;
-};
-
-TEST_P(AVxEncoderParmsGetToDecoder, BitstreamParms) {
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- testing::internal::scoped_ptr<libaom_test::VideoSource> video(
- new libaom_test::Y4mVideoSource(test_video_.name, 0, test_video_.frames));
- ASSERT_TRUE(video.get() != NULL);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
-}
-
-AV1_INSTANTIATE_TEST_CASE(AVxEncoderParmsGetToDecoder,
- ::testing::ValuesIn(kAV1EncodeParameterSet));
-} // namespace
diff --git a/third_party/aom/test/av1_ext_tile_test.cc b/third_party/aom/test/av1_ext_tile_test.cc
deleted file mode 100644
index 424d2f065..000000000
--- a/third_party/aom/test/av1_ext_tile_test.cc
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <assert.h>
-#include <string>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/md5_helper.h"
-#include "test/util.h"
-
-namespace {
-// The number of frames to be encoded/decoded
-const int kLimit = 8;
-// Skip 1 frame to check the frame decoding independency.
-const int kSkip = 5;
-const int kTileSize = 1;
-const int kTIleSizeInPixels = (kTileSize << 6);
-// Fake width and height so that they can be multiples of the tile size.
-const int kImgWidth = 704;
-const int kImgHeight = 576;
-
-// This test tests large scale tile coding case. Non-large-scale tile coding
-// is tested by the tile_independence test.
-class AV1ExtTileTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- AV1ExtTileTest()
- : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
- set_cpu_used_(GET_PARAM(2)) {
- init_flags_ = AOM_CODEC_USE_PSNR;
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.w = kImgWidth;
- cfg.h = kImgHeight;
- cfg.allow_lowbitdepth = 1;
-
- decoder_ = codec_->CreateDecoder(cfg, 0);
- decoder_->Control(AV1_SET_TILE_MODE, 1);
- decoder_->Control(AV1D_EXT_TILE_DEBUG, 1);
- decoder_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- decoder_->Control(AV1_SET_DECODE_TILE_COL, -1);
-
- // Allocate buffer to store tile image.
- aom_img_alloc(&tile_img_, AOM_IMG_FMT_I420, kImgWidth, kImgHeight, 32);
-
- md5_.clear();
- tile_md5_.clear();
- }
-
- virtual ~AV1ExtTileTest() {
- aom_img_free(&tile_img_);
- delete decoder_;
- }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
-
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.g_error_resilient = 1;
-
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_min_quantizer = 0;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- // Encode setting
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 0);
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
-
- // TODO(yunqingwang): test single_tile_decoding = 0.
- encoder->Control(AV1E_SET_SINGLE_TILE_DECODING, 1);
- // Always use 64x64 max partition.
- encoder->Control(AV1E_SET_SUPERBLOCK_SIZE, AOM_SUPERBLOCK_SIZE_64X64);
- // Set tile_columns and tile_rows to MAX values, which guarantees the tile
- // size of 64 x 64 pixels(i.e. 1 SB) for <= 4k resolution.
- encoder->Control(AV1E_SET_TILE_COLUMNS, 6);
- encoder->Control(AV1E_SET_TILE_ROWS, 6);
- }
-
- if (video->frame() == 1) {
- frame_flags_ =
- AOM_EFLAG_NO_UPD_LAST | AOM_EFLAG_NO_UPD_GF | AOM_EFLAG_NO_UPD_ARF;
- }
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- // Skip 1 already decoded frame to be consistent with the decoder in this
- // test.
- if (pts == (aom_codec_pts_t)kSkip) return;
-
- // Calculate MD5 as the reference.
- ::libaom_test::MD5 md5_res;
- md5_res.Add(&img);
- md5_.push_back(md5_res.Get());
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- // Skip decoding 1 frame.
- if (pkt->data.frame.pts == (aom_codec_pts_t)kSkip) return;
-
- bool IsLastFrame = (pkt->data.frame.pts == (aom_codec_pts_t)(kLimit - 1));
-
- // Decode the first (kLimit - 1) frames as whole frame, and decode the last
- // frame in single tiles.
- for (int r = 0; r < kImgHeight / kTIleSizeInPixels; ++r) {
- for (int c = 0; c < kImgWidth / kTIleSizeInPixels; ++c) {
- if (!IsLastFrame) {
- decoder_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- decoder_->Control(AV1_SET_DECODE_TILE_COL, -1);
- } else {
- decoder_->Control(AV1_SET_DECODE_TILE_ROW, r);
- decoder_->Control(AV1_SET_DECODE_TILE_COL, c);
- }
-
- const aom_codec_err_t res = decoder_->DecodeFrame(
- reinterpret_cast<uint8_t *>(pkt->data.frame.buf),
- pkt->data.frame.sz);
- if (res != AOM_CODEC_OK) {
- abort_ = true;
- ASSERT_EQ(AOM_CODEC_OK, res);
- }
- const aom_image_t *img = decoder_->GetDxData().Next();
-
- if (!IsLastFrame) {
- if (img) {
- ::libaom_test::MD5 md5_res;
- md5_res.Add(img);
- tile_md5_.push_back(md5_res.Get());
- }
- break;
- }
-
- const int kMaxMBPlane = 3;
- for (int plane = 0; plane < kMaxMBPlane; ++plane) {
- const int shift = (plane == 0) ? 0 : 1;
- int tile_height = kTIleSizeInPixels >> shift;
- int tile_width = kTIleSizeInPixels >> shift;
-
- for (int tr = 0; tr < tile_height; ++tr) {
- memcpy(tile_img_.planes[plane] +
- tile_img_.stride[plane] * (r * tile_height + tr) +
- c * tile_width,
- img->planes[plane] + img->stride[plane] * tr, tile_width);
- }
- }
- }
-
- if (!IsLastFrame) break;
- }
-
- if (IsLastFrame) {
- ::libaom_test::MD5 md5_res;
- md5_res.Add(&tile_img_);
- tile_md5_.push_back(md5_res.Get());
- }
- }
-
- void TestRoundTrip() {
- ::libaom_test::I420VideoSource video(
- "hantro_collage_w352h288.yuv", kImgWidth, kImgHeight, 30, 1, 0, kLimit);
- cfg_.rc_target_bitrate = 500;
- cfg_.g_error_resilient = AOM_ERROR_RESILIENT_DEFAULT;
- cfg_.large_scale_tile = 1;
- cfg_.g_lag_in_frames = 0;
- cfg_.g_threads = 1;
-
- // Tile encoding
- init_flags_ = AOM_CODEC_USE_PSNR;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- // Compare to check if two vectors are equal.
- ASSERT_EQ(md5_, tile_md5_);
- }
-
- ::libaom_test::TestMode encoding_mode_;
- int set_cpu_used_;
- ::libaom_test::Decoder *decoder_;
- aom_image_t tile_img_;
- std::vector<std::string> md5_;
- std::vector<std::string> tile_md5_;
-};
-
-TEST_P(AV1ExtTileTest, DecoderResultTest) { TestRoundTrip(); }
-
-AV1_INSTANTIATE_TEST_CASE(
- // Now only test 2-pass mode.
- AV1ExtTileTest, ::testing::Values(::libaom_test::kTwoPassGood),
- ::testing::Range(1, 4));
-
-class AV1ExtTileTestLarge : public AV1ExtTileTest {};
-
-TEST_P(AV1ExtTileTestLarge, DecoderResultTest) { TestRoundTrip(); }
-
-AV1_INSTANTIATE_TEST_CASE(
- // Now only test 2-pass mode.
- AV1ExtTileTestLarge, ::testing::Values(::libaom_test::kTwoPassGood),
- ::testing::Range(0, 1));
-} // namespace
diff --git a/third_party/aom/test/av1_fwd_txfm1d_test.cc b/third_party/aom/test/av1_fwd_txfm1d_test.cc
deleted file mode 100644
index 49a666879..000000000
--- a/third_party/aom/test/av1_fwd_txfm1d_test.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "av1/encoder/av1_fwd_txfm1d.h"
-#include "test/av1_txfm_test.h"
-
-using libaom_test::ACMRandom;
-using libaom_test::TYPE_ADST;
-using libaom_test::TYPE_DCT;
-using libaom_test::TYPE_IDTX;
-using libaom_test::TYPE_TXFM;
-using libaom_test::input_base;
-using libaom_test::reference_hybrid_1d;
-
-namespace {
-const int txfm_type_num = 3;
-const TYPE_TXFM txfm_type_ls[txfm_type_num] = { TYPE_DCT, TYPE_ADST,
- TYPE_IDTX };
-
-const int txfm_size_num = 5;
-
-const int txfm_size_ls[] = { 4, 8, 16, 32, 64 };
-
-const TxfmFunc fwd_txfm_func_ls[][txfm_type_num] = {
- { av1_fdct4_new, av1_fadst4_new, av1_fidentity4_c },
- { av1_fdct8_new, av1_fadst8_new, av1_fidentity8_c },
- { av1_fdct16_new, av1_fadst16_new, av1_fidentity16_c },
- { av1_fdct32_new, NULL, av1_fidentity32_c },
- { av1_fdct64_new, NULL, NULL },
-};
-
-// the maximum stage number of fwd/inv 1d dct/adst txfm is 12
-const int8_t cos_bit = 14;
-const int8_t range_bit[12] = { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 };
-
-TEST(av1_fwd_txfm1d, round_shift) {
- EXPECT_EQ(round_shift(7, 1), 4);
- EXPECT_EQ(round_shift(-7, 1), -3);
-
- EXPECT_EQ(round_shift(7, 2), 2);
- EXPECT_EQ(round_shift(-7, 2), -2);
-
- EXPECT_EQ(round_shift(8, 2), 2);
- EXPECT_EQ(round_shift(-8, 2), -2);
-}
-
-TEST(av1_fwd_txfm1d, av1_cospi_arr_data) {
- for (int i = 0; i < 7; i++) {
- for (int j = 0; j < 64; j++) {
- EXPECT_EQ(av1_cospi_arr_data[i][j],
- (int32_t)round(cos(M_PI * j / 128) * (1 << (cos_bit_min + i))));
- }
- }
-}
-
-TEST(av1_fwd_txfm1d, accuracy) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int si = 0; si < txfm_size_num; ++si) {
- int txfm_size = txfm_size_ls[si];
- int32_t *input = new int32_t[txfm_size];
- int32_t *output = new int32_t[txfm_size];
- double *ref_input = new double[txfm_size];
- double *ref_output = new double[txfm_size];
-
- for (int ti = 0; ti < txfm_type_num; ++ti) {
- TYPE_TXFM txfm_type = txfm_type_ls[ti];
- TxfmFunc fwd_txfm_func = fwd_txfm_func_ls[si][ti];
- int max_error = 7;
-
- const int count_test_block = 5000;
- if (fwd_txfm_func != NULL) {
- for (int ti = 0; ti < count_test_block; ++ti) {
- for (int ni = 0; ni < txfm_size; ++ni) {
- input[ni] = rnd.Rand16() % input_base - rnd.Rand16() % input_base;
- ref_input[ni] = static_cast<double>(input[ni]);
- }
-
- fwd_txfm_func(input, output, cos_bit, range_bit);
- reference_hybrid_1d(ref_input, ref_output, txfm_size, txfm_type);
-
- for (int ni = 0; ni < txfm_size; ++ni) {
- ASSERT_LE(
- abs(output[ni] - static_cast<int32_t>(round(ref_output[ni]))),
- max_error)
- << "tx size = " << txfm_size << ", tx type = " << txfm_type;
- }
- }
- }
- }
-
- delete[] input;
- delete[] output;
- delete[] ref_input;
- delete[] ref_output;
- }
-}
-} // namespace
diff --git a/third_party/aom/test/av1_fwd_txfm2d_test.cc b/third_party/aom/test/av1_fwd_txfm2d_test.cc
deleted file mode 100644
index 75f20536b..000000000
--- a/third_party/aom/test/av1_fwd_txfm2d_test.cc
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "test/av1_txfm_test.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/encoder/hybrid_fwd_txfm.h"
-
-using libaom_test::ACMRandom;
-using libaom_test::TYPE_TXFM;
-using libaom_test::bd;
-using libaom_test::compute_avg_abs_error;
-using libaom_test::input_base;
-
-using std::vector;
-
-namespace {
-// tx_type_, tx_size_, max_error_, max_avg_error_
-typedef ::testing::tuple<TX_TYPE, TX_SIZE, double, double> AV1FwdTxfm2dParam;
-
-class AV1FwdTxfm2d : public ::testing::TestWithParam<AV1FwdTxfm2dParam> {
- public:
- virtual void SetUp() {
- tx_type_ = GET_PARAM(0);
- tx_size_ = GET_PARAM(1);
- max_error_ = GET_PARAM(2);
- max_avg_error_ = GET_PARAM(3);
- count_ = 500;
- TXFM_2D_FLIP_CFG fwd_txfm_flip_cfg;
- av1_get_fwd_txfm_cfg(tx_type_, tx_size_, &fwd_txfm_flip_cfg);
- amplify_factor_ = libaom_test::get_amplification_factor(tx_type_, tx_size_);
- tx_width_ = tx_size_wide[fwd_txfm_flip_cfg.tx_size];
- tx_height_ = tx_size_high[fwd_txfm_flip_cfg.tx_size];
- ud_flip_ = fwd_txfm_flip_cfg.ud_flip;
- lr_flip_ = fwd_txfm_flip_cfg.lr_flip;
-
- fwd_txfm_ = libaom_test::fwd_txfm_func_ls[tx_size_];
- txfm2d_size_ = tx_width_ * tx_height_;
- input_ = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(input_[0]) * txfm2d_size_));
- output_ = reinterpret_cast<int32_t *>(
- aom_memalign(16, sizeof(output_[0]) * txfm2d_size_));
- ref_input_ = reinterpret_cast<double *>(
- aom_memalign(16, sizeof(ref_input_[0]) * txfm2d_size_));
- ref_output_ = reinterpret_cast<double *>(
- aom_memalign(16, sizeof(ref_output_[0]) * txfm2d_size_));
- }
-
- void RunFwdAccuracyCheck() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- double avg_abs_error = 0;
- for (int ci = 0; ci < count_; ci++) {
- for (int ni = 0; ni < txfm2d_size_; ++ni) {
- input_[ni] = rnd.Rand16() % input_base;
- ref_input_[ni] = static_cast<double>(input_[ni]);
- output_[ni] = 0;
- ref_output_[ni] = 0;
- }
-
- fwd_txfm_(input_, output_, tx_width_, tx_type_, bd);
-
- if (lr_flip_ && ud_flip_) {
- libaom_test::fliplrud(ref_input_, tx_width_, tx_height_, tx_width_);
- } else if (lr_flip_) {
- libaom_test::fliplr(ref_input_, tx_width_, tx_height_, tx_width_);
- } else if (ud_flip_) {
- libaom_test::flipud(ref_input_, tx_width_, tx_height_, tx_width_);
- }
-
- libaom_test::reference_hybrid_2d(ref_input_, ref_output_, tx_type_,
- tx_size_);
-
- double actual_max_error = 0;
- for (int ni = 0; ni < txfm2d_size_; ++ni) {
- ref_output_[ni] = round(ref_output_[ni]);
- const double this_error =
- fabs(output_[ni] - ref_output_[ni]) / amplify_factor_;
- actual_max_error = AOMMAX(actual_max_error, this_error);
- }
- EXPECT_GE(max_error_, actual_max_error)
- << "tx_size = " << tx_size_ << ", tx_type = " << tx_type_;
- if (actual_max_error > max_error_) { // exit early.
- break;
- }
-
- avg_abs_error += compute_avg_abs_error<int32_t, double>(
- output_, ref_output_, txfm2d_size_);
- }
-
- avg_abs_error /= amplify_factor_;
- avg_abs_error /= count_;
- EXPECT_GE(max_avg_error_, avg_abs_error)
- << "tx_size = " << tx_size_ << ", tx_type = " << tx_type_;
- }
-
- virtual void TearDown() {
- aom_free(input_);
- aom_free(output_);
- aom_free(ref_input_);
- aom_free(ref_output_);
- }
-
- private:
- double max_error_;
- double max_avg_error_;
- int count_;
- double amplify_factor_;
- TX_TYPE tx_type_;
- TX_SIZE tx_size_;
- int tx_width_;
- int tx_height_;
- int txfm2d_size_;
- FwdTxfm2dFunc fwd_txfm_;
- int16_t *input_;
- int32_t *output_;
- double *ref_input_;
- double *ref_output_;
- int ud_flip_; // flip upside down
- int lr_flip_; // flip left to right
-};
-
-static double avg_error_ls[TX_SIZES_ALL] = {
- 0.5, // 4x4 transform
- 0.5, // 8x8 transform
- 1.2, // 16x16 transform
- 6.1, // 32x32 transform
- 3.4, // 64x64 transform
- 0.57, // 4x8 transform
- 0.68, // 8x4 transform
- 0.92, // 8x16 transform
- 1.1, // 16x8 transform
- 4.1, // 16x32 transform
- 6, // 32x16 transform
- 3.5, // 32x64 transform
- 5.7, // 64x32 transform
- 0.6, // 4x16 transform
- 0.9, // 16x4 transform
- 1.2, // 8x32 transform
- 1.7, // 32x8 transform
- 2.0, // 16x64 transform
- 4.7, // 64x16 transform
-};
-
-static double max_error_ls[TX_SIZES_ALL] = {
- 3, // 4x4 transform
- 5, // 8x8 transform
- 11, // 16x16 transform
- 70, // 32x32 transform
- 64, // 64x64 transform
- 3.9, // 4x8 transform
- 4.3, // 8x4 transform
- 12, // 8x16 transform
- 12, // 16x8 transform
- 32, // 16x32 transform
- 46, // 32x16 transform
- 136, // 32x64 transform
- 136, // 64x32 transform
- 5, // 4x16 transform
- 6, // 16x4 transform
- 21, // 8x32 transform
- 13, // 32x8 transform
- 30, // 16x64 transform
- 36, // 64x16 transform
-};
-
-vector<AV1FwdTxfm2dParam> GetTxfm2dParamList() {
- vector<AV1FwdTxfm2dParam> param_list;
- for (int s = 0; s < TX_SIZES; ++s) {
- const double max_error = max_error_ls[s];
- const double avg_error = avg_error_ls[s];
- for (int t = 0; t < TX_TYPES; ++t) {
- const TX_TYPE tx_type = static_cast<TX_TYPE>(t);
- const TX_SIZE tx_size = static_cast<TX_SIZE>(s);
- if (libaom_test::IsTxSizeTypeValid(tx_size, tx_type)) {
- param_list.push_back(
- AV1FwdTxfm2dParam(tx_type, tx_size, max_error, avg_error));
- }
- }
- }
- return param_list;
-}
-
-INSTANTIATE_TEST_CASE_P(C, AV1FwdTxfm2d,
- ::testing::ValuesIn(GetTxfm2dParamList()));
-
-TEST_P(AV1FwdTxfm2d, RunFwdAccuracyCheck) { RunFwdAccuracyCheck(); }
-
-TEST(AV1FwdTxfm2d, CfgTest) {
- for (int bd_idx = 0; bd_idx < BD_NUM; ++bd_idx) {
- int bd = libaom_test::bd_arr[bd_idx];
- int8_t low_range = libaom_test::low_range_arr[bd_idx];
- int8_t high_range = libaom_test::high_range_arr[bd_idx];
- for (int tx_size = 0; tx_size < TX_SIZES_ALL; ++tx_size) {
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(tx_size),
- static_cast<TX_TYPE>(tx_type)) ==
- false) {
- continue;
- }
- TXFM_2D_FLIP_CFG cfg;
- av1_get_fwd_txfm_cfg(static_cast<TX_TYPE>(tx_type),
- static_cast<TX_SIZE>(tx_size), &cfg);
- int8_t stage_range_col[MAX_TXFM_STAGE_NUM];
- int8_t stage_range_row[MAX_TXFM_STAGE_NUM];
- av1_gen_fwd_stage_range(stage_range_col, stage_range_row, &cfg, bd);
- libaom_test::txfm_stage_range_check(stage_range_col, cfg.stage_num_col,
- cfg.cos_bit_col, low_range,
- high_range);
- libaom_test::txfm_stage_range_check(stage_range_row, cfg.stage_num_row,
- cfg.cos_bit_row, low_range,
- high_range);
- }
- }
- }
-}
-
-typedef void (*lowbd_fwd_txfm_func)(const int16_t *src_diff, tran_low_t *coeff,
- int diff_stride, TxfmParam *txfm_param);
-
-void AV1FwdTxfm2dMatchTest(TX_SIZE tx_size, lowbd_fwd_txfm_func target_func) {
- const int bd = 8;
- TxfmParam param;
- memset(&param, 0, sizeof(param));
- const int rows = tx_size_high[tx_size];
- const int cols = tx_size_wide[tx_size];
- // printf("%d x %d\n", cols, rows);
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(
- tx_size, static_cast<TX_TYPE>(tx_type)) == false) {
- continue;
- }
-
- FwdTxfm2dFunc ref_func = libaom_test::fwd_txfm_func_ls[tx_size];
- if (ref_func != NULL) {
- DECLARE_ALIGNED(32, int16_t, input[64 * 64]) = { 0 };
- DECLARE_ALIGNED(32, int32_t, output[64 * 64]);
- DECLARE_ALIGNED(32, int32_t, ref_output[64 * 64]);
- int input_stride = 64;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int cnt = 0; cnt < 500; ++cnt) {
- if (cnt == 0) {
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- input[r * input_stride + c] = (1 << bd) - 1;
- }
- }
- } else {
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- input[r * input_stride + c] = rnd.Rand16() % (1 << bd);
- }
- }
- }
- param.tx_type = (TX_TYPE)tx_type;
- param.tx_size = (TX_SIZE)tx_size;
- param.tx_set_type = EXT_TX_SET_ALL16;
- param.bd = bd;
- ref_func(input, ref_output, input_stride, (TX_TYPE)tx_type, bd);
- target_func(input, output, input_stride, &param);
- const int check_rows = AOMMIN(32, rows);
- const int check_cols = AOMMIN(32, rows * cols / check_rows);
- for (int r = 0; r < check_rows; ++r) {
- for (int c = 0; c < check_cols; ++c) {
- ASSERT_EQ(ref_output[r * check_cols + c],
- output[r * check_cols + c])
- << "[" << r << "," << c << "] cnt:" << cnt
- << " tx_size: " << tx_size << " tx_type: " << tx_type;
- }
- }
- }
- }
- }
-}
-
-typedef ::testing::tuple<TX_SIZE, lowbd_fwd_txfm_func> LbdFwdTxfm2dParam;
-
-class AV1FwdTxfm2dTest : public ::testing::TestWithParam<LbdFwdTxfm2dParam> {};
-
-TEST_P(AV1FwdTxfm2dTest, match) {
- AV1FwdTxfm2dMatchTest(GET_PARAM(0), GET_PARAM(1));
-}
-
-using ::testing::Combine;
-using ::testing::Values;
-using ::testing::ValuesIn;
-
-#if HAVE_SSE2
-static TX_SIZE fwd_txfm_for_sse2[] = {
- TX_4X4,
- TX_8X8,
- TX_16X16,
- TX_32X32,
- // TX_64X64,
- TX_4X8,
- TX_8X4,
- TX_8X16,
- TX_16X8,
- TX_16X32,
- TX_32X16,
- // TX_32X64,
- // TX_64X32,
- TX_4X16,
- TX_16X4,
- TX_8X32,
- TX_32X8,
- TX_16X64,
- TX_64X16,
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, AV1FwdTxfm2dTest,
- Combine(ValuesIn(fwd_txfm_for_sse2),
- Values(av1_lowbd_fwd_txfm_sse2)));
-#endif // HAVE_SSE2
-
-#if HAVE_SSE4_1
-static TX_SIZE fwd_txfm_for_sse41[] = {
- TX_4X4,
- TX_64X64,
- TX_32X64,
- TX_64X32,
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1FwdTxfm2dTest,
- Combine(ValuesIn(fwd_txfm_for_sse41),
- Values(av1_lowbd_fwd_txfm_sse4_1)));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-static TX_SIZE fwd_txfm_for_avx2[] = {
- TX_4X4, TX_8X8, TX_16X16, TX_32X32, TX_64X64, TX_4X8, TX_8X4,
- TX_8X16, TX_16X8, TX_16X32, TX_32X16, TX_32X64, TX_64X32, TX_4X16,
- TX_16X4, TX_8X32, TX_32X8, TX_16X64, TX_64X16,
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, AV1FwdTxfm2dTest,
- Combine(ValuesIn(fwd_txfm_for_avx2),
- Values(av1_lowbd_fwd_txfm_avx2)));
-#endif // HAVE_AVX2
-
-typedef void (*Highbd_fwd_txfm_func)(const int16_t *src_diff, tran_low_t *coeff,
- int diff_stride, TxfmParam *txfm_param);
-
-void AV1HighbdFwdTxfm2dMatchTest(TX_SIZE tx_size,
- Highbd_fwd_txfm_func target_func) {
- const int bd_ar[2] = { 10, 12 };
- TxfmParam param;
- memset(&param, 0, sizeof(param));
- const int rows = tx_size_high[tx_size];
- const int cols = tx_size_wide[tx_size];
- for (int i = 0; i < 2; ++i) {
- const int bd = bd_ar[i];
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(
- tx_size, static_cast<TX_TYPE>(tx_type)) == false) {
- continue;
- }
-
- FwdTxfm2dFunc ref_func = libaom_test::fwd_txfm_func_ls[tx_size];
- if (ref_func != NULL) {
- DECLARE_ALIGNED(32, int16_t, input[64 * 64]) = { 0 };
- DECLARE_ALIGNED(32, int32_t, output[64 * 64]);
- DECLARE_ALIGNED(32, int32_t, ref_output[64 * 64]);
- int input_stride = 64;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int cnt = 0; cnt < 500; ++cnt) {
- if (cnt == 0) {
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- input[r * input_stride + c] = (1 << bd) - 1;
- }
- }
- } else {
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- input[r * input_stride + c] = rnd.Rand16() % (1 << bd);
- }
- }
- }
- param.tx_type = (TX_TYPE)tx_type;
- param.tx_size = (TX_SIZE)tx_size;
- param.tx_set_type = EXT_TX_SET_ALL16;
- param.bd = bd;
-
- ref_func(input, ref_output, input_stride, (TX_TYPE)tx_type, bd);
- target_func(input, output, input_stride, &param);
- const int check_rows = AOMMIN(32, rows);
- const int check_cols = AOMMIN(32, rows * cols / check_rows);
- for (int r = 0; r < check_rows; ++r) {
- for (int c = 0; c < check_cols; ++c) {
- ASSERT_EQ(ref_output[r * check_cols + c],
- output[r * check_cols + c])
- << "[" << r << "," << c << "] cnt:" << cnt
- << " tx_size: " << tx_size << " tx_type: " << tx_type;
- }
- }
- }
- }
- }
- }
-}
-
-void AV1HighbdFwdTxfm2dSpeedTest(TX_SIZE tx_size,
- Highbd_fwd_txfm_func target_func) {
- const int bd_ar[2] = { 10, 12 };
- TxfmParam param;
- memset(&param, 0, sizeof(param));
- const int rows = tx_size_high[tx_size];
- const int cols = tx_size_wide[tx_size];
- const int num_loops = 1000000 / (rows * cols);
-
- for (int i = 0; i < 2; ++i) {
- const int bd = bd_ar[i];
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(
- tx_size, static_cast<TX_TYPE>(tx_type)) == false) {
- continue;
- }
-
- FwdTxfm2dFunc ref_func = libaom_test::fwd_txfm_func_ls[tx_size];
- if (ref_func != NULL) {
- DECLARE_ALIGNED(32, int16_t, input[64 * 64]) = { 0 };
- DECLARE_ALIGNED(32, int32_t, output[64 * 64]);
- DECLARE_ALIGNED(32, int32_t, ref_output[64 * 64]);
- int input_stride = 64;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- input[r * input_stride + c] = rnd.Rand16() % (1 << bd);
- }
- }
-
- param.tx_type = (TX_TYPE)tx_type;
- param.tx_size = (TX_SIZE)tx_size;
- param.tx_set_type = EXT_TX_SET_ALL16;
- param.bd = bd;
-
- aom_usec_timer ref_timer, test_timer;
-
- aom_usec_timer_start(&ref_timer);
- for (int i = 0; i < num_loops; ++i) {
- ref_func(input, ref_output, input_stride, (TX_TYPE)tx_type, bd);
- }
- aom_usec_timer_mark(&ref_timer);
- const int elapsed_time_c =
- static_cast<int>(aom_usec_timer_elapsed(&ref_timer));
-
- aom_usec_timer_start(&test_timer);
- for (int i = 0; i < num_loops; ++i) {
- target_func(input, output, input_stride, &param);
- }
- aom_usec_timer_mark(&test_timer);
- const int elapsed_time_simd =
- static_cast<int>(aom_usec_timer_elapsed(&test_timer));
-
- printf(
- "txfm_size[%d] \t txfm_type[%d] \t c_time=%d \t simd_time=%d \t "
- "gain=%d \n",
- tx_size, tx_type, elapsed_time_c, elapsed_time_simd,
- (elapsed_time_c / elapsed_time_simd));
- }
- }
- }
-}
-
-typedef ::testing::tuple<TX_SIZE, Highbd_fwd_txfm_func> HighbdFwdTxfm2dParam;
-
-class AV1HighbdFwdTxfm2dTest
- : public ::testing::TestWithParam<HighbdFwdTxfm2dParam> {};
-
-TEST_P(AV1HighbdFwdTxfm2dTest, match) {
- AV1HighbdFwdTxfm2dMatchTest(GET_PARAM(0), GET_PARAM(1));
-}
-
-TEST_P(AV1HighbdFwdTxfm2dTest, DISABLED_Speed) {
- AV1HighbdFwdTxfm2dSpeedTest(GET_PARAM(0), GET_PARAM(1));
-}
-
-using ::testing::Combine;
-using ::testing::Values;
-using ::testing::ValuesIn;
-
-#if HAVE_SSE4_1
-static TX_SIZE Highbd_fwd_txfm_for_sse4_1[] = {
- TX_4X4, TX_8X8, TX_16X16, TX_32X32, TX_64X64, TX_4X8, TX_8X4,
- TX_8X16, TX_16X8, TX_16X32, TX_32X16, TX_32X64, TX_64X32, TX_4X16,
- TX_16X4, TX_8X32, TX_32X8, TX_16X64, TX_64X16,
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdFwdTxfm2dTest,
- Combine(ValuesIn(Highbd_fwd_txfm_for_sse4_1),
- Values(av1_highbd_fwd_txfm)));
-#endif // HAVE_SSE4_1
-
-} // namespace
diff --git a/third_party/aom/test/av1_highbd_iht_test.cc b/third_party/aom/test/av1_highbd_iht_test.cc
deleted file mode 100644
index 2d6490c2a..000000000
--- a/third_party/aom/test/av1_highbd_iht_test.cc
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/av1_txfm_test.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/enums.h"
-#include "av1/common/scan.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "aom_ports/mem.h"
-
-namespace {
-
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-
-typedef void (*HbdHtFunc)(const int16_t *input, int32_t *output, int stride,
- TX_TYPE tx_type, int bd);
-
-typedef void (*IHbdHtFunc)(const int32_t *coeff, uint16_t *output, int stride,
- TX_TYPE tx_type, int bd);
-
-// Test parameter argument list:
-// <transform reference function,
-// optimized inverse transform function,
-// inverse transform reference function,
-// num_coeffs,
-// tx_type,
-// bit_depth>
-typedef tuple<HbdHtFunc, IHbdHtFunc, IHbdHtFunc, int, TX_TYPE, int> IHbdHtParam;
-
-class AV1HighbdInvHTNxN : public ::testing::TestWithParam<IHbdHtParam> {
- public:
- virtual ~AV1HighbdInvHTNxN() {}
-
- virtual void SetUp() {
- txfm_ref_ = GET_PARAM(0);
- inv_txfm_ = GET_PARAM(1);
- inv_txfm_ref_ = GET_PARAM(2);
- num_coeffs_ = GET_PARAM(3);
- tx_type_ = GET_PARAM(4);
- bit_depth_ = GET_PARAM(5);
-
- input_ = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(input_[0]) * num_coeffs_));
-
- // Note:
- // Inverse transform input buffer is 32-byte aligned
- // Refer to <root>/av1/encoder/context_tree.c, function,
- // void alloc_mode_context().
- coeffs_ = reinterpret_cast<int32_t *>(
- aom_memalign(32, sizeof(coeffs_[0]) * num_coeffs_));
- output_ = reinterpret_cast<uint16_t *>(
- aom_memalign(32, sizeof(output_[0]) * num_coeffs_));
- output_ref_ = reinterpret_cast<uint16_t *>(
- aom_memalign(32, sizeof(output_ref_[0]) * num_coeffs_));
- }
-
- virtual void TearDown() {
- aom_free(input_);
- aom_free(coeffs_);
- aom_free(output_);
- aom_free(output_ref_);
- libaom_test::ClearSystemState();
- }
-
- protected:
- void RunBitexactCheck();
-
- private:
- int GetStride() const {
- if (16 == num_coeffs_) {
- return 4;
- } else if (64 == num_coeffs_) {
- return 8;
- } else if (256 == num_coeffs_) {
- return 16;
- } else if (1024 == num_coeffs_) {
- return 32;
- } else if (4096 == num_coeffs_) {
- return 64;
- } else {
- return 0;
- }
- }
-
- HbdHtFunc txfm_ref_;
- IHbdHtFunc inv_txfm_;
- IHbdHtFunc inv_txfm_ref_;
- int num_coeffs_;
- TX_TYPE tx_type_;
- int bit_depth_;
-
- int16_t *input_;
- int32_t *coeffs_;
- uint16_t *output_;
- uint16_t *output_ref_;
-};
-
-void AV1HighbdInvHTNxN::RunBitexactCheck() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int stride = GetStride();
- const int num_tests = 20000;
- const uint16_t mask = (1 << bit_depth_) - 1;
-
- for (int i = 0; i < num_tests; ++i) {
- for (int j = 0; j < num_coeffs_; ++j) {
- input_[j] = (rnd.Rand16() & mask) - (rnd.Rand16() & mask);
- output_ref_[j] = rnd.Rand16() & mask;
- output_[j] = output_ref_[j];
- }
-
- txfm_ref_(input_, coeffs_, stride, tx_type_, bit_depth_);
- inv_txfm_ref_(coeffs_, output_ref_, stride, tx_type_, bit_depth_);
- ASM_REGISTER_STATE_CHECK(
- inv_txfm_(coeffs_, output_, stride, tx_type_, bit_depth_));
-
- for (int j = 0; j < num_coeffs_; ++j) {
- EXPECT_EQ(output_ref_[j], output_[j])
- << "Not bit-exact result at index: " << j << " At test block: " << i;
- }
- }
-}
-
-TEST_P(AV1HighbdInvHTNxN, InvTransResultCheck) { RunBitexactCheck(); }
-
-using ::testing::make_tuple;
-
-#if HAVE_SSE4_1
-#define PARAM_LIST_4X4 \
- &av1_fwd_txfm2d_4x4_c, &av1_inv_txfm2d_add_4x4_sse4_1, \
- &av1_inv_txfm2d_add_4x4_c, 16
-
-const IHbdHtParam kArrayIhtParam[] = {
- // 4x4
- make_tuple(PARAM_LIST_4X4, DCT_DCT, 10),
- make_tuple(PARAM_LIST_4X4, DCT_DCT, 12),
- make_tuple(PARAM_LIST_4X4, ADST_DCT, 10),
- make_tuple(PARAM_LIST_4X4, ADST_DCT, 12),
- make_tuple(PARAM_LIST_4X4, DCT_ADST, 10),
- make_tuple(PARAM_LIST_4X4, DCT_ADST, 12),
- make_tuple(PARAM_LIST_4X4, ADST_ADST, 10),
- make_tuple(PARAM_LIST_4X4, ADST_ADST, 12),
- make_tuple(PARAM_LIST_4X4, FLIPADST_DCT, 10),
- make_tuple(PARAM_LIST_4X4, FLIPADST_DCT, 12),
- make_tuple(PARAM_LIST_4X4, DCT_FLIPADST, 10),
- make_tuple(PARAM_LIST_4X4, DCT_FLIPADST, 12),
- make_tuple(PARAM_LIST_4X4, FLIPADST_FLIPADST, 10),
- make_tuple(PARAM_LIST_4X4, FLIPADST_FLIPADST, 12),
- make_tuple(PARAM_LIST_4X4, ADST_FLIPADST, 10),
- make_tuple(PARAM_LIST_4X4, ADST_FLIPADST, 12),
- make_tuple(PARAM_LIST_4X4, FLIPADST_ADST, 10),
- make_tuple(PARAM_LIST_4X4, FLIPADST_ADST, 12),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdInvHTNxN,
- ::testing::ValuesIn(kArrayIhtParam));
-#endif // HAVE_SSE4_1
-
-typedef void (*HighbdInvTxfm2dFunc)(const int32_t *input, uint8_t *output,
- int stride, const TxfmParam *txfm_param);
-
-typedef ::testing::tuple<const HighbdInvTxfm2dFunc> AV1HighbdInvTxfm2dParam;
-class AV1HighbdInvTxfm2d
- : public ::testing::TestWithParam<AV1HighbdInvTxfm2dParam> {
- public:
- virtual void SetUp() { target_func_ = GET_PARAM(0); }
- void RunAV1InvTxfm2dTest(TX_TYPE tx_type, TX_SIZE tx_size, int run_times,
- int bit_depth);
-
- private:
- HighbdInvTxfm2dFunc target_func_;
-};
-
-void AV1HighbdInvTxfm2d::RunAV1InvTxfm2dTest(TX_TYPE tx_type_, TX_SIZE tx_size_,
- int run_times, int bit_depth_) {
- FwdTxfm2dFunc fwd_func_ = libaom_test::fwd_txfm_func_ls[tx_size_];
- TxfmParam txfm_param;
- const int BLK_WIDTH = 64;
- const int BLK_SIZE = BLK_WIDTH * BLK_WIDTH;
- DECLARE_ALIGNED(16, int16_t, input[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(32, int32_t, inv_input[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(32, uint16_t, output[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(32, uint16_t, ref_output[BLK_SIZE]) = { 0 };
- int stride = BLK_WIDTH;
- int rows = tx_size_high[tx_size_];
- int cols = tx_size_wide[tx_size_];
- const int rows_nonezero = AOMMIN(32, rows);
- const int cols_nonezero = AOMMIN(32, cols);
- const uint16_t mask = (1 << bit_depth_) - 1;
- run_times /= (rows * cols);
- run_times = AOMMAX(1, run_times);
- const SCAN_ORDER *scan_order = get_default_scan(tx_size_, tx_type_);
- const int16_t *scan = scan_order->scan;
- const int16_t eobmax = rows_nonezero * cols_nonezero;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- int randTimes = run_times == 1 ? (eobmax) : 1;
-
- txfm_param.tx_type = tx_type_;
- txfm_param.tx_size = tx_size_;
- txfm_param.lossless = 0;
- txfm_param.bd = bit_depth_;
- txfm_param.is_hbd = 1;
- txfm_param.tx_set_type = EXT_TX_SET_ALL16;
-
- for (int cnt = 0; cnt < randTimes; ++cnt) {
- for (int r = 0; r < BLK_WIDTH; ++r) {
- for (int c = 0; c < BLK_WIDTH; ++c) {
- input[r * cols + c] = (rnd.Rand16() & mask) - (rnd.Rand16() & mask);
- output[r * stride + c] = rnd.Rand16() & mask;
-
- ref_output[r * stride + c] = output[r * stride + c];
- }
- }
- fwd_func_(input, inv_input, stride, tx_type_, bit_depth_);
-
- // produce eob input by setting high freq coeffs to zero
- const int eob = AOMMIN(cnt + 1, eobmax);
- for (int i = eob; i < eobmax; i++) {
- inv_input[scan[i]] = 0;
- }
- txfm_param.eob = eob;
- aom_usec_timer ref_timer, test_timer;
-
- aom_usec_timer_start(&ref_timer);
- for (int i = 0; i < run_times; ++i) {
- av1_highbd_inv_txfm_add_c(inv_input, CONVERT_TO_BYTEPTR(ref_output),
- stride, &txfm_param);
- }
- aom_usec_timer_mark(&ref_timer);
- const int elapsed_time_c =
- static_cast<int>(aom_usec_timer_elapsed(&ref_timer));
-
- aom_usec_timer_start(&test_timer);
- for (int i = 0; i < run_times; ++i) {
- target_func_(inv_input, CONVERT_TO_BYTEPTR(output), stride, &txfm_param);
- }
- aom_usec_timer_mark(&test_timer);
- const int elapsed_time_simd =
- static_cast<int>(aom_usec_timer_elapsed(&test_timer));
- if (run_times > 10) {
- printf(
- "txfm_size[%d] \t txfm_type[%d] \t c_time=%d \t simd_time=%d \t "
- "gain=%d \n",
- tx_size_, tx_type_, elapsed_time_c, elapsed_time_simd,
- (elapsed_time_c / elapsed_time_simd));
- } else {
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- ASSERT_EQ(ref_output[r * stride + c], output[r * stride + c])
- << "[" << r << "," << c << "] " << cnt
- << " tx_size: " << static_cast<int>(tx_size_)
- << " tx_type: " << tx_type_ << " eob " << eob;
- }
- }
- }
- }
-}
-
-TEST_P(AV1HighbdInvTxfm2d, match) {
- int bitdepth_ar[2] = { 10, 12 };
- for (int k = 0; k < 2; ++k) {
- int bd = bitdepth_ar[k];
- for (int j = 0; j < (int)(TX_SIZES_ALL); ++j) {
- for (int i = 0; i < (int)TX_TYPES; ++i) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(j),
- static_cast<TX_TYPE>(i))) {
- RunAV1InvTxfm2dTest(static_cast<TX_TYPE>(i), static_cast<TX_SIZE>(j),
- 1, bd);
- }
- }
- }
- }
-}
-
-TEST_P(AV1HighbdInvTxfm2d, DISABLED_Speed) {
- int bitdepth_ar[2] = { 10, 12 };
- for (int k = 0; k < 2; ++k) {
- int bd = bitdepth_ar[k];
- for (int j = 0; j < (int)(TX_SIZES_ALL); ++j) {
- for (int i = 0; i < (int)TX_TYPES; ++i) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(j),
- static_cast<TX_TYPE>(i))) {
- RunAV1InvTxfm2dTest(static_cast<TX_TYPE>(i), static_cast<TX_SIZE>(j),
- 1000000, bd);
- }
- }
- }
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdInvTxfm2d,
- ::testing::Values(av1_highbd_inv_txfm_add_sse4_1));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AV1HighbdInvTxfm2d,
- ::testing::Values(av1_highbd_inv_txfm_add_avx2));
-#endif
-} // namespace
diff --git a/third_party/aom/test/av1_horz_only_frame_superres_test.cc b/third_party/aom/test/av1_horz_only_frame_superres_test.cc
deleted file mode 100644
index fd77ef35d..000000000
--- a/third_party/aom/test/av1_horz_only_frame_superres_test.cc
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <vector>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/convolve.h"
-#include "av1/common/resize.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-namespace {
-const int kTestIters = 10;
-const int kPerfIters = 1000;
-
-const int kVPad = 32;
-const int kHPad = 32;
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-
-template <typename Pixel>
-class TestImage {
- public:
- TestImage(int w_src, int h, int superres_denom, int x0, int bd)
- : w_src_(w_src), h_(h), superres_denom_(superres_denom), x0_(x0),
- bd_(bd) {
- assert(bd < 16);
- assert(bd <= 8 * static_cast<int>(sizeof(Pixel)));
- assert(9 <= superres_denom && superres_denom <= 16);
- assert(SCALE_NUMERATOR == 8);
- assert(0 <= x0_ && x0_ <= RS_SCALE_SUBPEL_MASK);
-
- w_dst_ = w_src_;
- av1_calculate_unscaled_superres_size(&w_dst_, NULL, superres_denom);
-
- src_stride_ = ALIGN_POWER_OF_TWO(w_src_ + 2 * kHPad, 4);
- dst_stride_ = ALIGN_POWER_OF_TWO(w_dst_ + 2 * kHPad, 4);
-
- // Allocate image data
- src_data_.resize(2 * src_block_size());
- dst_data_.resize(2 * dst_block_size());
- }
-
- void Initialize(ACMRandom *rnd);
- void Check() const;
-
- int src_stride() const { return src_stride_; }
- int dst_stride() const { return dst_stride_; }
-
- int src_block_size() const { return (h_ + 2 * kVPad) * src_stride(); }
- int dst_block_size() const { return (h_ + 2 * kVPad) * dst_stride(); }
-
- int src_width() const { return w_src_; }
- int dst_width() const { return w_dst_; }
- int height() const { return h_; }
- int x0() const { return x0_; }
-
- const Pixel *GetSrcData(bool ref, bool borders) const {
- const Pixel *block = &src_data_[ref ? 0 : src_block_size()];
- return borders ? block : block + kHPad + src_stride_ * kVPad;
- }
-
- Pixel *GetDstData(bool ref, bool borders) {
- Pixel *block = &dst_data_[ref ? 0 : dst_block_size()];
- return borders ? block : block + kHPad + dst_stride_ * kVPad;
- }
-
- private:
- int w_src_, w_dst_, h_, superres_denom_, x0_, bd_;
- int src_stride_, dst_stride_;
-
- std::vector<Pixel> src_data_;
- std::vector<Pixel> dst_data_;
-};
-
-template <typename Pixel>
-void FillEdge(ACMRandom *rnd, int num_pixels, int bd, bool trash, Pixel *data) {
- if (!trash) {
- memset(data, 0, sizeof(*data) * num_pixels);
- return;
- }
- const Pixel mask = (1 << bd) - 1;
- for (int i = 0; i < num_pixels; ++i) data[i] = rnd->Rand16() & mask;
-}
-
-template <typename Pixel>
-void PrepBuffers(ACMRandom *rnd, int w, int h, int stride, int bd,
- bool trash_edges, Pixel *data) {
- assert(rnd);
- const Pixel mask = (1 << bd) - 1;
-
- // Fill in the first buffer with random data
- // Top border
- FillEdge(rnd, stride * kVPad, bd, trash_edges, data);
- for (int r = 0; r < h; ++r) {
- Pixel *row_data = data + (kVPad + r) * stride;
- // Left border, contents, right border
- FillEdge(rnd, kHPad, bd, trash_edges, row_data);
- for (int c = 0; c < w; ++c) row_data[kHPad + c] = rnd->Rand16() & mask;
- FillEdge(rnd, kHPad, bd, trash_edges, row_data + kHPad + w);
- }
- // Bottom border
- FillEdge(rnd, stride * kVPad, bd, trash_edges, data + stride * (kVPad + h));
-
- const int bpp = sizeof(*data);
- const int block_elts = stride * (h + 2 * kVPad);
- const int block_size = bpp * block_elts;
-
- // Now copy that to the second buffer
- memcpy(data + block_elts, data, block_size);
-}
-
-template <typename Pixel>
-void TestImage<Pixel>::Initialize(ACMRandom *rnd) {
- PrepBuffers(rnd, w_src_, h_, src_stride_, bd_, false, &src_data_[0]);
- PrepBuffers(rnd, w_dst_, h_, dst_stride_, bd_, true, &dst_data_[0]);
-}
-
-template <typename Pixel>
-void TestImage<Pixel>::Check() const {
- const int num_pixels = dst_block_size();
- const Pixel *ref_dst = &dst_data_[0];
- const Pixel *tst_dst = &dst_data_[num_pixels];
-
- // If memcmp returns 0, there's nothing to do.
- if (0 == memcmp(ref_dst, tst_dst, sizeof(*ref_dst) * num_pixels)) return;
-
- // Otherwise, iterate through the buffer looking for differences, *ignoring
- // the edges*
- const int stride = dst_stride_;
- for (int r = kVPad; r < h_ + kVPad; ++r) {
- for (int c = kVPad; c < w_dst_ + kHPad; ++c) {
- const int32_t ref_value = ref_dst[r * stride + c];
- const int32_t tst_value = tst_dst[r * stride + c];
-
- EXPECT_EQ(tst_value, ref_value)
- << "Error at row: " << (r - kVPad) << ", col: " << (c - kHPad)
- << ", superres_denom: " << superres_denom_ << ", height: " << h_
- << ", src_width: " << w_src_ << ", dst_width: " << w_dst_
- << ", x0: " << x0_;
- }
- }
-}
-
-template <typename Pixel>
-class ConvolveHorizRSTestBase : public ::testing::Test {
- public:
- ConvolveHorizRSTestBase() : image_(NULL) {}
- virtual ~ConvolveHorizRSTestBase() {}
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- // Implemented by subclasses (SetUp depends on the parameters passed
- // in and RunOne depends on the function to be tested. These can't
- // be templated for low/high bit depths because they have different
- // numbers of parameters)
- virtual void SetUp() = 0;
- virtual void RunOne(bool ref) = 0;
-
- protected:
- void SetBitDepth(int bd) { bd_ = bd; }
-
- void CorrectnessTest() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int i = 0; i < kTestIters; ++i) {
- for (int superres_denom = 9; superres_denom <= 16; superres_denom++) {
- // Get a random height between 512 and 767
- int height = rnd.Rand8() + 512;
-
- // Get a random src width between 128 and 383
- int width_src = rnd.Rand8() + 128;
-
- // x0 is normally calculated by get_upscale_convolve_x0 in
- // av1/common/resize.c. However, this test should work for
- // any value of x0 between 0 and RS_SCALE_SUBPEL_MASK
- // (inclusive), so we choose one at random.
- int x0 = rnd.Rand16() % (RS_SCALE_SUBPEL_MASK + 1);
-
- image_ =
- new TestImage<Pixel>(width_src, height, superres_denom, x0, bd_);
-
- Prep(&rnd);
- RunOne(true);
- RunOne(false);
- image_->Check();
-
- delete image_;
- }
- }
- }
-
- void SpeedTest() {
- // Pick some specific parameters to test
- int height = 767;
- int width_src = 129;
- int superres_denom = 13;
- int x0 = RS_SCALE_SUBPEL_MASK >> 1;
-
- image_ = new TestImage<Pixel>(width_src, height, superres_denom, x0, bd_);
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- Prep(&rnd);
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (int i = 0; i < kPerfIters; ++i) RunOne(true);
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (int i = 0; i < kPerfIters; ++i) RunOne(false);
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: ConvolveHorizRSTest (Speed Test), SIMD slower than C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
- }
-
- void Prep(ACMRandom *rnd) {
- assert(rnd);
- image_->Initialize(rnd);
- }
-
- int bd_;
- TestImage<Pixel> *image_;
-};
-
-typedef void (*LowBDConvolveHorizRsFunc)(const uint8_t *src, int src_stride,
- uint8_t *dst, int dst_stride, int w,
- int h, const int16_t *x_filters,
- const int x0_qn, const int x_step_qn);
-
-// Test parameter list:
-// <tst_fun_>
-typedef tuple<LowBDConvolveHorizRsFunc> LowBDParams;
-
-class LowBDConvolveHorizRSTest
- : public ConvolveHorizRSTestBase<uint8_t>,
- public ::testing::WithParamInterface<LowBDParams> {
- public:
- virtual ~LowBDConvolveHorizRSTest() {}
-
- void SetUp() {
- tst_fun_ = GET_PARAM(0);
- const int bd = 8;
- SetBitDepth(bd);
- }
-
- void RunOne(bool ref) {
- const uint8_t *src = image_->GetSrcData(ref, false);
- uint8_t *dst = image_->GetDstData(ref, false);
- const int src_stride = image_->src_stride();
- const int dst_stride = image_->dst_stride();
- const int width_src = image_->src_width();
- const int width_dst = image_->dst_width();
- const int height = image_->height();
- const int x0_qn = image_->x0();
-
- const int32_t x_step_qn =
- av1_get_upscale_convolve_step(width_src, width_dst);
-
- if (ref) {
- av1_convolve_horiz_rs_c(src, src_stride, dst, dst_stride, width_dst,
- height, &av1_resize_filter_normative[0][0], x0_qn,
- x_step_qn);
- } else {
- tst_fun_(src, src_stride, dst, dst_stride, width_dst, height,
- &av1_resize_filter_normative[0][0], x0_qn, x_step_qn);
- }
- }
-
- private:
- LowBDConvolveHorizRsFunc tst_fun_;
-};
-
-TEST_P(LowBDConvolveHorizRSTest, Correctness) { CorrectnessTest(); }
-TEST_P(LowBDConvolveHorizRSTest, DISABLED_Speed) { SpeedTest(); }
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, LowBDConvolveHorizRSTest,
- ::testing::Values(av1_convolve_horiz_rs_sse4_1));
-
-typedef void (*HighBDConvolveHorizRsFunc)(const uint16_t *src, int src_stride,
- uint16_t *dst, int dst_stride, int w,
- int h, const int16_t *x_filters,
- const int x0_qn, const int x_step_qn,
- int bd);
-
-// Test parameter list:
-// <tst_fun_, bd_>
-typedef tuple<HighBDConvolveHorizRsFunc, int> HighBDParams;
-
-class HighBDConvolveHorizRSTest
- : public ConvolveHorizRSTestBase<uint16_t>,
- public ::testing::WithParamInterface<HighBDParams> {
- public:
- virtual ~HighBDConvolveHorizRSTest() {}
-
- void SetUp() {
- tst_fun_ = GET_PARAM(0);
- const int bd = GET_PARAM(1);
- SetBitDepth(bd);
- }
-
- void RunOne(bool ref) {
- const uint16_t *src = image_->GetSrcData(ref, false);
- uint16_t *dst = image_->GetDstData(ref, false);
- const int src_stride = image_->src_stride();
- const int dst_stride = image_->dst_stride();
- const int width_src = image_->src_width();
- const int width_dst = image_->dst_width();
- const int height = image_->height();
- const int x0_qn = image_->x0();
-
- const int32_t x_step_qn =
- av1_get_upscale_convolve_step(width_src, width_dst);
-
- if (ref) {
- av1_highbd_convolve_horiz_rs_c(
- src, src_stride, dst, dst_stride, width_dst, height,
- &av1_resize_filter_normative[0][0], x0_qn, x_step_qn, bd_);
- } else {
- tst_fun_(src, src_stride, dst, dst_stride, width_dst, height,
- &av1_resize_filter_normative[0][0], x0_qn, x_step_qn, bd_);
- }
- }
-
- private:
- HighBDConvolveHorizRsFunc tst_fun_;
-};
-
-const int kBDs[] = { 8, 10, 12 };
-
-TEST_P(HighBDConvolveHorizRSTest, Correctness) { CorrectnessTest(); }
-TEST_P(HighBDConvolveHorizRSTest, DISABLED_Speed) { SpeedTest(); }
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, HighBDConvolveHorizRSTest,
- ::testing::Combine(::testing::Values(av1_highbd_convolve_horiz_rs_sse4_1),
- ::testing::ValuesIn(kBDs)));
-
-} // namespace
diff --git a/third_party/aom/test/av1_inv_txfm1d_test.cc b/third_party/aom/test/av1_inv_txfm1d_test.cc
deleted file mode 100644
index bf3a44ed1..000000000
--- a/third_party/aom/test/av1_inv_txfm1d_test.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-
-#include "test/av1_txfm_test.h"
-#include "test/util.h"
-#include "av1/common/av1_inv_txfm1d.h"
-#include "av1/encoder/av1_fwd_txfm1d.h"
-
-using libaom_test::ACMRandom;
-using libaom_test::input_base;
-
-namespace {
-const int txfm_type_num = 2;
-const int txfm_size_ls[] = { 4, 8, 16, 32, 64 };
-
-const TxfmFunc fwd_txfm_func_ls[][txfm_type_num] = {
- { av1_fdct4_new, av1_fadst4_new },
- { av1_fdct8_new, av1_fadst8_new },
- { av1_fdct16_new, av1_fadst16_new },
- { av1_fdct32_new, NULL },
- { av1_fdct64_new, NULL },
-};
-
-const TxfmFunc inv_txfm_func_ls[][txfm_type_num] = {
- { av1_idct4_new, av1_iadst4_new },
- { av1_idct8_new, av1_iadst8_new },
- { av1_idct16_new, av1_iadst16_new },
- { av1_idct32_new, NULL },
- { av1_idct64_new, NULL },
-};
-
-// the maximum stage number of fwd/inv 1d dct/adst txfm is 12
-const int8_t cos_bit = 13;
-const int8_t range_bit[12] = { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 };
-
-void reference_idct_1d_int(const int32_t *in, int32_t *out, int size) {
- double input[64];
- for (int i = 0; i < size; ++i) input[i] = in[i];
-
- double output[64];
- libaom_test::reference_idct_1d(input, output, size);
-
- for (int i = 0; i < size; ++i) {
- ASSERT_GE(output[i], INT32_MIN);
- ASSERT_LE(output[i], INT32_MAX);
- out[i] = static_cast<int32_t>(round(output[i]));
- }
-}
-
-void random_matrix(int32_t *dst, int len, ACMRandom *rnd) {
- const int bits = 16;
- const int maxVal = (1 << (bits - 1)) - 1;
- const int minVal = -(1 << (bits - 1));
- for (int i = 0; i < len; ++i) {
- if (rnd->Rand8() % 10)
- dst[i] = minVal + rnd->Rand16() % (1 << bits);
- else
- dst[i] = rnd->Rand8() % 2 ? minVal : maxVal;
- }
-}
-
-TEST(av1_inv_txfm1d, InvAccuracyCheck) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int count_test_block = 20000;
- const int max_error[] = { 6, 10, 19, 31, 40 };
- ASSERT_EQ(NELEMENTS(max_error), TX_SIZES);
- ASSERT_EQ(NELEMENTS(inv_txfm_func_ls), TX_SIZES);
- for (int k = 0; k < count_test_block; ++k) {
- // choose a random transform to test
- const TX_SIZE tx_size = static_cast<TX_SIZE>(rnd.Rand8() % TX_SIZES);
- const int tx_size_pix = txfm_size_ls[tx_size];
- const TxfmFunc inv_txfm_func = inv_txfm_func_ls[tx_size][0];
-
- int32_t input[64];
- random_matrix(input, tx_size_pix, &rnd);
-
- // 64x64 transform assumes last 32 values are zero.
- memset(input + 32, 0, 32 * sizeof(input[0]));
-
- int32_t ref_output[64];
- reference_idct_1d_int(input, ref_output, tx_size_pix);
-
- int32_t output[64];
- inv_txfm_func(input, output, cos_bit, range_bit);
-
- for (int i = 0; i < tx_size_pix; ++i) {
- EXPECT_LE(abs(output[i] - ref_output[i]), max_error[tx_size])
- << "tx_size = " << tx_size << ", i = " << i
- << ", output[i] = " << output[i]
- << ", ref_output[i] = " << ref_output[i];
- }
- }
-}
-
-static INLINE int get_max_bit(int x) {
- int max_bit = -1;
- while (x) {
- x = x >> 1;
- max_bit++;
- }
- return max_bit;
-}
-
-TEST(av1_inv_txfm1d, get_max_bit) {
- int max_bit = get_max_bit(8);
- EXPECT_EQ(max_bit, 3);
-}
-
-TEST(av1_inv_txfm1d, round_trip) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int si = 0; si < NELEMENTS(fwd_txfm_func_ls); ++si) {
- int txfm_size = txfm_size_ls[si];
-
- for (int ti = 0; ti < txfm_type_num; ++ti) {
- TxfmFunc fwd_txfm_func = fwd_txfm_func_ls[si][ti];
- TxfmFunc inv_txfm_func = inv_txfm_func_ls[si][ti];
- int max_error = 2;
-
- if (!fwd_txfm_func) continue;
-
- const int count_test_block = 5000;
- for (int ci = 0; ci < count_test_block; ++ci) {
- int32_t input[64];
- int32_t output[64];
- int32_t round_trip_output[64];
-
- ASSERT_LE(txfm_size, NELEMENTS(input));
-
- for (int ni = 0; ni < txfm_size; ++ni) {
- input[ni] = rnd.Rand16() % input_base - rnd.Rand16() % input_base;
- }
-
- fwd_txfm_func(input, output, cos_bit, range_bit);
- inv_txfm_func(output, round_trip_output, cos_bit, range_bit);
-
- for (int ni = 0; ni < txfm_size; ++ni) {
- int node_err =
- abs(input[ni] - round_shift(round_trip_output[ni],
- get_max_bit(txfm_size) - 1));
- EXPECT_LE(node_err, max_error);
- }
- }
- }
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/av1_inv_txfm2d_test.cc b/third_party/aom/test/av1_inv_txfm2d_test.cc
deleted file mode 100644
index 11e231ba6..000000000
--- a/third_party/aom/test/av1_inv_txfm2d_test.cc
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/av1_inv_txfm1d_cfg.h"
-#include "av1/common/scan.h"
-#include "test/acm_random.h"
-#include "test/av1_txfm_test.h"
-#include "test/util.h"
-
-using libaom_test::ACMRandom;
-using libaom_test::InvTxfm2dFunc;
-using libaom_test::LbdInvTxfm2dFunc;
-using libaom_test::bd;
-using libaom_test::compute_avg_abs_error;
-using libaom_test::input_base;
-
-using ::testing::Combine;
-using ::testing::Range;
-using ::testing::Values;
-
-using std::vector;
-
-namespace {
-
-// AV1InvTxfm2dParam argument list:
-// tx_type_, tx_size_, max_error_, max_avg_error_
-typedef ::testing::tuple<TX_TYPE, TX_SIZE, int, double> AV1InvTxfm2dParam;
-
-class AV1InvTxfm2d : public ::testing::TestWithParam<AV1InvTxfm2dParam> {
- public:
- virtual void SetUp() {
- tx_type_ = GET_PARAM(0);
- tx_size_ = GET_PARAM(1);
- max_error_ = GET_PARAM(2);
- max_avg_error_ = GET_PARAM(3);
- }
-
- void RunRoundtripCheck() {
- int tx_w = tx_size_wide[tx_size_];
- int tx_h = tx_size_high[tx_size_];
- int txfm2d_size = tx_w * tx_h;
- const FwdTxfm2dFunc fwd_txfm_func = libaom_test::fwd_txfm_func_ls[tx_size_];
- const InvTxfm2dFunc inv_txfm_func = libaom_test::inv_txfm_func_ls[tx_size_];
- double avg_abs_error = 0;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- const int count = 500;
-
- for (int ci = 0; ci < count; ci++) {
- DECLARE_ALIGNED(16, int16_t, input[64 * 64]) = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(input));
-
- for (int ni = 0; ni < txfm2d_size; ++ni) {
- if (ci == 0) {
- int extreme_input = input_base - 1;
- input[ni] = extreme_input; // extreme case
- } else {
- input[ni] = rnd.Rand16() % input_base;
- }
- }
-
- DECLARE_ALIGNED(16, uint16_t, expected[64 * 64]) = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(expected));
- if (TxfmUsesApproximation()) {
- // Compare reference forward HT + inverse HT vs forward HT + inverse HT.
- double ref_input[64 * 64];
- ASSERT_LE(txfm2d_size, NELEMENTS(ref_input));
- for (int ni = 0; ni < txfm2d_size; ++ni) {
- ref_input[ni] = input[ni];
- }
- double ref_coeffs[64 * 64] = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(ref_coeffs));
- ASSERT_EQ(tx_type_, DCT_DCT);
- libaom_test::reference_hybrid_2d(ref_input, ref_coeffs, tx_type_,
- tx_size_);
- DECLARE_ALIGNED(16, int32_t, ref_coeffs_int[64 * 64]) = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(ref_coeffs_int));
- for (int ni = 0; ni < txfm2d_size; ++ni) {
- ref_coeffs_int[ni] = (int32_t)round(ref_coeffs[ni]);
- }
- inv_txfm_func(ref_coeffs_int, expected, tx_w, tx_type_, bd);
- } else {
- // Compare original input vs forward HT + inverse HT.
- for (int ni = 0; ni < txfm2d_size; ++ni) {
- expected[ni] = input[ni];
- }
- }
-
- DECLARE_ALIGNED(16, int32_t, coeffs[64 * 64]) = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(coeffs));
- fwd_txfm_func(input, coeffs, tx_w, tx_type_, bd);
-
- DECLARE_ALIGNED(16, uint16_t, actual[64 * 64]) = { 0 };
- ASSERT_LE(txfm2d_size, NELEMENTS(actual));
- inv_txfm_func(coeffs, actual, tx_w, tx_type_, bd);
-
- double actual_max_error = 0;
- for (int ni = 0; ni < txfm2d_size; ++ni) {
- const double this_error = abs(expected[ni] - actual[ni]);
- actual_max_error = AOMMAX(actual_max_error, this_error);
- }
- EXPECT_GE(max_error_, actual_max_error)
- << " tx_w: " << tx_w << " tx_h " << tx_h << " tx_type: " << tx_type_;
- if (actual_max_error > max_error_) { // exit early.
- break;
- }
- avg_abs_error += compute_avg_abs_error<uint16_t, uint16_t>(
- expected, actual, txfm2d_size);
- }
-
- avg_abs_error /= count;
- EXPECT_GE(max_avg_error_, avg_abs_error)
- << " tx_w: " << tx_w << " tx_h " << tx_h << " tx_type: " << tx_type_;
- }
-
- private:
- bool TxfmUsesApproximation() {
- if (tx_size_wide[tx_size_] == 64 || tx_size_high[tx_size_] == 64) {
- return true;
- }
- return false;
- }
-
- int max_error_;
- double max_avg_error_;
- TX_TYPE tx_type_;
- TX_SIZE tx_size_;
-};
-
-static int max_error_ls[TX_SIZES_ALL] = {
- 2, // 4x4 transform
- 2, // 8x8 transform
- 2, // 16x16 transform
- 4, // 32x32 transform
- 3, // 64x64 transform
- 2, // 4x8 transform
- 2, // 8x4 transform
- 2, // 8x16 transform
- 2, // 16x8 transform
- 3, // 16x32 transform
- 3, // 32x16 transform
- 5, // 32x64 transform
- 5, // 64x32 transform
- 2, // 4x16 transform
- 2, // 16x4 transform
- 2, // 8x32 transform
- 2, // 32x8 transform
- 3, // 16x64 transform
- 3, // 64x16 transform
-};
-
-static double avg_error_ls[TX_SIZES_ALL] = {
- 0.002, // 4x4 transform
- 0.05, // 8x8 transform
- 0.07, // 16x16 transform
- 0.4, // 32x32 transform
- 0.3, // 64x64 transform
- 0.02, // 4x8 transform
- 0.02, // 8x4 transform
- 0.04, // 8x16 transform
- 0.07, // 16x8 transform
- 0.4, // 16x32 transform
- 0.5, // 32x16 transform
- 0.38, // 32x64 transform
- 0.39, // 64x32 transform
- 0.2, // 4x16 transform
- 0.2, // 16x4 transform
- 0.2, // 8x32 transform
- 0.2, // 32x8 transform
- 0.38, // 16x64 transform
- 0.38, // 64x16 transform
-};
-
-vector<AV1InvTxfm2dParam> GetInvTxfm2dParamList() {
- vector<AV1InvTxfm2dParam> param_list;
- for (int s = 0; s < TX_SIZES; ++s) {
- const int max_error = max_error_ls[s];
- const double avg_error = avg_error_ls[s];
- for (int t = 0; t < TX_TYPES; ++t) {
- const TX_TYPE tx_type = static_cast<TX_TYPE>(t);
- const TX_SIZE tx_size = static_cast<TX_SIZE>(s);
- if (libaom_test::IsTxSizeTypeValid(tx_size, tx_type)) {
- param_list.push_back(
- AV1InvTxfm2dParam(tx_type, tx_size, max_error, avg_error));
- }
- }
- }
- return param_list;
-}
-
-INSTANTIATE_TEST_CASE_P(C, AV1InvTxfm2d,
- ::testing::ValuesIn(GetInvTxfm2dParamList()));
-
-TEST_P(AV1InvTxfm2d, RunRoundtripCheck) { RunRoundtripCheck(); }
-
-TEST(AV1InvTxfm2d, CfgTest) {
- for (int bd_idx = 0; bd_idx < BD_NUM; ++bd_idx) {
- int bd = libaom_test::bd_arr[bd_idx];
- int8_t low_range = libaom_test::low_range_arr[bd_idx];
- int8_t high_range = libaom_test::high_range_arr[bd_idx];
- for (int tx_size = 0; tx_size < TX_SIZES_ALL; ++tx_size) {
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(tx_size),
- static_cast<TX_TYPE>(tx_type)) ==
- false) {
- continue;
- }
- TXFM_2D_FLIP_CFG cfg;
- av1_get_inv_txfm_cfg(static_cast<TX_TYPE>(tx_type),
- static_cast<TX_SIZE>(tx_size), &cfg);
- int8_t stage_range_col[MAX_TXFM_STAGE_NUM];
- int8_t stage_range_row[MAX_TXFM_STAGE_NUM];
- av1_gen_inv_stage_range(stage_range_col, stage_range_row, &cfg,
- (TX_SIZE)tx_size, bd);
- libaom_test::txfm_stage_range_check(stage_range_col, cfg.stage_num_col,
- cfg.cos_bit_col, low_range,
- high_range);
- libaom_test::txfm_stage_range_check(stage_range_row, cfg.stage_num_row,
- cfg.cos_bit_row, low_range,
- high_range);
- }
- }
- }
-}
-
-typedef ::testing::tuple<const LbdInvTxfm2dFunc> AV1LbdInvTxfm2dParam;
-class AV1LbdInvTxfm2d : public ::testing::TestWithParam<AV1LbdInvTxfm2dParam> {
- public:
- virtual void SetUp() { target_func_ = GET_PARAM(0); }
- void RunAV1InvTxfm2dTest(TX_TYPE tx_type, TX_SIZE tx_size, int run_times);
-
- private:
- LbdInvTxfm2dFunc target_func_;
-};
-
-void AV1LbdInvTxfm2d::RunAV1InvTxfm2dTest(TX_TYPE tx_type, TX_SIZE tx_size,
- int run_times) {
- FwdTxfm2dFunc fwd_func_ = libaom_test::fwd_txfm_func_ls[tx_size];
- InvTxfm2dFunc ref_func_ = libaom_test::inv_txfm_func_ls[tx_size];
- if (fwd_func_ == NULL || ref_func_ == NULL || target_func_ == NULL) {
- return;
- }
- const int bd = 8;
- const int BLK_WIDTH = 64;
- const int BLK_SIZE = BLK_WIDTH * BLK_WIDTH;
- DECLARE_ALIGNED(16, int16_t, input[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(32, int32_t, inv_input[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(16, uint8_t, output[BLK_SIZE]) = { 0 };
- DECLARE_ALIGNED(16, uint16_t, ref_output[BLK_SIZE]) = { 0 };
- int stride = BLK_WIDTH;
- int rows = tx_size_high[tx_size];
- int cols = tx_size_wide[tx_size];
- const int rows_nonezero = AOMMIN(32, rows);
- const int cols_nonezero = AOMMIN(32, cols);
- run_times /= (rows * cols);
- run_times = AOMMAX(1, run_times);
- const SCAN_ORDER *scan_order = get_default_scan(tx_size, tx_type);
- const int16_t *scan = scan_order->scan;
- const int16_t eobmax = rows_nonezero * cols_nonezero;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- int randTimes = run_times == 1 ? (eobmax + 500) : 1;
- for (int cnt = 0; cnt < randTimes; ++cnt) {
- const int16_t max_in = (1 << (bd)) - 1;
- for (int r = 0; r < BLK_WIDTH; ++r) {
- for (int c = 0; c < BLK_WIDTH; ++c) {
- input[r * cols + c] = (cnt == 0) ? max_in : rnd.Rand8Extremes();
- output[r * stride + c] = (cnt == 0) ? 128 : rnd.Rand8();
- ref_output[r * stride + c] = output[r * stride + c];
- }
- }
- fwd_func_(input, inv_input, stride, tx_type, bd);
-
- // produce eob input by setting high freq coeffs to zero
- const int eob = AOMMIN(cnt + 1, eobmax);
- for (int i = eob; i < eobmax; i++) {
- inv_input[scan[i]] = 0;
- }
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- ref_func_(inv_input, ref_output, stride, tx_type, bd);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- target_func_(inv_input, output, stride, tx_type, tx_size, eob);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 10) {
- printf("txfm[%d] %3dx%-3d:%7.2f/%7.2fns", tx_type, cols, rows, time1,
- time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- for (int r = 0; r < rows; ++r) {
- for (int c = 0; c < cols; ++c) {
- uint8_t ref_value = static_cast<uint8_t>(ref_output[r * stride + c]);
- ASSERT_EQ(ref_value, output[r * stride + c])
- << "[" << r << "," << c << "] " << cnt
- << " tx_size: " << static_cast<int>(tx_size)
- << " tx_type: " << tx_type << " eob " << eob;
- }
- }
- }
-}
-
-TEST_P(AV1LbdInvTxfm2d, match) {
- for (int j = 0; j < (int)(TX_SIZES_ALL); ++j) {
- for (int i = 0; i < (int)TX_TYPES; ++i) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(j),
- static_cast<TX_TYPE>(i))) {
- RunAV1InvTxfm2dTest(static_cast<TX_TYPE>(i), static_cast<TX_SIZE>(j),
- 1);
- }
- }
- }
-}
-
-TEST_P(AV1LbdInvTxfm2d, DISABLED_Speed) {
- for (int j = 0; j < (int)(TX_SIZES_ALL); ++j) {
- for (int i = 0; i < (int)TX_TYPES; ++i) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(j),
- static_cast<TX_TYPE>(i))) {
- RunAV1InvTxfm2dTest(static_cast<TX_TYPE>(i), static_cast<TX_SIZE>(j),
- 10000000);
- }
- }
- }
-}
-
-#if HAVE_SSSE3
-#if defined(_MSC_VER) || defined(__SSSE3__)
-#include "av1/common/x86/av1_inv_txfm_ssse3.h"
-INSTANTIATE_TEST_CASE_P(SSSE3, AV1LbdInvTxfm2d,
- ::testing::Values(av1_lowbd_inv_txfm2d_add_ssse3));
-#endif // _MSC_VER || __SSSE3__
-#endif // HAVE_SSSE3
-
-#if HAVE_AVX2
-extern "C" void av1_lowbd_inv_txfm2d_add_avx2(const int32_t *input,
- uint8_t *output, int stride,
- TX_TYPE tx_type, TX_SIZE tx_size,
- int eob);
-
-INSTANTIATE_TEST_CASE_P(AVX2, AV1LbdInvTxfm2d,
- ::testing::Values(av1_lowbd_inv_txfm2d_add_avx2));
-#endif // HAVE_AVX2
-
-#if HAVE_NEON
-
-extern "C" void av1_lowbd_inv_txfm2d_add_neon(const int32_t *input,
- uint8_t *output, int stride,
- TX_TYPE tx_type, TX_SIZE tx_size,
- int eob);
-
-INSTANTIATE_TEST_CASE_P(NEON, AV1LbdInvTxfm2d,
- ::testing::Values(av1_lowbd_inv_txfm2d_add_neon));
-#endif // HAVE_NEON
-
-} // namespace
diff --git a/third_party/aom/test/av1_quantize_test.cc b/third_party/aom/test/av1_quantize_test.cc
deleted file mode 100644
index aaf093918..000000000
--- a/third_party/aom/test/av1_quantize_test.cc
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include <stdlib.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "av1/common/scan.h"
-
-namespace {
-
-typedef void (*QuantizeFpFunc)(
- const tran_low_t *coeff_ptr, intptr_t count, const int16_t *zbin_ptr,
- const int16_t *round_ptr, const int16_t *quant_ptr,
- const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr,
- tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr,
- const int16_t *scan, const int16_t *iscan, int log_scale);
-
-struct QuantizeFuncParams {
- QuantizeFuncParams(QuantizeFpFunc qF = NULL, QuantizeFpFunc qRefF = NULL,
- int count = 16)
- : qFunc(qF), qFuncRef(qRefF), coeffCount(count) {}
- QuantizeFpFunc qFunc;
- QuantizeFpFunc qFuncRef;
- int coeffCount;
-};
-
-using libaom_test::ACMRandom;
-
-const int numTests = 1000;
-const int maxSize = 1024;
-const int roundFactorRange = 127;
-const int dequantRange = 32768;
-const int coeffRange = (1 << 20) - 1;
-
-class AV1QuantizeTest : public ::testing::TestWithParam<QuantizeFuncParams> {
- public:
- void RunQuantizeTest() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, tran_low_t, coeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, int16_t, zbin_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, round_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, quant_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, quant_shift_ptr[8]);
- DECLARE_ALIGNED(16, tran_low_t, qcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, dqcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, ref_qcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, ref_dqcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, int16_t, dequant_ptr[8]);
- uint16_t eob;
- uint16_t ref_eob;
- int err_count_total = 0;
- int first_failure = -1;
- int count = params_.coeffCount;
- const TX_SIZE txSize = getTxSize(count);
- int log_scale = (txSize == TX_32X32);
- QuantizeFpFunc quanFunc = params_.qFunc;
- QuantizeFpFunc quanFuncRef = params_.qFuncRef;
-
- const SCAN_ORDER scanOrder = av1_default_scan_orders[txSize];
- for (int i = 0; i < numTests; i++) {
- int err_count = 0;
- ref_eob = eob = -1;
- for (int j = 0; j < count; j++) {
- coeff_ptr[j] = rnd(coeffRange);
- }
-
- for (int j = 0; j < 2; j++) {
- zbin_ptr[j] = rnd.Rand16();
- quant_shift_ptr[j] = rnd.Rand16();
- // int16_t positive
- dequant_ptr[j] = abs(rnd(dequantRange));
- quant_ptr[j] = (1 << 16) / dequant_ptr[j];
- round_ptr[j] = (abs(rnd(roundFactorRange)) * dequant_ptr[j]) >> 7;
- }
- for (int j = 2; j < 8; ++j) {
- zbin_ptr[j] = zbin_ptr[1];
- quant_shift_ptr[j] = quant_shift_ptr[1];
- dequant_ptr[j] = dequant_ptr[1];
- quant_ptr[j] = quant_ptr[1];
- round_ptr[j] = round_ptr[1];
- }
- quanFuncRef(coeff_ptr, count, zbin_ptr, round_ptr, quant_ptr,
- quant_shift_ptr, ref_qcoeff_ptr, ref_dqcoeff_ptr, dequant_ptr,
- &ref_eob, scanOrder.scan, scanOrder.iscan, log_scale);
-
- ASM_REGISTER_STATE_CHECK(
- quanFunc(coeff_ptr, count, zbin_ptr, round_ptr, quant_ptr,
- quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr, &eob,
- scanOrder.scan, scanOrder.iscan, log_scale));
-
- for (int j = 0; j < count; ++j) {
- err_count += (ref_qcoeff_ptr[j] != qcoeff_ptr[j]) |
- (ref_dqcoeff_ptr[j] != dqcoeff_ptr[j]);
- ASSERT_EQ(ref_qcoeff_ptr[j], qcoeff_ptr[j])
- << "qcoeff error: i = " << i << " j = " << j << "\n";
- EXPECT_EQ(ref_dqcoeff_ptr[j], dqcoeff_ptr[j])
- << "dqcoeff error: i = " << i << " j = " << j << "\n";
- }
- EXPECT_EQ(ref_eob, eob) << "eob error: "
- << "i = " << i << "\n";
- err_count += (ref_eob != eob);
- if (err_count && !err_count_total) {
- first_failure = i;
- }
- err_count_total += err_count;
- }
- EXPECT_EQ(0, err_count_total)
- << "Error: Quantization Test, C output doesn't match SSE2 output. "
- << "First failed at test case " << first_failure;
- }
-
- void RunEobTest() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, tran_low_t, coeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, int16_t, zbin_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, round_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, quant_ptr[8]);
- DECLARE_ALIGNED(16, int16_t, quant_shift_ptr[8]);
- DECLARE_ALIGNED(16, tran_low_t, qcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, dqcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, ref_qcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, tran_low_t, ref_dqcoeff_ptr[maxSize]);
- DECLARE_ALIGNED(16, int16_t, dequant_ptr[8]);
- uint16_t eob;
- uint16_t ref_eob;
- int count = params_.coeffCount;
- const TX_SIZE txSize = getTxSize(count);
- int log_scale = (txSize == TX_32X32);
- QuantizeFpFunc quanFunc = params_.qFunc;
- QuantizeFpFunc quanFuncRef = params_.qFuncRef;
- const SCAN_ORDER scanOrder = av1_default_scan_orders[txSize];
-
- for (int i = 0; i < numTests; i++) {
- ref_eob = eob = -1;
- for (int j = 0; j < count; j++) {
- coeff_ptr[j] = 0;
- }
-
- coeff_ptr[rnd(count)] = rnd(coeffRange);
- coeff_ptr[rnd(count)] = rnd(coeffRange);
- coeff_ptr[rnd(count)] = rnd(coeffRange);
-
- for (int j = 0; j < 2; j++) {
- zbin_ptr[j] = rnd.Rand16();
- quant_shift_ptr[j] = rnd.Rand16();
- // int16_t positive
- dequant_ptr[j] = abs(rnd(dequantRange));
- quant_ptr[j] = (1 << 16) / dequant_ptr[j];
- round_ptr[j] = (abs(rnd(roundFactorRange)) * dequant_ptr[j]) >> 7;
- }
- for (int j = 2; j < 8; ++j) {
- zbin_ptr[j] = zbin_ptr[1];
- quant_shift_ptr[j] = quant_shift_ptr[1];
- dequant_ptr[j] = dequant_ptr[1];
- quant_ptr[j] = quant_ptr[1];
- round_ptr[j] = round_ptr[1];
- }
-
- quanFuncRef(coeff_ptr, count, zbin_ptr, round_ptr, quant_ptr,
- quant_shift_ptr, ref_qcoeff_ptr, ref_dqcoeff_ptr, dequant_ptr,
- &ref_eob, scanOrder.scan, scanOrder.iscan, log_scale);
-
- ASM_REGISTER_STATE_CHECK(
- quanFunc(coeff_ptr, count, zbin_ptr, round_ptr, quant_ptr,
- quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr, &eob,
- scanOrder.scan, scanOrder.iscan, log_scale));
- EXPECT_EQ(ref_eob, eob) << "eob error: "
- << "i = " << i << "\n";
- }
- }
-
- virtual void SetUp() { params_ = GetParam(); }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- virtual ~AV1QuantizeTest() {}
-
- private:
- TX_SIZE getTxSize(int count) {
- switch (count) {
- case 16: return TX_4X4;
- case 64: return TX_8X8;
- case 256: return TX_16X16;
- case 1024: return TX_32X32;
- default: return TX_4X4;
- }
- }
-
- QuantizeFuncParams params_;
-};
-
-TEST_P(AV1QuantizeTest, BitExactCheck) { RunQuantizeTest(); }
-TEST_P(AV1QuantizeTest, EobVerify) { RunEobTest(); }
-
-#if HAVE_SSE4_1
-const QuantizeFuncParams qfps[4] = {
- QuantizeFuncParams(&av1_highbd_quantize_fp_sse4_1, &av1_highbd_quantize_fp_c,
- 16),
- QuantizeFuncParams(&av1_highbd_quantize_fp_sse4_1, &av1_highbd_quantize_fp_c,
- 64),
- QuantizeFuncParams(&av1_highbd_quantize_fp_sse4_1, &av1_highbd_quantize_fp_c,
- 256),
- QuantizeFuncParams(&av1_highbd_quantize_fp_sse4_1, &av1_highbd_quantize_fp_c,
- 1024),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1QuantizeTest, ::testing::ValuesIn(qfps));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-const QuantizeFuncParams qfps_avx2[4] = {
- QuantizeFuncParams(&av1_highbd_quantize_fp_avx2, &av1_highbd_quantize_fp_c,
- 16),
- QuantizeFuncParams(&av1_highbd_quantize_fp_avx2, &av1_highbd_quantize_fp_c,
- 64),
- QuantizeFuncParams(&av1_highbd_quantize_fp_avx2, &av1_highbd_quantize_fp_c,
- 256),
- QuantizeFuncParams(&av1_highbd_quantize_fp_avx2, &av1_highbd_quantize_fp_c,
- 1024),
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, AV1QuantizeTest, ::testing::ValuesIn(qfps_avx2));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/av1_round_shift_array_test.cc b/third_party/aom/test/av1_round_shift_array_test.cc
deleted file mode 100644
index 181a39460..000000000
--- a/third_party/aom/test/av1_round_shift_array_test.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/aom_timer.h"
-#include "aom_ports/mem.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace AV1CompRoundShift {
-
-typedef void (*comp_round_shift_array_func)(int32_t *arr, int size, int bit);
-
-#if HAVE_SSE4_1 || HAVE_NEON
-const int kValidBitCheck[] = {
- -4, -3, -2, -1, 0, 1, 2, 3, 4,
-};
-#endif // HAVE_SSE4_1 || HAVE_NEON
-
-typedef ::testing::tuple<comp_round_shift_array_func, BLOCK_SIZE, int>
- CompRoundShiftParam;
-
-class AV1CompRoundShiftTest
- : public ::testing::TestWithParam<CompRoundShiftParam> {
- public:
- ~AV1CompRoundShiftTest();
-
- void SetUp() { rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed()); }
- void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunCheckOutput(comp_round_shift_array_func test_impl, BLOCK_SIZE bsize,
- int bit);
- void RunSpeedTest(comp_round_shift_array_func test_impl, BLOCK_SIZE bsize,
- int bit);
-
- libaom_test::ACMRandom rnd_;
-};
-
-AV1CompRoundShiftTest::~AV1CompRoundShiftTest() { ; }
-
-void AV1CompRoundShiftTest::RunCheckOutput(
- comp_round_shift_array_func test_impl, BLOCK_SIZE bsize, int bit) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- const int blk_wd = 64;
- DECLARE_ALIGNED(32, int32_t, pred_[blk_wd]);
- DECLARE_ALIGNED(32, int32_t, ref_buffer_[blk_wd]);
- for (int i = 0; i < (blk_wd); ++i) {
- ref_buffer_[i] = pred_[i] = rnd_.Rand31() / 16;
- }
- av1_round_shift_array_c(ref_buffer_, w, bit);
- test_impl(pred_, w, bit);
- for (int x = 0; x < w; ++x) {
- ASSERT_EQ(ref_buffer_[x], pred_[x]) << w << "x" << h << "mismatch @"
- << "(" << x << ")";
- }
-}
-
-void AV1CompRoundShiftTest::RunSpeedTest(comp_round_shift_array_func test_impl,
- BLOCK_SIZE bsize, int bit) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- const int blk_wd = 64;
- DECLARE_ALIGNED(32, int32_t, ref_buffer_[blk_wd]);
- for (int i = 0; i < (blk_wd); ++i) {
- ref_buffer_[i] = rnd_.Rand31();
- }
-
- const int num_loops = 1000000000 / (w + h);
- comp_round_shift_array_func funcs[2] = { av1_round_shift_array_c, test_impl };
- double elapsed_time[2] = { 0 };
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- comp_round_shift_array_func func = funcs[i];
- for (int j = 0; j < num_loops; ++j) {
- func(ref_buffer_, w, bit);
- }
- aom_usec_timer_mark(&timer);
- double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
- elapsed_time[i] = 1000.0 * time / num_loops;
- }
- printf("av1_round_shift_array %3dx%-3d: bit : %d %7.2f/%7.2fns", w, h, bit,
- elapsed_time[0], elapsed_time[1]);
- printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
-}
-
-TEST_P(AV1CompRoundShiftTest, CheckOutput) {
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), GET_PARAM(2));
-}
-
-TEST_P(AV1CompRoundShiftTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0), GET_PARAM(1), GET_PARAM(2));
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AV1CompRoundShiftTest,
- ::testing::Combine(::testing::Values(&av1_round_shift_array_sse4_1),
- ::testing::ValuesIn(txsize_to_bsize),
- ::testing::ValuesIn(kValidBitCheck)));
-#endif
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON, AV1CompRoundShiftTest,
- ::testing::Combine(::testing::Values(&av1_round_shift_array_neon),
- ::testing::ValuesIn(txsize_to_bsize),
- ::testing::ValuesIn(kValidBitCheck)));
-#endif
-
-}; // namespace AV1CompRoundShift
diff --git a/third_party/aom/test/av1_txfm_test.cc b/third_party/aom/test/av1_txfm_test.cc
deleted file mode 100644
index d5b0ce325..000000000
--- a/third_party/aom/test/av1_txfm_test.cc
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdio.h>
-#include "test/av1_txfm_test.h"
-
-namespace libaom_test {
-
-int get_txfm1d_size(TX_SIZE tx_size) { return tx_size_wide[tx_size]; }
-
-void get_txfm1d_type(TX_TYPE txfm2d_type, TYPE_TXFM *type0, TYPE_TXFM *type1) {
- switch (txfm2d_type) {
- case DCT_DCT:
- *type0 = TYPE_DCT;
- *type1 = TYPE_DCT;
- break;
- case ADST_DCT:
- *type0 = TYPE_ADST;
- *type1 = TYPE_DCT;
- break;
- case DCT_ADST:
- *type0 = TYPE_DCT;
- *type1 = TYPE_ADST;
- break;
- case ADST_ADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_ADST;
- break;
- case FLIPADST_DCT:
- *type0 = TYPE_ADST;
- *type1 = TYPE_DCT;
- break;
- case DCT_FLIPADST:
- *type0 = TYPE_DCT;
- *type1 = TYPE_ADST;
- break;
- case FLIPADST_FLIPADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_ADST;
- break;
- case ADST_FLIPADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_ADST;
- break;
- case FLIPADST_ADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_ADST;
- break;
- case IDTX:
- *type0 = TYPE_IDTX;
- *type1 = TYPE_IDTX;
- break;
- case H_DCT:
- *type0 = TYPE_IDTX;
- *type1 = TYPE_DCT;
- break;
- case V_DCT:
- *type0 = TYPE_DCT;
- *type1 = TYPE_IDTX;
- break;
- case H_ADST:
- *type0 = TYPE_IDTX;
- *type1 = TYPE_ADST;
- break;
- case V_ADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_IDTX;
- break;
- case H_FLIPADST:
- *type0 = TYPE_IDTX;
- *type1 = TYPE_ADST;
- break;
- case V_FLIPADST:
- *type0 = TYPE_ADST;
- *type1 = TYPE_IDTX;
- break;
- default:
- *type0 = TYPE_DCT;
- *type1 = TYPE_DCT;
- assert(0);
- break;
- }
-}
-
-double Sqrt2 = pow(2, 0.5);
-double invSqrt2 = 1 / pow(2, 0.5);
-
-double dct_matrix(double n, double k, int size) {
- return cos(M_PI * (2 * n + 1) * k / (2 * size));
-}
-
-void reference_dct_1d(const double *in, double *out, int size) {
- for (int k = 0; k < size; ++k) {
- out[k] = 0;
- for (int n = 0; n < size; ++n) {
- out[k] += in[n] * dct_matrix(n, k, size);
- }
- if (k == 0) out[k] = out[k] * invSqrt2;
- }
-}
-
-void reference_idct_1d(const double *in, double *out, int size) {
- for (int k = 0; k < size; ++k) {
- out[k] = 0;
- for (int n = 0; n < size; ++n) {
- if (n == 0)
- out[k] += invSqrt2 * in[n] * dct_matrix(k, n, size);
- else
- out[k] += in[n] * dct_matrix(k, n, size);
- }
- }
-}
-
-// TODO(any): Copied from the old 'fadst4' (same as the new 'av1_fadst4_new'
-// function). Should be replaced by a proper reference function that takes
-// 'double' input & output.
-static void fadst4_new(const tran_low_t *input, tran_low_t *output) {
- tran_high_t x0, x1, x2, x3;
- tran_high_t s0, s1, s2, s3, s4, s5, s6, s7;
-
- x0 = input[0];
- x1 = input[1];
- x2 = input[2];
- x3 = input[3];
-
- if (!(x0 | x1 | x2 | x3)) {
- output[0] = output[1] = output[2] = output[3] = 0;
- return;
- }
-
- s0 = sinpi_1_9 * x0;
- s1 = sinpi_4_9 * x0;
- s2 = sinpi_2_9 * x1;
- s3 = sinpi_1_9 * x1;
- s4 = sinpi_3_9 * x2;
- s5 = sinpi_4_9 * x3;
- s6 = sinpi_2_9 * x3;
- s7 = x0 + x1 - x3;
-
- x0 = s0 + s2 + s5;
- x1 = sinpi_3_9 * s7;
- x2 = s1 - s3 + s6;
- x3 = s4;
-
- s0 = x0 + x3;
- s1 = x1;
- s2 = x2 - x3;
- s3 = x2 - x0 + x3;
-
- // 1-D transform scaling factor is sqrt(2).
- output[0] = (tran_low_t)fdct_round_shift(s0);
- output[1] = (tran_low_t)fdct_round_shift(s1);
- output[2] = (tran_low_t)fdct_round_shift(s2);
- output[3] = (tran_low_t)fdct_round_shift(s3);
-}
-
-void reference_adst_1d(const double *in, double *out, int size) {
- if (size == 4) { // Special case.
- tran_low_t int_input[4];
- for (int i = 0; i < 4; ++i) {
- int_input[i] = static_cast<tran_low_t>(round(in[i]));
- }
- tran_low_t int_output[4];
- fadst4_new(int_input, int_output);
- for (int i = 0; i < 4; ++i) {
- out[i] = int_output[i];
- }
- return;
- }
-
- for (int k = 0; k < size; ++k) {
- out[k] = 0;
- for (int n = 0; n < size; ++n) {
- out[k] += in[n] * sin(M_PI * (2 * n + 1) * (2 * k + 1) / (4 * size));
- }
- }
-}
-
-void reference_idtx_1d(const double *in, double *out, int size) {
- double scale = 0;
- if (size == 4)
- scale = Sqrt2;
- else if (size == 8)
- scale = 2;
- else if (size == 16)
- scale = 2 * Sqrt2;
- else if (size == 32)
- scale = 4;
- else if (size == 64)
- scale = 4 * Sqrt2;
- for (int k = 0; k < size; ++k) {
- out[k] = in[k] * scale;
- }
-}
-
-void reference_hybrid_1d(double *in, double *out, int size, int type) {
- if (type == TYPE_DCT)
- reference_dct_1d(in, out, size);
- else if (type == TYPE_ADST)
- reference_adst_1d(in, out, size);
- else
- reference_idtx_1d(in, out, size);
-}
-
-double get_amplification_factor(TX_TYPE tx_type, TX_SIZE tx_size) {
- TXFM_2D_FLIP_CFG fwd_txfm_flip_cfg;
- av1_get_fwd_txfm_cfg(tx_type, tx_size, &fwd_txfm_flip_cfg);
- const int tx_width = tx_size_wide[fwd_txfm_flip_cfg.tx_size];
- const int tx_height = tx_size_high[fwd_txfm_flip_cfg.tx_size];
- const int8_t *shift = fwd_txfm_flip_cfg.shift;
- const int amplify_bit = shift[0] + shift[1] + shift[2];
- double amplify_factor =
- amplify_bit >= 0 ? (1 << amplify_bit) : (1.0 / (1 << -amplify_bit));
-
- // For rectangular transforms, we need to multiply by an extra factor.
- const int rect_type = get_rect_tx_log_ratio(tx_width, tx_height);
- if (abs(rect_type) == 1) {
- amplify_factor *= pow(2, 0.5);
- }
- return amplify_factor;
-}
-
-void reference_hybrid_2d(double *in, double *out, TX_TYPE tx_type,
- TX_SIZE tx_size) {
- // Get transform type and size of each dimension.
- TYPE_TXFM type0;
- TYPE_TXFM type1;
- get_txfm1d_type(tx_type, &type0, &type1);
- const int tx_width = tx_size_wide[tx_size];
- const int tx_height = tx_size_high[tx_size];
-
- double *const temp_in = new double[AOMMAX(tx_width, tx_height)];
- double *const temp_out = new double[AOMMAX(tx_width, tx_height)];
- double *const out_interm = new double[tx_width * tx_height];
- const int stride = tx_width;
-
- // Transform columns.
- for (int c = 0; c < tx_width; ++c) {
- for (int r = 0; r < tx_height; ++r) {
- temp_in[r] = in[r * stride + c];
- }
- reference_hybrid_1d(temp_in, temp_out, tx_height, type0);
- for (int r = 0; r < tx_height; ++r) {
- out_interm[r * stride + c] = temp_out[r];
- }
- }
-
- // Transform rows.
- for (int r = 0; r < tx_height; ++r) {
- reference_hybrid_1d(out_interm + r * stride, out + r * stride, tx_width,
- type1);
- }
-
- delete[] temp_in;
- delete[] temp_out;
- delete[] out_interm;
-
- // These transforms use an approximate 2D DCT transform, by only keeping the
- // top-left quarter of the coefficients, and repacking them in the first
- // quarter indices.
- // TODO(urvang): Refactor this code.
- if (tx_width == 64 && tx_height == 64) { // tx_size == TX_64X64
- // Zero out top-right 32x32 area.
- for (int row = 0; row < 32; ++row) {
- memset(out + row * 64 + 32, 0, 32 * sizeof(*out));
- }
- // Zero out the bottom 64x32 area.
- memset(out + 32 * 64, 0, 32 * 64 * sizeof(*out));
- // Re-pack non-zero coeffs in the first 32x32 indices.
- for (int row = 1; row < 32; ++row) {
- memcpy(out + row * 32, out + row * 64, 32 * sizeof(*out));
- }
- } else if (tx_width == 32 && tx_height == 64) { // tx_size == TX_32X64
- // Zero out the bottom 32x32 area.
- memset(out + 32 * 32, 0, 32 * 32 * sizeof(*out));
- // Note: no repacking needed here.
- } else if (tx_width == 64 && tx_height == 32) { // tx_size == TX_64X32
- // Zero out right 32x32 area.
- for (int row = 0; row < 32; ++row) {
- memset(out + row * 64 + 32, 0, 32 * sizeof(*out));
- }
- // Re-pack non-zero coeffs in the first 32x32 indices.
- for (int row = 1; row < 32; ++row) {
- memcpy(out + row * 32, out + row * 64, 32 * sizeof(*out));
- }
- } else if (tx_width == 16 && tx_height == 64) { // tx_size == TX_16X64
- // Zero out the bottom 16x32 area.
- memset(out + 16 * 32, 0, 16 * 32 * sizeof(*out));
- // Note: no repacking needed here.
- } else if (tx_width == 64 && tx_height == 16) { // tx_size == TX_64X16
- // Zero out right 32x16 area.
- for (int row = 0; row < 16; ++row) {
- memset(out + row * 64 + 32, 0, 32 * sizeof(*out));
- }
- // Re-pack non-zero coeffs in the first 32x16 indices.
- for (int row = 1; row < 16; ++row) {
- memcpy(out + row * 32, out + row * 64, 32 * sizeof(*out));
- }
- }
-
- // Apply appropriate scale.
- const double amplify_factor = get_amplification_factor(tx_type, tx_size);
- for (int c = 0; c < tx_width; ++c) {
- for (int r = 0; r < tx_height; ++r) {
- out[r * stride + c] *= amplify_factor;
- }
- }
-}
-
-template <typename Type>
-void fliplr(Type *dest, int width, int height, int stride) {
- for (int r = 0; r < height; ++r) {
- for (int c = 0; c < width / 2; ++c) {
- const Type tmp = dest[r * stride + c];
- dest[r * stride + c] = dest[r * stride + width - 1 - c];
- dest[r * stride + width - 1 - c] = tmp;
- }
- }
-}
-
-template <typename Type>
-void flipud(Type *dest, int width, int height, int stride) {
- for (int c = 0; c < width; ++c) {
- for (int r = 0; r < height / 2; ++r) {
- const Type tmp = dest[r * stride + c];
- dest[r * stride + c] = dest[(height - 1 - r) * stride + c];
- dest[(height - 1 - r) * stride + c] = tmp;
- }
- }
-}
-
-template <typename Type>
-void fliplrud(Type *dest, int width, int height, int stride) {
- for (int r = 0; r < height / 2; ++r) {
- for (int c = 0; c < width; ++c) {
- const Type tmp = dest[r * stride + c];
- dest[r * stride + c] = dest[(height - 1 - r) * stride + width - 1 - c];
- dest[(height - 1 - r) * stride + width - 1 - c] = tmp;
- }
- }
-}
-
-template void fliplr<double>(double *dest, int width, int height, int stride);
-template void flipud<double>(double *dest, int width, int height, int stride);
-template void fliplrud<double>(double *dest, int width, int height, int stride);
-
-int bd_arr[BD_NUM] = { 8, 10, 12 };
-
-int8_t low_range_arr[BD_NUM] = { 18, 32, 32 };
-int8_t high_range_arr[BD_NUM] = { 32, 32, 32 };
-
-void txfm_stage_range_check(const int8_t *stage_range, int stage_num,
- int8_t cos_bit, int low_range, int high_range) {
- for (int i = 0; i < stage_num; ++i) {
- EXPECT_LE(stage_range[i], low_range);
- ASSERT_LE(stage_range[i] + cos_bit, high_range) << "stage = " << i;
- }
- for (int i = 0; i < stage_num - 1; ++i) {
- // make sure there is no overflow while doing half_btf()
- ASSERT_LE(stage_range[i + 1] + cos_bit, high_range) << "stage = " << i;
- }
-}
-} // namespace libaom_test
diff --git a/third_party/aom/test/av1_txfm_test.h b/third_party/aom/test/av1_txfm_test.h
deleted file mode 100644
index a18164741..000000000
--- a/third_party/aom/test/av1_txfm_test.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_AV1_TXFM_TEST_H_
-#define AOM_TEST_AV1_TXFM_TEST_H_
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef _MSC_VER
-#define _USE_MATH_DEFINES
-#endif
-#include <math.h>
-
-#include "config/av1_rtcd.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/acm_random.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/blockd.h"
-#include "av1/common/enums.h"
-
-namespace libaom_test {
-typedef enum {
- TYPE_DCT = 0,
- TYPE_ADST,
- TYPE_IDTX,
- TYPE_IDCT,
- TYPE_IADST,
- TYPE_LAST
-} TYPE_TXFM;
-
-int get_txfm1d_size(TX_SIZE tx_size);
-
-void get_txfm1d_type(TX_TYPE txfm2d_type, TYPE_TXFM *type0, TYPE_TXFM *type1);
-
-void reference_dct_1d(const double *in, double *out, int size);
-void reference_idct_1d(const double *in, double *out, int size);
-
-void reference_adst_1d(const double *in, double *out, int size);
-
-void reference_hybrid_1d(double *in, double *out, int size, int type);
-
-double get_amplification_factor(TX_TYPE tx_type, TX_SIZE tx_size);
-
-void reference_hybrid_2d(double *in, double *out, TX_TYPE tx_type,
- TX_SIZE tx_size);
-template <typename Type1, typename Type2>
-static double compute_avg_abs_error(const Type1 *a, const Type2 *b,
- const int size) {
- double error = 0;
- for (int i = 0; i < size; i++) {
- error += fabs(static_cast<double>(a[i]) - static_cast<double>(b[i]));
- }
- error = error / size;
- return error;
-}
-
-template <typename Type>
-void fliplr(Type *dest, int width, int height, int stride);
-
-template <typename Type>
-void flipud(Type *dest, int width, int height, int stride);
-
-template <typename Type>
-void fliplrud(Type *dest, int width, int height, int stride);
-
-typedef void (*TxfmFunc)(const int32_t *in, int32_t *out, const int8_t cos_bit,
- const int8_t *range_bit);
-
-typedef void (*InvTxfm2dFunc)(const int32_t *, uint16_t *, int, TX_TYPE, int);
-typedef void (*LbdInvTxfm2dFunc)(const int32_t *, uint8_t *, int, TX_TYPE,
- TX_SIZE, int);
-
-static const int bd = 10;
-static const int input_base = (1 << bd);
-
-static INLINE bool IsTxSizeTypeValid(TX_SIZE tx_size, TX_TYPE tx_type) {
- const TX_SIZE tx_size_sqr_up = txsize_sqr_up_map[tx_size];
- TxSetType tx_set_type;
- if (tx_size_sqr_up > TX_32X32) {
- tx_set_type = EXT_TX_SET_DCTONLY;
- } else if (tx_size_sqr_up == TX_32X32) {
- tx_set_type = EXT_TX_SET_DCT_IDTX;
- } else {
- tx_set_type = EXT_TX_SET_ALL16;
- }
- return av1_ext_tx_used[tx_set_type][tx_type] != 0;
-}
-
-#if CONFIG_AV1_ENCODER
-
-static const FwdTxfm2dFunc fwd_txfm_func_ls[TX_SIZES_ALL] = {
- av1_fwd_txfm2d_4x4_c, av1_fwd_txfm2d_8x8_c, av1_fwd_txfm2d_16x16_c,
- av1_fwd_txfm2d_32x32_c, av1_fwd_txfm2d_64x64_c, av1_fwd_txfm2d_4x8_c,
- av1_fwd_txfm2d_8x4_c, av1_fwd_txfm2d_8x16_c, av1_fwd_txfm2d_16x8_c,
- av1_fwd_txfm2d_16x32_c, av1_fwd_txfm2d_32x16_c, av1_fwd_txfm2d_32x64_c,
- av1_fwd_txfm2d_64x32_c, av1_fwd_txfm2d_4x16_c, av1_fwd_txfm2d_16x4_c,
- av1_fwd_txfm2d_8x32_c, av1_fwd_txfm2d_32x8_c, av1_fwd_txfm2d_16x64_c,
- av1_fwd_txfm2d_64x16_c,
-};
-#endif
-
-static const InvTxfm2dFunc inv_txfm_func_ls[TX_SIZES_ALL] = {
- av1_inv_txfm2d_add_4x4_c, av1_inv_txfm2d_add_8x8_c,
- av1_inv_txfm2d_add_16x16_c, av1_inv_txfm2d_add_32x32_c,
- av1_inv_txfm2d_add_64x64_c, av1_inv_txfm2d_add_4x8_c,
- av1_inv_txfm2d_add_8x4_c, av1_inv_txfm2d_add_8x16_c,
- av1_inv_txfm2d_add_16x8_c, av1_inv_txfm2d_add_16x32_c,
- av1_inv_txfm2d_add_32x16_c, av1_inv_txfm2d_add_32x64_c,
- av1_inv_txfm2d_add_64x32_c, av1_inv_txfm2d_add_4x16_c,
- av1_inv_txfm2d_add_16x4_c, av1_inv_txfm2d_add_8x32_c,
- av1_inv_txfm2d_add_32x8_c, av1_inv_txfm2d_add_16x64_c,
- av1_inv_txfm2d_add_64x16_c,
-};
-
-#define BD_NUM 3
-
-extern int bd_arr[];
-extern int8_t low_range_arr[];
-extern int8_t high_range_arr[];
-
-void txfm_stage_range_check(const int8_t *stage_range, int stage_num,
- const int8_t cos_bit, int low_range,
- int high_range);
-} // namespace libaom_test
-#endif // AOM_TEST_AV1_TXFM_TEST_H_
diff --git a/third_party/aom/test/av1_wedge_utils_test.cc b/third_party/aom/test/av1_wedge_utils_test.cc
deleted file mode 100644
index e8fbe69a4..000000000
--- a/third_party/aom/test/av1_wedge_utils_test.cc
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-#include "config/av1_rtcd.h"
-
-#include "aom_dsp/aom_dsp_common.h"
-
-#include "av1/common/enums.h"
-
-#include "test/acm_random.h"
-#include "test/function_equivalence_test.h"
-#include "test/register_state_check.h"
-
-#define WEDGE_WEIGHT_BITS 6
-#define MAX_MASK_VALUE (1 << (WEDGE_WEIGHT_BITS))
-
-using libaom_test::ACMRandom;
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-static const int16_t kInt13Max = (1 << 12) - 1;
-
-//////////////////////////////////////////////////////////////////////////////
-// av1_wedge_sse_from_residuals - functionality
-//////////////////////////////////////////////////////////////////////////////
-
-class WedgeUtilsSSEFuncTest : public testing::Test {
- protected:
- WedgeUtilsSSEFuncTest() : rng_(ACMRandom::DeterministicSeed()) {}
-
- static const int kIterations = 1000;
-
- ACMRandom rng_;
-};
-
-static void equiv_blend_residuals(int16_t *r, const int16_t *r0,
- const int16_t *r1, const uint8_t *m, int N) {
- for (int i = 0; i < N; i++) {
- const int32_t m0 = m[i];
- const int32_t m1 = MAX_MASK_VALUE - m0;
- const int16_t R = m0 * r0[i] + m1 * r1[i];
- // Note that this rounding is designed to match the result
- // you would get when actually blending the 2 predictors and computing
- // the residuals.
- r[i] = ROUND_POWER_OF_TWO(R - 1, WEDGE_WEIGHT_BITS);
- }
-}
-
-static uint64_t equiv_sse_from_residuals(const int16_t *r0, const int16_t *r1,
- const uint8_t *m, int N) {
- uint64_t acc = 0;
- for (int i = 0; i < N; i++) {
- const int32_t m0 = m[i];
- const int32_t m1 = MAX_MASK_VALUE - m0;
- const int16_t R = m0 * r0[i] + m1 * r1[i];
- const int32_t r = ROUND_POWER_OF_TWO(R - 1, WEDGE_WEIGHT_BITS);
- acc += r * r;
- }
- return acc;
-}
-
-TEST_F(WedgeUtilsSSEFuncTest, ResidualBlendingEquiv) {
- DECLARE_ALIGNED(32, uint8_t, s[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, p0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, p1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, p[MAX_SB_SQUARE]);
-
- DECLARE_ALIGNED(32, int16_t, r0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r_ref[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r_tst[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- s[i] = rng_.Rand8();
- m[i] = rng_(MAX_MASK_VALUE + 1);
- }
-
- const int w = 1 << (rng_(MAX_SB_SIZE_LOG2 + 1 - 3) + 3);
- const int h = 1 << (rng_(MAX_SB_SIZE_LOG2 + 1 - 3) + 3);
- const int N = w * h;
-
- for (int j = 0; j < N; j++) {
- p0[j] = clamp(s[j] + rng_(33) - 16, 0, UINT8_MAX);
- p1[j] = clamp(s[j] + rng_(33) - 16, 0, UINT8_MAX);
- }
-
- aom_blend_a64_mask(p, w, p0, w, p1, w, m, w, w, h, 0, 0);
-
- aom_subtract_block(h, w, r0, w, s, w, p0, w);
- aom_subtract_block(h, w, r1, w, s, w, p1, w);
-
- aom_subtract_block(h, w, r_ref, w, s, w, p, w);
- equiv_blend_residuals(r_tst, r0, r1, m, N);
-
- for (int i = 0; i < N; ++i) ASSERT_EQ(r_ref[i], r_tst[i]);
-
- uint64_t ref_sse = aom_sum_squares_i16(r_ref, N);
- uint64_t tst_sse = equiv_sse_from_residuals(r0, r1, m, N);
-
- ASSERT_EQ(ref_sse, tst_sse);
- }
-}
-
-static uint64_t sse_from_residuals(const int16_t *r0, const int16_t *r1,
- const uint8_t *m, int N) {
- uint64_t acc = 0;
- for (int i = 0; i < N; i++) {
- const int32_t m0 = m[i];
- const int32_t m1 = MAX_MASK_VALUE - m0;
- const int32_t r = m0 * r0[i] + m1 * r1[i];
- acc += r * r;
- }
- return ROUND_POWER_OF_TWO(acc, 2 * WEDGE_WEIGHT_BITS);
-}
-
-TEST_F(WedgeUtilsSSEFuncTest, ResidualBlendingMethod) {
- DECLARE_ALIGNED(32, int16_t, r0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, d[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r1[i] = rng_(2 * INT8_MAX - 2 * INT8_MIN + 1) + 2 * INT8_MIN;
- d[i] = rng_(2 * INT8_MAX - 2 * INT8_MIN + 1) + 2 * INT8_MIN;
- m[i] = rng_(MAX_MASK_VALUE + 1);
- }
-
- const int N = 64 * (rng_(MAX_SB_SQUARE / 64) + 1);
-
- for (int i = 0; i < N; i++) r0[i] = r1[i] + d[i];
-
- const uint64_t ref_res = sse_from_residuals(r0, r1, m, N);
- const uint64_t tst_res = av1_wedge_sse_from_residuals(r1, d, m, N);
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// av1_wedge_sse_from_residuals - optimizations
-//////////////////////////////////////////////////////////////////////////////
-
-typedef uint64_t (*FSSE)(const int16_t *r1, const int16_t *d, const uint8_t *m,
- int N);
-typedef libaom_test::FuncParam<FSSE> TestFuncsFSSE;
-
-class WedgeUtilsSSEOptTest : public FunctionEquivalenceTest<FSSE> {
- protected:
- static const int kIterations = 10000;
-};
-
-TEST_P(WedgeUtilsSSEOptTest, RandomValues) {
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, d[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r1[i] = rng_(2 * kInt13Max + 1) - kInt13Max;
- d[i] = rng_(2 * kInt13Max + 1) - kInt13Max;
- m[i] = rng_(MAX_MASK_VALUE + 1);
- }
-
- const int N = 64 * (rng_(MAX_SB_SQUARE / 64) + 1);
-
- const uint64_t ref_res = params_.ref_func(r1, d, m, N);
- uint64_t tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(r1, d, m, N));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-TEST_P(WedgeUtilsSSEOptTest, ExtremeValues) {
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, d[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- if (rng_(2)) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) r1[i] = kInt13Max;
- } else {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) r1[i] = -kInt13Max;
- }
-
- if (rng_(2)) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) d[i] = kInt13Max;
- } else {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) d[i] = -kInt13Max;
- }
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) m[i] = MAX_MASK_VALUE;
-
- const int N = 64 * (rng_(MAX_SB_SQUARE / 64) + 1);
-
- const uint64_t ref_res = params_.ref_func(r1, d, m, N);
- uint64_t tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(r1, d, m, N));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// av1_wedge_sign_from_residuals
-//////////////////////////////////////////////////////////////////////////////
-
-typedef int (*FSign)(const int16_t *ds, const uint8_t *m, int N, int64_t limit);
-typedef libaom_test::FuncParam<FSign> TestFuncsFSign;
-
-class WedgeUtilsSignOptTest : public FunctionEquivalenceTest<FSign> {
- protected:
- static const int kIterations = 10000;
- static const int kMaxSize = 8196; // Size limited by SIMD implementation.
-};
-
-TEST_P(WedgeUtilsSignOptTest, RandomValues) {
- DECLARE_ALIGNED(32, int16_t, r0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, ds[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r0[i] = rng_(2 * kInt13Max + 1) - kInt13Max;
- r1[i] = rng_(2 * kInt13Max + 1) - kInt13Max;
- m[i] = rng_(MAX_MASK_VALUE + 1);
- }
-
- const int maxN = AOMMIN(kMaxSize, MAX_SB_SQUARE);
- const int N = 64 * (rng_(maxN / 64 - 1) + 1);
-
- int64_t limit;
- limit = (int64_t)aom_sum_squares_i16(r0, N);
- limit -= (int64_t)aom_sum_squares_i16(r1, N);
- limit *= (1 << WEDGE_WEIGHT_BITS) / 2;
-
- for (int i = 0; i < N; i++)
- ds[i] = clamp(r0[i] * r0[i] - r1[i] * r1[i], INT16_MIN, INT16_MAX);
-
- const int ref_res = params_.ref_func(ds, m, N, limit);
- int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(ds, m, N, limit));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-TEST_P(WedgeUtilsSignOptTest, ExtremeValues) {
- DECLARE_ALIGNED(32, int16_t, r0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, r1[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, ds[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint8_t, m[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- switch (rng_(4)) {
- case 0:
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r0[i] = 0;
- r1[i] = kInt13Max;
- }
- break;
- case 1:
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r0[i] = kInt13Max;
- r1[i] = 0;
- }
- break;
- case 2:
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r0[i] = 0;
- r1[i] = -kInt13Max;
- }
- break;
- default:
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- r0[i] = -kInt13Max;
- r1[i] = 0;
- }
- break;
- }
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) m[i] = MAX_MASK_VALUE;
-
- const int maxN = AOMMIN(kMaxSize, MAX_SB_SQUARE);
- const int N = 64 * (rng_(maxN / 64 - 1) + 1);
-
- int64_t limit;
- limit = (int64_t)aom_sum_squares_i16(r0, N);
- limit -= (int64_t)aom_sum_squares_i16(r1, N);
- limit *= (1 << WEDGE_WEIGHT_BITS) / 2;
-
- for (int i = 0; i < N; i++)
- ds[i] = clamp(r0[i] * r0[i] - r1[i] * r1[i], INT16_MIN, INT16_MAX);
-
- const int ref_res = params_.ref_func(ds, m, N, limit);
- int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(ds, m, N, limit));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-// av1_wedge_compute_delta_squares
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FDS)(int16_t *d, const int16_t *a, const int16_t *b, int N);
-typedef libaom_test::FuncParam<FDS> TestFuncsFDS;
-
-class WedgeUtilsDeltaSquaresOptTest : public FunctionEquivalenceTest<FDS> {
- protected:
- static const int kIterations = 10000;
-};
-
-TEST_P(WedgeUtilsDeltaSquaresOptTest, RandomValues) {
- DECLARE_ALIGNED(32, int16_t, a[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, b[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, d_ref[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int16_t, d_tst[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- a[i] = rng_.Rand16();
- b[i] = rng_(2 * INT16_MAX + 1) - INT16_MAX;
- }
-
- const int N = 64 * (rng_(MAX_SB_SQUARE / 64) + 1);
-
- memset(&d_ref, INT16_MAX, sizeof(d_ref));
- memset(&d_tst, INT16_MAX, sizeof(d_tst));
-
- params_.ref_func(d_ref, a, b, N);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(d_tst, a, b, N));
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) ASSERT_EQ(d_ref[i], d_tst[i]);
- }
-}
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, WedgeUtilsSSEOptTest,
- ::testing::Values(TestFuncsFSSE(av1_wedge_sse_from_residuals_c,
- av1_wedge_sse_from_residuals_sse2)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, WedgeUtilsSignOptTest,
- ::testing::Values(TestFuncsFSign(av1_wedge_sign_from_residuals_c,
- av1_wedge_sign_from_residuals_sse2)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, WedgeUtilsDeltaSquaresOptTest,
- ::testing::Values(TestFuncsFDS(av1_wedge_compute_delta_squares_c,
- av1_wedge_compute_delta_squares_sse2)));
-#endif // HAVE_SSE2
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, WedgeUtilsSSEOptTest,
- ::testing::Values(TestFuncsFSSE(av1_wedge_sse_from_residuals_sse2,
- av1_wedge_sse_from_residuals_avx2)));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, WedgeUtilsSignOptTest,
- ::testing::Values(TestFuncsFSign(av1_wedge_sign_from_residuals_sse2,
- av1_wedge_sign_from_residuals_avx2)));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, WedgeUtilsDeltaSquaresOptTest,
- ::testing::Values(TestFuncsFDS(av1_wedge_compute_delta_squares_sse2,
- av1_wedge_compute_delta_squares_avx2)));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/best_encode.sh b/third_party/aom/test/best_encode.sh
deleted file mode 100755
index fe31a01cb..000000000
--- a/third_party/aom/test/best_encode.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2016, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and
-# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-# was not distributed with this source code in the LICENSE file, you can
-# obtain it at www.aomedia.org/license/software. If the Alliance for Open
-# Media Patent License 1.0 was not distributed with this source code in the
-# PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-#
-# Author: jimbankoski@google.com (Jim Bankoski)
-
-if [[ $# -ne 2 ]]; then
- echo "Encodes a file using best known settings (slow!)"
- echo " Usage: be [FILE] [BITRATE]"
- echo " Example: be akiyo_cif.y4m 200"
- exit
-fi
-
-f=$1 # file is first parameter
-b=$2 # bitrate is second parameter
-
-if [[ -e $f.fpf ]]; then
- # First-pass file found, do second pass only
- aomenc \
- $f \
- -o $f-$b.av1.webm \
- -p 2 \
- --pass=2 \
- --fpf=$f.fpf \
- --best \
- --cpu-used=0 \
- --target-bitrate=$b \
- --auto-alt-ref=1 \
- -v \
- --minsection-pct=0 \
- --maxsection-pct=800 \
- --lag-in-frames=25 \
- --kf-min-dist=0 \
- --kf-max-dist=99999 \
- --static-thresh=0 \
- --min-q=0 \
- --max-q=63 \
- --drop-frame=0 \
- --bias-pct=50 \
- --minsection-pct=0 \
- --maxsection-pct=800 \
- --psnr \
- --arnr-maxframes=7 \
- --arnr-strength=3 \
- --arnr-type=3
-else
- # No first-pass file found, do 2-pass encode
- aomenc \
- $f \
- -o $f-$b.av1.webm \
- -p 2 \
- --pass=1 \
- --fpf=$f.fpf \
- --best \
- --cpu-used=0 \
- --target-bitrate=$b \
- --auto-alt-ref=1 \
- -v \
- --minsection-pct=0 \
- --maxsection-pct=800 \
- --lag-in-frames=25 \
- --kf-min-dist=0 \
- --kf-max-dist=99999 \
- --static-thresh=0 \
- --min-q=0 \
- --max-q=63 \
- --drop-frame=0
-
- aomenc \
- $f \
- -o $f-$b.av1.webm \
- -p 2 \
- --pass=2 \
- --fpf=$f.fpf \
- --best \
- --cpu-used=0 \
- --target-bitrate=$b \
- --auto-alt-ref=1 \
- -v \
- --minsection-pct=0 \
- --maxsection-pct=800 \
- --lag-in-frames=25 \
- --kf-min-dist=0 \
- --kf-max-dist=99999 \
- --static-thresh=0 \
- --min-q=0 \
- --max-q=63 \
- --drop-frame=0 \
- --bias-pct=50 \
- --minsection-pct=0 \
- --maxsection-pct=800 \
- --psnr \
- --arnr-maxframes=7 \
- --arnr-strength=3 \
- --arnr-type=3
-fi
diff --git a/third_party/aom/test/binary_codes_test.cc b/third_party/aom/test/binary_codes_test.cc
deleted file mode 100644
index 45660cf85..000000000
--- a/third_party/aom/test/binary_codes_test.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "test/acm_random.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/bitreader.h"
-#include "aom_dsp/bitwriter.h"
-#include "aom_dsp/binary_codes_reader.h"
-#include "aom_dsp/binary_codes_writer.h"
-
-#define ACCT_STR __func__
-
-using libaom_test::ACMRandom;
-
-namespace {
-
-// Test for Finite subexponential code with reference
-TEST(AV1, TestPrimitiveRefsubexpfin) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int kBufferSize = 65536;
- aom_writer bw;
- uint8_t bw_buffer[kBufferSize];
- const uint16_t kRanges = 8;
- const uint16_t kSubexpParams = 6;
- const uint16_t kReferences = 8;
- const uint16_t kValues = 16;
- uint16_t enc_values[kRanges][kSubexpParams][kReferences][kValues][4];
- const uint16_t range_vals[kRanges] = { 1, 13, 64, 120, 230, 420, 1100, 8000 };
- aom_start_encode(&bw, bw_buffer);
- for (int n = 0; n < kRanges; ++n) {
- const uint16_t range = range_vals[n];
- for (int k = 0; k < kSubexpParams; ++k) {
- for (int r = 0; r < kReferences; ++r) {
- const uint16_t ref = rnd(range);
- for (int v = 0; v < kValues; ++v) {
- const uint16_t value = rnd(range);
- enc_values[n][k][r][v][0] = range;
- enc_values[n][k][r][v][1] = k;
- enc_values[n][k][r][v][2] = ref;
- enc_values[n][k][r][v][3] = value;
- aom_write_primitive_refsubexpfin(&bw, range, k, ref, value);
- }
- }
- }
- }
- aom_stop_encode(&bw);
- aom_reader br;
- aom_reader_init(&br, bw_buffer, bw.pos);
- GTEST_ASSERT_GE(aom_reader_tell(&br), 0u);
- GTEST_ASSERT_LE(aom_reader_tell(&br), 1u);
- for (int n = 0; n < kRanges; ++n) {
- for (int k = 0; k < kSubexpParams; ++k) {
- for (int r = 0; r < kReferences; ++r) {
- for (int v = 0; v < kValues; ++v) {
- const uint16_t range = enc_values[n][k][r][v][0];
- assert(k == enc_values[n][k][r][v][1]);
- const uint16_t ref = enc_values[n][k][r][v][2];
- const uint16_t value =
- aom_read_primitive_refsubexpfin(&br, range, k, ref, ACCT_STR);
- GTEST_ASSERT_EQ(value, enc_values[n][k][r][v][3]);
- }
- }
- }
- }
-}
-// TODO(debargha): Adds tests for other primitives
-} // namespace
diff --git a/third_party/aom/test/blend_a64_mask_1d_test.cc b/third_party/aom/test/blend_a64_mask_1d_test.cc
deleted file mode 100644
index f8844eef8..000000000
--- a/third_party/aom/test/blend_a64_mask_1d_test.cc
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/register_state_check.h"
-#include "test/function_equivalence_test.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-#include "config/av1_rtcd.h"
-
-#include "aom/aom_integer.h"
-
-#include "av1/common/enums.h"
-
-#include "aom_dsp/blend.h"
-
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-template <typename F, typename T>
-class BlendA64Mask1DTest : public FunctionEquivalenceTest<F> {
- public:
- static const int kIterations = 10000;
- static const int kMaxWidth = MAX_SB_SIZE * 5; // * 5 to cover longer strides
- static const int kMaxHeight = MAX_SB_SIZE;
- static const int kBufSize = kMaxWidth * kMaxHeight;
- static const int kMaxMaskWidth = 2 * MAX_SB_SIZE;
- static const int kMaxMaskSize = kMaxMaskWidth;
-
- virtual ~BlendA64Mask1DTest() {}
-
- virtual void Execute(const T *p_src0, const T *p_src1) = 0;
-
- void Common() {
- w_ = 2 << this->rng_(MAX_SB_SIZE_LOG2);
- h_ = 2 << this->rng_(MAX_SB_SIZE_LOG2);
-
- dst_offset_ = this->rng_(33);
- dst_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- src0_offset_ = this->rng_(33);
- src0_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- src1_offset_ = this->rng_(33);
- src1_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- T *p_src0;
- T *p_src1;
-
- switch (this->rng_(3)) {
- case 0: // Separate sources
- p_src0 = src0_;
- p_src1 = src1_;
- break;
- case 1: // src0 == dst
- p_src0 = dst_tst_;
- src0_stride_ = dst_stride_;
- src0_offset_ = dst_offset_;
- p_src1 = src1_;
- break;
- case 2: // src1 == dst
- p_src0 = src0_;
- p_src1 = dst_tst_;
- src1_stride_ = dst_stride_;
- src1_offset_ = dst_offset_;
- break;
- default: FAIL();
- }
-
- Execute(p_src0, p_src1);
-
- for (int r = 0; r < h_; ++r) {
- for (int c = 0; c < w_; ++c) {
- ASSERT_EQ(dst_ref_[dst_offset_ + r * dst_stride_ + c],
- dst_tst_[dst_offset_ + r * dst_stride_ + c]);
- }
- }
- }
-
- T dst_ref_[kBufSize];
- T dst_tst_[kBufSize];
- uint32_t dst_stride_;
- uint32_t dst_offset_;
-
- T src0_[kBufSize];
- uint32_t src0_stride_;
- uint32_t src0_offset_;
-
- T src1_[kBufSize];
- uint32_t src1_stride_;
- uint32_t src1_offset_;
-
- uint8_t mask_[kMaxMaskSize];
-
- int w_;
- int h_;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-// 8 bit version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*F8B)(uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1,
- uint32_t src1_stride, const uint8_t *mask, int w, int h);
-typedef libaom_test::FuncParam<F8B> TestFuncs;
-
-class BlendA64Mask1DTest8B : public BlendA64Mask1DTest<F8B, uint8_t> {
- protected:
- void Execute(const uint8_t *p_src0, const uint8_t *p_src1) {
- params_.ref_func(dst_ref_ + dst_offset_, dst_stride_, p_src0 + src0_offset_,
- src0_stride_, p_src1 + src1_offset_, src1_stride_, mask_,
- w_, h_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(
- dst_tst_ + dst_offset_, dst_stride_, p_src0 + src0_offset_,
- src0_stride_, p_src1 + src1_offset_, src1_stride_, mask_, w_, h_));
- }
-};
-
-TEST_P(BlendA64Mask1DTest8B, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_.Rand8();
- dst_tst_[i] = rng_.Rand8();
-
- src0_[i] = rng_.Rand8();
- src1_[i] = rng_.Rand8();
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- Common();
- }
-}
-
-TEST_P(BlendA64Mask1DTest8B, ExtremeValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(2) + 254;
- dst_tst_[i] = rng_(2) + 254;
- src0_[i] = rng_(2) + 254;
- src1_[i] = rng_(2) + 254;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(2) + AOM_BLEND_A64_MAX_ALPHA - 1;
-
- Common();
- }
-}
-
-static void blend_a64_hmask_ref(uint8_t *dst, uint32_t dst_stride,
- const uint8_t *src0, uint32_t src0_stride,
- const uint8_t *src1, uint32_t src1_stride,
- const uint8_t *mask, int w, int h) {
- uint8_t mask2d[BlendA64Mask1DTest8B::kMaxMaskSize]
- [BlendA64Mask1DTest8B::kMaxMaskSize];
-
- for (int row = 0; row < h; ++row)
- for (int col = 0; col < w; ++col) mask2d[row][col] = mask[col];
-
- aom_blend_a64_mask_c(dst, dst_stride, src0, src0_stride, src1, src1_stride,
- &mask2d[0][0], BlendA64Mask1DTest8B::kMaxMaskSize, w, h,
- 0, 0);
-}
-
-static void blend_a64_vmask_ref(uint8_t *dst, uint32_t dst_stride,
- const uint8_t *src0, uint32_t src0_stride,
- const uint8_t *src1, uint32_t src1_stride,
- const uint8_t *mask, int w, int h) {
- uint8_t mask2d[BlendA64Mask1DTest8B::kMaxMaskSize]
- [BlendA64Mask1DTest8B::kMaxMaskSize];
-
- for (int row = 0; row < h; ++row)
- for (int col = 0; col < w; ++col) mask2d[row][col] = mask[row];
-
- aom_blend_a64_mask_c(dst, dst_stride, src0, src0_stride, src1, src1_stride,
- &mask2d[0][0], BlendA64Mask1DTest8B::kMaxMaskSize, w, h,
- 0, 0);
-}
-
-INSTANTIATE_TEST_CASE_P(
- C, BlendA64Mask1DTest8B,
- ::testing::Values(TestFuncs(blend_a64_hmask_ref, aom_blend_a64_hmask_c),
- TestFuncs(blend_a64_vmask_ref, aom_blend_a64_vmask_c)));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BlendA64Mask1DTest8B,
- ::testing::Values(
- TestFuncs(blend_a64_hmask_ref, aom_blend_a64_hmask_sse4_1),
- TestFuncs(blend_a64_vmask_ref, aom_blend_a64_vmask_sse4_1)));
-#endif // HAVE_SSE4_1
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, BlendA64Mask1DTest8B,
- ::testing::Values(TestFuncs(blend_a64_hmask_ref,
- aom_blend_a64_hmask_neon),
- TestFuncs(blend_a64_vmask_ref,
- aom_blend_a64_vmask_neon)));
-#endif // HAVE_NEON
-
-//////////////////////////////////////////////////////////////////////////////
-// High bit-depth version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FHBD)(uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1,
- uint32_t src1_stride, const uint8_t *mask, int w, int h,
- int bd);
-typedef libaom_test::FuncParam<FHBD> TestFuncsHBD;
-
-class BlendA64Mask1DTestHBD : public BlendA64Mask1DTest<FHBD, uint16_t> {
- protected:
- void Execute(const uint16_t *p_src0, const uint16_t *p_src1) {
- params_.ref_func(CONVERT_TO_BYTEPTR(dst_ref_ + dst_offset_), dst_stride_,
- CONVERT_TO_BYTEPTR(p_src0 + src0_offset_), src0_stride_,
- CONVERT_TO_BYTEPTR(p_src1 + src1_offset_), src1_stride_,
- mask_, w_, h_, bit_depth_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(
- CONVERT_TO_BYTEPTR(dst_tst_ + dst_offset_), dst_stride_,
- CONVERT_TO_BYTEPTR(p_src0 + src0_offset_), src0_stride_,
- CONVERT_TO_BYTEPTR(p_src1 + src1_offset_), src1_stride_, mask_, w_, h_,
- bit_depth_));
- }
-
- int bit_depth_;
-};
-
-TEST_P(BlendA64Mask1DTestHBD, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
-
- const int hi = 1 << bit_depth_;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(hi);
- dst_tst_[i] = rng_(hi);
- src0_[i] = rng_(hi);
- src1_[i] = rng_(hi);
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- Common();
- }
-}
-
-TEST_P(BlendA64Mask1DTestHBD, ExtremeValues) {
- for (int iter = 0; iter < 1000 && !HasFatalFailure(); ++iter) {
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
-
- const int hi = 1 << bit_depth_;
- const int lo = hi - 2;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(hi - lo) + lo;
- dst_tst_[i] = rng_(hi - lo) + lo;
- src0_[i] = rng_(hi - lo) + lo;
- src1_[i] = rng_(hi - lo) + lo;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(2) + AOM_BLEND_A64_MAX_ALPHA - 1;
-
- Common();
- }
-}
-
-static void highbd_blend_a64_hmask_ref(
- uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1, uint32_t src1_stride,
- const uint8_t *mask, int w, int h, int bd) {
- uint8_t mask2d[BlendA64Mask1DTestHBD::kMaxMaskSize]
- [BlendA64Mask1DTestHBD::kMaxMaskSize];
-
- for (int row = 0; row < h; ++row)
- for (int col = 0; col < w; ++col) mask2d[row][col] = mask[col];
-
- aom_highbd_blend_a64_mask_c(
- dst, dst_stride, src0, src0_stride, src1, src1_stride, &mask2d[0][0],
- BlendA64Mask1DTestHBD::kMaxMaskSize, w, h, 0, 0, bd);
-}
-
-static void highbd_blend_a64_vmask_ref(
- uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1, uint32_t src1_stride,
- const uint8_t *mask, int w, int h, int bd) {
- uint8_t mask2d[BlendA64Mask1DTestHBD::kMaxMaskSize]
- [BlendA64Mask1DTestHBD::kMaxMaskSize];
-
- for (int row = 0; row < h; ++row)
- for (int col = 0; col < w; ++col) mask2d[row][col] = mask[row];
-
- aom_highbd_blend_a64_mask_c(
- dst, dst_stride, src0, src0_stride, src1, src1_stride, &mask2d[0][0],
- BlendA64Mask1DTestHBD::kMaxMaskSize, w, h, 0, 0, bd);
-}
-
-INSTANTIATE_TEST_CASE_P(
- C, BlendA64Mask1DTestHBD,
- ::testing::Values(TestFuncsHBD(highbd_blend_a64_hmask_ref,
- aom_highbd_blend_a64_hmask_c),
- TestFuncsHBD(highbd_blend_a64_vmask_ref,
- aom_highbd_blend_a64_vmask_c)));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BlendA64Mask1DTestHBD,
- ::testing::Values(TestFuncsHBD(highbd_blend_a64_hmask_ref,
- aom_highbd_blend_a64_hmask_sse4_1),
- TestFuncsHBD(highbd_blend_a64_vmask_ref,
- aom_highbd_blend_a64_vmask_sse4_1)));
-#endif // HAVE_SSE4_1
-} // namespace
diff --git a/third_party/aom/test/blend_a64_mask_test.cc b/third_party/aom/test/blend_a64_mask_test.cc
deleted file mode 100644
index 66ca6fc5f..000000000
--- a/third_party/aom/test/blend_a64_mask_test.cc
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/register_state_check.h"
-#include "test/function_equivalence_test.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-#include "config/av1_rtcd.h"
-
-#include "aom/aom_integer.h"
-
-#include "av1/common/enums.h"
-
-#include "aom_dsp/blend.h"
-
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-template <typename BlendA64Func, typename SrcPixel, typename DstPixel>
-class BlendA64MaskTest : public FunctionEquivalenceTest<BlendA64Func> {
- protected:
- static const int kIterations = 10000;
- static const int kMaxWidth = MAX_SB_SIZE * 5; // * 5 to cover longer strides
- static const int kMaxHeight = MAX_SB_SIZE;
- static const int kBufSize = kMaxWidth * kMaxHeight;
- static const int kMaxMaskWidth = 2 * MAX_SB_SIZE;
- static const int kMaxMaskSize = kMaxMaskWidth * kMaxMaskWidth;
-
- virtual ~BlendA64MaskTest() {}
-
- virtual void Execute(const SrcPixel *p_src0, const SrcPixel *p_src1,
- int run_times) = 0;
-
- template <typename Pixel>
- void GetSources(Pixel **src0, Pixel **src1, Pixel * /*dst*/, int run_times) {
- if (run_times > 1) {
- *src0 = src0_;
- *src1 = src1_;
- return;
- }
- switch (this->rng_(3)) {
- case 0: // Separate sources
- *src0 = src0_;
- *src1 = src1_;
- break;
- case 1: // src0 == dst
- *src0 = dst_tst_;
- src0_stride_ = dst_stride_;
- src0_offset_ = dst_offset_;
- *src1 = src1_;
- break;
- case 2: // src1 == dst
- *src0 = src0_;
- *src1 = dst_tst_;
- src1_stride_ = dst_stride_;
- src1_offset_ = dst_offset_;
- break;
- default: FAIL();
- }
- }
-
- void GetSources(uint16_t **src0, uint16_t **src1, uint8_t * /*dst*/,
- int /*run_times*/) {
- *src0 = src0_;
- *src1 = src1_;
- }
-
- uint8_t Rand1() { return this->rng_.Rand8() & 1; }
-
- void RunOneTest(int block_size, int subx, int suby, int run_times) {
- w_ = block_size_wide[block_size];
- h_ = block_size_high[block_size];
- run_times = run_times > 1 ? run_times / w_ : 1;
- subx_ = subx;
- suby_ = suby;
-
- dst_offset_ = this->rng_(33);
- dst_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- src0_offset_ = this->rng_(33);
- src0_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- src1_offset_ = this->rng_(33);
- src1_stride_ = this->rng_(kMaxWidth + 1 - w_) + w_;
-
- mask_stride_ =
- this->rng_(kMaxWidth + 1 - w_ * (subx_ ? 2 : 1)) + w_ * (subx_ ? 2 : 1);
-
- SrcPixel *p_src0;
- SrcPixel *p_src1;
-
- p_src0 = src0_;
- p_src1 = src1_;
-
- GetSources(&p_src0, &p_src1, &dst_ref_[0], run_times);
-
- Execute(p_src0, p_src1, run_times);
-
- for (int r = 0; r < h_; ++r) {
- for (int c = 0; c < w_; ++c) {
- ASSERT_EQ(dst_ref_[dst_offset_ + r * dst_stride_ + c],
- dst_tst_[dst_offset_ + r * dst_stride_ + c])
- << w_ << "x" << h_ << " subx " << subx_ << " suby " << suby_
- << " r: " << r << " c: " << c;
- }
- }
- }
-
- void RunTest(int block_size, int run_times) {
- subx_ = Rand1();
- suby_ = Rand1();
- RunOneTest(block_size, subx_, suby_, run_times);
- }
-
- DstPixel dst_ref_[kBufSize];
- DstPixel dst_tst_[kBufSize];
- uint32_t dst_stride_;
- uint32_t dst_offset_;
-
- SrcPixel src0_[kBufSize];
- uint32_t src0_stride_;
- uint32_t src0_offset_;
-
- SrcPixel src1_[kBufSize];
- uint32_t src1_stride_;
- uint32_t src1_offset_;
-
- uint8_t mask_[kMaxMaskSize];
- size_t mask_stride_;
-
- int w_;
- int h_;
-
- int suby_;
- int subx_;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-// 8 bit version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*F8B)(uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1,
- uint32_t src1_stride, const uint8_t *mask,
- uint32_t mask_stride, int w, int h, int subx, int suby);
-typedef libaom_test::FuncParam<F8B> TestFuncs;
-
-class BlendA64MaskTest8B : public BlendA64MaskTest<F8B, uint8_t, uint8_t> {
- protected:
- void Execute(const uint8_t *p_src0, const uint8_t *p_src1, int run_times) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.ref_func(dst_ref_ + dst_offset_, dst_stride_,
- p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.tst_func(dst_tst_ + dst_offset_, dst_stride_,
- p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 1) {
- printf("%3dx%-3d subx %d suby %d :%7.2f/%7.2fns", w_, h_, subx_, suby_,
- time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- }
-};
-
-TEST_P(BlendA64MaskTest8B, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_.Rand8();
- dst_tst_[i] = rng_.Rand8();
-
- src0_[i] = rng_.Rand8();
- src1_[i] = rng_.Rand8();
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- RunTest(bsize, 1);
- }
-}
-
-TEST_P(BlendA64MaskTest8B, ExtremeValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(2) + 254;
- dst_tst_[i] = rng_(2) + 254;
- src0_[i] = rng_(2) + 254;
- src1_[i] = rng_(2) + 254;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(2) + AOM_BLEND_A64_MAX_ALPHA - 1;
-
- RunTest(bsize, 1);
- }
-}
-TEST_P(BlendA64MaskTest8B, DISABLED_Speed) {
- const int kRunTimes = 10000000;
- for (int bsize = 0; bsize < BLOCK_SIZES_ALL; ++bsize) {
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_.Rand8();
- dst_tst_[i] = rng_.Rand8();
-
- src0_[i] = rng_.Rand8();
- src1_[i] = rng_.Rand8();
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- RunOneTest(bsize, 1, 1, kRunTimes);
- RunOneTest(bsize, 1, 0, kRunTimes);
- RunOneTest(bsize, 0, 1, kRunTimes);
- RunOneTest(bsize, 0, 0, kRunTimes);
- }
-}
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, BlendA64MaskTest8B,
- ::testing::Values(TestFuncs(
- aom_blend_a64_mask_c, aom_blend_a64_mask_sse4_1)));
-#endif // HAVE_AVX2
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, BlendA64MaskTest8B,
- ::testing::Values(TestFuncs(aom_blend_a64_mask_sse4_1,
- aom_blend_a64_mask_avx2)));
-#endif // HAVE_SSE4_1
-
-//////////////////////////////////////////////////////////////////////////////
-// 8 bit _d16 version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*F8B_D16)(uint8_t *dst, uint32_t dst_stride, const uint16_t *src0,
- uint32_t src0_stride, const uint16_t *src1,
- uint32_t src1_stride, const uint8_t *mask,
- uint32_t mask_stride, int w, int h, int subx, int suby,
- ConvolveParams *conv_params);
-typedef libaom_test::FuncParam<F8B_D16> TestFuncs_d16;
-
-class BlendA64MaskTest8B_d16
- : public BlendA64MaskTest<F8B_D16, uint16_t, uint8_t> {
- protected:
- // max number of bits used by the source
- static const int kSrcMaxBitsMask = 0x3fff;
-
- void Execute(const uint16_t *p_src0, const uint16_t *p_src1, int run_times) {
- ConvolveParams conv_params;
- conv_params.round_0 = ROUND0_BITS;
- conv_params.round_1 = COMPOUND_ROUND1_BITS;
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.ref_func(dst_ref_ + dst_offset_, dst_stride_,
- p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_, &conv_params);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.tst_func(dst_tst_ + dst_offset_, dst_stride_,
- p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_, &conv_params);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 1) {
- printf("%3dx%-3d subx %d suby %d :%7.2f/%7.2fns", w_, h_, subx_, suby_,
- time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- }
-};
-
-TEST_P(BlendA64MaskTest8B_d16, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_.Rand8();
- dst_tst_[i] = rng_.Rand8();
-
- src0_[i] = rng_.Rand16() & kSrcMaxBitsMask;
- src1_[i] = rng_.Rand16() & kSrcMaxBitsMask;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- RunTest(bsize, 1);
- }
-}
-
-TEST_P(BlendA64MaskTest8B_d16, ExtremeValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = 255;
- dst_tst_[i] = 255;
-
- src0_[i] = kSrcMaxBitsMask;
- src1_[i] = kSrcMaxBitsMask;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = AOM_BLEND_A64_MAX_ALPHA - 1;
-
- RunTest(bsize, 1);
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BlendA64MaskTest8B_d16,
- ::testing::Values(TestFuncs_d16(aom_lowbd_blend_a64_d16_mask_c,
- aom_lowbd_blend_a64_d16_mask_sse4_1)));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, BlendA64MaskTest8B_d16,
- ::testing::Values(TestFuncs_d16(aom_lowbd_blend_a64_d16_mask_c,
- aom_lowbd_blend_a64_d16_mask_avx2)));
-#endif // HAVE_AVX2
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON, BlendA64MaskTest8B_d16,
- ::testing::Values(TestFuncs_d16(aom_lowbd_blend_a64_d16_mask_c,
- aom_lowbd_blend_a64_d16_mask_neon)));
-#endif // HAVE_NEON
-
-//////////////////////////////////////////////////////////////////////////////
-// High bit-depth version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FHBD)(uint8_t *dst, uint32_t dst_stride, const uint8_t *src0,
- uint32_t src0_stride, const uint8_t *src1,
- uint32_t src1_stride, const uint8_t *mask,
- uint32_t mask_stride, int w, int h, int subx, int suby,
- int bd);
-typedef libaom_test::FuncParam<FHBD> TestFuncsHBD;
-
-class BlendA64MaskTestHBD : public BlendA64MaskTest<FHBD, uint16_t, uint16_t> {
- protected:
- void Execute(const uint16_t *p_src0, const uint16_t *p_src1, int run_times) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.ref_func(CONVERT_TO_BYTEPTR(dst_ref_ + dst_offset_), dst_stride_,
- CONVERT_TO_BYTEPTR(p_src0 + src0_offset_), src0_stride_,
- CONVERT_TO_BYTEPTR(p_src1 + src1_offset_), src1_stride_,
- mask_, kMaxMaskWidth, w_, h_, subx_, suby_, bit_depth_);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.tst_func(CONVERT_TO_BYTEPTR(dst_tst_ + dst_offset_), dst_stride_,
- CONVERT_TO_BYTEPTR(p_src0 + src0_offset_), src0_stride_,
- CONVERT_TO_BYTEPTR(p_src1 + src1_offset_), src1_stride_,
- mask_, kMaxMaskWidth, w_, h_, subx_, suby_, bit_depth_);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 1) {
- printf("%3dx%-3d subx %d suby %d :%7.2f/%7.2fns", w_, h_, subx_, suby_,
- time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- }
-
- int bit_depth_;
-};
-
-TEST_P(BlendA64MaskTestHBD, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
-
- const int hi = 1 << bit_depth_;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(hi);
- dst_tst_[i] = rng_(hi);
- src0_[i] = rng_(hi);
- src1_[i] = rng_(hi);
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- RunTest(bsize, 1);
- }
-}
-
-TEST_P(BlendA64MaskTestHBD, ExtremeValues) {
- for (int iter = 0; iter < 1000 && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
-
- const int hi = 1 << bit_depth_;
- const int lo = hi - 2;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_(hi - lo) + lo;
- dst_tst_[i] = rng_(hi - lo) + lo;
- src0_[i] = rng_(hi - lo) + lo;
- src1_[i] = rng_(hi - lo) + lo;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(2) + AOM_BLEND_A64_MAX_ALPHA - 1;
-
- RunTest(bsize, 1);
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BlendA64MaskTestHBD,
- ::testing::Values(TestFuncsHBD(aom_highbd_blend_a64_mask_c,
- aom_highbd_blend_a64_mask_sse4_1)));
-#endif // HAVE_SSE4_1
-
-//////////////////////////////////////////////////////////////////////////////
-// HBD _d16 version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FHBD_D16)(uint8_t *dst, uint32_t dst_stride,
- const CONV_BUF_TYPE *src0, uint32_t src0_stride,
- const CONV_BUF_TYPE *src1, uint32_t src1_stride,
- const uint8_t *mask, uint32_t mask_stride, int w,
- int h, int subx, int suby, ConvolveParams *conv_params,
- const int bd);
-typedef libaom_test::FuncParam<FHBD_D16> TestFuncsHBD_d16;
-
-class BlendA64MaskTestHBD_d16
- : public BlendA64MaskTest<FHBD_D16, uint16_t, uint16_t> {
- protected:
- // max number of bits used by the source
- static const int kSrcMaxBitsMask = (1 << 14) - 1;
- static const int kSrcMaxBitsMaskHBD = (1 << 16) - 1;
-
- void Execute(const uint16_t *p_src0, const uint16_t *p_src1, int run_times) {
- ConvolveParams conv_params;
- conv_params.round_0 = (bit_depth_ == 12) ? ROUND0_BITS + 2 : ROUND0_BITS;
- conv_params.round_1 = COMPOUND_ROUND1_BITS;
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.ref_func(CONVERT_TO_BYTEPTR(dst_ref_ + dst_offset_), dst_stride_,
- p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_, &conv_params,
- bit_depth_);
- }
- if (params_.tst_func) {
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- params_.tst_func(CONVERT_TO_BYTEPTR(dst_tst_ + dst_offset_),
- dst_stride_, p_src0 + src0_offset_, src0_stride_,
- p_src1 + src1_offset_, src1_stride_, mask_,
- kMaxMaskWidth, w_, h_, subx_, suby_, &conv_params,
- bit_depth_);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 1) {
- printf("%3dx%-3d subx %d suby %d :%7.2f/%7.2fns", w_, h_, subx_, suby_,
- time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- }
- }
-
- int bit_depth_;
- int src_max_bits_mask_;
-};
-
-TEST_P(BlendA64MaskTestHBD_d16, RandomValues) {
- if (params_.tst_func == NULL) return;
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- int bsize = rng_.Rand8() % BLOCK_SIZES_ALL;
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
- src_max_bits_mask_ =
- (bit_depth_ == 8) ? kSrcMaxBitsMask : kSrcMaxBitsMaskHBD;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = rng_.Rand8();
- dst_tst_[i] = rng_.Rand8();
-
- src0_[i] = rng_.Rand16() & src_max_bits_mask_;
- src1_[i] = rng_.Rand16() & src_max_bits_mask_;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i)
- mask_[i] = rng_(AOM_BLEND_A64_MAX_ALPHA + 1);
-
- RunTest(bsize, 1);
- }
-}
-// TODO (Scott LaVarnway), fix this test
-TEST_P(BlendA64MaskTestHBD_d16, DISABLED_SaturatedValues) {
- for (int bsize = 0; bsize < BLOCK_SIZES_ALL; ++bsize) {
- for (bit_depth_ = 8; bit_depth_ <= 12; bit_depth_ += 2) {
- src_max_bits_mask_ =
- (bit_depth_ == 8) ? kSrcMaxBitsMask : kSrcMaxBitsMaskHBD;
-
- for (int i = 0; i < kBufSize; ++i) {
- dst_ref_[i] = 0;
- dst_tst_[i] = (1 << bit_depth_) - 1;
-
- src0_[i] = src_max_bits_mask_;
- src1_[i] = src_max_bits_mask_;
- }
-
- for (int i = 0; i < kMaxMaskSize; ++i) mask_[i] = AOM_BLEND_A64_MAX_ALPHA;
-
- RunTest(bsize, 1);
- }
- }
-}
-
-INSTANTIATE_TEST_CASE_P(
- C, BlendA64MaskTestHBD_d16,
- ::testing::Values(TestFuncsHBD_d16(aom_highbd_blend_a64_d16_mask_c, NULL)));
-
-// TODO(slavarnway): Enable the following in the avx2 commit. (56501)
-#if 0
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BlendA64MaskTestHBD,
- ::testing::Values(TestFuncsHBD(aom_highbd_blend_a64_mask_c,
- aom_highbd_blend_a64_mask_avx2)));
-#endif // HAVE_AVX2
-#endif
-} // namespace
diff --git a/third_party/aom/test/blockd_test.cc b/third_party/aom/test/blockd_test.cc
deleted file mode 100644
index ab624007c..000000000
--- a/third_party/aom/test/blockd_test.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "av1/common/blockd.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-// Verify the optimized implementation of get_partition_subsize() produces the
-// same results as the Partition_Subsize lookup table in the spec.
-TEST(BlockdTest, GetPartitionSubsize) {
- // The Partition_Subsize table in the spec (Section 9.3. Conversion tables).
- /* clang-format off */
- static const BLOCK_SIZE kPartitionSubsize[10][BLOCK_SIZES_ALL] = {
- {
- BLOCK_4X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X128,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X4,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X8,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }, {
- BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X16,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X32,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X64,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
- BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID
- }
- };
- /* clang-format on */
-
- for (int partition = 0; partition < 10; partition++) {
- for (int bsize = BLOCK_4X4; bsize < BLOCK_SIZES_ALL; bsize++) {
- EXPECT_EQ(kPartitionSubsize[partition][bsize],
- get_partition_subsize(static_cast<BLOCK_SIZE>(bsize),
- static_cast<PARTITION_TYPE>(partition)));
- }
- }
-}
diff --git a/third_party/aom/test/boolcoder_test.cc b/third_party/aom/test/boolcoder_test.cc
deleted file mode 100644
index 680ec1877..000000000
--- a/third_party/aom/test/boolcoder_test.cc
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/acm_random.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/bitreader.h"
-#include "aom_dsp/bitwriter.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-const int num_tests = 10;
-} // namespace
-
-TEST(AV1, TestBitIO) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int n = 0; n < num_tests; ++n) {
- for (int method = 0; method <= 7; ++method) { // we generate various proba
- const int kBitsToTest = 1000;
- uint8_t probas[kBitsToTest];
-
- for (int i = 0; i < kBitsToTest; ++i) {
- const int parity = i & 1;
- /* clang-format off */
- probas[i] =
- (method == 0) ? 0 : (method == 1) ? 255 :
- (method == 2) ? 128 :
- (method == 3) ? rnd.Rand8() :
- (method == 4) ? (parity ? 0 : 255) :
- // alternate between low and high proba:
- (method == 5) ? (parity ? rnd(128) : 255 - rnd(128)) :
- (method == 6) ?
- (parity ? rnd(64) : 255 - rnd(64)) :
- (parity ? rnd(32) : 255 - rnd(32));
- /* clang-format on */
- }
- for (int bit_method = 0; bit_method <= 3; ++bit_method) {
- const int random_seed = 6432;
- const int kBufferSize = 10000;
- ACMRandom bit_rnd(random_seed);
- aom_writer bw;
- uint8_t bw_buffer[kBufferSize];
- aom_start_encode(&bw, bw_buffer);
-
- int bit = (bit_method == 0) ? 0 : (bit_method == 1) ? 1 : 0;
- for (int i = 0; i < kBitsToTest; ++i) {
- if (bit_method == 2) {
- bit = (i & 1);
- } else if (bit_method == 3) {
- bit = bit_rnd(2);
- }
- aom_write(&bw, bit, static_cast<int>(probas[i]));
- }
-
- aom_stop_encode(&bw);
-
- aom_reader br;
- aom_reader_init(&br, bw_buffer, bw.pos);
- bit_rnd.Reset(random_seed);
- for (int i = 0; i < kBitsToTest; ++i) {
- if (bit_method == 2) {
- bit = (i & 1);
- } else if (bit_method == 3) {
- bit = bit_rnd(2);
- }
- GTEST_ASSERT_EQ(aom_read(&br, probas[i], NULL), bit)
- << "pos: " << i << " / " << kBitsToTest
- << " bit_method: " << bit_method << " method: " << method;
- }
- }
- }
- }
-}
-
-#define FRAC_DIFF_TOTAL_ERROR 0.18
-
-TEST(AV1, TestTell) {
- const int kBufferSize = 10000;
- aom_writer bw;
- uint8_t bw_buffer[kBufferSize];
- const int kSymbols = 1024;
- // Coders are noisier at low probabilities, so we start at p = 4.
- for (int p = 4; p < 256; p++) {
- double probability = p / 256.;
- aom_start_encode(&bw, bw_buffer);
- for (int i = 0; i < kSymbols; i++) {
- aom_write(&bw, 0, p);
- }
- aom_stop_encode(&bw);
- aom_reader br;
- aom_reader_init(&br, bw_buffer, bw.pos);
- uint32_t last_tell = aom_reader_tell(&br);
- uint32_t last_tell_frac = aom_reader_tell_frac(&br);
- double frac_diff_total = 0;
- GTEST_ASSERT_GE(aom_reader_tell(&br), 0u);
- GTEST_ASSERT_LE(aom_reader_tell(&br), 1u);
- ASSERT_FALSE(aom_reader_has_overflowed(&br));
- for (int i = 0; i < kSymbols; i++) {
- aom_read(&br, p, NULL);
- uint32_t tell = aom_reader_tell(&br);
- uint32_t tell_frac = aom_reader_tell_frac(&br);
- GTEST_ASSERT_GE(tell, last_tell)
- << "tell: " << tell << ", last_tell: " << last_tell;
- GTEST_ASSERT_GE(tell_frac, last_tell_frac)
- << "tell_frac: " << tell_frac
- << ", last_tell_frac: " << last_tell_frac;
- // Frac tell should round up to tell.
- GTEST_ASSERT_EQ(tell, (tell_frac + 7) >> 3);
- last_tell = tell;
- frac_diff_total +=
- fabs(((tell_frac - last_tell_frac) / 8.0) + log2(probability));
- last_tell_frac = tell_frac;
- }
- const uint32_t expected = (uint32_t)(-kSymbols * log2(probability));
- // Last tell should be close to the expected value.
- GTEST_ASSERT_LE(last_tell, expected + 20) << " last_tell: " << last_tell;
- // The average frac_diff error should be pretty small.
- GTEST_ASSERT_LE(frac_diff_total / kSymbols, FRAC_DIFF_TOTAL_ERROR)
- << " frac_diff_total: " << frac_diff_total;
- ASSERT_FALSE(aom_reader_has_overflowed(&br));
- }
-}
-
-TEST(AV1, TestHasOverflowed) {
- const int kBufferSize = 10000;
- aom_writer bw;
- uint8_t bw_buffer[kBufferSize];
- const int kSymbols = 1024;
- // Coders are noisier at low probabilities, so we start at p = 4.
- for (int p = 4; p < 256; p++) {
- aom_start_encode(&bw, bw_buffer);
- for (int i = 0; i < kSymbols; i++) {
- aom_write(&bw, 1, p);
- }
- aom_stop_encode(&bw);
- aom_reader br;
- aom_reader_init(&br, bw_buffer, bw.pos);
- ASSERT_FALSE(aom_reader_has_overflowed(&br));
- for (int i = 0; i < kSymbols; i++) {
- GTEST_ASSERT_EQ(aom_read(&br, p, NULL), 1);
- ASSERT_FALSE(aom_reader_has_overflowed(&br));
- }
- // In the worst case, the encoder uses just a tiny fraction of the last
- // byte in the buffer. So to guarantee that aom_reader_has_overflowed()
- // returns true, we have to consume very nearly 8 additional bits of data.
- // In the worse case, one of the bits in that byte will be 1, and the rest
- // will be zero. Once we are past that 1 bit, when the probability of
- // reading zero symbol from aom_read() is high, each additional symbol read
- // will consume very little additional data (in the case that p == 255,
- // approximately -log_2(255/256) ~= 0.0056 bits). In that case it would
- // take around 178 calls to consume more than 8 bits. That is only an upper
- // bound. In practice we are not guaranteed to hit the worse case and can
- // get away with 174 calls.
- for (int i = 0; i < 174; i++) {
- aom_read(&br, p, NULL);
- }
- ASSERT_TRUE(aom_reader_has_overflowed(&br));
- }
-}
diff --git a/third_party/aom/test/borders_test.cc b/third_party/aom/test/borders_test.cc
deleted file mode 100644
index 893237ef3..000000000
--- a/third_party/aom/test/borders_test.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <climits>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-class BordersTestLarge
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- BordersTestLarge() : EncoderTest(GET_PARAM(0)) {}
- virtual ~BordersTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, 1);
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- if (pkt->data.frame.flags & AOM_FRAME_IS_KEY) {
- }
- }
-};
-
-TEST_P(BordersTestLarge, TestEncodeHighBitrate) {
- // Validate that this non multiple of 64 wide clip encodes and decodes
- // without a mismatch when passing in a very low max q. This pushes
- // the encoder to producing lots of big partitions which will likely
- // extend into the border and test the border condition.
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 2000;
- cfg_.rc_max_quantizer = 10;
-
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
- 10);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-TEST_P(BordersTestLarge, TestLowBitrate) {
- // Validate that this clip encodes and decodes without a mismatch
- // when passing in a very high min q. This pushes the encoder to producing
- // lots of small partitions which might will test the other condition.
-
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 200;
- cfg_.rc_min_quantizer = 40;
-
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
- 10);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-AV1_INSTANTIATE_TEST_CASE(BordersTestLarge,
- ::testing::Values(::libaom_test::kTwoPassGood));
-} // namespace
diff --git a/third_party/aom/test/cdef_test.cc b/third_party/aom/test/cdef_test.cc
deleted file mode 100644
index becc07291..000000000
--- a/third_party/aom/test/cdef_test.cc
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdlib>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/cdef_block.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-
-typedef ::testing::tuple<cdef_filter_block_func, cdef_filter_block_func,
- BLOCK_SIZE, int, int>
- cdef_dir_param_t;
-
-class CDEFBlockTest : public ::testing::TestWithParam<cdef_dir_param_t> {
- public:
- virtual ~CDEFBlockTest() {}
- virtual void SetUp() {
- cdef = GET_PARAM(0);
- ref_cdef = GET_PARAM(1);
- bsize = GET_PARAM(2);
- boundary = GET_PARAM(3);
- depth = GET_PARAM(4);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- int bsize;
- int boundary;
- int depth;
- cdef_filter_block_func cdef;
- cdef_filter_block_func ref_cdef;
-};
-
-typedef CDEFBlockTest CDEFSpeedTest;
-
-void test_cdef(int bsize, int iterations, cdef_filter_block_func cdef,
- cdef_filter_block_func ref_cdef, int boundary, int depth) {
- const int size = 8;
- const int ysize = size + 2 * CDEF_VBORDER;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint16_t, s[ysize * CDEF_BSTRIDE]);
- DECLARE_ALIGNED(16, static uint16_t, d[size * size]);
- DECLARE_ALIGNED(16, static uint16_t, ref_d[size * size]);
- memset(ref_d, 0, sizeof(ref_d));
- memset(d, 0, sizeof(d));
-
- int error = 0, pristrength = 0, secstrength, dir;
- int pridamping, secdamping, bits, level, count,
- errdepth = 0, errpristrength = 0, errsecstrength = 0, errboundary = 0,
- errpridamping = 0, errsecdamping = 0;
- unsigned int pos = 0;
-
- const unsigned int max_pos = size * size >> static_cast<int>(depth == 8);
- for (pridamping = 3 + depth - 8; pridamping < 7 - 3 * !!boundary + depth - 8;
- pridamping++) {
- for (secdamping = 3 + depth - 8;
- secdamping < 7 - 3 * !!boundary + depth - 8; secdamping++) {
- for (count = 0; count < iterations; count++) {
- for (level = 0; level < (1 << depth) && !error;
- level += (2 + 6 * !!boundary) << (depth - 8)) {
- for (bits = 1; bits <= depth && !error; bits += 1 + 3 * !!boundary) {
- for (unsigned int i = 0; i < sizeof(s) / sizeof(*s); i++)
- s[i] = clamp((rnd.Rand16() & ((1 << bits) - 1)) + level, 0,
- (1 << depth) - 1);
- if (boundary) {
- if (boundary & 1) { // Left
- for (int i = 0; i < ysize; i++)
- for (int j = 0; j < CDEF_HBORDER; j++)
- s[i * CDEF_BSTRIDE + j] = CDEF_VERY_LARGE;
- }
- if (boundary & 2) { // Right
- for (int i = 0; i < ysize; i++)
- for (int j = CDEF_HBORDER + size; j < CDEF_BSTRIDE; j++)
- s[i * CDEF_BSTRIDE + j] = CDEF_VERY_LARGE;
- }
- if (boundary & 4) { // Above
- for (int i = 0; i < CDEF_VBORDER; i++)
- for (int j = 0; j < CDEF_BSTRIDE; j++)
- s[i * CDEF_BSTRIDE + j] = CDEF_VERY_LARGE;
- }
- if (boundary & 8) { // Below
- for (int i = CDEF_VBORDER + size; i < ysize; i++)
- for (int j = 0; j < CDEF_BSTRIDE; j++)
- s[i * CDEF_BSTRIDE + j] = CDEF_VERY_LARGE;
- }
- }
- for (dir = 0; dir < 8; dir++) {
- for (pristrength = 0; pristrength <= 19 << (depth - 8) && !error;
- pristrength += (1 + 4 * !!boundary) << (depth - 8)) {
- if (pristrength == 16) pristrength = 19;
- for (secstrength = 0; secstrength <= 4 << (depth - 8) && !error;
- secstrength += 1 << (depth - 8)) {
- if (secstrength == 3 << (depth - 8)) continue;
- ref_cdef(depth == 8 ? (uint8_t *)ref_d : 0, ref_d, size,
- s + CDEF_HBORDER + CDEF_VBORDER * CDEF_BSTRIDE,
- pristrength, secstrength, dir, pridamping,
- secdamping, bsize, (1 << depth) - 1, depth - 8);
- // If cdef and ref_cdef are the same, we're just testing
- // speed
- if (cdef != ref_cdef)
- ASM_REGISTER_STATE_CHECK(
- cdef(depth == 8 ? (uint8_t *)d : 0, d, size,
- s + CDEF_HBORDER + CDEF_VBORDER * CDEF_BSTRIDE,
- pristrength, secstrength, dir, pridamping,
- secdamping, bsize, (1 << depth) - 1, depth - 8));
- if (ref_cdef != cdef) {
- for (pos = 0; pos < max_pos && !error; pos++) {
- error = ref_d[pos] != d[pos];
- errdepth = depth;
- errpristrength = pristrength;
- errsecstrength = secstrength;
- errboundary = boundary;
- errpridamping = pridamping;
- errsecdamping = secdamping;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- pos--;
- EXPECT_EQ(0, error) << "Error: CDEFBlockTest, SIMD and C mismatch."
- << std::endl
- << "First error at " << pos % size << "," << pos / size
- << " (" << (int16_t)ref_d[pos] << " : " << (int16_t)d[pos]
- << ") " << std::endl
- << "pristrength: " << errpristrength << std::endl
- << "pridamping: " << errpridamping << std::endl
- << "secstrength: " << errsecstrength << std::endl
- << "secdamping: " << errsecdamping << std::endl
- << "depth: " << errdepth << std::endl
- << "size: " << bsize << std::endl
- << "boundary: " << errboundary << std::endl
- << std::endl;
-}
-
-void test_cdef_speed(int bsize, int iterations, cdef_filter_block_func cdef,
- cdef_filter_block_func ref_cdef, int boundary, int depth) {
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
-
- aom_usec_timer_start(&ref_timer);
- test_cdef(bsize, iterations, ref_cdef, ref_cdef, boundary, depth);
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer_start(&timer);
- test_cdef(bsize, iterations, cdef, cdef, boundary, depth);
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
-
- EXPECT_GT(ref_elapsed_time, elapsed_time)
- << "Error: CDEFSpeedTest, SIMD slower than C." << std::endl
- << "C time: " << ref_elapsed_time << " us" << std::endl
- << "SIMD time: " << elapsed_time << " us" << std::endl;
-}
-
-typedef int (*find_dir_t)(const uint16_t *img, int stride, int32_t *var,
- int coeff_shift);
-
-typedef ::testing::tuple<find_dir_t, find_dir_t> find_dir_param_t;
-
-class CDEFFindDirTest : public ::testing::TestWithParam<find_dir_param_t> {
- public:
- virtual ~CDEFFindDirTest() {}
- virtual void SetUp() {
- finddir = GET_PARAM(0);
- ref_finddir = GET_PARAM(1);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- find_dir_t finddir;
- find_dir_t ref_finddir;
-};
-
-typedef CDEFFindDirTest CDEFFindDirSpeedTest;
-
-void test_finddir(int (*finddir)(const uint16_t *img, int stride, int32_t *var,
- int coeff_shift),
- int (*ref_finddir)(const uint16_t *img, int stride,
- int32_t *var, int coeff_shift)) {
- const int size = 8;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint16_t, s[size * size]);
-
- int error = 0;
- int depth, bits, level, count, errdepth = 0;
- int ref_res = 0, res = 0;
- int32_t ref_var = 0, var = 0;
-
- for (depth = 8; depth <= 12 && !error; depth += 2) {
- for (count = 0; count < 512 && !error; count++) {
- for (level = 0; level < (1 << depth) && !error;
- level += 1 << (depth - 8)) {
- for (bits = 1; bits <= depth && !error; bits++) {
- for (unsigned int i = 0; i < sizeof(s) / sizeof(*s); i++)
- s[i] = clamp((rnd.Rand16() & ((1 << bits) - 1)) + level, 0,
- (1 << depth) - 1);
- for (int c = 0; c < 1 + 9 * (finddir == ref_finddir); c++)
- ref_res = ref_finddir(s, size, &ref_var, depth - 8);
- if (finddir != ref_finddir)
- ASM_REGISTER_STATE_CHECK(res = finddir(s, size, &var, depth - 8));
- if (ref_finddir != finddir) {
- if (res != ref_res || var != ref_var) error = 1;
- errdepth = depth;
- }
- }
- }
- }
- }
-
- EXPECT_EQ(0, error) << "Error: CDEFFindDirTest, SIMD and C mismatch."
- << std::endl
- << "return: " << res << " : " << ref_res << std::endl
- << "var: " << var << " : " << ref_var << std::endl
- << "depth: " << errdepth << std::endl
- << std::endl;
-}
-
-void test_finddir_speed(int (*finddir)(const uint16_t *img, int stride,
- int32_t *var, int coeff_shift),
- int (*ref_finddir)(const uint16_t *img, int stride,
- int32_t *var, int coeff_shift)) {
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
-
- aom_usec_timer_start(&ref_timer);
- test_finddir(ref_finddir, ref_finddir);
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer_start(&timer);
- test_finddir(finddir, finddir);
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
-
- EXPECT_GT(ref_elapsed_time, elapsed_time)
- << "Error: CDEFFindDirSpeedTest, SIMD slower than C." << std::endl
- << "C time: " << ref_elapsed_time << " us" << std::endl
- << "SIMD time: " << elapsed_time << " us" << std::endl;
-}
-
-TEST_P(CDEFBlockTest, TestSIMDNoMismatch) {
- test_cdef(bsize, 1, cdef, ref_cdef, boundary, depth);
-}
-
-TEST_P(CDEFSpeedTest, DISABLED_TestSpeed) {
- test_cdef_speed(bsize, 4, cdef, ref_cdef, boundary, depth);
-}
-
-TEST_P(CDEFFindDirTest, TestSIMDNoMismatch) {
- test_finddir(finddir, ref_finddir);
-}
-
-TEST_P(CDEFFindDirSpeedTest, DISABLED_TestSpeed) {
- test_finddir_speed(finddir, ref_finddir);
-}
-
-using ::testing::make_tuple;
-
-// VS compiling for 32 bit targets does not support vector types in
-// structs as arguments, which makes the v256 type of the intrinsics
-// hard to support, so optimizations for this target are disabled.
-#if defined(_WIN64) || !defined(_MSC_VER) || defined(__clang__)
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, CDEFBlockTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_sse2),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSE2, CDEFFindDirTest,
- ::testing::Values(make_tuple(&cdef_find_dir_sse2,
- &cdef_find_dir_c)));
-#endif
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, CDEFBlockTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_ssse3),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSSE3, CDEFFindDirTest,
- ::testing::Values(make_tuple(&cdef_find_dir_ssse3,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, CDEFBlockTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_sse4_1),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSE4_1, CDEFFindDirTest,
- ::testing::Values(make_tuple(&cdef_find_dir_sse4_1,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, CDEFBlockTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_avx2),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(AVX2, CDEFFindDirTest,
- ::testing::Values(make_tuple(&cdef_find_dir_avx2,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON, CDEFBlockTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_neon),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(NEON, CDEFFindDirTest,
- ::testing::Values(make_tuple(&cdef_find_dir_neon,
- &cdef_find_dir_c)));
-#endif
-
-// Test speed for all supported architectures
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, CDEFSpeedTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_sse2),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSE2, CDEFFindDirSpeedTest,
- ::testing::Values(make_tuple(&cdef_find_dir_sse2,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, CDEFSpeedTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_ssse3),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSSE3, CDEFFindDirSpeedTest,
- ::testing::Values(make_tuple(&cdef_find_dir_ssse3,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, CDEFSpeedTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_sse4_1),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(SSE4_1, CDEFFindDirSpeedTest,
- ::testing::Values(make_tuple(&cdef_find_dir_sse4_1,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, CDEFSpeedTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_avx2),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(AVX2, CDEFFindDirSpeedTest,
- ::testing::Values(make_tuple(&cdef_find_dir_avx2,
- &cdef_find_dir_c)));
-#endif
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON, CDEFSpeedTest,
- ::testing::Combine(::testing::Values(&cdef_filter_block_neon),
- ::testing::Values(&cdef_filter_block_c),
- ::testing::Values(BLOCK_4X4, BLOCK_4X8, BLOCK_8X4,
- BLOCK_8X8),
- ::testing::Range(0, 16), ::testing::Range(8, 13, 2)));
-INSTANTIATE_TEST_CASE_P(NEON, CDEFFindDirSpeedTest,
- ::testing::Values(make_tuple(&cdef_find_dir_neon,
- &cdef_find_dir_c)));
-#endif
-
-#endif // defined(_WIN64) || !defined(_MSC_VER)
-} // namespace
diff --git a/third_party/aom/test/cfl_test.cc b/third_party/aom/test/cfl_test.cc
deleted file mode 100644
index e4d438d6a..000000000
--- a/third_party/aom/test/cfl_test.cc
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "test/util.h"
-#include "test/acm_random.h"
-
-using ::testing::make_tuple;
-
-using libaom_test::ACMRandom;
-
-#define NUM_ITERATIONS (100)
-#define NUM_ITERATIONS_SPEED (INT16_MAX)
-
-#define ALL_CFL_TX_SIZES(function) \
- make_tuple(TX_4X4, &function), make_tuple(TX_4X8, &function), \
- make_tuple(TX_4X16, &function), make_tuple(TX_8X4, &function), \
- make_tuple(TX_8X8, &function), make_tuple(TX_8X16, &function), \
- make_tuple(TX_8X32, &function), make_tuple(TX_16X4, &function), \
- make_tuple(TX_16X8, &function), make_tuple(TX_16X16, &function), \
- make_tuple(TX_16X32, &function), make_tuple(TX_32X8, &function), \
- make_tuple(TX_32X16, &function), make_tuple(TX_32X32, &function)
-
-#define ALL_CFL_TX_SIZES_SUBSAMPLE(fun420, fun422, fun444) \
- make_tuple(TX_4X4, &fun420, &fun422, &fun444), \
- make_tuple(TX_4X8, &fun420, &fun422, &fun444), \
- make_tuple(TX_4X16, &fun420, &fun422, &fun444), \
- make_tuple(TX_8X4, &fun420, &fun422, &fun444), \
- make_tuple(TX_8X8, &fun420, &fun422, &fun444), \
- make_tuple(TX_8X16, &fun420, &fun422, &fun444), \
- make_tuple(TX_8X32, &fun420, &fun422, &fun444), \
- make_tuple(TX_16X4, &fun420, &fun422, &fun444), \
- make_tuple(TX_16X8, &fun420, &fun422, &fun444), \
- make_tuple(TX_16X16, &fun420, &fun422, &fun444), \
- make_tuple(TX_16X32, &fun420, &fun422, &fun444), \
- make_tuple(TX_32X8, &fun420, &fun422, &fun444), \
- make_tuple(TX_32X16, &fun420, &fun422, &fun444), \
- make_tuple(TX_32X32, &fun420, &fun422, &fun444)
-
-namespace {
-
-template <typename A>
-static void assert_eq(const A *a, const A *b, int width, int height) {
- for (int j = 0; j < height; j++) {
- for (int i = 0; i < width; i++) {
- ASSERT_EQ(a[j * CFL_BUF_LINE + i], b[j * CFL_BUF_LINE + i]);
- }
- }
-}
-
-static void assertFaster(int ref_elapsed_time, int elapsed_time) {
- EXPECT_GT(ref_elapsed_time, elapsed_time)
- << "Error: CFLSubtractSpeedTest, SIMD slower than C." << std::endl
- << "C time: " << ref_elapsed_time << " us" << std::endl
- << "SIMD time: " << elapsed_time << " us" << std::endl;
-}
-
-static void printSpeed(int ref_elapsed_time, int elapsed_time, int width,
- int height) {
- std::cout.precision(2);
- std::cout << "[ ] " << width << "x" << height
- << ": C time = " << ref_elapsed_time
- << " us, SIMD time = " << elapsed_time << " us"
- << " (~" << ref_elapsed_time / (double)elapsed_time << "x) "
- << std::endl;
-}
-
-class CFLTest {
- public:
- virtual ~CFLTest() {}
- void init(TX_SIZE tx) {
- tx_size = tx;
- width = tx_size_wide[tx_size];
- height = tx_size_high[tx_size];
- rnd(ACMRandom::DeterministicSeed());
- }
-
- protected:
- TX_SIZE tx_size;
- int width;
- int height;
- ACMRandom rnd;
-};
-
-template <typename I>
-class CFLTestWithData : public CFLTest {
- public:
- virtual ~CFLTestWithData() {}
-
- protected:
- I data[CFL_BUF_SQUARE];
- I data_ref[CFL_BUF_SQUARE];
- void randData(I (ACMRandom::*random)()) {
- for (int j = 0; j < this->height; j++) {
- for (int i = 0; i < this->width; i++) {
- const I d = (this->rnd.*random)();
- data[j * CFL_BUF_LINE + i] = d;
- data_ref[j * CFL_BUF_LINE + i] = d;
- }
- }
- }
-};
-
-template <typename I>
-class CFLTestWithAlignedData : public CFLTest {
- public:
- CFLTestWithAlignedData() {
- chroma_pels_ref =
- reinterpret_cast<I *>(aom_memalign(32, sizeof(I) * CFL_BUF_SQUARE));
- chroma_pels =
- reinterpret_cast<I *>(aom_memalign(32, sizeof(I) * CFL_BUF_SQUARE));
- sub_luma_pels_ref = reinterpret_cast<int16_t *>(
- aom_memalign(32, sizeof(int16_t) * CFL_BUF_SQUARE));
- sub_luma_pels = reinterpret_cast<int16_t *>(
- aom_memalign(32, sizeof(int16_t) * CFL_BUF_SQUARE));
- memset(chroma_pels_ref, 0, sizeof(I) * CFL_BUF_SQUARE);
- memset(chroma_pels, 0, sizeof(I) * CFL_BUF_SQUARE);
- memset(sub_luma_pels_ref, 0, sizeof(int16_t) * CFL_BUF_SQUARE);
- memset(sub_luma_pels, 0, sizeof(int16_t) * CFL_BUF_SQUARE);
- }
- ~CFLTestWithAlignedData() {
- aom_free(chroma_pels_ref);
- aom_free(sub_luma_pels_ref);
- aom_free(chroma_pels);
- aom_free(sub_luma_pels);
- }
-
- protected:
- I *chroma_pels_ref;
- I *chroma_pels;
- int16_t *sub_luma_pels_ref;
- int16_t *sub_luma_pels;
- int alpha_q3;
- I dc;
- void randData(int bd) {
- alpha_q3 = this->rnd(33) - 16;
- dc = this->rnd(1 << bd);
- for (int j = 0; j < this->height; j++) {
- for (int i = 0; i < this->width; i++) {
- chroma_pels[j * CFL_BUF_LINE + i] = dc;
- chroma_pels_ref[j * CFL_BUF_LINE + i] = dc;
- sub_luma_pels_ref[j * CFL_BUF_LINE + i] =
- sub_luma_pels[j * CFL_BUF_LINE + i] = this->rnd(1 << (bd + 3));
- }
- }
- }
-};
-
-typedef cfl_subtract_average_fn (*sub_avg_fn)(TX_SIZE tx_size);
-typedef ::testing::tuple<TX_SIZE, sub_avg_fn> sub_avg_param;
-class CFLSubAvgTest : public ::testing::TestWithParam<sub_avg_param>,
- public CFLTestWithData<int16_t> {
- public:
- virtual void SetUp() {
- CFLTest::init(::testing::get<0>(this->GetParam()));
- sub_avg = ::testing::get<1>(this->GetParam())(tx_size);
- sub_avg_ref = get_subtract_average_fn_c(tx_size);
- }
- virtual ~CFLSubAvgTest() {}
-
- protected:
- cfl_subtract_average_fn sub_avg;
- cfl_subtract_average_fn sub_avg_ref;
-};
-
-TEST_P(CFLSubAvgTest, SubAvgTest) {
- for (int it = 0; it < NUM_ITERATIONS; it++) {
- randData(&ACMRandom::Rand15Signed);
- sub_avg((uint16_t *)data, data);
- sub_avg_ref((uint16_t *)data_ref, data_ref);
- assert_eq<int16_t>(data, data_ref, width, height);
- }
-}
-
-TEST_P(CFLSubAvgTest, DISABLED_SubAvgSpeedTest) {
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
- randData(&ACMRandom::Rand15Signed);
- aom_usec_timer_start(&ref_timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- sub_avg_ref((uint16_t *)data_ref, data_ref);
- }
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
- aom_usec_timer_start(&timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- sub_avg((uint16_t *)data, data);
- }
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
- printSpeed(ref_elapsed_time, elapsed_time, width, height);
- assertFaster(ref_elapsed_time, elapsed_time);
-}
-
-template <typename S, typename T, typename I>
-class CFLSubsampleTest : public ::testing::TestWithParam<S>,
- public CFLTestWithData<I> {
- public:
- virtual void SetUp() {
- CFLTest::init(::testing::get<0>(this->GetParam()));
- fun_420 = ::testing::get<1>(this->GetParam())(this->tx_size);
- fun_422 = ::testing::get<2>(this->GetParam())(this->tx_size);
- fun_444 = ::testing::get<3>(this->GetParam())(this->tx_size);
- }
-
- protected:
- T fun_420;
- T fun_422;
- T fun_444;
- T fun_420_ref;
- T fun_422_ref;
- T fun_444_ref;
-
- void subsampleTest(T fun, T fun_ref, int sub_width, int sub_height,
- I (ACMRandom::*random)()) {
- uint16_t sub_luma_pels[CFL_BUF_SQUARE];
- uint16_t sub_luma_pels_ref[CFL_BUF_SQUARE];
-
- for (int it = 0; it < NUM_ITERATIONS; it++) {
- CFLTestWithData<I>::randData(random);
- fun(this->data, CFL_BUF_LINE, sub_luma_pels);
- fun_ref(this->data_ref, CFL_BUF_LINE, sub_luma_pels_ref);
- assert_eq<uint16_t>(sub_luma_pels, sub_luma_pels_ref, sub_width,
- sub_height);
- }
- }
-
- void subsampleSpeedTest(T fun, T fun_ref, I (ACMRandom::*random)()) {
- uint16_t sub_luma_pels[CFL_BUF_SQUARE];
- uint16_t sub_luma_pels_ref[CFL_BUF_SQUARE];
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
-
- CFLTestWithData<I>::randData(random);
- aom_usec_timer_start(&ref_timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- fun_ref(this->data_ref, CFL_BUF_LINE, sub_luma_pels);
- }
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
- aom_usec_timer_start(&timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- fun(this->data, CFL_BUF_LINE, sub_luma_pels_ref);
- }
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
- printSpeed(ref_elapsed_time, elapsed_time, this->width, this->height);
- assertFaster(ref_elapsed_time, elapsed_time);
- }
-};
-
-typedef cfl_subsample_lbd_fn (*get_subsample_lbd_fn)(TX_SIZE tx_size);
-typedef ::testing::tuple<TX_SIZE, get_subsample_lbd_fn, get_subsample_lbd_fn,
- get_subsample_lbd_fn>
- subsample_lbd_param;
-class CFLSubsampleLBDTest
- : public CFLSubsampleTest<subsample_lbd_param, cfl_subsample_lbd_fn,
- uint8_t> {
- public:
- virtual ~CFLSubsampleLBDTest() {}
- virtual void SetUp() {
- CFLSubsampleTest::SetUp();
- fun_420_ref = cfl_get_luma_subsampling_420_lbd_c(tx_size);
- fun_422_ref = cfl_get_luma_subsampling_422_lbd_c(tx_size);
- fun_444_ref = cfl_get_luma_subsampling_444_lbd_c(tx_size);
- }
-};
-
-TEST_P(CFLSubsampleLBDTest, SubsampleLBD420Test) {
- subsampleTest(fun_420, fun_420_ref, width >> 1, height >> 1,
- &ACMRandom::Rand8);
-}
-
-TEST_P(CFLSubsampleLBDTest, DISABLED_SubsampleLBD420SpeedTest) {
- subsampleSpeedTest(fun_420, fun_420_ref, &ACMRandom::Rand8);
-}
-
-TEST_P(CFLSubsampleLBDTest, SubsampleLBD422Test) {
- subsampleTest(fun_422, fun_422_ref, width >> 1, height, &ACMRandom::Rand8);
-}
-
-TEST_P(CFLSubsampleLBDTest, DISABLED_SubsampleLBD422SpeedTest) {
- subsampleSpeedTest(fun_422, fun_422_ref, &ACMRandom::Rand8);
-}
-
-TEST_P(CFLSubsampleLBDTest, SubsampleLBD444Test) {
- subsampleTest(fun_444, fun_444_ref, width, height, &ACMRandom::Rand8);
-}
-
-TEST_P(CFLSubsampleLBDTest, DISABLED_SubsampleLBD444SpeedTest) {
- subsampleSpeedTest(fun_444, fun_444_ref, &ACMRandom::Rand8);
-}
-
-typedef cfl_subsample_hbd_fn (*get_subsample_hbd_fn)(TX_SIZE tx_size);
-typedef ::testing::tuple<TX_SIZE, get_subsample_hbd_fn, get_subsample_hbd_fn,
- get_subsample_hbd_fn>
- subsample_hbd_param;
-class CFLSubsampleHBDTest
- : public CFLSubsampleTest<subsample_hbd_param, cfl_subsample_hbd_fn,
- uint16_t> {
- public:
- virtual ~CFLSubsampleHBDTest() {}
- virtual void SetUp() {
- CFLSubsampleTest::SetUp();
- fun_420_ref = cfl_get_luma_subsampling_420_hbd_c(tx_size);
- fun_422_ref = cfl_get_luma_subsampling_422_hbd_c(tx_size);
- fun_444_ref = cfl_get_luma_subsampling_444_hbd_c(tx_size);
- }
-};
-
-TEST_P(CFLSubsampleHBDTest, SubsampleHBD420Test) {
- subsampleTest(fun_420, fun_420_ref, width >> 1, height >> 1,
- &ACMRandom::Rand12);
-}
-
-TEST_P(CFLSubsampleHBDTest, DISABLED_SubsampleHBD420SpeedTest) {
- subsampleSpeedTest(fun_420, fun_420_ref, &ACMRandom::Rand12);
-}
-
-TEST_P(CFLSubsampleHBDTest, SubsampleHBD422Test) {
- subsampleTest(fun_422, fun_422_ref, width >> 1, height, &ACMRandom::Rand12);
-}
-
-TEST_P(CFLSubsampleHBDTest, DISABLED_SubsampleHBD422SpeedTest) {
- subsampleSpeedTest(fun_422, fun_422_ref, &ACMRandom::Rand12);
-}
-
-TEST_P(CFLSubsampleHBDTest, SubsampleHBD444Test) {
- subsampleTest(fun_444, fun_444_ref, width, height, &ACMRandom::Rand12);
-}
-
-TEST_P(CFLSubsampleHBDTest, DISABLED_SubsampleHBD444SpeedTest) {
- subsampleSpeedTest(fun_444, fun_444_ref, &ACMRandom::Rand12);
-}
-
-typedef cfl_predict_lbd_fn (*get_predict_fn)(TX_SIZE tx_size);
-typedef ::testing::tuple<TX_SIZE, get_predict_fn> predict_param;
-class CFLPredictTest : public ::testing::TestWithParam<predict_param>,
- public CFLTestWithAlignedData<uint8_t> {
- public:
- virtual void SetUp() {
- CFLTest::init(::testing::get<0>(this->GetParam()));
- predict = ::testing::get<1>(this->GetParam())(tx_size);
- predict_ref = get_predict_lbd_fn_c(tx_size);
- }
- virtual ~CFLPredictTest() {}
-
- protected:
- cfl_predict_lbd_fn predict;
- cfl_predict_lbd_fn predict_ref;
-};
-
-TEST_P(CFLPredictTest, PredictTest) {
- for (int it = 0; it < NUM_ITERATIONS; it++) {
- randData(8);
- predict(sub_luma_pels, chroma_pels, CFL_BUF_LINE, alpha_q3);
- predict_ref(sub_luma_pels_ref, chroma_pels_ref, CFL_BUF_LINE, alpha_q3);
- assert_eq<uint8_t>(chroma_pels, chroma_pels_ref, width, height);
- }
-}
-TEST_P(CFLPredictTest, DISABLED_PredictSpeedTest) {
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
- randData(8);
- aom_usec_timer_start(&ref_timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- predict_ref(sub_luma_pels_ref, chroma_pels_ref, CFL_BUF_LINE, alpha_q3);
- }
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer_start(&timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- predict(sub_luma_pels, chroma_pels, CFL_BUF_LINE, alpha_q3);
- }
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
- printSpeed(ref_elapsed_time, elapsed_time, width, height);
- assertFaster(ref_elapsed_time, elapsed_time);
-}
-
-typedef cfl_predict_hbd_fn (*get_predict_fn_hbd)(TX_SIZE tx_size);
-typedef ::testing::tuple<TX_SIZE, get_predict_fn_hbd> predict_param_hbd;
-class CFLPredictHBDTest : public ::testing::TestWithParam<predict_param_hbd>,
- public CFLTestWithAlignedData<uint16_t> {
- public:
- virtual void SetUp() {
- CFLTest::init(::testing::get<0>(this->GetParam()));
- predict = ::testing::get<1>(this->GetParam())(tx_size);
- predict_ref = get_predict_hbd_fn_c(tx_size);
- }
- virtual ~CFLPredictHBDTest() {}
-
- protected:
- cfl_predict_hbd_fn predict;
- cfl_predict_hbd_fn predict_ref;
-};
-
-TEST_P(CFLPredictHBDTest, PredictHBDTest) {
- int bd = 12;
- for (int it = 0; it < NUM_ITERATIONS; it++) {
- randData(bd);
- predict(sub_luma_pels, chroma_pels, CFL_BUF_LINE, alpha_q3, bd);
- predict_ref(sub_luma_pels_ref, chroma_pels_ref, CFL_BUF_LINE, alpha_q3, bd);
- assert_eq<uint16_t>(chroma_pels, chroma_pels_ref, width, height);
- }
-}
-TEST_P(CFLPredictHBDTest, DISABLED_PredictHBDSpeedTest) {
- aom_usec_timer ref_timer;
- aom_usec_timer timer;
- const int bd = 12;
- randData(bd);
- aom_usec_timer_start(&ref_timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- predict_ref(sub_luma_pels_ref, chroma_pels_ref, CFL_BUF_LINE, alpha_q3, bd);
- }
- aom_usec_timer_mark(&ref_timer);
- int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer_start(&timer);
- for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) {
- predict(sub_luma_pels, chroma_pels, CFL_BUF_LINE, alpha_q3, bd);
- }
- aom_usec_timer_mark(&timer);
- int elapsed_time = (int)aom_usec_timer_elapsed(&timer);
- printSpeed(ref_elapsed_time, elapsed_time, width, height);
- assertFaster(ref_elapsed_time, elapsed_time);
-}
-
-#if HAVE_SSE2
-const sub_avg_param sub_avg_sizes_sse2[] = { ALL_CFL_TX_SIZES(
- get_subtract_average_fn_sse2) };
-
-INSTANTIATE_TEST_CASE_P(SSE2, CFLSubAvgTest,
- ::testing::ValuesIn(sub_avg_sizes_sse2));
-
-#endif
-
-#if HAVE_SSSE3
-const subsample_lbd_param subsample_lbd_sizes_ssse3[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_ssse3,
- cfl_get_luma_subsampling_422_lbd_ssse3,
- cfl_get_luma_subsampling_444_lbd_ssse3)
-};
-
-const subsample_hbd_param subsample_hbd_sizes_ssse3[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_ssse3,
- cfl_get_luma_subsampling_422_hbd_ssse3,
- cfl_get_luma_subsampling_444_hbd_ssse3)
-};
-
-const predict_param predict_sizes_ssse3[] = { ALL_CFL_TX_SIZES(
- get_predict_lbd_fn_ssse3) };
-
-const predict_param_hbd predict_sizes_hbd_ssse3[] = { ALL_CFL_TX_SIZES(
- get_predict_hbd_fn_ssse3) };
-
-INSTANTIATE_TEST_CASE_P(SSSE3, CFLSubsampleLBDTest,
- ::testing::ValuesIn(subsample_lbd_sizes_ssse3));
-
-INSTANTIATE_TEST_CASE_P(SSSE3, CFLSubsampleHBDTest,
- ::testing::ValuesIn(subsample_hbd_sizes_ssse3));
-
-INSTANTIATE_TEST_CASE_P(SSSE3, CFLPredictTest,
- ::testing::ValuesIn(predict_sizes_ssse3));
-
-INSTANTIATE_TEST_CASE_P(SSSE3, CFLPredictHBDTest,
- ::testing::ValuesIn(predict_sizes_hbd_ssse3));
-#endif
-
-#if HAVE_AVX2
-const sub_avg_param sub_avg_sizes_avx2[] = { ALL_CFL_TX_SIZES(
- get_subtract_average_fn_avx2) };
-
-const subsample_lbd_param subsample_lbd_sizes_avx2[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_avx2,
- cfl_get_luma_subsampling_422_lbd_avx2,
- cfl_get_luma_subsampling_444_lbd_avx2)
-};
-
-const subsample_hbd_param subsample_hbd_sizes_avx2[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_avx2,
- cfl_get_luma_subsampling_422_hbd_avx2,
- cfl_get_luma_subsampling_444_hbd_avx2)
-};
-
-const predict_param predict_sizes_avx2[] = { ALL_CFL_TX_SIZES(
- get_predict_lbd_fn_avx2) };
-
-const predict_param_hbd predict_sizes_hbd_avx2[] = { ALL_CFL_TX_SIZES(
- get_predict_hbd_fn_avx2) };
-
-INSTANTIATE_TEST_CASE_P(AVX2, CFLSubAvgTest,
- ::testing::ValuesIn(sub_avg_sizes_avx2));
-
-INSTANTIATE_TEST_CASE_P(AVX2, CFLSubsampleLBDTest,
- ::testing::ValuesIn(subsample_lbd_sizes_avx2));
-
-INSTANTIATE_TEST_CASE_P(AVX2, CFLSubsampleHBDTest,
- ::testing::ValuesIn(subsample_hbd_sizes_avx2));
-
-INSTANTIATE_TEST_CASE_P(AVX2, CFLPredictTest,
- ::testing::ValuesIn(predict_sizes_avx2));
-
-INSTANTIATE_TEST_CASE_P(AVX2, CFLPredictHBDTest,
- ::testing::ValuesIn(predict_sizes_hbd_avx2));
-#endif
-
-#if HAVE_NEON
-
-const sub_avg_param sub_avg_sizes_neon[] = { ALL_CFL_TX_SIZES(
- get_subtract_average_fn_neon) };
-
-const subsample_lbd_param subsample_lbd_sizes_neon[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_lbd_neon,
- cfl_get_luma_subsampling_422_lbd_neon,
- cfl_get_luma_subsampling_444_lbd_neon)
-};
-
-const subsample_hbd_param subsample_hbd_sizes_neon[] = {
- ALL_CFL_TX_SIZES_SUBSAMPLE(cfl_get_luma_subsampling_420_hbd_neon,
- cfl_get_luma_subsampling_422_hbd_neon,
- cfl_get_luma_subsampling_444_hbd_neon)
-};
-
-const predict_param predict_sizes_neon[] = { ALL_CFL_TX_SIZES(
- get_predict_lbd_fn_neon) };
-
-const predict_param_hbd predict_sizes_hbd_neon[] = { ALL_CFL_TX_SIZES(
- get_predict_hbd_fn_neon) };
-
-INSTANTIATE_TEST_CASE_P(NEON, CFLSubAvgTest,
- ::testing::ValuesIn(sub_avg_sizes_neon));
-
-INSTANTIATE_TEST_CASE_P(NEON, CFLSubsampleLBDTest,
- ::testing::ValuesIn(subsample_lbd_sizes_neon));
-
-INSTANTIATE_TEST_CASE_P(NEON, CFLSubsampleHBDTest,
- ::testing::ValuesIn(subsample_hbd_sizes_neon));
-
-INSTANTIATE_TEST_CASE_P(NEON, CFLPredictTest,
- ::testing::ValuesIn(predict_sizes_neon));
-
-INSTANTIATE_TEST_CASE_P(NEON, CFLPredictHBDTest,
- ::testing::ValuesIn(predict_sizes_hbd_neon));
-#endif
-
-#if HAVE_VSX
-const sub_avg_param sub_avg_sizes_vsx[] = { ALL_CFL_TX_SIZES(
- get_subtract_average_fn_vsx) };
-
-INSTANTIATE_TEST_CASE_P(VSX, CFLSubAvgTest,
- ::testing::ValuesIn(sub_avg_sizes_vsx));
-#endif
-} // namespace
diff --git a/third_party/aom/test/clear_system_state.h b/third_party/aom/test/clear_system_state.h
deleted file mode 100644
index d38ff5dd5..000000000
--- a/third_party/aom/test/clear_system_state.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_CLEAR_SYSTEM_STATE_H_
-#define AOM_TEST_CLEAR_SYSTEM_STATE_H_
-
-#include "config/aom_config.h"
-
-#if ARCH_X86 || ARCH_X86_64
-#include "aom_ports/x86.h"
-#endif
-
-namespace libaom_test {
-
-// Reset system to a known state. This function should be used for all non-API
-// test cases.
-inline void ClearSystemState() {
-#if ARCH_X86 || ARCH_X86_64
- aom_reset_mmx_state();
-#endif
-}
-
-} // namespace libaom_test
-#endif // AOM_TEST_CLEAR_SYSTEM_STATE_H_
diff --git a/third_party/aom/test/codec_factory.h b/third_party/aom/test/codec_factory.h
deleted file mode 100644
index dd99110ee..000000000
--- a/third_party/aom/test/codec_factory.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_CODEC_FACTORY_H_
-#define AOM_TEST_CODEC_FACTORY_H_
-
-#include "config/aom_config.h"
-
-#include "aom/aom_decoder.h"
-#include "aom/aom_encoder.h"
-#if CONFIG_AV1_ENCODER
-#include "aom/aomcx.h"
-#endif
-#if CONFIG_AV1_DECODER
-#include "aom/aomdx.h"
-#endif
-
-#include "test/decode_test_driver.h"
-#include "test/encode_test_driver.h"
-namespace libaom_test {
-
-const int kCodecFactoryParam = 0;
-
-class CodecFactory {
- public:
- CodecFactory() {}
-
- virtual ~CodecFactory() {}
-
- virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg) const = 0;
-
- virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg,
- const aom_codec_flags_t flags) const = 0;
-
- virtual Encoder *CreateEncoder(aom_codec_enc_cfg_t cfg,
- const unsigned long init_flags,
- TwopassStatsStore *stats) const = 0;
-
- virtual aom_codec_err_t DefaultEncoderConfig(aom_codec_enc_cfg_t *cfg,
- int usage) const = 0;
-};
-
-/* Provide CodecTestWith<n>Params classes for a variable number of parameters
- * to avoid having to include a pointer to the CodecFactory in every test
- * definition.
- */
-template <class T1>
-class CodecTestWithParam
- : public ::testing::TestWithParam<
- ::testing::tuple<const libaom_test::CodecFactory *, T1> > {};
-
-template <class T1, class T2>
-class CodecTestWith2Params
- : public ::testing::TestWithParam<
- ::testing::tuple<const libaom_test::CodecFactory *, T1, T2> > {};
-
-template <class T1, class T2, class T3>
-class CodecTestWith3Params
- : public ::testing::TestWithParam<
- ::testing::tuple<const libaom_test::CodecFactory *, T1, T2, T3> > {};
-
-template <class T1, class T2, class T3, class T4>
-class CodecTestWith4Params
- : public ::testing::TestWithParam< ::testing::tuple<
- const libaom_test::CodecFactory *, T1, T2, T3, T4> > {};
-
-template <class T1, class T2, class T3, class T4, class T5>
-class CodecTestWith5Params
- : public ::testing::TestWithParam< ::testing::tuple<
- const libaom_test::CodecFactory *, T1, T2, T3, T4, T5> > {};
-
-/*
- * AV1 Codec Definitions
- */
-class AV1Decoder : public Decoder {
- public:
- explicit AV1Decoder(aom_codec_dec_cfg_t cfg) : Decoder(cfg) {}
-
- AV1Decoder(aom_codec_dec_cfg_t cfg, const aom_codec_flags_t flag)
- : Decoder(cfg, flag) {}
-
- protected:
- virtual aom_codec_iface_t *CodecInterface() const {
-#if CONFIG_AV1_DECODER
- return aom_codec_av1_dx();
-#else
- return NULL;
-#endif
- }
-};
-
-class AV1Encoder : public Encoder {
- public:
- AV1Encoder(aom_codec_enc_cfg_t cfg, const uint32_t init_flags,
- TwopassStatsStore *stats)
- : Encoder(cfg, init_flags, stats) {}
-
- protected:
- virtual aom_codec_iface_t *CodecInterface() const {
-#if CONFIG_AV1_ENCODER
- return aom_codec_av1_cx();
-#else
- return NULL;
-#endif
- }
-};
-
-class AV1CodecFactory : public CodecFactory {
- public:
- AV1CodecFactory() : CodecFactory() {}
-
- virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg) const {
- return CreateDecoder(cfg, 0);
- }
-
- virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg,
- const aom_codec_flags_t flags) const {
-#if CONFIG_AV1_DECODER
- return new AV1Decoder(cfg, flags);
-#else
- (void)cfg;
- (void)flags;
- return NULL;
-#endif
- }
-
- virtual Encoder *CreateEncoder(aom_codec_enc_cfg_t cfg,
- const unsigned long init_flags,
- TwopassStatsStore *stats) const {
-#if CONFIG_AV1_ENCODER
- return new AV1Encoder(cfg, init_flags, stats);
-#else
- (void)cfg;
- (void)init_flags;
- (void)stats;
- return NULL;
-#endif
- }
-
- virtual aom_codec_err_t DefaultEncoderConfig(aom_codec_enc_cfg_t *cfg,
- int usage) const {
-#if CONFIG_AV1_ENCODER
- return aom_codec_enc_config_default(aom_codec_av1_cx(), cfg, usage);
-#else
- (void)cfg;
- (void)usage;
- return AOM_CODEC_INCAPABLE;
-#endif
- }
-};
-
-const libaom_test::AV1CodecFactory kAV1;
-
-#define AV1_INSTANTIATE_TEST_CASE(test, ...) \
- INSTANTIATE_TEST_CASE_P( \
- AV1, test, \
- ::testing::Combine( \
- ::testing::Values(static_cast<const libaom_test::CodecFactory *>( \
- &libaom_test::kAV1)), \
- __VA_ARGS__))
-
-} // namespace libaom_test
-#endif // AOM_TEST_CODEC_FACTORY_H_
diff --git a/third_party/aom/test/coding_path_sync.cc b/third_party/aom/test/coding_path_sync.cc
deleted file mode 100644
index 6735236cc..000000000
--- a/third_party/aom/test/coding_path_sync.cc
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-
-#include "config/aom_config.h"
-
-#include "aom_ports/mem.h" // ROUND_POWER_OF_TWO
-#include "aom/aomcx.h"
-#include "aom/aomdx.h"
-#include "aom/aom_encoder.h"
-#include "aom/aom_decoder.h"
-
-using libaom_test::ACMRandom;
-namespace {
-
-class CompressedSource {
- public:
- explicit CompressedSource(int seed) : rnd_(seed), frame_count_(0) {
- aom_codec_iface_t *algo = aom_codec_av1_cx();
-
- aom_codec_enc_cfg_t cfg;
- aom_codec_enc_config_default(algo, &cfg, 0);
-
- // force the quantizer, to reduce the sensitivity on encoding choices.
- // e.g, we don't want this test to break when the rate control is modified.
- {
- const int max_q = cfg.rc_max_quantizer;
- const int min_q = cfg.rc_min_quantizer;
- const int q = rnd_.PseudoUniform(max_q - min_q + 1) + min_q;
-
- cfg.rc_end_usage = AOM_Q;
- cfg.rc_max_quantizer = q;
- cfg.rc_min_quantizer = q;
- }
-
- // choose the picture size
- {
- width_ = rnd_.PseudoUniform(kWidth - 8) + 8;
- height_ = rnd_.PseudoUniform(kHeight - 8) + 8;
- }
-
- // choose the chroma subsampling
- {
- const aom_img_fmt_t fmts[] = {
- AOM_IMG_FMT_I420,
- AOM_IMG_FMT_I422,
- AOM_IMG_FMT_I444,
- };
-
- format_ = fmts[rnd_.PseudoUniform(NELEMENTS(fmts))];
- }
-
- cfg.g_w = width_;
- cfg.g_h = height_;
- cfg.g_lag_in_frames = 0;
- if (format_ == AOM_IMG_FMT_I420)
- cfg.g_profile = 0;
- else if (format_ == AOM_IMG_FMT_I444)
- cfg.g_profile = 1;
- else if (format_ == AOM_IMG_FMT_I422)
- cfg.g_profile = 2;
-
- aom_codec_enc_init(&enc_, algo, &cfg, 0);
- }
-
- ~CompressedSource() { aom_codec_destroy(&enc_); }
-
- const aom_codec_cx_pkt_t *ReadFrame() {
- uint8_t buf[kWidth * kHeight * 3] = { 0 };
-
- // render regular pattern
- const int period = rnd_.Rand8() % 32 + 1;
- const int phase = rnd_.Rand8() % period;
-
- const int val_a = rnd_.Rand8();
- const int val_b = rnd_.Rand8();
-
- for (int i = 0; i < (int)sizeof buf; ++i)
- buf[i] = (i + phase) % period < period / 2 ? val_a : val_b;
-
- aom_image_t img;
- aom_img_wrap(&img, format_, width_, height_, 0, buf);
- aom_codec_encode(&enc_, &img, frame_count_++, 1, 0);
-
- aom_codec_iter_t iter = NULL;
-
- const aom_codec_cx_pkt_t *pkt = NULL;
-
- do {
- pkt = aom_codec_get_cx_data(&enc_, &iter);
- } while (pkt && pkt->kind != AOM_CODEC_CX_FRAME_PKT);
-
- return pkt;
- }
-
- private:
- static const int kWidth = 128;
- static const int kHeight = 128;
-
- ACMRandom rnd_;
- aom_img_fmt_t format_;
- aom_codec_ctx_t enc_;
- int frame_count_;
- int width_, height_;
-};
-
-// lowers an aom_image_t to a easily comparable/printable form
-std::vector<int16_t> Serialize(const aom_image_t *img) {
- std::vector<int16_t> bytes;
- bytes.reserve(img->d_w * img->d_h * 3);
- for (int plane = 0; plane < 3; ++plane) {
- const int w = aom_img_plane_width(img, plane);
- const int h = aom_img_plane_height(img, plane);
-
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- unsigned char *row = img->planes[plane] + r * img->stride[plane];
- if (img->fmt & AOM_IMG_FMT_HIGHBITDEPTH)
- bytes.push_back(row[c * 2]);
- else
- bytes.push_back(row[c]);
- }
- }
- }
-
- return bytes;
-}
-
-class Decoder {
- public:
- explicit Decoder(int allowLowbitdepth) {
- aom_codec_iface_t *algo = aom_codec_av1_dx();
-
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.allow_lowbitdepth = allowLowbitdepth;
-
- aom_codec_dec_init(&dec_, algo, &cfg, 0);
- }
-
- ~Decoder() { aom_codec_destroy(&dec_); }
-
- std::vector<int16_t> decode(const aom_codec_cx_pkt_t *pkt) {
- aom_codec_decode(&dec_, static_cast<uint8_t *>(pkt->data.frame.buf),
- pkt->data.frame.sz, NULL);
-
- aom_codec_iter_t iter = NULL;
- return Serialize(aom_codec_get_frame(&dec_, &iter));
- }
-
- private:
- aom_codec_ctx_t dec_;
-};
-
-// Try to reveal a mismatch between LBD and HBD coding paths.
-TEST(CodingPathSync, SearchForHbdLbdMismatch) {
- const int count_tests = 10;
- for (int i = 0; i < count_tests; ++i) {
- Decoder dec_hbd(0);
- Decoder dec_lbd(1);
-
- CompressedSource enc(i);
-
- for (int k = 0; k < 3; ++k) {
- const aom_codec_cx_pkt_t *frame = enc.ReadFrame();
-
- std::vector<int16_t> lbd_yuv = dec_lbd.decode(frame);
- std::vector<int16_t> hbd_yuv = dec_hbd.decode(frame);
-
- ASSERT_EQ(lbd_yuv, hbd_yuv);
- }
- }
-}
-
-TEST(CodingPathSyncLarge, SearchForHbdLbdMismatchLarge) {
- const int count_tests = 100;
- const int seed = 1234;
- for (int i = 0; i < count_tests; ++i) {
- Decoder dec_hbd(0);
- Decoder dec_lbd(1);
-
- CompressedSource enc(seed + i);
-
- for (int k = 0; k < 5; ++k) {
- const aom_codec_cx_pkt_t *frame = enc.ReadFrame();
-
- std::vector<int16_t> lbd_yuv = dec_lbd.decode(frame);
- std::vector<int16_t> hbd_yuv = dec_hbd.decode(frame);
-
- ASSERT_EQ(lbd_yuv, hbd_yuv);
- }
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/comp_avg_pred_test.cc b/third_party/aom/test/comp_avg_pred_test.cc
deleted file mode 100644
index 9ad8973f0..000000000
--- a/third_party/aom/test/comp_avg_pred_test.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "test/comp_avg_pred_test.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-using libaom_test::AV1JNTCOMPAVG::AV1HighBDJNTCOMPAVGTest;
-using libaom_test::AV1JNTCOMPAVG::AV1HighBDJNTCOMPAVGUPSAMPLEDTest;
-using libaom_test::AV1JNTCOMPAVG::AV1JNTCOMPAVGTest;
-using libaom_test::AV1JNTCOMPAVG::AV1JNTCOMPAVGUPSAMPLEDTest;
-
-namespace {
-
-TEST_P(AV1JNTCOMPAVGTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(0)); }
-
-TEST_P(AV1JNTCOMPAVGTest, CheckOutput) { RunCheckOutput(GET_PARAM(0)); }
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AV1JNTCOMPAVGTest,
- libaom_test::AV1JNTCOMPAVG::BuildParams(aom_jnt_comp_avg_pred_ssse3));
-#endif
-
-TEST_P(AV1JNTCOMPAVGUPSAMPLEDTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0));
-}
-
-TEST_P(AV1JNTCOMPAVGUPSAMPLEDTest, CheckOutput) {
- RunCheckOutput(GET_PARAM(0));
-}
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(SSSE3, AV1JNTCOMPAVGUPSAMPLEDTest,
- libaom_test::AV1JNTCOMPAVG::BuildParams(
- aom_jnt_comp_avg_upsampled_pred_ssse3));
-#endif
-
-TEST_P(AV1HighBDJNTCOMPAVGTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(1)); }
-
-TEST_P(AV1HighBDJNTCOMPAVGTest, CheckOutput) { RunCheckOutput(GET_PARAM(1)); }
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, AV1HighBDJNTCOMPAVGTest,
- libaom_test::AV1JNTCOMPAVG::BuildParams(
- aom_highbd_jnt_comp_avg_pred_sse2, 1));
-#endif
-
-TEST_P(AV1HighBDJNTCOMPAVGUPSAMPLEDTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(1));
-}
-
-TEST_P(AV1HighBDJNTCOMPAVGUPSAMPLEDTest, CheckOutput) {
- RunCheckOutput(GET_PARAM(1));
-}
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, AV1HighBDJNTCOMPAVGUPSAMPLEDTest,
- libaom_test::AV1JNTCOMPAVG::BuildParams(
- aom_highbd_jnt_comp_avg_upsampled_pred_sse2));
-#endif
-
-} // namespace
diff --git a/third_party/aom/test/comp_avg_pred_test.h b/third_party/aom/test/comp_avg_pred_test.h
deleted file mode 100644
index 9661dd9f5..000000000
--- a/third_party/aom/test/comp_avg_pred_test.h
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_COMP_AVG_PRED_TEST_H_
-#define AOM_TEST_COMP_AVG_PRED_TEST_H_
-
-#include "config/aom_dsp_rtcd.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "av1/common/common_data.h"
-#include "aom_ports/aom_timer.h"
-
-namespace libaom_test {
-const int kMaxSize = 128 + 32; // padding
-
-namespace AV1JNTCOMPAVG {
-
-typedef void (*jntcompavg_func)(uint8_t *comp_pred, const uint8_t *pred,
- int width, int height, const uint8_t *ref,
- int ref_stride,
- const JNT_COMP_PARAMS *jcp_param);
-
-typedef void (*jntcompavgupsampled_func)(
- MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col,
- const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width,
- int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
- int ref_stride, const JNT_COMP_PARAMS *jcp_param, int subpel_search);
-
-typedef void (*highbdjntcompavgupsampled_func)(
- MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col,
- const MV *const mv, uint8_t *comp_pred8, const uint8_t *pred8, int width,
- int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref8,
- int ref_stride, int bd, const JNT_COMP_PARAMS *jcp_param,
- int subpel_search);
-
-typedef ::testing::tuple<jntcompavg_func, BLOCK_SIZE> JNTCOMPAVGParam;
-
-typedef ::testing::tuple<jntcompavgupsampled_func, BLOCK_SIZE>
- JNTCOMPAVGUPSAMPLEDParam;
-
-typedef ::testing::tuple<int, jntcompavg_func, BLOCK_SIZE>
- HighbdJNTCOMPAVGParam;
-
-typedef ::testing::tuple<int, highbdjntcompavgupsampled_func, BLOCK_SIZE>
- HighbdJNTCOMPAVGUPSAMPLEDParam;
-
-::testing::internal::ParamGenerator<JNTCOMPAVGParam> BuildParams(
- jntcompavg_func filter) {
- return ::testing::Combine(::testing::Values(filter),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-::testing::internal::ParamGenerator<JNTCOMPAVGUPSAMPLEDParam> BuildParams(
- jntcompavgupsampled_func filter) {
- return ::testing::Combine(::testing::Values(filter),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-::testing::internal::ParamGenerator<HighbdJNTCOMPAVGParam> BuildParams(
- jntcompavg_func filter, int is_hbd) {
- (void)is_hbd;
- return ::testing::Combine(::testing::Range(8, 13, 2),
- ::testing::Values(filter),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-::testing::internal::ParamGenerator<HighbdJNTCOMPAVGUPSAMPLEDParam> BuildParams(
- highbdjntcompavgupsampled_func filter) {
- return ::testing::Combine(::testing::Range(8, 13, 2),
- ::testing::Values(filter),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-
-class AV1JNTCOMPAVGTest : public ::testing::TestWithParam<JNTCOMPAVGParam> {
- public:
- ~AV1JNTCOMPAVGTest() {}
- void SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
- void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunCheckOutput(jntcompavg_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(1);
-
- uint8_t pred8[kMaxSize * kMaxSize];
- uint8_t ref8[kMaxSize * kMaxSize];
- uint8_t output[kMaxSize * kMaxSize];
- uint8_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand8();
- ref8[i * w + j] = rnd_.Rand8();
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- for (int ii = 0; ii < 2; ii++) {
- for (int jj = 0; jj < 4; jj++) {
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
-
- const int offset_r = 3 + rnd_.PseudoUniform(h - in_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - in_w - 7);
- aom_jnt_comp_avg_pred_c(output, pred8 + offset_r * w + offset_c, in_w,
- in_h, ref8 + offset_r * w + offset_c, in_w,
- &jnt_comp_params);
- test_impl(output2, pred8 + offset_r * w + offset_c, in_w, in_h,
- ref8 + offset_r * w + offset_c, in_w, &jnt_comp_params);
-
- for (int i = 0; i < in_h; ++i) {
- for (int j = 0; j < in_w; ++j) {
- int idx = i * in_w + j;
- ASSERT_EQ(output[idx], output2[idx])
- << "Mismatch at unit tests for AV1JNTCOMPAVGTest\n"
- << in_w << "x" << in_h << " Pixel mismatch at index " << idx
- << " = (" << i << ", " << j << ")";
- }
- }
- }
- }
- }
- void RunSpeedTest(jntcompavg_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(1);
-
- uint8_t pred8[kMaxSize * kMaxSize];
- uint8_t ref8[kMaxSize * kMaxSize];
- uint8_t output[kMaxSize * kMaxSize];
- uint8_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand8();
- ref8[i * w + j] = rnd_.Rand8();
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[0][0][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[0][0][1];
-
- const int num_loops = 1000000000 / (in_w + in_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- aom_jnt_comp_avg_pred_c(output, pred8, in_w, in_h, ref8, in_w,
- &jnt_comp_params);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("jntcompavg c_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time / num_loops);
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(output2, pred8, in_w, in_h, ref8, in_w, &jnt_comp_params);
-
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("jntcompavg test_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time1 / num_loops);
- }
-
- libaom_test::ACMRandom rnd_;
-}; // class AV1JNTCOMPAVGTest
-
-class AV1JNTCOMPAVGUPSAMPLEDTest
- : public ::testing::TestWithParam<JNTCOMPAVGUPSAMPLEDParam> {
- public:
- ~AV1JNTCOMPAVGUPSAMPLEDTest() {}
- void SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
- void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunCheckOutput(jntcompavgupsampled_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(1);
-
- uint8_t pred8[kMaxSize * kMaxSize];
- uint8_t ref8[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(16, uint8_t, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, output2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand8();
- ref8[i * w + j] = rnd_.Rand8();
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
- int sub_x_q3, sub_y_q3;
- int subpel_search;
- for (subpel_search = 1; subpel_search <= 2; ++subpel_search) {
- for (sub_x_q3 = 0; sub_x_q3 < 8; ++sub_x_q3) {
- for (sub_y_q3 = 0; sub_y_q3 < 8; ++sub_y_q3) {
- for (int ii = 0; ii < 2; ii++) {
- for (int jj = 0; jj < 4; jj++) {
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
-
- const int offset_r = 3 + rnd_.PseudoUniform(h - in_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - in_w - 7);
-
- aom_jnt_comp_avg_upsampled_pred_c(
- NULL, NULL, 0, 0, NULL, output,
- pred8 + offset_r * w + offset_c, in_w, in_h, sub_x_q3,
- sub_y_q3, ref8 + offset_r * w + offset_c, in_w,
- &jnt_comp_params, subpel_search);
- test_impl(NULL, NULL, 0, 0, NULL, output2,
- pred8 + offset_r * w + offset_c, in_w, in_h, sub_x_q3,
- sub_y_q3, ref8 + offset_r * w + offset_c, in_w,
- &jnt_comp_params, subpel_search);
-
- for (int i = 0; i < in_h; ++i) {
- for (int j = 0; j < in_w; ++j) {
- int idx = i * in_w + j;
- ASSERT_EQ(output[idx], output2[idx])
- << "Mismatch at unit tests for "
- "AV1JNTCOMPAVGUPSAMPLEDTest\n"
- << in_w << "x" << in_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << sub_y_q3 << ", "
- << sub_x_q3 << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- void RunSpeedTest(jntcompavgupsampled_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(1);
-
- uint8_t pred8[kMaxSize * kMaxSize];
- uint8_t ref8[kMaxSize * kMaxSize];
- DECLARE_ALIGNED(16, uint8_t, output[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, output2[MAX_SB_SQUARE]);
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand8();
- ref8[i * w + j] = rnd_.Rand8();
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[0][0][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[0][0][1];
-
- int sub_x_q3 = 0;
- int sub_y_q3 = 0;
-
- const int num_loops = 1000000000 / (in_w + in_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- int subpel_search = 2; // set to 1 to test 4-tap filter.
-
- for (int i = 0; i < num_loops; ++i)
- aom_jnt_comp_avg_upsampled_pred_c(NULL, NULL, 0, 0, NULL, output, pred8,
- in_w, in_h, sub_x_q3, sub_y_q3, ref8,
- in_w, &jnt_comp_params, subpel_search);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("jntcompavgupsampled c_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time / num_loops);
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(NULL, NULL, 0, 0, NULL, output2, pred8, in_w, in_h, sub_x_q3,
- sub_y_q3, ref8, in_w, &jnt_comp_params, subpel_search);
-
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("jntcompavgupsampled test_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time1 / num_loops);
- }
-
- libaom_test::ACMRandom rnd_;
-}; // class AV1JNTCOMPAVGUPSAMPLEDTest
-
-class AV1HighBDJNTCOMPAVGTest
- : public ::testing::TestWithParam<HighbdJNTCOMPAVGParam> {
- public:
- ~AV1HighBDJNTCOMPAVGTest() {}
- void SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
-
- void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunCheckOutput(jntcompavg_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- uint16_t pred8[kMaxSize * kMaxSize];
- uint16_t ref8[kMaxSize * kMaxSize];
- uint16_t output[kMaxSize * kMaxSize];
- uint16_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- ref8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- for (int ii = 0; ii < 2; ii++) {
- for (int jj = 0; jj < 4; jj++) {
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
-
- const int offset_r = 3 + rnd_.PseudoUniform(h - in_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - in_w - 7);
- aom_highbd_jnt_comp_avg_pred_c(
- CONVERT_TO_BYTEPTR(output),
- CONVERT_TO_BYTEPTR(pred8) + offset_r * w + offset_c, in_w, in_h,
- CONVERT_TO_BYTEPTR(ref8) + offset_r * w + offset_c, in_w,
- &jnt_comp_params);
- test_impl(CONVERT_TO_BYTEPTR(output2),
- CONVERT_TO_BYTEPTR(pred8) + offset_r * w + offset_c, in_w,
- in_h, CONVERT_TO_BYTEPTR(ref8) + offset_r * w + offset_c,
- in_w, &jnt_comp_params);
-
- for (int i = 0; i < in_h; ++i) {
- for (int j = 0; j < in_w; ++j) {
- int idx = i * in_w + j;
- ASSERT_EQ(output[idx], output2[idx])
- << "Mismatch at unit tests for AV1HighBDJNTCOMPAVGTest\n"
- << in_w << "x" << in_h << " Pixel mismatch at index " << idx
- << " = (" << i << ", " << j << ")";
- }
- }
- }
- }
- }
- void RunSpeedTest(jntcompavg_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- uint16_t pred8[kMaxSize * kMaxSize];
- uint16_t ref8[kMaxSize * kMaxSize];
- uint16_t output[kMaxSize * kMaxSize];
- uint16_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- ref8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[0][0][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[0][0][1];
-
- const int num_loops = 1000000000 / (in_w + in_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- aom_highbd_jnt_comp_avg_pred_c(
- CONVERT_TO_BYTEPTR(output), CONVERT_TO_BYTEPTR(pred8), in_w, in_h,
- CONVERT_TO_BYTEPTR(ref8), in_w, &jnt_comp_params);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("highbdjntcompavg c_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time / num_loops);
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(CONVERT_TO_BYTEPTR(output2), CONVERT_TO_BYTEPTR(pred8), in_w,
- in_h, CONVERT_TO_BYTEPTR(ref8), in_w, &jnt_comp_params);
-
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("highbdjntcompavg test_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time1 / num_loops);
- }
-
- libaom_test::ACMRandom rnd_;
-}; // class AV1HighBDJNTCOMPAVGTest
-
-class AV1HighBDJNTCOMPAVGUPSAMPLEDTest
- : public ::testing::TestWithParam<HighbdJNTCOMPAVGUPSAMPLEDParam> {
- public:
- ~AV1HighBDJNTCOMPAVGUPSAMPLEDTest() {}
- void SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
- void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunCheckOutput(highbdjntcompavgupsampled_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- uint16_t pred8[kMaxSize * kMaxSize];
- uint16_t ref8[kMaxSize * kMaxSize];
- uint16_t output[kMaxSize * kMaxSize];
- uint16_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- ref8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
- int sub_x_q3, sub_y_q3;
- int subpel_search;
- for (subpel_search = 1; subpel_search <= 2; ++subpel_search) {
- for (sub_x_q3 = 0; sub_x_q3 < 8; ++sub_x_q3) {
- for (sub_y_q3 = 0; sub_y_q3 < 8; ++sub_y_q3) {
- for (int ii = 0; ii < 2; ii++) {
- for (int jj = 0; jj < 4; jj++) {
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
-
- const int offset_r = 3 + rnd_.PseudoUniform(h - in_h - 7);
- const int offset_c = 3 + rnd_.PseudoUniform(w - in_w - 7);
-
- aom_highbd_jnt_comp_avg_upsampled_pred_c(
- NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(output),
- CONVERT_TO_BYTEPTR(pred8) + offset_r * w + offset_c, in_w,
- in_h, sub_x_q3, sub_y_q3,
- CONVERT_TO_BYTEPTR(ref8) + offset_r * w + offset_c, in_w, bd,
- &jnt_comp_params, subpel_search);
- test_impl(NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(output2),
- CONVERT_TO_BYTEPTR(pred8) + offset_r * w + offset_c,
- in_w, in_h, sub_x_q3, sub_y_q3,
- CONVERT_TO_BYTEPTR(ref8) + offset_r * w + offset_c,
- in_w, bd, &jnt_comp_params, subpel_search);
-
- for (int i = 0; i < in_h; ++i) {
- for (int j = 0; j < in_w; ++j) {
- int idx = i * in_w + j;
- ASSERT_EQ(output[idx], output2[idx])
- << "Mismatch at unit tests for "
- "AV1HighBDJNTCOMPAVGUPSAMPLEDTest\n"
- << in_w << "x" << in_h << " Pixel mismatch at index "
- << idx << " = (" << i << ", " << j
- << "), sub pixel offset = (" << sub_y_q3 << ", "
- << sub_x_q3 << ")";
- }
- }
- }
- }
- }
- }
- }
- }
- void RunSpeedTest(highbdjntcompavgupsampled_func test_impl) {
- const int w = kMaxSize, h = kMaxSize;
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- uint16_t pred8[kMaxSize * kMaxSize];
- uint16_t ref8[kMaxSize * kMaxSize];
- uint16_t output[kMaxSize * kMaxSize];
- uint16_t output2[kMaxSize * kMaxSize];
-
- for (int i = 0; i < h; ++i)
- for (int j = 0; j < w; ++j) {
- pred8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- ref8[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
- }
- const int in_w = block_size_wide[block_idx];
- const int in_h = block_size_high[block_idx];
-
- JNT_COMP_PARAMS jnt_comp_params;
- jnt_comp_params.use_jnt_comp_avg = 1;
-
- jnt_comp_params.fwd_offset = quant_dist_lookup_table[0][0][0];
- jnt_comp_params.bck_offset = quant_dist_lookup_table[0][0][1];
- int sub_x_q3 = 0;
- int sub_y_q3 = 0;
- const int num_loops = 1000000000 / (in_w + in_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- int subpel_search = 2; // set to 1 to test 4-tap filter.
- for (int i = 0; i < num_loops; ++i)
- aom_highbd_jnt_comp_avg_upsampled_pred_c(
- NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(output),
- CONVERT_TO_BYTEPTR(pred8), in_w, in_h, sub_x_q3, sub_y_q3,
- CONVERT_TO_BYTEPTR(ref8), in_w, bd, &jnt_comp_params, subpel_search);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("highbdjntcompavgupsampled c_code %3dx%-3d: %7.2f us\n", in_w, in_h,
- 1000.0 * elapsed_time / num_loops);
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(output2),
- CONVERT_TO_BYTEPTR(pred8), in_w, in_h, sub_x_q3, sub_y_q3,
- CONVERT_TO_BYTEPTR(ref8), in_w, bd, &jnt_comp_params,
- subpel_search);
-
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("highbdjntcompavgupsampled test_code %3dx%-3d: %7.2f us\n", in_w,
- in_h, 1000.0 * elapsed_time1 / num_loops);
- }
-
- libaom_test::ACMRandom rnd_;
-}; // class AV1HighBDJNTCOMPAVGUPSAMPLEDTest
-
-} // namespace AV1JNTCOMPAVG
-} // namespace libaom_test
-
-#endif // AOM_TEST_COMP_AVG_PRED_TEST_H_
diff --git a/third_party/aom/test/comp_mask_variance_test.cc b/third_party/aom/test/comp_mask_variance_test.cc
deleted file mode 100644
index 34be2aa6d..000000000
--- a/third_party/aom/test/comp_mask_variance_test.cc
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdlib>
-#include <new>
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_codec.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/variance.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/aom_timer.h"
-#include "aom_ports/mem.h"
-#include "av1/common/reconinter.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace AV1CompMaskVariance {
-typedef void (*comp_mask_pred_func)(uint8_t *comp_pred, const uint8_t *pred,
- int width, int height, const uint8_t *ref,
- int ref_stride, const uint8_t *mask,
- int mask_stride, int invert_mask);
-
-#if HAVE_SSSE3 || HAVE_AV2
-const BLOCK_SIZE kValidBlockSize[] = {
- BLOCK_8X8, BLOCK_8X16, BLOCK_8X32, BLOCK_16X8, BLOCK_16X16,
- BLOCK_16X32, BLOCK_32X8, BLOCK_32X16, BLOCK_32X32,
-};
-#endif
-typedef ::testing::tuple<comp_mask_pred_func, BLOCK_SIZE> CompMaskPredParam;
-
-class AV1CompMaskVarianceTest
- : public ::testing::TestWithParam<CompMaskPredParam> {
- public:
- ~AV1CompMaskVarianceTest();
- void SetUp();
-
- void TearDown();
-
- protected:
- void RunCheckOutput(comp_mask_pred_func test_impl, BLOCK_SIZE bsize, int inv);
- void RunSpeedTest(comp_mask_pred_func test_impl, BLOCK_SIZE bsize);
- bool CheckResult(int width, int height) {
- for (int y = 0; y < height; ++y) {
- for (int x = 0; x < width; ++x) {
- const int idx = y * width + x;
- if (comp_pred1_[idx] != comp_pred2_[idx]) {
- printf("%dx%d mismatch @%d(%d,%d) ", width, height, idx, y, x);
- printf("%d != %d ", comp_pred1_[idx], comp_pred2_[idx]);
- return false;
- }
- }
- }
- return true;
- }
-
- libaom_test::ACMRandom rnd_;
- uint8_t *comp_pred1_;
- uint8_t *comp_pred2_;
- uint8_t *pred_;
- uint8_t *ref_buffer_;
- uint8_t *ref_;
-};
-
-AV1CompMaskVarianceTest::~AV1CompMaskVarianceTest() { ; }
-
-void AV1CompMaskVarianceTest::SetUp() {
- rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed());
- av1_init_wedge_masks();
- comp_pred1_ = (uint8_t *)aom_memalign(16, MAX_SB_SQUARE);
- comp_pred2_ = (uint8_t *)aom_memalign(16, MAX_SB_SQUARE);
- pred_ = (uint8_t *)aom_memalign(16, MAX_SB_SQUARE);
- ref_buffer_ = (uint8_t *)aom_memalign(16, MAX_SB_SQUARE + (8 * MAX_SB_SIZE));
- ref_ = ref_buffer_ + (8 * MAX_SB_SIZE);
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pred_[i] = rnd_.Rand8();
- }
- for (int i = 0; i < MAX_SB_SQUARE + (8 * MAX_SB_SIZE); ++i) {
- ref_buffer_[i] = rnd_.Rand8();
- }
-}
-
-void AV1CompMaskVarianceTest::TearDown() {
- aom_free(comp_pred1_);
- aom_free(comp_pred2_);
- aom_free(pred_);
- aom_free(ref_buffer_);
- libaom_test::ClearSystemState();
-}
-
-void AV1CompMaskVarianceTest::RunCheckOutput(comp_mask_pred_func test_impl,
- BLOCK_SIZE bsize, int inv) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- for (int wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- aom_comp_mask_pred_c(comp_pred1_, pred_, w, h, ref_, MAX_SB_SIZE, mask, w,
- inv);
- test_impl(comp_pred2_, pred_, w, h, ref_, MAX_SB_SIZE, mask, w, inv);
-
- ASSERT_EQ(CheckResult(w, h), true)
- << " wedge " << wedge_index << " inv " << inv;
- }
-}
-
-void AV1CompMaskVarianceTest::RunSpeedTest(comp_mask_pred_func test_impl,
- BLOCK_SIZE bsize) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- int wedge_index = wedge_types / 2;
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
- const int num_loops = 1000000000 / (w + h);
-
- comp_mask_pred_func funcs[2] = { aom_comp_mask_pred_c, test_impl };
- double elapsed_time[2] = { 0 };
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- comp_mask_pred_func func = funcs[i];
- for (int j = 0; j < num_loops; ++j) {
- func(comp_pred1_, pred_, w, h, ref_, MAX_SB_SIZE, mask, w, 0);
- }
- aom_usec_timer_mark(&timer);
- double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
- elapsed_time[i] = 1000.0 * time / num_loops;
- }
- printf("compMask %3dx%-3d: %7.2f/%7.2fns", w, h, elapsed_time[0],
- elapsed_time[1]);
- printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
-}
-
-TEST_P(AV1CompMaskVarianceTest, CheckOutput) {
- // inv = 0, 1
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 0);
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-TEST_P(AV1CompMaskVarianceTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0), GET_PARAM(1));
-}
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AV1CompMaskVarianceTest,
- ::testing::Combine(::testing::Values(&aom_comp_mask_pred_ssse3),
- ::testing::ValuesIn(kValidBlockSize)));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1CompMaskVarianceTest,
- ::testing::Combine(::testing::Values(&aom_comp_mask_pred_avx2),
- ::testing::ValuesIn(kValidBlockSize)));
-#endif
-
-#ifndef aom_comp_mask_pred
-// can't run this test if aom_comp_mask_pred is defined to aom_comp_mask_pred_c
-class AV1CompMaskUpVarianceTest : public AV1CompMaskVarianceTest {
- public:
- ~AV1CompMaskUpVarianceTest();
-
- protected:
- void RunCheckOutput(comp_mask_pred_func test_impl, BLOCK_SIZE bsize, int inv);
- void RunSpeedTest(comp_mask_pred_func test_impl, BLOCK_SIZE bsize,
- int havSub);
-};
-
-AV1CompMaskUpVarianceTest::~AV1CompMaskUpVarianceTest() { ; }
-
-void AV1CompMaskUpVarianceTest::RunCheckOutput(comp_mask_pred_func test_impl,
- BLOCK_SIZE bsize, int inv) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- int subpel_search;
- for (subpel_search = 1; subpel_search <= 2; ++subpel_search) {
- // loop through subx and suby
- for (int sub = 0; sub < 8 * 8; ++sub) {
- int subx = sub & 0x7;
- int suby = (sub >> 3);
- for (int wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
- const uint8_t *mask =
- av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- // ref
- aom_comp_mask_upsampled_pred_c(
- NULL, NULL, 0, 0, NULL, comp_pred1_, pred_, w, h, subx, suby, ref_,
- MAX_SB_SIZE, mask, w, inv, subpel_search);
-
- aom_comp_mask_pred = test_impl; // test
- aom_comp_mask_upsampled_pred(NULL, NULL, 0, 0, NULL, comp_pred2_, pred_,
- w, h, subx, suby, ref_, MAX_SB_SIZE, mask,
- w, inv, subpel_search);
- ASSERT_EQ(CheckResult(w, h), true)
- << " wedge " << wedge_index << " inv " << inv << "sub (" << subx
- << "," << suby << ")";
- }
- }
- }
-}
-
-void AV1CompMaskUpVarianceTest::RunSpeedTest(comp_mask_pred_func test_impl,
- BLOCK_SIZE bsize, int havSub) {
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- const int subx = havSub ? 3 : 0;
- const int suby = havSub ? 4 : 0;
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- int wedge_index = wedge_types / 2;
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- const int num_loops = 1000000000 / (w + h);
- comp_mask_pred_func funcs[2] = { &aom_comp_mask_pred_c, test_impl };
- double elapsed_time[2] = { 0 };
- int subpel_search = 2; // set to 1 to test 4-tap filter.
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- aom_comp_mask_pred = funcs[i];
- for (int j = 0; j < num_loops; ++j) {
- aom_comp_mask_upsampled_pred(NULL, NULL, 0, 0, NULL, comp_pred1_, pred_,
- w, h, subx, suby, ref_, MAX_SB_SIZE, mask, w,
- 0, subpel_search);
- }
- aom_usec_timer_mark(&timer);
- double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
- elapsed_time[i] = 1000.0 * time / num_loops;
- }
- printf("CompMaskUp[%d] %3dx%-3d:%7.2f/%7.2fns", havSub, w, h, elapsed_time[0],
- elapsed_time[1]);
- printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
-}
-
-TEST_P(AV1CompMaskUpVarianceTest, CheckOutput) {
- // inv mask = 0, 1
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 0);
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-TEST_P(AV1CompMaskUpVarianceTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AV1CompMaskUpVarianceTest,
- ::testing::Combine(::testing::Values(&aom_comp_mask_pred_ssse3),
- ::testing::ValuesIn(kValidBlockSize)));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1CompMaskUpVarianceTest,
- ::testing::Combine(::testing::Values(&aom_comp_mask_pred_avx2),
- ::testing::ValuesIn(kValidBlockSize)));
-#endif
-
-#endif // ifndef aom_comp_mask_pred
-
-typedef void (*highbd_comp_mask_pred_func)(uint8_t *comp_pred8,
- const uint8_t *pred8, int width,
- int height, const uint8_t *ref8,
- int ref_stride, const uint8_t *mask,
- int mask_stride, int invert_mask);
-
-typedef ::testing::tuple<highbd_comp_mask_pred_func, BLOCK_SIZE, int>
- HighbdCompMaskPredParam;
-
-class AV1HighbdCompMaskVarianceTest
- : public ::testing::TestWithParam<HighbdCompMaskPredParam> {
- public:
- ~AV1HighbdCompMaskVarianceTest();
- void SetUp();
-
- void TearDown();
-
- protected:
- void RunCheckOutput(highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize,
- int inv);
- void RunSpeedTest(highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize);
- bool CheckResult(int width, int height) {
- for (int y = 0; y < height; ++y) {
- for (int x = 0; x < width; ++x) {
- const int idx = y * width + x;
- if (comp_pred1_[idx] != comp_pred2_[idx]) {
- printf("%dx%d mismatch @%d(%d,%d) ", width, height, idx, y, x);
- printf("%d != %d ", comp_pred1_[idx], comp_pred2_[idx]);
- return false;
- }
- }
- }
- return true;
- }
-
- libaom_test::ACMRandom rnd_;
- uint16_t *comp_pred1_;
- uint16_t *comp_pred2_;
- uint16_t *pred_;
- uint16_t *ref_buffer_;
- uint16_t *ref_;
-};
-
-AV1HighbdCompMaskVarianceTest::~AV1HighbdCompMaskVarianceTest() { ; }
-
-void AV1HighbdCompMaskVarianceTest::SetUp() {
- rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed());
- av1_init_wedge_masks();
-
- comp_pred1_ =
- (uint16_t *)aom_memalign(16, MAX_SB_SQUARE * sizeof(*comp_pred1_));
- comp_pred2_ =
- (uint16_t *)aom_memalign(16, MAX_SB_SQUARE * sizeof(*comp_pred2_));
- pred_ = (uint16_t *)aom_memalign(16, MAX_SB_SQUARE * sizeof(*pred_));
- ref_buffer_ = (uint16_t *)aom_memalign(
- 16, (MAX_SB_SQUARE + (8 * MAX_SB_SIZE)) * sizeof(*ref_buffer_));
- ref_ = ref_buffer_ + (8 * MAX_SB_SIZE);
-}
-
-void AV1HighbdCompMaskVarianceTest::TearDown() {
- aom_free(comp_pred1_);
- aom_free(comp_pred2_);
- aom_free(pred_);
- aom_free(ref_buffer_);
- libaom_test::ClearSystemState();
-}
-
-void AV1HighbdCompMaskVarianceTest::RunCheckOutput(
- highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize, int inv) {
- int bd_ = GET_PARAM(2);
-
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pred_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
- for (int i = 0; i < MAX_SB_SQUARE + (8 * MAX_SB_SIZE); ++i) {
- ref_buffer_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
-
- for (int wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- aom_highbd_comp_mask_pred_c(
- CONVERT_TO_BYTEPTR(comp_pred1_), CONVERT_TO_BYTEPTR(pred_), w, h,
- CONVERT_TO_BYTEPTR(ref_), MAX_SB_SIZE, mask, w, inv);
-
- test_impl(CONVERT_TO_BYTEPTR(comp_pred2_), CONVERT_TO_BYTEPTR(pred_), w, h,
- CONVERT_TO_BYTEPTR(ref_), MAX_SB_SIZE, mask, w, inv);
-
- ASSERT_EQ(CheckResult(w, h), true)
- << " wedge " << wedge_index << " inv " << inv;
- }
-}
-
-void AV1HighbdCompMaskVarianceTest::RunSpeedTest(
- highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize) {
- int bd_ = GET_PARAM(2);
-
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- int wedge_index = wedge_types / 2;
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pred_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
- for (int i = 0; i < MAX_SB_SQUARE + (8 * MAX_SB_SIZE); ++i) {
- ref_buffer_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
-
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
- const int num_loops = 1000000000 / (w + h);
-
- highbd_comp_mask_pred_func funcs[2] = { aom_highbd_comp_mask_pred_c,
- test_impl };
- double elapsed_time[2] = { 0 };
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- highbd_comp_mask_pred_func func = funcs[i];
- for (int j = 0; j < num_loops; ++j) {
- func(CONVERT_TO_BYTEPTR(comp_pred1_), CONVERT_TO_BYTEPTR(pred_), w, h,
- CONVERT_TO_BYTEPTR(ref_), MAX_SB_SIZE, mask, w, 0);
- }
- aom_usec_timer_mark(&timer);
- double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
- elapsed_time[i] = 1000.0 * time / num_loops;
- }
- printf("compMask %3dx%-3d: %7.2f/%7.2fns", w, h, elapsed_time[0],
- elapsed_time[1]);
- printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
-}
-
-TEST_P(AV1HighbdCompMaskVarianceTest, CheckOutput) {
- // inv = 0, 1
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 0);
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-TEST_P(AV1HighbdCompMaskVarianceTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0), GET_PARAM(1));
-}
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1HighbdCompMaskVarianceTest,
- ::testing::Combine(::testing::Values(&aom_highbd_comp_mask_pred_avx2),
- ::testing::ValuesIn(kValidBlockSize),
- ::testing::Range(8, 13, 2)));
-#endif
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, AV1HighbdCompMaskVarianceTest,
- ::testing::Combine(::testing::Values(&aom_highbd_comp_mask_pred_sse2),
- ::testing::ValuesIn(kValidBlockSize),
- ::testing::Range(8, 13, 2)));
-#endif
-
-#ifndef aom_highbd_comp_mask_pred
-// can't run this test if aom_highbd_comp_mask_pred is defined to
-// aom_highbd_comp_mask_pred_c
-class AV1HighbdCompMaskUpVarianceTest : public AV1HighbdCompMaskVarianceTest {
- public:
- ~AV1HighbdCompMaskUpVarianceTest();
-
- protected:
- void RunCheckOutput(highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize,
- int inv);
- void RunSpeedTest(highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize,
- int havSub);
-};
-
-AV1HighbdCompMaskUpVarianceTest::~AV1HighbdCompMaskUpVarianceTest() { ; }
-
-void AV1HighbdCompMaskUpVarianceTest::RunCheckOutput(
- highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize, int inv) {
- int bd_ = GET_PARAM(2);
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pred_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
- for (int i = 0; i < MAX_SB_SQUARE + (8 * MAX_SB_SIZE); ++i) {
- ref_buffer_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
-
- int subpel_search;
- for (subpel_search = 1; subpel_search <= 2; ++subpel_search) {
- // loop through subx and suby
- for (int sub = 0; sub < 8 * 8; ++sub) {
- int subx = sub & 0x7;
- int suby = (sub >> 3);
- for (int wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
- const uint8_t *mask =
- av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- aom_highbd_comp_mask_pred = aom_highbd_comp_mask_pred_c; // ref
- aom_highbd_comp_mask_upsampled_pred(
- NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(comp_pred1_),
- CONVERT_TO_BYTEPTR(pred_), w, h, subx, suby,
- CONVERT_TO_BYTEPTR(ref_), MAX_SB_SIZE, mask, w, inv, bd_,
- subpel_search);
-
- aom_highbd_comp_mask_pred = test_impl; // test
- aom_highbd_comp_mask_upsampled_pred(
- NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(comp_pred2_),
- CONVERT_TO_BYTEPTR(pred_), w, h, subx, suby,
- CONVERT_TO_BYTEPTR(ref_), MAX_SB_SIZE, mask, w, inv, bd_,
- subpel_search);
- ASSERT_EQ(CheckResult(w, h), true)
- << " wedge " << wedge_index << " inv " << inv << "sub (" << subx
- << "," << suby << ")";
- }
- }
- }
-}
-
-void AV1HighbdCompMaskUpVarianceTest::RunSpeedTest(
- highbd_comp_mask_pred_func test_impl, BLOCK_SIZE bsize, int havSub) {
- int bd_ = GET_PARAM(2);
- const int w = block_size_wide[bsize];
- const int h = block_size_high[bsize];
- const int subx = havSub ? 3 : 0;
- const int suby = havSub ? 4 : 0;
-
- int wedge_types = (1 << get_wedge_bits_lookup(bsize));
- int wedge_index = wedge_types / 2;
- const uint8_t *mask = av1_get_contiguous_soft_mask(wedge_index, 1, bsize);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pred_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
- for (int i = 0; i < MAX_SB_SQUARE + (8 * MAX_SB_SIZE); ++i) {
- ref_buffer_[i] = rnd_.Rand16() & ((1 << bd_) - 1);
- }
-
- const int num_loops = 1000000000 / (w + h);
- highbd_comp_mask_pred_func funcs[2] = { &aom_highbd_comp_mask_pred_c,
- test_impl };
- double elapsed_time[2] = { 0 };
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- aom_highbd_comp_mask_pred = funcs[i];
- int subpel_search = 2; // set to 1 to test 4-tap filter.
- for (int j = 0; j < num_loops; ++j) {
- aom_highbd_comp_mask_upsampled_pred(
- NULL, NULL, 0, 0, NULL, CONVERT_TO_BYTEPTR(comp_pred1_),
- CONVERT_TO_BYTEPTR(pred_), w, h, subx, suby, CONVERT_TO_BYTEPTR(ref_),
- MAX_SB_SIZE, mask, w, 0, bd_, subpel_search);
- }
- aom_usec_timer_mark(&timer);
- double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
- elapsed_time[i] = 1000.0 * time / num_loops;
- }
- printf("CompMaskUp[%d] %3dx%-3d:%7.2f/%7.2fns", havSub, w, h, elapsed_time[0],
- elapsed_time[1]);
- printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
-}
-
-TEST_P(AV1HighbdCompMaskUpVarianceTest, CheckOutput) {
- // inv mask = 0, 1
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 0);
- RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-TEST_P(AV1HighbdCompMaskUpVarianceTest, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1HighbdCompMaskUpVarianceTest,
- ::testing::Combine(::testing::Values(&aom_highbd_comp_mask_pred_avx2),
- ::testing::ValuesIn(kValidBlockSize),
- ::testing::Range(8, 13, 2)));
-#endif
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, AV1HighbdCompMaskUpVarianceTest,
- ::testing::Combine(::testing::Values(&aom_highbd_comp_mask_pred_sse2),
- ::testing::ValuesIn(kValidBlockSize),
- ::testing::Range(8, 13, 2)));
-#endif
-
-#endif // ifndef aom_highbd_comp_mask_pred
-} // namespace AV1CompMaskVariance
diff --git a/third_party/aom/test/convolve_round_test.cc b/third_party/aom/test/convolve_round_test.cc
deleted file mode 100644
index 2f801e7d4..000000000
--- a/third_party/aom/test/convolve_round_test.cc
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <assert.h>
-
-#include "config/av1_rtcd.h"
-
-#include "aom/aom_integer.h"
-#include "aom_ports/aom_timer.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-#define CONVOLVE_ROUNDING_PARAM \
- const int32_t *src, int src_stride, uint8_t *dst, int dst_stride, int w, \
- int h, int bits
-
-typedef void (*ConvolveRoundFunc)(CONVOLVE_ROUNDING_PARAM);
-
-typedef void (*ConvolveRoundFuncHbd)(CONVOLVE_ROUNDING_PARAM, int bd);
-
-template <ConvolveRoundFuncHbd fn>
-void highbd_convolve_rounding_8(CONVOLVE_ROUNDING_PARAM) {
- const int bd = 8;
- fn(src, src_stride, dst, dst_stride, w, h, bits, bd);
-}
-
-template <ConvolveRoundFuncHbd fn>
-void highbd_convolve_rounding_10(CONVOLVE_ROUNDING_PARAM) {
- const int bd = 10;
- fn(src, src_stride, dst, dst_stride, w, h, bits, bd);
-}
-
-template <ConvolveRoundFuncHbd fn>
-void highbd_convolve_rounding_12(CONVOLVE_ROUNDING_PARAM) {
- const int bd = 12;
- fn(src, src_stride, dst, dst_stride, w, h, bits, bd);
-}
-
-typedef enum { LOWBITDEPTH_TEST, HIGHBITDEPTH_TEST } DataPathType;
-
-using ::testing::tuple;
-
-typedef tuple<ConvolveRoundFunc, ConvolveRoundFunc, DataPathType>
- ConvolveRoundParam;
-
-const int kTestNum = 5000;
-
-class ConvolveRoundTest : public ::testing::TestWithParam<ConvolveRoundParam> {
- protected:
- ConvolveRoundTest()
- : func_ref_(GET_PARAM(0)), func_(GET_PARAM(1)), data_path_(GET_PARAM(2)) {
- }
- virtual ~ConvolveRoundTest() {}
-
- virtual void SetUp() {
- const size_t block_size = 128 * 128;
- src_ = reinterpret_cast<int32_t *>(
- aom_memalign(16, block_size * sizeof(*src_)));
- dst_ref_ = reinterpret_cast<uint16_t *>(
- aom_memalign(16, block_size * sizeof(*dst_ref_)));
- dst_ = reinterpret_cast<uint16_t *>(
- aom_memalign(16, block_size * sizeof(*dst_)));
- }
-
- virtual void TearDown() {
- aom_free(src_);
- aom_free(dst_ref_);
- aom_free(dst_);
- }
-
- void ConvolveRoundingRun() {
- int test_num = 0;
- const int src_stride = 128;
- const int dst_stride = 128;
- int bits = 13;
- uint8_t *dst = 0;
- uint8_t *dst_ref = 0;
-
- if (data_path_ == LOWBITDEPTH_TEST) {
- dst = reinterpret_cast<uint8_t *>(dst_);
- dst_ref = reinterpret_cast<uint8_t *>(dst_ref_);
- } else if (data_path_ == HIGHBITDEPTH_TEST) {
- dst = CONVERT_TO_BYTEPTR(dst_);
- dst_ref = CONVERT_TO_BYTEPTR(dst_ref_);
- } else {
- assert(0);
- }
-
- while (test_num < kTestNum) {
- int block_size = test_num % BLOCK_SIZES_ALL;
- int w = block_size_wide[block_size];
- int h = block_size_high[block_size];
-
- if (test_num % 2 == 0)
- bits -= 1;
- else
- bits += 1;
-
- GenerateBufferWithRandom(src_, src_stride, bits, w, h);
-
- func_ref_(src_, src_stride, dst_ref, dst_stride, w, h, bits);
- ASM_REGISTER_STATE_CHECK(
- func_(src_, src_stride, dst, dst_stride, w, h, bits));
-
- if (data_path_ == LOWBITDEPTH_TEST) {
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- ASSERT_EQ(dst_ref[r * dst_stride + c], dst[r * dst_stride + c])
- << "Mismatch at r: " << r << " c: " << c << " w: " << w
- << " h: " << h << " test: " << test_num;
- }
- }
- } else {
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- ASSERT_EQ(dst_ref_[r * dst_stride + c], dst_[r * dst_stride + c])
- << "Mismatch at r: " << r << " c: " << c << " w: " << w
- << " h: " << h << " test: " << test_num;
- }
- }
- }
-
- test_num++;
- }
- }
-
- void GenerateBufferWithRandom(int32_t *src, int src_stride, int bits, int w,
- int h) {
- int32_t number;
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- number = static_cast<int32_t>(rand_.Rand31());
- number %= 1 << (bits + 9);
- src[r * src_stride + c] = number;
- }
- }
- }
-
- ACMRandom rand_;
- int32_t *src_;
- uint16_t *dst_ref_;
- uint16_t *dst_;
-
- ConvolveRoundFunc func_ref_;
- ConvolveRoundFunc func_;
- DataPathType data_path_;
-};
-
-TEST_P(ConvolveRoundTest, BitExactCheck) { ConvolveRoundingRun(); }
-
-using ::testing::make_tuple;
-#if HAVE_AVX2
-const ConvolveRoundParam kConvRndParamArray[] = {
- make_tuple(&av1_convolve_rounding_c, &av1_convolve_rounding_avx2,
- LOWBITDEPTH_TEST),
- make_tuple(&highbd_convolve_rounding_8<av1_highbd_convolve_rounding_c>,
- &highbd_convolve_rounding_8<av1_highbd_convolve_rounding_avx2>,
- HIGHBITDEPTH_TEST),
- make_tuple(&highbd_convolve_rounding_10<av1_highbd_convolve_rounding_c>,
- &highbd_convolve_rounding_10<av1_highbd_convolve_rounding_avx2>,
- HIGHBITDEPTH_TEST),
- make_tuple(&highbd_convolve_rounding_12<av1_highbd_convolve_rounding_c>,
- &highbd_convolve_rounding_12<av1_highbd_convolve_rounding_avx2>,
- HIGHBITDEPTH_TEST)
-};
-INSTANTIATE_TEST_CASE_P(AVX2, ConvolveRoundTest,
- ::testing::ValuesIn(kConvRndParamArray));
-#endif // HAVE_AVX2
-} // namespace
diff --git a/third_party/aom/test/convolve_test.cc b/third_party/aom/test/convolve_test.cc
deleted file mode 100644
index de3f47628..000000000
--- a/third_party/aom/test/convolve_test.cc
+++ /dev/null
@@ -1,856 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom_dsp/aom_dsp_common.h"
-#include "aom_dsp/aom_filter.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/aom_timer.h"
-#include "aom_ports/mem.h"
-#include "av1/common/filter.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-namespace {
-
-static const unsigned int kMaxDimension = MAX_SB_SIZE;
-
-typedef void (*ConvolveFunc)(const uint8_t *src, ptrdiff_t src_stride,
- uint8_t *dst, ptrdiff_t dst_stride,
- const int16_t *filter_x, int filter_x_stride,
- const int16_t *filter_y, int filter_y_stride,
- int w, int h);
-
-struct ConvolveFunctions {
- ConvolveFunctions(ConvolveFunc copy, ConvolveFunc h8, ConvolveFunc v8, int bd)
- : copy_(copy), h8_(h8), v8_(v8), use_highbd_(bd) {}
-
- ConvolveFunc copy_;
- ConvolveFunc h8_;
- ConvolveFunc v8_;
- int use_highbd_; // 0 if high bitdepth not used, else the actual bit depth.
-};
-
-typedef ::testing::tuple<int, int, const ConvolveFunctions *> ConvolveParam;
-
-#define ALL_SIZES_64(convolve_fn) \
- make_tuple(4, 4, &convolve_fn), make_tuple(8, 4, &convolve_fn), \
- make_tuple(4, 8, &convolve_fn), make_tuple(8, 8, &convolve_fn), \
- make_tuple(16, 8, &convolve_fn), make_tuple(8, 16, &convolve_fn), \
- make_tuple(16, 16, &convolve_fn), make_tuple(32, 16, &convolve_fn), \
- make_tuple(16, 32, &convolve_fn), make_tuple(32, 32, &convolve_fn), \
- make_tuple(64, 32, &convolve_fn), make_tuple(32, 64, &convolve_fn), \
- make_tuple(64, 64, &convolve_fn)
-
-#define ALL_SIZES(convolve_fn) \
- make_tuple(128, 64, &convolve_fn), make_tuple(64, 128, &convolve_fn), \
- make_tuple(128, 128, &convolve_fn), ALL_SIZES_64(convolve_fn)
-
-// Reference 8-tap subpixel filter, slightly modified to fit into this test.
-#define AV1_FILTER_WEIGHT 128
-#define AV1_FILTER_SHIFT 7
-uint8_t clip_pixel(int x) { return x < 0 ? 0 : x > 255 ? 255 : x; }
-
-void filter_block2d_8_c(const uint8_t *src_ptr, unsigned int src_stride,
- const int16_t *HFilter, const int16_t *VFilter,
- uint8_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width, unsigned int output_height) {
- // Between passes, we use an intermediate buffer whose height is extended to
- // have enough horizontally filtered values as input for the vertical pass.
- // This buffer is allocated to be big enough for the largest block type we
- // support.
- const int kInterp_Extend = 4;
- const unsigned int intermediate_height =
- (kInterp_Extend - 1) + output_height + kInterp_Extend;
- unsigned int i, j;
-
- assert(intermediate_height > 7);
-
- // Size of intermediate_buffer is max_intermediate_height * filter_max_width,
- // where max_intermediate_height = (kInterp_Extend - 1) + filter_max_height
- // + kInterp_Extend
- // = 3 + 16 + 4
- // = 23
- // and filter_max_width = 16
- //
- uint8_t intermediate_buffer[(kMaxDimension + 8) * kMaxDimension];
- const int intermediate_next_stride =
- 1 - static_cast<int>(intermediate_height * output_width);
-
- // Horizontal pass (src -> transposed intermediate).
- uint8_t *output_ptr = intermediate_buffer;
- const int src_next_row_stride = src_stride - output_width;
- src_ptr -= (kInterp_Extend - 1) * src_stride + (kInterp_Extend - 1);
- for (i = 0; i < intermediate_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- // Apply filter...
- const int temp = (src_ptr[0] * HFilter[0]) + (src_ptr[1] * HFilter[1]) +
- (src_ptr[2] * HFilter[2]) + (src_ptr[3] * HFilter[3]) +
- (src_ptr[4] * HFilter[4]) + (src_ptr[5] * HFilter[5]) +
- (src_ptr[6] * HFilter[6]) + (src_ptr[7] * HFilter[7]) +
- (AV1_FILTER_WEIGHT >> 1); // Rounding
-
- // Normalize back to 0-255...
- *output_ptr = clip_pixel(temp >> AV1_FILTER_SHIFT);
- ++src_ptr;
- output_ptr += intermediate_height;
- }
- src_ptr += src_next_row_stride;
- output_ptr += intermediate_next_stride;
- }
-
- // Vertical pass (transposed intermediate -> dst).
- src_ptr = intermediate_buffer;
- const int dst_next_row_stride = dst_stride - output_width;
- for (i = 0; i < output_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- // Apply filter...
- const int temp = (src_ptr[0] * VFilter[0]) + (src_ptr[1] * VFilter[1]) +
- (src_ptr[2] * VFilter[2]) + (src_ptr[3] * VFilter[3]) +
- (src_ptr[4] * VFilter[4]) + (src_ptr[5] * VFilter[5]) +
- (src_ptr[6] * VFilter[6]) + (src_ptr[7] * VFilter[7]) +
- (AV1_FILTER_WEIGHT >> 1); // Rounding
-
- // Normalize back to 0-255...
- *dst_ptr++ = clip_pixel(temp >> AV1_FILTER_SHIFT);
- src_ptr += intermediate_height;
- }
- src_ptr += intermediate_next_stride;
- dst_ptr += dst_next_row_stride;
- }
-}
-
-void block2d_average_c(uint8_t *src, unsigned int src_stride,
- uint8_t *output_ptr, unsigned int output_stride,
- unsigned int output_width, unsigned int output_height) {
- unsigned int i, j;
- for (i = 0; i < output_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- output_ptr[j] = (output_ptr[j] + src[i * src_stride + j] + 1) >> 1;
- }
- output_ptr += output_stride;
- }
-}
-
-void filter_average_block2d_8_c(const uint8_t *src_ptr,
- const unsigned int src_stride,
- const int16_t *HFilter, const int16_t *VFilter,
- uint8_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width,
- unsigned int output_height) {
- uint8_t tmp[kMaxDimension * kMaxDimension];
-
- assert(output_width <= kMaxDimension);
- assert(output_height <= kMaxDimension);
- filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, tmp, kMaxDimension,
- output_width, output_height);
- block2d_average_c(tmp, kMaxDimension, dst_ptr, dst_stride, output_width,
- output_height);
-}
-
-void highbd_filter_block2d_8_c(const uint16_t *src_ptr,
- const unsigned int src_stride,
- const int16_t *HFilter, const int16_t *VFilter,
- uint16_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width,
- unsigned int output_height, int bd) {
- // Between passes, we use an intermediate buffer whose height is extended to
- // have enough horizontally filtered values as input for the vertical pass.
- // This buffer is allocated to be big enough for the largest block type we
- // support.
- const int kInterp_Extend = 4;
- const unsigned int intermediate_height =
- (kInterp_Extend - 1) + output_height + kInterp_Extend;
-
- /* Size of intermediate_buffer is max_intermediate_height * filter_max_width,
- * where max_intermediate_height = (kInterp_Extend - 1) + filter_max_height
- * + kInterp_Extend
- * = 3 + 16 + 4
- * = 23
- * and filter_max_width = 16
- */
- uint16_t intermediate_buffer[(kMaxDimension + 8) * kMaxDimension] = { 0 };
- const int intermediate_next_stride =
- 1 - static_cast<int>(intermediate_height * output_width);
-
- // Horizontal pass (src -> transposed intermediate).
- {
- uint16_t *output_ptr = intermediate_buffer;
- const int src_next_row_stride = src_stride - output_width;
- unsigned int i, j;
- src_ptr -= (kInterp_Extend - 1) * src_stride + (kInterp_Extend - 1);
- for (i = 0; i < intermediate_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- // Apply filter...
- const int temp = (src_ptr[0] * HFilter[0]) + (src_ptr[1] * HFilter[1]) +
- (src_ptr[2] * HFilter[2]) + (src_ptr[3] * HFilter[3]) +
- (src_ptr[4] * HFilter[4]) + (src_ptr[5] * HFilter[5]) +
- (src_ptr[6] * HFilter[6]) + (src_ptr[7] * HFilter[7]) +
- (AV1_FILTER_WEIGHT >> 1); // Rounding
-
- // Normalize back to 0-255...
- *output_ptr = clip_pixel_highbd(temp >> AV1_FILTER_SHIFT, bd);
- ++src_ptr;
- output_ptr += intermediate_height;
- }
- src_ptr += src_next_row_stride;
- output_ptr += intermediate_next_stride;
- }
- }
-
- // Vertical pass (transposed intermediate -> dst).
- {
- const uint16_t *interm_ptr = intermediate_buffer;
- const int dst_next_row_stride = dst_stride - output_width;
- unsigned int i, j;
- for (i = 0; i < output_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- // Apply filter...
- const int temp =
- (interm_ptr[0] * VFilter[0]) + (interm_ptr[1] * VFilter[1]) +
- (interm_ptr[2] * VFilter[2]) + (interm_ptr[3] * VFilter[3]) +
- (interm_ptr[4] * VFilter[4]) + (interm_ptr[5] * VFilter[5]) +
- (interm_ptr[6] * VFilter[6]) + (interm_ptr[7] * VFilter[7]) +
- (AV1_FILTER_WEIGHT >> 1); // Rounding
-
- // Normalize back to 0-255...
- *dst_ptr++ = clip_pixel_highbd(temp >> AV1_FILTER_SHIFT, bd);
- interm_ptr += intermediate_height;
- }
- interm_ptr += intermediate_next_stride;
- dst_ptr += dst_next_row_stride;
- }
- }
-}
-
-void highbd_block2d_average_c(uint16_t *src, unsigned int src_stride,
- uint16_t *output_ptr, unsigned int output_stride,
- unsigned int output_width,
- unsigned int output_height) {
- unsigned int i, j;
- for (i = 0; i < output_height; ++i) {
- for (j = 0; j < output_width; ++j) {
- output_ptr[j] = (output_ptr[j] + src[i * src_stride + j] + 1) >> 1;
- }
- output_ptr += output_stride;
- }
-}
-
-void highbd_filter_average_block2d_8_c(
- const uint16_t *src_ptr, unsigned int src_stride, const int16_t *HFilter,
- const int16_t *VFilter, uint16_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width, unsigned int output_height, int bd) {
- uint16_t tmp[kMaxDimension * kMaxDimension];
-
- assert(output_width <= kMaxDimension);
- assert(output_height <= kMaxDimension);
- highbd_filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, tmp,
- kMaxDimension, output_width, output_height, bd);
- highbd_block2d_average_c(tmp, kMaxDimension, dst_ptr, dst_stride,
- output_width, output_height);
-}
-
-class ConvolveTest : public ::testing::TestWithParam<ConvolveParam> {
- public:
- static void SetUpTestCase() {
- // Force input_ to be unaligned, output to be 16 byte aligned.
- input_ = reinterpret_cast<uint8_t *>(
- aom_memalign(kDataAlignment, kInputBufferSize + 1)) +
- 1;
- output_ = reinterpret_cast<uint8_t *>(
- aom_memalign(kDataAlignment, kOutputBufferSize));
- output_ref_ = reinterpret_cast<uint8_t *>(
- aom_memalign(kDataAlignment, kOutputBufferSize));
- input16_ = reinterpret_cast<uint16_t *>(aom_memalign(
- kDataAlignment, (kInputBufferSize + 1) * sizeof(uint16_t))) +
- 1;
- output16_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, (kOutputBufferSize) * sizeof(uint16_t)));
- output16_ref_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, (kOutputBufferSize) * sizeof(uint16_t)));
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- static void TearDownTestCase() {
- aom_free(input_ - 1);
- input_ = NULL;
- aom_free(output_);
- output_ = NULL;
- aom_free(output_ref_);
- output_ref_ = NULL;
- aom_free(input16_ - 1);
- input16_ = NULL;
- aom_free(output16_);
- output16_ = NULL;
- aom_free(output16_ref_);
- output16_ref_ = NULL;
- }
-
- protected:
- static const int kDataAlignment = 16;
- static const int kOuterBlockSize = 4 * kMaxDimension;
- static const int kInputStride = kOuterBlockSize;
- static const int kOutputStride = kOuterBlockSize;
- static const int kInputBufferSize = kOuterBlockSize * kOuterBlockSize;
- static const int kOutputBufferSize = kOuterBlockSize * kOuterBlockSize;
-
- int Width() const { return GET_PARAM(0); }
- int Height() const { return GET_PARAM(1); }
- int BorderLeft() const {
- const int center = (kOuterBlockSize - Width()) / 2;
- return (center + (kDataAlignment - 1)) & ~(kDataAlignment - 1);
- }
- int BorderTop() const { return (kOuterBlockSize - Height()) / 2; }
-
- bool IsIndexInBorder(int i) {
- return (i < BorderTop() * kOuterBlockSize ||
- i >= (BorderTop() + Height()) * kOuterBlockSize ||
- i % kOuterBlockSize < BorderLeft() ||
- i % kOuterBlockSize >= (BorderLeft() + Width()));
- }
-
- virtual void SetUp() {
- UUT_ = GET_PARAM(2);
- if (UUT_->use_highbd_ != 0)
- mask_ = (1 << UUT_->use_highbd_) - 1;
- else
- mask_ = 255;
- /* Set up guard blocks for an inner block centered in the outer block */
- for (int i = 0; i < kOutputBufferSize; ++i) {
- if (IsIndexInBorder(i)) {
- output_[i] = 255;
- output16_[i] = mask_;
- } else {
- output_[i] = 0;
- output16_[i] = 0;
- }
- }
-
- ::libaom_test::ACMRandom prng;
- for (int i = 0; i < kInputBufferSize; ++i) {
- if (i & 1) {
- input_[i] = 255;
- input16_[i] = mask_;
- } else {
- input_[i] = prng.Rand8Extremes();
- input16_[i] = prng.Rand16() & mask_;
- }
- }
- }
-
- void SetConstantInput(int value) {
- memset(input_, value, kInputBufferSize);
- aom_memset16(input16_, value, kInputBufferSize);
- }
-
- void CopyOutputToRef() {
- memcpy(output_ref_, output_, kOutputBufferSize);
- // Copy 16-bit pixels values. The effective number of bytes is double.
- memcpy(output16_ref_, output16_, sizeof(output16_[0]) * kOutputBufferSize);
- }
-
- void CheckGuardBlocks() {
- for (int i = 0; i < kOutputBufferSize; ++i) {
- if (IsIndexInBorder(i)) {
- EXPECT_EQ(255, output_[i]);
- }
- }
- }
-
- uint8_t *input() const {
- const int offset = BorderTop() * kOuterBlockSize + BorderLeft();
- if (UUT_->use_highbd_ == 0) {
- return input_ + offset;
- } else {
- return CONVERT_TO_BYTEPTR(input16_) + offset;
- }
- }
-
- uint8_t *output() const {
- const int offset = BorderTop() * kOuterBlockSize + BorderLeft();
- if (UUT_->use_highbd_ == 0) {
- return output_ + offset;
- } else {
- return CONVERT_TO_BYTEPTR(output16_) + offset;
- }
- }
-
- uint8_t *output_ref() const {
- const int offset = BorderTop() * kOuterBlockSize + BorderLeft();
- if (UUT_->use_highbd_ == 0) {
- return output_ref_ + offset;
- } else {
- return CONVERT_TO_BYTEPTR(output16_ref_) + offset;
- }
- }
-
- uint16_t lookup(uint8_t *list, int index) const {
- if (UUT_->use_highbd_ == 0) {
- return list[index];
- } else {
- return CONVERT_TO_SHORTPTR(list)[index];
- }
- }
-
- void assign_val(uint8_t *list, int index, uint16_t val) const {
- if (UUT_->use_highbd_ == 0) {
- list[index] = (uint8_t)val;
- } else {
- CONVERT_TO_SHORTPTR(list)[index] = val;
- }
- }
-
- void wrapper_filter_average_block2d_8_c(
- const uint8_t *src_ptr, unsigned int src_stride, const int16_t *HFilter,
- const int16_t *VFilter, uint8_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width, unsigned int output_height) {
- if (UUT_->use_highbd_ == 0) {
- filter_average_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, dst_ptr,
- dst_stride, output_width, output_height);
- } else {
- highbd_filter_average_block2d_8_c(
- CONVERT_TO_SHORTPTR(src_ptr), src_stride, HFilter, VFilter,
- CONVERT_TO_SHORTPTR(dst_ptr), dst_stride, output_width, output_height,
- UUT_->use_highbd_);
- }
- }
-
- void wrapper_filter_block2d_8_c(
- const uint8_t *src_ptr, unsigned int src_stride, const int16_t *HFilter,
- const int16_t *VFilter, uint8_t *dst_ptr, unsigned int dst_stride,
- unsigned int output_width, unsigned int output_height) {
- if (UUT_->use_highbd_ == 0) {
- filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, dst_ptr,
- dst_stride, output_width, output_height);
- } else {
- highbd_filter_block2d_8_c(CONVERT_TO_SHORTPTR(src_ptr), src_stride,
- HFilter, VFilter, CONVERT_TO_SHORTPTR(dst_ptr),
- dst_stride, output_width, output_height,
- UUT_->use_highbd_);
- }
- }
-
- const ConvolveFunctions *UUT_;
- static uint8_t *input_;
- static uint8_t *output_;
- static uint8_t *output_ref_;
- static uint16_t *input16_;
- static uint16_t *output16_;
- static uint16_t *output16_ref_;
- int mask_;
-};
-
-uint8_t *ConvolveTest::input_ = NULL;
-uint8_t *ConvolveTest::output_ = NULL;
-uint8_t *ConvolveTest::output_ref_ = NULL;
-uint16_t *ConvolveTest::input16_ = NULL;
-uint16_t *ConvolveTest::output16_ = NULL;
-uint16_t *ConvolveTest::output16_ref_ = NULL;
-
-TEST_P(ConvolveTest, GuardBlocks) { CheckGuardBlocks(); }
-
-TEST_P(ConvolveTest, Copy) {
- uint8_t *const in = input();
- uint8_t *const out = output();
-
- ASM_REGISTER_STATE_CHECK(UUT_->copy_(in, kInputStride, out, kOutputStride,
- NULL, 0, NULL, 0, Width(), Height()));
-
- CheckGuardBlocks();
-
- for (int y = 0; y < Height(); ++y)
- for (int x = 0; x < Width(); ++x)
- ASSERT_EQ(lookup(out, y * kOutputStride + x),
- lookup(in, y * kInputStride + x))
- << "(" << x << "," << y << ")";
-}
-
-const int kNumFilterBanks = SWITCHABLE_FILTERS;
-const int kNumFilters = 16;
-
-TEST(ConvolveTest, FiltersWontSaturateWhenAddedPairwise) {
- for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
- const InterpFilter filter = (InterpFilter)filter_bank;
- const InterpKernel *filters =
- (const InterpKernel *)av1_get_interp_filter_kernel(filter);
- const InterpFilterParams *filter_params =
- av1_get_interp_filter_params_with_block_size(filter, 8);
- if (filter_params->taps != SUBPEL_TAPS) continue;
- for (int i = 0; i < kNumFilters; i++) {
- const int p0 = filters[i][0] + filters[i][1];
- const int p1 = filters[i][2] + filters[i][3];
- const int p2 = filters[i][4] + filters[i][5];
- const int p3 = filters[i][6] + filters[i][7];
- EXPECT_LE(p0, 128);
- EXPECT_LE(p1, 128);
- EXPECT_LE(p2, 128);
- EXPECT_LE(p3, 128);
- EXPECT_LE(p0 + p3, 128);
- EXPECT_LE(p0 + p3 + p1, 128);
- EXPECT_LE(p0 + p3 + p1 + p2, 128);
- EXPECT_EQ(p0 + p1 + p2 + p3, 128);
- }
- }
-}
-
-const int16_t kInvalidFilter[8] = { 0 };
-
-TEST_P(ConvolveTest, MatchesReferenceSubpixelFilter) {
- uint8_t *const in = input();
- uint8_t *const out = output();
- uint8_t ref8[kOutputStride * kMaxDimension];
- uint16_t ref16[kOutputStride * kMaxDimension];
- uint8_t *ref;
- if (UUT_->use_highbd_ == 0) {
- ref = ref8;
- } else {
- ref = CONVERT_TO_BYTEPTR(ref16);
- }
-
- for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
- const InterpFilter filter = (InterpFilter)filter_bank;
- const InterpKernel *filters =
- (const InterpKernel *)av1_get_interp_filter_kernel(filter);
- const InterpFilterParams *filter_params =
- av1_get_interp_filter_params_with_block_size(filter, 8);
- if (filter_params->taps != SUBPEL_TAPS) continue;
-
- for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
- for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
- wrapper_filter_block2d_8_c(in, kInputStride, filters[filter_x],
- filters[filter_y], ref, kOutputStride,
- Width(), Height());
-
- if (filter_x && filter_y)
- continue;
- else if (filter_y)
- ASM_REGISTER_STATE_CHECK(
- UUT_->v8_(in, kInputStride, out, kOutputStride, kInvalidFilter,
- 16, filters[filter_y], 16, Width(), Height()));
- else if (filter_x)
- ASM_REGISTER_STATE_CHECK(
- UUT_->h8_(in, kInputStride, out, kOutputStride, filters[filter_x],
- 16, kInvalidFilter, 16, Width(), Height()));
- else
- ASM_REGISTER_STATE_CHECK(
- UUT_->copy_(in, kInputStride, out, kOutputStride, kInvalidFilter,
- 0, kInvalidFilter, 0, Width(), Height()));
-
- CheckGuardBlocks();
-
- for (int y = 0; y < Height(); ++y)
- for (int x = 0; x < Width(); ++x)
- ASSERT_EQ(lookup(ref, y * kOutputStride + x),
- lookup(out, y * kOutputStride + x))
- << "mismatch at (" << x << "," << y << "), "
- << "filters (" << filter_bank << "," << filter_x << ","
- << filter_y << ")";
- }
- }
- }
-}
-
-TEST_P(ConvolveTest, FilterExtremes) {
- uint8_t *const in = input();
- uint8_t *const out = output();
- uint8_t ref8[kOutputStride * kMaxDimension];
- uint16_t ref16[kOutputStride * kMaxDimension];
- uint8_t *ref;
- if (UUT_->use_highbd_ == 0) {
- ref = ref8;
- } else {
- ref = CONVERT_TO_BYTEPTR(ref16);
- }
-
- // Populate ref and out with some random data
- ::libaom_test::ACMRandom prng;
- for (int y = 0; y < Height(); ++y) {
- for (int x = 0; x < Width(); ++x) {
- uint16_t r;
- if (UUT_->use_highbd_ == 0 || UUT_->use_highbd_ == 8) {
- r = prng.Rand8Extremes();
- } else {
- r = prng.Rand16() & mask_;
- }
- assign_val(out, y * kOutputStride + x, r);
- assign_val(ref, y * kOutputStride + x, r);
- }
- }
-
- for (int axis = 0; axis < 2; axis++) {
- int seed_val = 0;
- while (seed_val < 256) {
- for (int y = 0; y < 8; ++y) {
- for (int x = 0; x < 8; ++x) {
- assign_val(in, y * kOutputStride + x - SUBPEL_TAPS / 2 + 1,
- ((seed_val >> (axis ? y : x)) & 1) * mask_);
- if (axis) seed_val++;
- }
- if (axis)
- seed_val -= 8;
- else
- seed_val++;
- }
- if (axis) seed_val += 8;
-
- for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
- const InterpFilter filter = (InterpFilter)filter_bank;
- const InterpKernel *filters =
- (const InterpKernel *)av1_get_interp_filter_kernel(filter);
- const InterpFilterParams *filter_params =
- av1_get_interp_filter_params_with_block_size(filter, 8);
- if (filter_params->taps != SUBPEL_TAPS) continue;
- for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
- for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
- wrapper_filter_block2d_8_c(in, kInputStride, filters[filter_x],
- filters[filter_y], ref, kOutputStride,
- Width(), Height());
- if (filter_x && filter_y)
- continue;
- else if (filter_y)
- ASM_REGISTER_STATE_CHECK(UUT_->v8_(
- in, kInputStride, out, kOutputStride, kInvalidFilter, 16,
- filters[filter_y], 16, Width(), Height()));
- else if (filter_x)
- ASM_REGISTER_STATE_CHECK(UUT_->h8_(
- in, kInputStride, out, kOutputStride, filters[filter_x], 16,
- kInvalidFilter, 16, Width(), Height()));
- else
- ASM_REGISTER_STATE_CHECK(UUT_->copy_(
- in, kInputStride, out, kOutputStride, kInvalidFilter, 0,
- kInvalidFilter, 0, Width(), Height()));
-
- for (int y = 0; y < Height(); ++y)
- for (int x = 0; x < Width(); ++x)
- ASSERT_EQ(lookup(ref, y * kOutputStride + x),
- lookup(out, y * kOutputStride + x))
- << "mismatch at (" << x << "," << y << "), "
- << "filters (" << filter_bank << "," << filter_x << ","
- << filter_y << ")";
- }
- }
- }
- }
- }
-}
-
-TEST_P(ConvolveTest, DISABLED_Copy_Speed) {
- const uint8_t *const in = input();
- uint8_t *const out = output();
- const int kNumTests = 5000000;
- const int width = Width();
- const int height = Height();
- aom_usec_timer timer;
-
- aom_usec_timer_start(&timer);
- for (int n = 0; n < kNumTests; ++n) {
- UUT_->copy_(in, kInputStride, out, kOutputStride, NULL, 0, NULL, 0, width,
- height);
- }
- aom_usec_timer_mark(&timer);
-
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("convolve_copy_%dx%d_%d: %d us\n", width, height,
- UUT_->use_highbd_ ? UUT_->use_highbd_ : 8, elapsed_time);
-}
-
-TEST_P(ConvolveTest, DISABLED_Speed) {
- uint8_t *const in = input();
- uint8_t *const out = output();
- uint8_t ref8[kOutputStride * kMaxDimension];
- uint16_t ref16[kOutputStride * kMaxDimension];
- uint8_t *ref;
- if (UUT_->use_highbd_ == 0) {
- ref = ref8;
- } else {
- ref = CONVERT_TO_BYTEPTR(ref16);
- }
-
- // Populate ref and out with some random data
- ::libaom_test::ACMRandom prng;
- for (int y = 0; y < Height(); ++y) {
- for (int x = 0; x < Width(); ++x) {
- uint16_t r;
- if (UUT_->use_highbd_ == 0 || UUT_->use_highbd_ == 8) {
- r = prng.Rand8Extremes();
- } else {
- r = prng.Rand16() & mask_;
- }
- assign_val(out, y * kOutputStride + x, r);
- assign_val(ref, y * kOutputStride + x, r);
- }
- }
-
- const InterpFilter filter = (InterpFilter)1;
- const InterpKernel *filters =
- (const InterpKernel *)av1_get_interp_filter_kernel(filter);
- wrapper_filter_average_block2d_8_c(in, kInputStride, filters[1], filters[1],
- out, kOutputStride, Width(), Height());
-
- aom_usec_timer timer;
- int tests_num = 1000;
-
- aom_usec_timer_start(&timer);
- while (tests_num > 0) {
- for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
- const InterpFilter filter = (InterpFilter)filter_bank;
- const InterpKernel *filters =
- (const InterpKernel *)av1_get_interp_filter_kernel(filter);
- const InterpFilterParams *filter_params =
- av1_get_interp_filter_params_with_block_size(filter, 8);
- if (filter_params->taps != SUBPEL_TAPS) continue;
-
- for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
- for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
- if (filter_x && filter_y) continue;
- if (filter_y)
- ASM_REGISTER_STATE_CHECK(
- UUT_->v8_(in, kInputStride, out, kOutputStride, kInvalidFilter,
- 16, filters[filter_y], 16, Width(), Height()));
- else if (filter_x)
- ASM_REGISTER_STATE_CHECK(UUT_->h8_(
- in, kInputStride, out, kOutputStride, filters[filter_x], 16,
- kInvalidFilter, 16, Width(), Height()));
- }
- }
- }
- tests_num--;
- }
- aom_usec_timer_mark(&timer);
-
- const int elapsed_time =
- static_cast<int>(aom_usec_timer_elapsed(&timer) / 1000);
- printf("%dx%d (bitdepth %d) time: %5d ms\n", Width(), Height(),
- UUT_->use_highbd_, elapsed_time);
-}
-
-using ::testing::make_tuple;
-
-#define WRAP(func, bd) \
- static void wrap_##func##_##bd( \
- const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, \
- ptrdiff_t dst_stride, const int16_t *filter_x, int filter_x_stride, \
- const int16_t *filter_y, int filter_y_stride, int w, int h) { \
- aom_highbd_##func(src, src_stride, dst, dst_stride, filter_x, \
- filter_x_stride, filter_y, filter_y_stride, w, h, bd); \
- }
-#if HAVE_SSE2 && ARCH_X86_64
-WRAP(convolve_copy_sse2, 8)
-WRAP(convolve_copy_sse2, 10)
-WRAP(convolve_copy_sse2, 12)
-WRAP(convolve8_horiz_sse2, 8)
-WRAP(convolve8_vert_sse2, 8)
-WRAP(convolve8_horiz_sse2, 10)
-WRAP(convolve8_vert_sse2, 10)
-WRAP(convolve8_horiz_sse2, 12)
-WRAP(convolve8_vert_sse2, 12)
-#endif // HAVE_SSE2 && ARCH_X86_64
-
-WRAP(convolve_copy_c, 8)
-WRAP(convolve8_horiz_c, 8)
-WRAP(convolve8_vert_c, 8)
-WRAP(convolve_copy_c, 10)
-WRAP(convolve8_horiz_c, 10)
-WRAP(convolve8_vert_c, 10)
-WRAP(convolve_copy_c, 12)
-WRAP(convolve8_horiz_c, 12)
-WRAP(convolve8_vert_c, 12)
-
-#if HAVE_AVX2
-WRAP(convolve_copy_avx2, 8)
-WRAP(convolve8_horiz_avx2, 8)
-WRAP(convolve8_vert_avx2, 8)
-
-WRAP(convolve_copy_avx2, 10)
-WRAP(convolve8_horiz_avx2, 10)
-WRAP(convolve8_vert_avx2, 10)
-
-WRAP(convolve_copy_avx2, 12)
-WRAP(convolve8_horiz_avx2, 12)
-WRAP(convolve8_vert_avx2, 12)
-#endif // HAVE_AVX2
-
-#undef WRAP
-
-const ConvolveFunctions convolve8_c(wrap_convolve_copy_c_8,
- wrap_convolve8_horiz_c_8,
- wrap_convolve8_vert_c_8, 8);
-const ConvolveFunctions convolve10_c(wrap_convolve_copy_c_10,
- wrap_convolve8_horiz_c_10,
- wrap_convolve8_vert_c_10, 10);
-const ConvolveFunctions convolve12_c(wrap_convolve_copy_c_12,
- wrap_convolve8_horiz_c_12,
- wrap_convolve8_vert_c_12, 12);
-const ConvolveParam kArrayConvolve_c[] = {
- ALL_SIZES(convolve8_c), ALL_SIZES(convolve10_c), ALL_SIZES(convolve12_c)
-};
-
-INSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::ValuesIn(kArrayConvolve_c));
-
-#if HAVE_SSE2 && ARCH_X86_64
-const ConvolveFunctions convolve8_sse2(wrap_convolve_copy_sse2_8,
- wrap_convolve8_horiz_sse2_8,
- wrap_convolve8_vert_sse2_8, 8);
-const ConvolveFunctions convolve10_sse2(wrap_convolve_copy_sse2_10,
- wrap_convolve8_horiz_sse2_10,
- wrap_convolve8_vert_sse2_10, 10);
-const ConvolveFunctions convolve12_sse2(wrap_convolve_copy_sse2_12,
- wrap_convolve8_horiz_sse2_12,
- wrap_convolve8_vert_sse2_12, 12);
-const ConvolveParam kArrayConvolve_sse2[] = { ALL_SIZES(convolve8_sse2),
- ALL_SIZES(convolve10_sse2),
- ALL_SIZES(convolve12_sse2) };
-INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest,
- ::testing::ValuesIn(kArrayConvolve_sse2));
-#endif
-
-#if HAVE_SSSE3
-const ConvolveFunctions convolve8_ssse3(aom_convolve_copy_c,
- aom_convolve8_horiz_ssse3,
- aom_convolve8_vert_ssse3, 0);
-
-const ConvolveParam kArrayConvolve8_ssse3[] = { ALL_SIZES(convolve8_ssse3) };
-INSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest,
- ::testing::ValuesIn(kArrayConvolve8_ssse3));
-#endif
-
-#if HAVE_AVX2
-const ConvolveFunctions convolve8_avx2(aom_convolve_copy_c,
- aom_convolve8_horiz_avx2,
- aom_convolve8_vert_avx2, 0);
-
-const ConvolveFunctions wrap_convolve8_avx2(wrap_convolve_copy_avx2_8,
- wrap_convolve8_horiz_avx2_8,
- wrap_convolve8_vert_avx2_8, 8);
-const ConvolveFunctions wrap_convolve10_avx2(wrap_convolve_copy_avx2_10,
- wrap_convolve8_horiz_avx2_10,
- wrap_convolve8_vert_avx2_10, 10);
-const ConvolveFunctions wrap_convolve12_avx2(wrap_convolve_copy_avx2_12,
- wrap_convolve8_horiz_avx2_12,
- wrap_convolve8_vert_avx2_12, 12);
-const ConvolveParam kArray_Convolve8_avx2[] = {
- ALL_SIZES_64(wrap_convolve8_avx2), ALL_SIZES_64(wrap_convolve10_avx2),
- ALL_SIZES_64(wrap_convolve12_avx2), ALL_SIZES(convolve8_avx2)
-};
-INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest,
- ::testing::ValuesIn(kArray_Convolve8_avx2));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/corner_match_test.cc b/third_party/aom/test/corner_match_test.cc
deleted file mode 100644
index 58e3139c5..000000000
--- a/third_party/aom/test/corner_match_test.cc
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include "config/av1_rtcd.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-
-#include "av1/encoder/corner_match.h"
-
-namespace test_libaom {
-
-namespace AV1CornerMatch {
-
-using libaom_test::ACMRandom;
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-typedef tuple<int> CornerMatchParam;
-
-class AV1CornerMatchTest : public ::testing::TestWithParam<CornerMatchParam> {
- public:
- virtual ~AV1CornerMatchTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput();
-
- libaom_test::ACMRandom rnd_;
-};
-
-AV1CornerMatchTest::~AV1CornerMatchTest() {}
-void AV1CornerMatchTest::SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
-void AV1CornerMatchTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1CornerMatchTest::RunCheckOutput() {
- const int w = 128, h = 128;
- const int num_iters = 10000;
- int i, j;
-
- uint8_t *input1 = new uint8_t[w * h];
- uint8_t *input2 = new uint8_t[w * h];
-
- // Test the two extreme cases:
- // i) Random data, should have correlation close to 0
- // ii) Linearly related data + noise, should have correlation close to 1
- int mode = GET_PARAM(0);
- if (mode == 0) {
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) {
- input1[i * w + j] = rnd_.Rand8();
- input2[i * w + j] = rnd_.Rand8();
- }
- } else if (mode == 1) {
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) {
- int v = rnd_.Rand8();
- input1[i * w + j] = v;
- input2[i * w + j] = (v / 2) + (rnd_.Rand8() & 15);
- }
- }
-
- for (i = 0; i < num_iters; ++i) {
- int x1 = MATCH_SZ_BY2 + rnd_.PseudoUniform(w - 2 * MATCH_SZ_BY2);
- int y1 = MATCH_SZ_BY2 + rnd_.PseudoUniform(h - 2 * MATCH_SZ_BY2);
- int x2 = MATCH_SZ_BY2 + rnd_.PseudoUniform(w - 2 * MATCH_SZ_BY2);
- int y2 = MATCH_SZ_BY2 + rnd_.PseudoUniform(h - 2 * MATCH_SZ_BY2);
-
- double res_c =
- compute_cross_correlation_c(input1, w, x1, y1, input2, w, x2, y2);
- double res_sse4 =
- compute_cross_correlation_sse4_1(input1, w, x1, y1, input2, w, x2, y2);
-
- ASSERT_EQ(res_sse4, res_c);
- }
-
- delete[] input1;
- delete[] input2;
-}
-
-TEST_P(AV1CornerMatchTest, CheckOutput) { RunCheckOutput(); }
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1CornerMatchTest,
- ::testing::Values(make_tuple(0), make_tuple(1)));
-
-} // namespace AV1CornerMatch
-
-} // namespace test_libaom
diff --git a/third_party/aom/test/cpu_speed_test.cc b/third_party/aom/test/cpu_speed_test.cc
deleted file mode 100644
index 8ea3e6965..000000000
--- a/third_party/aom/test/cpu_speed_test.cc
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-
-namespace {
-
-const int kMaxPSNR = 100;
-
-class CpuSpeedTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- CpuSpeedTest()
- : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
- set_cpu_used_(GET_PARAM(2)), min_psnr_(kMaxPSNR),
- tune_content_(AOM_CONTENT_DEFAULT) {}
- virtual ~CpuSpeedTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_end_usage = AOM_VBR;
- } else {
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_CBR;
- }
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) { min_psnr_ = kMaxPSNR; }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- encoder->Control(AV1E_SET_TUNE_CONTENT, tune_content_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (pkt->data.psnr.psnr[0] < min_psnr_) min_psnr_ = pkt->data.psnr.psnr[0];
- }
-
- void TestQ0();
- void TestScreencastQ0();
- void TestTuneScreen();
- void TestEncodeHighBitrate();
- void TestLowBitrate();
-
- ::libaom_test::TestMode encoding_mode_;
- int set_cpu_used_;
- double min_psnr_;
- int tune_content_;
-};
-
-void CpuSpeedTest::TestQ0() {
- // Validate that this non multiple of 64 wide clip encodes and decodes
- // without a mismatch when passing in a very low max q. This pushes
- // the encoder to producing lots of big partitions which will likely
- // extend into the border and test the border condition.
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 400;
- cfg_.rc_max_quantizer = 0;
- cfg_.rc_min_quantizer = 0;
-
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
- 10);
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- EXPECT_GE(min_psnr_, kMaxPSNR);
-}
-
-void CpuSpeedTest::TestScreencastQ0() {
- ::libaom_test::Y4mVideoSource video("screendata.y4m", 0, 3);
- cfg_.g_timebase = video.timebase();
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 400;
- cfg_.rc_max_quantizer = 0;
- cfg_.rc_min_quantizer = 0;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- EXPECT_GE(min_psnr_, kMaxPSNR);
-}
-
-void CpuSpeedTest::TestTuneScreen() {
- ::libaom_test::Y4mVideoSource video("screendata.y4m", 0, 3);
- cfg_.g_timebase = video.timebase();
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_minsection_pct = 2000;
- cfg_.rc_target_bitrate = 2000;
- cfg_.rc_max_quantizer = 63;
- cfg_.rc_min_quantizer = 0;
- tune_content_ = AOM_CONTENT_SCREEN;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-void CpuSpeedTest::TestEncodeHighBitrate() {
- // Validate that this non multiple of 64 wide clip encodes and decodes
- // without a mismatch when passing in a very low max q. This pushes
- // the encoder to producing lots of big partitions which will likely
- // extend into the border and test the border condition.
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 12000;
- cfg_.rc_max_quantizer = 10;
- cfg_.rc_min_quantizer = 0;
-
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
- 10);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-void CpuSpeedTest::TestLowBitrate() {
- // Validate that this clip encodes and decodes without a mismatch
- // when passing in a very high min q. This pushes the encoder to producing
- // lots of small partitions which might will test the other condition.
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- cfg_.rc_target_bitrate = 200;
- cfg_.rc_min_quantizer = 40;
-
- ::libaom_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
- 10);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-TEST_P(CpuSpeedTest, TestQ0) { TestQ0(); }
-TEST_P(CpuSpeedTest, TestScreencastQ0) { TestScreencastQ0(); }
-TEST_P(CpuSpeedTest, TestTuneScreen) { TestTuneScreen(); }
-TEST_P(CpuSpeedTest, TestEncodeHighBitrate) { TestEncodeHighBitrate(); }
-TEST_P(CpuSpeedTest, TestLowBitrate) { TestLowBitrate(); }
-
-class CpuSpeedTestLarge : public CpuSpeedTest {};
-
-TEST_P(CpuSpeedTestLarge, TestQ0) { TestQ0(); }
-TEST_P(CpuSpeedTestLarge, TestScreencastQ0) { TestScreencastQ0(); }
-TEST_P(CpuSpeedTestLarge, TestTuneScreen) { TestTuneScreen(); }
-TEST_P(CpuSpeedTestLarge, TestEncodeHighBitrate) { TestEncodeHighBitrate(); }
-TEST_P(CpuSpeedTestLarge, TestLowBitrate) { TestLowBitrate(); }
-
-AV1_INSTANTIATE_TEST_CASE(CpuSpeedTest,
- ::testing::Values(::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood),
- ::testing::Range(1, 3));
-AV1_INSTANTIATE_TEST_CASE(CpuSpeedTestLarge,
- ::testing::Values(::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood),
- ::testing::Range(0, 1));
-} // namespace
diff --git a/third_party/aom/test/datarate_test.cc b/third_party/aom/test/datarate_test.cc
deleted file mode 100644
index 1588d3cc1..000000000
--- a/third_party/aom/test/datarate_test.cc
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "config/aom_config.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "aom/aom_codec.h"
-
-namespace {
-
-class DatarateTestLarge
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- public:
- DatarateTestLarge() : EncoderTest(GET_PARAM(0)) {}
-
- protected:
- virtual ~DatarateTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- set_cpu_used_ = GET_PARAM(2);
- ResetModel();
- }
-
- virtual void ResetModel() {
- last_pts_ = 0;
- bits_in_buffer_model_ = cfg_.rc_target_bitrate * cfg_.rc_buf_initial_sz;
- frame_number_ = 0;
- tot_frame_number_ = 0;
- first_drop_ = 0;
- num_drops_ = 0;
- // Denoiser is off by default.
- denoiser_on_ = 0;
- bits_total_ = 0;
- denoiser_offon_test_ = 0;
- denoiser_offon_period_ = -1;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
-
- if (denoiser_offon_test_) {
- ASSERT_GT(denoiser_offon_period_, 0)
- << "denoiser_offon_period_ is not positive.";
- if ((video->frame() + 1) % denoiser_offon_period_ == 0) {
- // Flip denoiser_on_ periodically
- denoiser_on_ ^= 1;
- }
- }
-
- encoder->Control(AV1E_SET_NOISE_SENSITIVITY, denoiser_on_);
-
- const aom_rational_t tb = video->timebase();
- timebase_ = static_cast<double>(tb.num) / tb.den;
- duration_ = 0;
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- // Time since last timestamp = duration.
- aom_codec_pts_t duration = pkt->data.frame.pts - last_pts_;
-
- if (duration > 1) {
- // If first drop not set and we have a drop set it to this time.
- if (!first_drop_) first_drop_ = last_pts_ + 1;
- // Update the number of frame drops.
- num_drops_ += static_cast<int>(duration - 1);
- // Update counter for total number of frames (#frames input to encoder).
- // Needed for setting the proper layer_id below.
- tot_frame_number_ += static_cast<int>(duration - 1);
- }
-
- // Add to the buffer the bits we'd expect from a constant bitrate server.
- bits_in_buffer_model_ += static_cast<int64_t>(
- duration * timebase_ * cfg_.rc_target_bitrate * 1000);
-
- // Buffer should not go negative.
- ASSERT_GE(bits_in_buffer_model_, 0)
- << "Buffer Underrun at frame " << pkt->data.frame.pts;
-
- const size_t frame_size_in_bits = pkt->data.frame.sz * 8;
-
- // Update the total encoded bits.
- bits_total_ += frame_size_in_bits;
-
- // Update the most recent pts.
- last_pts_ = pkt->data.frame.pts;
- ++frame_number_;
- ++tot_frame_number_;
- }
-
- virtual void EndPassHook(void) {
- duration_ = (last_pts_ + 1) * timebase_;
- // Effective file datarate:
- effective_datarate_ = (bits_total_ / 1000.0) / duration_;
- }
-
- aom_codec_pts_t last_pts_;
- double timebase_;
- int frame_number_; // Counter for number of non-dropped/encoded frames.
- int tot_frame_number_; // Counter for total number of input frames.
- int64_t bits_total_;
- double duration_;
- double effective_datarate_;
- int set_cpu_used_;
- int64_t bits_in_buffer_model_;
- aom_codec_pts_t first_drop_;
- int num_drops_;
- int denoiser_on_;
- int denoiser_offon_test_;
- int denoiser_offon_period_;
-};
-
-// Check basic rate targeting for VBR mode.
-TEST_P(DatarateTestLarge, BasicRateTargetingVBR) {
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 63;
- cfg_.g_error_resilient = 0;
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.g_lag_in_frames = 0;
-
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 140);
- for (int i = 400; i <= 800; i += 400) {
- cfg_.rc_target_bitrate = i;
- ResetModel();
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- ASSERT_GE(effective_datarate_, cfg_.rc_target_bitrate * 0.75)
- << " The datarate for the file is lower than target by too much!";
- ASSERT_LE(effective_datarate_, cfg_.rc_target_bitrate * 1.25)
- << " The datarate for the file is greater than target by too much!";
- }
-}
-
-// Check basic rate targeting for CBR,
-TEST_P(DatarateTestLarge, BasicRateTargeting) {
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 500;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_dropframe_thresh = 1;
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 63;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.g_lag_in_frames = 0;
-
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 140);
- for (int i = 150; i < 800; i += 400) {
- cfg_.rc_target_bitrate = i;
- ResetModel();
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- ASSERT_GE(effective_datarate_, cfg_.rc_target_bitrate * 0.85)
- << " The datarate for the file is lower than target by too much!";
- ASSERT_LE(effective_datarate_, cfg_.rc_target_bitrate * 1.15)
- << " The datarate for the file is greater than target by too much!";
- }
-}
-
-// Check basic rate targeting for CBR.
-TEST_P(DatarateTestLarge, BasicRateTargeting444) {
- ::libaom_test::Y4mVideoSource video("rush_hour_444.y4m", 0, 140);
-
- cfg_.g_profile = 1;
- cfg_.g_timebase = video.timebase();
-
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 500;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_dropframe_thresh = 1;
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 63;
- cfg_.rc_end_usage = AOM_CBR;
-
- for (int i = 250; i < 900; i += 400) {
- cfg_.rc_target_bitrate = i;
- ResetModel();
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- ASSERT_GE(static_cast<double>(cfg_.rc_target_bitrate),
- effective_datarate_ * 0.85)
- << " The datarate for the file exceeds the target by too much!";
- ASSERT_LE(static_cast<double>(cfg_.rc_target_bitrate),
- effective_datarate_ * 1.15)
- << " The datarate for the file missed the target!"
- << cfg_.rc_target_bitrate << " " << effective_datarate_;
- }
-}
-
-// Check that (1) the first dropped frame gets earlier and earlier
-// as the drop frame threshold is increased, and (2) that the total number of
-// frame drops does not decrease as we increase frame drop threshold.
-// Use a lower qp-max to force some frame drops.
-TEST_P(DatarateTestLarge, ChangingDropFrameThresh) {
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 500;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_undershoot_pct = 20;
- cfg_.rc_undershoot_pct = 20;
- cfg_.rc_dropframe_thresh = 10;
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 50;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.rc_target_bitrate = 200;
- cfg_.g_lag_in_frames = 0;
- cfg_.g_error_resilient = 1;
- // TODO(marpan): Investigate datarate target failures with a smaller keyframe
- // interval (128).
- cfg_.kf_max_dist = 9999;
-
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 100);
-
- const int kDropFrameThreshTestStep = 30;
- aom_codec_pts_t last_drop = 140;
- int last_num_drops = 0;
- for (int i = 40; i < 100; i += kDropFrameThreshTestStep) {
- cfg_.rc_dropframe_thresh = i;
- ResetModel();
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- ASSERT_GE(effective_datarate_, cfg_.rc_target_bitrate * 0.85)
- << " The datarate for the file is lower than target by too much!";
- ASSERT_LE(effective_datarate_, cfg_.rc_target_bitrate * 1.15)
- << " The datarate for the file is greater than target by too much!";
- ASSERT_LE(first_drop_, last_drop)
- << " The first dropped frame for drop_thresh " << i
- << " > first dropped frame for drop_thresh "
- << i - kDropFrameThreshTestStep;
- ASSERT_GE(num_drops_, last_num_drops * 0.85)
- << " The number of dropped frames for drop_thresh " << i
- << " < number of dropped frames for drop_thresh "
- << i - kDropFrameThreshTestStep;
- last_drop = first_drop_;
- last_num_drops = num_drops_;
- }
-}
-
-AV1_INSTANTIATE_TEST_CASE(DatarateTestLarge,
- ::testing::Values(::libaom_test::kOnePassGood,
- ::libaom_test::kRealTime),
- ::testing::Values(2, 5));
-} // namespace
diff --git a/third_party/aom/test/decode_api_test.cc b/third_party/aom/test/decode_api_test.cc
deleted file mode 100644
index c1beacee1..000000000
--- a/third_party/aom/test/decode_api_test.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "test/util.h"
-#include "aom/aomdx.h"
-#include "aom/aom_decoder.h"
-
-namespace {
-
-TEST(DecodeAPI, InvalidParams) {
- static const aom_codec_iface_t *kCodecs[] = {
-#if CONFIG_AV1_DECODER
- aom_codec_av1_dx(),
-#endif
- };
- uint8_t buf[1] = { 0 };
- aom_codec_ctx_t dec;
-
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_dec_init(NULL, NULL, NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_dec_init(&dec, NULL, NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_decode(NULL, NULL, 0, NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_decode(NULL, buf, 0, NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_decode(NULL, buf, NELEMENTS(buf), NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_decode(NULL, NULL, NELEMENTS(buf), NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_destroy(NULL));
- EXPECT_TRUE(aom_codec_error(NULL) != NULL);
-
- for (int i = 0; i < NELEMENTS(kCodecs); ++i) {
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_dec_init(NULL, kCodecs[i], NULL, 0));
-
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_dec_init(&dec, kCodecs[i], NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_decode(&dec, NULL, NELEMENTS(buf), NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_decode(&dec, buf, 0, NULL));
-
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&dec));
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/decode_multithreaded_test.cc b/third_party/aom/test/decode_multithreaded_test.cc
deleted file mode 100644
index cea1d144f..000000000
--- a/third_party/aom/test/decode_multithreaded_test.cc
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdio>
-#include <cstdlib>
-#include <string>
-
-#include "aom_mem/aom_mem.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/md5_helper.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-static const int kNumMultiThreadDecoders = 3;
-
-class AV1DecodeMultiThreadedTest
- : public ::libaom_test::CodecTestWith5Params<int, int, int, int, int>,
- public ::libaom_test::EncoderTest {
- protected:
- AV1DecodeMultiThreadedTest()
- : EncoderTest(GET_PARAM(0)), md5_single_thread_(), md5_multi_thread_(),
- n_tile_cols_(GET_PARAM(1)), n_tile_rows_(GET_PARAM(2)),
- n_tile_groups_(GET_PARAM(3)), set_cpu_used_(GET_PARAM(4)),
- row_mt_(GET_PARAM(5)) {
- init_flags_ = AOM_CODEC_USE_PSNR;
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.w = 704;
- cfg.h = 576;
- cfg.threads = 1;
- cfg.allow_lowbitdepth = 1;
- single_thread_dec_ = codec_->CreateDecoder(cfg, 0);
-
- // Test cfg.threads == powers of 2.
- for (int i = 0; i < kNumMultiThreadDecoders; ++i) {
- cfg.threads <<= 1;
- multi_thread_dec_[i] = codec_->CreateDecoder(cfg, 0);
- multi_thread_dec_[i]->Control(AV1D_SET_ROW_MT, row_mt_);
- }
-
- if (single_thread_dec_->IsAV1()) {
- single_thread_dec_->Control(AV1D_EXT_TILE_DEBUG, 1);
- single_thread_dec_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- single_thread_dec_->Control(AV1_SET_DECODE_TILE_COL, -1);
- }
- for (int i = 0; i < kNumMultiThreadDecoders; ++i) {
- if (multi_thread_dec_[i]->IsAV1()) {
- multi_thread_dec_[i]->Control(AV1D_EXT_TILE_DEBUG, 1);
- multi_thread_dec_[i]->Control(AV1_SET_DECODE_TILE_ROW, -1);
- multi_thread_dec_[i]->Control(AV1_SET_DECODE_TILE_COL, -1);
- }
- }
- }
-
- virtual ~AV1DecodeMultiThreadedTest() {
- delete single_thread_dec_;
- for (int i = 0; i < kNumMultiThreadDecoders; ++i)
- delete multi_thread_dec_[i];
- }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(libaom_test::kTwoPassGood);
- }
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_TILE_COLUMNS, n_tile_cols_);
- encoder->Control(AV1E_SET_TILE_ROWS, n_tile_rows_);
- encoder->Control(AV1E_SET_NUM_TG, n_tile_groups_);
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- }
- }
-
- void UpdateMD5(::libaom_test::Decoder *dec, const aom_codec_cx_pkt_t *pkt,
- ::libaom_test::MD5 *md5) {
- const aom_codec_err_t res = dec->DecodeFrame(
- reinterpret_cast<uint8_t *>(pkt->data.frame.buf), pkt->data.frame.sz);
- if (res != AOM_CODEC_OK) {
- abort_ = true;
- ASSERT_EQ(AOM_CODEC_OK, res);
- }
- const aom_image_t *img = dec->GetDxData().Next();
- md5->Add(img);
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- UpdateMD5(single_thread_dec_, pkt, &md5_single_thread_);
-
- for (int i = 0; i < kNumMultiThreadDecoders; ++i)
- UpdateMD5(multi_thread_dec_[i], pkt, &md5_multi_thread_[i]);
- }
-
- void DoTest() {
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = 500;
- cfg_.g_lag_in_frames = 12;
- cfg_.rc_end_usage = AOM_VBR;
-
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 704, 576,
- timebase.den, timebase.num, 0, 5);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- const char *md5_single_thread_str = md5_single_thread_.Get();
-
- for (int i = 0; i < kNumMultiThreadDecoders; ++i) {
- const char *md5_multi_thread_str = md5_multi_thread_[i].Get();
- ASSERT_STREQ(md5_single_thread_str, md5_multi_thread_str);
- }
- }
-
- ::libaom_test::MD5 md5_single_thread_;
- ::libaom_test::MD5 md5_multi_thread_[kNumMultiThreadDecoders];
- ::libaom_test::Decoder *single_thread_dec_;
- ::libaom_test::Decoder *multi_thread_dec_[kNumMultiThreadDecoders];
-
- private:
- int n_tile_cols_;
- int n_tile_rows_;
- int n_tile_groups_;
- int set_cpu_used_;
- int row_mt_;
-};
-
-// run an encode and do the decode both in single thread
-// and multi thread. Ensure that the MD5 of the output in both cases
-// is identical. If so, the test passes.
-TEST_P(AV1DecodeMultiThreadedTest, MD5Match) {
- cfg_.large_scale_tile = 0;
- single_thread_dec_->Control(AV1_SET_TILE_MODE, 0);
- for (int i = 0; i < kNumMultiThreadDecoders; ++i)
- multi_thread_dec_[i]->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-class AV1DecodeMultiThreadedTestLarge : public AV1DecodeMultiThreadedTest {};
-
-TEST_P(AV1DecodeMultiThreadedTestLarge, MD5Match) {
- cfg_.large_scale_tile = 0;
- single_thread_dec_->Control(AV1_SET_TILE_MODE, 0);
- for (int i = 0; i < kNumMultiThreadDecoders; ++i)
- multi_thread_dec_[i]->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-// TODO(ranjit): More tests have to be added using pre-generated MD5.
-AV1_INSTANTIATE_TEST_CASE(AV1DecodeMultiThreadedTest, ::testing::Values(1, 2),
- ::testing::Values(1, 2), ::testing::Values(1),
- ::testing::Values(3), ::testing::Values(0, 1));
-AV1_INSTANTIATE_TEST_CASE(AV1DecodeMultiThreadedTestLarge,
- ::testing::Values(0, 1, 2, 6),
- ::testing::Values(0, 1, 2, 6),
- ::testing::Values(1, 4), ::testing::Values(0),
- ::testing::Values(0, 1));
-
-class AV1DecodeMultiThreadedLSTestLarge
- : public AV1DecodeMultiThreadedTestLarge {};
-
-TEST_P(AV1DecodeMultiThreadedLSTestLarge, MD5Match) {
- cfg_.large_scale_tile = 1;
- single_thread_dec_->Control(AV1_SET_TILE_MODE, 1);
- for (int i = 0; i < kNumMultiThreadDecoders; ++i)
- multi_thread_dec_[i]->Control(AV1_SET_TILE_MODE, 1);
- DoTest();
-}
-
-AV1_INSTANTIATE_TEST_CASE(AV1DecodeMultiThreadedLSTestLarge,
- ::testing::Values(6), ::testing::Values(6),
- ::testing::Values(1), ::testing::Values(0, 3),
- ::testing::Values(0, 1));
-
-} // namespace
diff --git a/third_party/aom/test/decode_perf_test.cc b/third_party/aom/test/decode_perf_test.cc
deleted file mode 100644
index bb7b00032..000000000
--- a/third_party/aom/test/decode_perf_test.cc
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-
-#include "config/aom_version.h"
-
-#include "aom_ports/aom_timer.h"
-#include "common/ivfenc.h"
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/ivf_video_source.h"
-#include "test/md5_helper.h"
-#include "test/util.h"
-#include "test/webm_video_source.h"
-
-using ::testing::make_tuple;
-
-namespace {
-
-#define VIDEO_NAME 0
-#define THREADS 1
-
-const double kUsecsInSec = 1000000.0;
-const char kNewEncodeOutputFile[] = "new_encode.ivf";
-
-/*
- DecodePerfTest takes a tuple of filename + number of threads to decode with
- */
-typedef ::testing::tuple<const char *, unsigned> DecodePerfParam;
-
-// TODO(jimbankoski): Add actual test vectors here when available.
-// const DecodePerfParam kAV1DecodePerfVectors[] = {};
-
-/*
- In order to reflect real world performance as much as possible, Perf tests
- *DO NOT* do any correctness checks. Please run them alongside correctness
- tests to ensure proper codec integrity. Furthermore, in this test we
- deliberately limit the amount of system calls we make to avoid OS
- preemption.
-
- TODO(joshualitt) create a more detailed perf measurement test to collect
- power/temp/min max frame decode times/etc
- */
-
-class DecodePerfTest : public ::testing::TestWithParam<DecodePerfParam> {};
-
-TEST_P(DecodePerfTest, PerfTest) {
- const char *const video_name = GET_PARAM(VIDEO_NAME);
- const unsigned threads = GET_PARAM(THREADS);
-
- libaom_test::WebMVideoSource video(video_name);
- video.Init();
-
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.threads = threads;
- cfg.allow_lowbitdepth = 1;
- libaom_test::AV1Decoder decoder(cfg, 0);
-
- aom_usec_timer t;
- aom_usec_timer_start(&t);
-
- for (video.Begin(); video.cxdata() != NULL; video.Next()) {
- decoder.DecodeFrame(video.cxdata(), video.frame_size());
- }
-
- aom_usec_timer_mark(&t);
- const double elapsed_secs = double(aom_usec_timer_elapsed(&t)) / kUsecsInSec;
- const unsigned frames = video.frame_number();
- const double fps = double(frames) / elapsed_secs;
-
- printf("{\n");
- printf("\t\"type\" : \"decode_perf_test\",\n");
- printf("\t\"version\" : \"%s\",\n", VERSION_STRING_NOSP);
- printf("\t\"videoName\" : \"%s\",\n", video_name);
- printf("\t\"threadCount\" : %u,\n", threads);
- printf("\t\"decodeTimeSecs\" : %f,\n", elapsed_secs);
- printf("\t\"totalFrames\" : %u,\n", frames);
- printf("\t\"framesPerSecond\" : %f\n", fps);
- printf("}\n");
-}
-
-// TODO(jimbankoski): Enabled when we have actual AV1 Decode vectors.
-// INSTANTIATE_TEST_CASE_P(AV1, DecodePerfTest,
-// ::testing::ValuesIn(kAV1DecodePerfVectors));
-
-class AV1NewEncodeDecodePerfTest
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- AV1NewEncodeDecodePerfTest()
- : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)), speed_(0),
- outfile_(0), out_frames_(0) {}
-
- virtual ~AV1NewEncodeDecodePerfTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
-
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_min_quantizer = 2;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_dropframe_thresh = 0;
- cfg_.rc_undershoot_pct = 50;
- cfg_.rc_overshoot_pct = 50;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- cfg_.rc_end_usage = AOM_VBR;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, speed_);
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AV1E_SET_TILE_COLUMNS, 2);
- }
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
- const char *const env = getenv("LIBAOM_TEST_DATA_PATH");
- const std::string data_path(env ? env : ".");
- const std::string path_to_source = data_path + "/" + kNewEncodeOutputFile;
- outfile_ = fopen(path_to_source.c_str(), "wb");
- ASSERT_TRUE(outfile_ != NULL);
- }
-
- virtual void EndPassHook() {
- if (outfile_ != NULL) {
- if (!fseek(outfile_, 0, SEEK_SET))
- ivf_write_file_header(outfile_, &cfg_, AV1_FOURCC, out_frames_);
- fclose(outfile_);
- outfile_ = NULL;
- }
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- ++out_frames_;
-
- // Write initial file header if first frame.
- if (pkt->data.frame.pts == 0)
- ivf_write_file_header(outfile_, &cfg_, AV1_FOURCC, out_frames_);
-
- // Write frame header and data.
- ivf_write_frame_header(outfile_, out_frames_, pkt->data.frame.sz);
- ASSERT_EQ(fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile_),
- pkt->data.frame.sz);
- }
-
- virtual bool DoDecode() const { return false; }
-
- void set_speed(unsigned int speed) { speed_ = speed; }
-
- private:
- libaom_test::TestMode encoding_mode_;
- uint32_t speed_;
- FILE *outfile_;
- uint32_t out_frames_;
-};
-
-struct EncodePerfTestVideo {
- EncodePerfTestVideo(const char *name_, uint32_t width_, uint32_t height_,
- uint32_t bitrate_, int frames_)
- : name(name_), width(width_), height(height_), bitrate(bitrate_),
- frames(frames_) {}
- const char *name;
- uint32_t width;
- uint32_t height;
- uint32_t bitrate;
- int frames;
-};
-
-const EncodePerfTestVideo kAV1EncodePerfTestVectors[] = {
- EncodePerfTestVideo("niklas_1280_720_30.yuv", 1280, 720, 600, 470),
-};
-
-TEST_P(AV1NewEncodeDecodePerfTest, PerfTest) {
- SetUp();
-
- // TODO(JBB): Make this work by going through the set of given files.
- const int i = 0;
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = kAV1EncodePerfTestVectors[i].bitrate;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- const char *video_name = kAV1EncodePerfTestVectors[i].name;
- libaom_test::I420VideoSource video(
- video_name, kAV1EncodePerfTestVectors[i].width,
- kAV1EncodePerfTestVectors[i].height, timebase.den, timebase.num, 0,
- kAV1EncodePerfTestVectors[i].frames);
- set_speed(2);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- const uint32_t threads = 4;
-
- libaom_test::IVFVideoSource decode_video(kNewEncodeOutputFile);
- decode_video.Init();
-
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.threads = threads;
- cfg.allow_lowbitdepth = 1;
- libaom_test::AV1Decoder decoder(cfg, 0);
-
- aom_usec_timer t;
- aom_usec_timer_start(&t);
-
- for (decode_video.Begin(); decode_video.cxdata() != NULL;
- decode_video.Next()) {
- decoder.DecodeFrame(decode_video.cxdata(), decode_video.frame_size());
- }
-
- aom_usec_timer_mark(&t);
- const double elapsed_secs =
- static_cast<double>(aom_usec_timer_elapsed(&t)) / kUsecsInSec;
- const unsigned decode_frames = decode_video.frame_number();
- const double fps = static_cast<double>(decode_frames) / elapsed_secs;
-
- printf("{\n");
- printf("\t\"type\" : \"decode_perf_test\",\n");
- printf("\t\"version\" : \"%s\",\n", VERSION_STRING_NOSP);
- printf("\t\"videoName\" : \"%s\",\n", kNewEncodeOutputFile);
- printf("\t\"threadCount\" : %u,\n", threads);
- printf("\t\"decodeTimeSecs\" : %f,\n", elapsed_secs);
- printf("\t\"totalFrames\" : %u,\n", decode_frames);
- printf("\t\"framesPerSecond\" : %f\n", fps);
- printf("}\n");
-}
-
-AV1_INSTANTIATE_TEST_CASE(AV1NewEncodeDecodePerfTest,
- ::testing::Values(::libaom_test::kTwoPassGood));
-} // namespace
diff --git a/third_party/aom/test/decode_test_driver.cc b/third_party/aom/test/decode_test_driver.cc
deleted file mode 100644
index 70de0cff6..000000000
--- a/third_party/aom/test/decode_test_driver.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/register_state_check.h"
-#include "test/video_source.h"
-
-namespace libaom_test {
-
-const char kAV1Name[] = "AOMedia Project AV1 Decoder";
-
-aom_codec_err_t Decoder::PeekStream(const uint8_t *cxdata, size_t size,
- aom_codec_stream_info_t *stream_info) {
- return aom_codec_peek_stream_info(CodecInterface(), cxdata, size,
- stream_info);
-}
-
-aom_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) {
- return DecodeFrame(cxdata, size, NULL);
-}
-
-aom_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size,
- void *user_priv) {
- aom_codec_err_t res_dec;
- InitOnce();
- API_REGISTER_STATE_CHECK(
- res_dec = aom_codec_decode(&decoder_, cxdata, size, user_priv));
- return res_dec;
-}
-
-bool Decoder::IsAV1() const {
- const char *codec_name = GetDecoderName();
- return strncmp(kAV1Name, codec_name, sizeof(kAV1Name) - 1) == 0;
-}
-
-void DecoderTest::HandlePeekResult(Decoder *const /*decoder*/,
- CompressedVideoSource * /*video*/,
- const aom_codec_err_t res_peek) {
- /* The Av1 implementation of PeekStream returns an error only if the
- * data passed to it isn't a valid Av1 chunk. */
- ASSERT_EQ(AOM_CODEC_OK, res_peek)
- << "Peek return failed: " << aom_codec_err_to_string(res_peek);
-}
-
-void DecoderTest::RunLoop(CompressedVideoSource *video,
- const aom_codec_dec_cfg_t &dec_cfg) {
- Decoder *const decoder = codec_->CreateDecoder(dec_cfg, flags_);
- ASSERT_TRUE(decoder != NULL);
- bool end_of_file = false;
- bool peeked_stream = false;
-
- // Decode frames.
- for (video->Begin(); !::testing::Test::HasFailure() && !end_of_file;
- video->Next()) {
- PreDecodeFrameHook(*video, decoder);
-
- aom_codec_stream_info_t stream_info;
- stream_info.is_annexb = 0;
-
- if (video->cxdata() != NULL) {
- if (!peeked_stream) {
- // TODO(yaowu): PeekStream returns error for non-sequence_header_obu,
- // therefore should only be tried once per sequence, this shall be fixed
- // once PeekStream is updated to properly operate on other obus.
- const aom_codec_err_t res_peek = decoder->PeekStream(
- video->cxdata(), video->frame_size(), &stream_info);
- HandlePeekResult(decoder, video, res_peek);
- ASSERT_FALSE(::testing::Test::HasFailure());
- peeked_stream = true;
- }
-
- aom_codec_err_t res_dec =
- decoder->DecodeFrame(video->cxdata(), video->frame_size());
- if (!HandleDecodeResult(res_dec, *video, decoder)) break;
- } else {
- // Signal end of the file to the decoder.
- const aom_codec_err_t res_dec = decoder->DecodeFrame(NULL, 0);
- ASSERT_EQ(AOM_CODEC_OK, res_dec) << decoder->DecodeError();
- end_of_file = true;
- }
-
- DxDataIterator dec_iter = decoder->GetDxData();
- const aom_image_t *img = NULL;
-
- // Get decompressed data
- while (!::testing::Test::HasFailure() && (img = dec_iter.Next()))
- DecompressedFrameHook(*img, video->frame_number());
- }
- delete decoder;
-}
-
-void DecoderTest::RunLoop(CompressedVideoSource *video) {
- aom_codec_dec_cfg_t dec_cfg = aom_codec_dec_cfg_t();
- RunLoop(video, dec_cfg);
-}
-
-void DecoderTest::set_cfg(const aom_codec_dec_cfg_t &dec_cfg) {
- memcpy(&cfg_, &dec_cfg, sizeof(cfg_));
-}
-
-void DecoderTest::set_flags(const aom_codec_flags_t flags) { flags_ = flags; }
-
-} // namespace libaom_test
diff --git a/third_party/aom/test/decode_test_driver.h b/third_party/aom/test/decode_test_driver.h
deleted file mode 100644
index d13e13ea1..000000000
--- a/third_party/aom/test/decode_test_driver.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_DECODE_TEST_DRIVER_H_
-#define AOM_TEST_DECODE_TEST_DRIVER_H_
-#include <cstring>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "aom/aom_decoder.h"
-
-namespace libaom_test {
-
-class CodecFactory;
-class CompressedVideoSource;
-
-// Provides an object to handle decoding output
-class DxDataIterator {
- public:
- explicit DxDataIterator(aom_codec_ctx_t *decoder)
- : decoder_(decoder), iter_(NULL) {}
-
- const aom_image_t *Next() { return aom_codec_get_frame(decoder_, &iter_); }
-
- private:
- aom_codec_ctx_t *decoder_;
- aom_codec_iter_t iter_;
-};
-
-// Provides a simplified interface to manage one video decoding.
-// Similar to Encoder class, the exact services should be added
-// as more tests are added.
-class Decoder {
- public:
- explicit Decoder(aom_codec_dec_cfg_t cfg)
- : cfg_(cfg), flags_(0), init_done_(false) {
- memset(&decoder_, 0, sizeof(decoder_));
- }
-
- Decoder(aom_codec_dec_cfg_t cfg, const aom_codec_flags_t flag)
- : cfg_(cfg), flags_(flag), init_done_(false) {
- memset(&decoder_, 0, sizeof(decoder_));
- }
-
- virtual ~Decoder() { aom_codec_destroy(&decoder_); }
-
- aom_codec_err_t PeekStream(const uint8_t *cxdata, size_t size,
- aom_codec_stream_info_t *stream_info);
-
- aom_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size);
-
- aom_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size,
- void *user_priv);
-
- DxDataIterator GetDxData() { return DxDataIterator(&decoder_); }
-
- void Control(int ctrl_id, int arg) { Control(ctrl_id, arg, AOM_CODEC_OK); }
-
- void Control(int ctrl_id, const void *arg) {
- InitOnce();
- const aom_codec_err_t res = aom_codec_control_(&decoder_, ctrl_id, arg);
- ASSERT_EQ(AOM_CODEC_OK, res) << DecodeError();
- }
-
- void Control(int ctrl_id, int arg, aom_codec_err_t expected_value) {
- InitOnce();
- const aom_codec_err_t res = aom_codec_control_(&decoder_, ctrl_id, arg);
- ASSERT_EQ(expected_value, res) << DecodeError();
- }
-
- const char *DecodeError() {
- const char *detail = aom_codec_error_detail(&decoder_);
- return detail ? detail : aom_codec_error(&decoder_);
- }
-
- // Passes the external frame buffer information to libaom.
- aom_codec_err_t SetFrameBufferFunctions(
- aom_get_frame_buffer_cb_fn_t cb_get,
- aom_release_frame_buffer_cb_fn_t cb_release, void *user_priv) {
- InitOnce();
- return aom_codec_set_frame_buffer_functions(&decoder_, cb_get, cb_release,
- user_priv);
- }
-
- const char *GetDecoderName() const {
- return aom_codec_iface_name(CodecInterface());
- }
-
- bool IsAV1() const;
-
- aom_codec_ctx_t *GetDecoder() { return &decoder_; }
-
- protected:
- virtual aom_codec_iface_t *CodecInterface() const = 0;
-
- void InitOnce() {
- if (!init_done_) {
- const aom_codec_err_t res =
- aom_codec_dec_init(&decoder_, CodecInterface(), &cfg_, flags_);
- ASSERT_EQ(AOM_CODEC_OK, res) << DecodeError();
- init_done_ = true;
- }
- }
-
- aom_codec_ctx_t decoder_;
- aom_codec_dec_cfg_t cfg_;
- aom_codec_flags_t flags_;
- bool init_done_;
-};
-
-// Common test functionality for all Decoder tests.
-class DecoderTest {
- public:
- // Main decoding loop
- virtual void RunLoop(CompressedVideoSource *video);
- virtual void RunLoop(CompressedVideoSource *video,
- const aom_codec_dec_cfg_t &dec_cfg);
-
- virtual void set_cfg(const aom_codec_dec_cfg_t &dec_cfg);
- virtual void set_flags(const aom_codec_flags_t flags);
-
- // Hook to be called before decompressing every frame.
- virtual void PreDecodeFrameHook(const CompressedVideoSource & /*video*/,
- Decoder * /*decoder*/) {}
-
- // Hook to be called to handle decode result. Return true to continue.
- virtual bool HandleDecodeResult(const aom_codec_err_t res_dec,
- const CompressedVideoSource & /*video*/,
- Decoder *decoder) {
- EXPECT_EQ(AOM_CODEC_OK, res_dec) << decoder->DecodeError();
- return AOM_CODEC_OK == res_dec;
- }
-
- // Hook to be called on every decompressed frame.
- virtual void DecompressedFrameHook(const aom_image_t & /*img*/,
- const unsigned int /*frame_number*/) {}
-
- // Hook to be called on peek result
- virtual void HandlePeekResult(Decoder *const decoder,
- CompressedVideoSource *video,
- const aom_codec_err_t res_peek);
-
- protected:
- explicit DecoderTest(const CodecFactory *codec)
- : codec_(codec), cfg_(), flags_(0) {}
-
- virtual ~DecoderTest() {}
-
- const CodecFactory *codec_;
- aom_codec_dec_cfg_t cfg_;
- aom_codec_flags_t flags_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_DECODE_TEST_DRIVER_H_
diff --git a/third_party/aom/test/decode_to_md5.sh b/third_party/aom/test/decode_to_md5.sh
deleted file mode 100755
index 2edd1cb52..000000000
--- a/third_party/aom/test/decode_to_md5.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom decode_to_md5 example. To add new tests to this
-## file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to decode_to_md5_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: Make sure input is available:
-# $AV1_IVF_FILE is required.
-decode_to_md5_verify_environment() {
- if [ "$(av1_encode_available)" != "yes" ] && [ ! -e "${AV1_IVF_FILE}" ]; then
- return 1
- fi
-}
-
-# Runs decode_to_md5 on $1 and captures the md5 sum for the final frame. $2 is
-# interpreted as codec name and used solely to name the output file. $3 is the
-# expected md5 sum: It must match that of the final frame.
-decode_to_md5() {
- local decoder="$(aom_tool_path decode_to_md5)"
- local input_file="$1"
- local codec="$2"
- local expected_md5="$3"
- local output_file="${AOM_TEST_OUTPUT_DIR}/decode_to_md5_${codec}"
-
- if [ ! -x "${decoder}" ]; then
- elog "${decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${decoder}" "${input_file}" "${output_file}" \
- ${devnull}
-
- [ -e "${output_file}" ] || return 1
-
- local md5_last_frame="$(tail -n1 "${output_file}" | awk '{print $1}')"
- local actual_md5="$(echo "${md5_last_frame}" | awk '{print $1}')"
- if [ "${actual_md5}" = "${expected_md5}" ]; then
- return 0
- else
- elog "MD5 mismatch:"
- elog "Expected: ${expected_md5}"
- elog "Actual: ${actual_md5}"
- return 1
- fi
-}
-
-DISABLED_decode_to_md5_av1() {
- # expected MD5 sum for the last frame.
- local expected_md5="567dd6d4b7a7170edddbf58bbcc3aff1"
- local file="${AV1_IVF_FILE}"
-
- # TODO(urvang): Check in the encoded file (like libvpx does) to avoid
- # encoding every time.
- if [ "$(av1_decode_available)" = "yes" ]; then
- if [ ! -e "${AV1_IVF_FILE}" ]; then
- file="${AOM_TEST_OUTPUT_DIR}/test_encode.ivf"
- encode_yuv_raw_input_av1 "${file}" --ivf
- fi
- decode_to_md5 "${file}" "av1" "${expected_md5}"
- fi
-}
-
-# TODO(tomfinegan): Enable when the bitstream stabilizes.
-decode_to_md5_tests="DISABLED_decode_to_md5_av1"
-
-run_tests decode_to_md5_verify_environment "${decode_to_md5_tests}"
diff --git a/third_party/aom/test/decode_with_drops.sh b/third_party/aom/test/decode_with_drops.sh
deleted file mode 100755
index 155ee9207..000000000
--- a/third_party/aom/test/decode_with_drops.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom decode_with_drops example. To add new tests to
-## this file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to decode_with_drops_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: Make sure input is available:
-# $AV1_IVF_FILE is required.
-decode_with_drops_verify_environment() {
- if [ "$(av1_encode_available)" != "yes" ] && [ ! -e "${AV1_IVF_FILE}" ]; then
- return 1
- fi
-}
-
-# Runs decode_with_drops on $1, $2 is interpreted as codec name and used solely
-# to name the output file. $3 is the drop mode, and is passed directly to
-# decode_with_drops.
-decode_with_drops() {
- local decoder="$(aom_tool_path decode_with_drops)"
- local input_file="$1"
- local codec="$2"
- local output_file="${AOM_TEST_OUTPUT_DIR}/decode_with_drops_${codec}"
- local drop_mode="$3"
-
- if [ ! -x "${decoder}" ]; then
- elog "${decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${decoder}" "${input_file}" "${output_file}" \
- "${drop_mode}" ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-
-# Decodes $AV1_IVF_FILE while dropping frames, twice: once in sequence mode,
-# and once in pattern mode.
-DISABLED_decode_with_drops_av1() {
- if [ "$(av1_decode_available)" = "yes" ]; then
- local file="${AV1_IVF_FILE}"
- if [ ! -e "${AV1_IVF_FILE}" ]; then
- file="${AOM_TEST_OUTPUT_DIR}/test_encode.ivf"
- encode_yuv_raw_input_av1 "${file}" --ivf
- fi
- # Drop frames 3 and 4.
- decode_with_drops "${file}" "av1" "3-4"
-
- # Test pattern mode: Drop 3 of every 4 frames.
- decode_with_drops "${file}" "av1" "3/4"
- fi
-}
-
-# TODO(yaowu): Disable this test as trailing_bit check is expected to fail
-decode_with_drops_tests="DISABLED_decode_with_drops_av1"
-
-run_tests decode_with_drops_verify_environment "${decode_with_drops_tests}"
diff --git a/third_party/aom/test/divu_small_test.cc b/third_party/aom/test/divu_small_test.cc
deleted file mode 100644
index 064f8ee45..000000000
--- a/third_party/aom/test/divu_small_test.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdlib.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/acm_random.h"
-#include "av1/common/odintrin.h"
-
-using libaom_test::ACMRandom;
-
-TEST(Daala, TestDIVUuptoMAX) {
- for (int d = 1; d <= OD_DIVU_DMAX; d++) {
- for (uint32_t x = 1; x <= 1000000; x++) {
- GTEST_ASSERT_EQ(x / d, OD_DIVU_SMALL(x, d))
- << "x=" << x << " d=" << d << " x/d=" << (x / d)
- << " != " << OD_DIVU_SMALL(x, d);
- }
- }
-}
-
-TEST(Daala, TestDIVUrandI31) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int d = 1; d < OD_DIVU_DMAX; d++) {
- for (int i = 0; i < 1000000; i++) {
- uint32_t x = rnd.Rand31();
- GTEST_ASSERT_EQ(x / d, OD_DIVU_SMALL(x, d))
- << "x=" << x << " d=" << d << " x/d=" << (x / d)
- << " != " << OD_DIVU_SMALL(x, d);
- }
- }
-}
diff --git a/third_party/aom/test/dr_prediction_test.cc b/third_party/aom/test/dr_prediction_test.cc
deleted file mode 100644
index ff2c1de4e..000000000
--- a/third_party/aom/test/dr_prediction_test.cc
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/aom_timer.h"
-#include "av1/common/blockd.h"
-#include "av1/common/pred_common.h"
-#include "av1/common/reconintra.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-namespace {
-
-const int kZ1Start = 0;
-const int kZ2Start = 90;
-const int kZ3Start = 180;
-
-const TX_SIZE kTxSize[] = { TX_4X4, TX_8X8, TX_16X16, TX_32X32, TX_64X64,
- TX_4X8, TX_8X4, TX_8X16, TX_16X8, TX_16X32,
- TX_32X16, TX_32X64, TX_64X32, TX_4X16, TX_16X4,
- TX_8X32, TX_32X8, TX_16X64, TX_64X16 };
-
-const char *const kTxSizeStrings[] = {
- "TX_4X4", "TX_8X8", "TX_16X16", "TX_32X32", "TX_64X64",
- "TX_4X8", "TX_8X4", "TX_8X16", "TX_16X8", "TX_16X32",
- "TX_32X16", "TX_32X64", "TX_64X32", "TX_4X16", "TX_16X4",
- "TX_8X32", "TX_32X8", "TX_16X64", "TX_64X16"
-};
-
-using libaom_test::ACMRandom;
-
-typedef void (*DrPred_Hbd)(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_above, int upsample_left, int dx,
- int dy, int bd);
-
-typedef void (*DrPred)(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left,
- int upsample_above, int upsample_left, int dx, int dy,
- int bd);
-
-typedef void (*Z1_Lbd)(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left,
- int upsample_above, int dx, int dy);
-template <Z1_Lbd fn>
-void z1_wrapper(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left, int upsample_above,
- int /*upsample_left*/, int dx, int dy, int /*bd*/) {
- fn(dst, stride, bw, bh, above, left, upsample_above, dx, dy);
-}
-
-typedef void (*Z2_Lbd)(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left,
- int upsample_above, int upsample_left, int dx, int dy);
-template <Z2_Lbd fn>
-void z2_wrapper(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left, int upsample_above,
- int upsample_left, int dx, int dy, int /*bd*/) {
- fn(dst, stride, bw, bh, above, left, upsample_above, upsample_left, dx, dy);
-}
-
-typedef void (*Z3_Lbd)(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left,
- int upsample_left, int dx, int dy);
-template <Z3_Lbd fn>
-void z3_wrapper(uint8_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint8_t *above, const uint8_t *left,
- int /*upsample_above*/, int upsample_left, int dx, int dy,
- int /*bd*/) {
- fn(dst, stride, bw, bh, above, left, upsample_left, dx, dy);
-}
-
-typedef void (*Z1_Hbd)(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_above, int dx, int dy, int bd);
-template <Z1_Hbd fn>
-void z1_wrapper_hbd(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_above, int /*upsample_left*/, int dx, int dy,
- int bd) {
- fn(dst, stride, bw, bh, above, left, upsample_above, dx, dy, bd);
-}
-
-typedef void (*Z2_Hbd)(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_above, int upsample_left, int dx, int dy,
- int bd);
-template <Z2_Hbd fn>
-void z2_wrapper_hbd(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_above, int upsample_left, int dx, int dy,
- int bd) {
- fn(dst, stride, bw, bh, above, left, upsample_above, upsample_left, dx, dy,
- bd);
-}
-
-typedef void (*Z3_Hbd)(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int upsample_left, int dx, int dy, int bd);
-template <Z3_Hbd fn>
-void z3_wrapper_hbd(uint16_t *dst, ptrdiff_t stride, int bw, int bh,
- const uint16_t *above, const uint16_t *left,
- int /*upsample_above*/, int upsample_left, int dx, int dy,
- int bd) {
- fn(dst, stride, bw, bh, above, left, upsample_left, dx, dy, bd);
-}
-
-template <typename FuncType>
-struct DrPredFunc {
- DrPredFunc(FuncType pred = NULL, FuncType tst = NULL, int bit_depth_value = 0,
- int start_angle_value = 0)
- : ref_fn(pred), tst_fn(tst), bit_depth(bit_depth_value),
- start_angle(start_angle_value) {}
-
- FuncType ref_fn;
- FuncType tst_fn;
- int bit_depth;
- int start_angle;
-};
-
-template <typename Pixel, typename FuncType>
-class DrPredTest : public ::testing::TestWithParam<DrPredFunc<FuncType> > {
- protected:
- static const int kMaxNumTests = 100000;
- static const int kIterations = 10;
- static const int kDstStride = 64;
- static const int kDstSize = kDstStride * kDstStride;
- static const int kOffset = 16;
- static const int kBufSize = ((2 * MAX_TX_SIZE) << 1) + 16;
-
- DrPredTest()
- : enable_upsample_(0), upsample_above_(0), upsample_left_(0), bw_(0),
- bh_(0), dx_(1), dy_(1), bd_(8), txsize_(TX_4X4) {
- params_ = this->GetParam();
- start_angle_ = params_.start_angle;
- stop_angle_ = start_angle_ + 90;
-
- dst_ref_ = &dst_ref_data_[0];
- dst_tst_ = &dst_tst_data_[0];
- dst_stride_ = kDstStride;
- above_ = &above_data_[kOffset];
- left_ = &left_data_[kOffset];
-
- for (int i = 0; i < kBufSize; ++i) {
- above_data_[i] = rng_.Rand8();
- left_data_[i] = rng_.Rand8();
- }
-
- for (int i = 0; i < kDstSize; ++i) {
- dst_ref_[i] = 0;
- }
- }
-
- virtual ~DrPredTest() {}
-
- void Predict(bool speedtest, int tx) {
- const int kNumTests = speedtest ? kMaxNumTests : 1;
- aom_usec_timer timer;
-
- aom_usec_timer_start(&timer);
- for (int k = 0; k < kNumTests; ++k) {
- params_.ref_fn(dst_ref_, dst_stride_, bw_, bh_, above_, left_,
- upsample_above_, upsample_left_, dx_, dy_, bd_);
- }
- aom_usec_timer_mark(&timer);
- const int ref_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
-
- aom_usec_timer_start(&timer);
- if (params_.tst_fn) {
- for (int k = 0; k < kNumTests; ++k) {
- ASM_REGISTER_STATE_CHECK(params_.tst_fn(dst_tst_, dst_stride_, bw_, bh_,
- above_, left_, upsample_above_,
- upsample_left_, dx_, dy_, bd_));
- }
- }
- aom_usec_timer_mark(&timer);
- const int tst_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
-
- OutputTimes(kNumTests, ref_time, tst_time, tx);
- }
-
- void RunTest(bool speedtest, int p_angle) {
- for (int i = 0; i < kBufSize; ++i) {
- above_data_[i] = left_data_[i] = (1 << bd_) - 1;
- }
-
- for (int tx = 0; tx < TX_SIZES_ALL; ++tx) {
- if (params_.tst_fn == NULL) {
- for (int i = 0; i < kDstSize; ++i) {
- dst_tst_[i] = (1 << bd_) - 1;
- }
- } else {
- for (int i = 0; i < kDstSize; ++i) {
- dst_tst_[i] = 0;
- }
- }
-
- bw_ = tx_size_wide[kTxSize[tx]];
- bh_ = tx_size_high[kTxSize[tx]];
-
- if (enable_upsample_) {
- upsample_above_ =
- av1_use_intra_edge_upsample(bw_, bh_, p_angle - 90, 0);
- upsample_left_ =
- av1_use_intra_edge_upsample(bw_, bh_, p_angle - 180, 0);
- } else {
- upsample_above_ = upsample_left_ = 0;
- }
-
- Predict(speedtest, tx);
-
- for (int r = 0; r < bh_; ++r) {
- for (int c = 0; c < bw_; ++c) {
- ASSERT_EQ(dst_ref_[r * dst_stride_ + c],
- dst_tst_[r * dst_stride_ + c])
- << bw_ << "x" << bh_ << " r: " << r << " c: " << c
- << " dx: " << dx_ << " dy: " << dy_
- << " upsample_above: " << upsample_above_
- << " upsample_left: " << upsample_left_;
- }
- }
- }
- }
-
- void OutputTimes(int num_tests, int ref_time, int tst_time, int tx) {
- if (num_tests > 1) {
- if (params_.tst_fn) {
- const float x = static_cast<float>(ref_time) / tst_time;
- printf("\t[%8s] :: ref time %6d, tst time %6d %3.2f\n",
- kTxSizeStrings[tx], ref_time, tst_time, x);
- } else {
- printf("\t[%8s] :: ref time %6d\n", kTxSizeStrings[tx], ref_time);
- }
- }
- }
-
- Pixel dst_ref_data_[kDstSize];
- Pixel dst_tst_data_[kDstSize];
-
- Pixel left_data_[kBufSize];
- Pixel dummy_data_[kBufSize];
- Pixel above_data_[kBufSize];
-
- Pixel *dst_ref_;
- Pixel *dst_tst_;
- Pixel *above_;
- Pixel *left_;
- int dst_stride_;
-
- int enable_upsample_;
- int upsample_above_;
- int upsample_left_;
- int bw_;
- int bh_;
- int dx_;
- int dy_;
- int bd_;
- TX_SIZE txsize_;
-
- int start_angle_;
- int stop_angle_;
-
- ACMRandom rng_;
-
- DrPredFunc<FuncType> params_;
-};
-
-class LowbdDrPredTest : public DrPredTest<uint8_t, DrPred> {};
-
-TEST_P(LowbdDrPredTest, SaturatedValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- enable_upsample_ = iter & 1;
- for (int angle = start_angle_; angle < stop_angle_; ++angle) {
- dx_ = av1_get_dx(angle);
- dy_ = av1_get_dy(angle);
- if (dx_ && dy_) RunTest(false, angle);
- }
- }
-}
-
-TEST_P(LowbdDrPredTest, DISABLED_Speed) {
- const int angles[] = { 3, 45, 87 };
- for (enable_upsample_ = 0; enable_upsample_ < 2; ++enable_upsample_) {
- for (int i = 0; i < 3; ++i) {
- const int angle = angles[i] + start_angle_;
- dx_ = av1_get_dx(angle);
- dy_ = av1_get_dy(angle);
- printf("enable_upsample: %d angle: %d ~~~~~~~~~~~~~~~\n",
- enable_upsample_, angle);
- if (dx_ && dy_) RunTest(true, angle);
- }
- }
-}
-
-using ::testing::make_tuple;
-
-INSTANTIATE_TEST_CASE_P(
- C, LowbdDrPredTest,
- ::testing::Values(DrPredFunc<DrPred>(&z1_wrapper<av1_dr_prediction_z1_c>,
- NULL, AOM_BITS_8, kZ1Start),
- DrPredFunc<DrPred>(&z2_wrapper<av1_dr_prediction_z2_c>,
- NULL, AOM_BITS_8, kZ2Start),
- DrPredFunc<DrPred>(&z3_wrapper<av1_dr_prediction_z3_c>,
- NULL, AOM_BITS_8, kZ3Start)));
-
-class HighbdDrPredTest : public DrPredTest<uint16_t, DrPred_Hbd> {};
-
-TEST_P(HighbdDrPredTest, SaturatedValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- enable_upsample_ = iter & 1;
- for (int angle = start_angle_; angle < stop_angle_; ++angle) {
- dx_ = av1_get_dx(angle);
- dy_ = av1_get_dy(angle);
- if (dx_ && dy_) RunTest(false, angle);
- }
- }
-}
-
-TEST_P(HighbdDrPredTest, DISABLED_Speed) {
- const int angles[] = { 3, 45, 87 };
- for (enable_upsample_ = 0; enable_upsample_ < 2; ++enable_upsample_) {
- for (int i = 0; i < 3; ++i) {
- const int angle = angles[i] + start_angle_;
- dx_ = av1_get_dx(angle);
- dy_ = av1_get_dy(angle);
- printf("enable_upsample: %d angle: %d ~~~~~~~~~~~~~~~\n",
- enable_upsample_, angle);
- if (dx_ && dy_) RunTest(true, angle);
- }
- }
-}
-
-INSTANTIATE_TEST_CASE_P(
- C, HighbdDrPredTest,
- ::testing::Values(
- DrPredFunc<DrPred_Hbd>(&z1_wrapper_hbd<av1_highbd_dr_prediction_z1_c>,
- NULL, AOM_BITS_8, kZ1Start),
- DrPredFunc<DrPred_Hbd>(&z1_wrapper_hbd<av1_highbd_dr_prediction_z1_c>,
- NULL, AOM_BITS_10, kZ1Start),
- DrPredFunc<DrPred_Hbd>(&z1_wrapper_hbd<av1_highbd_dr_prediction_z1_c>,
- NULL, AOM_BITS_12, kZ1Start),
- DrPredFunc<DrPred_Hbd>(&z2_wrapper_hbd<av1_highbd_dr_prediction_z2_c>,
- NULL, AOM_BITS_8, kZ2Start),
- DrPredFunc<DrPred_Hbd>(&z2_wrapper_hbd<av1_highbd_dr_prediction_z2_c>,
- NULL, AOM_BITS_10, kZ2Start),
- DrPredFunc<DrPred_Hbd>(&z2_wrapper_hbd<av1_highbd_dr_prediction_z2_c>,
- NULL, AOM_BITS_12, kZ2Start),
- DrPredFunc<DrPred_Hbd>(&z3_wrapper_hbd<av1_highbd_dr_prediction_z3_c>,
- NULL, AOM_BITS_8, kZ3Start),
- DrPredFunc<DrPred_Hbd>(&z3_wrapper_hbd<av1_highbd_dr_prediction_z3_c>,
- NULL, AOM_BITS_10, kZ3Start),
- DrPredFunc<DrPred_Hbd>(&z3_wrapper_hbd<av1_highbd_dr_prediction_z3_c>,
- NULL, AOM_BITS_12, kZ3Start)));
-
-} // namespace
diff --git a/third_party/aom/test/dump_obu.sh b/third_party/aom/test/dump_obu.sh
deleted file mode 100755
index da44dd7e6..000000000
--- a/third_party/aom/test/dump_obu.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2018, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom dump_obu tool. To add new tests to this
-## file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to dump_obu_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-readonly dump_obu_test_file="${AOM_TEST_OUTPUT_DIR}/av1_obu_test.ivf"
-
-dump_obu_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- elog "The file ${YUV_RAW_INPUT##*/} must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
- if [ "$(dump_obu_available)" = "yes" ]; then
- if [ -z "$(aom_tool_path dump_obu)" ]; then
- elog "dump_obu not found in LIBAOM_BIN_PATH, its parent, or child tools/."
- fi
- fi
-}
-
-dump_obu_available() {
- if [ "$(av1_decode_available)" = "yes" ] && \
- [ "$(av1_encode_available)" = "yes" ]; then
- echo yes
- fi
-}
-
-aomenc_available() {
- if [ -x "$(aom_tool_path aomenc)" ]; then
- echo yes
- fi
-}
-
-encode_test_file() {
- if [ "$(aomenc_available)" = "yes" ]; then
- local encoder="$(aom_tool_path aomenc)"
-
- eval "${encoder}" \
- $(aomenc_encode_test_fast_params) \
- $(yuv_raw_input) \
- --ivf \
- --output=${dump_obu_test_file} \
- ${devnull}
-
- if [ ! -e "${dump_obu_test_file}" ]; then
- elog "dump_obu test input encode failed."
- return 1
- fi
- fi
-}
-
-dump_obu() {
- encode_test_file
- eval $(aom_tool_path dump_obu) "${dump_obu_test_file}" ${devnull}
-}
-
-dump_obu_tests="dump_obu"
-
-run_tests dump_obu_verify_environment "${dump_obu_tests}"
diff --git a/third_party/aom/test/ec_test.cc b/third_party/aom/test/ec_test.cc
deleted file mode 100644
index e6a5ea63b..000000000
--- a/third_party/aom/test/ec_test.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include <cstdlib>
-
-#include "aom_dsp/entenc.h"
-#include "aom_dsp/entdec.h"
-
-TEST(EC_TEST, random_ec_test) {
- od_ec_enc enc;
- od_ec_dec dec;
- int sz;
- int i;
- int ret;
- unsigned int sym;
- unsigned int seed;
- unsigned char *ptr;
- uint32_t ptr_sz;
- char *seed_str;
- ret = 0;
- seed_str = getenv("EC_TEST_SEED");
- if (seed_str) {
- seed = atoi(seed_str);
- } else {
- seed = 0xdaa1a;
- }
- srand(seed);
- od_ec_enc_init(&enc, 1);
- /*Test compatibility between multiple different encode/decode routines.*/
- for (i = 0; i < 409600; i++) {
- unsigned *fz;
- unsigned *fts;
- unsigned *data;
- unsigned *tell;
- unsigned *enc_method;
- int j;
- sz = rand() / ((RAND_MAX >> (rand() % 9U)) + 1U);
- fz = (unsigned *)malloc(sz * sizeof(*fz));
- fts = (unsigned *)malloc(sz * sizeof(*fts));
- data = (unsigned *)malloc(sz * sizeof(*data));
- tell = (unsigned *)malloc((sz + 1) * sizeof(*tell));
- enc_method = (unsigned *)malloc(sz * sizeof(*enc_method));
- od_ec_enc_reset(&enc);
- tell[0] = od_ec_enc_tell_frac(&enc);
- for (j = 0; j < sz; j++) {
- data[j] = rand() / ((RAND_MAX >> 1) + 1);
-
- fts[j] = CDF_PROB_BITS;
- fz[j] = (rand() % (CDF_PROB_TOP - 2)) >> (CDF_PROB_BITS - fts[j]);
- fz[j] = OD_MAXI(fz[j], 1);
- enc_method[j] = 3 + (rand() & 1);
- switch (enc_method[j]) {
- case 3: {
- od_ec_encode_bool_q15(&enc, data[j],
- OD_ICDF(fz[j] << (CDF_PROB_BITS - fts[j])));
- break;
- }
- case 4: {
- uint16_t cdf[2];
- cdf[0] = OD_ICDF(fz[j]);
- cdf[1] = OD_ICDF(1U << fts[j]);
- od_ec_encode_cdf_q15(&enc, data[j], cdf, 2);
- break;
- }
- }
-
- tell[j + 1] = od_ec_enc_tell_frac(&enc);
- }
- ptr = od_ec_enc_done(&enc, &ptr_sz);
- EXPECT_GE(((od_ec_enc_tell(&enc) + 7U) >> 3), ptr_sz)
- << "od_ec_enc_tell() lied: "
- "there's "
- << ptr_sz << " bytes instead of " << ((od_ec_enc_tell(&enc) + 7) >> 3)
- << " (Random seed: " << seed << ")\n";
- od_ec_dec_init(&dec, ptr, ptr_sz);
- EXPECT_EQ(od_ec_dec_tell_frac(&dec), tell[0])
- << "od_ec_dec_tell() mismatch between encoder and decoder "
- "at symbol 0: "
- << (unsigned)od_ec_dec_tell_frac(&dec) << " instead of " << tell[0]
- << " (Random seed: " << seed << ").\n";
- for (j = 0; j < sz; j++) {
- int dec_method;
- if (CDF_SHIFT == 0) {
- dec_method = 3 + (rand() & 1);
- } else {
- dec_method = enc_method[j];
- }
- switch (dec_method) {
- case 3: {
- sym = od_ec_decode_bool_q15(
- &dec, OD_ICDF(fz[j] << (CDF_PROB_BITS - fts[j])));
- break;
- }
- case 4: {
- uint16_t cdf[2];
- cdf[0] = OD_ICDF(fz[j]);
- cdf[1] = OD_ICDF(1U << fts[j]);
- sym = od_ec_decode_cdf_q15(&dec, cdf, 2);
- break;
- }
- }
-
- EXPECT_EQ(sym, data[j])
- << "Decoded " << sym << " instead of " << data[j]
- << " with fz=" << fz[j] << " and ftb=" << fts[j] << "at position "
- << j << " of " << sz << " (Random seed: " << seed << ").\n"
- << "Encoding method: " << enc_method[j]
- << " decoding method: " << dec_method << "\n";
- EXPECT_EQ(od_ec_dec_tell_frac(&dec), tell[j + 1])
- << "od_ec_dec_tell() mismatch between encoder and "
- "decoder at symbol "
- << j + 1 << ": " << (unsigned)od_ec_dec_tell_frac(&dec)
- << " instead of " << tell[j + 1] << " (Random seed: " << seed
- << ").\n";
- }
- free(enc_method);
- free(tell);
- free(data);
- free(fts);
- free(fz);
- }
- od_ec_enc_reset(&enc);
- if (CDF_SHIFT == 0) {
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(24576));
- od_ec_enc_patch_initial_bits(&enc, 3, 2);
- EXPECT_FALSE(enc.error) << "od_ec_enc_patch_initial_bits() failed.\n";
- od_ec_enc_patch_initial_bits(&enc, 0, 5);
- EXPECT_TRUE(enc.error)
- << "od_ec_enc_patch_initial_bits() didn't fail when it should have.\n";
- od_ec_enc_reset(&enc);
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(16384));
- od_ec_encode_bool_q15(&enc, 1, OD_ICDF(32256));
- od_ec_encode_bool_q15(&enc, 0, OD_ICDF(24576));
- od_ec_enc_patch_initial_bits(&enc, 0, 2);
- EXPECT_FALSE(enc.error) << "od_ec_enc_patch_initial_bits() failed.\n";
- ptr = od_ec_enc_done(&enc, &ptr_sz);
- EXPECT_EQ(ptr_sz, 2u);
- EXPECT_EQ(ptr[0], 63)
- << "Got " << ptr[0]
- << " when expecting 63 for od_ec_enc_patch_initial_bits().\n";
- }
- od_ec_enc_clear(&enc);
- EXPECT_EQ(ret, 0);
-}
diff --git a/third_party/aom/test/encode_api_test.cc b/third_party/aom/test/encode_api_test.cc
deleted file mode 100644
index c26f5720f..000000000
--- a/third_party/aom/test/encode_api_test.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "test/util.h"
-#include "aom/aomcx.h"
-#include "aom/aom_encoder.h"
-
-namespace {
-
-TEST(EncodeAPI, InvalidParams) {
- static const aom_codec_iface_t *kCodecs[] = {
-#if CONFIG_AV1_ENCODER
- aom_codec_av1_cx(),
-#endif
- };
- uint8_t buf[1] = { 0 };
- aom_image_t img;
- aom_codec_ctx_t enc;
- aom_codec_enc_cfg_t cfg;
-
- EXPECT_EQ(&img, aom_img_wrap(&img, AOM_IMG_FMT_I420, 1, 1, 1, buf));
-
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_enc_init(NULL, NULL, NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_enc_init(&enc, NULL, NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_encode(NULL, NULL, 0, 0, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_encode(NULL, &img, 0, 0, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_destroy(NULL));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_enc_config_default(NULL, NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_enc_config_default(NULL, &cfg, 0));
- EXPECT_TRUE(aom_codec_error(NULL) != NULL);
-
- for (int i = 0; i < NELEMENTS(kCodecs); ++i) {
- SCOPED_TRACE(aom_codec_iface_name(kCodecs[i]));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_enc_init(NULL, kCodecs[i], NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_enc_init(&enc, kCodecs[i], NULL, 0));
- EXPECT_EQ(AOM_CODEC_INVALID_PARAM,
- aom_codec_enc_config_default(kCodecs[i], &cfg, 1));
-
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_enc_config_default(kCodecs[i], &cfg, 0));
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_enc_init(&enc, kCodecs[i], &cfg, 0));
-
- EXPECT_EQ(NULL, aom_codec_get_global_headers(NULL));
-
- aom_fixed_buf_t *glob_headers = aom_codec_get_global_headers(&enc);
- EXPECT_TRUE(glob_headers->buf != NULL);
- if (glob_headers) {
- free(glob_headers->buf);
- free(glob_headers);
- }
-
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_encode(&enc, NULL, 0, 0, 0));
-
- EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&enc));
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/encode_perf_test.cc b/third_party/aom/test/encode_perf_test.cc
deleted file mode 100644
index fe649b153..000000000
--- a/third_party/aom/test/encode_perf_test.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_version.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "aom_ports/aom_timer.h"
-
-namespace {
-
-const int kMaxPsnr = 100;
-const double kUsecsInSec = 1000000.0;
-
-struct EncodePerfTestVideo {
- EncodePerfTestVideo(const char *name_, uint32_t width_, uint32_t height_,
- uint32_t bitrate_, int frames_)
- : name(name_), width(width_), height(height_), bitrate(bitrate_),
- frames(frames_) {}
- const char *name;
- uint32_t width;
- uint32_t height;
- uint32_t bitrate;
- int frames;
-};
-
-const EncodePerfTestVideo kAV1EncodePerfTestVectors[] = {
- EncodePerfTestVideo("desktop_640_360_30.yuv", 640, 360, 200, 2484),
- EncodePerfTestVideo("kirland_640_480_30.yuv", 640, 480, 200, 300),
- EncodePerfTestVideo("macmarcomoving_640_480_30.yuv", 640, 480, 200, 987),
- EncodePerfTestVideo("macmarcostationary_640_480_30.yuv", 640, 480, 200, 718),
- EncodePerfTestVideo("niklas_640_480_30.yuv", 640, 480, 200, 471),
- EncodePerfTestVideo("tacomanarrows_640_480_30.yuv", 640, 480, 200, 300),
- EncodePerfTestVideo("tacomasmallcameramovement_640_480_30.yuv", 640, 480, 200,
- 300),
- EncodePerfTestVideo("thaloundeskmtg_640_480_30.yuv", 640, 480, 200, 300),
- EncodePerfTestVideo("niklas_1280_720_30.yuv", 1280, 720, 600, 470),
-};
-
-const int kEncodePerfTestSpeeds[] = { 5, 6, 7, 8 };
-const int kEncodePerfTestThreads[] = { 1, 2, 4 };
-
-class AV1EncodePerfTest
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- AV1EncodePerfTest()
- : EncoderTest(GET_PARAM(0)), min_psnr_(kMaxPsnr), nframes_(0),
- encoding_mode_(GET_PARAM(1)), speed_(0), threads_(1) {}
-
- virtual ~AV1EncodePerfTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
-
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_min_quantizer = 2;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_dropframe_thresh = 0;
- cfg_.rc_undershoot_pct = 50;
- cfg_.rc_overshoot_pct = 50;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.g_error_resilient = 1;
- cfg_.g_threads = threads_;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- const int log2_tile_columns = 3;
- encoder->Control(AOME_SET_CPUUSED, speed_);
- encoder->Control(AV1E_SET_TILE_COLUMNS, log2_tile_columns);
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 0);
- }
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
- min_psnr_ = kMaxPsnr;
- nframes_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (pkt->data.psnr.psnr[0] < min_psnr_) {
- min_psnr_ = pkt->data.psnr.psnr[0];
- }
- }
-
- // for performance reasons don't decode
- virtual bool DoDecode() { return 0; }
-
- double min_psnr() const { return min_psnr_; }
-
- void set_speed(unsigned int speed) { speed_ = speed; }
-
- void set_threads(unsigned int threads) { threads_ = threads; }
-
- private:
- double min_psnr_;
- unsigned int nframes_;
- libaom_test::TestMode encoding_mode_;
- unsigned speed_;
- unsigned int threads_;
-};
-
-TEST_P(AV1EncodePerfTest, PerfTest) {
- for (size_t i = 0; i < NELEMENTS(kAV1EncodePerfTestVectors); ++i) {
- for (size_t j = 0; j < NELEMENTS(kEncodePerfTestSpeeds); ++j) {
- for (size_t k = 0; k < NELEMENTS(kEncodePerfTestThreads); ++k) {
- if (kAV1EncodePerfTestVectors[i].width < 512 &&
- kEncodePerfTestThreads[k] > 1)
- continue;
- else if (kAV1EncodePerfTestVectors[i].width < 1024 &&
- kEncodePerfTestThreads[k] > 2)
- continue;
-
- set_threads(kEncodePerfTestThreads[k]);
- SetUp();
-
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = kAV1EncodePerfTestVectors[i].bitrate;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- const unsigned frames = kAV1EncodePerfTestVectors[i].frames;
- const char *video_name = kAV1EncodePerfTestVectors[i].name;
- libaom_test::I420VideoSource video(
- video_name, kAV1EncodePerfTestVectors[i].width,
- kAV1EncodePerfTestVectors[i].height, timebase.den, timebase.num, 0,
- kAV1EncodePerfTestVectors[i].frames);
- set_speed(kEncodePerfTestSpeeds[j]);
-
- aom_usec_timer t;
- aom_usec_timer_start(&t);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- aom_usec_timer_mark(&t);
- const double elapsed_secs = aom_usec_timer_elapsed(&t) / kUsecsInSec;
- const double fps = frames / elapsed_secs;
- const double minimum_psnr = min_psnr();
- std::string display_name(video_name);
- if (kEncodePerfTestThreads[k] > 1) {
- char thread_count[32];
- snprintf(thread_count, sizeof(thread_count), "_t-%d",
- kEncodePerfTestThreads[k]);
- display_name += thread_count;
- }
-
- printf("{\n");
- printf("\t\"type\" : \"encode_perf_test\",\n");
- printf("\t\"version\" : \"%s\",\n", VERSION_STRING_NOSP);
- printf("\t\"videoName\" : \"%s\",\n", display_name.c_str());
- printf("\t\"encodeTimeSecs\" : %f,\n", elapsed_secs);
- printf("\t\"totalFrames\" : %u,\n", frames);
- printf("\t\"framesPerSecond\" : %f,\n", fps);
- printf("\t\"minPsnr\" : %f,\n", minimum_psnr);
- printf("\t\"speed\" : %d,\n", kEncodePerfTestSpeeds[j]);
- printf("\t\"threads\" : %d\n", kEncodePerfTestThreads[k]);
- printf("}\n");
- }
- }
- }
-}
-
-AV1_INSTANTIATE_TEST_CASE(AV1EncodePerfTest,
- ::testing::Values(::libaom_test::kRealTime));
-} // namespace
diff --git a/third_party/aom/test/encode_test_driver.cc b/third_party/aom/test/encode_test_driver.cc
deleted file mode 100644
index f3d61dc36..000000000
--- a/third_party/aom/test/encode_test_driver.cc
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "aom_ports/mem.h"
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/encode_test_driver.h"
-#include "test/register_state_check.h"
-#include "test/video_source.h"
-
-namespace libaom_test {
-void Encoder::InitEncoder(VideoSource *video) {
- aom_codec_err_t res;
- const aom_image_t *img = video->img();
-
- if (video->img() && !encoder_.priv) {
- cfg_.g_w = img->d_w;
- cfg_.g_h = img->d_h;
- cfg_.g_timebase = video->timebase();
- cfg_.rc_twopass_stats_in = stats_->buf();
-
- res = aom_codec_enc_init(&encoder_, CodecInterface(), &cfg_, init_flags_);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-}
-
-void Encoder::EncodeFrame(VideoSource *video, const unsigned long frame_flags) {
- if (video->img())
- EncodeFrameInternal(*video, frame_flags);
- else
- Flush();
-
- // Handle twopass stats
- CxDataIterator iter = GetCxData();
-
- while (const aom_codec_cx_pkt_t *pkt = iter.Next()) {
- if (pkt->kind != AOM_CODEC_STATS_PKT) continue;
-
- stats_->Append(*pkt);
- }
-}
-
-void Encoder::EncodeFrameInternal(const VideoSource &video,
- const unsigned long frame_flags) {
- aom_codec_err_t res;
- const aom_image_t *img = video.img();
-
- // Handle frame resizing
- if (cfg_.g_w != img->d_w || cfg_.g_h != img->d_h) {
- cfg_.g_w = img->d_w;
- cfg_.g_h = img->d_h;
- res = aom_codec_enc_config_set(&encoder_, &cfg_);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-
- // Encode the frame
- API_REGISTER_STATE_CHECK(res =
- aom_codec_encode(&encoder_, img, video.pts(),
- video.duration(), frame_flags));
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
-}
-
-void Encoder::Flush() {
- const aom_codec_err_t res = aom_codec_encode(&encoder_, NULL, 0, 0, 0);
- if (!encoder_.priv)
- ASSERT_EQ(AOM_CODEC_ERROR, res) << EncoderError();
- else
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
-}
-
-void EncoderTest::InitializeConfig() {
- const aom_codec_err_t res = codec_->DefaultEncoderConfig(&cfg_, 0);
- ASSERT_EQ(AOM_CODEC_OK, res);
-}
-
-void EncoderTest::SetMode(TestMode mode) {
- switch (mode) {
- case kOnePassGood:
- case kTwoPassGood: break;
- case kRealTime: cfg_.g_lag_in_frames = 0; break;
- default: ASSERT_TRUE(false) << "Unexpected mode " << mode;
- }
- mode_ = mode;
- if (mode == kTwoPassGood)
- passes_ = 2;
- else
- passes_ = 1;
-}
-
-static bool compare_plane(const uint8_t *const buf1, int stride1,
- const uint8_t *const buf2, int stride2, int w, int h,
- int *const mismatch_row, int *const mismatch_col,
- int *const mismatch_pix1, int *const mismatch_pix2) {
- int r, c;
-
- for (r = 0; r < h; ++r) {
- for (c = 0; c < w; ++c) {
- const int pix1 = buf1[r * stride1 + c];
- const int pix2 = buf2[r * stride2 + c];
-
- if (pix1 != pix2) {
- if (mismatch_row != NULL) *mismatch_row = r;
- if (mismatch_col != NULL) *mismatch_col = c;
- if (mismatch_pix1 != NULL) *mismatch_pix1 = pix1;
- if (mismatch_pix2 != NULL) *mismatch_pix2 = pix2;
- return false;
- }
- }
- }
-
- return true;
-}
-
-// The function should return "true" most of the time, therefore no early
-// break-out is implemented within the match checking process.
-static bool compare_img(const aom_image_t *img1, const aom_image_t *img2,
- int *const mismatch_row, int *const mismatch_col,
- int *const mismatch_plane, int *const mismatch_pix1,
- int *const mismatch_pix2) {
- if (img1->fmt != img2->fmt || img1->cp != img2->cp || img1->tc != img2->tc ||
- img1->mc != img2->mc || img1->d_w != img2->d_w ||
- img1->d_h != img2->d_h || img1->monochrome != img2->monochrome) {
- if (mismatch_row != NULL) *mismatch_row = -1;
- if (mismatch_col != NULL) *mismatch_col = -1;
- return false;
- }
-
- const int num_planes = img1->monochrome ? 1 : 3;
- for (int plane = 0; plane < num_planes; plane++) {
- if (!compare_plane(img1->planes[plane], img1->stride[plane],
- img2->planes[plane], img2->stride[plane],
- aom_img_plane_width(img1, plane),
- aom_img_plane_height(img1, plane), mismatch_row,
- mismatch_col, mismatch_pix1, mismatch_pix2)) {
- if (mismatch_plane != NULL) *mismatch_plane = plane;
- return false;
- }
- }
-
- return true;
-}
-
-void EncoderTest::MismatchHook(const aom_image_t *img_enc,
- const aom_image_t *img_dec) {
- int mismatch_row = 0;
- int mismatch_col = 0;
- int mismatch_plane = 0;
- int mismatch_pix_enc = 0;
- int mismatch_pix_dec = 0;
-
- ASSERT_FALSE(compare_img(img_enc, img_dec, &mismatch_row, &mismatch_col,
- &mismatch_plane, &mismatch_pix_enc,
- &mismatch_pix_dec));
-
- GTEST_FAIL() << "Encode/Decode mismatch found:" << std::endl
- << " pixel value enc/dec: " << mismatch_pix_enc << "/"
- << mismatch_pix_dec << std::endl
- << " plane: " << mismatch_plane << std::endl
- << " row/col: " << mismatch_row << "/"
- << mismatch_col << std::endl;
-}
-
-void EncoderTest::RunLoop(VideoSource *video) {
- aom_codec_dec_cfg_t dec_cfg = aom_codec_dec_cfg_t();
- dec_cfg.allow_lowbitdepth = 1;
-
- stats_.Reset();
-
- ASSERT_TRUE(passes_ == 1 || passes_ == 2);
- for (unsigned int pass = 0; pass < passes_; pass++) {
- last_pts_ = 0;
-
- if (passes_ == 1)
- cfg_.g_pass = AOM_RC_ONE_PASS;
- else if (pass == 0)
- cfg_.g_pass = AOM_RC_FIRST_PASS;
- else
- cfg_.g_pass = AOM_RC_LAST_PASS;
-
- BeginPassHook(pass);
- testing::internal::scoped_ptr<Encoder> encoder(
- codec_->CreateEncoder(cfg_, init_flags_, &stats_));
- ASSERT_TRUE(encoder.get() != NULL);
-
- ASSERT_NO_FATAL_FAILURE(video->Begin());
- encoder->InitEncoder(video);
-
- if (mode_ == kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 0);
- }
-
- ASSERT_FALSE(::testing::Test::HasFatalFailure());
-
- testing::internal::scoped_ptr<Decoder> decoder(
- codec_->CreateDecoder(dec_cfg, 0 /* flags */));
-#if CONFIG_AV1_DECODER
- if (decoder->IsAV1()) {
- // Set dec_cfg.tile_row = -1 and dec_cfg.tile_col = -1 so that the whole
- // frame is decoded.
- decoder->Control(AV1_SET_TILE_MODE, cfg_.large_scale_tile);
- decoder->Control(AV1D_EXT_TILE_DEBUG, 1);
- decoder->Control(AV1_SET_DECODE_TILE_ROW, -1);
- decoder->Control(AV1_SET_DECODE_TILE_COL, -1);
- }
-#endif
-
- bool again;
- for (again = true; again; video->Next()) {
- again = (video->img() != NULL);
-
- PreEncodeFrameHook(video);
- PreEncodeFrameHook(video, encoder.get());
- encoder->EncodeFrame(video, frame_flags_);
-
- CxDataIterator iter = encoder->GetCxData();
-
- bool has_cxdata = false;
- bool has_dxdata = false;
- while (const aom_codec_cx_pkt_t *pkt = iter.Next()) {
- pkt = MutateEncoderOutputHook(pkt);
- again = true;
- switch (pkt->kind) {
- case AOM_CODEC_CX_FRAME_PKT:
- has_cxdata = true;
- if (decoder.get() != NULL && DoDecode()) {
- aom_codec_err_t res_dec;
- if (DoDecodeInvisible()) {
- res_dec = decoder->DecodeFrame(
- (const uint8_t *)pkt->data.frame.buf, pkt->data.frame.sz);
- } else {
- res_dec = decoder->DecodeFrame(
- (const uint8_t *)pkt->data.frame.buf +
- (pkt->data.frame.sz - pkt->data.frame.vis_frame_size),
- pkt->data.frame.vis_frame_size);
- }
-
- if (!HandleDecodeResult(res_dec, decoder.get())) break;
-
- has_dxdata = true;
- }
- ASSERT_GE(pkt->data.frame.pts, last_pts_);
- last_pts_ = pkt->data.frame.pts;
- FramePktHook(pkt);
- break;
-
- case AOM_CODEC_PSNR_PKT: PSNRPktHook(pkt); break;
-
- default: break;
- }
- }
-
- if (has_dxdata && has_cxdata) {
- const aom_image_t *img_enc = encoder->GetPreviewFrame();
- DxDataIterator dec_iter = decoder->GetDxData();
- const aom_image_t *img_dec = dec_iter.Next();
- if (img_enc && img_dec) {
- const bool res =
- compare_img(img_enc, img_dec, NULL, NULL, NULL, NULL, NULL);
- if (!res) { // Mismatch
- MismatchHook(img_enc, img_dec);
- }
- }
- if (img_dec) DecompressedFrameHook(*img_dec, video->pts());
- }
- if (!Continue()) break;
- }
-
- EndPassHook();
-
- if (!Continue()) break;
- }
-}
-
-} // namespace libaom_test
diff --git a/third_party/aom/test/encode_test_driver.h b/third_party/aom/test/encode_test_driver.h
deleted file mode 100644
index 4f3f855cf..000000000
--- a/third_party/aom/test/encode_test_driver.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_ENCODE_TEST_DRIVER_H_
-#define AOM_TEST_ENCODE_TEST_DRIVER_H_
-
-#include <string>
-#include <vector>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#if CONFIG_AV1_ENCODER
-#include "aom/aomcx.h"
-#endif
-#include "aom/aom_encoder.h"
-
-namespace libaom_test {
-
-class CodecFactory;
-class VideoSource;
-
-enum TestMode { kRealTime, kOnePassGood, kTwoPassGood };
-#define ALL_TEST_MODES \
- ::testing::Values(::libaom_test::kRealTime, ::libaom_test::kOnePassGood, \
- ::libaom_test::kTwoPassGood)
-
-#define ONE_PASS_TEST_MODES \
- ::testing::Values(::libaom_test::kRealTime, ::libaom_test::kOnePassGood)
-
-#define TWO_PASS_TEST_MODES ::testing::Values(::libaom_test::kTwoPassGood)
-
-#define NONREALTIME_TEST_MODES \
- ::testing::Values(::libaom_test::kOnePassGood, ::libaom_test::kTwoPassGood)
-
-// Provides an object to handle the libaom get_cx_data() iteration pattern
-class CxDataIterator {
- public:
- explicit CxDataIterator(aom_codec_ctx_t *encoder)
- : encoder_(encoder), iter_(NULL) {}
-
- const aom_codec_cx_pkt_t *Next() {
- return aom_codec_get_cx_data(encoder_, &iter_);
- }
-
- private:
- aom_codec_ctx_t *encoder_;
- aom_codec_iter_t iter_;
-};
-
-// Implements an in-memory store for libaom twopass statistics
-class TwopassStatsStore {
- public:
- void Append(const aom_codec_cx_pkt_t &pkt) {
- buffer_.append(reinterpret_cast<char *>(pkt.data.twopass_stats.buf),
- pkt.data.twopass_stats.sz);
- }
-
- aom_fixed_buf_t buf() {
- const aom_fixed_buf_t buf = { &buffer_[0], buffer_.size() };
- return buf;
- }
-
- void Reset() { buffer_.clear(); }
-
- protected:
- std::string buffer_;
-};
-
-// Provides a simplified interface to manage one video encoding pass, given
-// a configuration and video source.
-//
-// TODO(jkoleszar): The exact services it provides and the appropriate
-// level of abstraction will be fleshed out as more tests are written.
-class Encoder {
- public:
- Encoder(aom_codec_enc_cfg_t cfg, const uint32_t init_flags,
- TwopassStatsStore *stats)
- : cfg_(cfg), init_flags_(init_flags), stats_(stats) {
- memset(&encoder_, 0, sizeof(encoder_));
- }
-
- virtual ~Encoder() { aom_codec_destroy(&encoder_); }
-
- CxDataIterator GetCxData() { return CxDataIterator(&encoder_); }
-
- void InitEncoder(VideoSource *video);
-
- const aom_image_t *GetPreviewFrame() {
- return aom_codec_get_preview_frame(&encoder_);
- }
- // This is a thin wrapper around aom_codec_encode(), so refer to
- // aom_encoder.h for its semantics.
- void EncodeFrame(VideoSource *video, const unsigned long frame_flags);
-
- // Convenience wrapper for EncodeFrame()
- void EncodeFrame(VideoSource *video) { EncodeFrame(video, 0); }
-
- void Control(int ctrl_id, int arg) {
- const aom_codec_err_t res = aom_codec_control_(&encoder_, ctrl_id, arg);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-
- void Control(int ctrl_id, int *arg) {
- const aom_codec_err_t res = aom_codec_control_(&encoder_, ctrl_id, arg);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-
- void Control(int ctrl_id, struct aom_scaling_mode *arg) {
- const aom_codec_err_t res = aom_codec_control_(&encoder_, ctrl_id, arg);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-
-#if CONFIG_AV1_ENCODER
- void Control(int ctrl_id, aom_active_map_t *arg) {
- const aom_codec_err_t res = aom_codec_control_(&encoder_, ctrl_id, arg);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- }
-#endif
-
- void Config(const aom_codec_enc_cfg_t *cfg) {
- const aom_codec_err_t res = aom_codec_enc_config_set(&encoder_, cfg);
- ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
- cfg_ = *cfg;
- }
-
- protected:
- virtual aom_codec_iface_t *CodecInterface() const = 0;
-
- const char *EncoderError() {
- const char *detail = aom_codec_error_detail(&encoder_);
- return detail ? detail : aom_codec_error(&encoder_);
- }
-
- // Encode an image
- void EncodeFrameInternal(const VideoSource &video,
- const unsigned long frame_flags);
-
- // Flush the encoder on EOS
- void Flush();
-
- aom_codec_ctx_t encoder_;
- aom_codec_enc_cfg_t cfg_;
- unsigned long init_flags_;
- TwopassStatsStore *stats_;
-};
-
-// Common test functionality for all Encoder tests.
-//
-// This class is a mixin which provides the main loop common to all
-// encoder tests. It provides hooks which can be overridden by subclasses
-// to implement each test's specific behavior, while centralizing the bulk
-// of the boilerplate. Note that it doesn't inherit the gtest testing
-// classes directly, so that tests can be parameterized differently.
-class EncoderTest {
- protected:
- explicit EncoderTest(const CodecFactory *codec)
- : codec_(codec), abort_(false), init_flags_(0), frame_flags_(0),
- last_pts_(0), mode_(kRealTime) {
- // Default to 1 thread.
- cfg_.g_threads = 1;
- }
-
- virtual ~EncoderTest() {}
-
- // Initialize the cfg_ member with the default configuration.
- void InitializeConfig();
-
- // Map the TestMode enum to the passes_ variables.
- void SetMode(TestMode mode);
-
- // Set encoder flag.
- void set_init_flags(unsigned long flag) { // NOLINT(runtime/int)
- init_flags_ = flag;
- }
-
- // Main loop
- virtual void RunLoop(VideoSource *video);
-
- // Hook to be called at the beginning of a pass.
- virtual void BeginPassHook(unsigned int /*pass*/) {}
-
- // Hook to be called at the end of a pass.
- virtual void EndPassHook() {}
-
- // Hook to be called before encoding a frame.
- virtual void PreEncodeFrameHook(VideoSource * /*video*/) {}
- virtual void PreEncodeFrameHook(VideoSource * /*video*/,
- Encoder * /*encoder*/) {}
-
- // Hook to be called on every compressed data packet.
- virtual void FramePktHook(const aom_codec_cx_pkt_t * /*pkt*/) {}
-
- // Hook to be called on every PSNR packet.
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t * /*pkt*/) {}
-
- // Hook to determine whether the encode loop should continue.
- virtual bool Continue() const {
- return !(::testing::Test::HasFatalFailure() || abort_);
- }
-
- // Hook to determine whether to decode frame after encoding
- virtual bool DoDecode() const { return true; }
-
- // Hook to determine whether to decode invisible frames after encoding
- virtual bool DoDecodeInvisible() const { return true; }
-
- // Hook to handle encode/decode mismatch
- virtual void MismatchHook(const aom_image_t *img1, const aom_image_t *img2);
-
- // Hook to be called on every decompressed frame.
- virtual void DecompressedFrameHook(const aom_image_t & /*img*/,
- aom_codec_pts_t /*pts*/) {}
-
- // Hook to be called to handle decode result. Return true to continue.
- virtual bool HandleDecodeResult(const aom_codec_err_t res_dec,
- Decoder *decoder) {
- EXPECT_EQ(AOM_CODEC_OK, res_dec) << decoder->DecodeError();
- return AOM_CODEC_OK == res_dec;
- }
-
- // Hook that can modify the encoder's output data
- virtual const aom_codec_cx_pkt_t *MutateEncoderOutputHook(
- const aom_codec_cx_pkt_t *pkt) {
- return pkt;
- }
-
- const CodecFactory *codec_;
- bool abort_;
- aom_codec_enc_cfg_t cfg_;
- unsigned int passes_;
- TwopassStatsStore stats_;
- unsigned long init_flags_;
- unsigned long frame_flags_;
- aom_codec_pts_t last_pts_;
- TestMode mode_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_ENCODE_TEST_DRIVER_H_
diff --git a/third_party/aom/test/encodetxb_test.cc b/third_party/aom/test/encodetxb_test.cc
deleted file mode 100644
index 11cc07368..000000000
--- a/third_party/aom/test/encodetxb_test.cc
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "aom_ports/mem.h"
-#include "av1/common/idct.h"
-#include "av1/common/onyxc_int.h"
-#include "av1/common/scan.h"
-#include "av1/common/txb_common.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-namespace {
-using libaom_test::ACMRandom;
-
-typedef void (*GetNzMapContextsFunc)(const uint8_t *const levels,
- const int16_t *const scan,
- const uint16_t eob, const TX_SIZE tx_size,
- const TX_CLASS tx_class,
- int8_t *const coeff_contexts);
-
-class EncodeTxbTest : public ::testing::TestWithParam<GetNzMapContextsFunc> {
- public:
- EncodeTxbTest() : get_nz_map_contexts_func_(GetParam()) {}
-
- virtual ~EncodeTxbTest() {}
-
- virtual void SetUp() {
- coeff_contexts_ref_ = reinterpret_cast<int8_t *>(
- aom_memalign(16, sizeof(*coeff_contexts_ref_) * MAX_TX_SQUARE));
- ASSERT_TRUE(coeff_contexts_ref_ != NULL);
- coeff_contexts_ = reinterpret_cast<int8_t *>(
- aom_memalign(16, sizeof(*coeff_contexts_) * MAX_TX_SQUARE));
- ASSERT_TRUE(coeff_contexts_ != NULL);
- }
-
- virtual void TearDown() {
- aom_free(coeff_contexts_ref_);
- aom_free(coeff_contexts_);
- libaom_test::ClearSystemState();
- }
-
- void GetNzMapContextsRun() {
- const int kNumTests = 10;
- int result = 0;
-
- for (int is_inter = 0; is_inter < 2; ++is_inter) {
- for (int tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) {
- const TX_CLASS tx_class = tx_type_to_class[tx_type];
- for (int tx_size = TX_4X4; tx_size < TX_SIZES_ALL; ++tx_size) {
- const int bwl = get_txb_bwl((TX_SIZE)tx_size);
- const int width = get_txb_wide((TX_SIZE)tx_size);
- const int height = get_txb_high((TX_SIZE)tx_size);
- const int real_width = tx_size_wide[tx_size];
- const int real_height = tx_size_high[tx_size];
- const int16_t *const scan = av1_scan_orders[tx_size][tx_type].scan;
-
- levels_ = set_levels(levels_buf_, width);
- for (int i = 0; i < kNumTests && !result; ++i) {
- for (int eob = 1; eob <= width * height && !result; ++eob) {
- InitDataWithEob(scan, bwl, eob);
-
- av1_get_nz_map_contexts_c(levels_, scan, eob, (TX_SIZE)tx_size,
- tx_class, coeff_contexts_ref_);
- get_nz_map_contexts_func_(levels_, scan, eob, (TX_SIZE)tx_size,
- tx_class, coeff_contexts_);
-
- result = Compare(scan, eob);
-
- EXPECT_EQ(result, 0)
- << " tx_class " << tx_class << " width " << real_width
- << " height " << real_height << " eob " << eob;
- }
- }
- }
- }
- }
- }
-
- void SpeedTestGetNzMapContextsRun() {
- const int kNumTests = 2000000000;
- aom_usec_timer timer;
-
- printf("Note: Only test the largest possible eob case!\n");
- for (int tx_size = TX_4X4; tx_size < TX_SIZES_ALL; ++tx_size) {
- const int bwl = get_txb_bwl((TX_SIZE)tx_size);
- const int width = get_txb_wide((TX_SIZE)tx_size);
- const int height = get_txb_high((TX_SIZE)tx_size);
- const int real_width = tx_size_wide[tx_size];
- const int real_height = tx_size_high[tx_size];
- const TX_TYPE tx_type = DCT_DCT;
- const TX_CLASS tx_class = tx_type_to_class[tx_type];
- const int16_t *const scan = av1_scan_orders[tx_size][tx_type].scan;
- const int eob = width * height;
- const int numTests = kNumTests / (width * height);
-
- levels_ = set_levels(levels_buf_, width);
- InitDataWithEob(scan, bwl, eob);
-
- aom_usec_timer_start(&timer);
- for (int i = 0; i < numTests; ++i) {
- get_nz_map_contexts_func_(levels_, scan, eob, (TX_SIZE)tx_size,
- tx_class, coeff_contexts_);
- }
- aom_usec_timer_mark(&timer);
-
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("get_nz_map_contexts_%2dx%2d: %7.1f ms\n", real_width, real_height,
- elapsed_time / 1000.0);
- }
- }
-
- private:
- void InitDataWithEob(const int16_t *const scan, const int bwl,
- const int eob) {
- memset(levels_buf_, 0, sizeof(levels_buf_));
- memset(coeff_contexts_, 0, sizeof(*coeff_contexts_) * MAX_TX_SQUARE);
-
- for (int c = 0; c < eob; ++c) {
- levels_[get_padded_idx(scan[c], bwl)] =
- static_cast<uint8_t>(clamp(rnd_.Rand8(), 0, INT8_MAX));
- coeff_contexts_[scan[c]] = rnd_.Rand16() >> 1;
- }
-
- memcpy(coeff_contexts_ref_, coeff_contexts_,
- sizeof(*coeff_contexts_) * MAX_TX_SQUARE);
- }
-
- bool Compare(const int16_t *const scan, const int eob) const {
- bool result = false;
- if (memcmp(coeff_contexts_, coeff_contexts_ref_,
- sizeof(*coeff_contexts_ref_) * MAX_TX_SQUARE)) {
- for (int i = 0; i < eob; i++) {
- const int pos = scan[i];
- if (coeff_contexts_ref_[pos] != coeff_contexts_[pos]) {
- printf("coeff_contexts_[%d] diff:%6d (ref),%6d (opt)\n", pos,
- coeff_contexts_ref_[pos], coeff_contexts_[pos]);
- result = true;
- break;
- }
- }
- }
- return result;
- }
-
- GetNzMapContextsFunc get_nz_map_contexts_func_;
- ACMRandom rnd_;
- uint8_t levels_buf_[TX_PAD_2D];
- uint8_t *levels_;
- int8_t *coeff_contexts_ref_;
- int8_t *coeff_contexts_;
-};
-
-TEST_P(EncodeTxbTest, GetNzMapContexts) { GetNzMapContextsRun(); }
-
-TEST_P(EncodeTxbTest, DISABLED_SpeedTestGetNzMapContexts) {
- SpeedTestGetNzMapContextsRun();
-}
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, EncodeTxbTest,
- ::testing::Values(av1_get_nz_map_contexts_sse2));
-#endif
-
-typedef void (*av1_txb_init_levels_func)(const tran_low_t *const coeff,
- const int width, const int height,
- uint8_t *const levels);
-
-typedef ::testing::tuple<av1_txb_init_levels_func, int> TxbInitLevelParam;
-
-class EncodeTxbInitLevelTest
- : public ::testing::TestWithParam<TxbInitLevelParam> {
- public:
- virtual ~EncodeTxbInitLevelTest() {}
- virtual void TearDown() { libaom_test::ClearSystemState(); }
- void RunTest(av1_txb_init_levels_func test_func, int tx_size, int is_speed);
-};
-
-void EncodeTxbInitLevelTest::RunTest(av1_txb_init_levels_func test_func,
- int tx_size, int is_speed) {
- const int width = get_txb_wide((TX_SIZE)tx_size);
- const int height = get_txb_high((TX_SIZE)tx_size);
- tran_low_t coeff[MAX_TX_SQUARE];
-
- uint8_t levels_buf[2][TX_PAD_2D];
- uint8_t *const levels0 = set_levels(levels_buf[0], width);
- uint8_t *const levels1 = set_levels(levels_buf[1], width);
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int i = 0; i < width * height; i++) {
- coeff[i] = rnd.Rand15Signed() + rnd.Rand15Signed();
- }
- for (int i = 0; i < TX_PAD_2D; i++) {
- levels_buf[0][i] = rnd.Rand8();
- levels_buf[1][i] = rnd.Rand8();
- }
- const int run_times = is_speed ? (width * height) * 10000 : 1;
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- av1_txb_init_levels_c(coeff, width, height, levels0);
- }
- const double t1 = get_time_mark(&timer);
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- test_func(coeff, width, height, levels1);
- }
- const double t2 = get_time_mark(&timer);
- if (is_speed) {
- printf("init %3dx%-3d:%7.2f/%7.2fns", width, height, t1, t2);
- printf("(%3.2f)\n", t1 / t2);
- }
- const int stride = width + TX_PAD_HOR;
- for (int r = 0; r < height + TX_PAD_VER; ++r) {
- for (int c = 0; c < stride; ++c) {
- ASSERT_EQ(levels_buf[0][c + r * stride], levels_buf[1][c + r * stride])
- << "[" << r << "," << c << "] " << run_times << width << "x"
- << height;
- }
- }
-}
-
-TEST_P(EncodeTxbInitLevelTest, match) {
- RunTest(GET_PARAM(0), GET_PARAM(1), 0);
-}
-
-TEST_P(EncodeTxbInitLevelTest, DISABLED_Speed) {
- RunTest(GET_PARAM(0), GET_PARAM(1), 1);
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, EncodeTxbInitLevelTest,
- ::testing::Combine(::testing::Values(&av1_txb_init_levels_sse4_1),
- ::testing::Range(0, static_cast<int>(TX_SIZES_ALL), 1)));
-#endif
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, EncodeTxbInitLevelTest,
- ::testing::Combine(::testing::Values(&av1_txb_init_levels_avx2),
- ::testing::Range(0, static_cast<int>(TX_SIZES_ALL), 1)));
-#endif
-} // namespace
diff --git a/third_party/aom/test/end_to_end_test.cc b/third_party/aom/test/end_to_end_test.cc
deleted file mode 100644
index 1ac0ae931..000000000
--- a/third_party/aom/test/end_to_end_test.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "test/yuv_video_source.h"
-
-namespace {
-
-const unsigned int kWidth = 160;
-const unsigned int kHeight = 90;
-const unsigned int kFramerate = 50;
-const unsigned int kFrames = 10;
-const int kBitrate = 500;
-// List of psnr thresholds for speed settings 0-7 and 5 encoding modes
-const double kPsnrThreshold[][5] = {
-// Note:
-// AV1 HBD average PSNR is slightly lower than AV1.
-// We make two cases here to enable the testing and
-// guard picture quality.
-#if CONFIG_AV1_ENCODER
- { 36.0, 37.0, 37.0, 37.0, 37.0 }, { 31.0, 36.0, 36.0, 36.0, 36.0 },
- { 31.0, 35.0, 35.0, 35.0, 35.0 }, { 31.0, 34.0, 34.0, 34.0, 34.0 },
- { 31.0, 33.0, 33.0, 33.0, 33.0 }, { 31.0, 32.0, 32.0, 32.0, 32.0 },
- { 30.0, 31.0, 31.0, 31.0, 31.0 }, { 29.0, 30.0, 30.0, 30.0, 30.0 },
-#else
- { 36.0, 37.0, 37.0, 37.0, 37.0 }, { 35.0, 36.0, 36.0, 36.0, 36.0 },
- { 34.0, 35.0, 35.0, 35.0, 35.0 }, { 33.0, 34.0, 34.0, 34.0, 34.0 },
- { 32.0, 33.0, 33.0, 33.0, 33.0 }, { 31.0, 32.0, 32.0, 32.0, 32.0 },
- { 30.0, 31.0, 31.0, 31.0, 31.0 }, { 29.0, 30.0, 30.0, 30.0, 30.0 },
-#endif // CONFIG_AV1_ENCODER
-};
-
-typedef struct {
- const char *filename;
- unsigned int input_bit_depth;
- aom_img_fmt fmt;
- aom_bit_depth_t bit_depth;
- unsigned int profile;
-} TestVideoParam;
-
-const TestVideoParam kTestVectors[] = {
- { "park_joy_90p_8_420.y4m", 8, AOM_IMG_FMT_I420, AOM_BITS_8, 0 },
- { "park_joy_90p_8_422.y4m", 8, AOM_IMG_FMT_I422, AOM_BITS_8, 2 },
- { "park_joy_90p_8_444.y4m", 8, AOM_IMG_FMT_I444, AOM_BITS_8, 1 },
- { "park_joy_90p_10_420.y4m", 10, AOM_IMG_FMT_I42016, AOM_BITS_10, 0 },
- { "park_joy_90p_10_422.y4m", 10, AOM_IMG_FMT_I42216, AOM_BITS_10, 2 },
- { "park_joy_90p_10_444.y4m", 10, AOM_IMG_FMT_I44416, AOM_BITS_10, 1 },
- { "park_joy_90p_12_420.y4m", 12, AOM_IMG_FMT_I42016, AOM_BITS_12, 2 },
- { "park_joy_90p_12_422.y4m", 12, AOM_IMG_FMT_I42216, AOM_BITS_12, 2 },
- { "park_joy_90p_12_444.y4m", 12, AOM_IMG_FMT_I44416, AOM_BITS_12, 2 },
-};
-
-// Encoding modes tested
-const libaom_test::TestMode kEncodingModeVectors[] = {
- ::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood,
- ::libaom_test::kRealTime,
-};
-
-// Speed settings tested
-const int kCpuUsedVectors[] = { 1, 2, 3, 5, 6 };
-
-int is_extension_y4m(const char *filename) {
- const char *dot = strrchr(filename, '.');
- if (!dot || dot == filename)
- return 0;
- else
- return !strcmp(dot, ".y4m");
-}
-
-class EndToEndTest
- : public ::libaom_test::CodecTestWith3Params<libaom_test::TestMode,
- TestVideoParam, int>,
- public ::libaom_test::EncoderTest {
- protected:
- EndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(2)),
- cpu_used_(GET_PARAM(3)), psnr_(0.0), nframes_(0),
- encoding_mode_(GET_PARAM(1)) {}
-
- virtual ~EndToEndTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- cfg_.g_lag_in_frames = 5;
- cfg_.rc_end_usage = AOM_VBR;
- } else {
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- }
- }
-
- virtual void BeginPassHook(unsigned int) {
- psnr_ = 0.0;
- nframes_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- psnr_ += pkt->data.psnr.psnr[0];
- nframes_++;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AV1E_SET_TILE_COLUMNS, 4);
- encoder->Control(AOME_SET_CPUUSED, cpu_used_);
- // Test screen coding tools at cpu_used = 1 && encoding mode is two-pass.
- if (cpu_used_ == 1 && encoding_mode_ == ::libaom_test::kTwoPassGood)
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_SCREEN);
- else
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_DEFAULT);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
- }
-
- double GetAveragePsnr() const {
- if (nframes_) return psnr_ / nframes_;
- return 0.0;
- }
-
- double GetPsnrThreshold() {
- return kPsnrThreshold[cpu_used_][encoding_mode_];
- }
-
- void DoTest() {
- cfg_.rc_target_bitrate = kBitrate;
- cfg_.g_error_resilient = 0;
- cfg_.g_profile = test_video_param_.profile;
- cfg_.g_input_bit_depth = test_video_param_.input_bit_depth;
- cfg_.g_bit_depth = test_video_param_.bit_depth;
- init_flags_ = AOM_CODEC_USE_PSNR;
- if (cfg_.g_bit_depth > 8) init_flags_ |= AOM_CODEC_USE_HIGHBITDEPTH;
-
- testing::internal::scoped_ptr<libaom_test::VideoSource> video;
- if (is_extension_y4m(test_video_param_.filename)) {
- video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
- kFrames));
- } else {
- video.reset(new libaom_test::YUVVideoSource(
- test_video_param_.filename, test_video_param_.fmt, kWidth, kHeight,
- kFramerate, 1, 0, kFrames));
- }
- ASSERT_TRUE(video.get() != NULL);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
- const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
- << "cpu used = " << cpu_used_ << ", encoding mode = " << encoding_mode_;
- }
-
- TestVideoParam test_video_param_;
- int cpu_used_;
-
- private:
- double psnr_;
- unsigned int nframes_;
- libaom_test::TestMode encoding_mode_;
-};
-
-class EndToEndTestLarge : public EndToEndTest {};
-
-TEST_P(EndToEndTestLarge, EndtoEndPSNRTest) { DoTest(); }
-
-TEST_P(EndToEndTest, EndtoEndPSNRTest) { DoTest(); }
-
-AV1_INSTANTIATE_TEST_CASE(EndToEndTestLarge,
- ::testing::ValuesIn(kEncodingModeVectors),
- ::testing::ValuesIn(kTestVectors),
- ::testing::ValuesIn(kCpuUsedVectors));
-
-AV1_INSTANTIATE_TEST_CASE(EndToEndTest,
- ::testing::Values(kEncodingModeVectors[0]),
- ::testing::Values(kTestVectors[2]), // 444
- ::testing::Values(kCpuUsedVectors[2]));
-} // namespace
diff --git a/third_party/aom/test/error_block_test.cc b/third_party/aom/test/error_block_test.cc
deleted file mode 100644
index 353947c3d..000000000
--- a/third_party/aom/test/error_block_test.cc
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cmath>
-#include <cstdlib>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/entropy.h"
-#include "aom/aom_codec.h"
-#include "aom/aom_integer.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-const int kNumIterations = 1000;
-
-typedef int64_t (*ErrorBlockFunc)(const tran_low_t *coeff,
- const tran_low_t *dqcoeff,
- intptr_t block_size, int64_t *ssz, int bps);
-
-typedef ::testing::tuple<ErrorBlockFunc, ErrorBlockFunc, aom_bit_depth_t>
- ErrorBlockParam;
-
-class ErrorBlockTest : public ::testing::TestWithParam<ErrorBlockParam> {
- public:
- virtual ~ErrorBlockTest() {}
- virtual void SetUp() {
- error_block_op_ = GET_PARAM(0);
- ref_error_block_op_ = GET_PARAM(1);
- bit_depth_ = GET_PARAM(2);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- aom_bit_depth_t bit_depth_;
- ErrorBlockFunc error_block_op_;
- ErrorBlockFunc ref_error_block_op_;
-};
-
-TEST_P(ErrorBlockTest, OperationCheck) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, tran_low_t, coeff[4096]);
- DECLARE_ALIGNED(16, tran_low_t, dqcoeff[4096]);
- int err_count_total = 0;
- int first_failure = -1;
- intptr_t block_size;
- int64_t ssz;
- int64_t ret;
- int64_t ref_ssz;
- int64_t ref_ret;
- const int msb = bit_depth_ + 8 - 1;
- for (int i = 0; i < kNumIterations; ++i) {
- int err_count = 0;
- block_size = 16 << (i % 9); // All block sizes from 4x4, 8x4 ..64x64
- for (int j = 0; j < block_size; j++) {
- // coeff and dqcoeff will always have at least the same sign, and this
- // can be used for optimization, so generate test input precisely.
- if (rnd(2)) {
- // Positive number
- coeff[j] = rnd(1 << msb);
- dqcoeff[j] = rnd(1 << msb);
- } else {
- // Negative number
- coeff[j] = -rnd(1 << msb);
- dqcoeff[j] = -rnd(1 << msb);
- }
- }
- ref_ret =
- ref_error_block_op_(coeff, dqcoeff, block_size, &ref_ssz, bit_depth_);
- ASM_REGISTER_STATE_CHECK(
- ret = error_block_op_(coeff, dqcoeff, block_size, &ssz, bit_depth_));
- err_count += (ref_ret != ret) | (ref_ssz != ssz);
- if (err_count && !err_count_total) {
- first_failure = i;
- }
- err_count_total += err_count;
- }
- EXPECT_EQ(0, err_count_total)
- << "Error: Error Block Test, C output doesn't match optimized output. "
- << "First failed at test case " << first_failure;
-}
-
-TEST_P(ErrorBlockTest, ExtremeValues) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, tran_low_t, coeff[4096]);
- DECLARE_ALIGNED(16, tran_low_t, dqcoeff[4096]);
- int err_count_total = 0;
- int first_failure = -1;
- intptr_t block_size;
- int64_t ssz;
- int64_t ret;
- int64_t ref_ssz;
- int64_t ref_ret;
- const int msb = bit_depth_ + 8 - 1;
- int max_val = ((1 << msb) - 1);
- for (int i = 0; i < kNumIterations; ++i) {
- int err_count = 0;
- int k = (i / 9) % 9;
-
- // Change the maximum coeff value, to test different bit boundaries
- if (k == 8 && (i % 9) == 0) {
- max_val >>= 1;
- }
- block_size = 16 << (i % 9); // All block sizes from 4x4, 8x4 ..64x64
- for (int j = 0; j < block_size; j++) {
- if (k < 4) {
- // Test at positive maximum values
- coeff[j] = k % 2 ? max_val : 0;
- dqcoeff[j] = (k >> 1) % 2 ? max_val : 0;
- } else if (k < 8) {
- // Test at negative maximum values
- coeff[j] = k % 2 ? -max_val : 0;
- dqcoeff[j] = (k >> 1) % 2 ? -max_val : 0;
- } else {
- if (rnd(2)) {
- // Positive number
- coeff[j] = rnd(1 << 14);
- dqcoeff[j] = rnd(1 << 14);
- } else {
- // Negative number
- coeff[j] = -rnd(1 << 14);
- dqcoeff[j] = -rnd(1 << 14);
- }
- }
- }
- ref_ret =
- ref_error_block_op_(coeff, dqcoeff, block_size, &ref_ssz, bit_depth_);
- ASM_REGISTER_STATE_CHECK(
- ret = error_block_op_(coeff, dqcoeff, block_size, &ssz, bit_depth_));
- err_count += (ref_ret != ret) | (ref_ssz != ssz);
- if (err_count && !err_count_total) {
- first_failure = i;
- }
- err_count_total += err_count;
- }
- EXPECT_EQ(0, err_count_total)
- << "Error: Error Block Test, C output doesn't match optimized output. "
- << "First failed at test case " << first_failure;
-}
-
-#if (HAVE_SSE2 || HAVE_AVX)
-using ::testing::make_tuple;
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, ErrorBlockTest,
- ::testing::Values(make_tuple(&av1_highbd_block_error_sse2,
- &av1_highbd_block_error_c, AOM_BITS_10),
- make_tuple(&av1_highbd_block_error_sse2,
- &av1_highbd_block_error_c, AOM_BITS_12),
- make_tuple(&av1_highbd_block_error_sse2,
- &av1_highbd_block_error_c, AOM_BITS_8)));
-#endif // HAVE_SSE2
-} // namespace
diff --git a/third_party/aom/test/error_resilience_test.cc b/third_party/aom/test/error_resilience_test.cc
deleted file mode 100644
index 13ac0bf93..000000000
--- a/third_party/aom/test/error_resilience_test.cc
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-const int kMaxErrorFrames = 12;
-const int kMaxInvisibleErrorFrames = 12;
-const int kMaxDroppableFrames = 12;
-const int kMaxErrorResilientFrames = 12;
-const int kMaxNoMFMVFrames = 12;
-const int kMaxPrimRefNoneFrames = 12;
-const int kMaxSFrames = 12;
-const int kCpuUsed = 1;
-
-class ErrorResilienceTestLarge
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- ErrorResilienceTestLarge()
- : EncoderTest(GET_PARAM(0)), psnr_(0.0), nframes_(0), mismatch_psnr_(0.0),
- mismatch_nframes_(0), encoding_mode_(GET_PARAM(1)), allow_mismatch_(0) {
- Reset();
- }
-
- virtual ~ErrorResilienceTestLarge() {}
-
- void Reset() {
- error_nframes_ = 0;
- invisible_error_nframes_ = 0;
- droppable_nframes_ = 0;
- error_resilient_nframes_ = 0;
- nomfmv_nframes_ = 0;
- prim_ref_none_nframes_ = 0;
- s_nframes_ = 0;
- }
-
- void SetupEncoder(int bitrate, int lag) {
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = bitrate;
- cfg_.kf_mode = AOM_KF_DISABLED;
- cfg_.g_lag_in_frames = lag;
- init_flags_ = AOM_CODEC_USE_PSNR;
- }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
- psnr_ = 0.0;
- nframes_ = 0;
- decoded_nframes_ = 0;
- mismatch_psnr_ = 0.0;
- mismatch_nframes_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- psnr_ += pkt->data.psnr.psnr[0];
- nframes_++;
- }
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (video->frame() == 0) encoder->Control(AOME_SET_CPUUSED, kCpuUsed);
- frame_flags_ &=
- ~(AOM_EFLAG_NO_UPD_LAST | AOM_EFLAG_NO_UPD_GF | AOM_EFLAG_NO_UPD_ARF |
- AOM_EFLAG_NO_REF_FRAME_MVS | AOM_EFLAG_ERROR_RESILIENT |
- AOM_EFLAG_SET_S_FRAME | AOM_EFLAG_SET_PRIMARY_REF_NONE);
- if (droppable_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < droppable_nframes_; ++i) {
- if (droppable_frames_[i] == video->frame()) {
- std::cout << " Encoding droppable frame: "
- << droppable_frames_[i] << "\n";
- frame_flags_ |= (AOM_EFLAG_NO_UPD_LAST | AOM_EFLAG_NO_UPD_GF |
- AOM_EFLAG_NO_UPD_ARF);
- break;
- }
- }
- }
-
- if (error_resilient_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < error_resilient_nframes_; ++i) {
- if (error_resilient_frames_[i] == video->frame()) {
- std::cout << " Encoding error_resilient frame: "
- << error_resilient_frames_[i] << "\n";
- frame_flags_ |= AOM_EFLAG_ERROR_RESILIENT;
- break;
- }
- }
- }
-
- if (nomfmv_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < nomfmv_nframes_; ++i) {
- if (nomfmv_frames_[i] == video->frame()) {
- std::cout << " Encoding no mfmv frame: "
- << nomfmv_frames_[i] << "\n";
- frame_flags_ |= AOM_EFLAG_NO_REF_FRAME_MVS;
- break;
- }
- }
- }
-
- if (prim_ref_none_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < prim_ref_none_nframes_; ++i) {
- if (prim_ref_none_frames_[i] == video->frame()) {
- std::cout << " Encoding no PRIMARY_REF_NONE frame: "
- << prim_ref_none_frames_[i] << "\n";
- frame_flags_ |= AOM_EFLAG_SET_PRIMARY_REF_NONE;
- break;
- }
- }
- }
-
- encoder->Control(AV1E_SET_S_FRAME_MODE, 0);
- if (s_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < s_nframes_; ++i) {
- if (s_frames_[i] == video->frame()) {
- std::cout << " Encoding S frame: " << s_frames_[i]
- << "\n";
- frame_flags_ |= AOM_EFLAG_SET_S_FRAME;
- break;
- }
- }
- }
- }
-
- double GetAveragePsnr() const {
- if (nframes_) return psnr_ / nframes_;
- return 0.0;
- }
-
- double GetAverageMismatchPsnr() const {
- if (mismatch_nframes_) return mismatch_psnr_ / mismatch_nframes_;
- return 0.0;
- }
-
- virtual bool DoDecode() const {
- if (error_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < error_nframes_; ++i) {
- if (error_frames_[i] == nframes_ - 1) {
- std::cout << " Skipping decoding frame: "
- << error_frames_[i] << "\n";
- return 0;
- }
- }
- }
- return 1;
- }
-
- virtual bool DoDecodeInvisible() const {
- if (invisible_error_nframes_ > 0 &&
- (cfg_.g_pass == AOM_RC_LAST_PASS || cfg_.g_pass == AOM_RC_ONE_PASS)) {
- for (unsigned int i = 0; i < invisible_error_nframes_; ++i) {
- if (invisible_error_frames_[i] == nframes_ - 1) {
- std::cout << " Skipping decoding all invisible frames in "
- "frame pkt: "
- << invisible_error_frames_[i] << "\n";
- return 0;
- }
- }
- }
- return 1;
- }
-
- virtual void MismatchHook(const aom_image_t *img1, const aom_image_t *img2) {
- if (allow_mismatch_) {
- double mismatch_psnr = compute_psnr(img1, img2);
- mismatch_psnr_ += mismatch_psnr;
- ++mismatch_nframes_;
- // std::cout << "Mismatch frame psnr: " << mismatch_psnr << "\n";
- } else {
- ::libaom_test::EncoderTest::MismatchHook(img1, img2);
- }
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- (void)img;
- (void)pts;
- ++decoded_nframes_;
- }
-
- void SetErrorFrames(int num, unsigned int *list) {
- if (num > kMaxErrorFrames)
- num = kMaxErrorFrames;
- else if (num < 0)
- num = 0;
- error_nframes_ = num;
- for (unsigned int i = 0; i < error_nframes_; ++i)
- error_frames_[i] = list[i];
- }
-
- void SetInvisibleErrorFrames(int num, unsigned int *list) {
- if (num > kMaxInvisibleErrorFrames)
- num = kMaxInvisibleErrorFrames;
- else if (num < 0)
- num = 0;
- invisible_error_nframes_ = num;
- for (unsigned int i = 0; i < invisible_error_nframes_; ++i)
- invisible_error_frames_[i] = list[i];
- }
-
- void SetDroppableFrames(int num, unsigned int *list) {
- if (num > kMaxDroppableFrames)
- num = kMaxDroppableFrames;
- else if (num < 0)
- num = 0;
- droppable_nframes_ = num;
- for (unsigned int i = 0; i < droppable_nframes_; ++i)
- droppable_frames_[i] = list[i];
- }
-
- void SetErrorResilientFrames(int num, unsigned int *list) {
- if (num > kMaxErrorResilientFrames)
- num = kMaxErrorResilientFrames;
- else if (num < 0)
- num = 0;
- error_resilient_nframes_ = num;
- for (unsigned int i = 0; i < error_resilient_nframes_; ++i)
- error_resilient_frames_[i] = list[i];
- }
-
- void SetNoMFMVFrames(int num, unsigned int *list) {
- if (num > kMaxNoMFMVFrames)
- num = kMaxNoMFMVFrames;
- else if (num < 0)
- num = 0;
- nomfmv_nframes_ = num;
- for (unsigned int i = 0; i < nomfmv_nframes_; ++i)
- nomfmv_frames_[i] = list[i];
- }
-
- void SetPrimaryRefNoneFrames(int num, unsigned int *list) {
- if (num > kMaxPrimRefNoneFrames)
- num = kMaxPrimRefNoneFrames;
- else if (num < 0)
- num = 0;
- prim_ref_none_nframes_ = num;
- for (unsigned int i = 0; i < prim_ref_none_nframes_; ++i)
- prim_ref_none_frames_[i] = list[i];
- }
-
- void SetSFrames(int num, unsigned int *list) {
- if (num > kMaxSFrames)
- num = kMaxSFrames;
- else if (num < 0)
- num = 0;
- s_nframes_ = num;
- for (unsigned int i = 0; i < s_nframes_; ++i) s_frames_[i] = list[i];
- }
-
- unsigned int GetMismatchFrames() { return mismatch_nframes_; }
- unsigned int GetEncodedFrames() { return nframes_; }
- unsigned int GetDecodedFrames() { return decoded_nframes_; }
-
- void SetAllowMismatch(int allow) { allow_mismatch_ = allow; }
-
- private:
- double psnr_;
- unsigned int nframes_;
- unsigned int decoded_nframes_;
- unsigned int error_nframes_;
- unsigned int invisible_error_nframes_;
- unsigned int droppable_nframes_;
- unsigned int error_resilient_nframes_;
- unsigned int nomfmv_nframes_;
- unsigned int prim_ref_none_nframes_;
- unsigned int s_nframes_;
- double mismatch_psnr_;
- unsigned int mismatch_nframes_;
- unsigned int error_frames_[kMaxErrorFrames];
- unsigned int invisible_error_frames_[kMaxInvisibleErrorFrames];
- unsigned int droppable_frames_[kMaxDroppableFrames];
- unsigned int error_resilient_frames_[kMaxErrorResilientFrames];
- unsigned int nomfmv_frames_[kMaxNoMFMVFrames];
- unsigned int prim_ref_none_frames_[kMaxPrimRefNoneFrames];
- unsigned int s_frames_[kMaxSFrames];
- libaom_test::TestMode encoding_mode_;
- int allow_mismatch_;
-};
-
-TEST_P(ErrorResilienceTestLarge, OnVersusOff) {
- SetupEncoder(2000, 10);
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- cfg_.g_timebase.den, cfg_.g_timebase.num,
- 0, 12);
-
- // Global error resilient mode OFF.
- cfg_.g_error_resilient = 0;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- const double psnr_resilience_off = GetAveragePsnr();
- EXPECT_GT(psnr_resilience_off, 25.0);
-
- Reset();
- // Error resilient mode ON for certain frames
- unsigned int num_error_resilient_frames = 5;
- unsigned int error_resilient_frame_list[] = { 3, 5, 6, 9, 11 };
- SetErrorResilientFrames(num_error_resilient_frames,
- error_resilient_frame_list);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- const double psnr_resilience_on = GetAveragePsnr();
- EXPECT_GT(psnr_resilience_on, 25.0);
-
- // Test that turning on error resilient mode hurts by 10% at most.
- if (psnr_resilience_off > 0.0) {
- const double psnr_ratio = psnr_resilience_on / psnr_resilience_off;
- EXPECT_GE(psnr_ratio, 0.9);
- EXPECT_LE(psnr_ratio, 1.1);
- }
-}
-
-// Check for successful decoding and no encoder/decoder mismatch
-// if we lose (i.e., drop before decoding) a set of droppable
-// frames (i.e., frames that don't update any reference buffers).
-TEST_P(ErrorResilienceTestLarge, DropFramesWithoutRecovery) {
- SetupEncoder(500, 10);
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- cfg_.g_timebase.den, cfg_.g_timebase.num,
- 0, 20);
-
- // Set an arbitrary set of error frames same as droppable frames.
- unsigned int num_droppable_frames = 3;
- unsigned int droppable_frame_list[] = { 5, 10, 13 };
- SetDroppableFrames(num_droppable_frames, droppable_frame_list);
- SetErrorFrames(num_droppable_frames, droppable_frame_list);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- // Test that no mismatches have been found
- std::cout << " Encoded frames: " << GetEncodedFrames() << "\n";
- std::cout << " Decoded frames: " << GetDecodedFrames() << "\n";
- std::cout << " Mismatch frames: " << GetMismatchFrames() << "\n";
- EXPECT_EQ(GetEncodedFrames() - GetDecodedFrames(), num_droppable_frames);
-}
-
-// Check for ParseAbility property of an error-resilient frame.
-// Encode a frame in error-resilient mode (E-frame), and disallow all
-// subsequent frames from using MFMV. If frames are dropped before the
-// E frame, all frames starting from the E frame should be parse-able.
-TEST_P(ErrorResilienceTestLarge, ParseAbilityTest) {
- SetupEncoder(500, 10);
-
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- cfg_.g_timebase.den, cfg_.g_timebase.num,
- 0, 15);
-
- SetAllowMismatch(1);
-
- // Note that an E-frame cannot be forced on a frame that is a
- // show_existing_frame, or a frame that comes directly after an invisible
- // frame. Currently, this will cause an assertion failure.
- // Set an arbitrary error resilient (E) frame
- unsigned int num_error_resilient_frames = 1;
- unsigned int error_resilient_frame_list[] = { 8 };
- SetErrorResilientFrames(num_error_resilient_frames,
- error_resilient_frame_list);
- // Ensure that any invisible frames before the E frame are dropped
- SetInvisibleErrorFrames(num_error_resilient_frames,
- error_resilient_frame_list);
- // Set all frames after the error resilient frame to not allow MFMV
- unsigned int num_post_error_resilient_frames = 6;
- unsigned int post_error_resilient_frame_list[] = { 9, 10, 11, 12, 13, 14 };
- SetNoMFMVFrames(num_post_error_resilient_frames,
- post_error_resilient_frame_list);
-
- // Set a few frames before the E frame that are lost (not decoded)
- unsigned int num_error_frames = 5;
- unsigned int error_frame_list[] = { 3, 4, 5, 6, 7 };
- SetErrorFrames(num_error_frames, error_frame_list);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::cout << " Encoded frames: " << GetEncodedFrames() << "\n";
- std::cout << " Decoded frames: " << GetDecodedFrames() << "\n";
- std::cout << " Mismatch frames: " << GetMismatchFrames() << "\n";
- EXPECT_EQ(GetEncodedFrames() - GetDecodedFrames(), num_error_frames);
- // All frames following the E-frame and the E-frame are expected to have
- // mismatches, but still be parse-able.
- EXPECT_LE(GetMismatchFrames(), num_post_error_resilient_frames + 1);
-}
-
-// Check for ParseAbility property of an S frame.
-// Encode an S-frame. If frames are dropped before the S-frame, all frames
-// starting from the S frame should be parse-able.
-TEST_P(ErrorResilienceTestLarge, SFrameTest) {
- SetupEncoder(500, 10);
-
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- cfg_.g_timebase.den, cfg_.g_timebase.num,
- 0, 15);
-
- SetAllowMismatch(1);
-
- // Note that an S-frame cannot be forced on a frame that is a
- // show_existing_frame. This issue still needs to be addressed.
- // Set an arbitrary S-frame
- unsigned int num_s_frames = 1;
- unsigned int s_frame_list[] = { 6 };
- SetSFrames(num_s_frames, s_frame_list);
- // Ensure that any invisible frames before the S frame are dropped
- SetInvisibleErrorFrames(num_s_frames, s_frame_list);
-
- // Set a few frames before the S frame that are lost (not decoded)
- unsigned int num_error_frames = 4;
- unsigned int error_frame_list[] = { 2, 3, 4, 5 };
- SetErrorFrames(num_error_frames, error_frame_list);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::cout << " Encoded frames: " << GetEncodedFrames() << "\n";
- std::cout << " Decoded frames: " << GetDecodedFrames() << "\n";
- std::cout << " Mismatch frames: " << GetMismatchFrames() << "\n";
- EXPECT_EQ(GetEncodedFrames() - GetDecodedFrames(), num_error_frames);
- // All frames following the S-frame and the S-frame are expected to have
- // mismatches, but still be parse-able.
- EXPECT_LE(GetMismatchFrames(), GetEncodedFrames() - s_frame_list[0]);
-}
-
-AV1_INSTANTIATE_TEST_CASE(ErrorResilienceTestLarge, NONREALTIME_TEST_MODES);
-} // namespace
diff --git a/third_party/aom/test/ethread_test.cc b/third_party/aom/test/ethread_test.cc
deleted file mode 100644
index d9ac78282..000000000
--- a/third_party/aom/test/ethread_test.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/md5_helper.h"
-#include "test/util.h"
-#include "test/yuv_video_source.h"
-
-namespace {
-class AVxEncoderThreadTest
- : public ::libaom_test::CodecTestWith4Params<libaom_test::TestMode, int,
- int, int>,
- public ::libaom_test::EncoderTest {
- protected:
- AVxEncoderThreadTest()
- : EncoderTest(GET_PARAM(0)), encoder_initialized_(false),
- encoding_mode_(GET_PARAM(1)), set_cpu_used_(GET_PARAM(2)),
- tile_cols_(GET_PARAM(3)), tile_rows_(GET_PARAM(4)) {
- init_flags_ = AOM_CODEC_USE_PSNR;
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.w = 1280;
- cfg.h = 720;
- cfg.allow_lowbitdepth = 1;
- decoder_ = codec_->CreateDecoder(cfg, 0);
- if (decoder_->IsAV1()) {
- decoder_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- decoder_->Control(AV1_SET_DECODE_TILE_COL, -1);
- }
-
- size_enc_.clear();
- md5_dec_.clear();
- md5_enc_.clear();
- }
- virtual ~AVxEncoderThreadTest() { delete decoder_; }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
-
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- cfg_.g_lag_in_frames = 5;
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.rc_2pass_vbr_minsection_pct = 5;
- cfg_.rc_2pass_vbr_maxsection_pct = 2000;
- } else {
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.g_error_resilient = 1;
- }
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_min_quantizer = 0;
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
- encoder_initialized_ = false;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource * /*video*/,
- ::libaom_test::Encoder *encoder) {
- if (!encoder_initialized_) {
- SetTileSize(encoder);
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- encoder->Control(AV1E_SET_ROW_MT, row_mt_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 0);
- } else {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 0);
- encoder->Control(AV1E_SET_AQ_MODE, 3);
- }
- encoder_initialized_ = true;
- }
- }
-
- virtual void SetTileSize(libaom_test::Encoder *encoder) {
- encoder->Control(AV1E_SET_TILE_COLUMNS, tile_cols_);
- encoder->Control(AV1E_SET_TILE_ROWS, tile_rows_);
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- size_enc_.push_back(pkt->data.frame.sz);
-
- ::libaom_test::MD5 md5_enc;
- md5_enc.Add(reinterpret_cast<uint8_t *>(pkt->data.frame.buf),
- pkt->data.frame.sz);
- md5_enc_.push_back(md5_enc.Get());
-
- const aom_codec_err_t res = decoder_->DecodeFrame(
- reinterpret_cast<uint8_t *>(pkt->data.frame.buf), pkt->data.frame.sz);
- if (res != AOM_CODEC_OK) {
- abort_ = true;
- ASSERT_EQ(AOM_CODEC_OK, res);
- }
- const aom_image_t *img = decoder_->GetDxData().Next();
-
- if (img) {
- ::libaom_test::MD5 md5_res;
- md5_res.Add(img);
- md5_dec_.push_back(md5_res.Get());
- }
- }
-
- void DoTest() {
- ::libaom_test::YUVVideoSource video(
- "niklas_640_480_30.yuv", AOM_IMG_FMT_I420, 640, 480, 30, 1, 15, 21);
- cfg_.rc_target_bitrate = 1000;
-
- // Encode using single thread.
- row_mt_ = 0;
- cfg_.g_threads = 1;
- init_flags_ = AOM_CODEC_USE_PSNR;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::vector<size_t> single_thr_size_enc;
- std::vector<std::string> single_thr_md5_enc;
- std::vector<std::string> single_thr_md5_dec;
- single_thr_size_enc = size_enc_;
- single_thr_md5_enc = md5_enc_;
- single_thr_md5_dec = md5_dec_;
- size_enc_.clear();
- md5_enc_.clear();
- md5_dec_.clear();
-
- // Encode using multiple threads.
- cfg_.g_threads = 4;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::vector<size_t> multi_thr_size_enc;
- std::vector<std::string> multi_thr_md5_enc;
- std::vector<std::string> multi_thr_md5_dec;
- multi_thr_size_enc = size_enc_;
- multi_thr_md5_enc = md5_enc_;
- multi_thr_md5_dec = md5_dec_;
- size_enc_.clear();
- md5_enc_.clear();
- md5_dec_.clear();
-
- // Check that the vectors are equal.
- ASSERT_EQ(single_thr_size_enc, multi_thr_size_enc);
- ASSERT_EQ(single_thr_md5_enc, multi_thr_md5_enc);
- ASSERT_EQ(single_thr_md5_dec, multi_thr_md5_dec);
-
- // Encode using multiple threads row-mt enabled.
- row_mt_ = 1;
- cfg_.g_threads = 2;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::vector<size_t> multi_thr2_row_mt_size_enc;
- std::vector<std::string> multi_thr2_row_mt_md5_enc;
- std::vector<std::string> multi_thr2_row_mt_md5_dec;
- multi_thr2_row_mt_size_enc = size_enc_;
- multi_thr2_row_mt_md5_enc = md5_enc_;
- multi_thr2_row_mt_md5_dec = md5_dec_;
- size_enc_.clear();
- md5_enc_.clear();
- md5_dec_.clear();
-
- // Disable threads=3 test for now to reduce the time so that the nightly
- // test would not time out.
- // cfg_.g_threads = 3;
- // ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- // std::vector<size_t> multi_thr3_row_mt_size_enc;
- // std::vector<std::string> multi_thr3_row_mt_md5_enc;
- // std::vector<std::string> multi_thr3_row_mt_md5_dec;
- // multi_thr3_row_mt_size_enc = size_enc_;
- // multi_thr3_row_mt_md5_enc = md5_enc_;
- // multi_thr3_row_mt_md5_dec = md5_dec_;
- // size_enc_.clear();
- // md5_enc_.clear();
- // md5_dec_.clear();
- // Check that the vectors are equal.
- // ASSERT_EQ(multi_thr3_row_mt_size_enc, multi_thr2_row_mt_size_enc);
- // ASSERT_EQ(multi_thr3_row_mt_md5_enc, multi_thr2_row_mt_md5_enc);
- // ASSERT_EQ(multi_thr3_row_mt_md5_dec, multi_thr2_row_mt_md5_dec);
-
- cfg_.g_threads = 4;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- std::vector<size_t> multi_thr4_row_mt_size_enc;
- std::vector<std::string> multi_thr4_row_mt_md5_enc;
- std::vector<std::string> multi_thr4_row_mt_md5_dec;
- multi_thr4_row_mt_size_enc = size_enc_;
- multi_thr4_row_mt_md5_enc = md5_enc_;
- multi_thr4_row_mt_md5_dec = md5_dec_;
- size_enc_.clear();
- md5_enc_.clear();
- md5_dec_.clear();
-
- // Check that the vectors are equal.
- ASSERT_EQ(multi_thr4_row_mt_size_enc, multi_thr2_row_mt_size_enc);
- ASSERT_EQ(multi_thr4_row_mt_md5_enc, multi_thr2_row_mt_md5_enc);
- ASSERT_EQ(multi_thr4_row_mt_md5_dec, multi_thr2_row_mt_md5_dec);
- }
-
- bool encoder_initialized_;
- ::libaom_test::TestMode encoding_mode_;
- int set_cpu_used_;
- int tile_cols_;
- int tile_rows_;
- int row_mt_;
- ::libaom_test::Decoder *decoder_;
- std::vector<size_t> size_enc_;
- std::vector<std::string> md5_enc_;
- std::vector<std::string> md5_dec_;
-};
-
-TEST_P(AVxEncoderThreadTest, EncoderResultTest) {
- cfg_.large_scale_tile = 0;
- decoder_->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-class AVxEncoderThreadTestLarge : public AVxEncoderThreadTest {};
-
-TEST_P(AVxEncoderThreadTestLarge, EncoderResultTest) {
- cfg_.large_scale_tile = 0;
- decoder_->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-// For AV1, only test speed 0 to 3.
-// Here test cpu_used 2 and 3
-AV1_INSTANTIATE_TEST_CASE(AVxEncoderThreadTest,
- ::testing::Values(::libaom_test::kTwoPassGood),
- ::testing::Range(2, 4), ::testing::Values(0, 2),
- ::testing::Values(0, 1));
-
-// Test cpu_used 0 and 1.
-AV1_INSTANTIATE_TEST_CASE(AVxEncoderThreadTestLarge,
- ::testing::Values(::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood),
- ::testing::Range(0, 2), ::testing::Values(0, 1, 2, 6),
- ::testing::Values(0, 1, 2, 6));
-
-class AVxEncoderThreadLSTest : public AVxEncoderThreadTest {
- virtual void SetTileSize(libaom_test::Encoder *encoder) {
- encoder->Control(AV1E_SET_TILE_COLUMNS, tile_cols_);
- encoder->Control(AV1E_SET_TILE_ROWS, tile_rows_);
- }
-};
-
-TEST_P(AVxEncoderThreadLSTest, EncoderResultTest) {
- cfg_.large_scale_tile = 1;
- decoder_->Control(AV1_SET_TILE_MODE, 1);
- decoder_->Control(AV1D_EXT_TILE_DEBUG, 1);
- DoTest();
-}
-
-class AVxEncoderThreadLSTestLarge : public AVxEncoderThreadLSTest {};
-
-TEST_P(AVxEncoderThreadLSTestLarge, EncoderResultTest) {
- cfg_.large_scale_tile = 1;
- decoder_->Control(AV1_SET_TILE_MODE, 1);
- decoder_->Control(AV1D_EXT_TILE_DEBUG, 1);
- DoTest();
-}
-
-AV1_INSTANTIATE_TEST_CASE(AVxEncoderThreadLSTestLarge,
- ::testing::Values(::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood),
- ::testing::Range(0, 4), ::testing::Values(0, 6),
- ::testing::Values(0, 6));
-} // namespace
diff --git a/third_party/aom/test/examples.sh b/third_party/aom/test/examples.sh
deleted file mode 100755
index 2cdb89dd0..000000000
--- a/third_party/aom/test/examples.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file runs all of the tests for the libaom examples.
-##
-. $(dirname $0)/tools_common.sh
-
-example_tests=$(ls -r $(dirname $0)/*.sh)
-
-# List of script names to exclude.
-exclude_list="best_encode examples run_encodes tools_common"
-
-# Filter out the scripts in $exclude_list.
-for word in ${exclude_list}; do
- example_tests=$(filter_strings "${example_tests}" "${word}" exclude)
-done
-
-for test in ${example_tests}; do
- # Source each test script so that exporting variables can be avoided.
- AOM_TEST_NAME="$(basename ${test%.*})"
- . "${test}"
-done
diff --git a/third_party/aom/test/external_frame_buffer_test.cc b/third_party/aom/test/external_frame_buffer_test.cc
deleted file mode 100644
index c2af059a4..000000000
--- a/third_party/aom/test/external_frame_buffer_test.cc
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Copyright (c) 2014 The WebM project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <string>
-
-#include "config/aom_config.h"
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/ivf_video_source.h"
-#include "test/md5_helper.h"
-#include "test/test_vectors.h"
-#include "test/util.h"
-#if CONFIG_WEBM_IO
-#include "test/webm_video_source.h"
-#endif
-
-namespace {
-
-const int kVideoNameParam = 1;
-
-struct ExternalFrameBuffer {
- uint8_t *data;
- size_t size;
- int in_use;
-};
-
-// Class to manipulate a list of external frame buffers.
-class ExternalFrameBufferList {
- public:
- ExternalFrameBufferList()
- : num_buffers_(0), num_used_buffers_(0), ext_fb_list_(NULL) {}
-
- virtual ~ExternalFrameBufferList() {
- for (int i = 0; i < num_buffers_; ++i) {
- delete[] ext_fb_list_[i].data;
- }
- delete[] ext_fb_list_;
- }
-
- // Creates the list to hold the external buffers. Returns true on success.
- bool CreateBufferList(int num_buffers) {
- if (num_buffers < 0) return false;
-
- num_buffers_ = num_buffers;
- ext_fb_list_ = new ExternalFrameBuffer[num_buffers_];
- EXPECT_TRUE(ext_fb_list_ != NULL);
- memset(ext_fb_list_, 0, sizeof(ext_fb_list_[0]) * num_buffers_);
- return true;
- }
-
- // Searches the frame buffer list for a free frame buffer. Makes sure
- // that the frame buffer is at least |min_size| in bytes. Marks that the
- // frame buffer is in use by libvpx. Finally sets |fb| to point to the
- // external frame buffer. Returns < 0 on an error.
- int GetFreeFrameBuffer(size_t min_size, aom_codec_frame_buffer_t *fb) {
- EXPECT_TRUE(fb != NULL);
- const int idx = FindFreeBufferIndex();
- if (idx == num_buffers_) return -1;
-
- if (ext_fb_list_[idx].size < min_size) {
- delete[] ext_fb_list_[idx].data;
- ext_fb_list_[idx].data = new uint8_t[min_size];
- memset(ext_fb_list_[idx].data, 0, min_size);
- ext_fb_list_[idx].size = min_size;
- }
-
- SetFrameBuffer(idx, fb);
-
- num_used_buffers_++;
- return 0;
- }
-
- // Test function that will not allocate any data for the frame buffer.
- // Returns < 0 on an error.
- int GetZeroFrameBuffer(size_t min_size, aom_codec_frame_buffer_t *fb) {
- EXPECT_TRUE(fb != NULL);
- const int idx = FindFreeBufferIndex();
- if (idx == num_buffers_) return -1;
-
- if (ext_fb_list_[idx].size < min_size) {
- delete[] ext_fb_list_[idx].data;
- ext_fb_list_[idx].data = NULL;
- ext_fb_list_[idx].size = min_size;
- }
-
- SetFrameBuffer(idx, fb);
- return 0;
- }
-
- // Marks the external frame buffer that |fb| is pointing to as free.
- // Returns < 0 on an error.
- int ReturnFrameBuffer(aom_codec_frame_buffer_t *fb) {
- if (fb == NULL) {
- EXPECT_TRUE(fb != NULL);
- return -1;
- }
- ExternalFrameBuffer *const ext_fb =
- reinterpret_cast<ExternalFrameBuffer *>(fb->priv);
- if (ext_fb == NULL) {
- EXPECT_TRUE(ext_fb != NULL);
- return -1;
- }
- EXPECT_EQ(1, ext_fb->in_use);
- ext_fb->in_use = 0;
- num_used_buffers_--;
- return 0;
- }
-
- // Checks that the ximage data is contained within the external frame buffer
- // private data passed back in the ximage.
- void CheckXImageFrameBuffer(const aom_image_t *img) {
- if (img->fb_priv != NULL) {
- const struct ExternalFrameBuffer *const ext_fb =
- reinterpret_cast<ExternalFrameBuffer *>(img->fb_priv);
-
- ASSERT_TRUE(img->planes[0] >= ext_fb->data &&
- img->planes[0] < (ext_fb->data + ext_fb->size));
- }
- }
-
- int num_used_buffers() const { return num_used_buffers_; }
-
- private:
- // Returns the index of the first free frame buffer. Returns |num_buffers_|
- // if there are no free frame buffers.
- int FindFreeBufferIndex() {
- int i;
- // Find a free frame buffer.
- for (i = 0; i < num_buffers_; ++i) {
- if (!ext_fb_list_[i].in_use) break;
- }
- return i;
- }
-
- // Sets |fb| to an external frame buffer. idx is the index into the frame
- // buffer list.
- void SetFrameBuffer(int idx, aom_codec_frame_buffer_t *fb) {
- ASSERT_TRUE(fb != NULL);
- fb->data = ext_fb_list_[idx].data;
- fb->size = ext_fb_list_[idx].size;
- ASSERT_EQ(0, ext_fb_list_[idx].in_use);
- ext_fb_list_[idx].in_use = 1;
- fb->priv = &ext_fb_list_[idx];
- }
-
- int num_buffers_;
- int num_used_buffers_;
- ExternalFrameBuffer *ext_fb_list_;
-};
-
-#if CONFIG_WEBM_IO
-
-// Callback used by libvpx to request the application to return a frame
-// buffer of at least |min_size| in bytes.
-int get_aom_frame_buffer(void *user_priv, size_t min_size,
- aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferList *const fb_list =
- reinterpret_cast<ExternalFrameBufferList *>(user_priv);
- return fb_list->GetFreeFrameBuffer(min_size, fb);
-}
-
-// Callback used by libvpx to tell the application that |fb| is not needed
-// anymore.
-int release_aom_frame_buffer(void *user_priv, aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferList *const fb_list =
- reinterpret_cast<ExternalFrameBufferList *>(user_priv);
- return fb_list->ReturnFrameBuffer(fb);
-}
-
-// Callback will not allocate data for frame buffer.
-int get_aom_zero_frame_buffer(void *user_priv, size_t min_size,
- aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferList *const fb_list =
- reinterpret_cast<ExternalFrameBufferList *>(user_priv);
- return fb_list->GetZeroFrameBuffer(min_size, fb);
-}
-
-// Callback will allocate one less byte than |min_size|.
-int get_aom_one_less_byte_frame_buffer(void *user_priv, size_t min_size,
- aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferList *const fb_list =
- reinterpret_cast<ExternalFrameBufferList *>(user_priv);
- return fb_list->GetFreeFrameBuffer(min_size - 1, fb);
-}
-
-// Callback will not release the external frame buffer.
-int do_not_release_aom_frame_buffer(void *user_priv,
- aom_codec_frame_buffer_t *fb) {
- (void)user_priv;
- (void)fb;
- return 0;
-}
-
-#endif // CONFIG_WEBM_IO
-
-// Class for testing passing in external frame buffers to libaom.
-class ExternalFrameBufferMD5Test
- : public ::libaom_test::DecoderTest,
- public ::libaom_test::CodecTestWithParam<const char *> {
- protected:
- ExternalFrameBufferMD5Test()
- : DecoderTest(GET_PARAM(::libaom_test::kCodecFactoryParam)),
- md5_file_(NULL), num_buffers_(0) {}
-
- virtual ~ExternalFrameBufferMD5Test() {
- if (md5_file_ != NULL) fclose(md5_file_);
- }
-
- virtual void PreDecodeFrameHook(
- const libaom_test::CompressedVideoSource &video,
- libaom_test::Decoder *decoder) {
- if (num_buffers_ > 0 && video.frame_number() == 0) {
- // Have libvpx use frame buffers we create.
- ASSERT_TRUE(fb_list_.CreateBufferList(num_buffers_));
- ASSERT_EQ(AOM_CODEC_OK,
- decoder->SetFrameBufferFunctions(GetAV1FrameBuffer,
- ReleaseAV1FrameBuffer, this));
- }
- }
-
- void OpenMD5File(const std::string &md5_file_name_) {
- md5_file_ = libaom_test::OpenTestDataFile(md5_file_name_);
- ASSERT_TRUE(md5_file_ != NULL)
- << "Md5 file open failed. Filename: " << md5_file_name_;
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- const unsigned int frame_number) {
- ASSERT_TRUE(md5_file_ != NULL);
- char expected_md5[33];
- char junk[128];
-
- // Read correct md5 checksums.
- const int res = fscanf(md5_file_, "%s %s", expected_md5, junk);
- ASSERT_NE(EOF, res) << "Read md5 data failed";
- expected_md5[32] = '\0';
-
- ::libaom_test::MD5 md5_res;
- md5_res.Add(&img);
- const char *const actual_md5 = md5_res.Get();
-
- // Check md5 match.
- ASSERT_STREQ(expected_md5, actual_md5)
- << "Md5 checksums don't match: frame number = " << frame_number;
- }
-
- // Callback to get a free external frame buffer. Return value < 0 is an
- // error.
- static int GetAV1FrameBuffer(void *user_priv, size_t min_size,
- aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferMD5Test *const md5Test =
- reinterpret_cast<ExternalFrameBufferMD5Test *>(user_priv);
- return md5Test->fb_list_.GetFreeFrameBuffer(min_size, fb);
- }
-
- // Callback to release an external frame buffer. Return value < 0 is an
- // error.
- static int ReleaseAV1FrameBuffer(void *user_priv,
- aom_codec_frame_buffer_t *fb) {
- ExternalFrameBufferMD5Test *const md5Test =
- reinterpret_cast<ExternalFrameBufferMD5Test *>(user_priv);
- return md5Test->fb_list_.ReturnFrameBuffer(fb);
- }
-
- void set_num_buffers(int num_buffers) { num_buffers_ = num_buffers; }
- int num_buffers() const { return num_buffers_; }
-
- private:
- FILE *md5_file_;
- int num_buffers_;
- ExternalFrameBufferList fb_list_;
-};
-
-#if CONFIG_WEBM_IO
-const char kAV1TestFile[] = "av1-1-b8-01-size-226x226.ivf";
-const char kAV1NonRefTestFile[] = "av1-1-b8-01-size-226x226.ivf";
-
-// Class for testing passing in external frame buffers to libvpx.
-class ExternalFrameBufferTest : public ::testing::Test {
- protected:
- ExternalFrameBufferTest() : video_(NULL), decoder_(NULL), num_buffers_(0) {}
-
- virtual void SetUp() {
- video_ = new libaom_test::IVFVideoSource(kAV1TestFile);
- ASSERT_TRUE(video_ != NULL);
- video_->Init();
- video_->Begin();
-
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- decoder_ = new libaom_test::AV1Decoder(cfg, 0);
- ASSERT_TRUE(decoder_ != NULL);
- }
-
- virtual void TearDown() {
- delete decoder_;
- decoder_ = NULL;
- delete video_;
- video_ = NULL;
- }
-
- // Passes the external frame buffer information to libvpx.
- aom_codec_err_t SetFrameBufferFunctions(
- int num_buffers, aom_get_frame_buffer_cb_fn_t cb_get,
- aom_release_frame_buffer_cb_fn_t cb_release) {
- if (num_buffers > 0) {
- num_buffers_ = num_buffers;
- EXPECT_TRUE(fb_list_.CreateBufferList(num_buffers_));
- }
-
- return decoder_->SetFrameBufferFunctions(cb_get, cb_release, &fb_list_);
- }
-
- aom_codec_err_t DecodeOneFrame() {
- const aom_codec_err_t res =
- decoder_->DecodeFrame(video_->cxdata(), video_->frame_size());
- CheckDecodedFrames();
- if (res == AOM_CODEC_OK) video_->Next();
- return res;
- }
-
- aom_codec_err_t DecodeRemainingFrames() {
- for (; video_->cxdata() != NULL; video_->Next()) {
- const aom_codec_err_t res =
- decoder_->DecodeFrame(video_->cxdata(), video_->frame_size());
- if (res != AOM_CODEC_OK) return res;
- CheckDecodedFrames();
- }
- return AOM_CODEC_OK;
- }
-
- protected:
- void CheckDecodedFrames() {
- libaom_test::DxDataIterator dec_iter = decoder_->GetDxData();
- const aom_image_t *img = NULL;
-
- // Get decompressed data
- while ((img = dec_iter.Next()) != NULL) {
- fb_list_.CheckXImageFrameBuffer(img);
- }
- }
-
- libaom_test::IVFVideoSource *video_;
- libaom_test::AV1Decoder *decoder_;
- int num_buffers_;
- ExternalFrameBufferList fb_list_;
-};
-
-class ExternalFrameBufferNonRefTest : public ExternalFrameBufferTest {
- protected:
- virtual void SetUp() {
- video_ = new libaom_test::IVFVideoSource(kAV1NonRefTestFile);
- ASSERT_TRUE(video_ != NULL);
- video_->Init();
- video_->Begin();
-
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- decoder_ = new libaom_test::AV1Decoder(cfg, 0);
- ASSERT_TRUE(decoder_ != NULL);
- }
-
- virtual void CheckFrameBufferRelease() {
- TearDown();
- ASSERT_EQ(0, fb_list_.num_used_buffers());
- }
-};
-#endif // CONFIG_WEBM_IO
-
-// This test runs through the set of test vectors, and decodes them.
-// Libvpx will call into the application to allocate a frame buffer when
-// needed. The md5 checksums are computed for each frame in the video file.
-// If md5 checksums match the correct md5 data, then the test is passed.
-// Otherwise, the test failed.
-TEST_P(ExternalFrameBufferMD5Test, DISABLED_ExtFBMD5Match) {
- const std::string filename = GET_PARAM(kVideoNameParam);
-
- // Number of buffers equals #AOM_MAXIMUM_REF_BUFFERS +
- // #AOM_MAXIMUM_WORK_BUFFERS + four jitter buffers.
- const int jitter_buffers = 4;
- const int num_buffers =
- AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS + jitter_buffers;
- set_num_buffers(num_buffers);
-
- // Open compressed video file.
- testing::internal::scoped_ptr<libaom_test::CompressedVideoSource> video;
- if (filename.substr(filename.length() - 3, 3) == "ivf") {
- video.reset(new libaom_test::IVFVideoSource(filename));
- } else {
-#if CONFIG_WEBM_IO
- video.reset(new libaom_test::WebMVideoSource(filename));
-#else
- fprintf(stderr, "WebM IO is disabled, skipping test vector %s\n",
- filename.c_str());
- return;
-#endif
- }
- ASSERT_TRUE(video.get() != NULL);
- video->Init();
-
- // Construct md5 file name.
- const std::string md5_filename = filename + ".md5";
- OpenMD5File(md5_filename);
-
- // Decode frame, and check the md5 matching.
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
-}
-
-#if CONFIG_WEBM_IO
-TEST_F(ExternalFrameBufferTest, MinFrameBuffers) {
- // Minimum number of external frame buffers for AV1 is
- // #AOM_MAXIMUM_REF_BUFFERS + #AOM_MAXIMUM_WORK_BUFFERS.
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_OK, DecodeRemainingFrames());
-}
-
-TEST_F(ExternalFrameBufferTest, EightJitterBuffers) {
- // Number of buffers equals #AOM_MAXIMUM_REF_BUFFERS +
- // #AOM_MAXIMUM_WORK_BUFFERS + eight jitter buffers.
- const int jitter_buffers = 8;
- const int num_buffers =
- AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS + jitter_buffers;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_OK, DecodeRemainingFrames());
-}
-
-TEST_F(ExternalFrameBufferTest, DISABLED_NotEnoughBuffers) {
- // Minimum number of external frame buffers for AV1 is
- // #AOM_MAXIMUM_REF_BUFFERS + #AOM_MAXIMUM_WORK_BUFFERS. Most files will
- // only use 5 frame buffers at one time.
- const int num_buffers = 2;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_OK, DecodeOneFrame());
- // Only run this on long clips. Decoding a very short clip will return
- // AOM_CODEC_OK even with only 2 buffers.
- ASSERT_EQ(AOM_CODEC_MEM_ERROR, DecodeRemainingFrames());
-}
-
-TEST_F(ExternalFrameBufferTest, DISABLED_NoRelease) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- do_not_release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_OK, DecodeOneFrame());
- ASSERT_EQ(AOM_CODEC_MEM_ERROR, DecodeRemainingFrames());
-}
-
-TEST_F(ExternalFrameBufferTest, NullRealloc) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_zero_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_MEM_ERROR, DecodeOneFrame());
-}
-
-TEST_F(ExternalFrameBufferTest, ReallocOneLessByte) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK, SetFrameBufferFunctions(
- num_buffers, get_aom_one_less_byte_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_MEM_ERROR, DecodeOneFrame());
-}
-
-TEST_F(ExternalFrameBufferTest, NullGetFunction) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(
- AOM_CODEC_INVALID_PARAM,
- SetFrameBufferFunctions(num_buffers, NULL, release_aom_frame_buffer));
-}
-
-TEST_F(ExternalFrameBufferTest, NullReleaseFunction) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_INVALID_PARAM,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer, NULL));
-}
-
-TEST_F(ExternalFrameBufferTest, SetAfterDecode) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK, DecodeOneFrame());
- ASSERT_EQ(AOM_CODEC_ERROR,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- release_aom_frame_buffer));
-}
-
-TEST_F(ExternalFrameBufferNonRefTest, ReleaseNonRefFrameBuffer) {
- const int num_buffers = AOM_MAXIMUM_REF_BUFFERS + AOM_MAXIMUM_WORK_BUFFERS;
- ASSERT_EQ(AOM_CODEC_OK,
- SetFrameBufferFunctions(num_buffers, get_aom_frame_buffer,
- release_aom_frame_buffer));
- ASSERT_EQ(AOM_CODEC_OK, DecodeRemainingFrames());
- CheckFrameBufferRelease();
-}
-#endif // CONFIG_WEBM_IO
-
-AV1_INSTANTIATE_TEST_CASE(
- ExternalFrameBufferMD5Test,
- ::testing::ValuesIn(libaom_test::kAV1TestVectors,
- libaom_test::kAV1TestVectors +
- libaom_test::kNumAV1TestVectors));
-} // namespace
diff --git a/third_party/aom/test/fft_test.cc b/third_party/aom/test/fft_test.cc
deleted file mode 100644
index e24e451a3..000000000
--- a/third_party/aom/test/fft_test.cc
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-
-#include <algorithm>
-#include <complex>
-#include <vector>
-
-#include "aom_dsp/fft_common.h"
-#include "aom_mem/aom_mem.h"
-#include "av1/common/common.h"
-#include "config/aom_dsp_rtcd.h"
-#include "test/acm_random.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-typedef void (*tform_fun_t)(const float *input, float *temp, float *output);
-
-// Simple 1D FFT implementation
-template <typename InputType>
-void fft(const InputType *data, std::complex<float> *result, int n) {
- if (n == 1) {
- result[0] = data[0];
- return;
- }
- std::vector<InputType> temp(n);
- for (int k = 0; k < n / 2; ++k) {
- temp[k] = data[2 * k];
- temp[n / 2 + k] = data[2 * k + 1];
- }
- fft(&temp[0], result, n / 2);
- fft(&temp[n / 2], result + n / 2, n / 2);
- for (int k = 0; k < n / 2; ++k) {
- std::complex<float> w = std::complex<float>((float)cos(2. * PI * k / n),
- (float)-sin(2. * PI * k / n));
- std::complex<float> a = result[k];
- std::complex<float> b = result[n / 2 + k];
- result[k] = a + w * b;
- result[n / 2 + k] = a - w * b;
- }
-}
-
-void transpose(std::vector<std::complex<float> > *data, int n) {
- for (int y = 0; y < n; ++y) {
- for (int x = y + 1; x < n; ++x) {
- std::swap((*data)[y * n + x], (*data)[x * n + y]);
- }
- }
-}
-
-// Simple 2D FFT implementation
-template <class InputType>
-std::vector<std::complex<float> > fft2d(const InputType *input, int n) {
- std::vector<std::complex<float> > rowfft(n * n);
- std::vector<std::complex<float> > result(n * n);
- for (int y = 0; y < n; ++y) {
- fft(input + y * n, &rowfft[y * n], n);
- }
- transpose(&rowfft, n);
- for (int y = 0; y < n; ++y) {
- fft(&rowfft[y * n], &result[y * n], n);
- }
- transpose(&result, n);
- return result;
-}
-
-struct FFTTestArg {
- int n;
- void (*fft)(const float *input, float *temp, float *output);
- FFTTestArg(int n_in, tform_fun_t fft_in) : n(n_in), fft(fft_in) {}
-};
-
-std::ostream &operator<<(std::ostream &os, const FFTTestArg &test_arg) {
- return os << "fft_arg { n:" << test_arg.n << " fft:" << test_arg.fft << " }";
-}
-
-class FFT2DTest : public ::testing::TestWithParam<FFTTestArg> {
- protected:
- void SetUp() {
- int n = GetParam().n;
- input_ = (float *)aom_memalign(32, sizeof(*input_) * n * n);
- temp_ = (float *)aom_memalign(32, sizeof(*temp_) * n * n);
- output_ = (float *)aom_memalign(32, sizeof(*output_) * n * n * 2);
- memset(input_, 0, sizeof(*input_) * n * n);
- memset(temp_, 0, sizeof(*temp_) * n * n);
- memset(output_, 0, sizeof(*output_) * n * n * 2);
- }
- void TearDown() {
- aom_free(input_);
- aom_free(temp_);
- aom_free(output_);
- }
- float *input_;
- float *temp_;
- float *output_;
-};
-
-TEST_P(FFT2DTest, Correct) {
- int n = GetParam().n;
- for (int i = 0; i < n * n; ++i) {
- input_[i] = 1;
- std::vector<std::complex<float> > expected = fft2d<float>(&input_[0], n);
- GetParam().fft(&input_[0], &temp_[0], &output_[0]);
- for (int y = 0; y < n; ++y) {
- for (int x = 0; x < (n / 2) + 1; ++x) {
- EXPECT_NEAR(expected[y * n + x].real(), output_[2 * (y * n + x)], 1e-5);
- EXPECT_NEAR(expected[y * n + x].imag(), output_[2 * (y * n + x) + 1],
- 1e-5);
- }
- }
- input_[i] = 0;
- }
-}
-
-TEST_P(FFT2DTest, Benchmark) {
- int n = GetParam().n;
- float sum = 0;
- for (int i = 0; i < 1000 * (64 - n); ++i) {
- input_[i % (n * n)] = 1;
- GetParam().fft(&input_[0], &temp_[0], &output_[0]);
- sum += output_[0];
- input_[i % (n * n)] = 0;
- }
-}
-
-INSTANTIATE_TEST_CASE_P(C, FFT2DTest,
- ::testing::Values(FFTTestArg(2, aom_fft2x2_float_c),
- FFTTestArg(4, aom_fft4x4_float_c),
- FFTTestArg(8, aom_fft8x8_float_c),
- FFTTestArg(16, aom_fft16x16_float_c),
- FFTTestArg(32,
- aom_fft32x32_float_c)));
-#if ARCH_X86 || ARCH_X86_64
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, FFT2DTest,
- ::testing::Values(FFTTestArg(4, aom_fft4x4_float_sse2),
- FFTTestArg(8, aom_fft8x8_float_sse2),
- FFTTestArg(16, aom_fft16x16_float_sse2),
- FFTTestArg(32, aom_fft32x32_float_sse2)));
-#endif // HAVE_SSE2
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, FFT2DTest,
- ::testing::Values(FFTTestArg(8, aom_fft8x8_float_avx2),
- FFTTestArg(16, aom_fft16x16_float_avx2),
- FFTTestArg(32, aom_fft32x32_float_avx2)));
-#endif // HAVE_AVX2
-#endif // ARCH_X86 || ARCH_X86_64
-
-struct IFFTTestArg {
- int n;
- tform_fun_t ifft;
- IFFTTestArg(int n_in, tform_fun_t ifft_in) : n(n_in), ifft(ifft_in) {}
-};
-
-std::ostream &operator<<(std::ostream &os, const IFFTTestArg &test_arg) {
- return os << "ifft_arg { n:" << test_arg.n << " fft:" << test_arg.ifft
- << " }";
-}
-
-class IFFT2DTest : public ::testing::TestWithParam<IFFTTestArg> {
- protected:
- void SetUp() {
- int n = GetParam().n;
- input_ = (float *)aom_memalign(32, sizeof(*input_) * n * n * 2);
- temp_ = (float *)aom_memalign(32, sizeof(*temp_) * n * n * 2);
- output_ = (float *)aom_memalign(32, sizeof(*output_) * n * n);
- memset(input_, 0, sizeof(*input_) * n * n * 2);
- memset(temp_, 0, sizeof(*temp_) * n * n * 2);
- memset(output_, 0, sizeof(*output_) * n * n);
- }
- void TearDown() {
- aom_free(input_);
- aom_free(temp_);
- aom_free(output_);
- }
- float *input_;
- float *temp_;
- float *output_;
-};
-
-TEST_P(IFFT2DTest, Correctness) {
- int n = GetParam().n;
- ASSERT_GE(n, 2);
- std::vector<float> expected(n * n);
- std::vector<float> actual(n * n);
- // Do forward transform then invert to make sure we get back expected
- for (int y = 0; y < n; ++y) {
- for (int x = 0; x < n; ++x) {
- expected[y * n + x] = 1;
- std::vector<std::complex<float> > input_c = fft2d(&expected[0], n);
- for (int i = 0; i < n * n; ++i) {
- input_[2 * i + 0] = input_c[i].real();
- input_[2 * i + 1] = input_c[i].imag();
- }
- GetParam().ifft(&input_[0], &temp_[0], &output_[0]);
-
- for (int yy = 0; yy < n; ++yy) {
- for (int xx = 0; xx < n; ++xx) {
- EXPECT_NEAR(expected[yy * n + xx], output_[yy * n + xx] / (n * n),
- 1e-5);
- }
- }
- expected[y * n + x] = 0;
- }
- }
-};
-
-TEST_P(IFFT2DTest, Benchmark) {
- int n = GetParam().n;
- float sum = 0;
- for (int i = 0; i < 1000 * (64 - n); ++i) {
- input_[i % (n * n)] = 1;
- GetParam().ifft(&input_[0], &temp_[0], &output_[0]);
- sum += output_[0];
- input_[i % (n * n)] = 0;
- }
-}
-INSTANTIATE_TEST_CASE_P(
- C, IFFT2DTest,
- ::testing::Values(IFFTTestArg(2, aom_ifft2x2_float_c),
- IFFTTestArg(4, aom_ifft4x4_float_c),
- IFFTTestArg(8, aom_ifft8x8_float_c),
- IFFTTestArg(16, aom_ifft16x16_float_c),
- IFFTTestArg(32, aom_ifft32x32_float_c)));
-#if ARCH_X86 || ARCH_X86_64
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(
- SSE2, IFFT2DTest,
- ::testing::Values(IFFTTestArg(4, aom_ifft4x4_float_sse2),
- IFFTTestArg(8, aom_ifft8x8_float_sse2),
- IFFTTestArg(16, aom_ifft16x16_float_sse2),
- IFFTTestArg(32, aom_ifft32x32_float_sse2)));
-#endif // HAVE_SSE2
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, IFFT2DTest,
- ::testing::Values(IFFTTestArg(8, aom_ifft8x8_float_avx2),
- IFFTTestArg(16, aom_ifft16x16_float_avx2),
- IFFTTestArg(32, aom_ifft32x32_float_avx2)));
-#endif // HAVE_AVX2
-#endif // ARCH_X86 || ARCH_X86_64
-
-} // namespace
diff --git a/third_party/aom/test/film_grain_table_test.cc b/third_party/aom/test/film_grain_table_test.cc
deleted file mode 100644
index 524d67d7b..000000000
--- a/third_party/aom/test/film_grain_table_test.cc
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "aom_dsp/grain_table.h"
-#include "aom/internal/aom_codec_internal.h"
-#include "av1/encoder/grain_test_vectors.h"
-#include "test/video_source.h"
-
-void grain_equal(const aom_film_grain_t *expected,
- const aom_film_grain_t *actual) {
- EXPECT_EQ(expected->apply_grain, actual->apply_grain);
- EXPECT_EQ(expected->update_parameters, actual->update_parameters);
- if (!expected->update_parameters) return;
- EXPECT_EQ(expected->num_y_points, actual->num_y_points);
- EXPECT_EQ(expected->num_cb_points, actual->num_cb_points);
- EXPECT_EQ(expected->num_cr_points, actual->num_cr_points);
- EXPECT_EQ(0, memcmp(expected->scaling_points_y, actual->scaling_points_y,
- expected->num_y_points *
- sizeof(expected->scaling_points_y[0])));
- EXPECT_EQ(0, memcmp(expected->scaling_points_cb, actual->scaling_points_cb,
- expected->num_cb_points *
- sizeof(expected->scaling_points_cb[0])));
- EXPECT_EQ(0, memcmp(expected->scaling_points_cr, actual->scaling_points_cr,
- expected->num_cr_points *
- sizeof(expected->scaling_points_cr[0])));
- EXPECT_EQ(expected->scaling_shift, actual->scaling_shift);
- EXPECT_EQ(expected->ar_coeff_lag, actual->ar_coeff_lag);
- EXPECT_EQ(expected->ar_coeff_shift, actual->ar_coeff_shift);
-
- const int num_pos_luma =
- 2 * expected->ar_coeff_lag * (expected->ar_coeff_lag + 1);
- const int num_pos_chroma = num_pos_luma;
- EXPECT_EQ(0, memcmp(expected->ar_coeffs_y, actual->ar_coeffs_y,
- sizeof(expected->ar_coeffs_y[0]) * num_pos_luma));
- if (actual->num_cb_points || actual->chroma_scaling_from_luma) {
- EXPECT_EQ(0, memcmp(expected->ar_coeffs_cb, actual->ar_coeffs_cb,
- sizeof(expected->ar_coeffs_cb[0]) * num_pos_chroma));
- }
- if (actual->num_cr_points || actual->chroma_scaling_from_luma) {
- EXPECT_EQ(0, memcmp(expected->ar_coeffs_cr, actual->ar_coeffs_cr,
- sizeof(expected->ar_coeffs_cr[0]) * num_pos_chroma));
- }
- EXPECT_EQ(expected->overlap_flag, actual->overlap_flag);
- EXPECT_EQ(expected->chroma_scaling_from_luma,
- actual->chroma_scaling_from_luma);
- EXPECT_EQ(expected->grain_scale_shift, actual->grain_scale_shift);
- // EXPECT_EQ(expected->random_seed, actual->random_seed);
-
- // clip_to_restricted and bit_depth aren't written
- if (expected->num_cb_points) {
- EXPECT_EQ(expected->cb_mult, actual->cb_mult);
- EXPECT_EQ(expected->cb_luma_mult, actual->cb_luma_mult);
- EXPECT_EQ(expected->cb_offset, actual->cb_offset);
- }
- if (expected->num_cr_points) {
- EXPECT_EQ(expected->cr_mult, actual->cr_mult);
- EXPECT_EQ(expected->cr_luma_mult, actual->cr_luma_mult);
- EXPECT_EQ(expected->cr_offset, actual->cr_offset);
- }
-}
-
-TEST(FilmGrainTableTest, AddAndLookupSingleSegment) {
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
-
- aom_film_grain_t grain;
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 0, 1000, false, &grain));
-
- aom_film_grain_table_append(&table, 1000, 2000, film_grain_test_vectors + 0);
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 0, 1000, false, &grain));
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 2000, 3000, false, &grain));
-
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 1000, 2000, false, &grain));
-
- grain.bit_depth = film_grain_test_vectors[0].bit_depth;
- EXPECT_EQ(0, memcmp(&grain, film_grain_test_vectors + 0, sizeof(table)));
-
- // Extend the existing segment
- aom_film_grain_table_append(&table, 2000, 3000, film_grain_test_vectors + 0);
- EXPECT_EQ(0, table.head->next);
-
- // Lookup and remove and check that the entry is no longer there
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 1000, 2000, true, &grain));
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 1000, 2000, false, &grain));
-
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 2000, 3000, true, &grain));
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 2000, 3000, false, &grain));
-
- EXPECT_EQ(0, table.head);
- EXPECT_EQ(0, table.tail);
- aom_film_grain_table_free(&table);
-}
-
-TEST(FilmGrainTableTest, SplitSingleSegment) {
- aom_film_grain_table_t table;
- aom_film_grain_t grain;
- memset(&table, 0, sizeof(table));
-
- aom_film_grain_table_append(&table, 0, 1000, film_grain_test_vectors + 0);
-
- // Test lookup and remove that adjusts start time
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 0, 100, true, &grain));
- EXPECT_EQ(NULL, table.head->next);
- EXPECT_EQ(100, table.head->start_time);
-
- // Test lookup and remove that adjusts end time
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 900, 1000, true, &grain));
- EXPECT_EQ(NULL, table.head->next);
- EXPECT_EQ(100, table.head->start_time);
- EXPECT_EQ(900, table.head->end_time);
-
- // Test lookup and remove that splits the first entry
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, 400, 600, true, &grain));
- EXPECT_EQ(100, table.head->start_time);
- EXPECT_EQ(400, table.head->end_time);
-
- ASSERT_NE((void *)NULL, table.head->next);
- EXPECT_EQ(table.tail, table.head->next);
- EXPECT_EQ(600, table.head->next->start_time);
- EXPECT_EQ(900, table.head->next->end_time);
-
- aom_film_grain_table_free(&table);
-}
-
-TEST(FilmGrainTableTest, AddAndLookupMultipleSegments) {
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
-
- aom_film_grain_t grain;
- const int kNumTestVectors =
- sizeof(film_grain_test_vectors) / sizeof(film_grain_test_vectors[0]);
- for (int i = 0; i < kNumTestVectors; ++i) {
- aom_film_grain_table_append(&table, i * 1000, (i + 1) * 1000,
- film_grain_test_vectors + i);
- }
-
- for (int i = kNumTestVectors - 1; i >= 0; --i) {
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, i * 1000, (i + 1) * 1000,
- true, &grain));
- grain_equal(film_grain_test_vectors + i, &grain);
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, i * 1000, (i + 1) * 1000,
- true, &grain));
- }
-
- // Verify that all the data has been removed
- for (int i = 0; i < kNumTestVectors; ++i) {
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, i * 1000, (i + 1) * 1000,
- true, &grain));
- }
- aom_film_grain_table_free(&table);
-}
-
-class FilmGrainTableIOTest : public ::testing::Test {
- protected:
- void SetUp() { memset(&error_, 0, sizeof(error_)); }
- struct aom_internal_error_info error_;
-};
-
-TEST_F(FilmGrainTableIOTest, ReadMissingFile) {
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
- ASSERT_EQ(AOM_CODEC_ERROR, aom_film_grain_table_read(
- &table, "/path/to/missing/file", &error_));
-}
-
-TEST_F(FilmGrainTableIOTest, ReadTruncatedFile) {
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
-
- std::string grain_file;
- FILE *file = libaom_test::GetTempOutFile(&grain_file);
- fwrite("deadbeef", 8, 1, file);
- fclose(file);
- ASSERT_EQ(AOM_CODEC_ERROR,
- aom_film_grain_table_read(&table, grain_file.c_str(), &error_));
- EXPECT_EQ(0, remove(grain_file.c_str()));
-}
-
-TEST_F(FilmGrainTableIOTest, RoundTripReadWrite) {
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
-
- aom_film_grain_t expected_grain[16];
- const int kNumTestVectors =
- sizeof(film_grain_test_vectors) / sizeof(film_grain_test_vectors[0]);
- for (int i = 0; i < kNumTestVectors; ++i) {
- expected_grain[i] = film_grain_test_vectors[i];
- expected_grain[i].random_seed = i;
- expected_grain[i].update_parameters = i % 2;
- expected_grain[i].apply_grain = (i + 1) % 2;
- expected_grain[i].bit_depth = 0;
- aom_film_grain_table_append(&table, i * 1000, (i + 1) * 1000,
- expected_grain + i);
- }
- std::string grain_file;
- fclose(libaom_test::GetTempOutFile(&grain_file));
- ASSERT_EQ(AOM_CODEC_OK,
- aom_film_grain_table_write(&table, grain_file.c_str(), &error_));
- aom_film_grain_table_free(&table);
-
- memset(&table, 0, sizeof(table));
- ASSERT_EQ(AOM_CODEC_OK,
- aom_film_grain_table_read(&table, grain_file.c_str(), &error_));
- for (int i = 0; i < kNumTestVectors; ++i) {
- aom_film_grain_t grain;
- EXPECT_TRUE(aom_film_grain_table_lookup(&table, i * 1000, (i + 1) * 1000,
- true, &grain));
- grain_equal(expected_grain + i, &grain);
- }
- aom_film_grain_table_free(&table);
- EXPECT_EQ(0, remove(grain_file.c_str()));
-}
-
-TEST_F(FilmGrainTableIOTest, RoundTripSplit) {
- std::string grain_file;
- fclose(libaom_test::GetTempOutFile(&grain_file));
-
- aom_film_grain_table_t table;
- memset(&table, 0, sizeof(table));
-
- aom_film_grain_t grain = film_grain_test_vectors[0];
- aom_film_grain_table_append(&table, 0, 3000, &grain);
- ASSERT_TRUE(aom_film_grain_table_lookup(&table, 1000, 2000, true, &grain));
- ASSERT_TRUE(aom_film_grain_table_lookup(&table, 0, 1000, false, &grain));
- EXPECT_FALSE(aom_film_grain_table_lookup(&table, 1000, 2000, false, &grain));
- ASSERT_TRUE(aom_film_grain_table_lookup(&table, 2000, 3000, false, &grain));
- ASSERT_EQ(AOM_CODEC_OK,
- aom_film_grain_table_write(&table, grain_file.c_str(), &error_));
- aom_film_grain_table_free(&table);
-
- memset(&table, 0, sizeof(table));
- ASSERT_EQ(AOM_CODEC_OK,
- aom_film_grain_table_read(&table, grain_file.c_str(), &error_));
- ASSERT_TRUE(aom_film_grain_table_lookup(&table, 0, 1000, false, &grain));
- ASSERT_FALSE(aom_film_grain_table_lookup(&table, 1000, 2000, false, &grain));
- ASSERT_TRUE(aom_film_grain_table_lookup(&table, 2000, 3000, false, &grain));
- aom_film_grain_table_free(&table);
-
- EXPECT_EQ(0, remove(grain_file.c_str()));
-}
diff --git a/third_party/aom/test/filterintra_test.cc b/third_party/aom/test/filterintra_test.cc
deleted file mode 100644
index 597134940..000000000
--- a/third_party/aom/test/filterintra_test.cc
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/enums.h"
-
-namespace {
-
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-
-typedef void (*Predictor)(uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size,
- const uint8_t *above, const uint8_t *left, int mode);
-
-// Note:
-// Test parameter list:
-// Reference predictor, optimized predictor, prediction mode, tx size
-//
-typedef tuple<Predictor, Predictor, int> PredFuncMode;
-typedef tuple<PredFuncMode, TX_SIZE> PredParams;
-
-const int MaxTxSize = 32;
-
-const int MaxTestNum = 100;
-
-class AV1FilterIntraPredTest : public ::testing::TestWithParam<PredParams> {
- public:
- virtual ~AV1FilterIntraPredTest() {}
- virtual void SetUp() {
- PredFuncMode funcMode = GET_PARAM(0);
- predFuncRef_ = ::testing::get<0>(funcMode);
- predFunc_ = ::testing::get<1>(funcMode);
- mode_ = ::testing::get<2>(funcMode);
- txSize_ = GET_PARAM(1);
-
- alloc_ = new uint8_t[2 * MaxTxSize + 1];
- predRef_ = new uint8_t[MaxTxSize * MaxTxSize];
- pred_ = new uint8_t[MaxTxSize * MaxTxSize];
- }
-
- virtual void TearDown() {
- delete[] alloc_;
- delete[] predRef_;
- delete[] pred_;
- libaom_test::ClearSystemState();
- }
-
- protected:
- void RunTest() const {
- int tstIndex = 0;
- int stride = tx_size_wide[txSize_];
- uint8_t *left = alloc_;
- uint8_t *above = alloc_ + MaxTxSize;
- while (tstIndex < MaxTestNum) {
- PrepareBuffer();
- predFuncRef_(predRef_, stride, txSize_, &above[1], left, mode_);
- ASM_REGISTER_STATE_CHECK(
- predFunc_(pred_, stride, txSize_, &above[1], left, mode_));
- DiffPred(tstIndex);
- tstIndex += 1;
- }
- }
-
- private:
- void PrepareBuffer() const {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- int i = 0;
- while (i < (2 * MaxTxSize + 1)) {
- alloc_[i] = rnd.Rand8();
- i++;
- }
- }
-
- void DiffPred(int testNum) const {
- int i = 0;
- while (i < tx_size_wide[txSize_] * tx_size_high[txSize_]) {
- EXPECT_EQ(predRef_[i], pred_[i]) << "Error at position: " << i << " "
- << "Tx size: " << tx_size_wide[txSize_]
- << "x" << tx_size_high[txSize_] << " "
- << "Test number: " << testNum;
- i++;
- }
- }
-
- Predictor predFunc_;
- Predictor predFuncRef_;
- int mode_;
- TX_SIZE txSize_;
- uint8_t *alloc_;
- uint8_t *pred_;
- uint8_t *predRef_;
-};
-
-TEST_P(AV1FilterIntraPredTest, BitExactCheck) { RunTest(); }
-
-using ::testing::make_tuple;
-
-const PredFuncMode kPredFuncMdArray[] = {
- make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_sse4_1,
- FILTER_DC_PRED),
- make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_sse4_1,
- FILTER_V_PRED),
- make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_sse4_1,
- FILTER_H_PRED),
- make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_sse4_1,
- FILTER_D157_PRED),
- make_tuple(&av1_filter_intra_predictor_c, &av1_filter_intra_predictor_sse4_1,
- FILTER_PAETH_PRED),
-};
-
-const TX_SIZE kTxSize[] = { TX_4X4, TX_8X8, TX_16X16, TX_32X32, TX_4X8,
- TX_8X4, TX_8X16, TX_16X8, TX_16X32, TX_32X16,
- TX_4X16, TX_16X4, TX_8X32, TX_32X8 };
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AV1FilterIntraPredTest,
- ::testing::Combine(::testing::ValuesIn(kPredFuncMdArray),
- ::testing::ValuesIn(kTxSize)));
-} // namespace
diff --git a/third_party/aom/test/frame_size_tests.cc b/third_party/aom/test/frame_size_tests.cc
deleted file mode 100644
index eaf0b8370..000000000
--- a/third_party/aom/test/frame_size_tests.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/video_source.h"
-
-namespace {
-
-class AV1FrameSizeTests : public ::testing::Test,
- public ::libaom_test::EncoderTest {
- protected:
- AV1FrameSizeTests()
- : EncoderTest(&::libaom_test::kAV1), expected_res_(AOM_CODEC_OK) {}
- virtual ~AV1FrameSizeTests() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(::libaom_test::kRealTime);
- }
-
- virtual bool HandleDecodeResult(const aom_codec_err_t res_dec,
- libaom_test::Decoder *decoder) {
- EXPECT_EQ(expected_res_, res_dec) << decoder->DecodeError();
- return !::testing::Test::HasFailure();
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, 7);
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
-
- int expected_res_;
-};
-
-#if CONFIG_SIZE_LIMIT
-TEST_F(AV1FrameSizeTests, TestInvalidSizes) {
- ::libaom_test::RandomVideoSource video;
-
- video.SetSize(DECODE_WIDTH_LIMIT + 16, DECODE_HEIGHT_LIMIT + 16);
- video.set_limit(2);
- expected_res_ = AOM_CODEC_CORRUPT_FRAME;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-TEST_F(AV1FrameSizeTests, LargeValidSizes) {
- ::libaom_test::RandomVideoSource video;
-
- video.SetSize(DECODE_WIDTH_LIMIT, DECODE_HEIGHT_LIMIT);
- video.set_limit(2);
- expected_res_ = AOM_CODEC_OK;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-#endif
-
-TEST_F(AV1FrameSizeTests, OneByOneVideo) {
- ::libaom_test::RandomVideoSource video;
-
- video.SetSize(1, 1);
- video.set_limit(2);
- expected_res_ = AOM_CODEC_OK;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-#undef ONE_BY_ONE_VIDEO_NAME
-} // namespace
diff --git a/third_party/aom/test/function_equivalence_test.h b/third_party/aom/test/function_equivalence_test.h
deleted file mode 100644
index f27068902..000000000
--- a/third_party/aom/test/function_equivalence_test.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_FUNCTION_EQUIVALENCE_TEST_H_
-#define AOM_TEST_FUNCTION_EQUIVALENCE_TEST_H_
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/util.h"
-
-using libaom_test::ACMRandom;
-
-namespace libaom_test {
-// Base class for tests that compare 2 implementations of the same function
-// for equivalence. The template parameter should be pointer to a function
-// that is being tested.
-//
-// The test takes a 3-parameters encapsulating struct 'FuncParam', containing:
-// - Pointer to reference function
-// - Pointer to tested function
-// - Integer bit depth (default to 0).
-//
-// These values are then accessible in the tests as member of params_:
-// params_.ref_func, params_.tst_func, and params_.bit_depth.
-//
-
-template <typename T>
-struct FuncParam {
- FuncParam(T ref = NULL, T tst = NULL, int bit_depth = 0)
- : ref_func(ref), tst_func(tst), bit_depth(bit_depth) {}
- T ref_func;
- T tst_func;
- int bit_depth;
-};
-
-template <typename T>
-std::ostream &operator<<(std::ostream &os, const FuncParam<T> &p) {
- return os << "bit_depth:" << p.bit_depth
- << " function:" << reinterpret_cast<const void *>(p.ref_func)
- << " function:" << reinterpret_cast<const void *>(p.tst_func);
-}
-
-template <typename T>
-class FunctionEquivalenceTest : public ::testing::TestWithParam<FuncParam<T> > {
- public:
- FunctionEquivalenceTest() : rng_(ACMRandom::DeterministicSeed()) {}
-
- virtual ~FunctionEquivalenceTest() {}
-
- virtual void SetUp() { params_ = this->GetParam(); }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- ACMRandom rng_;
- FuncParam<T> params_;
-};
-
-} // namespace libaom_test
-#endif // AOM_TEST_FUNCTION_EQUIVALENCE_TEST_H_
diff --git a/third_party/aom/test/fwht4x4_test.cc b/third_party/aom/test/fwht4x4_test.cc
deleted file mode 100644
index c8d98c519..000000000
--- a/third_party/aom/test/fwht4x4_test.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-#include "config/aom_dsp_rtcd.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/transform_test_base.h"
-#include "test/util.h"
-#include "av1/common/entropy.h"
-#include "aom/aom_codec.h"
-#include "aom/aom_integer.h"
-#include "aom_ports/mem.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-typedef void (*FdctFunc)(const int16_t *in, tran_low_t *out, int stride);
-typedef void (*IdctFunc)(const tran_low_t *in, uint8_t *out, int stride);
-
-using libaom_test::FhtFunc;
-
-typedef ::testing::tuple<FdctFunc, IdctFunc, TX_TYPE, aom_bit_depth_t, int>
- Dct4x4Param;
-
-void fwht4x4_ref(const int16_t *in, tran_low_t *out, int stride,
- TxfmParam * /*txfm_param*/) {
- av1_fwht4x4_c(in, out, stride);
-}
-
-void iwht4x4_10(const tran_low_t *in, uint8_t *out, int stride) {
- av1_highbd_iwht4x4_16_add_c(in, out, stride, 10);
-}
-
-void iwht4x4_12(const tran_low_t *in, uint8_t *out, int stride) {
- av1_highbd_iwht4x4_16_add_c(in, out, stride, 12);
-}
-
-class Trans4x4WHT : public libaom_test::TransformTestBase,
- public ::testing::TestWithParam<Dct4x4Param> {
- public:
- virtual ~Trans4x4WHT() {}
-
- virtual void SetUp() {
- fwd_txfm_ = GET_PARAM(0);
- inv_txfm_ = GET_PARAM(1);
- pitch_ = 4;
- height_ = 4;
- fwd_txfm_ref = fwht4x4_ref;
- bit_depth_ = GET_PARAM(3);
- mask_ = (1 << bit_depth_) - 1;
- num_coeffs_ = GET_PARAM(4);
- }
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunFwdTxfm(const int16_t *in, tran_low_t *out, int stride) {
- fwd_txfm_(in, out, stride);
- }
- void RunInvTxfm(const tran_low_t *out, uint8_t *dst, int stride) {
- inv_txfm_(out, dst, stride);
- }
-
- FdctFunc fwd_txfm_;
- IdctFunc inv_txfm_;
-};
-
-TEST_P(Trans4x4WHT, AccuracyCheck) { RunAccuracyCheck(0, 0.00001); }
-
-TEST_P(Trans4x4WHT, CoeffCheck) { RunCoeffCheck(); }
-
-TEST_P(Trans4x4WHT, MemCheck) { RunMemCheck(); }
-
-TEST_P(Trans4x4WHT, InvAccuracyCheck) { RunInvAccuracyCheck(0); }
-using ::testing::make_tuple;
-
-INSTANTIATE_TEST_CASE_P(
- C, Trans4x4WHT,
- ::testing::Values(make_tuple(&av1_highbd_fwht4x4_c, &iwht4x4_10, DCT_DCT,
- AOM_BITS_10, 16),
- make_tuple(&av1_highbd_fwht4x4_c, &iwht4x4_12, DCT_DCT,
- AOM_BITS_12, 16)));
-} // namespace
diff --git a/third_party/aom/test/gviz_api.py b/third_party/aom/test/gviz_api.py
deleted file mode 100755
index d3a443dab..000000000
--- a/third_party/aom/test/gviz_api.py
+++ /dev/null
@@ -1,1087 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2016, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and
-# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-# was not distributed with this source code in the LICENSE file, you can
-# obtain it at www.aomedia.org/license/software. If the Alliance for Open
-# Media Patent License 1.0 was not distributed with this source code in the
-# PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-#
-
-"""Converts Python data into data for Google Visualization API clients.
-
-This library can be used to create a google.visualization.DataTable usable by
-visualizations built on the Google Visualization API. Output formats are raw
-JSON, JSON response, JavaScript, CSV, and HTML table.
-
-See http://code.google.com/apis/visualization/ for documentation on the
-Google Visualization API.
-"""
-
-__author__ = "Amit Weinstein, Misha Seltzer, Jacob Baskin"
-
-import cgi
-import cStringIO
-import csv
-import datetime
-try:
- import json
-except ImportError:
- import simplejson as json
-import types
-
-
-class DataTableException(Exception):
- """The general exception object thrown by DataTable."""
- pass
-
-
-class DataTableJSONEncoder(json.JSONEncoder):
- """JSON encoder that handles date/time/datetime objects correctly."""
-
- def __init__(self):
- json.JSONEncoder.__init__(self,
- separators=(",", ":"),
- ensure_ascii=False)
-
- def default(self, o):
- if isinstance(o, datetime.datetime):
- if o.microsecond == 0:
- # If the time doesn't have ms-resolution, leave it out to keep
- # things smaller.
- return "Date(%d,%d,%d,%d,%d,%d)" % (
- o.year, o.month - 1, o.day, o.hour, o.minute, o.second)
- else:
- return "Date(%d,%d,%d,%d,%d,%d,%d)" % (
- o.year, o.month - 1, o.day, o.hour, o.minute, o.second,
- o.microsecond / 1000)
- elif isinstance(o, datetime.date):
- return "Date(%d,%d,%d)" % (o.year, o.month - 1, o.day)
- elif isinstance(o, datetime.time):
- return [o.hour, o.minute, o.second]
- else:
- return super(DataTableJSONEncoder, self).default(o)
-
-
-class DataTable(object):
- """Wraps the data to convert to a Google Visualization API DataTable.
-
- Create this object, populate it with data, then call one of the ToJS...
- methods to return a string representation of the data in the format described.
-
- You can clear all data from the object to reuse it, but you cannot clear
- individual cells, rows, or columns. You also cannot modify the table schema
- specified in the class constructor.
-
- You can add new data one or more rows at a time. All data added to an
- instantiated DataTable must conform to the schema passed in to __init__().
-
- You can reorder the columns in the output table, and also specify row sorting
- order by column. The default column order is according to the original
- table_description parameter. Default row sort order is ascending, by column
- 1 values. For a dictionary, we sort the keys for order.
-
- The data and the table_description are closely tied, as described here:
-
- The table schema is defined in the class constructor's table_description
- parameter. The user defines each column using a tuple of
- (id[, type[, label[, custom_properties]]]). The default value for type is
- string, label is the same as ID if not specified, and custom properties is
- an empty dictionary if not specified.
-
- table_description is a dictionary or list, containing one or more column
- descriptor tuples, nested dictionaries, and lists. Each dictionary key, list
- element, or dictionary element must eventually be defined as
- a column description tuple. Here's an example of a dictionary where the key
- is a tuple, and the value is a list of two tuples:
- {('a', 'number'): [('b', 'number'), ('c', 'string')]}
-
- This flexibility in data entry enables you to build and manipulate your data
- in a Python structure that makes sense for your program.
-
- Add data to the table using the same nested design as the table's
- table_description, replacing column descriptor tuples with cell data, and
- each row is an element in the top level collection. This will be a bit
- clearer after you look at the following examples showing the
- table_description, matching data, and the resulting table:
-
- Columns as list of tuples [col1, col2, col3]
- table_description: [('a', 'number'), ('b', 'string')]
- AppendData( [[1, 'z'], [2, 'w'], [4, 'o'], [5, 'k']] )
- Table:
- a b <--- these are column ids/labels
- 1 z
- 2 w
- 4 o
- 5 k
-
- Dictionary of columns, where key is a column, and value is a list of
- columns {col1: [col2, col3]}
- table_description: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
- AppendData( data: {1: [2, 'z'], 3: [4, 'w']}
- Table:
- a b c
- 1 2 z
- 3 4 w
-
- Dictionary where key is a column, and the value is itself a dictionary of
- columns {col1: {col2, col3}}
- table_description: {('a', 'number'): {'b': 'number', 'c': 'string'}}
- AppendData( data: {1: {'b': 2, 'c': 'z'}, 3: {'b': 4, 'c': 'w'}}
- Table:
- a b c
- 1 2 z
- 3 4 w
- """
-
- def __init__(self, table_description, data=None, custom_properties=None):
- """Initialize the data table from a table schema and (optionally) data.
-
- See the class documentation for more information on table schema and data
- values.
-
- Args:
- table_description: A table schema, following one of the formats described
- in TableDescriptionParser(). Schemas describe the
- column names, data types, and labels. See
- TableDescriptionParser() for acceptable formats.
- data: Optional. If given, fills the table with the given data. The data
- structure must be consistent with schema in table_description. See
- the class documentation for more information on acceptable data. You
- can add data later by calling AppendData().
- custom_properties: Optional. A dictionary from string to string that
- goes into the table's custom properties. This can be
- later changed by changing self.custom_properties.
-
- Raises:
- DataTableException: Raised if the data and the description did not match,
- or did not use the supported formats.
- """
- self.__columns = self.TableDescriptionParser(table_description)
- self.__data = []
- self.custom_properties = {}
- if custom_properties is not None:
- self.custom_properties = custom_properties
- if data:
- self.LoadData(data)
-
- @staticmethod
- def CoerceValue(value, value_type):
- """Coerces a single value into the type expected for its column.
-
- Internal helper method.
-
- Args:
- value: The value which should be converted
- value_type: One of "string", "number", "boolean", "date", "datetime" or
- "timeofday".
-
- Returns:
- An item of the Python type appropriate to the given value_type. Strings
- are also converted to Unicode using UTF-8 encoding if necessary.
- If a tuple is given, it should be in one of the following forms:
- - (value, formatted value)
- - (value, formatted value, custom properties)
- where the formatted value is a string, and custom properties is a
- dictionary of the custom properties for this cell.
- To specify custom properties without specifying formatted value, one can
- pass None as the formatted value.
- One can also have a null-valued cell with formatted value and/or custom
- properties by specifying None for the value.
- This method ignores the custom properties except for checking that it is a
- dictionary. The custom properties are handled in the ToJSon and ToJSCode
- methods.
- The real type of the given value is not strictly checked. For example,
- any type can be used for string - as we simply take its str( ) and for
- boolean value we just check "if value".
- Examples:
- CoerceValue(None, "string") returns None
- CoerceValue((5, "5$"), "number") returns (5, "5$")
- CoerceValue(100, "string") returns "100"
- CoerceValue(0, "boolean") returns False
-
- Raises:
- DataTableException: The value and type did not match in a not-recoverable
- way, for example given value 'abc' for type 'number'.
- """
- if isinstance(value, tuple):
- # In case of a tuple, we run the same function on the value itself and
- # add the formatted value.
- if (len(value) not in [2, 3] or
- (len(value) == 3 and not isinstance(value[2], dict))):
- raise DataTableException("Wrong format for value and formatting - %s." %
- str(value))
- if not isinstance(value[1], types.StringTypes + (types.NoneType,)):
- raise DataTableException("Formatted value is not string, given %s." %
- type(value[1]))
- js_value = DataTable.CoerceValue(value[0], value_type)
- return (js_value,) + value[1:]
-
- t_value = type(value)
- if value is None:
- return value
- if value_type == "boolean":
- return bool(value)
-
- elif value_type == "number":
- if isinstance(value, (int, long, float)):
- return value
- raise DataTableException("Wrong type %s when expected number" % t_value)
-
- elif value_type == "string":
- if isinstance(value, unicode):
- return value
- else:
- return str(value).decode("utf-8")
-
- elif value_type == "date":
- if isinstance(value, datetime.datetime):
- return datetime.date(value.year, value.month, value.day)
- elif isinstance(value, datetime.date):
- return value
- else:
- raise DataTableException("Wrong type %s when expected date" % t_value)
-
- elif value_type == "timeofday":
- if isinstance(value, datetime.datetime):
- return datetime.time(value.hour, value.minute, value.second)
- elif isinstance(value, datetime.time):
- return value
- else:
- raise DataTableException("Wrong type %s when expected time" % t_value)
-
- elif value_type == "datetime":
- if isinstance(value, datetime.datetime):
- return value
- else:
- raise DataTableException("Wrong type %s when expected datetime" %
- t_value)
- # If we got here, it means the given value_type was not one of the
- # supported types.
- raise DataTableException("Unsupported type %s" % value_type)
-
- @staticmethod
- def EscapeForJSCode(encoder, value):
- if value is None:
- return "null"
- elif isinstance(value, datetime.datetime):
- if value.microsecond == 0:
- # If it's not ms-resolution, leave that out to save space.
- return "new Date(%d,%d,%d,%d,%d,%d)" % (value.year,
- value.month - 1, # To match JS
- value.day,
- value.hour,
- value.minute,
- value.second)
- else:
- return "new Date(%d,%d,%d,%d,%d,%d,%d)" % (value.year,
- value.month - 1, # match JS
- value.day,
- value.hour,
- value.minute,
- value.second,
- value.microsecond / 1000)
- elif isinstance(value, datetime.date):
- return "new Date(%d,%d,%d)" % (value.year, value.month - 1, value.day)
- else:
- return encoder.encode(value)
-
- @staticmethod
- def ToString(value):
- if value is None:
- return "(empty)"
- elif isinstance(value, (datetime.datetime,
- datetime.date,
- datetime.time)):
- return str(value)
- elif isinstance(value, unicode):
- return value
- elif isinstance(value, bool):
- return str(value).lower()
- else:
- return str(value).decode("utf-8")
-
- @staticmethod
- def ColumnTypeParser(description):
- """Parses a single column description. Internal helper method.
-
- Args:
- description: a column description in the possible formats:
- 'id'
- ('id',)
- ('id', 'type')
- ('id', 'type', 'label')
- ('id', 'type', 'label', {'custom_prop1': 'custom_val1'})
- Returns:
- Dictionary with the following keys: id, label, type, and
- custom_properties where:
- - If label not given, it equals the id.
- - If type not given, string is used by default.
- - If custom properties are not given, an empty dictionary is used by
- default.
-
- Raises:
- DataTableException: The column description did not match the RE, or
- unsupported type was passed.
- """
- if not description:
- raise DataTableException("Description error: empty description given")
-
- if not isinstance(description, (types.StringTypes, tuple)):
- raise DataTableException("Description error: expected either string or "
- "tuple, got %s." % type(description))
-
- if isinstance(description, types.StringTypes):
- description = (description,)
-
- # According to the tuple's length, we fill the keys
- # We verify everything is of type string
- for elem in description[:3]:
- if not isinstance(elem, types.StringTypes):
- raise DataTableException("Description error: expected tuple of "
- "strings, current element of type %s." %
- type(elem))
- desc_dict = {"id": description[0],
- "label": description[0],
- "type": "string",
- "custom_properties": {}}
- if len(description) > 1:
- desc_dict["type"] = description[1].lower()
- if len(description) > 2:
- desc_dict["label"] = description[2]
- if len(description) > 3:
- if not isinstance(description[3], dict):
- raise DataTableException("Description error: expected custom "
- "properties of type dict, current element "
- "of type %s." % type(description[3]))
- desc_dict["custom_properties"] = description[3]
- if len(description) > 4:
- raise DataTableException("Description error: tuple of length > 4")
- if desc_dict["type"] not in ["string", "number", "boolean",
- "date", "datetime", "timeofday"]:
- raise DataTableException(
- "Description error: unsupported type '%s'" % desc_dict["type"])
- return desc_dict
-
- @staticmethod
- def TableDescriptionParser(table_description, depth=0):
- """Parses the table_description object for internal use.
-
- Parses the user-submitted table description into an internal format used
- by the Python DataTable class. Returns the flat list of parsed columns.
-
- Args:
- table_description: A description of the table which should comply
- with one of the formats described below.
- depth: Optional. The depth of the first level in the current description.
- Used by recursive calls to this function.
-
- Returns:
- List of columns, where each column represented by a dictionary with the
- keys: id, label, type, depth, container which means the following:
- - id: the id of the column
- - name: The name of the column
- - type: The datatype of the elements in this column. Allowed types are
- described in ColumnTypeParser().
- - depth: The depth of this column in the table description
- - container: 'dict', 'iter' or 'scalar' for parsing the format easily.
- - custom_properties: The custom properties for this column.
- The returned description is flattened regardless of how it was given.
-
- Raises:
- DataTableException: Error in a column description or in the description
- structure.
-
- Examples:
- A column description can be of the following forms:
- 'id'
- ('id',)
- ('id', 'type')
- ('id', 'type', 'label')
- ('id', 'type', 'label', {'custom_prop1': 'custom_val1'})
- or as a dictionary:
- 'id': 'type'
- 'id': ('type',)
- 'id': ('type', 'label')
- 'id': ('type', 'label', {'custom_prop1': 'custom_val1'})
- If the type is not specified, we treat it as string.
- If no specific label is given, the label is simply the id.
- If no custom properties are given, we use an empty dictionary.
-
- input: [('a', 'date'), ('b', 'timeofday', 'b', {'foo': 'bar'})]
- output: [{'id': 'a', 'label': 'a', 'type': 'date',
- 'depth': 0, 'container': 'iter', 'custom_properties': {}},
- {'id': 'b', 'label': 'b', 'type': 'timeofday',
- 'depth': 0, 'container': 'iter',
- 'custom_properties': {'foo': 'bar'}}]
-
- input: {'a': [('b', 'number'), ('c', 'string', 'column c')]}
- output: [{'id': 'a', 'label': 'a', 'type': 'string',
- 'depth': 0, 'container': 'dict', 'custom_properties': {}},
- {'id': 'b', 'label': 'b', 'type': 'number',
- 'depth': 1, 'container': 'iter', 'custom_properties': {}},
- {'id': 'c', 'label': 'column c', 'type': 'string',
- 'depth': 1, 'container': 'iter', 'custom_properties': {}}]
-
- input: {('a', 'number', 'column a'): { 'b': 'number', 'c': 'string'}}
- output: [{'id': 'a', 'label': 'column a', 'type': 'number',
- 'depth': 0, 'container': 'dict', 'custom_properties': {}},
- {'id': 'b', 'label': 'b', 'type': 'number',
- 'depth': 1, 'container': 'dict', 'custom_properties': {}},
- {'id': 'c', 'label': 'c', 'type': 'string',
- 'depth': 1, 'container': 'dict', 'custom_properties': {}}]
-
- input: { ('w', 'string', 'word'): ('c', 'number', 'count') }
- output: [{'id': 'w', 'label': 'word', 'type': 'string',
- 'depth': 0, 'container': 'dict', 'custom_properties': {}},
- {'id': 'c', 'label': 'count', 'type': 'number',
- 'depth': 1, 'container': 'scalar', 'custom_properties': {}}]
-
- input: {'a': ('number', 'column a'), 'b': ('string', 'column b')}
- output: [{'id': 'a', 'label': 'column a', 'type': 'number', 'depth': 0,
- 'container': 'dict', 'custom_properties': {}},
- {'id': 'b', 'label': 'column b', 'type': 'string', 'depth': 0,
- 'container': 'dict', 'custom_properties': {}}
-
- NOTE: there might be ambiguity in the case of a dictionary representation
- of a single column. For example, the following description can be parsed
- in 2 different ways: {'a': ('b', 'c')} can be thought of a single column
- with the id 'a', of type 'b' and the label 'c', or as 2 columns: one named
- 'a', and the other named 'b' of type 'c'. We choose the first option by
- default, and in case the second option is the right one, it is possible to
- make the key into a tuple (i.e. {('a',): ('b', 'c')}) or add more info
- into the tuple, thus making it look like this: {'a': ('b', 'c', 'b', {})}
- -- second 'b' is the label, and {} is the custom properties field.
- """
- # For the recursion step, we check for a scalar object (string or tuple)
- if isinstance(table_description, (types.StringTypes, tuple)):
- parsed_col = DataTable.ColumnTypeParser(table_description)
- parsed_col["depth"] = depth
- parsed_col["container"] = "scalar"
- return [parsed_col]
-
- # Since it is not scalar, table_description must be iterable.
- if not hasattr(table_description, "__iter__"):
- raise DataTableException("Expected an iterable object, got %s" %
- type(table_description))
- if not isinstance(table_description, dict):
- # We expects a non-dictionary iterable item.
- columns = []
- for desc in table_description:
- parsed_col = DataTable.ColumnTypeParser(desc)
- parsed_col["depth"] = depth
- parsed_col["container"] = "iter"
- columns.append(parsed_col)
- if not columns:
- raise DataTableException("Description iterable objects should not"
- " be empty.")
- return columns
- # The other case is a dictionary
- if not table_description:
- raise DataTableException("Empty dictionaries are not allowed inside"
- " description")
-
- # To differentiate between the two cases of more levels below or this is
- # the most inner dictionary, we consider the number of keys (more then one
- # key is indication for most inner dictionary) and the type of the key and
- # value in case of only 1 key (if the type of key is string and the type of
- # the value is a tuple of 0-3 items, we assume this is the most inner
- # dictionary).
- # NOTE: this way of differentiating might create ambiguity. See docs.
- if (len(table_description) != 1 or
- (isinstance(table_description.keys()[0], types.StringTypes) and
- isinstance(table_description.values()[0], tuple) and
- len(table_description.values()[0]) < 4)):
- # This is the most inner dictionary. Parsing types.
- columns = []
- # We sort the items, equivalent to sort the keys since they are unique
- for key, value in sorted(table_description.items()):
- # We parse the column type as (key, type) or (key, type, label) using
- # ColumnTypeParser.
- if isinstance(value, tuple):
- parsed_col = DataTable.ColumnTypeParser((key,) + value)
- else:
- parsed_col = DataTable.ColumnTypeParser((key, value))
- parsed_col["depth"] = depth
- parsed_col["container"] = "dict"
- columns.append(parsed_col)
- return columns
- # This is an outer dictionary, must have at most one key.
- parsed_col = DataTable.ColumnTypeParser(table_description.keys()[0])
- parsed_col["depth"] = depth
- parsed_col["container"] = "dict"
- return ([parsed_col] +
- DataTable.TableDescriptionParser(table_description.values()[0],
- depth=depth + 1))
-
- @property
- def columns(self):
- """Returns the parsed table description."""
- return self.__columns
-
- def NumberOfRows(self):
- """Returns the number of rows in the current data stored in the table."""
- return len(self.__data)
-
- def SetRowsCustomProperties(self, rows, custom_properties):
- """Sets the custom properties for given row(s).
-
- Can accept a single row or an iterable of rows.
- Sets the given custom properties for all specified rows.
-
- Args:
- rows: The row, or rows, to set the custom properties for.
- custom_properties: A string to string dictionary of custom properties to
- set for all rows.
- """
- if not hasattr(rows, "__iter__"):
- rows = [rows]
- for row in rows:
- self.__data[row] = (self.__data[row][0], custom_properties)
-
- def LoadData(self, data, custom_properties=None):
- """Loads new rows to the data table, clearing existing rows.
-
- May also set the custom_properties for the added rows. The given custom
- properties dictionary specifies the dictionary that will be used for *all*
- given rows.
-
- Args:
- data: The rows that the table will contain.
- custom_properties: A dictionary of string to string to set as the custom
- properties for all rows.
- """
- self.__data = []
- self.AppendData(data, custom_properties)
-
- def AppendData(self, data, custom_properties=None):
- """Appends new data to the table.
-
- Data is appended in rows. Data must comply with
- the table schema passed in to __init__(). See CoerceValue() for a list
- of acceptable data types. See the class documentation for more information
- and examples of schema and data values.
-
- Args:
- data: The row to add to the table. The data must conform to the table
- description format.
- custom_properties: A dictionary of string to string, representing the
- custom properties to add to all the rows.
-
- Raises:
- DataTableException: The data structure does not match the description.
- """
- # If the maximal depth is 0, we simply iterate over the data table
- # lines and insert them using _InnerAppendData. Otherwise, we simply
- # let the _InnerAppendData handle all the levels.
- if not self.__columns[-1]["depth"]:
- for row in data:
- self._InnerAppendData(({}, custom_properties), row, 0)
- else:
- self._InnerAppendData(({}, custom_properties), data, 0)
-
- def _InnerAppendData(self, prev_col_values, data, col_index):
- """Inner function to assist LoadData."""
- # We first check that col_index has not exceeded the columns size
- if col_index >= len(self.__columns):
- raise DataTableException("The data does not match description, too deep")
-
- # Dealing with the scalar case, the data is the last value.
- if self.__columns[col_index]["container"] == "scalar":
- prev_col_values[0][self.__columns[col_index]["id"]] = data
- self.__data.append(prev_col_values)
- return
-
- if self.__columns[col_index]["container"] == "iter":
- if not hasattr(data, "__iter__") or isinstance(data, dict):
- raise DataTableException("Expected iterable object, got %s" %
- type(data))
- # We only need to insert the rest of the columns
- # If there are less items than expected, we only add what there is.
- for value in data:
- if col_index >= len(self.__columns):
- raise DataTableException("Too many elements given in data")
- prev_col_values[0][self.__columns[col_index]["id"]] = value
- col_index += 1
- self.__data.append(prev_col_values)
- return
-
- # We know the current level is a dictionary, we verify the type.
- if not isinstance(data, dict):
- raise DataTableException("Expected dictionary at current level, got %s" %
- type(data))
- # We check if this is the last level
- if self.__columns[col_index]["depth"] == self.__columns[-1]["depth"]:
- # We need to add the keys in the dictionary as they are
- for col in self.__columns[col_index:]:
- if col["id"] in data:
- prev_col_values[0][col["id"]] = data[col["id"]]
- self.__data.append(prev_col_values)
- return
-
- # We have a dictionary in an inner depth level.
- if not data.keys():
- # In case this is an empty dictionary, we add a record with the columns
- # filled only until this point.
- self.__data.append(prev_col_values)
- else:
- for key in sorted(data):
- col_values = dict(prev_col_values[0])
- col_values[self.__columns[col_index]["id"]] = key
- self._InnerAppendData((col_values, prev_col_values[1]),
- data[key], col_index + 1)
-
- def _PreparedData(self, order_by=()):
- """Prepares the data for enumeration - sorting it by order_by.
-
- Args:
- order_by: Optional. Specifies the name of the column(s) to sort by, and
- (optionally) which direction to sort in. Default sort direction
- is asc. Following formats are accepted:
- "string_col_name" -- For a single key in default (asc) order.
- ("string_col_name", "asc|desc") -- For a single key.
- [("col_1","asc|desc"), ("col_2","asc|desc")] -- For more than
- one column, an array of tuples of (col_name, "asc|desc").
-
- Returns:
- The data sorted by the keys given.
-
- Raises:
- DataTableException: Sort direction not in 'asc' or 'desc'
- """
- if not order_by:
- return self.__data
-
- proper_sort_keys = []
- if isinstance(order_by, types.StringTypes) or (
- isinstance(order_by, tuple) and len(order_by) == 2 and
- order_by[1].lower() in ["asc", "desc"]):
- order_by = (order_by,)
- for key in order_by:
- if isinstance(key, types.StringTypes):
- proper_sort_keys.append((key, 1))
- elif (isinstance(key, (list, tuple)) and len(key) == 2 and
- key[1].lower() in ("asc", "desc")):
- proper_sort_keys.append((key[0], key[1].lower() == "asc" and 1 or -1))
- else:
- raise DataTableException("Expected tuple with second value: "
- "'asc' or 'desc'")
-
- def SortCmpFunc(row1, row2):
- """cmp function for sorted. Compares by keys and 'asc'/'desc' keywords."""
- for key, asc_mult in proper_sort_keys:
- cmp_result = asc_mult * cmp(row1[0].get(key), row2[0].get(key))
- if cmp_result:
- return cmp_result
- return 0
-
- return sorted(self.__data, cmp=SortCmpFunc)
-
- def ToJSCode(self, name, columns_order=None, order_by=()):
- """Writes the data table as a JS code string.
-
- This method writes a string of JS code that can be run to
- generate a DataTable with the specified data. Typically used for debugging
- only.
-
- Args:
- name: The name of the table. The name would be used as the DataTable's
- variable name in the created JS code.
- columns_order: Optional. Specifies the order of columns in the
- output table. Specify a list of all column IDs in the order
- in which you want the table created.
- Note that you must list all column IDs in this parameter,
- if you use it.
- order_by: Optional. Specifies the name of the column(s) to sort by.
- Passed as is to _PreparedData.
-
- Returns:
- A string of JS code that, when run, generates a DataTable with the given
- name and the data stored in the DataTable object.
- Example result:
- "var tab1 = new google.visualization.DataTable();
- tab1.addColumn("string", "a", "a");
- tab1.addColumn("number", "b", "b");
- tab1.addColumn("boolean", "c", "c");
- tab1.addRows(10);
- tab1.setCell(0, 0, "a");
- tab1.setCell(0, 1, 1, null, {"foo": "bar"});
- tab1.setCell(0, 2, true);
- ...
- tab1.setCell(9, 0, "c");
- tab1.setCell(9, 1, 3, "3$");
- tab1.setCell(9, 2, false);"
-
- Raises:
- DataTableException: The data does not match the type.
- """
-
- encoder = DataTableJSONEncoder()
-
- if columns_order is None:
- columns_order = [col["id"] for col in self.__columns]
- col_dict = dict([(col["id"], col) for col in self.__columns])
-
- # We first create the table with the given name
- jscode = "var %s = new google.visualization.DataTable();\n" % name
- if self.custom_properties:
- jscode += "%s.setTableProperties(%s);\n" % (
- name, encoder.encode(self.custom_properties))
-
- # We add the columns to the table
- for i, col in enumerate(columns_order):
- jscode += "%s.addColumn(%s, %s, %s);\n" % (
- name,
- encoder.encode(col_dict[col]["type"]),
- encoder.encode(col_dict[col]["label"]),
- encoder.encode(col_dict[col]["id"]))
- if col_dict[col]["custom_properties"]:
- jscode += "%s.setColumnProperties(%d, %s);\n" % (
- name, i, encoder.encode(col_dict[col]["custom_properties"]))
- jscode += "%s.addRows(%d);\n" % (name, len(self.__data))
-
- # We now go over the data and add each row
- for (i, (row, cp)) in enumerate(self._PreparedData(order_by)):
- # We add all the elements of this row by their order
- for (j, col) in enumerate(columns_order):
- if col not in row or row[col] is None:
- continue
- value = self.CoerceValue(row[col], col_dict[col]["type"])
- if isinstance(value, tuple):
- cell_cp = ""
- if len(value) == 3:
- cell_cp = ", %s" % encoder.encode(row[col][2])
- # We have a formatted value or custom property as well
- jscode += ("%s.setCell(%d, %d, %s, %s%s);\n" %
- (name, i, j,
- self.EscapeForJSCode(encoder, value[0]),
- self.EscapeForJSCode(encoder, value[1]), cell_cp))
- else:
- jscode += "%s.setCell(%d, %d, %s);\n" % (
- name, i, j, self.EscapeForJSCode(encoder, value))
- if cp:
- jscode += "%s.setRowProperties(%d, %s);\n" % (
- name, i, encoder.encode(cp))
- return jscode
-
- def ToHtml(self, columns_order=None, order_by=()):
- """Writes the data table as an HTML table code string.
-
- Args:
- columns_order: Optional. Specifies the order of columns in the
- output table. Specify a list of all column IDs in the order
- in which you want the table created.
- Note that you must list all column IDs in this parameter,
- if you use it.
- order_by: Optional. Specifies the name of the column(s) to sort by.
- Passed as is to _PreparedData.
-
- Returns:
- An HTML table code string.
- Example result (the result is without the newlines):
- <html><body><table border="1">
- <thead><tr><th>a</th><th>b</th><th>c</th></tr></thead>
- <tbody>
- <tr><td>1</td><td>"z"</td><td>2</td></tr>
- <tr><td>"3$"</td><td>"w"</td><td></td></tr>
- </tbody>
- </table></body></html>
-
- Raises:
- DataTableException: The data does not match the type.
- """
- table_template = "<html><body><table border=\"1\">%s</table></body></html>"
- columns_template = "<thead><tr>%s</tr></thead>"
- rows_template = "<tbody>%s</tbody>"
- row_template = "<tr>%s</tr>"
- header_cell_template = "<th>%s</th>"
- cell_template = "<td>%s</td>"
-
- if columns_order is None:
- columns_order = [col["id"] for col in self.__columns]
- col_dict = dict([(col["id"], col) for col in self.__columns])
-
- columns_list = []
- for col in columns_order:
- columns_list.append(header_cell_template %
- cgi.escape(col_dict[col]["label"]))
- columns_html = columns_template % "".join(columns_list)
-
- rows_list = []
- # We now go over the data and add each row
- for row, unused_cp in self._PreparedData(order_by):
- cells_list = []
- # We add all the elements of this row by their order
- for col in columns_order:
- # For empty string we want empty quotes ("").
- value = ""
- if col in row and row[col] is not None:
- value = self.CoerceValue(row[col], col_dict[col]["type"])
- if isinstance(value, tuple):
- # We have a formatted value and we're going to use it
- cells_list.append(cell_template % cgi.escape(self.ToString(value[1])))
- else:
- cells_list.append(cell_template % cgi.escape(self.ToString(value)))
- rows_list.append(row_template % "".join(cells_list))
- rows_html = rows_template % "".join(rows_list)
-
- return table_template % (columns_html + rows_html)
-
- def ToCsv(self, columns_order=None, order_by=(), separator=","):
- """Writes the data table as a CSV string.
-
- Output is encoded in UTF-8 because the Python "csv" module can't handle
- Unicode properly according to its documentation.
-
- Args:
- columns_order: Optional. Specifies the order of columns in the
- output table. Specify a list of all column IDs in the order
- in which you want the table created.
- Note that you must list all column IDs in this parameter,
- if you use it.
- order_by: Optional. Specifies the name of the column(s) to sort by.
- Passed as is to _PreparedData.
- separator: Optional. The separator to use between the values.
-
- Returns:
- A CSV string representing the table.
- Example result:
- 'a','b','c'
- 1,'z',2
- 3,'w',''
-
- Raises:
- DataTableException: The data does not match the type.
- """
-
- csv_buffer = cStringIO.StringIO()
- writer = csv.writer(csv_buffer, delimiter=separator)
-
- if columns_order is None:
- columns_order = [col["id"] for col in self.__columns]
- col_dict = dict([(col["id"], col) for col in self.__columns])
-
- writer.writerow([col_dict[col]["label"].encode("utf-8")
- for col in columns_order])
-
- # We now go over the data and add each row
- for row, unused_cp in self._PreparedData(order_by):
- cells_list = []
- # We add all the elements of this row by their order
- for col in columns_order:
- value = ""
- if col in row and row[col] is not None:
- value = self.CoerceValue(row[col], col_dict[col]["type"])
- if isinstance(value, tuple):
- # We have a formatted value. Using it only for date/time types.
- if col_dict[col]["type"] in ["date", "datetime", "timeofday"]:
- cells_list.append(self.ToString(value[1]).encode("utf-8"))
- else:
- cells_list.append(self.ToString(value[0]).encode("utf-8"))
- else:
- cells_list.append(self.ToString(value).encode("utf-8"))
- writer.writerow(cells_list)
- return csv_buffer.getvalue()
-
- def ToTsvExcel(self, columns_order=None, order_by=()):
- """Returns a file in tab-separated-format readable by MS Excel.
-
- Returns a file in UTF-16 little endian encoding, with tabs separating the
- values.
-
- Args:
- columns_order: Delegated to ToCsv.
- order_by: Delegated to ToCsv.
-
- Returns:
- A tab-separated little endian UTF16 file representing the table.
- """
- return (self.ToCsv(columns_order, order_by, separator="\t")
- .decode("utf-8").encode("UTF-16LE"))
-
- def _ToJSonObj(self, columns_order=None, order_by=()):
- """Returns an object suitable to be converted to JSON.
-
- Args:
- columns_order: Optional. A list of all column IDs in the order in which
- you want them created in the output table. If specified,
- all column IDs must be present.
- order_by: Optional. Specifies the name of the column(s) to sort by.
- Passed as is to _PreparedData().
-
- Returns:
- A dictionary object for use by ToJSon or ToJSonResponse.
- """
- if columns_order is None:
- columns_order = [col["id"] for col in self.__columns]
- col_dict = dict([(col["id"], col) for col in self.__columns])
-
- # Creating the column JSON objects
- col_objs = []
- for col_id in columns_order:
- col_obj = {"id": col_dict[col_id]["id"],
- "label": col_dict[col_id]["label"],
- "type": col_dict[col_id]["type"]}
- if col_dict[col_id]["custom_properties"]:
- col_obj["p"] = col_dict[col_id]["custom_properties"]
- col_objs.append(col_obj)
-
- # Creating the rows jsons
- row_objs = []
- for row, cp in self._PreparedData(order_by):
- cell_objs = []
- for col in columns_order:
- value = self.CoerceValue(row.get(col, None), col_dict[col]["type"])
- if value is None:
- cell_obj = None
- elif isinstance(value, tuple):
- cell_obj = {"v": value[0]}
- if len(value) > 1 and value[1] is not None:
- cell_obj["f"] = value[1]
- if len(value) == 3:
- cell_obj["p"] = value[2]
- else:
- cell_obj = {"v": value}
- cell_objs.append(cell_obj)
- row_obj = {"c": cell_objs}
- if cp:
- row_obj["p"] = cp
- row_objs.append(row_obj)
-
- json_obj = {"cols": col_objs, "rows": row_objs}
- if self.custom_properties:
- json_obj["p"] = self.custom_properties
-
- return json_obj
-
- def ToJSon(self, columns_order=None, order_by=()):
- """Returns a string that can be used in a JS DataTable constructor.
-
- This method writes a JSON string that can be passed directly into a Google
- Visualization API DataTable constructor. Use this output if you are
- hosting the visualization HTML on your site, and want to code the data
- table in Python. Pass this string into the
- google.visualization.DataTable constructor, e.g,:
- ... on my page that hosts my visualization ...
- google.setOnLoadCallback(drawTable);
- function drawTable() {
- var data = new google.visualization.DataTable(_my_JSon_string, 0.6);
- myTable.draw(data);
- }
-
- Args:
- columns_order: Optional. Specifies the order of columns in the
- output table. Specify a list of all column IDs in the order
- in which you want the table created.
- Note that you must list all column IDs in this parameter,
- if you use it.
- order_by: Optional. Specifies the name of the column(s) to sort by.
- Passed as is to _PreparedData().
-
- Returns:
- A JSon constructor string to generate a JS DataTable with the data
- stored in the DataTable object.
- Example result (the result is without the newlines):
- {cols: [{id:"a",label:"a",type:"number"},
- {id:"b",label:"b",type:"string"},
- {id:"c",label:"c",type:"number"}],
- rows: [{c:[{v:1},{v:"z"},{v:2}]}, c:{[{v:3,f:"3$"},{v:"w"},{v:null}]}],
- p: {'foo': 'bar'}}
-
- Raises:
- DataTableException: The data does not match the type.
- """
-
- encoder = DataTableJSONEncoder()
- return encoder.encode(
- self._ToJSonObj(columns_order, order_by)).encode("utf-8")
-
- def ToJSonResponse(self, columns_order=None, order_by=(), req_id=0,
- response_handler="google.visualization.Query.setResponse"):
- """Writes a table as a JSON response that can be returned as-is to a client.
-
- This method writes a JSON response to return to a client in response to a
- Google Visualization API query. This string can be processed by the calling
- page, and is used to deliver a data table to a visualization hosted on
- a different page.
-
- Args:
- columns_order: Optional. Passed straight to self.ToJSon().
- order_by: Optional. Passed straight to self.ToJSon().
- req_id: Optional. The response id, as retrieved by the request.
- response_handler: Optional. The response handler, as retrieved by the
- request.
-
- Returns:
- A JSON response string to be received by JS the visualization Query
- object. This response would be translated into a DataTable on the
- client side.
- Example result (newlines added for readability):
- google.visualization.Query.setResponse({
- 'version':'0.6', 'reqId':'0', 'status':'OK',
- 'table': {cols: [...], rows: [...]}});
-
- Note: The URL returning this string can be used as a data source by Google
- Visualization Gadgets or from JS code.
- """
-
- response_obj = {
- "version": "0.6",
- "reqId": str(req_id),
- "table": self._ToJSonObj(columns_order, order_by),
- "status": "ok"
- }
- encoder = DataTableJSONEncoder()
- return "%s(%s);" % (response_handler,
- encoder.encode(response_obj).encode("utf-8"))
-
- def ToResponse(self, columns_order=None, order_by=(), tqx=""):
- """Writes the right response according to the request string passed in tqx.
-
- This method parses the tqx request string (format of which is defined in
- the documentation for implementing a data source of Google Visualization),
- and returns the right response according to the request.
- It parses out the "out" parameter of tqx, calls the relevant response
- (ToJSonResponse() for "json", ToCsv() for "csv", ToHtml() for "html",
- ToTsvExcel() for "tsv-excel") and passes the response function the rest of
- the relevant request keys.
-
- Args:
- columns_order: Optional. Passed as is to the relevant response function.
- order_by: Optional. Passed as is to the relevant response function.
- tqx: Optional. The request string as received by HTTP GET. Should be in
- the format "key1:value1;key2:value2...". All keys have a default
- value, so an empty string will just do the default (which is calling
- ToJSonResponse() with no extra parameters).
-
- Returns:
- A response string, as returned by the relevant response function.
-
- Raises:
- DataTableException: One of the parameters passed in tqx is not supported.
- """
- tqx_dict = {}
- if tqx:
- tqx_dict = dict(opt.split(":") for opt in tqx.split(";"))
- if tqx_dict.get("version", "0.6") != "0.6":
- raise DataTableException(
- "Version (%s) passed by request is not supported."
- % tqx_dict["version"])
-
- if tqx_dict.get("out", "json") == "json":
- response_handler = tqx_dict.get("responseHandler",
- "google.visualization.Query.setResponse")
- return self.ToJSonResponse(columns_order, order_by,
- req_id=tqx_dict.get("reqId", 0),
- response_handler=response_handler)
- elif tqx_dict["out"] == "html":
- return self.ToHtml(columns_order, order_by)
- elif tqx_dict["out"] == "csv":
- return self.ToCsv(columns_order, order_by)
- elif tqx_dict["out"] == "tsv-excel":
- return self.ToTsvExcel(columns_order, order_by)
- else:
- raise DataTableException(
- "'out' parameter: '%s' is not supported" % tqx_dict["out"])
diff --git a/third_party/aom/test/hash_test.cc b/third_party/aom/test/hash_test.cc
deleted file mode 100644
index e9f7f63c9..000000000
--- a/third_party/aom/test/hash_test.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdlib>
-#include <new>
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/encoder/hash.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-typedef uint32_t (*get_crc32c_value_func)(void *calculator, uint8_t *p,
- int length);
-
-typedef ::testing::tuple<get_crc32c_value_func, int> HashParam;
-
-class AV1Crc32cHashTest : public ::testing::TestWithParam<HashParam> {
- public:
- ~AV1Crc32cHashTest();
- void SetUp();
-
- void TearDown();
-
- protected:
- void RunCheckOutput(get_crc32c_value_func test_impl);
- void RunSpeedTest(get_crc32c_value_func test_impl);
-
- void RunZeroTest(get_crc32c_value_func test_impl);
-
- libaom_test::ACMRandom rnd_;
- CRC32C calc_;
- uint8_t *buffer_;
- int bsize_;
- int length_;
-};
-
-AV1Crc32cHashTest::~AV1Crc32cHashTest() { ; }
-
-void AV1Crc32cHashTest::SetUp() {
- rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed());
- av1_crc32c_calculator_init(&calc_);
-
- bsize_ = GET_PARAM(1);
- length_ = bsize_ * bsize_ * sizeof(uint16_t);
- buffer_ = new uint8_t[length_];
- ASSERT_TRUE(buffer_ != NULL);
- for (int i = 0; i < length_; ++i) {
- buffer_[i] = rnd_.Rand8();
- }
-}
-
-void AV1Crc32cHashTest::TearDown() { delete[] buffer_; }
-
-void AV1Crc32cHashTest::RunCheckOutput(get_crc32c_value_func test_impl) {
- get_crc32c_value_func ref_impl = av1_get_crc32c_value_c;
- // for the same buffer crc should be the same
- uint32_t crc0 = test_impl(&calc_, buffer_, length_);
- uint32_t crc1 = test_impl(&calc_, buffer_, length_);
- uint32_t crc2 = ref_impl(&calc_, buffer_, length_);
- ASSERT_EQ(crc0, crc1);
- ASSERT_EQ(crc0, crc2); // should equal to software version
- // modify buffer
- buffer_[0] += 1;
- uint32_t crc3 = test_impl(&calc_, buffer_, length_);
- uint32_t crc4 = ref_impl(&calc_, buffer_, length_);
- ASSERT_NE(crc0, crc3); // crc shoud not equal to previous one
- ASSERT_EQ(crc3, crc4);
-}
-
-void AV1Crc32cHashTest::RunSpeedTest(get_crc32c_value_func test_impl) {
- get_crc32c_value_func impls[] = { av1_get_crc32c_value_c, test_impl };
- const int repeat = 10000000 / (bsize_ + bsize_);
-
- aom_usec_timer timer;
- double time[2];
- for (int i = 0; i < 2; ++i) {
- aom_usec_timer_start(&timer);
- for (int j = 0; j < repeat; ++j) {
- impls[i](&calc_, buffer_, length_);
- }
- aom_usec_timer_mark(&timer);
- time[i] = static_cast<double>(aom_usec_timer_elapsed(&timer));
- }
- printf("hash %3dx%-3d:%7.2f/%7.2fus", bsize_, bsize_, time[0], time[1]);
- printf("(%3.2f)\n", time[0] / time[1]);
-}
-
-void AV1Crc32cHashTest::RunZeroTest(get_crc32c_value_func test_impl) {
- uint8_t buffer0[1024] = { 0 };
- // for buffer with different size the crc should not be the same
- const uint32_t crc0 = test_impl(&calc_, buffer0, 32);
- const uint32_t crc1 = test_impl(&calc_, buffer0, 128);
- const uint32_t crc2 = test_impl(&calc_, buffer0, 1024);
- ASSERT_NE(crc0, crc1);
- ASSERT_NE(crc0, crc2);
- ASSERT_NE(crc1, crc2);
-}
-
-TEST_P(AV1Crc32cHashTest, CheckOutput) { RunCheckOutput(GET_PARAM(0)); }
-
-TEST_P(AV1Crc32cHashTest, CheckZero) { RunZeroTest(GET_PARAM(0)); }
-
-TEST_P(AV1Crc32cHashTest, DISABLED_Speed) { RunSpeedTest(GET_PARAM(0)); }
-
-const int kValidBlockSize[] = { 64, 32, 8, 4 };
-
-INSTANTIATE_TEST_CASE_P(
- C, AV1Crc32cHashTest,
- ::testing::Combine(::testing::Values(&av1_get_crc32c_value_c),
- ::testing::ValuesIn(kValidBlockSize)));
-
-#if HAVE_SSE4_2
-INSTANTIATE_TEST_CASE_P(
- SSE4_2, AV1Crc32cHashTest,
- ::testing::Combine(::testing::Values(&av1_get_crc32c_value_sse4_2),
- ::testing::ValuesIn(kValidBlockSize)));
-#endif
-
-} // namespace
diff --git a/third_party/aom/test/hbd_metrics_test.cc b/third_party/aom/test/hbd_metrics_test.cc
deleted file mode 100644
index 09df9bde4..000000000
--- a/third_party/aom/test/hbd_metrics_test.cc
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <new>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-
-#include "config/aom_config.h"
-
-#include "aom_dsp/psnr.h"
-#include "aom_dsp/ssim.h"
-#include "aom_ports/mem.h"
-#include "aom_ports/msvc.h"
-#include "aom_scale/yv12config.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-
-typedef double (*LBDMetricFunc)(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest);
-typedef double (*HBDMetricFunc)(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
- uint32_t bd);
-
-double compute_hbd_psnr(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
- uint32_t bd) {
- PSNR_STATS psnr;
- aom_calc_highbd_psnr(source, dest, &psnr, bd, in_bd);
- return psnr.psnr[0];
-}
-
-double compute_psnr(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest) {
- PSNR_STATS psnr;
- aom_calc_psnr(source, dest, &psnr);
- return psnr.psnr[0];
-}
-
-double compute_hbd_psnrhvs(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
- uint32_t bd) {
- double tempy, tempu, tempv;
- return aom_psnrhvs(source, dest, &tempy, &tempu, &tempv, bd, in_bd);
-}
-
-double compute_psnrhvs(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest) {
- double tempy, tempu, tempv;
- return aom_psnrhvs(source, dest, &tempy, &tempu, &tempv, 8, 8);
-}
-
-double compute_hbd_fastssim(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
- uint32_t bd) {
- double tempy, tempu, tempv;
- return aom_calc_fastssim(source, dest, &tempy, &tempu, &tempv, bd, in_bd);
-}
-
-double compute_fastssim(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest) {
- double tempy, tempu, tempv;
- return aom_calc_fastssim(source, dest, &tempy, &tempu, &tempv, 8, 8);
-}
-
-double compute_hbd_aomssim(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest, uint32_t in_bd,
- uint32_t bd) {
- double ssim, weight;
- ssim = aom_highbd_calc_ssim(source, dest, &weight, bd, in_bd);
- return 100 * pow(ssim / weight, 8.0);
-}
-
-double compute_aomssim(const YV12_BUFFER_CONFIG *source,
- const YV12_BUFFER_CONFIG *dest) {
- double ssim, weight;
- ssim = aom_calc_ssim(source, dest, &weight);
- return 100 * pow(ssim / weight, 8.0);
-}
-
-class HBDMetricsTestBase {
- public:
- virtual ~HBDMetricsTestBase() {}
-
- protected:
- void RunAccuracyCheck() {
- const int width = 1920;
- const int height = 1080;
- size_t i = 0;
- const uint8_t kPixFiller = 128;
- YV12_BUFFER_CONFIG lbd_src, lbd_dst;
- YV12_BUFFER_CONFIG hbd_src, hbd_dst;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- double lbd_db, hbd_db;
-
- memset(&lbd_src, 0, sizeof(lbd_src));
- memset(&lbd_dst, 0, sizeof(lbd_dst));
- memset(&hbd_src, 0, sizeof(hbd_src));
- memset(&hbd_dst, 0, sizeof(hbd_dst));
-
- aom_alloc_frame_buffer(&lbd_src, width, height, 1, 1, 0, 32, 16);
- aom_alloc_frame_buffer(&lbd_dst, width, height, 1, 1, 0, 32, 16);
- aom_alloc_frame_buffer(&hbd_src, width, height, 1, 1, 1, 32, 16);
- aom_alloc_frame_buffer(&hbd_dst, width, height, 1, 1, 1, 32, 16);
-
- memset(lbd_src.buffer_alloc, kPixFiller, lbd_src.buffer_alloc_sz);
- while (i < lbd_src.buffer_alloc_sz) {
- uint16_t spel, dpel;
- spel = lbd_src.buffer_alloc[i];
- // Create some distortion for dst buffer.
- dpel = rnd.Rand8();
- lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
- ((uint16_t *)(hbd_src.buffer_alloc))[i] = spel << (bit_depth_ - 8);
- ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
- i++;
- }
-
- lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
- EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
-
- i = 0;
- while (i < lbd_src.buffer_alloc_sz) {
- uint16_t dpel;
- // Create some small distortion for dst buffer.
- dpel = 120 + (rnd.Rand8() >> 4);
- lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
- ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
- i++;
- }
-
- lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
- EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
-
- i = 0;
- while (i < lbd_src.buffer_alloc_sz) {
- uint16_t dpel;
- // Create some small distortion for dst buffer.
- dpel = 126 + (rnd.Rand8() >> 6);
- lbd_dst.buffer_alloc[i] = (uint8_t)dpel;
- ((uint16_t *)(hbd_dst.buffer_alloc))[i] = dpel << (bit_depth_ - 8);
- i++;
- }
-
- lbd_db = lbd_metric_(&lbd_src, &lbd_dst);
- hbd_db = hbd_metric_(&hbd_src, &hbd_dst, input_bit_depth_, bit_depth_);
- EXPECT_LE(fabs(lbd_db - hbd_db), threshold_);
-
- aom_free_frame_buffer(&lbd_src);
- aom_free_frame_buffer(&lbd_dst);
- aom_free_frame_buffer(&hbd_src);
- aom_free_frame_buffer(&hbd_dst);
- }
-
- int input_bit_depth_;
- int bit_depth_;
- double threshold_;
- LBDMetricFunc lbd_metric_;
- HBDMetricFunc hbd_metric_;
-};
-
-typedef ::testing::tuple<LBDMetricFunc, HBDMetricFunc, int, int, double>
- MetricTestTParam;
-class HBDMetricsTest : public HBDMetricsTestBase,
- public ::testing::TestWithParam<MetricTestTParam> {
- public:
- virtual void SetUp() {
- lbd_metric_ = GET_PARAM(0);
- hbd_metric_ = GET_PARAM(1);
- input_bit_depth_ = GET_PARAM(2);
- bit_depth_ = GET_PARAM(3);
- threshold_ = GET_PARAM(4);
- }
- virtual void TearDown() {}
-};
-
-TEST_P(HBDMetricsTest, RunAccuracyCheck) { RunAccuracyCheck(); }
-
-// Allow small variation due to floating point operations.
-static const double kSsim_thresh = 0.001;
-// Allow some additional errors accumulated in floating point operations.
-static const double kFSsim_thresh = 0.03;
-// Allow some extra variation due to rounding error accumulated in dct.
-static const double kPhvs_thresh = 0.3;
-
-INSTANTIATE_TEST_CASE_P(
- AOMSSIM, HBDMetricsTest,
- ::testing::Values(MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
- 8, 10, kSsim_thresh),
- MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
- 10, 10, kPhvs_thresh),
- MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
- 8, 12, kSsim_thresh),
- MetricTestTParam(&compute_aomssim, &compute_hbd_aomssim,
- 12, 12, kPhvs_thresh)));
-INSTANTIATE_TEST_CASE_P(
- FASTSSIM, HBDMetricsTest,
- ::testing::Values(MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
- 8, 10, kFSsim_thresh),
- MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
- 10, 10, kFSsim_thresh),
- MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
- 8, 12, kFSsim_thresh),
- MetricTestTParam(&compute_fastssim, &compute_hbd_fastssim,
- 12, 12, kFSsim_thresh)));
-INSTANTIATE_TEST_CASE_P(
- PSNRHVS, HBDMetricsTest,
- ::testing::Values(MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
- 8, 10, kPhvs_thresh),
- MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
- 10, 10, kPhvs_thresh),
- MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
- 8, 12, kPhvs_thresh),
- MetricTestTParam(&compute_psnrhvs, &compute_hbd_psnrhvs,
- 12, 12, kPhvs_thresh)));
-INSTANTIATE_TEST_CASE_P(
- PSNR, HBDMetricsTest,
- ::testing::Values(
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 10, kPhvs_thresh),
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 10, 10,
- kPhvs_thresh),
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 8, 12, kPhvs_thresh),
- MetricTestTParam(&compute_psnr, &compute_hbd_psnr, 12, 12,
- kPhvs_thresh)));
-} // namespace
diff --git a/third_party/aom/test/hiprec_convolve_test.cc b/third_party/aom/test/hiprec_convolve_test.cc
deleted file mode 100644
index f94a0730c..000000000
--- a/third_party/aom/test/hiprec_convolve_test.cc
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/hiprec_convolve_test_util.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-using libaom_test::AV1HighbdHiprecConvolve::AV1HighbdHiprecConvolveTest;
-using libaom_test::AV1HiprecConvolve::AV1HiprecConvolveTest;
-
-namespace {
-
-TEST_P(AV1HiprecConvolveTest, CheckOutput) { RunCheckOutput(GET_PARAM(3)); }
-TEST_P(AV1HiprecConvolveTest, DISABLED_SpeedTest) {
- RunSpeedTest(GET_PARAM(3));
-}
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, AV1HiprecConvolveTest,
- libaom_test::AV1HiprecConvolve::BuildParams(
- av1_wiener_convolve_add_src_sse2));
-#endif
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AV1HiprecConvolveTest,
- libaom_test::AV1HiprecConvolve::BuildParams(
- av1_wiener_convolve_add_src_avx2));
-#endif
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, AV1HiprecConvolveTest,
- libaom_test::AV1HiprecConvolve::BuildParams(
- av1_wiener_convolve_add_src_neon));
-#endif
-
-#if HAVE_SSSE3 || HAVE_AVX2
-TEST_P(AV1HighbdHiprecConvolveTest, CheckOutput) {
- RunCheckOutput(GET_PARAM(4));
-}
-TEST_P(AV1HighbdHiprecConvolveTest, DISABLED_SpeedTest) {
- RunSpeedTest(GET_PARAM(4));
-}
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(SSSE3, AV1HighbdHiprecConvolveTest,
- libaom_test::AV1HighbdHiprecConvolve::BuildParams(
- av1_highbd_wiener_convolve_add_src_ssse3));
-#endif
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AV1HighbdHiprecConvolveTest,
- libaom_test::AV1HighbdHiprecConvolve::BuildParams(
- av1_highbd_wiener_convolve_add_src_avx2));
-#endif
-#endif
-
-} // namespace
diff --git a/third_party/aom/test/hiprec_convolve_test_util.cc b/third_party/aom/test/hiprec_convolve_test_util.cc
deleted file mode 100644
index 2672bcec3..000000000
--- a/third_party/aom/test/hiprec_convolve_test_util.cc
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "test/hiprec_convolve_test_util.h"
-
-#include "av1/common/restoration.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-namespace libaom_test {
-
-// Generate a random pair of filter kernels, using the ranges
-// of possible values from the loop-restoration experiment
-static void generate_kernels(ACMRandom *rnd, InterpKernel hkernel,
- InterpKernel vkernel) {
- hkernel[0] = hkernel[6] =
- WIENER_FILT_TAP0_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP0_MAXV + 1 - WIENER_FILT_TAP0_MINV);
- hkernel[1] = hkernel[5] =
- WIENER_FILT_TAP1_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP1_MAXV + 1 - WIENER_FILT_TAP1_MINV);
- hkernel[2] = hkernel[4] =
- WIENER_FILT_TAP2_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP2_MAXV + 1 - WIENER_FILT_TAP2_MINV);
- hkernel[3] = -(hkernel[0] + hkernel[1] + hkernel[2]);
- hkernel[7] = 0;
-
- vkernel[0] = vkernel[6] =
- WIENER_FILT_TAP0_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP0_MAXV + 1 - WIENER_FILT_TAP0_MINV);
- vkernel[1] = vkernel[5] =
- WIENER_FILT_TAP1_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP1_MAXV + 1 - WIENER_FILT_TAP1_MINV);
- vkernel[2] = vkernel[4] =
- WIENER_FILT_TAP2_MINV +
- rnd->PseudoUniform(WIENER_FILT_TAP2_MAXV + 1 - WIENER_FILT_TAP2_MINV);
- vkernel[3] = -(vkernel[0] + vkernel[1] + vkernel[2]);
- vkernel[7] = 0;
-}
-
-namespace AV1HiprecConvolve {
-
-::testing::internal::ParamGenerator<HiprecConvolveParam> BuildParams(
- hiprec_convolve_func filter) {
- const HiprecConvolveParam params[] = {
- make_tuple(8, 8, 50000, filter), make_tuple(8, 4, 50000, filter),
- make_tuple(64, 24, 1000, filter), make_tuple(64, 64, 1000, filter),
- make_tuple(64, 56, 1000, filter), make_tuple(32, 8, 10000, filter),
- make_tuple(32, 28, 10000, filter), make_tuple(32, 32, 10000, filter),
- make_tuple(16, 34, 10000, filter), make_tuple(32, 34, 10000, filter),
- make_tuple(64, 34, 1000, filter), make_tuple(8, 17, 10000, filter),
- make_tuple(16, 17, 10000, filter), make_tuple(32, 17, 10000, filter)
- };
- return ::testing::ValuesIn(params);
-}
-
-AV1HiprecConvolveTest::~AV1HiprecConvolveTest() {}
-void AV1HiprecConvolveTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1HiprecConvolveTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1HiprecConvolveTest::RunCheckOutput(hiprec_convolve_func test_impl) {
- const int w = 128, h = 128;
- const int out_w = GET_PARAM(0), out_h = GET_PARAM(1);
- const int num_iters = GET_PARAM(2);
- int i, j;
- const ConvolveParams conv_params = get_conv_params_wiener(8);
-
- uint8_t *input_ = new uint8_t[h * w];
- uint8_t *input = input_;
-
- // The AVX2 convolve functions always write rows with widths that are
- // multiples of 16. So to avoid a buffer overflow, we may need to pad
- // rows to a multiple of 16.
- int output_n = ALIGN_POWER_OF_TWO(out_w, 4) * out_h;
- uint8_t *output = new uint8_t[output_n];
- uint8_t *output2 = new uint8_t[output_n];
-
- // Generate random filter kernels
- DECLARE_ALIGNED(16, InterpKernel, hkernel);
- DECLARE_ALIGNED(16, InterpKernel, vkernel);
-
- generate_kernels(&rnd_, hkernel, vkernel);
-
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
-
- for (i = 0; i < num_iters; ++i) {
- // Choose random locations within the source block
- int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_wiener_convolve_add_src_c(input + offset_r * w + offset_c, w, output,
- out_w, hkernel, 16, vkernel, 16, out_w, out_h,
- &conv_params);
- test_impl(input + offset_r * w + offset_c, w, output2, out_w, hkernel, 16,
- vkernel, 16, out_w, out_h, &conv_params);
-
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = (" << (j % out_w) << ", "
- << (j / out_w) << ") on iteration " << i;
- }
- delete[] input_;
- delete[] output;
- delete[] output2;
-}
-
-void AV1HiprecConvolveTest::RunSpeedTest(hiprec_convolve_func test_impl) {
- const int w = 128, h = 128;
- const int out_w = GET_PARAM(0), out_h = GET_PARAM(1);
- const int num_iters = GET_PARAM(2) / 500;
- int i, j, k;
- const ConvolveParams conv_params = get_conv_params_wiener(8);
-
- uint8_t *input_ = new uint8_t[h * w];
- uint8_t *input = input_;
-
- // The AVX2 convolve functions always write rows with widths that are
- // multiples of 16. So to avoid a buffer overflow, we may need to pad
- // rows to a multiple of 16.
- int output_n = ALIGN_POWER_OF_TWO(out_w, 4) * out_h;
- uint8_t *output = new uint8_t[output_n];
- uint8_t *output2 = new uint8_t[output_n];
-
- // Generate random filter kernels
- DECLARE_ALIGNED(16, InterpKernel, hkernel);
- DECLARE_ALIGNED(16, InterpKernel, vkernel);
-
- generate_kernels(&rnd_, hkernel, vkernel);
-
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand8();
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (i = 0; i < num_iters; ++i) {
- for (j = 3; j < h - out_h - 4; j++) {
- for (k = 3; k < w - out_w - 4; k++) {
- av1_wiener_convolve_add_src_c(input + j * w + k, w, output, out_w,
- hkernel, 16, vkernel, 16, out_w, out_h,
- &conv_params);
- }
- }
- }
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (i = 0; i < num_iters; ++i) {
- for (j = 3; j < h - out_h - 4; j++) {
- for (k = 3; k < w - out_w - 4; k++) {
- test_impl(input + j * w + k, w, output2, out_w, hkernel, 16, vkernel,
- 16, out_w, out_h, &conv_params);
- }
- }
- }
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: AV1HiprecConvolveTest.SpeedTest, SIMD slower than C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
-
- delete[] input_;
- delete[] output;
- delete[] output2;
-}
-} // namespace AV1HiprecConvolve
-
-namespace AV1HighbdHiprecConvolve {
-
-::testing::internal::ParamGenerator<HighbdHiprecConvolveParam> BuildParams(
- highbd_hiprec_convolve_func filter) {
- const HighbdHiprecConvolveParam params[] = {
- make_tuple(8, 8, 50000, 8, filter), make_tuple(64, 64, 1000, 8, filter),
- make_tuple(32, 8, 10000, 8, filter), make_tuple(8, 8, 50000, 10, filter),
- make_tuple(64, 64, 1000, 10, filter), make_tuple(32, 8, 10000, 10, filter),
- make_tuple(8, 8, 50000, 12, filter), make_tuple(64, 64, 1000, 12, filter),
- make_tuple(32, 8, 10000, 12, filter),
- };
- return ::testing::ValuesIn(params);
-}
-
-AV1HighbdHiprecConvolveTest::~AV1HighbdHiprecConvolveTest() {}
-void AV1HighbdHiprecConvolveTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1HighbdHiprecConvolveTest::TearDown() {
- libaom_test::ClearSystemState();
-}
-
-void AV1HighbdHiprecConvolveTest::RunCheckOutput(
- highbd_hiprec_convolve_func test_impl) {
- const int w = 128, h = 128;
- const int out_w = GET_PARAM(0), out_h = GET_PARAM(1);
- const int num_iters = GET_PARAM(2);
- const int bd = GET_PARAM(3);
- int i, j;
- const ConvolveParams conv_params = get_conv_params_wiener(bd);
-
- uint16_t *input = new uint16_t[h * w];
-
- // The AVX2 convolve functions always write rows with widths that are
- // multiples of 16. So to avoid a buffer overflow, we may need to pad
- // rows to a multiple of 16.
- int output_n = ALIGN_POWER_OF_TWO(out_w, 4) * out_h;
- uint16_t *output = new uint16_t[output_n];
- uint16_t *output2 = new uint16_t[output_n];
-
- // Generate random filter kernels
- DECLARE_ALIGNED(16, InterpKernel, hkernel);
- DECLARE_ALIGNED(16, InterpKernel, vkernel);
-
- generate_kernels(&rnd_, hkernel, vkernel);
-
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
-
- uint8_t *input_ptr = CONVERT_TO_BYTEPTR(input);
- uint8_t *output_ptr = CONVERT_TO_BYTEPTR(output);
- uint8_t *output2_ptr = CONVERT_TO_BYTEPTR(output2);
-
- for (i = 0; i < num_iters; ++i) {
- // Choose random locations within the source block
- int offset_r = 3 + rnd_.PseudoUniform(h - out_h - 7);
- int offset_c = 3 + rnd_.PseudoUniform(w - out_w - 7);
- av1_highbd_wiener_convolve_add_src_c(
- input_ptr + offset_r * w + offset_c, w, output_ptr, out_w, hkernel, 16,
- vkernel, 16, out_w, out_h, &conv_params, bd);
- test_impl(input_ptr + offset_r * w + offset_c, w, output2_ptr, out_w,
- hkernel, 16, vkernel, 16, out_w, out_h, &conv_params, bd);
-
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = (" << (j % out_w) << ", "
- << (j / out_w) << ") on iteration " << i;
- }
- delete[] input;
- delete[] output;
- delete[] output2;
-}
-
-void AV1HighbdHiprecConvolveTest::RunSpeedTest(
- highbd_hiprec_convolve_func test_impl) {
- const int w = 128, h = 128;
- const int out_w = GET_PARAM(0), out_h = GET_PARAM(1);
- const int num_iters = GET_PARAM(2) / 500;
- const int bd = GET_PARAM(3);
- int i, j, k;
- const ConvolveParams conv_params = get_conv_params_wiener(bd);
-
- uint16_t *input = new uint16_t[h * w];
-
- // The AVX2 convolve functions always write rows with widths that are
- // multiples of 16. So to avoid a buffer overflow, we may need to pad
- // rows to a multiple of 16.
- int output_n = ALIGN_POWER_OF_TWO(out_w, 4) * out_h;
- uint16_t *output = new uint16_t[output_n];
- uint16_t *output2 = new uint16_t[output_n];
-
- // Generate random filter kernels
- DECLARE_ALIGNED(16, InterpKernel, hkernel);
- DECLARE_ALIGNED(16, InterpKernel, vkernel);
-
- generate_kernels(&rnd_, hkernel, vkernel);
-
- for (i = 0; i < h; ++i)
- for (j = 0; j < w; ++j) input[i * w + j] = rnd_.Rand16() & ((1 << bd) - 1);
-
- uint8_t *input_ptr = CONVERT_TO_BYTEPTR(input);
- uint8_t *output_ptr = CONVERT_TO_BYTEPTR(output);
- uint8_t *output2_ptr = CONVERT_TO_BYTEPTR(output2);
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (i = 0; i < num_iters; ++i) {
- for (j = 3; j < h - out_h - 4; j++) {
- for (k = 3; k < w - out_w - 4; k++) {
- av1_highbd_wiener_convolve_add_src_c(
- input_ptr + j * w + k, w, output_ptr, out_w, hkernel, 16, vkernel,
- 16, out_w, out_h, &conv_params, bd);
- }
- }
- }
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (i = 0; i < num_iters; ++i) {
- for (j = 3; j < h - out_h - 4; j++) {
- for (k = 3; k < w - out_w - 4; k++) {
- test_impl(input_ptr + j * w + k, w, output2_ptr, out_w, hkernel, 16,
- vkernel, 16, out_w, out_h, &conv_params, bd);
- }
- }
- }
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: AV1HighbdHiprecConvolveTest.SpeedTest, SIMD slower than C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
-
- delete[] input;
- delete[] output;
- delete[] output2;
-}
-} // namespace AV1HighbdHiprecConvolve
-} // namespace libaom_test
diff --git a/third_party/aom/test/hiprec_convolve_test_util.h b/third_party/aom/test/hiprec_convolve_test_util.h
deleted file mode 100644
index 2abe24b57..000000000
--- a/third_party/aom/test/hiprec_convolve_test_util.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_HIPREC_CONVOLVE_TEST_UTIL_H_
-#define AOM_TEST_HIPREC_CONVOLVE_TEST_UTIL_H_
-
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/convolve.h"
-#include "av1/common/mv.h"
-
-namespace libaom_test {
-
-namespace AV1HiprecConvolve {
-
-typedef void (*hiprec_convolve_func)(const uint8_t *src, ptrdiff_t src_stride,
- uint8_t *dst, ptrdiff_t dst_stride,
- const int16_t *filter_x, int x_step_q4,
- const int16_t *filter_y, int y_step_q4,
- int w, int h,
- const ConvolveParams *conv_params);
-
-typedef ::testing::tuple<int, int, int, hiprec_convolve_func>
- HiprecConvolveParam;
-
-::testing::internal::ParamGenerator<HiprecConvolveParam> BuildParams(
- hiprec_convolve_func filter);
-
-class AV1HiprecConvolveTest
- : public ::testing::TestWithParam<HiprecConvolveParam> {
- public:
- virtual ~AV1HiprecConvolveTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(hiprec_convolve_func test_impl);
- void RunSpeedTest(hiprec_convolve_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-} // namespace AV1HiprecConvolve
-
-namespace AV1HighbdHiprecConvolve {
-typedef void (*highbd_hiprec_convolve_func)(
- const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst,
- ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4,
- const int16_t *filter_y, int y_step_q4, int w, int h,
- const ConvolveParams *conv_params, int bps);
-
-typedef ::testing::tuple<int, int, int, int, highbd_hiprec_convolve_func>
- HighbdHiprecConvolveParam;
-
-::testing::internal::ParamGenerator<HighbdHiprecConvolveParam> BuildParams(
- highbd_hiprec_convolve_func filter);
-
-class AV1HighbdHiprecConvolveTest
- : public ::testing::TestWithParam<HighbdHiprecConvolveParam> {
- public:
- virtual ~AV1HighbdHiprecConvolveTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(highbd_hiprec_convolve_func test_impl);
- void RunSpeedTest(highbd_hiprec_convolve_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-} // namespace AV1HighbdHiprecConvolve
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_HIPREC_CONVOLVE_TEST_UTIL_H_
diff --git a/third_party/aom/test/horz_superres_test.cc b/third_party/aom/test/horz_superres_test.cc
deleted file mode 100644
index 973f55b66..000000000
--- a/third_party/aom/test/horz_superres_test.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "av1/encoder/encoder.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "test/yuv_video_source.h"
-
-namespace {
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-/* TESTING PARAMETERS */
-
-#define NUM_TEST_VIDEOS 3
-
-const int kBitrate = 40;
-
-// PSNR thresholds found by experiment
-const double kPSNRThresholds[] = { 26.0, 28.0, 20.0 };
-
-typedef struct {
- const char *filename;
- aom_img_fmt fmt;
- aom_bit_depth_t bit_depth;
- unsigned int profile;
- unsigned int limit;
- unsigned int screen_content;
-} TestVideoParam;
-
-const TestVideoParam kTestVideoVectors[] = {
- { "park_joy_90p_8_420.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 5, 0 },
- { "park_joy_90p_10_444.y4m", AOM_IMG_FMT_I44416, AOM_BITS_10, 1, 5, 0 },
- { "screendata.y4m", AOM_IMG_FMT_I420, AOM_BITS_8, 0, 4, 1 },
-};
-
-// Superres modes tested
-// SUPERRES_QTHRESH is not included, as it has its own test
-const SUPERRES_MODE kSuperresModesNotQThresh[] = { SUPERRES_FIXED,
- SUPERRES_RANDOM };
-
-// Superres denominators and superres kf denominators to be tested
-typedef tuple<int, int> SuperresDenominatorPair;
-const SuperresDenominatorPair kSuperresDenominators[] = {
- make_tuple(16, 9), make_tuple(13, 11), make_tuple(9, 9),
- make_tuple(13, 13), make_tuple(11, 16), make_tuple(8, 16),
- make_tuple(16, 8), make_tuple(8, 8), make_tuple(9, 14),
-};
-
-// Superres q thresholds and superres kf q thresholds to be tested
-typedef tuple<int, int> SuperresQThresholdPair;
-const SuperresQThresholdPair kSuperresQThresholds[] = {
- make_tuple(63, 63), make_tuple(63, 41), make_tuple(17, 63),
- make_tuple(41, 11), make_tuple(1, 37), make_tuple(11, 11),
- make_tuple(1, 1), make_tuple(17, 29), make_tuple(29, 11),
-};
-
-/* END (TESTING PARAMETERS) */
-
-// Test parameter list:
-// <[needed for EncoderTest], test_video_idx_, superres_mode_,
-// tuple(superres_denom_, superres_kf_denom_)>
-typedef tuple<const libaom_test::CodecFactory *, int, SUPERRES_MODE,
- SuperresDenominatorPair>
- HorzSuperresTestParam;
-
-class HorzSuperresEndToEndTest
- : public ::testing::TestWithParam<HorzSuperresTestParam>,
- public ::libaom_test::EncoderTest {
- protected:
- HorzSuperresEndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_idx_(GET_PARAM(1)),
- superres_mode_(GET_PARAM(2)), psnr_(0.0), frame_count_(0) {
- test_video_param_ = kTestVideoVectors[test_video_idx_];
-
- SuperresDenominatorPair denoms = GET_PARAM(3);
- superres_denom_ = ::testing::get<0>(denoms);
- superres_kf_denom_ = ::testing::get<1>(denoms);
- }
-
- virtual ~HorzSuperresEndToEndTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(::libaom_test::kTwoPassGood);
- cfg_.g_lag_in_frames = 5;
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.rc_target_bitrate = kBitrate;
- cfg_.g_error_resilient = 0;
- cfg_.g_profile = test_video_param_.profile;
- cfg_.g_input_bit_depth = (unsigned int)test_video_param_.bit_depth;
- cfg_.g_bit_depth = test_video_param_.bit_depth;
- init_flags_ = AOM_CODEC_USE_PSNR;
- if (cfg_.g_bit_depth > 8) init_flags_ |= AOM_CODEC_USE_HIGHBITDEPTH;
-
- // Set superres parameters
- cfg_.rc_superres_mode = superres_mode_;
- cfg_.rc_superres_denominator = superres_denom_;
- cfg_.rc_superres_kf_denominator = superres_kf_denom_;
- }
-
- virtual void BeginPassHook(unsigned int) {
- psnr_ = 0.0;
- frame_count_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- psnr_ += pkt->data.psnr.psnr[0];
- frame_count_++;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AV1E_SET_TILE_COLUMNS, 4);
-
- // Set cpu-used = 8 for speed
- encoder->Control(AOME_SET_CPUUSED, 8);
-
- // Test screen coding tools
- if (test_video_param_.screen_content)
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_SCREEN);
- else
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_DEFAULT);
-
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
-
- double GetAveragePsnr() const {
- if (frame_count_) return psnr_ / frame_count_;
- return 0.0;
- }
-
- double GetPsnrThreshold() { return kPSNRThresholds[test_video_idx_]; }
-
- void DoTest() {
- testing::internal::scoped_ptr<libaom_test::VideoSource> video;
- video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
- test_video_param_.limit));
- ASSERT_TRUE(video.get() != NULL);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
- const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
- << "superres_mode_ = " << superres_mode_
- << ", superres_denom_ = " << superres_denom_
- << ", superres_kf_denom_ = " << superres_kf_denom_;
-
- EXPECT_EQ(test_video_param_.limit, frame_count_)
- << "superres_mode_ = " << superres_mode_
- << ", superres_denom_ = " << superres_denom_
- << ", superres_kf_denom_ = " << superres_kf_denom_;
- }
-
- int test_video_idx_;
- TestVideoParam test_video_param_;
- SUPERRES_MODE superres_mode_;
- int superres_denom_;
- int superres_kf_denom_;
-
- private:
- double psnr_;
- unsigned int frame_count_;
-};
-
-TEST_P(HorzSuperresEndToEndTest, HorzSuperresEndToEndPSNRTest) { DoTest(); }
-
-AV1_INSTANTIATE_TEST_CASE(HorzSuperresEndToEndTest,
- ::testing::Range(0, NUM_TEST_VIDEOS),
- ::testing::ValuesIn(kSuperresModesNotQThresh),
- ::testing::ValuesIn(kSuperresDenominators));
-
-// Test parameter list:
-// <[needed for EncoderTest], test_video_idx_, tuple(superres_denom_,
-// superres_kf_denom_), tuple(superres_qthresh_,superres_kf_qthresh_)>
-typedef tuple<const libaom_test::CodecFactory *, int, SuperresDenominatorPair,
- SuperresQThresholdPair>
- HorzSuperresQThreshTestParam;
-
-class HorzSuperresQThreshEndToEndTest
- : public ::testing::TestWithParam<HorzSuperresQThreshTestParam>,
- public ::libaom_test::EncoderTest {
- protected:
- HorzSuperresQThreshEndToEndTest()
- : EncoderTest(GET_PARAM(0)), test_video_idx_(GET_PARAM(1)),
- superres_mode_(SUPERRES_QTHRESH), psnr_(0.0), frame_count_(0) {
- test_video_param_ = kTestVideoVectors[test_video_idx_];
-
- SuperresDenominatorPair denoms = GET_PARAM(2);
- superres_denom_ = ::testing::get<0>(denoms);
- superres_kf_denom_ = ::testing::get<1>(denoms);
-
- SuperresQThresholdPair qthresholds = GET_PARAM(3);
- superres_qthresh_ = ::testing::get<0>(qthresholds);
- superres_kf_qthresh_ = ::testing::get<1>(qthresholds);
- }
-
- virtual ~HorzSuperresQThreshEndToEndTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(::libaom_test::kTwoPassGood);
- cfg_.g_lag_in_frames = 5;
- cfg_.rc_end_usage = AOM_VBR;
- cfg_.rc_target_bitrate = kBitrate;
- cfg_.g_error_resilient = 0;
- cfg_.g_profile = test_video_param_.profile;
- cfg_.g_input_bit_depth = (unsigned int)test_video_param_.bit_depth;
- cfg_.g_bit_depth = test_video_param_.bit_depth;
- init_flags_ = AOM_CODEC_USE_PSNR;
- if (cfg_.g_bit_depth > 8) init_flags_ |= AOM_CODEC_USE_HIGHBITDEPTH;
-
- // Set superres parameters
- cfg_.rc_superres_mode = superres_mode_;
- cfg_.rc_superres_denominator = superres_denom_;
- cfg_.rc_superres_kf_denominator = superres_kf_denom_;
- cfg_.rc_superres_qthresh = superres_qthresh_;
- cfg_.rc_superres_kf_qthresh = superres_kf_qthresh_;
- }
-
- virtual void BeginPassHook(unsigned int) {
- psnr_ = 0.0;
- frame_count_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- psnr_ += pkt->data.psnr.psnr[0];
- frame_count_++;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
- encoder->Control(AV1E_SET_TILE_COLUMNS, 0);
-
- // Set cpu-used = 8 for speed
- encoder->Control(AOME_SET_CPUUSED, 8);
-
- // Test screen coding tools
- if (test_video_param_.screen_content)
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_SCREEN);
- else
- encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_DEFAULT);
-
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
-
- double GetAveragePsnr() const {
- if (frame_count_) return psnr_ / frame_count_;
- return 0.0;
- }
-
- double GetPsnrThreshold() { return kPSNRThresholds[test_video_idx_]; }
-
- void DoTest() {
- testing::internal::scoped_ptr<libaom_test::VideoSource> video;
- video.reset(new libaom_test::Y4mVideoSource(test_video_param_.filename, 0,
- test_video_param_.limit));
- ASSERT_TRUE(video.get() != NULL);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
- const double psnr = GetAveragePsnr();
- EXPECT_GT(psnr, GetPsnrThreshold())
- << "superres_mode_ = " << superres_mode_
- << ", superres_denom_ = " << superres_denom_
- << ", superres_kf_denom_ = " << superres_kf_denom_
- << ", superres_qthresh_ = " << superres_qthresh_
- << ", superres_kf_qthresh_ = " << superres_kf_qthresh_;
-
- EXPECT_EQ(test_video_param_.limit, frame_count_)
- << "superres_mode_ = " << superres_mode_
- << ", superres_denom_ = " << superres_denom_
- << ", superres_kf_denom_ = " << superres_kf_denom_
- << ", superres_qthresh_ = " << superres_qthresh_
- << ", superres_kf_qthresh_ = " << superres_kf_qthresh_;
- }
-
- int test_video_idx_;
- TestVideoParam test_video_param_;
- SUPERRES_MODE superres_mode_;
- int superres_denom_;
- int superres_kf_denom_;
- int superres_qthresh_;
- int superres_kf_qthresh_;
-
- private:
- double psnr_;
- unsigned int frame_count_;
-};
-
-TEST_P(HorzSuperresQThreshEndToEndTest, HorzSuperresQThreshEndToEndPSNRTest) {
- DoTest();
-}
-
-AV1_INSTANTIATE_TEST_CASE(HorzSuperresQThreshEndToEndTest,
- ::testing::Range(0, NUM_TEST_VIDEOS),
- ::testing::ValuesIn(kSuperresDenominators),
- ::testing::ValuesIn(kSuperresQThresholds));
-
-} // namespace
diff --git a/third_party/aom/test/i420_video_source.h b/third_party/aom/test/i420_video_source.h
deleted file mode 100644
index 233e7152b..000000000
--- a/third_party/aom/test/i420_video_source.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_I420_VIDEO_SOURCE_H_
-#define AOM_TEST_I420_VIDEO_SOURCE_H_
-#include <cstdio>
-#include <cstdlib>
-#include <string>
-
-#include "test/yuv_video_source.h"
-
-namespace libaom_test {
-
-// This class extends VideoSource to allow parsing of raw yv12
-// so that we can do actual file encodes.
-class I420VideoSource : public YUVVideoSource {
- public:
- I420VideoSource(const std::string &file_name, unsigned int width,
- unsigned int height, int rate_numerator, int rate_denominator,
- unsigned int start, int limit)
- : YUVVideoSource(file_name, AOM_IMG_FMT_I420, width, height,
- rate_numerator, rate_denominator, start, limit) {}
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_I420_VIDEO_SOURCE_H_
diff --git a/third_party/aom/test/intra_edge_test.cc b/third_party/aom/test/intra_edge_test.cc
deleted file mode 100644
index ce61402ac..000000000
--- a/third_party/aom/test/intra_edge_test.cc
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/register_state_check.h"
-#include "test/function_equivalence_test.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-#include "config/av1_rtcd.h"
-
-#include "aom/aom_integer.h"
-#include "av1/common/enums.h"
-
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-template <typename F, typename T>
-class UpsampleTest : public FunctionEquivalenceTest<F> {
- protected:
- static const int kIterations = 1000000;
- static const int kMinEdge = 4;
- static const int kMaxEdge = 24;
- static const int kBufSize = 2 * 64 + 32;
- static const int kOffset = 16;
-
- virtual ~UpsampleTest() {}
-
- virtual void Execute(T *edge_tst) = 0;
-
- void Common() {
- edge_ref_ = &edge_ref_data_[kOffset];
- edge_tst_ = &edge_tst_data_[kOffset];
-
- Execute(edge_tst_);
-
- const int max_idx = (size_ - 1) * 2;
- for (int r = -2; r <= max_idx; ++r) {
- ASSERT_EQ(edge_ref_[r], edge_tst_[r]);
- }
- }
-
- T edge_ref_data_[kBufSize];
- T edge_tst_data_[kBufSize];
-
- T *edge_ref_;
- T *edge_tst_;
-
- int size_;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-// 8 bit version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*UP8B)(uint8_t *p, int size);
-typedef libaom_test::FuncParam<UP8B> TestFuncs;
-
-class UpsampleTest8B : public UpsampleTest<UP8B, uint8_t> {
- protected:
- void Execute(uint8_t *edge_tst) {
- params_.ref_func(edge_ref_, size_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst, size_));
- }
-};
-
-TEST_P(UpsampleTest8B, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- size_ = 4 * (this->rng_(4) + 1);
-
- int i, pix = 0;
- for (i = 0; i < kOffset + size_; ++i) {
- pix = rng_.Rand8();
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = edge_ref_data_[i];
- }
-
- // Extend final sample
- while (i < kBufSize) {
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = pix;
- i++;
- }
-
- Common();
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, UpsampleTest8B,
- ::testing::Values(TestFuncs(av1_upsample_intra_edge_c,
- av1_upsample_intra_edge_sse4_1)));
-#endif // HAVE_SSE4_1
-
-//////////////////////////////////////////////////////////////////////////////
-// High bit-depth version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*UPHB)(uint16_t *p, int size, int bd);
-typedef libaom_test::FuncParam<UPHB> TestFuncsHBD;
-
-class UpsampleTestHB : public UpsampleTest<UPHB, uint16_t> {
- protected:
- void Execute(uint16_t *edge_tst) {
- params_.ref_func(edge_ref_, size_, bit_depth_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst, size_, bit_depth_));
- }
- int bit_depth_;
-};
-
-TEST_P(UpsampleTestHB, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
- const int hi = 1 << bit_depth_;
-
- size_ = 4 * (this->rng_(4) + 1);
-
- int i, pix = 0;
- for (i = 0; i < kOffset + size_; ++i) {
- pix = rng_(hi);
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = pix;
- }
-
- // Extend final sample
- while (i < kBufSize) {
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = pix;
- i++;
- }
-
- Common();
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, UpsampleTestHB,
- ::testing::Values(TestFuncsHBD(av1_upsample_intra_edge_high_c,
- av1_upsample_intra_edge_high_sse4_1)));
-#endif // HAVE_SSE4_1
-
-template <typename F, typename T>
-class FilterEdgeTest : public FunctionEquivalenceTest<F> {
- protected:
- static const int kIterations = 1000000;
- static const int kMaxEdge = 2 * 64;
- static const int kBufSize = kMaxEdge + 32;
- static const int kOffset = 15;
-
- virtual ~FilterEdgeTest() {}
-
- virtual void Execute(T *edge_tst) = 0;
-
- void Common() {
- edge_ref_ = &edge_ref_data_[kOffset];
- edge_tst_ = &edge_tst_data_[kOffset];
-
- Execute(edge_tst_);
-
- for (int r = 0; r < size_; ++r) {
- ASSERT_EQ(edge_ref_[r], edge_tst_[r]);
- }
- }
-
- T edge_ref_data_[kBufSize];
- T edge_tst_data_[kBufSize];
-
- T *edge_ref_;
- T *edge_tst_;
-
- int size_;
- int strength_;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-// 8 bit version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FE8B)(uint8_t *p, int size, int strength);
-typedef libaom_test::FuncParam<FE8B> FilterEdgeTestFuncs;
-
-class FilterEdgeTest8B : public FilterEdgeTest<FE8B, uint8_t> {
- protected:
- void Execute(uint8_t *edge_tst) {
- params_.ref_func(edge_ref_, size_, strength_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst, size_, strength_));
- }
-};
-
-TEST_P(FilterEdgeTest8B, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- strength_ = this->rng_(4);
- size_ = 4 * (this->rng_(128 / 4) + 1) + 1;
-
- int i, pix = 0;
- for (i = 0; i < kOffset + size_; ++i) {
- pix = rng_.Rand8();
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = pix;
- }
-
- Common();
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, FilterEdgeTest8B,
- ::testing::Values(FilterEdgeTestFuncs(av1_filter_intra_edge_c,
- av1_filter_intra_edge_sse4_1)));
-#endif // HAVE_SSE4_1
-
-//////////////////////////////////////////////////////////////////////////////
-// High bit-depth version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef void (*FEHB)(uint16_t *p, int size, int strength);
-typedef libaom_test::FuncParam<FEHB> FilterEdgeTestFuncsHBD;
-
-class FilterEdgeTestHB : public FilterEdgeTest<FEHB, uint16_t> {
- protected:
- void Execute(uint16_t *edge_tst) {
- params_.ref_func(edge_ref_, size_, strength_);
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst, size_, strength_));
- }
- int bit_depth_;
-};
-
-TEST_P(FilterEdgeTestHB, RandomValues) {
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- switch (rng_(3)) {
- case 0: bit_depth_ = 8; break;
- case 1: bit_depth_ = 10; break;
- default: bit_depth_ = 12; break;
- }
- const int hi = 1 << bit_depth_;
- strength_ = this->rng_(4);
- size_ = 4 * (this->rng_(128 / 4) + 1) + 1;
-
- int i, pix = 0;
- for (i = 0; i < kOffset + size_; ++i) {
- pix = rng_(hi);
- edge_ref_data_[i] = pix;
- edge_tst_data_[i] = pix;
- }
-
- Common();
- }
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, FilterEdgeTestHB,
- ::testing::Values(FilterEdgeTestFuncsHBD(
- av1_filter_intra_edge_high_c,
- av1_filter_intra_edge_high_sse4_1)));
-#endif // HAVE_SSE4_1
-
-// Speed tests
-
-TEST_P(UpsampleTest8B, DISABLED_Speed) {
- const int test_count = 10000000;
- size_ = kMaxEdge;
- for (int i = 0; i < kOffset + size_; ++i) {
- edge_tst_data_[i] = rng_.Rand8();
- }
- edge_tst_ = &edge_tst_data_[kOffset];
- for (int iter = 0; iter < test_count; ++iter) {
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst_, size_));
- }
-}
-
-TEST_P(UpsampleTestHB, DISABLED_Speed) {
- const int test_count = 10000000;
- size_ = kMaxEdge;
- bit_depth_ = 12;
- const int hi = 1 << bit_depth_;
- for (int i = 0; i < kOffset + size_; ++i) {
- edge_tst_data_[i] = rng_(hi);
- }
- edge_tst_ = &edge_tst_data_[kOffset];
- for (int iter = 0; iter < test_count; ++iter) {
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst_, size_, bit_depth_));
- }
-}
-
-TEST_P(FilterEdgeTest8B, DISABLED_Speed) {
- const int test_count = 10000000;
- size_ = kMaxEdge;
- strength_ = 1;
- for (int i = 0; i < kOffset + size_; ++i) {
- edge_tst_data_[i] = rng_.Rand8();
- }
- edge_tst_ = &edge_tst_data_[kOffset];
- for (int iter = 0; iter < test_count; ++iter) {
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst_, size_, strength_));
- // iterate over filter strengths (1,2,3)
- strength_ = (strength_ == 3) ? 1 : strength_ + 1;
- }
-}
-
-TEST_P(FilterEdgeTestHB, DISABLED_Speed) {
- const int test_count = 10000000;
- size_ = kMaxEdge;
- strength_ = 1;
- bit_depth_ = 12;
- const int hi = 1 << bit_depth_;
- for (int i = 0; i < kOffset + size_; ++i) {
- edge_tst_data_[i] = rng_(hi);
- }
- edge_tst_ = &edge_tst_data_[kOffset];
- for (int iter = 0; iter < test_count; ++iter) {
- ASM_REGISTER_STATE_CHECK(params_.tst_func(edge_tst_, size_, strength_));
- // iterate over filter strengths (1,2,3)
- strength_ = (strength_ == 3) ? 1 : strength_ + 1;
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/intrabc_test.cc b/third_party/aom/test/intrabc_test.cc
deleted file mode 100644
index 3ea421708..000000000
--- a/third_party/aom/test/intrabc_test.cc
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "av1/common/blockd.h"
-#include "av1/common/enums.h"
-#include "av1/common/mv.h"
-#include "av1/common/mvref_common.h"
-#include "av1/common/onyxc_int.h"
-#include "av1/common/tile_common.h"
-
-namespace {
-TEST(IntrabcTest, DvValidation) {
- struct DvTestCase {
- MV dv;
- int mi_row_offset;
- int mi_col_offset;
- BLOCK_SIZE bsize;
- bool valid;
- };
- const int kSubPelScale = 8;
- const int kTileMaxMibWidth = 8;
- const DvTestCase kDvCases[] = {
- { { 0, 0 }, 0, 0, BLOCK_128X128, false },
- { { 0, 0 }, 0, 0, BLOCK_64X64, false },
- { { 0, 0 }, 0, 0, BLOCK_32X32, false },
- { { 0, 0 }, 0, 0, BLOCK_16X16, false },
- { { 0, 0 }, 0, 0, BLOCK_8X8, false },
- { { 0, 0 }, 0, 0, BLOCK_4X4, false },
- { { -MAX_SB_SIZE * kSubPelScale, -MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_16X16,
- true },
- { { 0, -MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_16X16,
- false },
- { { -MAX_SB_SIZE * kSubPelScale, 0 },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_16X16,
- true },
- { { MAX_SB_SIZE * kSubPelScale, 0 },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_16X16,
- false },
- { { 0, MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_16X16,
- false },
- { { -32 * kSubPelScale, -32 * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_32X32,
- true },
- { { -32 * kSubPelScale, -32 * kSubPelScale },
- 32 / MI_SIZE,
- 32 / MI_SIZE,
- BLOCK_32X32,
- false },
- { { -32 * kSubPelScale - kSubPelScale / 2, -32 * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_32X32,
- false },
- { { -33 * kSubPelScale, -32 * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_32X32,
- true },
- { { -32 * kSubPelScale, -32 * kSubPelScale - kSubPelScale / 2 },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_32X32,
- false },
- { { -32 * kSubPelScale, -33 * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_32X32,
- true },
- { { -MAX_SB_SIZE * kSubPelScale, -MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- true },
- { { -(MAX_SB_SIZE + 1) * kSubPelScale, -MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -MAX_SB_SIZE * kSubPelScale, -(MAX_SB_SIZE + 1) * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -(MAX_SB_SIZE - 1) * kSubPelScale, -MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -MAX_SB_SIZE * kSubPelScale, -(MAX_SB_SIZE - 1) * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- true },
- { { -(MAX_SB_SIZE - 1) * kSubPelScale, -(MAX_SB_SIZE - 1) * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -MAX_SB_SIZE * kSubPelScale, MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -MAX_SB_SIZE * kSubPelScale,
- (kTileMaxMibWidth - 2) * MAX_SB_SIZE * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- { { -MAX_SB_SIZE * kSubPelScale,
- ((kTileMaxMibWidth - 2) * MAX_SB_SIZE + 1) * kSubPelScale },
- MAX_SB_SIZE / MI_SIZE,
- MAX_SB_SIZE / MI_SIZE,
- BLOCK_LARGEST,
- false },
- };
-
- MACROBLOCKD xd;
- memset(&xd, 0, sizeof(xd));
- xd.tile.mi_row_start = 8 * MAX_MIB_SIZE;
- xd.tile.mi_row_end = 16 * MAX_MIB_SIZE;
- xd.tile.mi_col_start = 24 * MAX_MIB_SIZE;
- xd.tile.mi_col_end = xd.tile.mi_col_start + kTileMaxMibWidth * MAX_MIB_SIZE;
- xd.plane[1].subsampling_x = 1;
- xd.plane[1].subsampling_y = 1;
- xd.plane[2].subsampling_x = 1;
- xd.plane[2].subsampling_y = 1;
-
- AV1_COMMON cm;
- memset(&cm, 0, sizeof(cm));
-
- for (int i = 0; i < static_cast<int>(GTEST_ARRAY_SIZE_(kDvCases)); ++i) {
- EXPECT_EQ(static_cast<int>(kDvCases[i].valid),
- av1_is_dv_valid(kDvCases[i].dv, &cm, &xd,
- xd.tile.mi_row_start + kDvCases[i].mi_row_offset,
- xd.tile.mi_col_start + kDvCases[i].mi_col_offset,
- kDvCases[i].bsize, MAX_MIB_SIZE_LOG2))
- << "DvCases[" << i << "]";
- }
-}
-} // namespace
diff --git a/third_party/aom/test/intrapred_test.cc b/third_party/aom/test/intrapred_test.cc
deleted file mode 100644
index 1a1c0fc42..000000000
--- a/third_party/aom/test/intrapred_test.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/blockd.h"
-#include "av1/common/common.h"
-#include "av1/common/pred_common.h"
-#include "aom_mem/aom_mem.h"
-
-namespace {
-
-using libaom_test::ACMRandom;
-
-const int count_test_block = 100000;
-
-typedef void (*HighbdIntraPred)(uint16_t *dst, ptrdiff_t stride,
- const uint16_t *above, const uint16_t *left,
- int bps);
-typedef void (*IntraPred)(uint8_t *dst, ptrdiff_t stride, const uint8_t *above,
- const uint8_t *left);
-
-} // namespace
-
-// NOTE: Under gcc version 7.3.0 (Debian 7.3.0-5), if this template is in the
-// anonymous namespace, then we get a strange compiler warning in
-// the begin() and end() methods of the ParamGenerator template class in
-// gtest/internal/gtest-param-util.h:
-// warning: ‘<anonymous>’ is used uninitialized in this function
-// As a workaround, put this template outside the anonymous namespace.
-// See bug aomedia:2003.
-template <typename FuncType>
-struct IntraPredFunc {
- IntraPredFunc(FuncType pred = NULL, FuncType ref = NULL,
- int block_width_value = 0, int block_height_value = 0,
- int bit_depth_value = 0)
- : pred_fn(pred), ref_fn(ref), block_width(block_width_value),
- block_height(block_height_value), bit_depth(bit_depth_value) {}
-
- FuncType pred_fn;
- FuncType ref_fn;
- int block_width;
- int block_height;
- int bit_depth;
-};
-
-namespace {
-
-template <typename FuncType, typename Pixel>
-class AV1IntraPredTest
- : public ::testing::TestWithParam<IntraPredFunc<FuncType> > {
- public:
- void RunTest(Pixel *left_col, Pixel *above_data, Pixel *dst, Pixel *ref_dst) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int block_width = params_.block_width;
- const int block_height = params_.block_height;
- above_row_ = above_data + 16;
- left_col_ = left_col;
- dst_ = dst;
- ref_dst_ = ref_dst;
- int error_count = 0;
- for (int i = 0; i < count_test_block; ++i) {
- // Fill edges with random data, try first with saturated values.
- for (int x = -1; x <= block_width * 2; x++) {
- if (i == 0) {
- above_row_[x] = mask_;
- } else {
- above_row_[x] = rnd.Rand16() & mask_;
- }
- }
- for (int y = 0; y < block_height; y++) {
- if (i == 0) {
- left_col_[y] = mask_;
- } else {
- left_col_[y] = rnd.Rand16() & mask_;
- }
- }
- Predict();
- CheckPrediction(i, &error_count);
- }
- ASSERT_EQ(0, error_count);
- }
-
- protected:
- virtual void SetUp() {
- params_ = this->GetParam();
- stride_ = params_.block_width * 3;
- mask_ = (1 << params_.bit_depth) - 1;
- }
-
- virtual void Predict() = 0;
-
- void CheckPrediction(int test_case_number, int *error_count) const {
- // For each pixel ensure that the calculated value is the same as reference.
- const int block_width = params_.block_width;
- const int block_height = params_.block_height;
- for (int y = 0; y < block_height; y++) {
- for (int x = 0; x < block_width; x++) {
- *error_count += ref_dst_[x + y * stride_] != dst_[x + y * stride_];
- if (*error_count == 1) {
- ASSERT_EQ(ref_dst_[x + y * stride_], dst_[x + y * stride_])
- << " Failed on Test Case Number " << test_case_number
- << " location: x = " << x << " y = " << y;
- }
- }
- }
- }
-
- Pixel *above_row_;
- Pixel *left_col_;
- Pixel *dst_;
- Pixel *ref_dst_;
- ptrdiff_t stride_;
- int mask_;
-
- IntraPredFunc<FuncType> params_;
-};
-
-class HighbdIntraPredTest : public AV1IntraPredTest<HighbdIntraPred, uint16_t> {
- protected:
- void Predict() {
- const int bit_depth = params_.bit_depth;
- params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
- ASM_REGISTER_STATE_CHECK(
- params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth));
- }
-};
-
-class LowbdIntraPredTest : public AV1IntraPredTest<IntraPred, uint8_t> {
- protected:
- void Predict() {
- params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
- ASM_REGISTER_STATE_CHECK(
- params_.pred_fn(dst_, stride_, above_row_, left_col_));
- }
-};
-
-// Suppress an unitialized warning. Once there are implementations to test then
-// this can be restored.
-TEST_P(HighbdIntraPredTest, Bitexact) {
- // max block size is 64
- DECLARE_ALIGNED(16, uint16_t, left_col[2 * 64]);
- DECLARE_ALIGNED(16, uint16_t, above_data[2 * 64 + 64]);
- DECLARE_ALIGNED(16, uint16_t, dst[3 * 64 * 64]);
- DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 64 * 64]);
- av1_zero(left_col);
- av1_zero(above_data);
- RunTest(left_col, above_data, dst, ref_dst);
-}
-
-// Same issue as above but for arm.
-#if !HAVE_NEON
-TEST_P(LowbdIntraPredTest, Bitexact) {
- // max block size is 32
- DECLARE_ALIGNED(16, uint8_t, left_col[2 * 32]);
- DECLARE_ALIGNED(16, uint8_t, above_data[2 * 32 + 32]);
- DECLARE_ALIGNED(16, uint8_t, dst[3 * 32 * 32]);
- DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 32 * 32]);
- av1_zero(left_col);
- av1_zero(above_data);
- RunTest(left_col, above_data, dst, ref_dst);
-}
-#endif // !HAVE_NEON
-
-// -----------------------------------------------------------------------------
-// High Bit Depth Tests
-#define highbd_entry(type, width, height, opt, bd) \
- IntraPredFunc<HighbdIntraPred>( \
- &aom_highbd_##type##_predictor_##width##x##height##_##opt, \
- &aom_highbd_##type##_predictor_##width##x##height##_c, width, height, \
- bd)
-
-#if 0
-#define highbd_intrapred(type, opt, bd) \
- highbd_entry(type, 4, 4, opt, bd), highbd_entry(type, 4, 8, opt, bd), \
- highbd_entry(type, 8, 4, opt, bd), highbd_entry(type, 8, 8, opt, bd), \
- highbd_entry(type, 8, 16, opt, bd), highbd_entry(type, 16, 8, opt, bd), \
- highbd_entry(type, 16, 16, opt, bd), \
- highbd_entry(type, 16, 32, opt, bd), \
- highbd_entry(type, 32, 16, opt, bd), highbd_entry(type, 32, 32, opt, bd)
-#endif
-
- // ---------------------------------------------------------------------------
- // Low Bit Depth Tests
-
-#define lowbd_entry(type, width, height, opt) \
- IntraPredFunc<IntraPred>(&aom_##type##_predictor_##width##x##height##_##opt, \
- &aom_##type##_predictor_##width##x##height##_c, \
- width, height, 8)
-
-#define lowbd_intrapred(type, opt) \
- lowbd_entry(type, 4, 4, opt), lowbd_entry(type, 4, 8, opt), \
- lowbd_entry(type, 8, 4, opt), lowbd_entry(type, 8, 8, opt), \
- lowbd_entry(type, 8, 16, opt), lowbd_entry(type, 16, 8, opt), \
- lowbd_entry(type, 16, 16, opt), lowbd_entry(type, 16, 32, opt), \
- lowbd_entry(type, 32, 16, opt), lowbd_entry(type, 32, 32, opt)
-
-#if HAVE_SSE2
-const IntraPredFunc<IntraPred> LowbdIntraPredTestVector[] = {
- lowbd_intrapred(dc, sse2), lowbd_intrapred(dc_top, sse2),
- lowbd_intrapred(dc_left, sse2), lowbd_intrapred(dc_128, sse2),
- lowbd_intrapred(v, sse2), lowbd_intrapred(h, sse2),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, LowbdIntraPredTest,
- ::testing::ValuesIn(LowbdIntraPredTestVector));
-
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorSsse3[] = {
- lowbd_intrapred(paeth, ssse3),
- lowbd_intrapred(smooth, ssse3),
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3, LowbdIntraPredTest,
- ::testing::ValuesIn(LowbdIntraPredTestVectorSsse3));
-
-#endif // HAVE_SSSE3
-
-#if HAVE_AVX2
-const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorAvx2[] = {
- lowbd_entry(dc, 32, 32, avx2), lowbd_entry(dc_top, 32, 32, avx2),
- lowbd_entry(dc_left, 32, 32, avx2), lowbd_entry(dc_128, 32, 32, avx2),
- lowbd_entry(v, 32, 32, avx2), lowbd_entry(h, 32, 32, avx2),
- lowbd_entry(dc, 32, 16, avx2), lowbd_entry(dc_top, 32, 16, avx2),
- lowbd_entry(dc_left, 32, 16, avx2), lowbd_entry(dc_128, 32, 16, avx2),
- lowbd_entry(v, 32, 16, avx2), lowbd_entry(paeth, 16, 8, avx2),
- lowbd_entry(paeth, 16, 16, avx2), lowbd_entry(paeth, 16, 32, avx2),
- lowbd_entry(paeth, 32, 16, avx2), lowbd_entry(paeth, 32, 32, avx2),
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, LowbdIntraPredTest,
- ::testing::ValuesIn(LowbdIntraPredTestVectorAvx2));
-
-#endif // HAVE_AVX2
-
-#if HAVE_NEON
-const IntraPredFunc<HighbdIntraPred> HighbdIntraPredTestVectorNeon[] = {
- highbd_entry(dc, 4, 4, neon, 8), highbd_entry(dc, 8, 8, neon, 8),
- highbd_entry(dc, 16, 16, neon, 8), highbd_entry(dc, 32, 32, neon, 8),
- highbd_entry(dc, 64, 64, neon, 8),
-};
-
-INSTANTIATE_TEST_CASE_P(NEON, HighbdIntraPredTest,
- ::testing::ValuesIn(HighbdIntraPredTestVectorNeon));
-
-#endif // HAVE_NEON
-} // namespace
diff --git a/third_party/aom/test/invalid_file_test.cc b/third_party/aom/test/invalid_file_test.cc
deleted file mode 100644
index 5b4f5a6c3..000000000
--- a/third_party/aom/test/invalid_file_test.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdio>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/ivf_video_source.h"
-#include "test/util.h"
-#include "test/video_source.h"
-
-namespace {
-
-struct DecodeParam {
- int threads;
- const char *filename;
-};
-
-std::ostream &operator<<(std::ostream &os, const DecodeParam &dp) {
- return os << "threads: " << dp.threads << " file: " << dp.filename;
-}
-
-class InvalidFileTest : public ::libaom_test::DecoderTest,
- public ::libaom_test::CodecTestWithParam<DecodeParam> {
- protected:
- InvalidFileTest() : DecoderTest(GET_PARAM(0)), res_file_(NULL) {}
-
- virtual ~InvalidFileTest() {
- if (res_file_ != NULL) fclose(res_file_);
- }
-
- void OpenResFile(const std::string &res_file_name) {
- res_file_ = libaom_test::OpenTestDataFile(res_file_name);
- ASSERT_TRUE(res_file_ != NULL)
- << "Result file open failed. Filename: " << res_file_name;
- }
-
- virtual bool HandleDecodeResult(
- const aom_codec_err_t res_dec,
- const libaom_test::CompressedVideoSource &video,
- libaom_test::Decoder *decoder) {
- EXPECT_TRUE(res_file_ != NULL);
- int expected_res_dec = -1;
-
- // Read integer result.
- const int res = fscanf(res_file_, "%d", &expected_res_dec);
- EXPECT_NE(res, EOF) << "Read result data failed";
-
- if (expected_res_dec != -1) {
- // Check results match.
- const DecodeParam input = GET_PARAM(1);
- if (input.threads > 1) {
- // The serial decode check is too strict for tile-threaded decoding as
- // there is no guarantee on the decode order nor which specific error
- // will take precedence. Currently a tile-level error is not forwarded
- // so the frame will simply be marked corrupt.
- EXPECT_TRUE(res_dec == expected_res_dec ||
- res_dec == AOM_CODEC_CORRUPT_FRAME)
- << "Results don't match: frame number = " << video.frame_number()
- << ". (" << decoder->DecodeError()
- << "). Expected: " << expected_res_dec << " or "
- << AOM_CODEC_CORRUPT_FRAME;
- } else {
- EXPECT_EQ(expected_res_dec, res_dec)
- << "Results don't match: frame number = " << video.frame_number()
- << ". (" << decoder->DecodeError() << ")";
- }
- }
-
- return !HasFailure();
- }
-
- virtual void HandlePeekResult(libaom_test::Decoder *const /*decoder*/,
- libaom_test::CompressedVideoSource * /*video*/,
- const aom_codec_err_t /*res_peek*/) {}
-
- void RunTest() {
- const DecodeParam input = GET_PARAM(1);
- aom_codec_dec_cfg_t cfg = { 0, 0, 0, CONFIG_LOWBITDEPTH, { 1 } };
- cfg.threads = input.threads;
- const std::string filename = input.filename;
- libaom_test::IVFVideoSource decode_video(filename);
- decode_video.Init();
-
- // Construct result file name. The file holds a list of expected integer
- // results, one for each decoded frame. Any result that doesn't match
- // the files list will cause a test failure.
- const std::string res_filename = filename + ".res";
- OpenResFile(res_filename);
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&decode_video, cfg));
- }
-
- private:
- FILE *res_file_;
-};
-
-TEST_P(InvalidFileTest, ReturnCode) { RunTest(); }
-
-const DecodeParam kAV1InvalidFileTests[] = {
- { 1, "invalid-bug-1814.ivf" },
- { 4, "invalid-oss-fuzz-9463.ivf" },
- { 1, "invalid-oss-fuzz-9482.ivf" },
- { 1, "invalid-oss-fuzz-9720.ivf" },
- { 1, "invalid-oss-fuzz-10061.ivf" },
- { 1, "invalid-oss-fuzz-10117-mc-buf-use-highbd.ivf" },
- { 1, "invalid-oss-fuzz-10227.ivf" },
-};
-
-AV1_INSTANTIATE_TEST_CASE(InvalidFileTest,
- ::testing::ValuesIn(kAV1InvalidFileTests));
-
-} // namespace
diff --git a/third_party/aom/test/ivf_video_source.h b/third_party/aom/test/ivf_video_source.h
deleted file mode 100644
index ff2841445..000000000
--- a/third_party/aom/test/ivf_video_source.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_IVF_VIDEO_SOURCE_H_
-#define AOM_TEST_IVF_VIDEO_SOURCE_H_
-
-#include <cstdio>
-#include <cstdlib>
-#include <new>
-#include <string>
-
-#include "aom_ports/sanitizer.h"
-#include "test/video_source.h"
-
-namespace libaom_test {
-const unsigned int kCodeBufferSize = 256 * 1024 * 1024;
-const unsigned int kIvfFileHdrSize = 32;
-const unsigned int kIvfFrameHdrSize = 12;
-
-static unsigned int MemGetLe32(const uint8_t *mem) {
- return (mem[3] << 24) | (mem[2] << 16) | (mem[1] << 8) | (mem[0]);
-}
-
-// This class extends VideoSource to allow parsing of ivf files,
-// so that we can do actual file decodes.
-class IVFVideoSource : public CompressedVideoSource {
- public:
- explicit IVFVideoSource(const std::string &file_name)
- : file_name_(file_name), input_file_(NULL), compressed_frame_buf_(NULL),
- frame_sz_(0), frame_(0), end_of_file_(false) {}
-
- virtual ~IVFVideoSource() {
- delete[] compressed_frame_buf_;
-
- if (input_file_) fclose(input_file_);
- }
-
- virtual void Init() {
- // Allocate a buffer for read in the compressed video frame.
- compressed_frame_buf_ = new uint8_t[kCodeBufferSize];
- ASSERT_TRUE(compressed_frame_buf_ != NULL)
- << "Allocate frame buffer failed";
- ASAN_POISON_MEMORY_REGION(compressed_frame_buf_, kCodeBufferSize);
- }
-
- virtual void Begin() {
- input_file_ = OpenTestDataFile(file_name_);
- ASSERT_TRUE(input_file_ != NULL)
- << "Input file open failed. Filename: " << file_name_;
-
- // Read file header
- uint8_t file_hdr[kIvfFileHdrSize];
- ASSERT_EQ(kIvfFileHdrSize, fread(file_hdr, 1, kIvfFileHdrSize, input_file_))
- << "File header read failed.";
- // Check file header
- ASSERT_TRUE(file_hdr[0] == 'D' && file_hdr[1] == 'K' &&
- file_hdr[2] == 'I' && file_hdr[3] == 'F')
- << "Input is not an IVF file.";
-
- FillFrame();
- }
-
- virtual void Next() {
- ++frame_;
- FillFrame();
- }
-
- void FillFrame() {
- ASSERT_TRUE(input_file_ != NULL);
- uint8_t frame_hdr[kIvfFrameHdrSize];
- // Check frame header and read a frame from input_file.
- if (fread(frame_hdr, 1, kIvfFrameHdrSize, input_file_) !=
- kIvfFrameHdrSize) {
- end_of_file_ = true;
- } else {
- end_of_file_ = false;
-
- frame_sz_ = MemGetLe32(frame_hdr);
- ASSERT_LE(frame_sz_, kCodeBufferSize)
- << "Frame is too big for allocated code buffer";
- ASAN_UNPOISON_MEMORY_REGION(compressed_frame_buf_, kCodeBufferSize);
- ASSERT_EQ(frame_sz_,
- fread(compressed_frame_buf_, 1, frame_sz_, input_file_))
- << "Failed to read complete frame";
- ASAN_POISON_MEMORY_REGION(compressed_frame_buf_ + frame_sz_,
- kCodeBufferSize - frame_sz_);
- }
- }
-
- virtual const uint8_t *cxdata() const {
- return end_of_file_ ? NULL : compressed_frame_buf_;
- }
- virtual size_t frame_size() const { return frame_sz_; }
- virtual unsigned int frame_number() const { return frame_; }
-
- protected:
- std::string file_name_;
- FILE *input_file_;
- uint8_t *compressed_frame_buf_;
- size_t frame_sz_;
- unsigned int frame_;
- bool end_of_file_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_IVF_VIDEO_SOURCE_H_
diff --git a/third_party/aom/test/lightfield_test.sh b/third_party/aom/test/lightfield_test.sh
deleted file mode 100755
index b957a6b79..000000000
--- a/third_party/aom/test/lightfield_test.sh
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2018, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the lightfield example.
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $infile is required.
-lightfield_test_verify_environment() {
- local infile="${LIBAOM_TEST_DATA_PATH}/vase10x10.yuv"
- if [ ! -e "${infile}" ]; then
- echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
-}
-
-# Run the lightfield example
-lightfield_test() {
- local img_width=1024
- local img_height=1024
- local lf_width=10
- local lf_height=10
- local lf_blocksize=5
- local num_references=4
- local num_tile_lists=2
-
- # Encode the lightfield.
- local encoder="${LIBAOM_BIN_PATH}/lightfield_encoder${AOM_TEST_EXE_SUFFIX}"
- local yuv_file="${LIBAOM_TEST_DATA_PATH}/vase10x10.yuv"
- local lf_file="${AOM_TEST_OUTPUT_DIR}/vase10x10.ivf"
- if [ ! -x "${encoder}" ]; then
- elog "${encoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${img_width}" "${img_height}" \
- "${yuv_file}" "${lf_file}" "${lf_width}" \
- "${lf_height}" "${lf_blocksize}" ${devnull}
-
- [ -e "${lf_file}" ] || return 1
-
- # Parse lightfield bitstream to construct and output a new bitstream that can
- # be decoded by an AV1 decoder.
- local bs_decoder="${LIBAOM_BIN_PATH}/lightfield_bitstream_parsing${AOM_TEST_EXE_SUFFIX}"
- local tl_file="${AOM_TEST_OUTPUT_DIR}/vase_tile_list.ivf"
- if [ ! -x "${bs_decoder}" ]; then
- elog "${bs_decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${bs_decoder}" "${lf_file}" "${tl_file}" \
- "${num_references}" ${devnull}
-
- [ -e "${tl_file}" ] || return 1
-
- # Run lightfield tile list decoder
- local tl_decoder="${LIBAOM_BIN_PATH}/lightfield_tile_list_decoder${AOM_TEST_EXE_SUFFIX}"
- local tl_outfile="${AOM_TEST_OUTPUT_DIR}/vase_tile_list.yuv"
- if [ ! -x "${tl_decoder}" ]; then
- elog "${tl_decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${tl_decoder}" "${tl_file}" "${tl_outfile}" \
- "${num_references}" "${num_tile_lists}" ${devnull}
-
- [ -e "${tl_outfile}" ] || return 1
-
- # Run reference lightfield decoder
- local ref_decoder="${LIBAOM_BIN_PATH}/lightfield_decoder${AOM_TEST_EXE_SUFFIX}"
- local tl_reffile="${AOM_TEST_OUTPUT_DIR}/vase_reference.yuv"
- if [ ! -x "${ref_decoder}" ]; then
- elog "${ref_decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${ref_decoder}" "${lf_file}" "${tl_reffile}" \
- "${num_references}" ${devnull}
-
- [ -e "${tl_reffile}" ] || return 1
-
- # Check if tl_outfile and tl_reffile are identical. If not identical, this test fails.
- diff ${tl_outfile} ${tl_reffile} > /dev/null
- if [ $? -eq 1 ]; then
- return 1
- fi
-}
-
-lightfield_test_tests="lightfield_test"
-
-run_tests lightfield_test_verify_environment "${lightfield_test_tests}"
diff --git a/third_party/aom/test/log2_test.cc b/third_party/aom/test/log2_test.cc
deleted file mode 100644
index d7840c68b..000000000
--- a/third_party/aom/test/log2_test.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-
-#include "aom_ports/bitops.h"
-#include "av1/common/entropymode.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-TEST(Log2Test, GetMsb) {
- // Test small numbers exhaustively.
- for (unsigned int n = 1; n < 10000; n++) {
- EXPECT_EQ(get_msb(n), static_cast<int>(floor(log2(n))));
- }
-
- // Test every power of 2 and the two adjacent numbers.
- for (int exponent = 2; exponent < 32; exponent++) {
- const unsigned int power_of_2 = 1U << exponent;
- EXPECT_EQ(get_msb(power_of_2 - 1), exponent - 1);
- EXPECT_EQ(get_msb(power_of_2), exponent);
- EXPECT_EQ(get_msb(power_of_2 + 1), exponent);
- }
-}
-
-TEST(Log2Test, Av1CeilLog2) {
- // Test small numbers exhaustively.
- EXPECT_EQ(av1_ceil_log2(0), 0);
- for (int n = 1; n < 10000; n++) {
- EXPECT_EQ(av1_ceil_log2(n), static_cast<int>(ceil(log2(n))));
- }
-
- // Test every power of 2 and the two adjacent numbers.
- for (int exponent = 2; exponent < 31; exponent++) {
- const int power_of_2 = 1 << exponent;
- EXPECT_EQ(av1_ceil_log2(power_of_2 - 1), exponent);
- EXPECT_EQ(av1_ceil_log2(power_of_2), exponent);
- // The current implementation of av1_ceil_log2 only works up to 2^30.
- if (exponent < 30) {
- EXPECT_EQ(av1_ceil_log2(power_of_2 + 1), exponent + 1);
- }
- }
-}
diff --git a/third_party/aom/test/lossless_test.cc b/third_party/aom/test/lossless_test.cc
deleted file mode 100644
index 3f8e89c81..000000000
--- a/third_party/aom/test/lossless_test.cc
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-
-namespace {
-
-const int kMaxPsnr = 100;
-
-class LosslessTestLarge
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- LosslessTestLarge()
- : EncoderTest(GET_PARAM(0)), psnr_(kMaxPsnr), nframes_(0),
- encoding_mode_(GET_PARAM(1)) {}
-
- virtual ~LosslessTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- // Only call Control if quantizer > 0 to verify that using quantizer
- // alone will activate lossless
- if (cfg_.rc_max_quantizer > 0 || cfg_.rc_min_quantizer > 0) {
- encoder->Control(AV1E_SET_LOSSLESS, 1);
- }
- }
- }
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
- psnr_ = kMaxPsnr;
- nframes_ = 0;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (pkt->data.psnr.psnr[0] < psnr_) psnr_ = pkt->data.psnr.psnr[0];
- }
-
- double GetMinPsnr() const { return psnr_; }
-
- private:
- double psnr_;
- unsigned int nframes_;
- libaom_test::TestMode encoding_mode_;
-};
-
-TEST_P(LosslessTestLarge, TestLossLessEncoding) {
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = 2000;
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 0;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- // intentionally changed the dimension for better testing coverage
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- timebase.den, timebase.num, 0, 5);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- const double psnr_lossless = GetMinPsnr();
- EXPECT_GE(psnr_lossless, kMaxPsnr);
-}
-
-TEST_P(LosslessTestLarge, TestLossLessEncoding444) {
- libaom_test::Y4mVideoSource video("rush_hour_444.y4m", 0, 5);
-
- cfg_.g_profile = 1;
- cfg_.g_timebase = video.timebase();
- cfg_.rc_target_bitrate = 2000;
- cfg_.g_lag_in_frames = 25;
- cfg_.rc_min_quantizer = 0;
- cfg_.rc_max_quantizer = 0;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- const double psnr_lossless = GetMinPsnr();
- EXPECT_GE(psnr_lossless, kMaxPsnr);
-}
-
-TEST_P(LosslessTestLarge, TestLossLessEncodingCtrl) {
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = 2000;
- cfg_.g_lag_in_frames = 25;
- // Intentionally set Q > 0, to make sure control can be used to activate
- // lossless
- cfg_.rc_min_quantizer = 10;
- cfg_.rc_max_quantizer = 20;
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- timebase.den, timebase.num, 0, 5);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- const double psnr_lossless = GetMinPsnr();
- EXPECT_GE(psnr_lossless, kMaxPsnr);
-}
-
-AV1_INSTANTIATE_TEST_CASE(LosslessTestLarge,
- ::testing::Values(::libaom_test::kOnePassGood,
- ::libaom_test::kTwoPassGood));
-} // namespace
diff --git a/third_party/aom/test/lpf_test.cc b/third_party/aom/test/lpf_test.cc
deleted file mode 100644
index 451bffd2a..000000000
--- a/third_party/aom/test/lpf_test.cc
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cmath>
-#include <cstdlib>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/av1_loopfilter.h"
-#include "av1/common/entropy.h"
-#include "aom/aom_integer.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-// Horizontally and Vertically need 32x32: 8 Coeffs preceeding filtered section
-// 16 Coefs within filtered section
-// 8 Coeffs following filtered section
-const int kNumCoeffs = 1024;
-
-const int number_of_iterations = 10000;
-
-const int kSpeedTestNum = 500000;
-
-#define LOOP_PARAM \
- int p, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh
-#define DUAL_LOOP_PARAM \
- int p, const uint8_t *blimit0, const uint8_t *limit0, \
- const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, \
- const uint8_t *thresh1
-
-typedef void (*loop_op_t)(uint8_t *s, LOOP_PARAM);
-typedef void (*dual_loop_op_t)(uint8_t *s, DUAL_LOOP_PARAM);
-typedef void (*hbdloop_op_t)(uint16_t *s, LOOP_PARAM, int bd);
-typedef void (*hbddual_loop_op_t)(uint16_t *s, DUAL_LOOP_PARAM, int bd);
-
-typedef ::testing::tuple<hbdloop_op_t, hbdloop_op_t, int> hbdloop_param_t;
-typedef ::testing::tuple<hbddual_loop_op_t, hbddual_loop_op_t, int>
- hbddual_loop_param_t;
-typedef ::testing::tuple<loop_op_t, loop_op_t, int> loop_param_t;
-typedef ::testing::tuple<dual_loop_op_t, dual_loop_op_t, int> dual_loop_param_t;
-
-template <typename Pixel_t, int PIXEL_WIDTH_t>
-void InitInput(Pixel_t *s, Pixel_t *ref_s, ACMRandom *rnd, const uint8_t limit,
- const int mask, const int32_t p, const int i) {
- uint16_t tmp_s[kNumCoeffs];
-
- for (int j = 0; j < kNumCoeffs;) {
- const uint8_t val = rnd->Rand8();
- if (val & 0x80) { // 50% chance to choose a new value.
- tmp_s[j] = rnd->Rand16();
- j++;
- } else { // 50% chance to repeat previous value in row X times.
- int k = 0;
- while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
- if (j < 1) {
- tmp_s[j] = rnd->Rand16();
- } else if (val & 0x20) { // Increment by a value within the limit.
- tmp_s[j] = tmp_s[j - 1] + (limit - 1);
- } else { // Decrement by a value within the limit.
- tmp_s[j] = tmp_s[j - 1] - (limit - 1);
- }
- j++;
- }
- }
- }
-
- for (int j = 0; j < kNumCoeffs;) {
- const uint8_t val = rnd->Rand8();
- if (val & 0x80) {
- j++;
- } else { // 50% chance to repeat previous value in column X times.
- int k = 0;
- while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
- if (j < 1) {
- tmp_s[j] = rnd->Rand16();
- } else if (val & 0x20) { // Increment by a value within the limit.
- tmp_s[(j % 32) * 32 + j / 32] =
- tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] + (limit - 1);
- } else { // Decrement by a value within the limit.
- tmp_s[(j % 32) * 32 + j / 32] =
- tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] - (limit - 1);
- }
- j++;
- }
- }
- }
-
- for (int j = 0; j < kNumCoeffs; j++) {
- if (i % 2) {
- s[j] = tmp_s[j] & mask;
- } else {
- s[j] = tmp_s[p * (j % p) + j / p] & mask;
- }
- ref_s[j] = s[j];
- }
-}
-
-uint8_t GetOuterThresh(ACMRandom *rnd) {
- return static_cast<uint8_t>(rnd->PseudoUniform(3 * MAX_LOOP_FILTER + 5));
-}
-
-uint8_t GetInnerThresh(ACMRandom *rnd) {
- return static_cast<uint8_t>(rnd->PseudoUniform(MAX_LOOP_FILTER + 1));
-}
-
-uint8_t GetHevThresh(ACMRandom *rnd) {
- return static_cast<uint8_t>(rnd->PseudoUniform(MAX_LOOP_FILTER + 1) >> 4);
-}
-
-template <typename func_type_t, typename params_t>
-class LoopTestParam : public ::testing::TestWithParam<params_t> {
- public:
- virtual ~LoopTestParam() {}
- virtual void SetUp() {
- loopfilter_op_ = ::testing::get<0>(this->GetParam());
- ref_loopfilter_op_ = ::testing::get<1>(this->GetParam());
- bit_depth_ = ::testing::get<2>(this->GetParam());
- mask_ = (1 << bit_depth_) - 1;
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- int bit_depth_;
- int mask_;
- func_type_t loopfilter_op_;
- func_type_t ref_loopfilter_op_;
-};
-
-void call_filter(uint16_t *s, LOOP_PARAM, int bd, hbdloop_op_t op) {
- op(s, p, blimit, limit, thresh, bd);
-}
-void call_filter(uint8_t *s, LOOP_PARAM, int bd, loop_op_t op) {
- (void)bd;
- op(s, p, blimit, limit, thresh);
-}
-void call_dualfilter(uint16_t *s, DUAL_LOOP_PARAM, int bd,
- hbddual_loop_op_t op) {
- op(s, p, blimit0, limit0, thresh0, blimit1, limit1, thresh1, bd);
-}
-void call_dualfilter(uint8_t *s, DUAL_LOOP_PARAM, int bd, dual_loop_op_t op) {
- (void)bd;
- op(s, p, blimit0, limit0, thresh0, blimit1, limit1, thresh1);
-};
-
-typedef LoopTestParam<hbdloop_op_t, hbdloop_param_t> Loop8Test6Param_hbd;
-typedef LoopTestParam<loop_op_t, loop_param_t> Loop8Test6Param_lbd;
-typedef LoopTestParam<hbddual_loop_op_t, hbddual_loop_param_t>
- Loop8Test9Param_hbd;
-typedef LoopTestParam<dual_loop_op_t, dual_loop_param_t> Loop8Test9Param_lbd;
-
-#define OPCHECK(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = number_of_iterations; \
- const int32_t p = kNumCoeffs / 32; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]); \
- int err_count_total = 0; \
- int first_failure = -1; \
- for (int i = 0; i < count_test_block; ++i) { \
- int err_count = 0; \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- InitInput<a, b>(s, ref_s, &rnd, *limit, mask_, p, i); \
- call_filter(ref_s + 8 + p * 8, p, blimit, limit, thresh, bit_depth_, \
- ref_loopfilter_op_); \
- ASM_REGISTER_STATE_CHECK(call_filter(s + 8 + p * 8, p, blimit, limit, \
- thresh, bit_depth_, loopfilter_op_)); \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- err_count += ref_s[j] != s[j]; \
- } \
- if (err_count && !err_count_total) { \
- first_failure = i; \
- } \
- err_count_total += err_count; \
- } \
- EXPECT_EQ(0, err_count_total) \
- << "Error: Loop8Test6Param, C output doesn't match SIMD " \
- "loopfilter output. " \
- << "First failed at test case " << first_failure;
-
-TEST_P(Loop8Test6Param_hbd, OperationCheck) { OPCHECK(uint16_t, 16); }
-TEST_P(Loop8Test6Param_lbd, OperationCheck) { OPCHECK(uint8_t, 8); }
-
-#define VALCHECK(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = number_of_iterations; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]); \
- int err_count_total = 0; \
- int first_failure = -1; \
- for (int i = 0; i < count_test_block; ++i) { \
- int err_count = 0; \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- int32_t p = kNumCoeffs / 32; \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- s[j] = rnd.Rand16() & mask_; \
- ref_s[j] = s[j]; \
- } \
- call_filter(ref_s + 8 + p * 8, p, blimit, limit, thresh, bit_depth_, \
- ref_loopfilter_op_); \
- ASM_REGISTER_STATE_CHECK(call_filter(s + 8 + p * 8, p, blimit, limit, \
- thresh, bit_depth_, loopfilter_op_)); \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- err_count += ref_s[j] != s[j]; \
- } \
- if (err_count && !err_count_total) { \
- first_failure = i; \
- } \
- err_count_total += err_count; \
- } \
- EXPECT_EQ(0, err_count_total) \
- << "Error: Loop8Test6Param, C output doesn't match SIMD " \
- "loopfilter output. " \
- << "First failed at test case " << first_failure;
-
-TEST_P(Loop8Test6Param_hbd, ValueCheck) { VALCHECK(uint16_t, 16); }
-TEST_P(Loop8Test6Param_lbd, ValueCheck) { VALCHECK(uint8_t, 8); }
-
-#define SPEEDCHECK(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = kSpeedTestNum; \
- const int32_t bd = bit_depth_; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- int32_t p = kNumCoeffs / 32; \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- s[j] = rnd.Rand16() & mask_; \
- } \
- for (int i = 0; i < count_test_block; ++i) { \
- call_filter(s + 8 + p * 8, p, blimit, limit, thresh, bd, loopfilter_op_); \
- }
-
-TEST_P(Loop8Test6Param_hbd, DISABLED_Speed) { SPEEDCHECK(uint16_t, 16); }
-TEST_P(Loop8Test6Param_lbd, DISABLED_Speed) { SPEEDCHECK(uint8_t, 8); }
-
-#define OPCHECKd(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = number_of_iterations; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]); \
- int err_count_total = 0; \
- int first_failure = -1; \
- for (int i = 0; i < count_test_block; ++i) { \
- int err_count = 0; \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- int32_t p = kNumCoeffs / 32; \
- const uint8_t limit = *limit0 < *limit1 ? *limit0 : *limit1; \
- InitInput<a, b>(s, ref_s, &rnd, limit, mask_, p, i); \
- call_dualfilter(ref_s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
- limit1, thresh1, bit_depth_, ref_loopfilter_op_); \
- ASM_REGISTER_STATE_CHECK( \
- call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
- limit1, thresh1, bit_depth_, loopfilter_op_)); \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- err_count += ref_s[j] != s[j]; \
- } \
- if (err_count && !err_count_total) { \
- first_failure = i; \
- } \
- err_count_total += err_count; \
- } \
- EXPECT_EQ(0, err_count_total) \
- << "Error: Loop8Test9Param, C output doesn't match SIMD " \
- "loopfilter output. " \
- << "First failed at test case " << first_failure;
-
-TEST_P(Loop8Test9Param_hbd, OperationCheck) { OPCHECKd(uint16_t, 16); }
-TEST_P(Loop8Test9Param_lbd, OperationCheck) { OPCHECKd(uint8_t, 8); }
-
-#define VALCHECKd(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = number_of_iterations; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]); \
- int err_count_total = 0; \
- int first_failure = -1; \
- for (int i = 0; i < count_test_block; ++i) { \
- int err_count = 0; \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- int32_t p = kNumCoeffs / 32; \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- s[j] = rnd.Rand16() & mask_; \
- ref_s[j] = s[j]; \
- } \
- call_dualfilter(ref_s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
- limit1, thresh1, bit_depth_, ref_loopfilter_op_); \
- ASM_REGISTER_STATE_CHECK( \
- call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
- limit1, thresh1, bit_depth_, loopfilter_op_)); \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- err_count += ref_s[j] != s[j]; \
- } \
- if (err_count && !err_count_total) { \
- first_failure = i; \
- } \
- err_count_total += err_count; \
- } \
- EXPECT_EQ(0, err_count_total) \
- << "Error: Loop8Test9Param, C output doesn't match SIMD " \
- "loopfilter output. " \
- << "First failed at test case " << first_failure;
-
-TEST_P(Loop8Test9Param_hbd, ValueCheck) { VALCHECKd(uint16_t, 16); }
-TEST_P(Loop8Test9Param_lbd, ValueCheck) { VALCHECKd(uint8_t, 8); }
-
-#define SPEEDCHECKd(a, b) \
- ACMRandom rnd(ACMRandom::DeterministicSeed()); \
- const int count_test_block = kSpeedTestNum; \
- DECLARE_ALIGNED(b, a, s[kNumCoeffs]); \
- uint8_t tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetOuterThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetInnerThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- limit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- tmp = GetHevThresh(&rnd); \
- DECLARE_ALIGNED(16, const uint8_t, \
- thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp, \
- tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
- int32_t p = kNumCoeffs / 32; \
- for (int j = 0; j < kNumCoeffs; ++j) { \
- s[j] = rnd.Rand16() & mask_; \
- } \
- for (int i = 0; i < count_test_block; ++i) { \
- call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
- limit1, thresh1, bit_depth_, loopfilter_op_); \
- }
-
-TEST_P(Loop8Test9Param_hbd, DISABLED_Speed) { SPEEDCHECKd(uint16_t, 16); }
-TEST_P(Loop8Test9Param_lbd, DISABLED_Speed) { SPEEDCHECKd(uint8_t, 8); }
-
-using ::testing::make_tuple;
-
-#if HAVE_SSE2
-
-const hbdloop_param_t kHbdLoop8Test6[] = {
- make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
- 8),
- make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
- 8),
- make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
- 8),
- make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
- &aom_highbd_lpf_horizontal_14_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 8),
-
- make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
- 8),
- make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
- 10),
- make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
- 10),
- make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
- 10),
- make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
- &aom_highbd_lpf_horizontal_14_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
- 10),
- make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
- 12),
- make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 12),
- make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
- 12),
- make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
- 12),
- make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
- &aom_highbd_lpf_horizontal_14_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
- 12),
- make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 12)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, Loop8Test6Param_hbd,
- ::testing::ValuesIn(kHbdLoop8Test6));
-
-const loop_param_t kLoop8Test6[] = {
- make_tuple(&aom_lpf_horizontal_4_sse2, &aom_lpf_horizontal_4_c, 8),
- make_tuple(&aom_lpf_horizontal_8_sse2, &aom_lpf_horizontal_8_c, 8),
- make_tuple(&aom_lpf_horizontal_6_sse2, &aom_lpf_horizontal_6_c, 8),
- make_tuple(&aom_lpf_vertical_6_sse2, &aom_lpf_vertical_6_c, 8),
- make_tuple(&aom_lpf_horizontal_14_sse2, &aom_lpf_horizontal_14_c, 8),
- make_tuple(&aom_lpf_vertical_4_sse2, &aom_lpf_vertical_4_c, 8),
- make_tuple(&aom_lpf_vertical_8_sse2, &aom_lpf_vertical_8_c, 8),
- make_tuple(&aom_lpf_vertical_14_sse2, &aom_lpf_vertical_14_c, 8),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, Loop8Test6Param_lbd,
- ::testing::ValuesIn(kLoop8Test6));
-
-const dual_loop_param_t kLoop8Test9[] = {
- make_tuple(&aom_lpf_horizontal_4_dual_sse2, &aom_lpf_horizontal_4_dual_c, 8),
- make_tuple(&aom_lpf_vertical_4_dual_sse2, &aom_lpf_vertical_4_dual_c, 8),
- make_tuple(&aom_lpf_horizontal_6_dual_sse2, &aom_lpf_horizontal_6_dual_c, 8),
- make_tuple(&aom_lpf_vertical_6_dual_sse2, &aom_lpf_vertical_6_dual_c, 8),
- make_tuple(&aom_lpf_horizontal_8_dual_sse2, &aom_lpf_horizontal_8_dual_c, 8),
- make_tuple(&aom_lpf_vertical_8_dual_sse2, &aom_lpf_vertical_8_dual_c, 8),
- make_tuple(&aom_lpf_horizontal_14_dual_sse2, &aom_lpf_horizontal_14_dual_c,
- 8),
- make_tuple(&aom_lpf_vertical_14_dual_sse2, &aom_lpf_vertical_14_dual_c, 8)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, Loop8Test9Param_lbd,
- ::testing::ValuesIn(kLoop8Test9));
-
-#endif // HAVE_SSE2
-
-#if HAVE_SSE2
-const hbddual_loop_param_t kHbdLoop8Test9[] = {
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
- &aom_highbd_lpf_horizontal_4_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
- &aom_highbd_lpf_horizontal_6_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
- &aom_highbd_lpf_horizontal_8_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
- &aom_highbd_lpf_horizontal_14_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
- &aom_highbd_lpf_vertical_4_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
- &aom_highbd_lpf_vertical_6_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
- &aom_highbd_lpf_vertical_8_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
- &aom_highbd_lpf_vertical_14_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
- &aom_highbd_lpf_horizontal_4_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
- &aom_highbd_lpf_horizontal_6_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
- &aom_highbd_lpf_horizontal_8_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
- &aom_highbd_lpf_horizontal_14_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
- &aom_highbd_lpf_vertical_4_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
- &aom_highbd_lpf_vertical_6_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
- &aom_highbd_lpf_vertical_8_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
- &aom_highbd_lpf_vertical_14_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
- &aom_highbd_lpf_horizontal_4_dual_c, 12),
- make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
- &aom_highbd_lpf_horizontal_6_dual_c, 12),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
- &aom_highbd_lpf_horizontal_8_dual_c, 12),
- make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
- &aom_highbd_lpf_horizontal_14_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
- &aom_highbd_lpf_vertical_4_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
- &aom_highbd_lpf_vertical_6_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
- &aom_highbd_lpf_vertical_8_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
- &aom_highbd_lpf_vertical_14_dual_c, 12),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, Loop8Test9Param_hbd,
- ::testing::ValuesIn(kHbdLoop8Test9));
-
-#endif // HAVE_SSE2
-
-#if HAVE_NEON
-const loop_param_t kLoop8Test6[] = {
- make_tuple(&aom_lpf_vertical_14_neon, &aom_lpf_vertical_14_c, 8),
- make_tuple(&aom_lpf_vertical_8_neon, &aom_lpf_vertical_8_c, 8),
- make_tuple(&aom_lpf_vertical_6_neon, &aom_lpf_vertical_6_c, 8),
- make_tuple(&aom_lpf_vertical_4_neon, &aom_lpf_vertical_4_c, 8),
- make_tuple(&aom_lpf_horizontal_14_neon, &aom_lpf_horizontal_14_c, 8),
- make_tuple(&aom_lpf_horizontal_8_neon, &aom_lpf_horizontal_8_c, 8),
- make_tuple(&aom_lpf_horizontal_6_neon, &aom_lpf_horizontal_6_c, 8),
- make_tuple(&aom_lpf_horizontal_4_neon, &aom_lpf_horizontal_4_c, 8)
-};
-
-INSTANTIATE_TEST_CASE_P(NEON, Loop8Test6Param_lbd,
- ::testing::ValuesIn(kLoop8Test6));
-#endif // HAVE_NEON
-
-#if HAVE_AVX2
-const hbddual_loop_param_t kHbdLoop8Test9Avx2[] = {
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
- &aom_highbd_lpf_horizontal_4_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
- &aom_highbd_lpf_horizontal_4_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
- &aom_highbd_lpf_horizontal_4_dual_c, 12),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
- &aom_highbd_lpf_horizontal_8_dual_c, 8),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
- &aom_highbd_lpf_horizontal_8_dual_c, 10),
- make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
- &aom_highbd_lpf_horizontal_8_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
- &aom_highbd_lpf_vertical_4_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
- &aom_highbd_lpf_vertical_4_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
- &aom_highbd_lpf_vertical_4_dual_c, 12),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
- &aom_highbd_lpf_vertical_8_dual_c, 8),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
- &aom_highbd_lpf_vertical_8_dual_c, 10),
- make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
- &aom_highbd_lpf_vertical_8_dual_c, 12),
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, Loop8Test9Param_hbd,
- ::testing::ValuesIn(kHbdLoop8Test9Avx2));
-#endif
-} // namespace
diff --git a/third_party/aom/test/masked_sad_test.cc b/third_party/aom/test/masked_sad_test.cc
deleted file mode 100644
index 311f1877d..000000000
--- a/third_party/aom/test/masked_sad_test.cc
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_integer.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-const int number_of_iterations = 200;
-
-typedef unsigned int (*MaskedSADFunc)(const uint8_t *src, int src_stride,
- const uint8_t *ref, int ref_stride,
- const uint8_t *second_pred,
- const uint8_t *msk, int msk_stride,
- int invert_mask);
-typedef ::testing::tuple<MaskedSADFunc, MaskedSADFunc> MaskedSADParam;
-
-class MaskedSADTest : public ::testing::TestWithParam<MaskedSADParam> {
- public:
- virtual ~MaskedSADTest() {}
- virtual void SetUp() {
- maskedSAD_op_ = GET_PARAM(0);
- ref_maskedSAD_op_ = GET_PARAM(1);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
- void runMaskedSADTest(int run_times);
-
- protected:
- MaskedSADFunc maskedSAD_op_;
- MaskedSADFunc ref_maskedSAD_op_;
-};
-void MaskedSADTest::runMaskedSADTest(int run_times) {
- unsigned int ref_ret = 0, ret = 1;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint8_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint8_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint8_t, second_pred_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- int err_count = 0;
- int first_failure = -1;
- int src_stride = MAX_SB_SIZE;
- int ref_stride = MAX_SB_SIZE;
- int msk_stride = MAX_SB_SIZE;
- const int iters = run_times == 1 ? number_of_iterations : 1;
- for (int i = 0; i < iters; ++i) {
- for (int j = 0; j < MAX_SB_SIZE * MAX_SB_SIZE; j++) {
- src_ptr[j] = rnd.Rand8();
- ref_ptr[j] = rnd.Rand8();
- second_pred_ptr[j] = rnd.Rand8();
- msk_ptr[j] = ((rnd.Rand8() & 0x7f) > 64) ? rnd.Rand8() & 0x3f : 64;
- assert(msk_ptr[j] <= 64);
- }
-
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int repeat = 0; repeat < run_times; ++repeat) {
- ref_ret = ref_maskedSAD_op_(src_ptr, src_stride, ref_ptr, ref_stride,
- second_pred_ptr, msk_ptr, msk_stride,
- invert_mask);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- if (run_times == 1) {
- ASM_REGISTER_STATE_CHECK(ret = maskedSAD_op_(src_ptr, src_stride,
- ref_ptr, ref_stride,
- second_pred_ptr, msk_ptr,
- msk_stride, invert_mask));
- } else {
- for (int repeat = 0; repeat < run_times; ++repeat) {
- ret =
- maskedSAD_op_(src_ptr, src_stride, ref_ptr, ref_stride,
- second_pred_ptr, msk_ptr, msk_stride, invert_mask);
- }
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 10) {
- printf("%7.2f/%7.2fns", time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- if (ret != ref_ret) {
- err_count++;
- if (first_failure == -1) first_failure = i;
- }
- }
- }
- EXPECT_EQ(0, err_count) << "Error: Masked SAD Test, output doesn't match. "
- << "First failed at test case " << first_failure;
-}
-
-TEST_P(MaskedSADTest, OperationCheck) { runMaskedSADTest(1); }
-
-TEST_P(MaskedSADTest, DISABLED_Speed) { runMaskedSADTest(2000000); }
-
-typedef unsigned int (*HighbdMaskedSADFunc)(const uint8_t *src, int src_stride,
- const uint8_t *ref, int ref_stride,
- const uint8_t *second_pred,
- const uint8_t *msk, int msk_stride,
- int invert_mask);
-typedef ::testing::tuple<HighbdMaskedSADFunc, HighbdMaskedSADFunc>
- HighbdMaskedSADParam;
-
-class HighbdMaskedSADTest
- : public ::testing::TestWithParam<HighbdMaskedSADParam> {
- public:
- virtual ~HighbdMaskedSADTest() {}
- virtual void SetUp() {
- maskedSAD_op_ = GET_PARAM(0);
- ref_maskedSAD_op_ = GET_PARAM(1);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
- void runHighbdMaskedSADTest(int run_times);
-
- protected:
- HighbdMaskedSADFunc maskedSAD_op_;
- HighbdMaskedSADFunc ref_maskedSAD_op_;
-};
-void HighbdMaskedSADTest::runHighbdMaskedSADTest(int run_times) {
- unsigned int ref_ret = 0, ret = 1;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint16_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint16_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint16_t, second_pred_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
- uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
- uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
- uint8_t *second_pred8_ptr = CONVERT_TO_BYTEPTR(second_pred_ptr);
- int err_count = 0;
- int first_failure = -1;
- int src_stride = MAX_SB_SIZE;
- int ref_stride = MAX_SB_SIZE;
- int msk_stride = MAX_SB_SIZE;
- const int iters = run_times == 1 ? number_of_iterations : 1;
- for (int i = 0; i < iters; ++i) {
- for (int j = 0; j < MAX_SB_SIZE * MAX_SB_SIZE; j++) {
- src_ptr[j] = rnd.Rand16() & 0xfff;
- ref_ptr[j] = rnd.Rand16() & 0xfff;
- second_pred_ptr[j] = rnd.Rand16() & 0xfff;
- msk_ptr[j] = ((rnd.Rand8() & 0x7f) > 64) ? rnd.Rand8() & 0x3f : 64;
- }
-
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int repeat = 0; repeat < run_times; ++repeat) {
- ref_ret = ref_maskedSAD_op_(src8_ptr, src_stride, ref8_ptr, ref_stride,
- second_pred8_ptr, msk_ptr, msk_stride,
- invert_mask);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- if (run_times == 1) {
- ASM_REGISTER_STATE_CHECK(ret = maskedSAD_op_(src8_ptr, src_stride,
- ref8_ptr, ref_stride,
- second_pred8_ptr, msk_ptr,
- msk_stride, invert_mask));
- } else {
- for (int repeat = 0; repeat < run_times; ++repeat) {
- ret =
- maskedSAD_op_(src8_ptr, src_stride, ref8_ptr, ref_stride,
- second_pred8_ptr, msk_ptr, msk_stride, invert_mask);
- }
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 10) {
- printf("%7.2f/%7.2fns", time1, time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- if (ret != ref_ret) {
- err_count++;
- if (first_failure == -1) first_failure = i;
- }
- }
- }
- EXPECT_EQ(0, err_count)
- << "Error: High BD Masked SAD Test, output doesn't match. "
- << "First failed at test case " << first_failure;
-}
-
-TEST_P(HighbdMaskedSADTest, OperationCheck) { runHighbdMaskedSADTest(1); }
-
-TEST_P(HighbdMaskedSADTest, DISABLED_Speed) { runHighbdMaskedSADTest(1000000); }
-
-using ::testing::make_tuple;
-
-#if HAVE_SSSE3
-const MaskedSADParam msad_test[] = {
- make_tuple(&aom_masked_sad4x4_ssse3, &aom_masked_sad4x4_c),
- make_tuple(&aom_masked_sad4x8_ssse3, &aom_masked_sad4x8_c),
- make_tuple(&aom_masked_sad8x4_ssse3, &aom_masked_sad8x4_c),
- make_tuple(&aom_masked_sad8x8_ssse3, &aom_masked_sad8x8_c),
- make_tuple(&aom_masked_sad8x16_ssse3, &aom_masked_sad8x16_c),
- make_tuple(&aom_masked_sad16x8_ssse3, &aom_masked_sad16x8_c),
- make_tuple(&aom_masked_sad16x16_ssse3, &aom_masked_sad16x16_c),
- make_tuple(&aom_masked_sad16x32_ssse3, &aom_masked_sad16x32_c),
- make_tuple(&aom_masked_sad32x16_ssse3, &aom_masked_sad32x16_c),
- make_tuple(&aom_masked_sad32x32_ssse3, &aom_masked_sad32x32_c),
- make_tuple(&aom_masked_sad32x64_ssse3, &aom_masked_sad32x64_c),
- make_tuple(&aom_masked_sad64x32_ssse3, &aom_masked_sad64x32_c),
- make_tuple(&aom_masked_sad64x64_ssse3, &aom_masked_sad64x64_c),
- make_tuple(&aom_masked_sad64x128_ssse3, &aom_masked_sad64x128_c),
- make_tuple(&aom_masked_sad128x64_ssse3, &aom_masked_sad128x64_c),
- make_tuple(&aom_masked_sad128x128_ssse3, &aom_masked_sad128x128_c),
- make_tuple(&aom_masked_sad4x16_ssse3, &aom_masked_sad4x16_c),
- make_tuple(&aom_masked_sad16x4_ssse3, &aom_masked_sad16x4_c),
- make_tuple(&aom_masked_sad8x32_ssse3, &aom_masked_sad8x32_c),
- make_tuple(&aom_masked_sad32x8_ssse3, &aom_masked_sad32x8_c),
- make_tuple(&aom_masked_sad16x64_ssse3, &aom_masked_sad16x64_c),
- make_tuple(&aom_masked_sad64x16_ssse3, &aom_masked_sad64x16_c),
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3, MaskedSADTest, ::testing::ValuesIn(msad_test));
-
-const HighbdMaskedSADParam hbd_msad_test[] = {
- make_tuple(&aom_highbd_masked_sad4x4_ssse3, &aom_highbd_masked_sad4x4_c),
- make_tuple(&aom_highbd_masked_sad4x8_ssse3, &aom_highbd_masked_sad4x8_c),
- make_tuple(&aom_highbd_masked_sad8x4_ssse3, &aom_highbd_masked_sad8x4_c),
- make_tuple(&aom_highbd_masked_sad8x8_ssse3, &aom_highbd_masked_sad8x8_c),
- make_tuple(&aom_highbd_masked_sad8x16_ssse3, &aom_highbd_masked_sad8x16_c),
- make_tuple(&aom_highbd_masked_sad16x8_ssse3, &aom_highbd_masked_sad16x8_c),
- make_tuple(&aom_highbd_masked_sad16x16_ssse3, &aom_highbd_masked_sad16x16_c),
- make_tuple(&aom_highbd_masked_sad16x32_ssse3, &aom_highbd_masked_sad16x32_c),
- make_tuple(&aom_highbd_masked_sad32x16_ssse3, &aom_highbd_masked_sad32x16_c),
- make_tuple(&aom_highbd_masked_sad32x32_ssse3, &aom_highbd_masked_sad32x32_c),
- make_tuple(&aom_highbd_masked_sad32x64_ssse3, &aom_highbd_masked_sad32x64_c),
- make_tuple(&aom_highbd_masked_sad64x32_ssse3, &aom_highbd_masked_sad64x32_c),
- make_tuple(&aom_highbd_masked_sad64x64_ssse3, &aom_highbd_masked_sad64x64_c),
- make_tuple(&aom_highbd_masked_sad64x128_ssse3,
- &aom_highbd_masked_sad64x128_c),
- make_tuple(&aom_highbd_masked_sad128x64_ssse3,
- &aom_highbd_masked_sad128x64_c),
- make_tuple(&aom_highbd_masked_sad128x128_ssse3,
- &aom_highbd_masked_sad128x128_c),
- make_tuple(&aom_highbd_masked_sad4x16_ssse3, &aom_highbd_masked_sad4x16_c),
- make_tuple(&aom_highbd_masked_sad16x4_ssse3, &aom_highbd_masked_sad16x4_c),
- make_tuple(&aom_highbd_masked_sad8x32_ssse3, &aom_highbd_masked_sad8x32_c),
- make_tuple(&aom_highbd_masked_sad32x8_ssse3, &aom_highbd_masked_sad32x8_c),
- make_tuple(&aom_highbd_masked_sad16x64_ssse3, &aom_highbd_masked_sad16x64_c),
- make_tuple(&aom_highbd_masked_sad64x16_ssse3, &aom_highbd_masked_sad64x16_c),
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3, HighbdMaskedSADTest,
- ::testing::ValuesIn(hbd_msad_test));
-#endif // HAVE_SSSE3
-
-#if HAVE_AVX2
-const MaskedSADParam msad_avx2_test[] = {
- make_tuple(&aom_masked_sad4x4_avx2, &aom_masked_sad4x4_ssse3),
- make_tuple(&aom_masked_sad4x8_avx2, &aom_masked_sad4x8_ssse3),
- make_tuple(&aom_masked_sad8x4_avx2, &aom_masked_sad8x4_ssse3),
- make_tuple(&aom_masked_sad8x8_avx2, &aom_masked_sad8x8_ssse3),
- make_tuple(&aom_masked_sad8x16_avx2, &aom_masked_sad8x16_ssse3),
- make_tuple(&aom_masked_sad16x8_avx2, &aom_masked_sad16x8_ssse3),
- make_tuple(&aom_masked_sad16x16_avx2, &aom_masked_sad16x16_ssse3),
- make_tuple(&aom_masked_sad16x32_avx2, &aom_masked_sad16x32_ssse3),
- make_tuple(&aom_masked_sad32x16_avx2, &aom_masked_sad32x16_ssse3),
- make_tuple(&aom_masked_sad32x32_avx2, &aom_masked_sad32x32_ssse3),
- make_tuple(&aom_masked_sad32x64_avx2, &aom_masked_sad32x64_ssse3),
- make_tuple(&aom_masked_sad64x32_avx2, &aom_masked_sad64x32_ssse3),
- make_tuple(&aom_masked_sad64x64_avx2, &aom_masked_sad64x64_ssse3),
- make_tuple(&aom_masked_sad64x128_avx2, &aom_masked_sad64x128_ssse3),
- make_tuple(&aom_masked_sad128x64_avx2, &aom_masked_sad128x64_ssse3),
- make_tuple(&aom_masked_sad128x128_avx2, &aom_masked_sad128x128_ssse3),
- make_tuple(&aom_masked_sad4x16_avx2, &aom_masked_sad4x16_ssse3),
- make_tuple(&aom_masked_sad16x4_avx2, &aom_masked_sad16x4_ssse3),
- make_tuple(&aom_masked_sad8x32_avx2, &aom_masked_sad8x32_ssse3),
- make_tuple(&aom_masked_sad32x8_avx2, &aom_masked_sad32x8_ssse3),
- make_tuple(&aom_masked_sad16x64_avx2, &aom_masked_sad16x64_ssse3),
- make_tuple(&aom_masked_sad64x16_avx2, &aom_masked_sad64x16_ssse3)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, MaskedSADTest,
- ::testing::ValuesIn(msad_avx2_test));
-
-const HighbdMaskedSADParam hbd_msad_avx2_test[] = {
- make_tuple(&aom_highbd_masked_sad4x4_avx2, &aom_highbd_masked_sad4x4_ssse3),
- make_tuple(&aom_highbd_masked_sad4x8_avx2, &aom_highbd_masked_sad4x8_ssse3),
- make_tuple(&aom_highbd_masked_sad8x4_avx2, &aom_highbd_masked_sad8x4_ssse3),
- make_tuple(&aom_highbd_masked_sad8x8_avx2, &aom_highbd_masked_sad8x8_ssse3),
- make_tuple(&aom_highbd_masked_sad8x16_avx2, &aom_highbd_masked_sad8x16_ssse3),
- make_tuple(&aom_highbd_masked_sad16x8_avx2, &aom_highbd_masked_sad16x8_ssse3),
- make_tuple(&aom_highbd_masked_sad16x16_avx2,
- &aom_highbd_masked_sad16x16_ssse3),
- make_tuple(&aom_highbd_masked_sad16x32_avx2,
- &aom_highbd_masked_sad16x32_ssse3),
- make_tuple(&aom_highbd_masked_sad32x16_avx2,
- &aom_highbd_masked_sad32x16_ssse3),
- make_tuple(&aom_highbd_masked_sad32x32_avx2,
- &aom_highbd_masked_sad32x32_ssse3),
- make_tuple(&aom_highbd_masked_sad32x64_avx2,
- &aom_highbd_masked_sad32x64_ssse3),
- make_tuple(&aom_highbd_masked_sad64x32_avx2,
- &aom_highbd_masked_sad64x32_ssse3),
- make_tuple(&aom_highbd_masked_sad64x64_avx2,
- &aom_highbd_masked_sad64x64_ssse3),
- make_tuple(&aom_highbd_masked_sad64x128_avx2,
- &aom_highbd_masked_sad64x128_ssse3),
- make_tuple(&aom_highbd_masked_sad128x64_avx2,
- &aom_highbd_masked_sad128x64_ssse3),
- make_tuple(&aom_highbd_masked_sad128x128_avx2,
- &aom_highbd_masked_sad128x128_ssse3),
- make_tuple(&aom_highbd_masked_sad4x16_avx2, &aom_highbd_masked_sad4x16_ssse3),
- make_tuple(&aom_highbd_masked_sad16x4_avx2, &aom_highbd_masked_sad16x4_ssse3),
- make_tuple(&aom_highbd_masked_sad8x32_avx2, &aom_highbd_masked_sad8x32_ssse3),
- make_tuple(&aom_highbd_masked_sad32x8_avx2, &aom_highbd_masked_sad32x8_ssse3),
- make_tuple(&aom_highbd_masked_sad16x64_avx2,
- &aom_highbd_masked_sad16x64_ssse3),
- make_tuple(&aom_highbd_masked_sad64x16_avx2,
- &aom_highbd_masked_sad64x16_ssse3)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, HighbdMaskedSADTest,
- ::testing::ValuesIn(hbd_msad_avx2_test));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/masked_variance_test.cc b/third_party/aom/test/masked_variance_test.cc
deleted file mode 100644
index 275b9feb6..000000000
--- a/third_party/aom/test/masked_variance_test.cc
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_codec.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_filter.h"
-#include "aom_mem/aom_mem.h"
-
-using libaom_test::ACMRandom;
-
-namespace {
-const int number_of_iterations = 200;
-
-typedef unsigned int (*MaskedSubPixelVarianceFunc)(
- const uint8_t *src, int src_stride, int xoffset, int yoffset,
- const uint8_t *ref, int ref_stride, const uint8_t *second_pred,
- const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse);
-
-typedef ::testing::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc>
- MaskedSubPixelVarianceParam;
-
-class MaskedSubPixelVarianceTest
- : public ::testing::TestWithParam<MaskedSubPixelVarianceParam> {
- public:
- virtual ~MaskedSubPixelVarianceTest() {}
- virtual void SetUp() {
- opt_func_ = GET_PARAM(0);
- ref_func_ = GET_PARAM(1);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- MaskedSubPixelVarianceFunc opt_func_;
- MaskedSubPixelVarianceFunc ref_func_;
-};
-
-TEST_P(MaskedSubPixelVarianceTest, OperationCheck) {
- unsigned int ref_ret, opt_ret;
- unsigned int ref_sse, opt_sse;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- // Note: We pad out the input array to a multiple of 16 bytes wide, so that
- // consecutive rows keep the 16-byte alignment.
- DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t,
- second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- int err_count = 0;
- int first_failure = -1;
- int src_stride = (MAX_SB_SIZE + 16);
- int ref_stride = (MAX_SB_SIZE + 16);
- int msk_stride = (MAX_SB_SIZE + 16);
- int xoffset;
- int yoffset;
-
- for (int i = 0; i < number_of_iterations; ++i) {
- int xoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
- int yoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
- for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16); j++) {
- src_ptr[j] = rnd.Rand8();
- ref_ptr[j] = rnd.Rand8();
- second_pred_ptr[j] = rnd.Rand8();
- msk_ptr[j] = rnd(65);
- }
- for (int k = 0; k < 3; k++) {
- for (int l = 0; l < 3; l++) {
- xoffset = xoffsets[k];
- yoffset = yoffsets[l];
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
- ref_stride, second_pred_ptr, msk_ptr, msk_stride,
- invert_mask, &ref_sse);
- ASM_REGISTER_STATE_CHECK(
- opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset,
- ref_ptr, ref_stride, second_pred_ptr, msk_ptr,
- msk_stride, invert_mask, &opt_sse));
-
- if (opt_ret != ref_ret || opt_sse != ref_sse) {
- err_count++;
- if (first_failure == -1) first_failure = i;
- }
- }
- }
- }
- }
-
- EXPECT_EQ(0, err_count)
- << "Error: Masked Sub Pixel Variance Test OperationCheck,"
- << "C output doesn't match SSSE3 output. "
- << "First failed at test case " << first_failure;
-}
-
-TEST_P(MaskedSubPixelVarianceTest, ExtremeValues) {
- unsigned int ref_ret, opt_ret;
- unsigned int ref_sse, opt_sse;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t,
- second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
- int first_failure_x = -1;
- int first_failure_y = -1;
- int err_count = 0;
- int first_failure = -1;
- int src_stride = (MAX_SB_SIZE + 16);
- int ref_stride = (MAX_SB_SIZE + 16);
- int msk_stride = (MAX_SB_SIZE + 16);
-
- for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
- for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
- for (int i = 0; i < 16; ++i) {
- memset(src_ptr, (i & 0x1) ? 255 : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
- memset(ref_ptr, (i & 0x2) ? 255 : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
- memset(second_pred_ptr, (i & 0x4) ? 255 : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
- memset(msk_ptr, (i & 0x8) ? 64 : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
-
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
- ref_stride, second_pred_ptr, msk_ptr, msk_stride,
- invert_mask, &ref_sse);
- ASM_REGISTER_STATE_CHECK(
- opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset,
- ref_ptr, ref_stride, second_pred_ptr, msk_ptr,
- msk_stride, invert_mask, &opt_sse));
-
- if (opt_ret != ref_ret || opt_sse != ref_sse) {
- err_count++;
- if (first_failure == -1) {
- first_failure = i;
- first_failure_x = xoffset;
- first_failure_y = yoffset;
- }
- }
- }
- }
- }
- }
-
- EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
- << "C output doesn't match SSSE3 output. "
- << "First failed at test case " << first_failure
- << " x_offset = " << first_failure_x
- << " y_offset = " << first_failure_y;
-}
-
-typedef ::testing::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc,
- aom_bit_depth_t>
- HighbdMaskedSubPixelVarianceParam;
-
-class HighbdMaskedSubPixelVarianceTest
- : public ::testing::TestWithParam<HighbdMaskedSubPixelVarianceParam> {
- public:
- virtual ~HighbdMaskedSubPixelVarianceTest() {}
- virtual void SetUp() {
- opt_func_ = GET_PARAM(0);
- ref_func_ = GET_PARAM(1);
- bit_depth_ = GET_PARAM(2);
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- MaskedSubPixelVarianceFunc opt_func_;
- MaskedSubPixelVarianceFunc ref_func_;
- aom_bit_depth_t bit_depth_;
-};
-
-TEST_P(HighbdMaskedSubPixelVarianceTest, OperationCheck) {
- unsigned int ref_ret, opt_ret;
- unsigned int ref_sse, opt_sse;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint16_t,
- second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
- uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
- uint8_t *second_pred8_ptr = CONVERT_TO_BYTEPTR(second_pred_ptr);
- int err_count = 0;
- int first_failure = -1;
- int first_failure_x = -1;
- int first_failure_y = -1;
- int src_stride = (MAX_SB_SIZE + 8);
- int ref_stride = (MAX_SB_SIZE + 8);
- int msk_stride = (MAX_SB_SIZE + 8);
- int xoffset, yoffset;
-
- for (int i = 0; i < number_of_iterations; ++i) {
- for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8); j++) {
- src_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
- ref_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
- second_pred_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
- msk_ptr[j] = rnd(65);
- }
- for (xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
- for (yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
- ref_stride, second_pred8_ptr, msk_ptr, msk_stride,
- invert_mask, &ref_sse);
- ASM_REGISTER_STATE_CHECK(
- opt_ret = opt_func_(src8_ptr, src_stride, xoffset, yoffset,
- ref8_ptr, ref_stride, second_pred8_ptr,
- msk_ptr, msk_stride, invert_mask, &opt_sse));
-
- if (opt_ret != ref_ret || opt_sse != ref_sse) {
- err_count++;
- if (first_failure == -1) {
- first_failure = i;
- first_failure_x = xoffset;
- first_failure_y = yoffset;
- }
- }
- }
- }
- }
- }
-
- EXPECT_EQ(0, err_count)
- << "Error: Masked Sub Pixel Variance Test OperationCheck,"
- << "C output doesn't match SSSE3 output. "
- << "First failed at test case " << first_failure
- << " x_offset = " << first_failure_x << " y_offset = " << first_failure_y;
-}
-
-TEST_P(HighbdMaskedSubPixelVarianceTest, ExtremeValues) {
- unsigned int ref_ret, opt_ret;
- unsigned int ref_sse, opt_sse;
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- DECLARE_ALIGNED(16, uint16_t,
- second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
- uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
- uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
- uint8_t *second_pred8_ptr = CONVERT_TO_BYTEPTR(second_pred_ptr);
- int first_failure_x = -1;
- int first_failure_y = -1;
- int err_count = 0;
- int first_failure = -1;
- int src_stride = (MAX_SB_SIZE + 8);
- int ref_stride = (MAX_SB_SIZE + 8);
- int msk_stride = (MAX_SB_SIZE + 8);
-
- for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
- for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
- for (int i = 0; i < 16; ++i) {
- aom_memset16(src_ptr, (i & 0x1) ? ((1 << bit_depth_) - 1) : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
- aom_memset16(ref_ptr, (i & 0x2) ? ((1 << bit_depth_) - 1) : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
- aom_memset16(second_pred_ptr, (i & 0x4) ? ((1 << bit_depth_) - 1) : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
- memset(msk_ptr, (i & 0x8) ? 64 : 0,
- (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
-
- for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
- ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
- ref_stride, second_pred8_ptr, msk_ptr, msk_stride,
- invert_mask, &ref_sse);
- ASM_REGISTER_STATE_CHECK(
- opt_ret = opt_func_(src8_ptr, src_stride, xoffset, yoffset,
- ref8_ptr, ref_stride, second_pred8_ptr,
- msk_ptr, msk_stride, invert_mask, &opt_sse));
-
- if (opt_ret != ref_ret || opt_sse != ref_sse) {
- err_count++;
- if (first_failure == -1) {
- first_failure = i;
- first_failure_x = xoffset;
- first_failure_y = yoffset;
- }
- }
- }
- }
- }
- }
-
- EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
- << "C output doesn't match SSSE3 output. "
- << "First failed at test case " << first_failure
- << " x_offset = " << first_failure_x
- << " y_offset = " << first_failure_y;
-}
-
-using ::testing::make_tuple;
-
-#if HAVE_SSSE3
-
-const MaskedSubPixelVarianceParam sub_pel_var_test[] = {
- make_tuple(&aom_masked_sub_pixel_variance128x128_ssse3,
- &aom_masked_sub_pixel_variance128x128_c),
- make_tuple(&aom_masked_sub_pixel_variance128x64_ssse3,
- &aom_masked_sub_pixel_variance128x64_c),
- make_tuple(&aom_masked_sub_pixel_variance64x128_ssse3,
- &aom_masked_sub_pixel_variance64x128_c),
- make_tuple(&aom_masked_sub_pixel_variance64x64_ssse3,
- &aom_masked_sub_pixel_variance64x64_c),
- make_tuple(&aom_masked_sub_pixel_variance64x32_ssse3,
- &aom_masked_sub_pixel_variance64x32_c),
- make_tuple(&aom_masked_sub_pixel_variance32x64_ssse3,
- &aom_masked_sub_pixel_variance32x64_c),
- make_tuple(&aom_masked_sub_pixel_variance32x32_ssse3,
- &aom_masked_sub_pixel_variance32x32_c),
- make_tuple(&aom_masked_sub_pixel_variance32x16_ssse3,
- &aom_masked_sub_pixel_variance32x16_c),
- make_tuple(&aom_masked_sub_pixel_variance16x32_ssse3,
- &aom_masked_sub_pixel_variance16x32_c),
- make_tuple(&aom_masked_sub_pixel_variance16x16_ssse3,
- &aom_masked_sub_pixel_variance16x16_c),
- make_tuple(&aom_masked_sub_pixel_variance16x8_ssse3,
- &aom_masked_sub_pixel_variance16x8_c),
- make_tuple(&aom_masked_sub_pixel_variance8x16_ssse3,
- &aom_masked_sub_pixel_variance8x16_c),
- make_tuple(&aom_masked_sub_pixel_variance8x8_ssse3,
- &aom_masked_sub_pixel_variance8x8_c),
- make_tuple(&aom_masked_sub_pixel_variance8x4_ssse3,
- &aom_masked_sub_pixel_variance8x4_c),
- make_tuple(&aom_masked_sub_pixel_variance4x8_ssse3,
- &aom_masked_sub_pixel_variance4x8_c),
- make_tuple(&aom_masked_sub_pixel_variance4x4_ssse3,
- &aom_masked_sub_pixel_variance4x4_c)
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3_C_COMPARE, MaskedSubPixelVarianceTest,
- ::testing::ValuesIn(sub_pel_var_test));
-
-const HighbdMaskedSubPixelVarianceParam hbd_sub_pel_var_test[] = {
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x128_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance128x128_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x64_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance128x64_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x128_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance64x128_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x64_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance64x64_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x32_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance64x32_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x64_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance32x64_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x32_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance32x32_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x16_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance32x16_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x32_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance16x32_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x16_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance16x16_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x8_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance16x8_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x16_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance8x16_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x8_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance8x8_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x4_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance8x4_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x8_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance4x8_c, AOM_BITS_8),
- make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x4_ssse3,
- &aom_highbd_8_masked_sub_pixel_variance4x4_c, AOM_BITS_8),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x128_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance128x128_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x64_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance128x64_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x128_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance64x128_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x64_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance64x64_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x32_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance64x32_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x64_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance32x64_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x32_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance32x32_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x16_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance32x16_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x32_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance16x32_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x16_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance16x16_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x8_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance16x8_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x16_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance8x16_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x8_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance8x8_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x4_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance8x4_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x8_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance4x8_c, AOM_BITS_10),
- make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x4_ssse3,
- &aom_highbd_10_masked_sub_pixel_variance4x4_c, AOM_BITS_10),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x128_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance128x128_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x64_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance128x64_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x128_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance64x128_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x64_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance64x64_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x32_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance64x32_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x64_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance32x64_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x32_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance32x32_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x16_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance32x16_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x32_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance16x32_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x16_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance16x16_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x8_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance16x8_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x16_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance8x16_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x8_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance8x8_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x4_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance8x4_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x8_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance4x8_c, AOM_BITS_12),
- make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x4_ssse3,
- &aom_highbd_12_masked_sub_pixel_variance4x4_c, AOM_BITS_12)
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3_C_COMPARE, HighbdMaskedSubPixelVarianceTest,
- ::testing::ValuesIn(hbd_sub_pel_var_test));
-#endif // HAVE_SSSE3
-} // namespace
diff --git a/third_party/aom/test/md5_helper.h b/third_party/aom/test/md5_helper.h
deleted file mode 100644
index 9443cb262..000000000
--- a/third_party/aom/test/md5_helper.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_MD5_HELPER_H_
-#define AOM_TEST_MD5_HELPER_H_
-
-#include "aom/aom_decoder.h"
-#include "common/md5_utils.h"
-
-namespace libaom_test {
-class MD5 {
- public:
- MD5() { MD5Init(&md5_); }
-
- void Add(const aom_image_t *img) {
- for (int plane = 0; plane < 3; ++plane) {
- const uint8_t *buf = img->planes[plane];
- // Calculate the width and height to do the md5 check. For the chroma
- // plane, we never want to round down and thus skip a pixel so if
- // we are shifting by 1 (chroma_shift) we add 1 before doing the shift.
- // This works only for chroma_shift of 0 and 1.
- const int bytes_per_sample =
- (img->fmt & AOM_IMG_FMT_HIGHBITDEPTH) ? 2 : 1;
- const int h =
- plane ? (img->d_h + img->y_chroma_shift) >> img->y_chroma_shift
- : img->d_h;
- const int w =
- (plane ? (img->d_w + img->x_chroma_shift) >> img->x_chroma_shift
- : img->d_w) *
- bytes_per_sample;
-
- for (int y = 0; y < h; ++y) {
- MD5Update(&md5_, buf, w);
- buf += img->stride[plane];
- }
- }
- }
-
- void Add(const uint8_t *data, size_t size) {
- MD5Update(&md5_, data, static_cast<uint32_t>(size));
- }
-
- const char *Get(void) {
- static const char hex[16] = {
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
- };
- uint8_t tmp[16];
- MD5Context ctx_tmp = md5_;
-
- MD5Final(tmp, &ctx_tmp);
- for (int i = 0; i < 16; i++) {
- res_[i * 2 + 0] = hex[tmp[i] >> 4];
- res_[i * 2 + 1] = hex[tmp[i] & 0xf];
- }
- res_[32] = 0;
-
- return res_;
- }
-
- protected:
- char res_[33];
- MD5Context md5_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_MD5_HELPER_H_
diff --git a/third_party/aom/test/metrics_template.html b/third_party/aom/test/metrics_template.html
deleted file mode 100644
index b57c62314..000000000
--- a/third_party/aom/test/metrics_template.html
+++ /dev/null
@@ -1,422 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="utf-8">
-<title>Video Codec Test Results</title>
-<style type="text/css">
-<!-- Begin 960 reset -->
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,c
-ode,dd,del,details,dfn,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,h1,h2,h
-3,h4,h5,h6,header,hgroup,hr,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,meter,nav,object,ol,
-output,p,pre,progress,q,rp,rt,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbo
-dy,td,tfoot,th,thead,time,tr,tt,u,ul,var,video,xmp{border:0;margin:0;padding:0;font-size:100%}html,b
-ody{height:100%}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{displa
-y:block}b,strong{font-weight:bold}img{color:transparent;font-size:0;vertical-align:middle;-ms-interp
-olation-mode:bicubic}ol,ul{list-style:none}li{display:list-item}table{border-collapse:collapse;borde
-r-spacing:0}th,td,caption{font-weight:normal;vertical-align:top;text-align:left}q{quotes:none}q:befo
-re,q:after{content:'';content:none}sub,sup,small{font-size:75%}sub,sup{line-height:0;position:relati
-ve;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}svg{overflow:hidden}
-<!-- End 960 reset -->
-<!-- Begin 960 text -->
-body{font:13px/1.5 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}pre,code{font-family
-:'DejaVu Sans Mono',Menlo,Consolas,monospace}hr{border:0 #ccc solid;border-top-width:1px;clear:both;
-height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h
-6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5
-,h6,ol,ul,pre,table,address,fieldset,figure{margin-bottom:20px}
-<!-- End 960 text -->
-<!-- Begin 960 grid (fluid variant)
- 12 columns, 1152px total width
- http://960.gs/ | http://grids.heroku.com/ -->
-.container_12{width:92%;margin-left:4%;margin-right:4%}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid
-_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12{display:inline;float:left;position:relative;ma
-rgin-left:1%;margin-right:1%}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:
-6.333%}.container_12 .grid_2{width:14.667%}.container_12 .grid_3{width:23.0%}.container_12 .grid_4{w
-idth:31.333%}.container_12 .grid_5{width:39.667%}.container_12 .grid_6{width:48.0%}.container_12 .gr
-id_7{width:56.333%}.container_12 .grid_8{width:64.667%}.container_12 .grid_9{width:73.0%}.container_
-12 .grid_10{width:81.333%}.container_12 .grid_11{width:89.667%}.container_12 .grid_12{width:98.0%}.c
-ontainer_12 .prefix_1{padding-left:8.333%}.container_12 .prefix_2{padding-left:16.667%}.container_12
- .prefix_3{padding-left:25.0%}.container_12 .prefix_4{padding-left:33.333%}.container_12 .prefix_5{p
-adding-left:41.667%}.container_12 .prefix_6{padding-left:50.0%}.container_12 .prefix_7{padding-left:
-58.333%}.container_12 .prefix_8{padding-left:66.667%}.container_12 .prefix_9{padding-left:75.0%}.con
-tainer_12 .prefix_10{padding-left:83.333%}.container_12 .prefix_11{padding-left:91.667%}.container_1
-2 .suffix_1{padding-right:8.333%}.container_12 .suffix_2{padding-right:16.667%}.container_12 .suffix
-_3{padding-right:25.0%}.container_12 .suffix_4{padding-right:33.333%}.container_12 .suffix_5{padding
--right:41.667%}.container_12 .suffix_6{padding-right:50.0%}.container_12 .suffix_7{padding-right:58.
-333%}.container_12 .suffix_8{padding-right:66.667%}.container_12 .suffix_9{padding-right:75.0%}.cont
-ainer_12 .suffix_10{padding-right:83.333%}.container_12 .suffix_11{padding-right:91.667%}.container_
-12 .push_1{left:8.333%}.container_12 .push_2{left:16.667%}.container_12 .push_3{left:25.0%}.containe
-r_12 .push_4{left:33.333%}.container_12 .push_5{left:41.667%}.container_12 .push_6{left:50.0%}.conta
-iner_12 .push_7{left:58.333%}.container_12 .push_8{left:66.667%}.container_12 .push_9{left:75.0%}.co
-ntainer_12 .push_10{left:83.333%}.container_12 .push_11{left:91.667%}.container_12 .pull_1{left:-8.3
-33%}.container_12 .pull_2{left:-16.667%}.container_12 .pull_3{left:-25.0%}.container_12 .pull_4{left
-:-33.333%}.container_12 .pull_5{left:-41.667%}.container_12 .pull_6{left:-50.0%}.container_12 .pull_
-7{left:-58.333%}.container_12 .pull_8{left:-66.667%}.container_12 .pull_9{left:-75.0%}.container_12
-.pull_10{left:-83.333%}.container_12 .pull_11{left:-91.667%}.clear{clear:both;display:block;overflow
-:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:' ';display:block;font
--size:0;line-height:0;visibility:hidden;width:0;height:0}.clearfix{display:inline-block}* html .clea
-rfix{height:1%}.clearfix{display:block}
-<!-- End 960 grid -->
-
-div.metricgraph {
-
-}
-
-body {
-
-}
-
-div.header {
- font-family: Arial, sans-serif;
-}
-
-div.header h2 {
- margin: .5em auto;
-}
-
-div.radio {
- font-family: Arial, sans-serif;
- margin-bottom: 1em;
-}
-
-div.main {
-
-}
-
-div.cliplist {
- font-family: Arial, sans-serif;
- margin-top: 6px;
-}
-
-div.chartarea {
- font-family: Arial, sans-serif;
-}
-
-div.indicators {
- font-family: Arial, sans-serif;
- font-size: 13px;
- margin-top: 6px;
- min-height: 600px;
- background-color: #f7f7f7;
-}
-
-div.indicators div.content {
- margin: 1em;
-}
-
-div.indicators div.content h5 {
- font-size: 13px;
- text-align: center;
- margin: 0;
-}
-
-div.indicators div.content ul {
- margin-left: 0;
- padding-left: 0;
- margin-top: 0;
-}
-
-div.indicators div.content ul li {
- margin-left: 1.5em;
-}
-
-div.indicators div.content p:first-child {
- margin-bottom: .5em;
-}
-
-span.google-visualization-table-sortind {
- color: #000;
-}
-.header-style {
- font-weight: bold;
- border: 1px solid #fff;
- background-color: #ccc;
-}
-
-td.header-style+td {
-
-}
-
-.orange-background {
- background-color: orange;
-}
-
-.light-gray-background {
- background-color: #f0f0f0;
-}
-</style>
-<script type="text/javascript" src="https://www.google.com/jsapi"></script>
-<script type="text/javascript">
-var chart_left = 40;
-var chart_top = 6;
-var chart_height = document.documentElement.clientHeight-100;
-var chart_width = "100%";
-ftable='filestable_avg'
-var snrs = [];
-var filestable_dsnr = [];
-var filestable_drate = [];
-var filestable_avg = [];
-
-// Python template code replaces the following 2 lines.
-//%%metrics_js%%//
-//%%filestable_dpsnr%%//
-//%%filestable_avg%%//
-//%%filestable_drate%%//
-//%%snrs%%//
-
-var selected = 0
-var imagestr = '';
-var bettertable=0;
-var chart=0;
-var better=0;
-var metricdata=0;
-var metricView=0;
-var column=1;
-var formatter=0;
-
-function changeColumn(col) {
- column = col;
- console.log(col)
- draw_files();
-}
-
-function changeMetric(m) {
- ftable=m
- draw_files()
-}
-
-function setup_vis() {
- chart = new google.visualization.ScatterChart(
- document.getElementById("metricgraph"));
-
- bettertable = new google.visualization.Table(
- document.getElementById("bettertable"));
-
- draw_files();
- build_metrics_radio();
-}
-
-function build_metrics_radio() {
- for (metric=1; metric < metrics.length; metric++) {
- var rb = document.createElement('input');
- var l = document.createElement('label');
- rb.setAttribute('type','radio');
- rb.setAttribute('name','metric');
- rb.setAttribute('onClick', "changeColumn('"+metric.toString()+"')");
- l.innerHTML = metrics[metric];
- document.getElementById('metrics').appendChild(rb);
- document.getElementById('metrics').appendChild(l);
- }
-}
-
-function draw_files() {
- var options = {'allowHtml': true, 'width': "100%", 'height': "50%"};
- if (better != 0) delete better;
-
- col=eval(ftable+'[column]')
- better = new google.visualization.DataTable(col)
-
- // Python Template code replaces the following line with a list of
- // formatters.
- if (ftable == 'filestable_dsnr')
- formatter = new google.visualization.NumberFormat(
- {fractionDigits: 4, suffix:" db"});
- else
- formatter = new google.visualization.NumberFormat(
- {fractionDigits: 4, suffix:"%"});
-
- //%%formatters%%//
-
- bettertable.draw(better,options);
- google.visualization.events.addListener(bettertable, 'select',
- selectBetterHandler);
- query_file()
-}
-
-function query_file() {
- imagestr = better.getFormattedValue(selected, 0)
- var metricjson = eval('(' + snrs[column][selected] + ')');
- metricdata = new google.visualization.DataTable(metricjson, 0.6);
- if( metricView != 0 ) delete metricView;
- metricView = new google.visualization.DataView(metricdata);
-
- chart.draw(metricView, {curveType:'function',
- explorer: {},
- chartArea:{left:chart_left, top:chart_top, width:chart_width,
- height:chart_height-90},
- hAxis:{title:"Datarate in kbps"},
- vAxis:{title:"Quality in decibels", format: '##.0', textPosition: 'in'},
- legend:{position:"in"}, title:imagestr, pointSize:2, lineWidth:1,
- width:chart_width, height:chart_height-50 });
-
- google.visualization.events.addListener(chart, 'select', chartSelect);
- google.visualization.events.addListener(chart, 'onmouseover', chartMouseOver);
- google.visualization.events.addListener(chart, 'onmouseout', chartMouseOut);
-}
-
-function chartMouseOut(e) {
- statusbar = document.getElementById('status');
- statusbar.style.display = 'none';
-}
-
-function chartMouseOver(e) {
- pointDifference(e.row, e.column)
-}
-
-function pointDifference(row, col) {
- if(!row || !col)
- return;
-
- var cols = metricdata.getNumberOfColumns();
- var rows = metricdata.getNumberOfRows();
-
- var sel_bitrate = metricView.getValue(row, 0 );
- var sel_metric = metricView.getValue(row, col);
-
- var message = '<ul>' + metricView.getColumnLabel(col) +
- ' (' + sel_bitrate.toFixed(0) + ' kbps, ' + sel_metric.toFixed(2) + ')' + ' is ';
-
-
- // col 0 is datarate
- for( var i=1;i<cols;++i) {
-
- var metric_greatest_thats_less = 0;
- var rate_greatest_thats_less = 0;
- var metric_smallest_thats_greater = 999;
- var rate_smallest_thats_greater = 0;
-
- if(i==col)
- continue;
-
- // Find the lowest metric for the column that's greater than sel_metric and
- // the highest metric for this column that's less than the metric.
- for(var line_count = 0; line_count < rows; ++line_count) {
- this_metric = metricdata.getValue(line_count, i)
- this_rate = metricdata.getValue(line_count, 0)
- if(!this_metric)
- continue;
-
- if(this_metric > metric_greatest_thats_less &&
- this_metric <= sel_metric) {
- metric_greatest_thats_less = this_metric;
- rate_greatest_thats_less = this_rate;
- }
- if(this_metric < metric_smallest_thats_greater &&
- this_metric > sel_metric) {
- metric_smallest_thats_greater = this_metric;
- rate_smallest_thats_greater = this_rate;
- }
- }
-
- if(rate_smallest_thats_greater == 0 || rate_greatest_thats_less == 0) {
- message = message + " <li> Couldn't find a point on both sides.</li>"
- } else {
- metric_slope = ( rate_smallest_thats_greater - rate_greatest_thats_less) /
- ( metric_smallest_thats_greater - metric_greatest_thats_less);
-
- projected_rate = ( sel_metric - metric_greatest_thats_less) *
- metric_slope + rate_greatest_thats_less;
-
- difference = 100 * (projected_rate / sel_bitrate - 1);
-
-
- if (difference > 0)
- message = message + "<li> " + difference.toFixed(2) +
- "% smaller than <em>" +
- metricdata.getColumnLabel(i) + "</em></li> "
- else
- message = message + "<li> " + -difference.toFixed(2) +
- "% bigger than <em>" +
- metricdata.getColumnLabel(i) + "</em></li> "
- }
-
- }
- message = message + "</ul>"
- statusbar = document.getElementById('status');
- statusbar.innerHTML = "<p>" + message + "</p>";
- statusbar.style.display = 'block';
-}
-
-function chartSelect() {
- var selection = chart.getSelection();
- var message = '';
- var min = metricView.getFormattedValue(selection[0].row, 0);
- var max = metricView.getFormattedValue(selection[selection.length-1].row, 0);
- var val = metricView.getFormattedValue(selection[0].row,selection[0].column);
-
- pointDifference(selection[0].row, selection[0].column)
- min = min / 3
- max = max * 3
- metricView.setRows(metricdata.getFilteredRows(
- [{column: 0,minValue: min, maxValue:max}]));
-
- chart.draw(metricView, {curveType:'function',
- chartArea:{left:40, top:10, width:chart_width, height:chart_height - 110},
- hAxis:{title:"datarate in kbps"}, vAxis:{title:"quality in decibels"},
- legend:{position:"in"}, title:imagestr, pointSize:2, lineWidth:1,
- width:chart_width, height:chart_height - 50});
-}
-
-function selectBetterHandler() {
- var selection = bettertable.getSelection();
- for (var i = 0; i < selection.length; i++) {
- item = selection[i];
- }
- selected = item.row
- query_file()
-}
-
-
-google.load('visualization', '1', {'packages' : ['corechart','table']});
-google.setOnLoadCallback(setup_vis);
-</script>
-</head>
-
-<body>
-
- <div class="container_12">
-
- <div class="grid_12 header">
- <h2>Codec Comparison Results</h2>
- </div>
-
- <div class="grid_12 radio">
-
- <form name="myform">
- Method For Combining Points
- <input type="radio" checked name="column" value="1"
- onClick="changeMetric('filestable_avg')" />Average of bitrates difference
- <input type="radio" name="column" value="2"
- onClick="changeMetric('filestable_dsnr')" />BDSNR
- <input type="radio" name="column" value="3"
- onClick="changeMetric('filestable_drate')" />BDRATE
- </form>
-
- <form id="metrics" name="myform">
- </form>
-
- </div>
-
- <div class="grid_12 main">
-
- <div class="grid_5 alpha cliplist">
- <div id="bettertable"></div>
- </div>
-
- <div class="grid_5 chartarea">
- <div id="metricgraph"></div>
- </div>
-
- <div class="grid_2 omega indicators">
- <div class="content">
- <h5>Indicators</h5>
- <hr>
- <div id="status"></div>
- </div>
- </div>
-
- </div>
-
- </div>
-
-</body>
-</html>
diff --git a/third_party/aom/test/monochrome_test.cc b/third_party/aom/test/monochrome_test.cc
deleted file mode 100644
index ebccba584..000000000
--- a/third_party/aom/test/monochrome_test.cc
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <climits>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/video_source.h"
-#include "test/util.h"
-
-namespace {
-
-class MonochromeTest
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- MonochromeTest() : EncoderTest(GET_PARAM(0)), frame0_psnr_y_(0.) {}
-
- virtual ~MonochromeTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- (void)pts;
-
- // Get value of top-left corner pixel of U plane
- int chroma_value = img.planes[AOM_PLANE_U][0];
-
- bool is_chroma_constant =
- ComparePlaneToValue(img, AOM_PLANE_U, chroma_value) &&
- ComparePlaneToValue(img, AOM_PLANE_V, chroma_value);
-
- // Chroma planes should be constant
- EXPECT_TRUE(is_chroma_constant);
-
- // Monochrome flag on image should be set
- EXPECT_EQ(img.monochrome, 1);
-
- chroma_value_list_.push_back(chroma_value);
- }
-
- // Returns true if all pixels on the plane are equal to value, and returns
- // false otherwise.
- bool ComparePlaneToValue(const aom_image_t &img, const int plane,
- const int value) {
- const int w = aom_img_plane_width(&img, plane);
- const int h = aom_img_plane_height(&img, plane);
- const uint8_t *const buf = img.planes[plane];
- const int stride = img.stride[plane];
-
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- if (buf[r * stride + c] != value) return false;
- }
- }
- return true;
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- // Check that the initial Y PSNR value is 'high enough', and check that
- // subsequent Y PSNR values are 'close' to this initial value.
- if (frame0_psnr_y_ == 0.) {
- frame0_psnr_y_ = pkt->data.psnr.psnr[1];
- EXPECT_GT(frame0_psnr_y_, 29.);
- }
- EXPECT_NEAR(pkt->data.psnr.psnr[1], frame0_psnr_y_, 2.5);
- }
-
- std::vector<int> chroma_value_list_;
- double frame0_psnr_y_;
-};
-
-TEST_P(MonochromeTest, TestMonochromeEncoding) {
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 5);
-
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- cfg_.g_w = 352;
- cfg_.g_h = 288;
-
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_min_quantizer = 2;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_undershoot_pct = 50;
- cfg_.rc_overshoot_pct = 50;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.kf_mode = AOM_KF_AUTO;
- cfg_.g_lag_in_frames = 1;
- cfg_.kf_min_dist = cfg_.kf_max_dist = 3000;
- // Enable dropped frames.
- cfg_.rc_dropframe_thresh = 1;
- // Disable error_resilience mode.
- cfg_.g_error_resilient = 0;
- // Run at low bitrate.
- cfg_.rc_target_bitrate = 40;
- // Set monochrome encoding flag
- cfg_.monochrome = 1;
-
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- // Check that the chroma planes are equal across all frames
- std::vector<int>::const_iterator iter = chroma_value_list_.begin();
- int initial_chroma_value = *iter;
- for (; iter != chroma_value_list_.end(); ++iter) {
- // Check that all decoded frames have the same constant chroma planes.
- EXPECT_EQ(*iter, initial_chroma_value);
- }
-}
-
-AV1_INSTANTIATE_TEST_CASE(MonochromeTest,
- ::testing::Values(::libaom_test::kTwoPassGood));
-
-} // namespace
diff --git a/third_party/aom/test/motion_vector_test.cc b/third_party/aom/test/motion_vector_test.cc
deleted file mode 100644
index 27eb93893..000000000
--- a/third_party/aom/test/motion_vector_test.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/util.h"
-#include "test/yuv_video_source.h"
-
-namespace {
-#define MAX_EXTREME_MV 1
-#define MIN_EXTREME_MV 2
-
-// Encoding modes
-const libaom_test::TestMode kEncodingModeVectors[] = {
- ::libaom_test::kTwoPassGood,
- ::libaom_test::kOnePassGood,
-};
-
-// Encoding speeds
-const int kCpuUsedVectors[] = { 1, 5 };
-
-// MV test modes: 1 - always use maximum MV; 2 - always use minimum MV.
-const int kMVTestModes[] = { MAX_EXTREME_MV, MIN_EXTREME_MV };
-
-class MotionVectorTestLarge
- : public ::libaom_test::CodecTestWith3Params<libaom_test::TestMode, int,
- int>,
- public ::libaom_test::EncoderTest {
- protected:
- MotionVectorTestLarge()
- : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
- cpu_used_(GET_PARAM(2)), mv_test_mode_(GET_PARAM(3)) {}
-
- virtual ~MotionVectorTestLarge() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(encoding_mode_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- cfg_.g_lag_in_frames = 3;
- cfg_.rc_end_usage = AOM_VBR;
- } else {
- cfg_.g_lag_in_frames = 0;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- }
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, cpu_used_);
- encoder->Control(AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST, mv_test_mode_);
- if (encoding_mode_ != ::libaom_test::kRealTime) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_ARNR_MAXFRAMES, 7);
- encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
- }
- }
- }
-
- libaom_test::TestMode encoding_mode_;
- int cpu_used_;
- int mv_test_mode_;
-};
-
-TEST_P(MotionVectorTestLarge, OverallTest) {
- int width = 3840;
- int height = 2160;
-
- // Reduce the test clip's resolution while testing on 32-bit system.
- if (sizeof(void *) == 4) {
- width = 2048;
- height = 360;
- }
-
- cfg_.rc_target_bitrate = 24000;
- cfg_.g_profile = 0;
- init_flags_ = AOM_CODEC_USE_PSNR;
-
- testing::internal::scoped_ptr<libaom_test::VideoSource> video;
- video.reset(new libaom_test::YUVVideoSource(
- "niklas_640_480_30.yuv", AOM_IMG_FMT_I420, width, height, 30, 1, 0, 3));
-
- ASSERT_TRUE(video.get() != NULL);
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
-}
-
-AV1_INSTANTIATE_TEST_CASE(MotionVectorTestLarge,
- ::testing::ValuesIn(kEncodingModeVectors),
- ::testing::ValuesIn(kCpuUsedVectors),
- ::testing::ValuesIn(kMVTestModes));
-} // namespace
diff --git a/third_party/aom/test/noise_model_test.cc b/third_party/aom/test/noise_model_test.cc
deleted file mode 100644
index b5b387e31..000000000
--- a/third_party/aom/test/noise_model_test.cc
+++ /dev/null
@@ -1,1343 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <math.h>
-#include <algorithm>
-#include <vector>
-
-#include "aom_dsp/noise_model.h"
-#include "aom_dsp/noise_util.h"
-#include "config/aom_dsp_rtcd.h"
-#include "test/acm_random.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-// Return normally distrbuted values with standard deviation of sigma.
-double randn(libaom_test::ACMRandom *random, double sigma) {
- while (1) {
- const double u = 2.0 * ((double)random->Rand31() /
- testing::internal::Random::kMaxRange) -
- 1.0;
- const double v = 2.0 * ((double)random->Rand31() /
- testing::internal::Random::kMaxRange) -
- 1.0;
- const double s = u * u + v * v;
- if (s > 0 && s < 1) {
- return sigma * (u * sqrt(-2.0 * log(s) / s));
- }
- }
- return 0;
-}
-
-// Synthesizes noise using the auto-regressive filter of the given lag,
-// with the provided n coefficients sampled at the given coords.
-void noise_synth(libaom_test::ACMRandom *random, int lag, int n,
- const int (*coords)[2], const double *coeffs, double *data,
- int w, int h) {
- const int pad_size = 3 * lag;
- const int padded_w = w + pad_size;
- const int padded_h = h + pad_size;
- int x = 0, y = 0;
- std::vector<double> padded(padded_w * padded_h);
-
- for (y = 0; y < padded_h; ++y) {
- for (x = 0; x < padded_w; ++x) {
- padded[y * padded_w + x] = randn(random, 1.0);
- }
- }
- for (y = lag; y < padded_h; ++y) {
- for (x = lag; x < padded_w; ++x) {
- double sum = 0;
- int i = 0;
- for (i = 0; i < n; ++i) {
- const int dx = coords[i][0];
- const int dy = coords[i][1];
- sum += padded[(y + dy) * padded_w + (x + dx)] * coeffs[i];
- }
- padded[y * padded_w + x] += sum;
- }
- }
- // Copy over the padded rows to the output
- for (y = 0; y < h; ++y) {
- memcpy(data + y * w, &padded[0] + y * padded_w, sizeof(*data) * w);
- }
-}
-
-std::vector<float> get_noise_psd(double *noise, int width, int height,
- int block_size) {
- float *block =
- (float *)aom_memalign(32, block_size * block_size * sizeof(block));
- std::vector<float> psd(block_size * block_size);
- int num_blocks = 0;
- struct aom_noise_tx_t *tx = aom_noise_tx_malloc(block_size);
- for (int y = 0; y <= height - block_size; y += block_size / 2) {
- for (int x = 0; x <= width - block_size; x += block_size / 2) {
- for (int yy = 0; yy < block_size; ++yy) {
- for (int xx = 0; xx < block_size; ++xx) {
- block[yy * block_size + xx] = (float)noise[(y + yy) * width + x + xx];
- }
- }
- aom_noise_tx_forward(tx, &block[0]);
- aom_noise_tx_add_energy(tx, &psd[0]);
- num_blocks++;
- }
- }
- for (int yy = 0; yy < block_size; ++yy) {
- for (int xx = 0; xx <= block_size / 2; ++xx) {
- psd[yy * block_size + xx] /= num_blocks;
- }
- }
- // Fill in the data that is missing due to symmetries
- for (int xx = 1; xx < block_size / 2; ++xx) {
- psd[(block_size - xx)] = psd[xx];
- }
- for (int yy = 1; yy < block_size; ++yy) {
- for (int xx = 1; xx < block_size / 2; ++xx) {
- psd[(block_size - yy) * block_size + (block_size - xx)] =
- psd[yy * block_size + xx];
- }
- }
- aom_noise_tx_free(tx);
- aom_free(block);
- return psd;
-}
-
-} // namespace
-
-TEST(NoiseStrengthSolver, GetCentersTwoBins) {
- aom_noise_strength_solver_t solver;
- aom_noise_strength_solver_init(&solver, 2, 8);
- EXPECT_NEAR(0, aom_noise_strength_solver_get_center(&solver, 0), 1e-5);
- EXPECT_NEAR(255, aom_noise_strength_solver_get_center(&solver, 1), 1e-5);
- aom_noise_strength_solver_free(&solver);
-}
-
-TEST(NoiseStrengthSolver, GetCentersTwoBins10bit) {
- aom_noise_strength_solver_t solver;
- aom_noise_strength_solver_init(&solver, 2, 10);
- EXPECT_NEAR(0, aom_noise_strength_solver_get_center(&solver, 0), 1e-5);
- EXPECT_NEAR(1023, aom_noise_strength_solver_get_center(&solver, 1), 1e-5);
- aom_noise_strength_solver_free(&solver);
-}
-
-TEST(NoiseStrengthSolver, GetCenters256Bins) {
- const int num_bins = 256;
- aom_noise_strength_solver_t solver;
- aom_noise_strength_solver_init(&solver, num_bins, 8);
-
- for (int i = 0; i < 256; ++i) {
- EXPECT_NEAR(i, aom_noise_strength_solver_get_center(&solver, i), 1e-5);
- }
- aom_noise_strength_solver_free(&solver);
-}
-
-// Tests that the noise strength solver returns the identity transform when
-// given identity-like constraints.
-TEST(NoiseStrengthSolver, ObserveIdentity) {
- const int num_bins = 256;
- aom_noise_strength_solver_t solver;
- EXPECT_EQ(1, aom_noise_strength_solver_init(&solver, num_bins, 8));
-
- // We have to add a big more strength to constraints at the boundary to
- // overcome any regularization.
- for (int j = 0; j < 5; ++j) {
- aom_noise_strength_solver_add_measurement(&solver, 0, 0);
- aom_noise_strength_solver_add_measurement(&solver, 255, 255);
- }
- for (int i = 0; i < 256; ++i) {
- aom_noise_strength_solver_add_measurement(&solver, i, i);
- }
- EXPECT_EQ(1, aom_noise_strength_solver_solve(&solver));
- for (int i = 2; i < num_bins - 2; ++i) {
- EXPECT_NEAR(i, solver.eqns.x[i], 0.1);
- }
-
- aom_noise_strength_lut_t lut;
- EXPECT_EQ(1, aom_noise_strength_solver_fit_piecewise(&solver, 2, &lut));
-
- ASSERT_EQ(2, lut.num_points);
- EXPECT_NEAR(0.0, lut.points[0][0], 1e-5);
- EXPECT_NEAR(0.0, lut.points[0][1], 0.5);
- EXPECT_NEAR(255.0, lut.points[1][0], 1e-5);
- EXPECT_NEAR(255.0, lut.points[1][1], 0.5);
-
- aom_noise_strength_lut_free(&lut);
- aom_noise_strength_solver_free(&solver);
-}
-
-TEST(NoiseStrengthSolver, SimplifiesCurve) {
- const int num_bins = 256;
- aom_noise_strength_solver_t solver;
- EXPECT_EQ(1, aom_noise_strength_solver_init(&solver, num_bins, 8));
-
- // Create a parabolic input
- for (int i = 0; i < 256; ++i) {
- const double x = (i - 127.5) / 63.5;
- aom_noise_strength_solver_add_measurement(&solver, i, x * x);
- }
- EXPECT_EQ(1, aom_noise_strength_solver_solve(&solver));
-
- // First try to fit an unconstrained lut
- aom_noise_strength_lut_t lut;
- EXPECT_EQ(1, aom_noise_strength_solver_fit_piecewise(&solver, -1, &lut));
- ASSERT_LE(20, lut.num_points);
- aom_noise_strength_lut_free(&lut);
-
- // Now constrain the maximum number of points
- const int kMaxPoints = 9;
- EXPECT_EQ(1,
- aom_noise_strength_solver_fit_piecewise(&solver, kMaxPoints, &lut));
- ASSERT_EQ(kMaxPoints, lut.num_points);
-
- // Check that the input parabola is still well represented
- EXPECT_NEAR(0.0, lut.points[0][0], 1e-5);
- EXPECT_NEAR(4.0, lut.points[0][1], 0.1);
- for (int i = 1; i < lut.num_points - 1; ++i) {
- const double x = (lut.points[i][0] - 128.) / 64.;
- EXPECT_NEAR(x * x, lut.points[i][1], 0.1);
- }
- EXPECT_NEAR(255.0, lut.points[kMaxPoints - 1][0], 1e-5);
-
- EXPECT_NEAR(4.0, lut.points[kMaxPoints - 1][1], 0.1);
- aom_noise_strength_lut_free(&lut);
- aom_noise_strength_solver_free(&solver);
-}
-
-TEST(NoiseStrengthLut, LutEvalSinglePoint) {
- aom_noise_strength_lut_t lut;
- ASSERT_TRUE(aom_noise_strength_lut_init(&lut, 1));
- ASSERT_EQ(1, lut.num_points);
- lut.points[0][0] = 0;
- lut.points[0][1] = 1;
- EXPECT_EQ(1, aom_noise_strength_lut_eval(&lut, -1));
- EXPECT_EQ(1, aom_noise_strength_lut_eval(&lut, 0));
- EXPECT_EQ(1, aom_noise_strength_lut_eval(&lut, 1));
- aom_noise_strength_lut_free(&lut);
-}
-
-TEST(NoiseStrengthLut, LutEvalMultiPointInterp) {
- const double kEps = 1e-5;
- aom_noise_strength_lut_t lut;
- ASSERT_TRUE(aom_noise_strength_lut_init(&lut, 4));
- ASSERT_EQ(4, lut.num_points);
-
- lut.points[0][0] = 0;
- lut.points[0][1] = 0;
-
- lut.points[1][0] = 1;
- lut.points[1][1] = 1;
-
- lut.points[2][0] = 2;
- lut.points[2][1] = 1;
-
- lut.points[3][0] = 100;
- lut.points[3][1] = 1001;
-
- // Test lower boundary
- EXPECT_EQ(0, aom_noise_strength_lut_eval(&lut, -1));
- EXPECT_EQ(0, aom_noise_strength_lut_eval(&lut, 0));
-
- // Test first part that should be identity
- EXPECT_NEAR(0.25, aom_noise_strength_lut_eval(&lut, 0.25), kEps);
- EXPECT_NEAR(0.75, aom_noise_strength_lut_eval(&lut, 0.75), kEps);
-
- // This is a constant section (should evaluate to 1)
- EXPECT_NEAR(1.0, aom_noise_strength_lut_eval(&lut, 1.25), kEps);
- EXPECT_NEAR(1.0, aom_noise_strength_lut_eval(&lut, 1.75), kEps);
-
- // Test interpolation between to non-zero y coords.
- EXPECT_NEAR(1, aom_noise_strength_lut_eval(&lut, 2), kEps);
- EXPECT_NEAR(251, aom_noise_strength_lut_eval(&lut, 26.5), kEps);
- EXPECT_NEAR(751, aom_noise_strength_lut_eval(&lut, 75.5), kEps);
-
- // Test upper boundary
- EXPECT_EQ(1001, aom_noise_strength_lut_eval(&lut, 100));
- EXPECT_EQ(1001, aom_noise_strength_lut_eval(&lut, 101));
-
- aom_noise_strength_lut_free(&lut);
-}
-
-TEST(NoiseModel, InitSuccessWithValidSquareShape) {
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, 2, 8, 0 };
- aom_noise_model_t model;
-
- EXPECT_TRUE(aom_noise_model_init(&model, params));
-
- const int kNumCoords = 12;
- const int kCoords[][2] = { { -2, -2 }, { -1, -2 }, { 0, -2 }, { 1, -2 },
- { 2, -2 }, { -2, -1 }, { -1, -1 }, { 0, -1 },
- { 1, -1 }, { 2, -1 }, { -2, 0 }, { -1, 0 } };
- EXPECT_EQ(kNumCoords, model.n);
- for (int i = 0; i < kNumCoords; ++i) {
- const int *coord = kCoords[i];
- EXPECT_EQ(coord[0], model.coords[i][0]);
- EXPECT_EQ(coord[1], model.coords[i][1]);
- }
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModel, InitSuccessWithValidDiamondShape) {
- aom_noise_model_t model;
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_DIAMOND, 2, 8, 0 };
- EXPECT_TRUE(aom_noise_model_init(&model, params));
- EXPECT_EQ(6, model.n);
- const int kNumCoords = 6;
- const int kCoords[][2] = { { 0, -2 }, { -1, -1 }, { 0, -1 },
- { 1, -1 }, { -2, 0 }, { -1, 0 } };
- EXPECT_EQ(kNumCoords, model.n);
- for (int i = 0; i < kNumCoords; ++i) {
- const int *coord = kCoords[i];
- EXPECT_EQ(coord[0], model.coords[i][0]);
- EXPECT_EQ(coord[1], model.coords[i][1]);
- }
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModel, InitFailsWithTooLargeLag) {
- aom_noise_model_t model;
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, 10, 8, 0 };
- EXPECT_FALSE(aom_noise_model_init(&model, params));
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModel, InitFailsWithTooSmallLag) {
- aom_noise_model_t model;
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, 0, 8, 0 };
- EXPECT_FALSE(aom_noise_model_init(&model, params));
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModel, InitFailsWithInvalidShape) {
- aom_noise_model_t model;
- aom_noise_model_params_t params = { aom_noise_shape(100), 3, 8, 0 };
- EXPECT_FALSE(aom_noise_model_init(&model, params));
- aom_noise_model_free(&model);
-}
-
-// A container template class to hold a data type and extra arguments.
-// All of these args are bundled into one struct so that we can use
-// parameterized tests on combinations of supported data types
-// (uint8_t and uint16_t) and bit depths (8, 10, 12).
-template <typename T, int bit_depth, bool use_highbd>
-struct BitDepthParams {
- typedef T data_type_t;
- static const int kBitDepth = bit_depth;
- static const bool kUseHighBD = use_highbd;
-};
-
-template <typename T>
-class FlatBlockEstimatorTest : public ::testing::Test, public T {
- public:
- virtual void SetUp() { random_.Reset(171); }
- typedef std::vector<typename T::data_type_t> VecType;
- VecType data_;
- libaom_test::ACMRandom random_;
-};
-
-TYPED_TEST_CASE_P(FlatBlockEstimatorTest);
-
-TYPED_TEST_P(FlatBlockEstimatorTest, ExtractBlock) {
- const int kBlockSize = 16;
- aom_flat_block_finder_t flat_block_finder;
- ASSERT_EQ(1, aom_flat_block_finder_init(&flat_block_finder, kBlockSize,
- this->kBitDepth, this->kUseHighBD));
- const double normalization = flat_block_finder.normalization;
-
- // Test with an image of more than one block.
- const int h = 2 * kBlockSize;
- const int w = 2 * kBlockSize;
- const int stride = 2 * kBlockSize;
- this->data_.resize(h * stride, 128);
-
- // Set up the (0,0) block to be a plane and the (0,1) block to be a
- // checkerboard
- const int shift = this->kBitDepth - 8;
- for (int y = 0; y < kBlockSize; ++y) {
- for (int x = 0; x < kBlockSize; ++x) {
- this->data_[y * stride + x] = (-y + x + 128) << shift;
- this->data_[y * stride + x + kBlockSize] =
- ((x % 2 + y % 2) % 2 ? 128 - 20 : 128 + 20) << shift;
- }
- }
- std::vector<double> block(kBlockSize * kBlockSize, 1);
- std::vector<double> plane(kBlockSize * kBlockSize, 1);
-
- // The block data should be a constant (zero) and the rest of the plane
- // trend is covered in the plane data.
- aom_flat_block_finder_extract_block(&flat_block_finder,
- (uint8_t *)&this->data_[0], w, h, stride,
- 0, 0, &plane[0], &block[0]);
- for (int y = 0; y < kBlockSize; ++y) {
- for (int x = 0; x < kBlockSize; ++x) {
- EXPECT_NEAR(0, block[y * kBlockSize + x], 1e-5);
- EXPECT_NEAR((double)(this->data_[y * stride + x]) / normalization,
- plane[y * kBlockSize + x], 1e-5);
- }
- }
-
- // The plane trend is a constant, and the block is a zero mean checkerboard.
- aom_flat_block_finder_extract_block(&flat_block_finder,
- (uint8_t *)&this->data_[0], w, h, stride,
- kBlockSize, 0, &plane[0], &block[0]);
- const int mid = 128 << shift;
- for (int y = 0; y < kBlockSize; ++y) {
- for (int x = 0; x < kBlockSize; ++x) {
- EXPECT_NEAR(((double)this->data_[y * stride + x + kBlockSize] - mid) /
- normalization,
- block[y * kBlockSize + x], 1e-5);
- EXPECT_NEAR(mid / normalization, plane[y * kBlockSize + x], 1e-5);
- }
- }
- aom_flat_block_finder_free(&flat_block_finder);
-}
-
-TYPED_TEST_P(FlatBlockEstimatorTest, FindFlatBlocks) {
- const int kBlockSize = 32;
- aom_flat_block_finder_t flat_block_finder;
- ASSERT_EQ(1, aom_flat_block_finder_init(&flat_block_finder, kBlockSize,
- this->kBitDepth, this->kUseHighBD));
-
- const int num_blocks_w = 8;
- const int h = kBlockSize;
- const int w = kBlockSize * num_blocks_w;
- const int stride = w;
- this->data_.resize(h * stride, 128);
- std::vector<uint8_t> flat_blocks(num_blocks_w, 0);
-
- const int shift = this->kBitDepth - 8;
- for (int y = 0; y < kBlockSize; ++y) {
- for (int x = 0; x < kBlockSize; ++x) {
- // Block 0 (not flat): constant doesn't have enough variance to qualify
- this->data_[y * stride + x + 0 * kBlockSize] = 128 << shift;
-
- // Block 1 (not flat): too high of variance is hard to validate as flat
- this->data_[y * stride + x + 1 * kBlockSize] =
- ((uint8_t)(128 + randn(&this->random_, 5))) << shift;
-
- // Block 2 (flat): slight checkerboard added to constant
- const int check = (x % 2 + y % 2) % 2 ? -2 : 2;
- this->data_[y * stride + x + 2 * kBlockSize] = (128 + check) << shift;
-
- // Block 3 (flat): planar block with checkerboard pattern is also flat
- this->data_[y * stride + x + 3 * kBlockSize] =
- (y * 2 - x / 2 + 128 + check) << shift;
-
- // Block 4 (flat): gaussian random with standard deviation 1.
- this->data_[y * stride + x + 4 * kBlockSize] =
- ((uint8_t)(randn(&this->random_, 1) + x + 128.0)) << shift;
-
- // Block 5 (flat): gaussian random with standard deviation 2.
- this->data_[y * stride + x + 5 * kBlockSize] =
- ((uint8_t)(randn(&this->random_, 2) + y + 128.0)) << shift;
-
- // Block 6 (not flat): too high of directional gradient.
- const int strong_edge = x > kBlockSize / 2 ? 64 : 0;
- this->data_[y * stride + x + 6 * kBlockSize] =
- ((uint8_t)(randn(&this->random_, 1) + strong_edge + 128.0)) << shift;
-
- // Block 7 (not flat): too high gradient.
- const int big_check = ((x >> 2) % 2 + (y >> 2) % 2) % 2 ? -16 : 16;
- this->data_[y * stride + x + 7 * kBlockSize] =
- ((uint8_t)(randn(&this->random_, 1) + big_check + 128.0)) << shift;
- }
- }
-
- EXPECT_EQ(4, aom_flat_block_finder_run(&flat_block_finder,
- (uint8_t *)&this->data_[0], w, h,
- stride, &flat_blocks[0]));
-
- // First two blocks are not flat
- EXPECT_EQ(0, flat_blocks[0]);
- EXPECT_EQ(0, flat_blocks[1]);
-
- // Next 4 blocks are flat.
- EXPECT_EQ(255, flat_blocks[2]);
- EXPECT_EQ(255, flat_blocks[3]);
- EXPECT_EQ(255, flat_blocks[4]);
- EXPECT_EQ(255, flat_blocks[5]);
-
- // Last 2 are not flat by threshold
- EXPECT_EQ(0, flat_blocks[6]);
- EXPECT_EQ(0, flat_blocks[7]);
-
- // Add the noise from non-flat block 1 to every block.
- for (int y = 0; y < kBlockSize; ++y) {
- for (int x = 0; x < kBlockSize * num_blocks_w; ++x) {
- this->data_[y * stride + x] +=
- (this->data_[y * stride + x % kBlockSize + kBlockSize] -
- (128 << shift));
- }
- }
- // Now the scored selection will pick the one that is most likely flat (block
- // 0)
- EXPECT_EQ(1, aom_flat_block_finder_run(&flat_block_finder,
- (uint8_t *)&this->data_[0], w, h,
- stride, &flat_blocks[0]));
- EXPECT_EQ(1, flat_blocks[0]);
- EXPECT_EQ(0, flat_blocks[1]);
- EXPECT_EQ(0, flat_blocks[2]);
- EXPECT_EQ(0, flat_blocks[3]);
- EXPECT_EQ(0, flat_blocks[4]);
- EXPECT_EQ(0, flat_blocks[5]);
- EXPECT_EQ(0, flat_blocks[6]);
- EXPECT_EQ(0, flat_blocks[7]);
-
- aom_flat_block_finder_free(&flat_block_finder);
-}
-
-REGISTER_TYPED_TEST_CASE_P(FlatBlockEstimatorTest, ExtractBlock,
- FindFlatBlocks);
-
-typedef ::testing::Types<BitDepthParams<uint8_t, 8, false>, // lowbd
- BitDepthParams<uint16_t, 8, true>, // lowbd in 16-bit
- BitDepthParams<uint16_t, 10, true>, // highbd data
- BitDepthParams<uint16_t, 12, true> >
- AllBitDepthParams;
-INSTANTIATE_TYPED_TEST_CASE_P(FlatBlockInstatiation, FlatBlockEstimatorTest,
- AllBitDepthParams);
-
-template <typename T>
-class NoiseModelUpdateTest : public ::testing::Test, public T {
- public:
- static const int kWidth = 128;
- static const int kHeight = 128;
- static const int kBlockSize = 16;
- static const int kNumBlocksX = kWidth / kBlockSize;
- static const int kNumBlocksY = kHeight / kBlockSize;
-
- virtual void SetUp() {
- const aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, 3,
- T::kBitDepth, T::kUseHighBD };
- ASSERT_TRUE(aom_noise_model_init(&model_, params));
-
- random_.Reset(100171);
-
- data_.resize(kWidth * kHeight * 3);
- denoised_.resize(kWidth * kHeight * 3);
- noise_.resize(kWidth * kHeight * 3);
- renoise_.resize(kWidth * kHeight);
- flat_blocks_.resize(kNumBlocksX * kNumBlocksY);
-
- for (int c = 0, offset = 0; c < 3; ++c, offset += kWidth * kHeight) {
- data_ptr_[c] = &data_[offset];
- noise_ptr_[c] = &noise_[offset];
- denoised_ptr_[c] = &denoised_[offset];
- strides_[c] = kWidth;
-
- data_ptr_raw_[c] = (uint8_t *)&data_[offset];
- denoised_ptr_raw_[c] = (uint8_t *)&denoised_[offset];
- }
- chroma_sub_[0] = 0;
- chroma_sub_[1] = 0;
- }
-
- int NoiseModelUpdate(int block_size = kBlockSize) {
- return aom_noise_model_update(&model_, data_ptr_raw_, denoised_ptr_raw_,
- kWidth, kHeight, strides_, chroma_sub_,
- &flat_blocks_[0], block_size);
- }
-
- void TearDown() { aom_noise_model_free(&model_); }
-
- protected:
- aom_noise_model_t model_;
- std::vector<typename T::data_type_t> data_;
- std::vector<typename T::data_type_t> denoised_;
-
- std::vector<double> noise_;
- std::vector<double> renoise_;
- std::vector<uint8_t> flat_blocks_;
-
- typename T::data_type_t *data_ptr_[3];
- typename T::data_type_t *denoised_ptr_[3];
-
- double *noise_ptr_[3];
- int strides_[3];
- int chroma_sub_[2];
- libaom_test::ACMRandom random_;
-
- private:
- uint8_t *data_ptr_raw_[3];
- uint8_t *denoised_ptr_raw_[3];
-};
-
-TYPED_TEST_CASE_P(NoiseModelUpdateTest);
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateFailsNoFlatBlocks) {
- EXPECT_EQ(AOM_NOISE_STATUS_INSUFFICIENT_FLAT_BLOCKS,
- this->NoiseModelUpdate());
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateSuccessForZeroNoiseAllFlat) {
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- this->denoised_.assign(this->denoised_.size(), 128);
- this->data_.assign(this->denoised_.size(), 128);
- EXPECT_EQ(AOM_NOISE_STATUS_INTERNAL_ERROR, this->NoiseModelUpdate());
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateFailsBlockSizeTooSmall) {
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- this->denoised_.assign(this->denoised_.size(), 128);
- this->data_.assign(this->denoised_.size(), 128);
- EXPECT_EQ(AOM_NOISE_STATUS_INVALID_ARGUMENT,
- this->NoiseModelUpdate(6 /* block_size=6 is too small*/));
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateSuccessForWhiteRandomNoise) {
- aom_noise_model_t &model = this->model_;
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
-
- const int shift = this->kBitDepth - 8;
- for (int y = 0; y < kHeight; ++y) {
- for (int x = 0; x < kWidth; ++x) {
- this->data_ptr_[0][y * kWidth + x] =
- int(64 + y + randn(&this->random_, 1)) << shift;
- this->denoised_ptr_[0][y * kWidth + x] = (64 + y) << shift;
- // Make the chroma planes completely correlated with the Y plane
- for (int c = 1; c < 3; ++c) {
- this->data_ptr_[c][y * kWidth + x] = this->data_ptr_[0][y * kWidth + x];
- this->denoised_ptr_[c][y * kWidth + x] =
- this->denoised_ptr_[0][y * kWidth + x];
- }
- }
- }
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- const double kCoeffEps = 0.075;
- const int n = model.n;
- for (int c = 0; c < 3; ++c) {
- for (int i = 0; i < n; ++i) {
- EXPECT_NEAR(0, model.latest_state[c].eqns.x[i], kCoeffEps);
- EXPECT_NEAR(0, model.combined_state[c].eqns.x[i], kCoeffEps);
- }
- // The second and third channels are highly correlated with the first.
- if (c > 0) {
- ASSERT_EQ(n + 1, model.latest_state[c].eqns.n);
- ASSERT_EQ(n + 1, model.combined_state[c].eqns.n);
-
- EXPECT_NEAR(1, model.latest_state[c].eqns.x[n], kCoeffEps);
- EXPECT_NEAR(1, model.combined_state[c].eqns.x[n], kCoeffEps);
- }
- }
-
- // The fitted noise strength should be close to the standard deviation
- // for all intensity bins.
- const double kStdEps = 0.1;
- const double normalize = 1 << shift;
-
- for (int i = 0; i < model.latest_state[0].strength_solver.eqns.n; ++i) {
- EXPECT_NEAR(1.0,
- model.latest_state[0].strength_solver.eqns.x[i] / normalize,
- kStdEps);
- EXPECT_NEAR(1.0,
- model.combined_state[0].strength_solver.eqns.x[i] / normalize,
- kStdEps);
- }
-
- aom_noise_strength_lut_t lut;
- aom_noise_strength_solver_fit_piecewise(
- &model.latest_state[0].strength_solver, -1, &lut);
- ASSERT_EQ(2, lut.num_points);
- EXPECT_NEAR(0.0, lut.points[0][0], 1e-5);
- EXPECT_NEAR(1.0, lut.points[0][1] / normalize, kStdEps);
- EXPECT_NEAR((1 << this->kBitDepth) - 1, lut.points[1][0], 1e-5);
- EXPECT_NEAR(1.0, lut.points[1][1] / normalize, kStdEps);
- aom_noise_strength_lut_free(&lut);
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateSuccessForScaledWhiteNoise) {
- aom_noise_model_t &model = this->model_;
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
-
- const double kCoeffEps = 0.055;
- const double kLowStd = 1;
- const double kHighStd = 4;
- const int shift = this->kBitDepth - 8;
- for (int y = 0; y < kHeight; ++y) {
- for (int x = 0; x < kWidth; ++x) {
- for (int c = 0; c < 3; ++c) {
- // The image data is bimodal:
- // Bottom half has low intensity and low noise strength
- // Top half has high intensity and high noise strength
- const int avg = (y < kHeight / 2) ? 4 : 245;
- const double std = (y < kHeight / 2) ? kLowStd : kHighStd;
- this->data_ptr_[c][y * kWidth + x] =
- ((uint8_t)std::min((int)255,
- (int)(2 + avg + randn(&this->random_, std))))
- << shift;
- this->denoised_ptr_[c][y * kWidth + x] = (2 + avg) << shift;
- }
- }
- }
- // Label all blocks as flat for the update
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- const int n = model.n;
- // The noise is uncorrelated spatially and with the y channel.
- // All coefficients should be reasonably close to zero.
- for (int c = 0; c < 3; ++c) {
- for (int i = 0; i < n; ++i) {
- EXPECT_NEAR(0, model.latest_state[c].eqns.x[i], kCoeffEps);
- EXPECT_NEAR(0, model.combined_state[c].eqns.x[i], kCoeffEps);
- }
- if (c > 0) {
- ASSERT_EQ(n + 1, model.latest_state[c].eqns.n);
- ASSERT_EQ(n + 1, model.combined_state[c].eqns.n);
-
- // The correlation to the y channel should be low (near zero)
- EXPECT_NEAR(0, model.latest_state[c].eqns.x[n], kCoeffEps);
- EXPECT_NEAR(0, model.combined_state[c].eqns.x[n], kCoeffEps);
- }
- }
-
- // Noise strength should vary between kLowStd and kHighStd.
- const double kStdEps = 0.15;
- // We have to normalize fitted standard deviation based on bit depth.
- const double normalize = (1 << shift);
-
- ASSERT_EQ(20, model.latest_state[0].strength_solver.eqns.n);
- for (int i = 0; i < model.latest_state[0].strength_solver.eqns.n; ++i) {
- const double a = i / 19.0;
- const double expected = (kLowStd * (1.0 - a) + kHighStd * a);
- EXPECT_NEAR(expected,
- model.latest_state[0].strength_solver.eqns.x[i] / normalize,
- kStdEps);
- EXPECT_NEAR(expected,
- model.combined_state[0].strength_solver.eqns.x[i] / normalize,
- kStdEps);
- }
-
- // If we fit a piecewise linear model, there should be two points:
- // one near kLowStd at 0, and the other near kHighStd and 255.
- aom_noise_strength_lut_t lut;
- aom_noise_strength_solver_fit_piecewise(
- &model.latest_state[0].strength_solver, 2, &lut);
- ASSERT_EQ(2, lut.num_points);
- EXPECT_NEAR(0, lut.points[0][0], 1e-4);
- EXPECT_NEAR(kLowStd, lut.points[0][1] / normalize, kStdEps);
- EXPECT_NEAR((1 << this->kBitDepth) - 1, lut.points[1][0], 1e-5);
- EXPECT_NEAR(kHighStd, lut.points[1][1] / normalize, kStdEps);
- aom_noise_strength_lut_free(&lut);
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, UpdateSuccessForCorrelatedNoise) {
- aom_noise_model_t &model = this->model_;
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
- const int kNumCoeffs = 24;
- const double kStd = 4;
- const double kStdEps = 0.3;
- const double kCoeffEps = 0.065;
- // Use different coefficients for each channel
- const double kCoeffs[3][24] = {
- { 0.02884, -0.03356, 0.00633, 0.01757, 0.02849, -0.04620,
- 0.02833, -0.07178, 0.07076, -0.11603, -0.10413, -0.16571,
- 0.05158, -0.07969, 0.02640, -0.07191, 0.02530, 0.41968,
- 0.21450, -0.00702, -0.01401, -0.03676, -0.08713, 0.44196 },
- { 0.00269, -0.01291, -0.01513, 0.07234, 0.03208, 0.00477,
- 0.00226, -0.00254, 0.03533, 0.12841, -0.25970, -0.06336,
- 0.05238, -0.00845, -0.03118, 0.09043, -0.36558, 0.48903,
- 0.00595, -0.11938, 0.02106, 0.095956, -0.350139, 0.59305 },
- { -0.00643, -0.01080, -0.01466, 0.06951, 0.03707, -0.00482,
- 0.00817, -0.00909, 0.02949, 0.12181, -0.25210, -0.07886,
- 0.06083, -0.01210, -0.03108, 0.08944, -0.35875, 0.49150,
- 0.00415, -0.12905, 0.02870, 0.09740, -0.34610, 0.58824 },
- };
-
- ASSERT_EQ(model.n, kNumCoeffs);
- this->chroma_sub_[0] = this->chroma_sub_[1] = 1;
-
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
-
- // Add different noise onto each plane
- const int shift = this->kBitDepth - 8;
- for (int c = 0; c < 3; ++c) {
- noise_synth(&this->random_, model.params.lag, model.n, model.coords,
- kCoeffs[c], this->noise_ptr_[c], kWidth, kHeight);
- const int x_shift = c > 0 ? this->chroma_sub_[0] : 0;
- const int y_shift = c > 0 ? this->chroma_sub_[1] : 0;
- for (int y = 0; y < (kHeight >> y_shift); ++y) {
- for (int x = 0; x < (kWidth >> x_shift); ++x) {
- const uint8_t value = 64 + x / 2 + y / 4;
- this->data_ptr_[c][y * kWidth + x] =
- (uint8_t(value + this->noise_ptr_[c][y * kWidth + x] * kStd))
- << shift;
- this->denoised_ptr_[c][y * kWidth + x] = value << shift;
- }
- }
- }
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- // For the Y plane, the solved coefficients should be close to the original
- const int n = model.n;
- for (int c = 0; c < 3; ++c) {
- for (int i = 0; i < n; ++i) {
- EXPECT_NEAR(kCoeffs[c][i], model.latest_state[c].eqns.x[i], kCoeffEps);
- EXPECT_NEAR(kCoeffs[c][i], model.combined_state[c].eqns.x[i], kCoeffEps);
- }
- // The chroma planes should be uncorrelated with the luma plane
- if (c > 0) {
- EXPECT_NEAR(0, model.latest_state[c].eqns.x[n], kCoeffEps);
- EXPECT_NEAR(0, model.combined_state[c].eqns.x[n], kCoeffEps);
- }
- // Correlation between the coefficient vector and the fitted coefficients
- // should be close to 1.
- EXPECT_LT(0.98, aom_normalized_cross_correlation(
- model.latest_state[c].eqns.x, kCoeffs[c], kNumCoeffs));
-
- noise_synth(&this->random_, model.params.lag, model.n, model.coords,
- model.latest_state[c].eqns.x, &this->renoise_[0], kWidth,
- kHeight);
-
- EXPECT_TRUE(aom_noise_data_validate(&this->renoise_[0], kWidth, kHeight));
- }
-
- // Check fitted noise strength
- const double normalize = 1 << shift;
- for (int c = 0; c < 3; ++c) {
- for (int i = 0; i < model.latest_state[c].strength_solver.eqns.n; ++i) {
- EXPECT_NEAR(kStd,
- model.latest_state[c].strength_solver.eqns.x[i] / normalize,
- kStdEps);
- }
- }
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest,
- NoiseStrengthChangeSignalsDifferentNoiseType) {
- aom_noise_model_t &model = this->model_;
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
- const int kBlockSize = this->kBlockSize;
- // Create a gradient image with std = 2 uncorrelated noise
- const double kStd = 2;
- const int shift = this->kBitDepth - 8;
-
- for (int i = 0; i < kWidth * kHeight; ++i) {
- const uint8_t val = (i % kWidth) < kWidth / 2 ? 64 : 192;
- for (int c = 0; c < 3; ++c) {
- this->noise_ptr_[c][i] = randn(&this->random_, 1);
- this->data_ptr_[c][i] = ((uint8_t)(this->noise_ptr_[c][i] * kStd + val))
- << shift;
- this->denoised_ptr_[c][i] = val << shift;
- }
- }
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- const int kNumBlocks = kWidth * kHeight / kBlockSize / kBlockSize;
- EXPECT_EQ(kNumBlocks, model.latest_state[0].strength_solver.num_equations);
- EXPECT_EQ(kNumBlocks, model.latest_state[1].strength_solver.num_equations);
- EXPECT_EQ(kNumBlocks, model.latest_state[2].strength_solver.num_equations);
- EXPECT_EQ(kNumBlocks, model.combined_state[0].strength_solver.num_equations);
- EXPECT_EQ(kNumBlocks, model.combined_state[1].strength_solver.num_equations);
- EXPECT_EQ(kNumBlocks, model.combined_state[2].strength_solver.num_equations);
-
- // Bump up noise by an insignificant amount
- for (int i = 0; i < kWidth * kHeight; ++i) {
- const uint8_t val = (i % kWidth) < kWidth / 2 ? 64 : 192;
- this->data_ptr_[0][i] =
- ((uint8_t)(this->noise_ptr_[0][i] * (kStd + 0.085) + val)) << shift;
- }
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- const double kARGainTolerance = 0.02;
- for (int c = 0; c < 3; ++c) {
- EXPECT_EQ(kNumBlocks, model.latest_state[c].strength_solver.num_equations);
- EXPECT_EQ(15250, model.latest_state[c].num_observations);
- EXPECT_NEAR(1, model.latest_state[c].ar_gain, kARGainTolerance);
-
- EXPECT_EQ(2 * kNumBlocks,
- model.combined_state[c].strength_solver.num_equations);
- EXPECT_EQ(2 * 15250, model.combined_state[c].num_observations);
- EXPECT_NEAR(1, model.combined_state[c].ar_gain, kARGainTolerance);
- }
-
- // Bump up the noise strength on half the image for one channel by a
- // significant amount.
- for (int i = 0; i < kWidth * kHeight; ++i) {
- const uint8_t val = (i % kWidth) < kWidth / 2 ? 64 : 128;
- if (i % kWidth < kWidth / 2) {
- this->data_ptr_[0][i] =
- ((uint8_t)(randn(&this->random_, kStd + 0.5) + val)) << shift;
- }
- }
- EXPECT_EQ(AOM_NOISE_STATUS_DIFFERENT_NOISE_TYPE, this->NoiseModelUpdate());
-
- // Since we didn't update the combined state, it should still be at 2 *
- // num_blocks
- EXPECT_EQ(kNumBlocks, model.latest_state[0].strength_solver.num_equations);
- EXPECT_EQ(2 * kNumBlocks,
- model.combined_state[0].strength_solver.num_equations);
-
- // In normal operation, the "latest" estimate can be saved to the "combined"
- // state for continued updates.
- aom_noise_model_save_latest(&model);
- for (int c = 0; c < 3; ++c) {
- EXPECT_EQ(kNumBlocks, model.latest_state[c].strength_solver.num_equations);
- EXPECT_EQ(15250, model.latest_state[c].num_observations);
- EXPECT_NEAR(1, model.latest_state[c].ar_gain, kARGainTolerance);
-
- EXPECT_EQ(kNumBlocks,
- model.combined_state[c].strength_solver.num_equations);
- EXPECT_EQ(15250, model.combined_state[c].num_observations);
- EXPECT_NEAR(1, model.combined_state[c].ar_gain, kARGainTolerance);
- }
-}
-
-TYPED_TEST_P(NoiseModelUpdateTest, NoiseCoeffsSignalsDifferentNoiseType) {
- aom_noise_model_t &model = this->model_;
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
- const double kCoeffs[2][24] = {
- { 0.02884, -0.03356, 0.00633, 0.01757, 0.02849, -0.04620,
- 0.02833, -0.07178, 0.07076, -0.11603, -0.10413, -0.16571,
- 0.05158, -0.07969, 0.02640, -0.07191, 0.02530, 0.41968,
- 0.21450, -0.00702, -0.01401, -0.03676, -0.08713, 0.44196 },
- { 0.00269, -0.01291, -0.01513, 0.07234, 0.03208, 0.00477,
- 0.00226, -0.00254, 0.03533, 0.12841, -0.25970, -0.06336,
- 0.05238, -0.00845, -0.03118, 0.09043, -0.36558, 0.48903,
- 0.00595, -0.11938, 0.02106, 0.095956, -0.350139, 0.59305 }
- };
-
- noise_synth(&this->random_, model.params.lag, model.n, model.coords,
- kCoeffs[0], this->noise_ptr_[0], kWidth, kHeight);
- for (int i = 0; i < kWidth * kHeight; ++i) {
- this->data_ptr_[0][i] = (uint8_t)(128 + this->noise_ptr_[0][i]);
- }
- this->flat_blocks_.assign(this->flat_blocks_.size(), 1);
- EXPECT_EQ(AOM_NOISE_STATUS_OK, this->NoiseModelUpdate());
-
- // Now try with the second set of AR coefficients
- noise_synth(&this->random_, model.params.lag, model.n, model.coords,
- kCoeffs[1], this->noise_ptr_[0], kWidth, kHeight);
- for (int i = 0; i < kWidth * kHeight; ++i) {
- this->data_ptr_[0][i] = (uint8_t)(128 + this->noise_ptr_[0][i]);
- }
- EXPECT_EQ(AOM_NOISE_STATUS_DIFFERENT_NOISE_TYPE, this->NoiseModelUpdate());
-}
-REGISTER_TYPED_TEST_CASE_P(NoiseModelUpdateTest, UpdateFailsNoFlatBlocks,
- UpdateSuccessForZeroNoiseAllFlat,
- UpdateFailsBlockSizeTooSmall,
- UpdateSuccessForWhiteRandomNoise,
- UpdateSuccessForScaledWhiteNoise,
- UpdateSuccessForCorrelatedNoise,
- NoiseStrengthChangeSignalsDifferentNoiseType,
- NoiseCoeffsSignalsDifferentNoiseType);
-
-INSTANTIATE_TYPED_TEST_CASE_P(NoiseModelUpdateTestInstatiation,
- NoiseModelUpdateTest, AllBitDepthParams);
-
-TEST(NoiseModelGetGrainParameters, TestLagSize) {
- aom_film_grain_t film_grain;
- for (int lag = 1; lag <= 3; ++lag) {
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, lag, 8, 0 };
- aom_noise_model_t model;
- EXPECT_TRUE(aom_noise_model_init(&model, params));
- EXPECT_TRUE(aom_noise_model_get_grain_parameters(&model, &film_grain));
- EXPECT_EQ(lag, film_grain.ar_coeff_lag);
- aom_noise_model_free(&model);
- }
-
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, 4, 8, 0 };
- aom_noise_model_t model;
- EXPECT_TRUE(aom_noise_model_init(&model, params));
- EXPECT_FALSE(aom_noise_model_get_grain_parameters(&model, &film_grain));
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModelGetGrainParameters, TestARCoeffShiftBounds) {
- struct TestCase {
- double max_input_value;
- int expected_ar_coeff_shift;
- int expected_value;
- };
- const int lag = 1;
- const int kNumTestCases = 19;
- const TestCase test_cases[] = {
- // Test cases for ar_coeff_shift = 9
- { 0, 9, 0 },
- { 0.125, 9, 64 },
- { -0.125, 9, -64 },
- { 0.2499, 9, 127 },
- { -0.25, 9, -128 },
- // Test cases for ar_coeff_shift = 8
- { 0.25, 8, 64 },
- { -0.2501, 8, -64 },
- { 0.499, 8, 127 },
- { -0.5, 8, -128 },
- // Test cases for ar_coeff_shift = 7
- { 0.5, 7, 64 },
- { -0.5001, 7, -64 },
- { 0.999, 7, 127 },
- { -1, 7, -128 },
- // Test cases for ar_coeff_shift = 6
- { 1.0, 6, 64 },
- { -1.0001, 6, -64 },
- { 2.0, 6, 127 },
- { -2.0, 6, -128 },
- { 4, 6, 127 },
- { -4, 6, -128 },
- };
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, lag, 8, 0 };
- aom_noise_model_t model;
- EXPECT_TRUE(aom_noise_model_init(&model, params));
-
- for (int i = 0; i < kNumTestCases; ++i) {
- const TestCase &test_case = test_cases[i];
- model.combined_state[0].eqns.x[0] = test_case.max_input_value;
-
- aom_film_grain_t film_grain;
- EXPECT_TRUE(aom_noise_model_get_grain_parameters(&model, &film_grain));
- EXPECT_EQ(1, film_grain.ar_coeff_lag);
- EXPECT_EQ(test_case.expected_ar_coeff_shift, film_grain.ar_coeff_shift);
- EXPECT_EQ(test_case.expected_value, film_grain.ar_coeffs_y[0]);
- }
- aom_noise_model_free(&model);
-}
-
-TEST(NoiseModelGetGrainParameters, TestNoiseStrengthShiftBounds) {
- struct TestCase {
- double max_input_value;
- int expected_scaling_shift;
- int expected_value;
- };
- const int kNumTestCases = 10;
- const TestCase test_cases[] = {
- { 0, 11, 0 }, { 1, 11, 64 }, { 2, 11, 128 }, { 3.99, 11, 255 },
- { 4, 10, 128 }, { 7.99, 10, 255 }, { 8, 9, 128 }, { 16, 8, 128 },
- { 31.99, 8, 255 }, { 64, 8, 255 }, // clipped
- };
- const int lag = 1;
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, lag, 8, 0 };
- aom_noise_model_t model;
- EXPECT_TRUE(aom_noise_model_init(&model, params));
-
- for (int i = 0; i < kNumTestCases; ++i) {
- const TestCase &test_case = test_cases[i];
- aom_equation_system_t &eqns = model.combined_state[0].strength_solver.eqns;
- // Set the fitted scale parameters to be a constant value.
- for (int j = 0; j < eqns.n; ++j) {
- eqns.x[j] = test_case.max_input_value;
- }
- aom_film_grain_t film_grain;
- EXPECT_TRUE(aom_noise_model_get_grain_parameters(&model, &film_grain));
- // We expect a single constant segemnt
- EXPECT_EQ(test_case.expected_scaling_shift, film_grain.scaling_shift);
- EXPECT_EQ(test_case.expected_value, film_grain.scaling_points_y[0][1]);
- EXPECT_EQ(test_case.expected_value, film_grain.scaling_points_y[1][1]);
- }
- aom_noise_model_free(&model);
-}
-
-// The AR coefficients are the same inputs used to generate "Test 2" in the test
-// vectors
-TEST(NoiseModelGetGrainParameters, GetGrainParametersReal) {
- const double kInputCoeffsY[] = { 0.0315, 0.0073, 0.0218, 0.00235, 0.00511,
- -0.0222, 0.0627, -0.022, 0.05575, -0.1816,
- 0.0107, -0.1966, 0.00065, -0.0809, 0.04934,
- -0.1349, -0.0352, 0.41772, 0.27973, 0.04207,
- -0.0429, -0.1372, 0.06193, 0.52032 };
- const double kInputCoeffsCB[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5 };
- const double kInputCoeffsCR[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5 };
- const int kExpectedARCoeffsY[] = { 4, 1, 3, 0, 1, -3, 8, -3,
- 7, -23, 1, -25, 0, -10, 6, -17,
- -5, 53, 36, 5, -5, -18, 8, 67 };
- const int kExpectedARCoeffsCB[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84 };
- const int kExpectedARCoeffsCR[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126 };
- // Scaling function is initialized analytically with a sqrt function.
- const int kNumScalingPointsY = 12;
- const int kExpectedScalingPointsY[][2] = {
- { 0, 0 }, { 13, 44 }, { 27, 62 }, { 40, 76 },
- { 54, 88 }, { 67, 98 }, { 94, 117 }, { 121, 132 },
- { 148, 146 }, { 174, 159 }, { 201, 171 }, { 255, 192 },
- };
-
- const int lag = 3;
- aom_noise_model_params_t params = { AOM_NOISE_SHAPE_SQUARE, lag, 8, 0 };
- aom_noise_model_t model;
- EXPECT_TRUE(aom_noise_model_init(&model, params));
-
- // Setup the AR coeffs
- memcpy(model.combined_state[0].eqns.x, kInputCoeffsY, sizeof(kInputCoeffsY));
- memcpy(model.combined_state[1].eqns.x, kInputCoeffsCB,
- sizeof(kInputCoeffsCB));
- memcpy(model.combined_state[2].eqns.x, kInputCoeffsCR,
- sizeof(kInputCoeffsCR));
- for (int i = 0; i < model.combined_state[0].strength_solver.num_bins; ++i) {
- const double x =
- ((double)i) / (model.combined_state[0].strength_solver.num_bins - 1.0);
- model.combined_state[0].strength_solver.eqns.x[i] = 6 * sqrt(x);
- model.combined_state[1].strength_solver.eqns.x[i] = 3;
- model.combined_state[2].strength_solver.eqns.x[i] = 2;
-
- // Inject some observations into the strength solver, as during film grain
- // parameter extraction an estimate of the average strength will be used to
- // adjust correlation.
- const int n = model.combined_state[0].strength_solver.num_bins;
- for (int j = 0; j < model.combined_state[0].strength_solver.num_bins; ++j) {
- model.combined_state[0].strength_solver.eqns.A[i * n + j] = 1;
- model.combined_state[1].strength_solver.eqns.A[i * n + j] = 1;
- model.combined_state[2].strength_solver.eqns.A[i * n + j] = 1;
- }
- }
-
- aom_film_grain_t film_grain;
- EXPECT_TRUE(aom_noise_model_get_grain_parameters(&model, &film_grain));
- EXPECT_EQ(lag, film_grain.ar_coeff_lag);
- EXPECT_EQ(3, film_grain.ar_coeff_lag);
- EXPECT_EQ(7, film_grain.ar_coeff_shift);
- EXPECT_EQ(10, film_grain.scaling_shift);
- EXPECT_EQ(kNumScalingPointsY, film_grain.num_y_points);
- EXPECT_EQ(1, film_grain.update_parameters);
- EXPECT_EQ(1, film_grain.apply_grain);
-
- const int kNumARCoeffs = 24;
- for (int i = 0; i < kNumARCoeffs; ++i) {
- EXPECT_EQ(kExpectedARCoeffsY[i], film_grain.ar_coeffs_y[i]);
- }
- for (int i = 0; i < kNumARCoeffs + 1; ++i) {
- EXPECT_EQ(kExpectedARCoeffsCB[i], film_grain.ar_coeffs_cb[i]);
- }
- for (int i = 0; i < kNumARCoeffs + 1; ++i) {
- EXPECT_EQ(kExpectedARCoeffsCR[i], film_grain.ar_coeffs_cr[i]);
- }
- for (int i = 0; i < kNumScalingPointsY; ++i) {
- EXPECT_EQ(kExpectedScalingPointsY[i][0], film_grain.scaling_points_y[i][0]);
- EXPECT_EQ(kExpectedScalingPointsY[i][1], film_grain.scaling_points_y[i][1]);
- }
-
- // CB strength should just be a piecewise segment
- EXPECT_EQ(2, film_grain.num_cb_points);
- EXPECT_EQ(0, film_grain.scaling_points_cb[0][0]);
- EXPECT_EQ(255, film_grain.scaling_points_cb[1][0]);
- EXPECT_EQ(96, film_grain.scaling_points_cb[0][1]);
- EXPECT_EQ(96, film_grain.scaling_points_cb[1][1]);
-
- // CR strength should just be a piecewise segment
- EXPECT_EQ(2, film_grain.num_cr_points);
- EXPECT_EQ(0, film_grain.scaling_points_cr[0][0]);
- EXPECT_EQ(255, film_grain.scaling_points_cr[1][0]);
- EXPECT_EQ(64, film_grain.scaling_points_cr[0][1]);
- EXPECT_EQ(64, film_grain.scaling_points_cr[1][1]);
-
- EXPECT_EQ(128, film_grain.cb_mult);
- EXPECT_EQ(192, film_grain.cb_luma_mult);
- EXPECT_EQ(256, film_grain.cb_offset);
- EXPECT_EQ(128, film_grain.cr_mult);
- EXPECT_EQ(192, film_grain.cr_luma_mult);
- EXPECT_EQ(256, film_grain.cr_offset);
- EXPECT_EQ(0, film_grain.chroma_scaling_from_luma);
- EXPECT_EQ(0, film_grain.grain_scale_shift);
-
- aom_noise_model_free(&model);
-}
-
-template <typename T>
-class WienerDenoiseTest : public ::testing::Test, public T {
- public:
- static void SetUpTestCase() { aom_dsp_rtcd(); }
-
- protected:
- void SetUp() {
- static const float kNoiseLevel = 5.f;
- static const float kStd = 4.0;
- static const double kMaxValue = (1 << T::kBitDepth) - 1;
-
- chroma_sub_[0] = 1;
- chroma_sub_[1] = 1;
- stride_[0] = kWidth;
- stride_[1] = kWidth / 2;
- stride_[2] = kWidth / 2;
- for (int k = 0; k < 3; ++k) {
- data_[k].resize(kWidth * kHeight);
- denoised_[k].resize(kWidth * kHeight);
- noise_psd_[k].resize(kBlockSize * kBlockSize);
- }
-
- const double kCoeffsY[] = { 0.0406, -0.116, -0.078, -0.152, 0.0033, -0.093,
- 0.048, 0.404, 0.2353, -0.035, -0.093, 0.441 };
- const int kCoords[12][2] = {
- { -2, -2 }, { -1, -2 }, { 0, -2 }, { 1, -2 }, { 2, -2 }, { -2, -1 },
- { -1, -1 }, { 0, -1 }, { 1, -1 }, { 2, -1 }, { -2, 0 }, { -1, 0 }
- };
- const int kLag = 2;
- const int kLength = 12;
- libaom_test::ACMRandom random;
- std::vector<double> noise(kWidth * kHeight);
- noise_synth(&random, kLag, kLength, kCoords, kCoeffsY, &noise[0], kWidth,
- kHeight);
- noise_psd_[0] = get_noise_psd(&noise[0], kWidth, kHeight, kBlockSize);
- for (int i = 0; i < kBlockSize * kBlockSize; ++i) {
- noise_psd_[0][i] = (float)(noise_psd_[0][i] * kStd * kStd * kScaleNoise *
- kScaleNoise / (kMaxValue * kMaxValue));
- }
-
- float psd_value =
- aom_noise_psd_get_default_value(kBlockSizeChroma, kNoiseLevel);
- for (int i = 0; i < kBlockSizeChroma * kBlockSizeChroma; ++i) {
- noise_psd_[1][i] = psd_value;
- noise_psd_[2][i] = psd_value;
- }
- for (int y = 0; y < kHeight; ++y) {
- for (int x = 0; x < kWidth; ++x) {
- data_[0][y * stride_[0] + x] = (typename T::data_type_t)fclamp(
- (x + noise[y * stride_[0] + x] * kStd) * kScaleNoise, 0, kMaxValue);
- }
- }
-
- for (int c = 1; c < 3; ++c) {
- for (int y = 0; y < (kHeight >> 1); ++y) {
- for (int x = 0; x < (kWidth >> 1); ++x) {
- data_[c][y * stride_[c] + x] = (typename T::data_type_t)fclamp(
- (x + randn(&random, kStd)) * kScaleNoise, 0, kMaxValue);
- }
- }
- }
- for (int k = 0; k < 3; ++k) {
- noise_psd_ptrs_[k] = &noise_psd_[k][0];
- }
- }
- static const int kBlockSize = 32;
- static const int kBlockSizeChroma = 16;
- static const int kWidth = 256;
- static const int kHeight = 256;
- static const int kScaleNoise = 1 << (T::kBitDepth - 8);
-
- std::vector<typename T::data_type_t> data_[3];
- std::vector<typename T::data_type_t> denoised_[3];
- std::vector<float> noise_psd_[3];
- int chroma_sub_[2];
- float *noise_psd_ptrs_[3];
- int stride_[3];
-};
-
-TYPED_TEST_CASE_P(WienerDenoiseTest);
-
-TYPED_TEST_P(WienerDenoiseTest, InvalidBlockSize) {
- const uint8_t *const data_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->data_[0][0]),
- reinterpret_cast<uint8_t *>(&this->data_[1][0]),
- reinterpret_cast<uint8_t *>(&this->data_[2][0]),
- };
- uint8_t *denoised_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->denoised_[0][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[1][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[2][0]),
- };
- EXPECT_EQ(0, aom_wiener_denoise_2d(data_ptrs, denoised_ptrs, this->kWidth,
- this->kHeight, this->stride_,
- this->chroma_sub_, this->noise_psd_ptrs_,
- 18, this->kBitDepth, this->kUseHighBD));
- EXPECT_EQ(0, aom_wiener_denoise_2d(data_ptrs, denoised_ptrs, this->kWidth,
- this->kHeight, this->stride_,
- this->chroma_sub_, this->noise_psd_ptrs_,
- 48, this->kBitDepth, this->kUseHighBD));
- EXPECT_EQ(0, aom_wiener_denoise_2d(data_ptrs, denoised_ptrs, this->kWidth,
- this->kHeight, this->stride_,
- this->chroma_sub_, this->noise_psd_ptrs_,
- 64, this->kBitDepth, this->kUseHighBD));
-}
-
-TYPED_TEST_P(WienerDenoiseTest, InvalidChromaSubsampling) {
- const uint8_t *const data_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->data_[0][0]),
- reinterpret_cast<uint8_t *>(&this->data_[1][0]),
- reinterpret_cast<uint8_t *>(&this->data_[2][0]),
- };
- uint8_t *denoised_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->denoised_[0][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[1][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[2][0]),
- };
- int chroma_sub[2] = { 1, 0 };
- EXPECT_EQ(0, aom_wiener_denoise_2d(data_ptrs, denoised_ptrs, this->kWidth,
- this->kHeight, this->stride_, chroma_sub,
- this->noise_psd_ptrs_, 32, this->kBitDepth,
- this->kUseHighBD));
-
- chroma_sub[0] = 0;
- chroma_sub[1] = 1;
- EXPECT_EQ(0, aom_wiener_denoise_2d(data_ptrs, denoised_ptrs, this->kWidth,
- this->kHeight, this->stride_, chroma_sub,
- this->noise_psd_ptrs_, 32, this->kBitDepth,
- this->kUseHighBD));
-}
-
-TYPED_TEST_P(WienerDenoiseTest, GradientTest) {
- const int kWidth = this->kWidth;
- const int kHeight = this->kHeight;
- const int kBlockSize = this->kBlockSize;
- const uint8_t *const data_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->data_[0][0]),
- reinterpret_cast<uint8_t *>(&this->data_[1][0]),
- reinterpret_cast<uint8_t *>(&this->data_[2][0]),
- };
- uint8_t *denoised_ptrs[3] = {
- reinterpret_cast<uint8_t *>(&this->denoised_[0][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[1][0]),
- reinterpret_cast<uint8_t *>(&this->denoised_[2][0]),
- };
- const int ret = aom_wiener_denoise_2d(
- data_ptrs, denoised_ptrs, kWidth, kHeight, this->stride_,
- this->chroma_sub_, this->noise_psd_ptrs_, this->kBlockSize,
- this->kBitDepth, this->kUseHighBD);
- EXPECT_EQ(1, ret);
-
- // Check the noise on the denoised image (from the analytical gradient)
- // and make sure that it is less than what we added.
- for (int c = 0; c < 3; ++c) {
- std::vector<double> measured_noise(kWidth * kHeight);
-
- double var = 0;
- const int shift = (c > 0);
- for (int x = 0; x < (kWidth >> shift); ++x) {
- for (int y = 0; y < (kHeight >> shift); ++y) {
- const double diff = this->denoised_[c][y * this->stride_[c] + x] -
- x * this->kScaleNoise;
- var += diff * diff;
- measured_noise[y * kWidth + x] = diff;
- }
- }
- var /= (kWidth * kHeight);
- const double std = sqrt(std::max(0.0, var));
- EXPECT_LE(std, 1.25f * this->kScaleNoise);
- if (c == 0) {
- std::vector<float> measured_psd =
- get_noise_psd(&measured_noise[0], kWidth, kHeight, kBlockSize);
- std::vector<double> measured_psd_d(kBlockSize * kBlockSize);
- std::vector<double> noise_psd_d(kBlockSize * kBlockSize);
- std::copy(measured_psd.begin(), measured_psd.end(),
- measured_psd_d.begin());
- std::copy(this->noise_psd_[0].begin(), this->noise_psd_[0].end(),
- noise_psd_d.begin());
- EXPECT_LT(
- aom_normalized_cross_correlation(&measured_psd_d[0], &noise_psd_d[0],
- (int)(noise_psd_d.size())),
- 0.35);
- }
- }
-}
-
-REGISTER_TYPED_TEST_CASE_P(WienerDenoiseTest, InvalidBlockSize,
- InvalidChromaSubsampling, GradientTest);
-
-INSTANTIATE_TYPED_TEST_CASE_P(WienerDenoiseTestInstatiation, WienerDenoiseTest,
- AllBitDepthParams);
diff --git a/third_party/aom/test/obmc_sad_test.cc b/third_party/aom/test/obmc_sad_test.cc
deleted file mode 100644
index 6cef86961..000000000
--- a/third_party/aom/test/obmc_sad_test.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/function_equivalence_test.h"
-#include "test/register_state_check.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_integer.h"
-
-#define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
-
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-static const int kIterations = 1000;
-static const int kMaskMax = 64;
-
-typedef unsigned int (*ObmcSadF)(const uint8_t *pre, int pre_stride,
- const int32_t *wsrc, const int32_t *mask);
-typedef libaom_test::FuncParam<ObmcSadF> TestFuncs;
-
-////////////////////////////////////////////////////////////////////////////////
-// 8 bit
-////////////////////////////////////////////////////////////////////////////////
-
-class ObmcSadTest : public FunctionEquivalenceTest<ObmcSadF> {};
-
-TEST_P(ObmcSadTest, RandomValues) {
- DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- const int pre_stride = rng_(MAX_SB_SIZE + 1);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = rng_.Rand8();
- wsrc[i] = rng_.Rand8() * rng_(kMaskMax * kMaskMax + 1);
- mask[i] = rng_(kMaskMax * kMaskMax + 1);
- }
-
- const unsigned int ref_res = params_.ref_func(pre, pre_stride, wsrc, mask);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res =
- params_.tst_func(pre, pre_stride, wsrc, mask));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-TEST_P(ObmcSadTest, ExtremeValues) {
- DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
- const int pre_stride = iter;
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = UINT8_MAX;
- wsrc[i] = UINT8_MAX * kMaskMax * kMaskMax;
- mask[i] = kMaskMax * kMaskMax;
- }
-
- const unsigned int ref_res = params_.ref_func(pre, pre_stride, wsrc, mask);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res =
- params_.tst_func(pre, pre_stride, wsrc, mask));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-#if HAVE_SSE4_1
-const ObmcSadTest::ParamType sse4_functions[] = {
- TestFuncs(aom_obmc_sad128x128_c, aom_obmc_sad128x128_sse4_1),
- TestFuncs(aom_obmc_sad128x64_c, aom_obmc_sad128x64_sse4_1),
- TestFuncs(aom_obmc_sad64x128_c, aom_obmc_sad64x128_sse4_1),
- TestFuncs(aom_obmc_sad64x64_c, aom_obmc_sad64x64_sse4_1),
- TestFuncs(aom_obmc_sad64x32_c, aom_obmc_sad64x32_sse4_1),
- TestFuncs(aom_obmc_sad32x64_c, aom_obmc_sad32x64_sse4_1),
- TestFuncs(aom_obmc_sad32x32_c, aom_obmc_sad32x32_sse4_1),
- TestFuncs(aom_obmc_sad32x16_c, aom_obmc_sad32x16_sse4_1),
- TestFuncs(aom_obmc_sad16x32_c, aom_obmc_sad16x32_sse4_1),
- TestFuncs(aom_obmc_sad16x16_c, aom_obmc_sad16x16_sse4_1),
- TestFuncs(aom_obmc_sad16x8_c, aom_obmc_sad16x8_sse4_1),
- TestFuncs(aom_obmc_sad8x16_c, aom_obmc_sad8x16_sse4_1),
- TestFuncs(aom_obmc_sad8x8_c, aom_obmc_sad8x8_sse4_1),
- TestFuncs(aom_obmc_sad8x4_c, aom_obmc_sad8x4_sse4_1),
- TestFuncs(aom_obmc_sad4x8_c, aom_obmc_sad4x8_sse4_1),
- TestFuncs(aom_obmc_sad4x4_c, aom_obmc_sad4x4_sse4_1)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, ObmcSadTest,
- ::testing::ValuesIn(sse4_functions));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-const ObmcSadTest::ParamType avx2_functions[] = {
- TestFuncs(aom_obmc_sad128x128_c, aom_obmc_sad128x128_avx2),
- TestFuncs(aom_obmc_sad128x64_c, aom_obmc_sad128x64_avx2),
- TestFuncs(aom_obmc_sad64x128_c, aom_obmc_sad64x128_avx2),
- TestFuncs(aom_obmc_sad64x64_c, aom_obmc_sad64x64_avx2),
- TestFuncs(aom_obmc_sad64x32_c, aom_obmc_sad64x32_avx2),
- TestFuncs(aom_obmc_sad32x64_c, aom_obmc_sad32x64_avx2),
- TestFuncs(aom_obmc_sad32x32_c, aom_obmc_sad32x32_avx2),
- TestFuncs(aom_obmc_sad32x16_c, aom_obmc_sad32x16_avx2),
- TestFuncs(aom_obmc_sad16x32_c, aom_obmc_sad16x32_avx2),
- TestFuncs(aom_obmc_sad16x16_c, aom_obmc_sad16x16_avx2),
- TestFuncs(aom_obmc_sad16x8_c, aom_obmc_sad16x8_avx2),
- TestFuncs(aom_obmc_sad8x16_c, aom_obmc_sad8x16_avx2),
- TestFuncs(aom_obmc_sad8x8_c, aom_obmc_sad8x8_avx2),
- TestFuncs(aom_obmc_sad8x4_c, aom_obmc_sad8x4_avx2),
- TestFuncs(aom_obmc_sad4x8_c, aom_obmc_sad4x8_avx2),
- TestFuncs(aom_obmc_sad4x4_c, aom_obmc_sad4x4_avx2)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, ObmcSadTest, ::testing::ValuesIn(avx2_functions));
-#endif // HAVE_AVX2
-
-////////////////////////////////////////////////////////////////////////////////
-// High bit-depth
-////////////////////////////////////////////////////////////////////////////////
-
-class ObmcSadHBDTest : public FunctionEquivalenceTest<ObmcSadF> {};
-
-TEST_P(ObmcSadHBDTest, RandomValues) {
- DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- const int pre_stride = rng_(MAX_SB_SIZE + 1);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = rng_(1 << 12);
- wsrc[i] = rng_(1 << 12) * rng_(kMaskMax * kMaskMax + 1);
- mask[i] = rng_(kMaskMax * kMaskMax + 1);
- }
-
- const unsigned int ref_res =
- params_.ref_func(CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(
- tst_res =
- params_.tst_func(CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-TEST_P(ObmcSadHBDTest, ExtremeValues) {
- DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
- const int pre_stride = iter;
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = (1 << 12) - 1;
- wsrc[i] = ((1 << 12) - 1) * kMaskMax * kMaskMax;
- mask[i] = kMaskMax * kMaskMax;
- }
-
- const unsigned int ref_res =
- params_.ref_func(CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(
- tst_res =
- params_.tst_func(CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-#if HAVE_SSE4_1
-ObmcSadHBDTest::ParamType sse4_functions_hbd[] = {
- TestFuncs(aom_highbd_obmc_sad128x128_c, aom_highbd_obmc_sad128x128_sse4_1),
- TestFuncs(aom_highbd_obmc_sad128x64_c, aom_highbd_obmc_sad128x64_sse4_1),
- TestFuncs(aom_highbd_obmc_sad64x128_c, aom_highbd_obmc_sad64x128_sse4_1),
- TestFuncs(aom_highbd_obmc_sad64x64_c, aom_highbd_obmc_sad64x64_sse4_1),
- TestFuncs(aom_highbd_obmc_sad64x32_c, aom_highbd_obmc_sad64x32_sse4_1),
- TestFuncs(aom_highbd_obmc_sad32x64_c, aom_highbd_obmc_sad32x64_sse4_1),
- TestFuncs(aom_highbd_obmc_sad32x32_c, aom_highbd_obmc_sad32x32_sse4_1),
- TestFuncs(aom_highbd_obmc_sad32x16_c, aom_highbd_obmc_sad32x16_sse4_1),
- TestFuncs(aom_highbd_obmc_sad16x32_c, aom_highbd_obmc_sad16x32_sse4_1),
- TestFuncs(aom_highbd_obmc_sad16x16_c, aom_highbd_obmc_sad16x16_sse4_1),
- TestFuncs(aom_highbd_obmc_sad16x8_c, aom_highbd_obmc_sad16x8_sse4_1),
- TestFuncs(aom_highbd_obmc_sad8x16_c, aom_highbd_obmc_sad8x16_sse4_1),
- TestFuncs(aom_highbd_obmc_sad8x8_c, aom_highbd_obmc_sad8x8_sse4_1),
- TestFuncs(aom_highbd_obmc_sad8x4_c, aom_highbd_obmc_sad8x4_sse4_1),
- TestFuncs(aom_highbd_obmc_sad4x8_c, aom_highbd_obmc_sad4x8_sse4_1),
- TestFuncs(aom_highbd_obmc_sad4x4_c, aom_highbd_obmc_sad4x4_sse4_1)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, ObmcSadHBDTest,
- ::testing::ValuesIn(sse4_functions_hbd));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-ObmcSadHBDTest::ParamType avx2_functions_hbd[] = {
- TestFuncs(aom_highbd_obmc_sad128x128_c, aom_highbd_obmc_sad128x128_avx2),
- TestFuncs(aom_highbd_obmc_sad128x64_c, aom_highbd_obmc_sad128x64_avx2),
- TestFuncs(aom_highbd_obmc_sad64x128_c, aom_highbd_obmc_sad64x128_avx2),
- TestFuncs(aom_highbd_obmc_sad64x64_c, aom_highbd_obmc_sad64x64_avx2),
- TestFuncs(aom_highbd_obmc_sad64x32_c, aom_highbd_obmc_sad64x32_avx2),
- TestFuncs(aom_highbd_obmc_sad32x64_c, aom_highbd_obmc_sad32x64_avx2),
- TestFuncs(aom_highbd_obmc_sad32x32_c, aom_highbd_obmc_sad32x32_avx2),
- TestFuncs(aom_highbd_obmc_sad32x16_c, aom_highbd_obmc_sad32x16_avx2),
- TestFuncs(aom_highbd_obmc_sad16x32_c, aom_highbd_obmc_sad16x32_avx2),
- TestFuncs(aom_highbd_obmc_sad16x16_c, aom_highbd_obmc_sad16x16_avx2),
- TestFuncs(aom_highbd_obmc_sad16x8_c, aom_highbd_obmc_sad16x8_avx2),
- TestFuncs(aom_highbd_obmc_sad8x16_c, aom_highbd_obmc_sad8x16_avx2),
- TestFuncs(aom_highbd_obmc_sad8x8_c, aom_highbd_obmc_sad8x8_avx2),
- TestFuncs(aom_highbd_obmc_sad8x4_c, aom_highbd_obmc_sad8x4_avx2),
- TestFuncs(aom_highbd_obmc_sad4x8_c, aom_highbd_obmc_sad4x8_avx2),
- TestFuncs(aom_highbd_obmc_sad4x4_c, aom_highbd_obmc_sad4x4_avx2)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, ObmcSadHBDTest,
- ::testing::ValuesIn(avx2_functions_hbd));
-#endif // HAVE_AVX2
-} // namespace
diff --git a/third_party/aom/test/obmc_variance_test.cc b/third_party/aom/test/obmc_variance_test.cc
deleted file mode 100644
index 4563b964a..000000000
--- a/third_party/aom/test/obmc_variance_test.cc
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-
-#include "test/function_equivalence_test.h"
-#include "test/register_state_check.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_integer.h"
-
-#define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
-
-using libaom_test::ACMRandom;
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-static const int kIterations = 1000;
-static const int kMaskMax = 64;
-
-typedef unsigned int (*ObmcVarF)(const uint8_t *pre, int pre_stride,
- const int32_t *wsrc, const int32_t *mask,
- unsigned int *sse);
-typedef libaom_test::FuncParam<ObmcVarF> TestFuncs;
-
-////////////////////////////////////////////////////////////////////////////////
-// 8 bit
-////////////////////////////////////////////////////////////////////////////////
-
-class ObmcVarianceTest : public FunctionEquivalenceTest<ObmcVarF> {};
-
-TEST_P(ObmcVarianceTest, RandomValues) {
- DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = this->rng_.Rand8();
- wsrc[i] = this->rng_.Rand8() * this->rng_(kMaskMax * kMaskMax + 1);
- mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
- }
-
- unsigned int ref_sse, tst_sse;
- const unsigned int ref_res =
- params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(
- tst_res = params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse));
-
- ASSERT_EQ(ref_res, tst_res);
- ASSERT_EQ(ref_sse, tst_sse);
- }
-}
-
-TEST_P(ObmcVarianceTest, ExtremeValues) {
- DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
- const int pre_stride = iter;
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = UINT8_MAX;
- wsrc[i] = UINT8_MAX * kMaskMax * kMaskMax;
- mask[i] = kMaskMax * kMaskMax;
- }
-
- unsigned int ref_sse, tst_sse;
- const unsigned int ref_res =
- params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(
- tst_res = params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse));
-
- ASSERT_EQ(ref_res, tst_res);
- ASSERT_EQ(ref_sse, tst_sse);
- }
-}
-
-TEST_P(ObmcVarianceTest, DISABLED_Speed) {
- DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = this->rng_.Rand8();
- wsrc[i] = this->rng_.Rand8() * this->rng_(kMaskMax * kMaskMax + 1);
- mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
- }
-
- const int num_loops = 1000000;
- unsigned int ref_sse, tst_sse;
- aom_usec_timer ref_timer, test_timer;
-
- aom_usec_timer_start(&ref_timer);
- for (int i = 0; i < num_loops; ++i) {
- params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
- }
- aom_usec_timer_mark(&ref_timer);
- const int elapsed_time_c =
- static_cast<int>(aom_usec_timer_elapsed(&ref_timer));
-
- aom_usec_timer_start(&test_timer);
- for (int i = 0; i < num_loops; ++i) {
- params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse);
- }
- aom_usec_timer_mark(&test_timer);
- const int elapsed_time_simd =
- static_cast<int>(aom_usec_timer_elapsed(&test_timer));
-
- printf("c_time=%d \t simd_time=%d \t gain=%d \n", elapsed_time_c,
- elapsed_time_simd, (elapsed_time_c / elapsed_time_simd));
-}
-
-#if HAVE_SSE4_1
-const ObmcVarianceTest::ParamType sse4_functions[] = {
- TestFuncs(aom_obmc_variance128x128_c, aom_obmc_variance128x128_sse4_1),
- TestFuncs(aom_obmc_variance128x64_c, aom_obmc_variance128x64_sse4_1),
- TestFuncs(aom_obmc_variance64x128_c, aom_obmc_variance64x128_sse4_1),
- TestFuncs(aom_obmc_variance64x64_c, aom_obmc_variance64x64_sse4_1),
- TestFuncs(aom_obmc_variance64x32_c, aom_obmc_variance64x32_sse4_1),
- TestFuncs(aom_obmc_variance32x64_c, aom_obmc_variance32x64_sse4_1),
- TestFuncs(aom_obmc_variance32x32_c, aom_obmc_variance32x32_sse4_1),
- TestFuncs(aom_obmc_variance32x16_c, aom_obmc_variance32x16_sse4_1),
- TestFuncs(aom_obmc_variance16x32_c, aom_obmc_variance16x32_sse4_1),
- TestFuncs(aom_obmc_variance16x16_c, aom_obmc_variance16x16_sse4_1),
- TestFuncs(aom_obmc_variance16x8_c, aom_obmc_variance16x8_sse4_1),
- TestFuncs(aom_obmc_variance8x16_c, aom_obmc_variance8x16_sse4_1),
- TestFuncs(aom_obmc_variance8x8_c, aom_obmc_variance8x8_sse4_1),
- TestFuncs(aom_obmc_variance8x4_c, aom_obmc_variance8x4_sse4_1),
- TestFuncs(aom_obmc_variance4x8_c, aom_obmc_variance4x8_sse4_1),
- TestFuncs(aom_obmc_variance4x4_c, aom_obmc_variance4x4_sse4_1)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, ObmcVarianceTest,
- ::testing::ValuesIn(sse4_functions));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-const ObmcVarianceTest::ParamType avx2_functions[] = {
- TestFuncs(aom_obmc_variance128x128_c, aom_obmc_variance128x128_avx2),
- TestFuncs(aom_obmc_variance128x64_c, aom_obmc_variance128x64_avx2),
- TestFuncs(aom_obmc_variance64x128_c, aom_obmc_variance64x128_avx2),
- TestFuncs(aom_obmc_variance64x64_c, aom_obmc_variance64x64_avx2),
- TestFuncs(aom_obmc_variance64x32_c, aom_obmc_variance64x32_avx2),
- TestFuncs(aom_obmc_variance32x64_c, aom_obmc_variance32x64_avx2),
- TestFuncs(aom_obmc_variance32x32_c, aom_obmc_variance32x32_avx2),
- TestFuncs(aom_obmc_variance32x16_c, aom_obmc_variance32x16_avx2),
- TestFuncs(aom_obmc_variance16x32_c, aom_obmc_variance16x32_avx2),
- TestFuncs(aom_obmc_variance16x16_c, aom_obmc_variance16x16_avx2),
- TestFuncs(aom_obmc_variance16x8_c, aom_obmc_variance16x8_avx2),
- TestFuncs(aom_obmc_variance8x16_c, aom_obmc_variance8x16_avx2),
- TestFuncs(aom_obmc_variance8x8_c, aom_obmc_variance8x8_avx2),
- TestFuncs(aom_obmc_variance8x4_c, aom_obmc_variance8x4_avx2),
- TestFuncs(aom_obmc_variance4x8_c, aom_obmc_variance4x8_sse4_1),
- TestFuncs(aom_obmc_variance4x4_c, aom_obmc_variance4x4_sse4_1)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, ObmcVarianceTest,
- ::testing::ValuesIn(avx2_functions));
-#endif // HAVE_AVX2
-
-////////////////////////////////////////////////////////////////////////////////
-// High bit-depth
-////////////////////////////////////////////////////////////////////////////////
-
-class ObmcVarianceHBDTest : public FunctionEquivalenceTest<ObmcVarF> {};
-
-TEST_P(ObmcVarianceHBDTest, RandomValues) {
- DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = this->rng_(1 << params_.bit_depth);
- wsrc[i] = this->rng_(1 << params_.bit_depth) *
- this->rng_(kMaskMax * kMaskMax + 1);
- mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
- }
-
- unsigned int ref_sse, tst_sse;
- const unsigned int ref_res = params_.ref_func(
- CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask, &ref_sse);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(CONVERT_TO_BYTEPTR(pre),
- pre_stride, wsrc, mask,
- &tst_sse));
-
- ASSERT_EQ(ref_res, tst_res);
- ASSERT_EQ(ref_sse, tst_sse);
- }
-}
-
-TEST_P(ObmcVarianceHBDTest, ExtremeValues) {
- DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
-
- for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
- const int pre_stride = iter;
-
- for (int i = 0; i < MAX_SB_SQUARE; ++i) {
- pre[i] = (1 << params_.bit_depth) - 1;
- wsrc[i] = ((1 << params_.bit_depth) - 1) * kMaskMax * kMaskMax;
- mask[i] = kMaskMax * kMaskMax;
- }
-
- unsigned int ref_sse, tst_sse;
- const unsigned int ref_res = params_.ref_func(
- CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask, &ref_sse);
- unsigned int tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(CONVERT_TO_BYTEPTR(pre),
- pre_stride, wsrc, mask,
- &tst_sse));
-
- ASSERT_EQ(ref_res, tst_res);
- ASSERT_EQ(ref_sse, tst_sse);
- }
-}
-
-#if HAVE_SSE4_1
-ObmcVarianceHBDTest::ParamType sse4_functions_hbd[] = {
- TestFuncs(aom_highbd_obmc_variance128x128_c,
- aom_highbd_obmc_variance128x128_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance128x64_c,
- aom_highbd_obmc_variance128x64_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance64x128_c,
- aom_highbd_obmc_variance64x128_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance64x64_c,
- aom_highbd_obmc_variance64x64_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance64x32_c,
- aom_highbd_obmc_variance64x32_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance32x64_c,
- aom_highbd_obmc_variance32x64_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance32x32_c,
- aom_highbd_obmc_variance32x32_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance32x16_c,
- aom_highbd_obmc_variance32x16_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance16x32_c,
- aom_highbd_obmc_variance16x32_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance16x16_c,
- aom_highbd_obmc_variance16x16_sse4_1, 8),
- TestFuncs(aom_highbd_obmc_variance16x8_c, aom_highbd_obmc_variance16x8_sse4_1,
- 8),
- TestFuncs(aom_highbd_obmc_variance8x16_c, aom_highbd_obmc_variance8x16_sse4_1,
- 8),
- TestFuncs(aom_highbd_obmc_variance8x8_c, aom_highbd_obmc_variance8x8_sse4_1,
- 8),
- TestFuncs(aom_highbd_obmc_variance8x4_c, aom_highbd_obmc_variance8x4_sse4_1,
- 8),
- TestFuncs(aom_highbd_obmc_variance4x8_c, aom_highbd_obmc_variance4x8_sse4_1,
- 8),
- TestFuncs(aom_highbd_obmc_variance4x4_c, aom_highbd_obmc_variance4x4_sse4_1,
- 8),
- TestFuncs(aom_highbd_10_obmc_variance128x128_c,
- aom_highbd_10_obmc_variance128x128_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance128x64_c,
- aom_highbd_10_obmc_variance128x64_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance64x128_c,
- aom_highbd_10_obmc_variance64x128_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance64x64_c,
- aom_highbd_10_obmc_variance64x64_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance64x32_c,
- aom_highbd_10_obmc_variance64x32_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance32x64_c,
- aom_highbd_10_obmc_variance32x64_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance32x32_c,
- aom_highbd_10_obmc_variance32x32_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance32x16_c,
- aom_highbd_10_obmc_variance32x16_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance16x32_c,
- aom_highbd_10_obmc_variance16x32_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance16x16_c,
- aom_highbd_10_obmc_variance16x16_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance16x8_c,
- aom_highbd_10_obmc_variance16x8_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance8x16_c,
- aom_highbd_10_obmc_variance8x16_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance8x8_c,
- aom_highbd_10_obmc_variance8x8_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance8x4_c,
- aom_highbd_10_obmc_variance8x4_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance4x8_c,
- aom_highbd_10_obmc_variance4x8_sse4_1, 10),
- TestFuncs(aom_highbd_10_obmc_variance4x4_c,
- aom_highbd_10_obmc_variance4x4_sse4_1, 10),
- TestFuncs(aom_highbd_12_obmc_variance128x128_c,
- aom_highbd_12_obmc_variance128x128_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance128x64_c,
- aom_highbd_12_obmc_variance128x64_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance64x128_c,
- aom_highbd_12_obmc_variance64x128_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance64x64_c,
- aom_highbd_12_obmc_variance64x64_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance64x32_c,
- aom_highbd_12_obmc_variance64x32_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance32x64_c,
- aom_highbd_12_obmc_variance32x64_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance32x32_c,
- aom_highbd_12_obmc_variance32x32_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance32x16_c,
- aom_highbd_12_obmc_variance32x16_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance16x32_c,
- aom_highbd_12_obmc_variance16x32_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance16x16_c,
- aom_highbd_12_obmc_variance16x16_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance16x8_c,
- aom_highbd_12_obmc_variance16x8_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance8x16_c,
- aom_highbd_12_obmc_variance8x16_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance8x8_c,
- aom_highbd_12_obmc_variance8x8_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance8x4_c,
- aom_highbd_12_obmc_variance8x4_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance4x8_c,
- aom_highbd_12_obmc_variance4x8_sse4_1, 12),
- TestFuncs(aom_highbd_12_obmc_variance4x4_c,
- aom_highbd_12_obmc_variance4x4_sse4_1, 12)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, ObmcVarianceHBDTest,
- ::testing::ValuesIn(sse4_functions_hbd));
-#endif // HAVE_SSE4_1
-} // namespace
diff --git a/third_party/aom/test/onyxc_int_test.cc b/third_party/aom/test/onyxc_int_test.cc
deleted file mode 100644
index 388959518..000000000
--- a/third_party/aom/test/onyxc_int_test.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "av1/common/onyxc_int.h"
-
-TEST(OnyxcInt, TestGetTxSize) {
- for (int t = TX_4X4; t < TX_SIZES_ALL; t++) {
- TX_SIZE t2 = get_tx_size(tx_size_wide[t], tx_size_high[t]);
- GTEST_ASSERT_EQ(tx_size_wide[t], tx_size_wide[t2]);
- GTEST_ASSERT_EQ(tx_size_high[t], tx_size_high[t2]);
- }
-}
diff --git a/third_party/aom/test/pickrst_test.cc b/third_party/aom/test/pickrst_test.cc
deleted file mode 100644
index 040e8e8b7..000000000
--- a/third_party/aom/test/pickrst_test.cc
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/function_equivalence_test.h"
-#include "test/register_state_check.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_integer.h"
-#include "av1/encoder/pickrst.h"
-using libaom_test::FunctionEquivalenceTest;
-
-#define MAX_DATA_BLOCK 384
-
-namespace {
-static const int kIterations = 100;
-
-typedef int64_t (*lowbd_pixel_proj_error_func)(
- const uint8_t *src8, int width, int height, int src_stride,
- const uint8_t *dat8, int dat_stride, int32_t *flt0, int flt0_stride,
- int32_t *flt1, int flt1_stride, int xq[2], const sgr_params_type *params);
-
-typedef libaom_test::FuncParam<lowbd_pixel_proj_error_func> TestFuncs;
-
-////////////////////////////////////////////////////////////////////////////////
-// 8 bit
-////////////////////////////////////////////////////////////////////////////////
-
-typedef ::testing::tuple<const lowbd_pixel_proj_error_func>
- PixelProjErrorTestParam;
-
-class PixelProjErrorTest
- : public ::testing::TestWithParam<PixelProjErrorTestParam> {
- public:
- virtual void SetUp() {
- target_func_ = GET_PARAM(0);
- src_ = (uint8_t *)(aom_malloc(MAX_DATA_BLOCK * MAX_DATA_BLOCK *
- sizeof(uint8_t)));
- dgd_ = (uint8_t *)(aom_malloc(MAX_DATA_BLOCK * MAX_DATA_BLOCK *
- sizeof(uint8_t)));
- flt0_ = (int32_t *)(aom_malloc(MAX_DATA_BLOCK * MAX_DATA_BLOCK *
- sizeof(int32_t)));
- flt1_ = (int32_t *)(aom_malloc(MAX_DATA_BLOCK * MAX_DATA_BLOCK *
- sizeof(int32_t)));
- }
- virtual void TearDown() {
- aom_free(src_);
- aom_free(dgd_);
- aom_free(flt0_);
- aom_free(flt1_);
- }
- void runPixelProjErrorTest(int32_t run_times);
- void runPixelProjErrorTest_ExtremeValues();
-
- private:
- lowbd_pixel_proj_error_func target_func_;
- ACMRandom rng_;
- uint8_t *src_;
- uint8_t *dgd_;
- int32_t *flt0_;
- int32_t *flt1_;
-};
-
-void PixelProjErrorTest::runPixelProjErrorTest(int32_t run_times) {
- int h_end = run_times != 1 ? 128 : (rng_.Rand16() % MAX_DATA_BLOCK) + 1;
- int v_end = run_times != 1 ? 128 : (rng_.Rand16() % MAX_DATA_BLOCK) + 1;
- const int dgd_stride = MAX_DATA_BLOCK;
- const int src_stride = MAX_DATA_BLOCK;
- const int flt0_stride = MAX_DATA_BLOCK;
- const int flt1_stride = MAX_DATA_BLOCK;
- sgr_params_type params;
- int xq[2];
- const int iters = run_times == 1 ? kIterations : 4;
- for (int iter = 0; iter < iters && !HasFatalFailure(); ++iter) {
- int64_t err_ref = 0, err_test = 1;
- for (int i = 0; i < MAX_DATA_BLOCK * MAX_DATA_BLOCK; ++i) {
- dgd_[i] = rng_.Rand8();
- src_[i] = rng_.Rand8();
- flt0_[i] = rng_.Rand15Signed();
- flt1_[i] = rng_.Rand15Signed();
- }
- xq[0] = rng_.Rand8() % (1 << SGRPROJ_PRJ_BITS);
- xq[1] = rng_.Rand8() % (1 << SGRPROJ_PRJ_BITS);
- params.r[0] = run_times == 1 ? (rng_.Rand8() % MAX_RADIUS) : (iter % 2);
- params.r[1] = run_times == 1 ? (rng_.Rand8() % MAX_RADIUS) : (iter / 2);
- params.s[0] = run_times == 1 ? (rng_.Rand8() % MAX_RADIUS) : (iter % 2);
- params.s[1] = run_times == 1 ? (rng_.Rand8() % MAX_RADIUS) : (iter / 2);
- uint8_t *dgd = dgd_;
- uint8_t *src = src_;
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- err_ref = av1_lowbd_pixel_proj_error_c(src, h_end, v_end, src_stride, dgd,
- dgd_stride, flt0_, flt0_stride,
- flt1_, flt1_stride, xq, &params);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- err_test =
- target_func_(src, h_end, v_end, src_stride, dgd, dgd_stride, flt0_,
- flt0_stride, flt1_, flt1_stride, xq, &params);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 10) {
- printf("r0 %d r1 %d %3dx%-3d:%7.2f/%7.2fns (%3.2f)\n", params.r[0],
- params.r[1], h_end, v_end, time1, time2, time1 / time2);
- }
- ASSERT_EQ(err_ref, err_test);
- }
-}
-
-void PixelProjErrorTest::runPixelProjErrorTest_ExtremeValues() {
- const int h_start = 0;
- int h_end = 192;
- const int v_start = 0;
- int v_end = 192;
- const int dgd_stride = MAX_DATA_BLOCK;
- const int src_stride = MAX_DATA_BLOCK;
- const int flt0_stride = MAX_DATA_BLOCK;
- const int flt1_stride = MAX_DATA_BLOCK;
- sgr_params_type params;
- int xq[2];
- const int iters = kIterations;
- for (int iter = 0; iter < iters && !HasFatalFailure(); ++iter) {
- int64_t err_ref = 0, err_test = 1;
- for (int i = 0; i < MAX_DATA_BLOCK * MAX_DATA_BLOCK; ++i) {
- dgd_[i] = 0;
- src_[i] = 255;
- flt0_[i] = rng_.Rand15Signed();
- flt1_[i] = rng_.Rand15Signed();
- }
- xq[0] = rng_.Rand8() % (1 << SGRPROJ_PRJ_BITS);
- xq[1] = rng_.Rand8() % (1 << SGRPROJ_PRJ_BITS);
- params.r[0] = rng_.Rand8() % MAX_RADIUS;
- params.r[1] = rng_.Rand8() % MAX_RADIUS;
- params.s[0] = rng_.Rand8() % MAX_RADIUS;
- params.s[1] = rng_.Rand8() % MAX_RADIUS;
- uint8_t *dgd = dgd_;
- uint8_t *src = src_;
-
- err_ref = av1_lowbd_pixel_proj_error_c(
- src, h_end - h_start, v_end - v_start, src_stride, dgd, dgd_stride,
- flt0_, flt0_stride, flt1_, flt1_stride, xq, &params);
-
- err_test = target_func_(src, h_end - h_start, v_end - v_start, src_stride,
- dgd, dgd_stride, flt0_, flt0_stride, flt1_,
- flt1_stride, xq, &params);
-
- ASSERT_EQ(err_ref, err_test);
- }
-}
-
-TEST_P(PixelProjErrorTest, RandomValues) { runPixelProjErrorTest(1); }
-
-TEST_P(PixelProjErrorTest, ExtremeValues) {
- runPixelProjErrorTest_ExtremeValues();
-}
-
-TEST_P(PixelProjErrorTest, DISABLED_Speed) { runPixelProjErrorTest(200000); }
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, PixelProjErrorTest,
- ::testing::Values(av1_lowbd_pixel_proj_error_sse4_1));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-
-INSTANTIATE_TEST_CASE_P(AVX2, PixelProjErrorTest,
- ::testing::Values(av1_lowbd_pixel_proj_error_avx2));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/qm_test.cc b/third_party/aom/test/qm_test.cc
deleted file mode 100644
index c87506b41..000000000
--- a/third_party/aom/test/qm_test.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include "config/aom_config.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-class QMTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- QMTest() : EncoderTest(GET_PARAM(0)) {}
- virtual ~QMTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- set_cpu_used_ = GET_PARAM(2);
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- encoder->Control(AV1E_SET_ENABLE_QM, 1);
- encoder->Control(AV1E_SET_QM_MIN, qm_min_);
- encoder->Control(AV1E_SET_QM_MAX, qm_max_);
-
- encoder->Control(AOME_SET_MAX_INTRA_BITRATE_PCT, 100);
- }
- }
-
- void DoTest(int qm_min, int qm_max) {
- qm_min_ = qm_min;
- qm_max_ = qm_max;
- cfg_.kf_max_dist = 12;
- cfg_.rc_min_quantizer = 8;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.g_lag_in_frames = 6;
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 500;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_target_bitrate = 300;
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352,
- 288, 30, 1, 0, 15);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-
- int set_cpu_used_;
- int qm_min_;
- int qm_max_;
-};
-
-// encodes and decodes without a mismatch.
-TEST_P(QMTest, TestNoMisMatchQM1) { DoTest(5, 9); }
-
-// encodes and decodes without a mismatch.
-TEST_P(QMTest, TestNoMisMatchQM2) { DoTest(0, 8); }
-
-// encodes and decodes without a mismatch.
-TEST_P(QMTest, TestNoMisMatchQM3) { DoTest(9, 15); }
-
-AV1_INSTANTIATE_TEST_CASE(QMTest,
- ::testing::Values(::libaom_test::kRealTime,
- ::libaom_test::kOnePassGood),
- ::testing::Range(5, 9));
-} // namespace
diff --git a/third_party/aom/test/quantize_func_test.cc b/third_party/aom/test/quantize_func_test.cc
deleted file mode 100644
index 554d0c721..000000000
--- a/third_party/aom/test/quantize_func_test.cc
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-#include "config/av1_rtcd.h"
-
-#include "aom/aom_codec.h"
-#include "aom_ports/aom_timer.h"
-#include "av1/encoder/encoder.h"
-#include "av1/common/scan.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-namespace {
-using libaom_test::ACMRandom;
-
-#define QUAN_PARAM_LIST \
- const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, \
- const int16_t *round_ptr, const int16_t *quant_ptr, \
- const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, \
- tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, \
- const int16_t *scan, const int16_t *iscan
-
-typedef void (*QuantizeFunc)(QUAN_PARAM_LIST);
-typedef void (*QuantizeFuncHbd)(QUAN_PARAM_LIST, int log_scale);
-
-#define HBD_QUAN_FUNC \
- fn(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr, quant_shift_ptr, \
- qcoeff_ptr, dqcoeff_ptr, dequant_ptr, eob_ptr, scan, iscan, log_scale)
-
-#define LBD_QUAN_FUNC \
- fn(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr, quant_shift_ptr, \
- qcoeff_ptr, dqcoeff_ptr, dequant_ptr, eob_ptr, scan, iscan)
-
-template <QuantizeFuncHbd fn>
-void highbd_quan16x16_wrapper(QUAN_PARAM_LIST) {
- const int log_scale = 0;
- HBD_QUAN_FUNC;
-}
-
-template <QuantizeFuncHbd fn>
-void highbd_quan32x32_wrapper(QUAN_PARAM_LIST) {
- const int log_scale = 1;
- HBD_QUAN_FUNC;
-}
-
-template <QuantizeFuncHbd fn>
-void highbd_quan64x64_wrapper(QUAN_PARAM_LIST) {
- const int log_scale = 2;
- HBD_QUAN_FUNC;
-}
-
-typedef enum { TYPE_B, TYPE_DC, TYPE_FP } QuantType;
-
-using ::testing::tuple;
-typedef tuple<QuantizeFunc, QuantizeFunc, TX_SIZE, QuantType, aom_bit_depth_t>
- QuantizeParam;
-
-typedef struct {
- QUANTS quant;
- Dequants dequant;
-} QuanTable;
-
-const int kTestNum = 1000;
-
-class QuantizeTest : public ::testing::TestWithParam<QuantizeParam> {
- protected:
- QuantizeTest()
- : quant_ref_(GET_PARAM(0)), quant_(GET_PARAM(1)), tx_size_(GET_PARAM(2)),
- type_(GET_PARAM(3)), bd_(GET_PARAM(4)) {}
-
- virtual ~QuantizeTest() {}
-
- virtual void SetUp() {
- qtab_ = reinterpret_cast<QuanTable *>(aom_memalign(32, sizeof(*qtab_)));
- const int n_coeffs = coeff_num();
- coeff_ = reinterpret_cast<tran_low_t *>(
- aom_memalign(32, 6 * n_coeffs * sizeof(tran_low_t)));
- InitQuantizer();
- }
-
- virtual void TearDown() {
- aom_free(qtab_);
- qtab_ = NULL;
- aom_free(coeff_);
- coeff_ = NULL;
- libaom_test::ClearSystemState();
- }
-
- void InitQuantizer() {
- av1_build_quantizer(bd_, 0, 0, 0, 0, 0, &qtab_->quant, &qtab_->dequant);
- }
-
- void QuantizeRun(bool is_loop, int q = 0, int test_num = 1) {
- tran_low_t *coeff_ptr = coeff_;
- const intptr_t n_coeffs = coeff_num();
-
- tran_low_t *qcoeff_ref = coeff_ptr + n_coeffs;
- tran_low_t *dqcoeff_ref = qcoeff_ref + n_coeffs;
-
- tran_low_t *qcoeff = dqcoeff_ref + n_coeffs;
- tran_low_t *dqcoeff = qcoeff + n_coeffs;
- uint16_t *eob = (uint16_t *)(dqcoeff + n_coeffs);
-
- // Testing uses 2-D DCT scan order table
- const SCAN_ORDER *const sc = get_default_scan(tx_size_, DCT_DCT);
-
- // Testing uses luminance quantization table
- const int16_t *zbin = qtab_->quant.y_zbin[q];
-
- const int16_t *round = 0;
- const int16_t *quant = 0;
- if (type_ == TYPE_B) {
- round = qtab_->quant.y_round[q];
- quant = qtab_->quant.y_quant[q];
- } else if (type_ == TYPE_FP) {
- round = qtab_->quant.y_round_fp[q];
- quant = qtab_->quant.y_quant_fp[q];
- }
-
- const int16_t *quant_shift = qtab_->quant.y_quant_shift[q];
- const int16_t *dequant = qtab_->dequant.y_dequant_QTX[q];
-
- for (int i = 0; i < test_num; ++i) {
- if (is_loop) FillCoeffRandom();
-
- memset(qcoeff_ref, 0, 5 * n_coeffs * sizeof(*qcoeff_ref));
-
- quant_ref_(coeff_ptr, n_coeffs, zbin, round, quant, quant_shift,
- qcoeff_ref, dqcoeff_ref, dequant, &eob[0], sc->scan,
- sc->iscan);
-
- ASM_REGISTER_STATE_CHECK(quant_(coeff_ptr, n_coeffs, zbin, round, quant,
- quant_shift, qcoeff, dqcoeff, dequant,
- &eob[1], sc->scan, sc->iscan));
-
- for (int j = 0; j < n_coeffs; ++j) {
- ASSERT_EQ(qcoeff_ref[j], qcoeff[j])
- << "Q mismatch on test: " << i << " at position: " << j
- << " Q: " << q << " coeff: " << coeff_ptr[j];
- }
-
- for (int j = 0; j < n_coeffs; ++j) {
- ASSERT_EQ(dqcoeff_ref[j], dqcoeff[j])
- << "Dq mismatch on test: " << i << " at position: " << j
- << " Q: " << q << " coeff: " << coeff_ptr[j];
- }
-
- ASSERT_EQ(eob[0], eob[1])
- << "eobs mismatch on test: " << i << " Q: " << q;
- }
- }
-
- void CompareResults(const tran_low_t *buf_ref, const tran_low_t *buf,
- int size, const char *text, int q, int number) {
- int i;
- for (i = 0; i < size; ++i) {
- ASSERT_EQ(buf_ref[i], buf[i]) << text << " mismatch on test: " << number
- << " at position: " << i << " Q: " << q;
- }
- }
-
- int coeff_num() const { return av1_get_max_eob(tx_size_); }
-
- void FillCoeff(tran_low_t c) {
- const int n_coeffs = coeff_num();
- for (int i = 0; i < n_coeffs; ++i) {
- coeff_[i] = c;
- }
- }
-
- void FillCoeffRandom() {
- const int n_coeffs = coeff_num();
- FillCoeffZero();
- int num = rnd_.Rand16() % n_coeffs;
- for (int i = 0; i < num; ++i) {
- coeff_[i] = GetRandomCoeff();
- }
- }
-
- void FillCoeffZero() { FillCoeff(0); }
-
- void FillCoeffConstant() {
- tran_low_t c = GetRandomCoeff();
- FillCoeff(c);
- }
-
- void FillDcOnly() {
- FillCoeffZero();
- coeff_[0] = GetRandomCoeff();
- }
-
- void FillDcLargeNegative() {
- FillCoeffZero();
- // Generate a qcoeff which contains 512/-512 (0x0100/0xFE00) to catch issues
- // like BUG=883 where the constant being compared was incorrectly
- // initialized.
- coeff_[0] = -8191;
- }
-
- tran_low_t GetRandomCoeff() {
- tran_low_t coeff;
- if (bd_ == AOM_BITS_8) {
- coeff =
- clamp(static_cast<int16_t>(rnd_.Rand16()), INT16_MIN + 1, INT16_MAX);
- } else {
- tran_low_t min = -(1 << (7 + bd_));
- tran_low_t max = -min - 1;
- coeff = clamp(static_cast<tran_low_t>(rnd_.Rand31()), min, max);
- }
- return coeff;
- }
-
- ACMRandom rnd_;
- QuanTable *qtab_;
- tran_low_t *coeff_;
- QuantizeFunc quant_ref_;
- QuantizeFunc quant_;
- TX_SIZE tx_size_;
- QuantType type_;
- aom_bit_depth_t bd_;
-};
-
-TEST_P(QuantizeTest, ZeroInput) {
- FillCoeffZero();
- QuantizeRun(false);
-}
-
-TEST_P(QuantizeTest, LargeNegativeInput) {
- FillDcLargeNegative();
- QuantizeRun(false, 0, 1);
-}
-
-TEST_P(QuantizeTest, DcOnlyInput) {
- FillDcOnly();
- QuantizeRun(false, 0, 1);
-}
-
-TEST_P(QuantizeTest, RandomInput) { QuantizeRun(true, 0, kTestNum); }
-
-TEST_P(QuantizeTest, MultipleQ) {
- for (int q = 0; q < QINDEX_RANGE; ++q) {
- QuantizeRun(true, q, kTestNum);
- }
-}
-
-// Force the coeff to be half the value of the dequant. This exposes a
-// mismatch found in av1_quantize_fp_sse2().
-TEST_P(QuantizeTest, CoeffHalfDequant) {
- FillCoeff(16);
- QuantizeRun(false, 25, 1);
-}
-
-TEST_P(QuantizeTest, DISABLED_Speed) {
- tran_low_t *coeff_ptr = coeff_;
- const intptr_t n_coeffs = coeff_num();
-
- tran_low_t *qcoeff_ref = coeff_ptr + n_coeffs;
- tran_low_t *dqcoeff_ref = qcoeff_ref + n_coeffs;
-
- tran_low_t *qcoeff = dqcoeff_ref + n_coeffs;
- tran_low_t *dqcoeff = qcoeff + n_coeffs;
- uint16_t *eob = (uint16_t *)(dqcoeff + n_coeffs);
-
- // Testing uses 2-D DCT scan order table
- const SCAN_ORDER *const sc = get_default_scan(tx_size_, DCT_DCT);
-
- // Testing uses luminance quantization table
- const int q = 22;
- const int16_t *zbin = qtab_->quant.y_zbin[q];
- const int16_t *round_fp = qtab_->quant.y_round_fp[q];
- const int16_t *quant_fp = qtab_->quant.y_quant_fp[q];
- const int16_t *quant_shift = qtab_->quant.y_quant_shift[q];
- const int16_t *dequant = qtab_->dequant.y_dequant_QTX[q];
- const int kNumTests = 5000000;
- aom_usec_timer timer;
-
- FillCoeffRandom();
-
- aom_usec_timer_start(&timer);
- for (int n = 0; n < kNumTests; ++n) {
- quant_(coeff_ptr, n_coeffs, zbin, round_fp, quant_fp, quant_shift, qcoeff,
- dqcoeff, dequant, eob, sc->scan, sc->iscan);
- }
- aom_usec_timer_mark(&timer);
-
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("Elapsed time: %d us\n", elapsed_time);
-}
-
-using ::testing::make_tuple;
-
-#if HAVE_AVX2
-const QuantizeParam kQParamArrayAvx2[] = {
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_avx2, TX_16X16, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_avx2, TX_4X16, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_avx2, TX_16X4, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_avx2, TX_32X8, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_avx2, TX_8X32, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_32x32_c, &av1_quantize_fp_32x32_avx2, TX_32X32,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&av1_quantize_fp_32x32_c, &av1_quantize_fp_32x32_avx2, TX_16X64,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&av1_quantize_fp_32x32_c, &av1_quantize_fp_32x32_avx2, TX_64X16,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&av1_quantize_fp_64x64_c, &av1_quantize_fp_64x64_avx2, TX_64X64,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&highbd_quan16x16_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan16x16_wrapper<av1_highbd_quantize_fp_avx2>, TX_16X16,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&highbd_quan16x16_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan16x16_wrapper<av1_highbd_quantize_fp_avx2>, TX_16X16,
- TYPE_FP, AOM_BITS_10),
- make_tuple(&highbd_quan16x16_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan16x16_wrapper<av1_highbd_quantize_fp_avx2>, TX_16X16,
- TYPE_FP, AOM_BITS_12),
- make_tuple(&highbd_quan32x32_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan32x32_wrapper<av1_highbd_quantize_fp_avx2>, TX_32X32,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&highbd_quan32x32_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan32x32_wrapper<av1_highbd_quantize_fp_avx2>, TX_32X32,
- TYPE_FP, AOM_BITS_10),
- make_tuple(&highbd_quan32x32_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan32x32_wrapper<av1_highbd_quantize_fp_avx2>, TX_32X32,
- TYPE_FP, AOM_BITS_12),
- make_tuple(&highbd_quan64x64_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan64x64_wrapper<av1_highbd_quantize_fp_avx2>, TX_64X64,
- TYPE_FP, AOM_BITS_8),
- make_tuple(&highbd_quan64x64_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan64x64_wrapper<av1_highbd_quantize_fp_avx2>, TX_64X64,
- TYPE_FP, AOM_BITS_10),
- make_tuple(&highbd_quan64x64_wrapper<av1_highbd_quantize_fp_c>,
- &highbd_quan64x64_wrapper<av1_highbd_quantize_fp_avx2>, TX_64X64,
- TYPE_FP, AOM_BITS_12),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_avx2, TX_16X16,
- TYPE_B, AOM_BITS_8),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_avx2, TX_16X16,
- TYPE_B, AOM_BITS_10),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_avx2, TX_16X16,
- TYPE_B, AOM_BITS_12),
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, QuantizeTest,
- ::testing::ValuesIn(kQParamArrayAvx2));
-#endif // HAVE_AVX2
-
-#if HAVE_SSE2
-const QuantizeParam kQParamArraySSE2[] = {
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_sse2, TX_16X16, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_sse2, TX_4X16, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_sse2, TX_16X4, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_sse2, TX_8X32, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&av1_quantize_fp_c, &av1_quantize_fp_sse2, TX_32X8, TYPE_FP,
- AOM_BITS_8),
- make_tuple(&aom_quantize_b_c, &aom_quantize_b_sse2, TX_16X16, TYPE_B,
- AOM_BITS_8),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_sse2, TX_16X16,
- TYPE_B, AOM_BITS_8),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_sse2, TX_16X16,
- TYPE_B, AOM_BITS_10),
- make_tuple(&aom_highbd_quantize_b_c, &aom_highbd_quantize_b_sse2, TX_16X16,
- TYPE_B, AOM_BITS_12),
- make_tuple(&aom_highbd_quantize_b_32x32_c, &aom_highbd_quantize_b_32x32_sse2,
- TX_32X32, TYPE_B, AOM_BITS_8),
- make_tuple(&aom_highbd_quantize_b_32x32_c, &aom_highbd_quantize_b_32x32_sse2,
- TX_32X32, TYPE_B, AOM_BITS_10),
- make_tuple(&aom_highbd_quantize_b_32x32_c, &aom_highbd_quantize_b_32x32_sse2,
- TX_32X32, TYPE_B, AOM_BITS_12),
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, QuantizeTest,
- ::testing::ValuesIn(kQParamArraySSE2));
-#endif
-
-#if HAVE_SSSE3 && ARCH_X86_64
-INSTANTIATE_TEST_CASE_P(
- SSSE3, QuantizeTest,
- ::testing::Values(make_tuple(&aom_quantize_b_c, &aom_quantize_b_ssse3,
- TX_16X16, TYPE_B, AOM_BITS_8)));
-
-// Like libvpx, the ssse3 and avx quantize tests do not pass.
-// https://bugs.chromium.org/p/webm/issues/detail?id=1448
-INSTANTIATE_TEST_CASE_P(
- DISABLED_SSSE3_32x32, QuantizeTest,
- ::testing::Values(make_tuple(&aom_quantize_b_32x32_c,
- &aom_quantize_b_32x32_ssse3, TX_16X16, TYPE_B,
- AOM_BITS_8)));
-
-#endif // HAVE_SSSE3 && ARCH_X86_64
-
-#if HAVE_AVX && ARCH_X86_64
-INSTANTIATE_TEST_CASE_P(
- AVX, QuantizeTest,
- ::testing::Values(
- make_tuple(&aom_quantize_b_c, &aom_quantize_b_avx, TX_16X16, TYPE_B,
- AOM_BITS_8),
- // Although these tests will not pass against _c, test them against each
- // other so there is some minor checking.
- make_tuple(&aom_quantize_b_32x32_ssse3, &aom_quantize_b_32x32_avx,
- TX_32X32, TYPE_B, AOM_BITS_8)));
-
-#endif // HAVE_AVX && ARCH_X86_64
-} // namespace
diff --git a/third_party/aom/test/reconinter_test.cc b/third_party/aom/test/reconinter_test.cc
deleted file mode 100644
index a8536e517..000000000
--- a/third_party/aom/test/reconinter_test.cc
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2017, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "config/aom_config.h"
-#include "config/av1_rtcd.h"
-
-#include "aom_ports/mem.h"
-#include "av1/common/scan.h"
-#include "av1/common/txb_common.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-using libaom_test::ACMRandom;
-
-typedef void (*buildcompdiffwtdmaskd_func)(uint8_t *mask,
- DIFFWTD_MASK_TYPE mask_type,
- const uint8_t *src0, int src0_stride,
- const uint8_t *src1, int src1_stride,
- int h, int w);
-
-typedef ::testing::tuple<BLOCK_SIZE, buildcompdiffwtdmaskd_func>
- BuildCompDiffwtdMaskDParam;
-
-#if HAVE_SSE4_1
-::testing::internal::ParamGenerator<BuildCompDiffwtdMaskDParam> BuildParams(
- buildcompdiffwtdmaskd_func filter) {
- return ::testing::Combine(::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL),
- ::testing::Values(filter));
-}
-#endif
-
-class BuildCompDiffwtdMaskTest
- : public ::testing::TestWithParam<BuildCompDiffwtdMaskDParam> {
- public:
- virtual ~BuildCompDiffwtdMaskTest() {}
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
- void RunTest(buildcompdiffwtdmaskd_func test_impl, const int is_speed,
- const DIFFWTD_MASK_TYPE type);
-
- private:
- ACMRandom rnd_;
-};
-
-typedef void (*buildcompdiffwtdmaskd16_func)(
- uint8_t *mask, DIFFWTD_MASK_TYPE mask_type, const CONV_BUF_TYPE *src0,
- int src0_stride, const CONV_BUF_TYPE *src1, int src1_stride, int h, int w,
- ConvolveParams *conv_params, int bd);
-
-typedef ::testing::tuple<int, buildcompdiffwtdmaskd16_func, BLOCK_SIZE>
- BuildCompDiffwtdMaskD16Param;
-
-#if HAVE_SSE4_1 || HAVE_NEON
-::testing::internal::ParamGenerator<BuildCompDiffwtdMaskD16Param> BuildParams(
- buildcompdiffwtdmaskd16_func filter) {
- return ::testing::Combine(::testing::Range(8, 13, 2),
- ::testing::Values(filter),
- ::testing::Range(BLOCK_4X4, BLOCK_SIZES_ALL));
-}
-#endif
-class BuildCompDiffwtdMaskD16Test
- : public ::testing::TestWithParam<BuildCompDiffwtdMaskD16Param> {
- public:
- ~BuildCompDiffwtdMaskD16Test() {}
- virtual void TearDown() { libaom_test::ClearSystemState(); }
- void SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
-
- protected:
- void RunCheckOutput(buildcompdiffwtdmaskd16_func test_impl);
- void RunSpeedTest(buildcompdiffwtdmaskd16_func test_impl,
- DIFFWTD_MASK_TYPE mask_type);
- libaom_test::ACMRandom rnd_;
-}; // class BuildCompDiffwtdMaskD16Test
-
-void BuildCompDiffwtdMaskD16Test::RunCheckOutput(
- buildcompdiffwtdmaskd16_func test_impl) {
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- const int width = block_size_wide[block_idx];
- const int height = block_size_high[block_idx];
- DECLARE_ALIGNED(16, uint8_t, mask_ref[2 * MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, mask_test[2 * MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, src0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, src1[MAX_SB_SQUARE]);
-
- ConvolveParams conv_params = get_conv_params_no_round(0, 0, NULL, 0, 1, bd);
-
- int in_precision =
- bd + 2 * FILTER_BITS - conv_params.round_0 - conv_params.round_1 + 2;
-
- for (int i = 0; i < MAX_SB_SQUARE; i++) {
- src0[i] = rnd_.Rand16() & ((1 << in_precision) - 1);
- src1[i] = rnd_.Rand16() & ((1 << in_precision) - 1);
- }
-
- for (int mask_type = 0; mask_type < DIFFWTD_MASK_TYPES; mask_type++) {
- av1_build_compound_diffwtd_mask_d16_c(
- mask_ref, (DIFFWTD_MASK_TYPE)mask_type, src0, width, src1, width,
- height, width, &conv_params, bd);
-
- test_impl(mask_test, (DIFFWTD_MASK_TYPE)mask_type, src0, width, src1, width,
- height, width, &conv_params, bd);
-
- for (int r = 0; r < height; ++r) {
- for (int c = 0; c < width; ++c) {
- ASSERT_EQ(mask_ref[c + r * width], mask_test[c + r * width])
- << "Mismatch at unit tests for BuildCompDiffwtdMaskD16Test\n"
- << " Pixel mismatch at index "
- << "[" << r << "," << c << "] "
- << " @ " << width << "x" << height << " inv " << mask_type;
- }
- }
- }
-}
-
-void BuildCompDiffwtdMaskD16Test::RunSpeedTest(
- buildcompdiffwtdmaskd16_func test_impl, DIFFWTD_MASK_TYPE mask_type) {
- const int block_idx = GET_PARAM(2);
- const int bd = GET_PARAM(0);
- const int width = block_size_wide[block_idx];
- const int height = block_size_high[block_idx];
- DECLARE_ALIGNED(16, uint8_t, mask[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, src0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(32, uint16_t, src1[MAX_SB_SQUARE]);
-
- ConvolveParams conv_params = get_conv_params_no_round(0, 0, NULL, 0, 1, bd);
-
- int in_precision =
- bd + 2 * FILTER_BITS - conv_params.round_0 - conv_params.round_1 + 2;
-
- for (int i = 0; i < MAX_SB_SQUARE; i++) {
- src0[i] = rnd_.Rand16() & ((1 << in_precision) - 1);
- src1[i] = rnd_.Rand16() & ((1 << in_precision) - 1);
- }
-
- const int num_loops = 10000000 / (width + height);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- av1_build_compound_diffwtd_mask_d16_c(mask, mask_type, src0, width, src1,
- width, height, width, &conv_params,
- bd);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(mask, mask_type, src0, width, src1, width, height, width,
- &conv_params, bd);
-
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("av1_build_compound_diffwtd_mask_d16 %3dx%-3d: %7.2f \n", width,
- height, elapsed_time / double(elapsed_time1));
-}
-#if HAVE_SSE4_1
-void BuildCompDiffwtdMaskTest::RunTest(buildcompdiffwtdmaskd_func test_impl,
- const int is_speed,
- const DIFFWTD_MASK_TYPE type) {
- const int sb_type = GET_PARAM(0);
- const int width = block_size_wide[sb_type];
- const int height = block_size_high[sb_type];
- DECLARE_ALIGNED(16, uint8_t, mask_ref[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, mask_test[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, src0[MAX_SB_SQUARE]);
- DECLARE_ALIGNED(16, uint8_t, src1[MAX_SB_SQUARE]);
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- for (int i = 0; i < width * height; i++) {
- src0[i] = rnd.Rand8();
- src1[i] = rnd.Rand8();
- }
- const int run_times = is_speed ? (10000000 / (width + height)) : 1;
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- av1_build_compound_diffwtd_mask_c(mask_ref, type, src0, width, src1, width,
- height, width);
- }
- const double t1 = get_time_mark(&timer);
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- test_impl(mask_test, type, src0, width, src1, width, height, width);
- }
- const double t2 = get_time_mark(&timer);
- if (is_speed) {
- printf("mask %d %3dx%-3d:%7.2f/%7.2fns", type, width, height, t1, t2);
- printf("(%3.2f)\n", t1 / t2);
- }
- for (int r = 0; r < height; ++r) {
- for (int c = 0; c < width; ++c) {
- ASSERT_EQ(mask_ref[c + r * width], mask_test[c + r * width])
- << "[" << r << "," << c << "] " << run_times << " @ " << width << "x"
- << height << " inv " << type;
- }
- }
-}
-
-TEST_P(BuildCompDiffwtdMaskTest, match) {
- RunTest(GET_PARAM(1), 0, DIFFWTD_38);
- RunTest(GET_PARAM(1), 0, DIFFWTD_38_INV);
-}
-TEST_P(BuildCompDiffwtdMaskTest, DISABLED_Speed) {
- RunTest(GET_PARAM(1), 1, DIFFWTD_38);
- RunTest(GET_PARAM(1), 1, DIFFWTD_38_INV);
-}
-#endif
-TEST_P(BuildCompDiffwtdMaskD16Test, CheckOutput) {
- RunCheckOutput(GET_PARAM(1));
-}
-
-TEST_P(BuildCompDiffwtdMaskD16Test, DISABLED_Speed) {
- RunSpeedTest(GET_PARAM(1), DIFFWTD_38);
- RunSpeedTest(GET_PARAM(1), DIFFWTD_38_INV);
-}
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, BuildCompDiffwtdMaskTest,
- BuildParams(av1_build_compound_diffwtd_mask_sse4_1));
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, BuildCompDiffwtdMaskD16Test,
- BuildParams(av1_build_compound_diffwtd_mask_d16_sse4_1));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, BuildCompDiffwtdMaskTest,
- BuildParams(av1_build_compound_diffwtd_mask_avx2));
-
-INSTANTIATE_TEST_CASE_P(AVX2, BuildCompDiffwtdMaskD16Test,
- BuildParams(av1_build_compound_diffwtd_mask_d16_avx2));
-#endif
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, BuildCompDiffwtdMaskD16Test,
- BuildParams(av1_build_compound_diffwtd_mask_d16_neon));
-#endif
-
-} // namespace
diff --git a/third_party/aom/test/register_state_check.h b/third_party/aom/test/register_state_check.h
deleted file mode 100644
index d404621dd..000000000
--- a/third_party/aom/test/register_state_check.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_REGISTER_STATE_CHECK_H_
-#define AOM_TEST_REGISTER_STATE_CHECK_H_
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#include "aom/aom_integer.h"
-
-// ASM_REGISTER_STATE_CHECK(asm_function)
-// Minimally validates the environment pre & post function execution. This
-// variant should be used with assembly functions which are not expected to
-// fully restore the system state. See platform implementations of
-// RegisterStateCheck for details.
-//
-// API_REGISTER_STATE_CHECK(api_function)
-// Performs all the checks done by ASM_REGISTER_STATE_CHECK() and any
-// additional checks to ensure the environment is in a consistent state pre &
-// post function execution. This variant should be used with API functions.
-// See platform implementations of RegisterStateCheckXXX for details.
-//
-
-#if defined(_WIN64) && ARCH_X86_64
-
-#undef NOMINMAX
-#define NOMINMAX
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winnt.h>
-
-inline bool operator==(const M128A &lhs, const M128A &rhs) {
- return (lhs.Low == rhs.Low && lhs.High == rhs.High);
-}
-
-namespace libaom_test {
-
-// Compares the state of xmm[6-15] at construction with their state at
-// destruction. These registers should be preserved by the callee on
-// Windows x64.
-class RegisterStateCheck {
- public:
- RegisterStateCheck() { initialized_ = StoreRegisters(&pre_context_); }
- ~RegisterStateCheck() { Check(); }
-
- private:
- static bool StoreRegisters(CONTEXT *const context) {
- const HANDLE this_thread = GetCurrentThread();
- EXPECT_TRUE(this_thread != NULL);
- context->ContextFlags = CONTEXT_FLOATING_POINT;
- const bool context_saved = GetThreadContext(this_thread, context) == TRUE;
- EXPECT_TRUE(context_saved) << "GetLastError: " << GetLastError();
- return context_saved;
- }
-
- // Compares the register state. Returns true if the states match.
- void Check() const {
- ASSERT_TRUE(initialized_);
- CONTEXT post_context;
- ASSERT_TRUE(StoreRegisters(&post_context));
-
- const M128A *xmm_pre = &pre_context_.Xmm6;
- const M128A *xmm_post = &post_context.Xmm6;
- for (int i = 6; i <= 15; ++i) {
- EXPECT_EQ(*xmm_pre, *xmm_post) << "xmm" << i << " has been modified!";
- ++xmm_pre;
- ++xmm_post;
- }
- }
-
- bool initialized_;
- CONTEXT pre_context_;
-};
-
-#define ASM_REGISTER_STATE_CHECK(statement) \
- do { \
- libaom_test::RegisterStateCheck reg_check; \
- statement; \
- } while (false)
-
-} // namespace libaom_test
-
-#else
-
-namespace libaom_test {
-
-class RegisterStateCheck {};
-#define ASM_REGISTER_STATE_CHECK(statement) statement
-
-} // namespace libaom_test
-
-#endif // _WIN64 && ARCH_X86_64
-
-#if ARCH_X86 || ARCH_X86_64
-#if defined(__GNUC__)
-
-namespace libaom_test {
-
-// Checks the FPU tag word pre/post execution to ensure emms has been called.
-class RegisterStateCheckMMX {
- public:
- RegisterStateCheckMMX() {
- __asm__ volatile("fstenv %0" : "=rm"(pre_fpu_env_));
- }
- ~RegisterStateCheckMMX() { Check(); }
-
- private:
- // Checks the FPU tag word pre/post execution, returning false if not cleared
- // to 0xffff.
- void Check() const {
- EXPECT_EQ(0xffff, pre_fpu_env_[4])
- << "FPU was in an inconsistent state prior to call";
-
- uint16_t post_fpu_env[14];
- __asm__ volatile("fstenv %0" : "=rm"(post_fpu_env));
- EXPECT_EQ(0xffff, post_fpu_env[4])
- << "FPU was left in an inconsistent state after call";
- }
-
- uint16_t pre_fpu_env_[14];
-};
-
-#define API_REGISTER_STATE_CHECK(statement) \
- do { \
- libaom_test::RegisterStateCheckMMX reg_check; \
- ASM_REGISTER_STATE_CHECK(statement); \
- } while (false)
-
-} // namespace libaom_test
-
-#endif // __GNUC__
-#endif // ARCH_X86 || ARCH_X86_64
-
-#ifndef API_REGISTER_STATE_CHECK
-#define API_REGISTER_STATE_CHECK ASM_REGISTER_STATE_CHECK
-#endif
-
-#endif // AOM_TEST_REGISTER_STATE_CHECK_H_
diff --git a/third_party/aom/test/resize_test.cc b/third_party/aom/test/resize_test.cc
deleted file mode 100644
index b270b8362..000000000
--- a/third_party/aom/test/resize_test.cc
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <climits>
-#include <vector>
-#include "aom_dsp/aom_dsp_common.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/video_source.h"
-#include "test/util.h"
-
-// Enable(1) or Disable(0) writing of the compressed bitstream.
-#define WRITE_COMPRESSED_STREAM 0
-
-namespace {
-
-#if WRITE_COMPRESSED_STREAM
-static void mem_put_le16(char *const mem, unsigned int val) {
- mem[0] = val;
- mem[1] = val >> 8;
-}
-
-static void mem_put_le32(char *const mem, unsigned int val) {
- mem[0] = val;
- mem[1] = val >> 8;
- mem[2] = val >> 16;
- mem[3] = val >> 24;
-}
-
-static void write_ivf_file_header(const aom_codec_enc_cfg_t *const cfg,
- int frame_cnt, FILE *const outfile) {
- char header[32];
-
- header[0] = 'D';
- header[1] = 'K';
- header[2] = 'I';
- header[3] = 'F';
- mem_put_le16(header + 4, 0); /* version */
- mem_put_le16(header + 6, 32); /* headersize */
- mem_put_le32(header + 8, 0x30395056); /* fourcc (av1) */
- mem_put_le16(header + 12, cfg->g_w); /* width */
- mem_put_le16(header + 14, cfg->g_h); /* height */
- mem_put_le32(header + 16, cfg->g_timebase.den); /* rate */
- mem_put_le32(header + 20, cfg->g_timebase.num); /* scale */
- mem_put_le32(header + 24, frame_cnt); /* length */
- mem_put_le32(header + 28, 0); /* unused */
-
- (void)fwrite(header, 1, 32, outfile);
-}
-
-static void write_ivf_frame_size(FILE *const outfile, const size_t size) {
- char header[4];
- mem_put_le32(header, static_cast<unsigned int>(size));
- (void)fwrite(header, 1, 4, outfile);
-}
-
-static void write_ivf_frame_header(const aom_codec_cx_pkt_t *const pkt,
- FILE *const outfile) {
- char header[12];
- aom_codec_pts_t pts;
-
- if (pkt->kind != AOM_CODEC_CX_FRAME_PKT) return;
-
- pts = pkt->data.frame.pts;
- mem_put_le32(header, static_cast<unsigned int>(pkt->data.frame.sz));
- mem_put_le32(header + 4, pts & 0xFFFFFFFF);
- mem_put_le32(header + 8, pts >> 32);
-
- (void)fwrite(header, 1, 12, outfile);
-}
-#endif // WRITE_COMPRESSED_STREAM
-
-const unsigned int kInitialWidth = 320;
-const unsigned int kInitialHeight = 240;
-
-struct FrameInfo {
- FrameInfo(aom_codec_pts_t _pts, unsigned int _w, unsigned int _h)
- : pts(_pts), w(_w), h(_h) {}
-
- aom_codec_pts_t pts;
- unsigned int w;
- unsigned int h;
-};
-
-void ScaleForFrameNumber(unsigned int frame, unsigned int initial_w,
- unsigned int initial_h, unsigned int *w,
- unsigned int *h, int flag_codec) {
- if (frame < 10) {
- *w = initial_w;
- *h = initial_h;
- return;
- }
- if (frame < 20) {
- *w = initial_w * 3 / 4;
- *h = initial_h * 3 / 4;
- return;
- }
- if (frame < 30) {
- *w = initial_w / 2;
- *h = initial_h / 2;
- return;
- }
- if (frame < 40) {
- *w = initial_w;
- *h = initial_h;
- return;
- }
- if (frame < 50) {
- *w = initial_w * 3 / 4;
- *h = initial_h * 3 / 4;
- return;
- }
- if (frame < 60) {
- *w = initial_w / 2;
- *h = initial_h / 2;
- return;
- }
- if (frame < 70) {
- *w = initial_w;
- *h = initial_h;
- return;
- }
- if (frame < 80) {
- *w = initial_w * 3 / 4;
- *h = initial_h * 3 / 4;
- return;
- }
- if (frame < 90) {
- *w = initial_w / 2;
- *h = initial_h / 2;
- return;
- }
- if (frame < 100) {
- *w = initial_w * 3 / 4;
- *h = initial_h * 3 / 4;
- return;
- }
- if (frame < 110) {
- *w = initial_w;
- *h = initial_h;
- return;
- }
- // Go down very low
- if (frame < 120) {
- *w = initial_w / 4;
- *h = initial_h / 4;
- return;
- }
- if (flag_codec == 1) {
- // Cases that only works for AV1.
- // For AV1: Swap width and height of original.
- if (frame < 140) {
- *w = initial_h;
- *h = initial_w;
- return;
- }
- }
- *w = initial_w;
- *h = initial_h;
-}
-
-class ResizingVideoSource : public ::libaom_test::DummyVideoSource {
- public:
- ResizingVideoSource() {
- SetSize(kInitialWidth, kInitialHeight);
- limit_ = 150;
- }
- int flag_codec_;
- virtual ~ResizingVideoSource() {}
-
- protected:
- virtual void Next() {
- ++frame_;
- unsigned int width;
- unsigned int height;
- ScaleForFrameNumber(frame_, kInitialWidth, kInitialHeight, &width, &height,
- flag_codec_);
- SetSize(width, height);
- FillFrame();
- }
-};
-
-class ResizeTest
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- ResizeTest() : EncoderTest(GET_PARAM(0)) {}
-
- virtual ~ResizeTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- frame_info_list_.push_back(FrameInfo(pts, img.d_w, img.d_h));
- }
-
- std::vector<FrameInfo> frame_info_list_;
-};
-
-TEST_P(ResizeTest, TestExternalResizeWorks) {
- ResizingVideoSource video;
- video.flag_codec_ = 0;
- cfg_.g_lag_in_frames = 0;
- // We use max(kInitialWidth, kInitialHeight) because during the test
- // the width and height of the frame are swapped
- cfg_.g_forced_max_frame_width = cfg_.g_forced_max_frame_height =
- AOMMAX(kInitialWidth, kInitialHeight);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- // Check we decoded the same number of frames as we attempted to encode
- ASSERT_EQ(frame_info_list_.size(), video.limit());
-
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- const unsigned int frame = static_cast<unsigned>(info->pts);
- unsigned int expected_w;
- unsigned int expected_h;
- ScaleForFrameNumber(frame, kInitialWidth, kInitialHeight, &expected_w,
- &expected_h, 0);
- EXPECT_EQ(expected_w, info->w)
- << "Frame " << frame << " had unexpected width";
- EXPECT_EQ(expected_h, info->h)
- << "Frame " << frame << " had unexpected height";
- }
-}
-
-const unsigned int kStepDownFrame = 3;
-const unsigned int kStepUpFrame = 6;
-
-class ResizeInternalTestLarge : public ResizeTest {
- protected:
-#if WRITE_COMPRESSED_STREAM
- ResizeInternalTestLarge()
- : ResizeTest(), frame0_psnr_(0.0), outfile_(NULL), out_frames_(0) {}
-#else
- ResizeInternalTestLarge() : ResizeTest(), frame0_psnr_(0.0) {}
-#endif
-
- virtual ~ResizeInternalTestLarge() {}
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
-#if WRITE_COMPRESSED_STREAM
- outfile_ = fopen("av10-2-05-resize.ivf", "wb");
-#endif
- }
-
- virtual void EndPassHook() {
-#if WRITE_COMPRESSED_STREAM
- if (outfile_) {
- if (!fseek(outfile_, 0, SEEK_SET))
- write_ivf_file_header(&cfg_, out_frames_, outfile_);
- fclose(outfile_);
- outfile_ = NULL;
- }
-#endif
- }
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (change_config_) {
- int new_q = 60;
- if (video->frame() == 0) {
- struct aom_scaling_mode mode = { AOME_ONETWO, AOME_ONETWO };
- encoder->Control(AOME_SET_SCALEMODE, &mode);
- }
- if (video->frame() == 1) {
- struct aom_scaling_mode mode = { AOME_NORMAL, AOME_NORMAL };
- encoder->Control(AOME_SET_SCALEMODE, &mode);
- cfg_.rc_min_quantizer = cfg_.rc_max_quantizer = new_q;
- encoder->Config(&cfg_);
- }
- } else {
- if (video->frame() >= kStepDownFrame && video->frame() < kStepUpFrame) {
- struct aom_scaling_mode mode = { AOME_FOURFIVE, AOME_THREEFIVE };
- encoder->Control(AOME_SET_SCALEMODE, &mode);
- }
- if (video->frame() >= kStepUpFrame) {
- struct aom_scaling_mode mode = { AOME_NORMAL, AOME_NORMAL };
- encoder->Control(AOME_SET_SCALEMODE, &mode);
- }
- }
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (frame0_psnr_ == 0.) frame0_psnr_ = pkt->data.psnr.psnr[0];
- EXPECT_NEAR(pkt->data.psnr.psnr[0], frame0_psnr_, 2.5);
- }
-
-#if WRITE_COMPRESSED_STREAM
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- ++out_frames_;
-
- // Write initial file header if first frame.
- if (pkt->data.frame.pts == 0) write_ivf_file_header(&cfg_, 0, outfile_);
-
- // Write frame header and data.
- write_ivf_frame_header(pkt, outfile_);
- (void)fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile_);
- }
-#endif
-
- double frame0_psnr_;
- bool change_config_;
-#if WRITE_COMPRESSED_STREAM
- FILE *outfile_;
- unsigned int out_frames_;
-#endif
-};
-
-TEST_P(ResizeInternalTestLarge, TestInternalResizeWorks) {
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 10);
- init_flags_ = AOM_CODEC_USE_PSNR;
- change_config_ = false;
-
- // q picked such that initial keyframe on this clip is ~30dB PSNR
- cfg_.rc_min_quantizer = cfg_.rc_max_quantizer = 48;
-
- // If the number of frames being encoded is smaller than g_lag_in_frames
- // the encoded frame is unavailable using the current API. Comparing
- // frames to detect mismatch would then not be possible. Set
- // g_lag_in_frames = 0 to get around this.
- cfg_.g_lag_in_frames = 0;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- }
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- const aom_codec_pts_t pts = info->pts;
- if (pts >= kStepDownFrame && pts < kStepUpFrame) {
- ASSERT_EQ(282U, info->w) << "Frame " << pts << " had unexpected width";
- ASSERT_EQ(173U, info->h) << "Frame " << pts << " had unexpected height";
- } else {
- EXPECT_EQ(352U, info->w) << "Frame " << pts << " had unexpected width";
- EXPECT_EQ(288U, info->h) << "Frame " << pts << " had unexpected height";
- }
- }
-}
-
-TEST_P(ResizeInternalTestLarge, TestInternalResizeChangeConfig) {
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 10);
- cfg_.g_w = 352;
- cfg_.g_h = 288;
- change_config_ = true;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-}
-
-class ResizeRealtimeTest
- : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
- public ::libaom_test::EncoderTest {
- protected:
- ResizeRealtimeTest() : EncoderTest(GET_PARAM(0)) {}
- virtual ~ResizeRealtimeTest() {}
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- encoder->Control(AV1E_SET_AQ_MODE, 3);
- encoder->Control(AOME_SET_CPUUSED, set_cpu_used_);
- }
-
- if (change_bitrate_ && video->frame() == 120) {
- change_bitrate_ = false;
- cfg_.rc_target_bitrate = 500;
- encoder->Config(&cfg_);
- }
- }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- set_cpu_used_ = GET_PARAM(2);
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- aom_codec_pts_t pts) {
- frame_info_list_.push_back(FrameInfo(pts, img.d_w, img.d_h));
- }
-
- virtual void MismatchHook(const aom_image_t *img1, const aom_image_t *img2) {
- double mismatch_psnr = compute_psnr(img1, img2);
- mismatch_psnr_ += mismatch_psnr;
- ++mismatch_nframes_;
- }
-
- unsigned int GetMismatchFrames() { return mismatch_nframes_; }
-
- void DefaultConfig() {
- cfg_.rc_buf_initial_sz = 500;
- cfg_.rc_buf_optimal_sz = 600;
- cfg_.rc_buf_sz = 1000;
- cfg_.rc_min_quantizer = 2;
- cfg_.rc_max_quantizer = 56;
- cfg_.rc_undershoot_pct = 50;
- cfg_.rc_overshoot_pct = 50;
- cfg_.rc_end_usage = AOM_CBR;
- cfg_.kf_mode = AOM_KF_AUTO;
- cfg_.g_lag_in_frames = 0;
- cfg_.kf_min_dist = cfg_.kf_max_dist = 3000;
- // Enable dropped frames.
- cfg_.rc_dropframe_thresh = 1;
- // Disable error_resilience mode.
- cfg_.g_error_resilient = 0;
- // Run at low bitrate.
- cfg_.rc_target_bitrate = 200;
- // We use max(kInitialWidth, kInitialHeight) because during the test
- // the width and height of the frame are swapped
- cfg_.g_forced_max_frame_width = cfg_.g_forced_max_frame_height =
- AOMMAX(kInitialWidth, kInitialHeight);
- }
-
- std::vector<FrameInfo> frame_info_list_;
- int set_cpu_used_;
- bool change_bitrate_;
- double mismatch_psnr_;
- int mismatch_nframes_;
-};
-
-TEST_P(ResizeRealtimeTest, TestExternalResizeWorks) {
- ResizingVideoSource video;
- video.flag_codec_ = 1;
- DefaultConfig();
- change_bitrate_ = false;
- mismatch_psnr_ = 0.0;
- mismatch_nframes_ = 0;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- // Check we decoded the same number of frames as we attempted to encode
- ASSERT_EQ(frame_info_list_.size(), video.limit());
-
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- const unsigned int frame = static_cast<unsigned>(info->pts);
- unsigned int expected_w;
- unsigned int expected_h;
- ScaleForFrameNumber(frame, kInitialWidth, kInitialHeight, &expected_w,
- &expected_h, 1);
- EXPECT_EQ(expected_w, info->w)
- << "Frame " << frame << " had unexpected width";
- EXPECT_EQ(expected_h, info->h)
- << "Frame " << frame << " had unexpected height";
- EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
- }
-}
-
-// Verify the dynamic resizer behavior for real time, 1 pass CBR mode.
-// Run at low bitrate, with resize_allowed = 1, and verify that we get
-// one resize down event.
-TEST_P(ResizeRealtimeTest, DISABLED_TestInternalResizeDown) {
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 299);
- DefaultConfig();
- cfg_.g_w = 352;
- cfg_.g_h = 288;
- change_bitrate_ = false;
- mismatch_psnr_ = 0.0;
- mismatch_nframes_ = 0;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- unsigned int last_w = cfg_.g_w;
- unsigned int last_h = cfg_.g_h;
- int resize_count = 0;
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- if (info->w != last_w || info->h != last_h) {
- // Verify that resize down occurs.
- ASSERT_LT(info->w, last_w);
- ASSERT_LT(info->h, last_h);
- last_w = info->w;
- last_h = info->h;
- resize_count++;
- }
- }
-
-#if CONFIG_AV1_DECODER
- // Verify that we get 1 resize down event in this test.
- ASSERT_EQ(1, resize_count) << "Resizing should occur.";
- EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
-#else
- printf("Warning: AV1 decoder unavailable, unable to check resize count!\n");
-#endif
-}
-
-// Verify the dynamic resizer behavior for real time, 1 pass CBR mode.
-// Start at low target bitrate, raise the bitrate in the middle of the clip,
-// scaling-up should occur after bitrate changed.
-TEST_P(ResizeRealtimeTest, DISABLED_TestInternalResizeDownUpChangeBitRate) {
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 359);
- DefaultConfig();
- cfg_.g_w = 352;
- cfg_.g_h = 288;
- change_bitrate_ = true;
- mismatch_psnr_ = 0.0;
- mismatch_nframes_ = 0;
- // Disable dropped frames.
- cfg_.rc_dropframe_thresh = 0;
- // Starting bitrate low.
- cfg_.rc_target_bitrate = 80;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- unsigned int last_w = cfg_.g_w;
- unsigned int last_h = cfg_.g_h;
- int resize_count = 0;
- for (std::vector<FrameInfo>::const_iterator info = frame_info_list_.begin();
- info != frame_info_list_.end(); ++info) {
- if (info->w != last_w || info->h != last_h) {
- resize_count++;
- if (resize_count == 1) {
- // Verify that resize down occurs.
- ASSERT_LT(info->w, last_w);
- ASSERT_LT(info->h, last_h);
- } else if (resize_count == 2) {
- // Verify that resize up occurs.
- ASSERT_GT(info->w, last_w);
- ASSERT_GT(info->h, last_h);
- }
- last_w = info->w;
- last_h = info->h;
- }
- }
-
-#if CONFIG_AV1_DECODER
- // Verify that we get 2 resize events in this test.
- ASSERT_EQ(resize_count, 2) << "Resizing should occur twice.";
- EXPECT_EQ(static_cast<unsigned int>(0), GetMismatchFrames());
-#else
- printf("Warning: AV1 decoder unavailable, unable to check resize count!\n");
-#endif
-}
-
-class ResizeCspTest : public ResizeTest {
- protected:
-#if WRITE_COMPRESSED_STREAM
- ResizeCspTest()
- : ResizeTest(), frame0_psnr_(0.0), outfile_(NULL), out_frames_(0) {}
-#else
- ResizeCspTest() : ResizeTest(), frame0_psnr_(0.0) {}
-#endif
-
- virtual ~ResizeCspTest() {}
-
- virtual void BeginPassHook(unsigned int /*pass*/) {
-#if WRITE_COMPRESSED_STREAM
- outfile_ = fopen("av11-2-05-cspchape.ivf", "wb");
-#endif
- }
-
- virtual void EndPassHook() {
-#if WRITE_COMPRESSED_STREAM
- if (outfile_) {
- if (!fseek(outfile_, 0, SEEK_SET))
- write_ivf_file_header(&cfg_, out_frames_, outfile_);
- fclose(outfile_);
- outfile_ = NULL;
- }
-#endif
- }
-
- virtual void PSNRPktHook(const aom_codec_cx_pkt_t *pkt) {
- if (frame0_psnr_ == 0.) frame0_psnr_ = pkt->data.psnr.psnr[0];
- EXPECT_NEAR(pkt->data.psnr.psnr[0], frame0_psnr_, 2.0);
- }
-
-#if WRITE_COMPRESSED_STREAM
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- ++out_frames_;
-
- // Write initial file header if first frame.
- if (pkt->data.frame.pts == 0) write_ivf_file_header(&cfg_, 0, outfile_);
-
- // Write frame header and data.
- write_ivf_frame_header(pkt, outfile_);
- (void)fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile_);
- }
-#endif
-
- double frame0_psnr_;
-#if WRITE_COMPRESSED_STREAM
- FILE *outfile_;
- unsigned int out_frames_;
-#endif
-};
-
-class ResizingCspVideoSource : public ::libaom_test::DummyVideoSource {
- public:
- explicit ResizingCspVideoSource(aom_img_fmt_t image_format) {
- SetSize(kInitialWidth, kInitialHeight);
- SetImageFormat(image_format);
- limit_ = 30;
- }
-
- virtual ~ResizingCspVideoSource() {}
-};
-
-#if (defined(DISABLE_TRELLISQ_SEARCH) && DISABLE_TRELLISQ_SEARCH)
-TEST_P(ResizeCspTest, DISABLED_TestResizeCspWorks) {
-#else
-TEST_P(ResizeCspTest, TestResizeCspWorks) {
-#endif
- const aom_img_fmt_t image_formats[] = { AOM_IMG_FMT_I420, AOM_IMG_FMT_I444 };
- for (size_t i = 0; i < GTEST_ARRAY_SIZE_(image_formats); ++i) {
- ResizingCspVideoSource video(image_formats[i]);
- init_flags_ = AOM_CODEC_USE_PSNR;
- cfg_.rc_min_quantizer = cfg_.rc_max_quantizer = 48;
- cfg_.g_lag_in_frames = 0;
- cfg_.g_profile = (image_formats[i] == AOM_IMG_FMT_I420) ? 0 : 1;
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- // Check we decoded the same number of frames as we attempted to encode
- ASSERT_EQ(frame_info_list_.size(), video.limit());
- frame_info_list_.clear();
- }
-}
-
-AV1_INSTANTIATE_TEST_CASE(ResizeTest,
- ::testing::Values(::libaom_test::kRealTime));
-AV1_INSTANTIATE_TEST_CASE(ResizeInternalTestLarge,
- ::testing::Values(::libaom_test::kOnePassGood));
-AV1_INSTANTIATE_TEST_CASE(ResizeRealtimeTest,
- ::testing::Values(::libaom_test::kRealTime),
- ::testing::Range(5, 9));
-AV1_INSTANTIATE_TEST_CASE(ResizeCspTest,
- ::testing::Values(::libaom_test::kRealTime));
-} // namespace
diff --git a/third_party/aom/test/run_encodes.sh b/third_party/aom/test/run_encodes.sh
deleted file mode 100755
index 2096d8b15..000000000
--- a/third_party/aom/test/run_encodes.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2016, Alliance for Open Media. All rights reserved.
-#
-# This source code is subject to the terms of the BSD 2 Clause License and
-# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-# was not distributed with this source code in the LICENSE file, you can
-# obtain it at www.aomedia.org/license/software. If the Alliance for Open
-# Media Patent License 1.0 was not distributed with this source code in the
-# PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-#
-# Author: jimbankoski@google.com (Jim Bankoski)
-
-if [[ $# -ne 4 ]]; then
- echo Encodes all the y4m files in the directory at the bitrates specified by
- echo the first 3 parameters and stores the results in a subdirectory named by
- echo the 4th parameter:
- echo
- echo Usage: run_encodes.sh start-kbps end-kbps step-kbps output-directory
- echo Example: run_encodes.sh 200 500 50 baseline
- exit
-fi
-
-s=$1
-e=$2
-step=$3
-newdir=$4
-
-for i in ./*y4m; do
- for (( b=$s; b<= $e; b+= $step ))
- do
- best_encode.sh $i $b
- done
- mv opsnr.stt $i.stt
-done
-
-mkdir $newdir
-mv *.stt $newdir
-mv *.webm $newdir
diff --git a/third_party/aom/test/sad_test.cc b/third_party/aom/test/sad_test.cc
deleted file mode 100644
index 845fe79da..000000000
--- a/third_party/aom/test/sad_test.cc
+++ /dev/null
@@ -1,1528 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string.h>
-#include <limits.h>
-#include <stdio.h>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "aom/aom_codec.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/mem.h"
-
-typedef unsigned int (*SadMxNFunc)(const uint8_t *src_ptr, int src_stride,
- const uint8_t *ref_ptr, int ref_stride);
-typedef ::testing::tuple<int, int, SadMxNFunc, int> SadMxNParam;
-
-typedef uint32_t (*SadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
- const uint8_t *ref_ptr, int ref_stride,
- const uint8_t *second_pred);
-typedef ::testing::tuple<int, int, SadMxNAvgFunc, int> SadMxNAvgParam;
-
-typedef void (*JntCompAvgFunc)(uint8_t *comp_pred, const uint8_t *pred,
- int width, int height, const uint8_t *ref,
- int ref_stride,
- const JNT_COMP_PARAMS *jcp_param);
-typedef ::testing::tuple<int, int, JntCompAvgFunc, int> JntCompAvgParam;
-
-typedef unsigned int (*JntSadMxhFunc)(const uint8_t *src_ptr, int src_stride,
- const uint8_t *ref_ptr, int ref_stride,
- int width, int height);
-typedef ::testing::tuple<int, int, JntSadMxhFunc, int> JntSadMxhParam;
-
-typedef uint32_t (*JntSadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
- const uint8_t *ref_ptr, int ref_stride,
- const uint8_t *second_pred,
- const JNT_COMP_PARAMS *jcp_param);
-typedef ::testing::tuple<int, int, JntSadMxNAvgFunc, int> JntSadMxNAvgParam;
-
-typedef void (*SadMxNx4Func)(const uint8_t *src_ptr, int src_stride,
- const uint8_t *const ref_ptr[], int ref_stride,
- uint32_t *sad_array);
-typedef ::testing::tuple<int, int, SadMxNx4Func, int> SadMxNx4Param;
-
-using libaom_test::ACMRandom;
-
-namespace {
-class SADTestBase : public ::testing::Test {
- public:
- SADTestBase(int width, int height, int bit_depth)
- : width_(width), height_(height), bd_(bit_depth) {}
-
- static void SetUpTestCase() {
- source_data8_ = reinterpret_cast<uint8_t *>(
- aom_memalign(kDataAlignment, kDataBlockSize));
- reference_data8_ = reinterpret_cast<uint8_t *>(
- aom_memalign(kDataAlignment, kDataBufferSize));
- second_pred8_ =
- reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
- comp_pred8_ =
- reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
- comp_pred8_test_ =
- reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
- source_data16_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
- reference_data16_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
- second_pred16_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
- comp_pred16_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
- comp_pred16_test_ = reinterpret_cast<uint16_t *>(
- aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
- }
-
- static void TearDownTestCase() {
- aom_free(source_data8_);
- source_data8_ = NULL;
- aom_free(reference_data8_);
- reference_data8_ = NULL;
- aom_free(second_pred8_);
- second_pred8_ = NULL;
- aom_free(comp_pred8_);
- comp_pred8_ = NULL;
- aom_free(comp_pred8_test_);
- comp_pred8_test_ = NULL;
- aom_free(source_data16_);
- source_data16_ = NULL;
- aom_free(reference_data16_);
- reference_data16_ = NULL;
- aom_free(second_pred16_);
- second_pred16_ = NULL;
- aom_free(comp_pred16_);
- comp_pred16_ = NULL;
- aom_free(comp_pred16_test_);
- comp_pred16_test_ = NULL;
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- // Handle up to 4 128x128 blocks, with stride up to 256
- static const int kDataAlignment = 16;
- static const int kDataBlockSize = 128 * 256;
- static const int kDataBufferSize = 4 * kDataBlockSize;
-
- virtual void SetUp() {
- if (bd_ == -1) {
- use_high_bit_depth_ = false;
- bit_depth_ = AOM_BITS_8;
- source_data_ = source_data8_;
- reference_data_ = reference_data8_;
- second_pred_ = second_pred8_;
- comp_pred_ = comp_pred8_;
- comp_pred_test_ = comp_pred8_test_;
- } else {
- use_high_bit_depth_ = true;
- bit_depth_ = static_cast<aom_bit_depth_t>(bd_);
- source_data_ = CONVERT_TO_BYTEPTR(source_data16_);
- reference_data_ = CONVERT_TO_BYTEPTR(reference_data16_);
- second_pred_ = CONVERT_TO_BYTEPTR(second_pred16_);
- comp_pred_ = CONVERT_TO_BYTEPTR(comp_pred16_);
- comp_pred_test_ = CONVERT_TO_BYTEPTR(comp_pred16_test_);
- }
- mask_ = (1 << bit_depth_) - 1;
- source_stride_ = (width_ + 31) & ~31;
- reference_stride_ = width_ * 2;
- rnd_.Reset(ACMRandom::DeterministicSeed());
- }
-
- virtual uint8_t *GetReference(int block_idx) {
- if (use_high_bit_depth_)
- return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_) +
- block_idx * kDataBlockSize);
- return reference_data_ + block_idx * kDataBlockSize;
- }
-
- // Sum of Absolute Differences. Given two blocks, calculate the absolute
- // difference between two pixels in the same relative location; accumulate.
- unsigned int ReferenceSAD(int block_idx) {
- unsigned int sad = 0;
- const uint8_t *const reference8 = GetReference(block_idx);
- const uint8_t *const source8 = source_data_;
- const uint16_t *const reference16 =
- CONVERT_TO_SHORTPTR(GetReference(block_idx));
- const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- sad += abs(source8[h * source_stride_ + w] -
- reference8[h * reference_stride_ + w]);
- } else {
- sad += abs(source16[h * source_stride_ + w] -
- reference16[h * reference_stride_ + w]);
- }
- }
- }
- return sad;
- }
-
- // Sum of Absolute Differences Average. Given two blocks, and a prediction
- // calculate the absolute difference between one pixel and average of the
- // corresponding and predicted pixels; accumulate.
- unsigned int ReferenceSADavg(int block_idx) {
- unsigned int sad = 0;
- const uint8_t *const reference8 = GetReference(block_idx);
- const uint8_t *const source8 = source_data_;
- const uint8_t *const second_pred8 = second_pred_;
- const uint16_t *const reference16 =
- CONVERT_TO_SHORTPTR(GetReference(block_idx));
- const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
- const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- const int tmp = second_pred8[h * width_ + w] +
- reference8[h * reference_stride_ + w];
- const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
- sad += abs(source8[h * source_stride_ + w] - comp_pred);
- } else {
- const int tmp = second_pred16[h * width_ + w] +
- reference16[h * reference_stride_ + w];
- const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
- sad += abs(source16[h * source_stride_ + w] - comp_pred);
- }
- }
- }
- return sad;
- }
-
- void ReferenceJntCompAvg(int block_idx) {
- const uint8_t *const reference8 = GetReference(block_idx);
- const uint8_t *const second_pred8 = second_pred_;
- uint8_t *const comp_pred8 = comp_pred_;
- const uint16_t *const reference16 =
- CONVERT_TO_SHORTPTR(GetReference(block_idx));
- const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
- uint16_t *const comp_pred16 = CONVERT_TO_SHORTPTR(comp_pred_);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- const int tmp =
- second_pred8[h * width_ + w] * jcp_param_.bck_offset +
- reference8[h * reference_stride_ + w] * jcp_param_.fwd_offset;
- comp_pred8[h * width_ + w] = ROUND_POWER_OF_TWO(tmp, 4);
- } else {
- const int tmp =
- second_pred16[h * width_ + w] * jcp_param_.bck_offset +
- reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
- comp_pred16[h * width_ + w] = ROUND_POWER_OF_TWO(tmp, 4);
- }
- }
- }
- }
-
- unsigned int ReferenceJntSADavg(int block_idx) {
- unsigned int sad = 0;
- const uint8_t *const reference8 = GetReference(block_idx);
- const uint8_t *const source8 = source_data_;
- const uint8_t *const second_pred8 = second_pred_;
- const uint16_t *const reference16 =
- CONVERT_TO_SHORTPTR(GetReference(block_idx));
- const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
- const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- const int tmp =
- second_pred8[h * width_ + w] * jcp_param_.bck_offset +
- reference8[h * reference_stride_ + w] * jcp_param_.fwd_offset;
- const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 4);
- sad += abs(source8[h * source_stride_ + w] - comp_pred);
- } else {
- const int tmp =
- second_pred16[h * width_ + w] * jcp_param_.bck_offset +
- reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
- const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 4);
- sad += abs(source16[h * source_stride_ + w] - comp_pred);
- }
- }
- }
- return sad;
- }
-
- void FillConstant(uint8_t *data, int stride, uint16_t fill_constant) {
- uint8_t *data8 = data;
- uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- data8[h * stride + w] = static_cast<uint8_t>(fill_constant);
- } else {
- data16[h * stride + w] = fill_constant;
- }
- }
- }
- }
-
- void FillRandom(uint8_t *data, int stride) {
- uint8_t *data8 = data;
- uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
- for (int h = 0; h < height_; ++h) {
- for (int w = 0; w < width_; ++w) {
- if (!use_high_bit_depth_) {
- data8[h * stride + w] = rnd_.Rand8();
- } else {
- data16[h * stride + w] = rnd_.Rand16() & mask_;
- }
- }
- }
- }
-
- int width_, height_, mask_, bd_;
- aom_bit_depth_t bit_depth_;
- static uint8_t *source_data_;
- static uint8_t *reference_data_;
- static uint8_t *second_pred_;
- int source_stride_;
- bool use_high_bit_depth_;
- static uint8_t *source_data8_;
- static uint8_t *reference_data8_;
- static uint8_t *second_pred8_;
- static uint16_t *source_data16_;
- static uint16_t *reference_data16_;
- static uint16_t *second_pred16_;
- int reference_stride_;
- static uint8_t *comp_pred_;
- static uint8_t *comp_pred8_;
- static uint16_t *comp_pred16_;
- static uint8_t *comp_pred_test_;
- static uint8_t *comp_pred8_test_;
- static uint16_t *comp_pred16_test_;
- JNT_COMP_PARAMS jcp_param_;
-
- ACMRandom rnd_;
-};
-
-class SADx4Test : public ::testing::WithParamInterface<SadMxNx4Param>,
- public SADTestBase {
- public:
- SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- void SADs(unsigned int *results) {
- const uint8_t *references[] = { GetReference(0), GetReference(1),
- GetReference(2), GetReference(3) };
-
- ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
- source_data_, source_stride_, references, reference_stride_, results));
- }
-
- void CheckSADs() {
- unsigned int reference_sad, exp_sad[4];
-
- SADs(exp_sad);
- for (int block = 0; block < 4; ++block) {
- reference_sad = ReferenceSAD(block);
-
- EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
- }
- }
-};
-
-class SADTest : public ::testing::WithParamInterface<SadMxNParam>,
- public SADTestBase {
- public:
- SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- unsigned int SAD(int block_idx) {
- unsigned int ret;
- const uint8_t *const reference = GetReference(block_idx);
-
- ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
- reference, reference_stride_));
- return ret;
- }
-
- void CheckSAD() {
- const unsigned int reference_sad = ReferenceSAD(0);
- const unsigned int exp_sad = SAD(0);
-
- ASSERT_EQ(reference_sad, exp_sad);
- }
-
- void SpeedSAD() {
- int test_count = 20000000;
- while (test_count > 0) {
- SAD(0);
- test_count -= 1;
- }
- }
-};
-
-class SADavgTest : public ::testing::WithParamInterface<SadMxNAvgParam>,
- public SADTestBase {
- public:
- SADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- unsigned int SAD_avg(int block_idx) {
- unsigned int ret;
- const uint8_t *const reference = GetReference(block_idx);
-
- ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
- reference, reference_stride_,
- second_pred_));
- return ret;
- }
-
- void CheckSAD() {
- const unsigned int reference_sad = ReferenceSADavg(0);
- const unsigned int exp_sad = SAD_avg(0);
-
- ASSERT_EQ(reference_sad, exp_sad);
- }
-};
-
-class JntCompAvgTest : public ::testing::WithParamInterface<JntCompAvgParam>,
- public SADTestBase {
- public:
- JntCompAvgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- void jnt_comp_avg(int block_idx) {
- const uint8_t *const reference = GetReference(block_idx);
-
- ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(comp_pred_test_, second_pred_, width_,
- height_, reference, reference_stride_,
- &jcp_param_));
- }
-
- void CheckCompAvg() {
- for (int j = 0; j < 2; ++j) {
- for (int i = 0; i < 4; ++i) {
- jcp_param_.fwd_offset = quant_dist_lookup_table[j][i][0];
- jcp_param_.bck_offset = quant_dist_lookup_table[j][i][1];
-
- ReferenceJntCompAvg(0);
- jnt_comp_avg(0);
-
- for (int y = 0; y < height_; ++y)
- for (int x = 0; x < width_; ++x)
- ASSERT_EQ(comp_pred_[y * width_ + x],
- comp_pred_test_[y * width_ + x]);
- }
- }
- }
-};
-
-class JntSADTest : public ::testing::WithParamInterface<JntSadMxhParam>,
- public SADTestBase {
- public:
- JntSADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- unsigned int SAD(int block_idx) {
- unsigned int ret;
- const uint8_t *const reference = GetReference(block_idx);
-
- ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
- reference, reference_stride_,
- GET_PARAM(0), GET_PARAM(1)));
- return ret;
- }
-
- void CheckSAD() {
- const unsigned int reference_sad = ReferenceSAD(0);
- const unsigned int exp_sad = SAD(0);
-
- ASSERT_EQ(reference_sad, exp_sad);
- }
-
- void SpeedSAD() {
- int test_count = 20000000;
- while (test_count > 0) {
- SAD(0);
- test_count -= 1;
- }
- }
-};
-
-class JntSADavgTest : public ::testing::WithParamInterface<JntSadMxNAvgParam>,
- public SADTestBase {
- public:
- JntSADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
-
- protected:
- unsigned int jnt_SAD_avg(int block_idx) {
- unsigned int ret;
- const uint8_t *const reference = GetReference(block_idx);
-
- ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
- reference, reference_stride_,
- second_pred_, &jcp_param_));
- return ret;
- }
-
- void CheckSAD() {
- for (int j = 0; j < 2; ++j) {
- for (int i = 0; i < 4; ++i) {
- jcp_param_.fwd_offset = quant_dist_lookup_table[j][i][0];
- jcp_param_.bck_offset = quant_dist_lookup_table[j][i][1];
-
- const unsigned int reference_sad = ReferenceJntSADavg(0);
- const unsigned int exp_sad = jnt_SAD_avg(0);
-
- ASSERT_EQ(reference_sad, exp_sad);
- }
- }
- }
-};
-
-uint8_t *SADTestBase::source_data_ = NULL;
-uint8_t *SADTestBase::reference_data_ = NULL;
-uint8_t *SADTestBase::second_pred_ = NULL;
-uint8_t *SADTestBase::comp_pred_ = NULL;
-uint8_t *SADTestBase::comp_pred_test_ = NULL;
-uint8_t *SADTestBase::source_data8_ = NULL;
-uint8_t *SADTestBase::reference_data8_ = NULL;
-uint8_t *SADTestBase::second_pred8_ = NULL;
-uint8_t *SADTestBase::comp_pred8_ = NULL;
-uint8_t *SADTestBase::comp_pred8_test_ = NULL;
-uint16_t *SADTestBase::source_data16_ = NULL;
-uint16_t *SADTestBase::reference_data16_ = NULL;
-uint16_t *SADTestBase::second_pred16_ = NULL;
-uint16_t *SADTestBase::comp_pred16_ = NULL;
-uint16_t *SADTestBase::comp_pred16_test_ = NULL;
-
-TEST_P(SADTest, MaxRef) {
- FillConstant(source_data_, source_stride_, 0);
- FillConstant(reference_data_, reference_stride_, mask_);
- CheckSAD();
-}
-
-TEST_P(SADTest, MaxSrc) {
- FillConstant(source_data_, source_stride_, mask_);
- FillConstant(reference_data_, reference_stride_, 0);
- CheckSAD();
-}
-
-TEST_P(SADTest, ShortRef) {
- const int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADTest, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- const int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADTest, ShortSrc) {
- const int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- int test_count = 2000;
- while (test_count > 0) {
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- test_count -= 1;
- }
- source_stride_ = tmp_stride;
-}
-
-#define SPEED_TEST (0)
-#if SPEED_TEST
-TEST_P(SADTest, Speed) {
- const int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- SpeedSAD();
- source_stride_ = tmp_stride;
-}
-#endif
-
-TEST_P(SADavgTest, MaxRef) {
- FillConstant(source_data_, source_stride_, 0);
- FillConstant(reference_data_, reference_stride_, mask_);
- FillConstant(second_pred_, width_, 0);
- CheckSAD();
-}
-TEST_P(SADavgTest, MaxSrc) {
- FillConstant(source_data_, source_stride_, mask_);
- FillConstant(reference_data_, reference_stride_, 0);
- FillConstant(second_pred_, width_, 0);
- CheckSAD();
-}
-
-TEST_P(SADavgTest, ShortRef) {
- const int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADavgTest, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- const int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADavgTest, ShortSrc) {
- const int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- int test_count = 2000;
- while (test_count > 0) {
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- test_count -= 1;
- }
- source_stride_ = tmp_stride;
-}
-
-TEST_P(JntCompAvgTest, MaxRef) {
- FillConstant(reference_data_, reference_stride_, mask_);
- FillConstant(second_pred_, width_, 0);
- CheckCompAvg();
-}
-
-TEST_P(JntCompAvgTest, MaxSecondPred) {
- FillConstant(reference_data_, reference_stride_, 0);
- FillConstant(second_pred_, width_, mask_);
- CheckCompAvg();
-}
-
-TEST_P(JntCompAvgTest, ShortRef) {
- const int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckCompAvg();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntCompAvgTest, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- const int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckCompAvg();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADTest, MaxRef) {
- FillConstant(source_data_, source_stride_, 0);
- FillConstant(reference_data_, reference_stride_, mask_);
- CheckSAD();
-}
-
-TEST_P(JntSADTest, MaxSrc) {
- FillConstant(source_data_, source_stride_, mask_);
- FillConstant(reference_data_, reference_stride_, 0);
- CheckSAD();
-}
-
-TEST_P(JntSADTest, ShortRef) {
- const int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADTest, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- const int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADTest, ShortSrc) {
- const int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- int test_count = 2000;
- while (test_count > 0) {
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- CheckSAD();
- test_count -= 1;
- }
- source_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADavgTest, MaxRef) {
- FillConstant(source_data_, source_stride_, 0);
- FillConstant(reference_data_, reference_stride_, mask_);
- FillConstant(second_pred_, width_, 0);
- CheckSAD();
-}
-TEST_P(JntSADavgTest, MaxSrc) {
- FillConstant(source_data_, source_stride_, mask_);
- FillConstant(reference_data_, reference_stride_, 0);
- FillConstant(second_pred_, width_, 0);
- CheckSAD();
-}
-
-TEST_P(JntSADavgTest, ShortRef) {
- const int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADavgTest, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- const int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(JntSADavgTest, ShortSrc) {
- const int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- int test_count = 2000;
- while (test_count > 0) {
- FillRandom(source_data_, source_stride_);
- FillRandom(reference_data_, reference_stride_);
- FillRandom(second_pred_, width_);
- CheckSAD();
- test_count -= 1;
- }
- source_stride_ = tmp_stride;
-}
-
-TEST_P(SADx4Test, MaxRef) {
- FillConstant(source_data_, source_stride_, 0);
- FillConstant(GetReference(0), reference_stride_, mask_);
- FillConstant(GetReference(1), reference_stride_, mask_);
- FillConstant(GetReference(2), reference_stride_, mask_);
- FillConstant(GetReference(3), reference_stride_, mask_);
- CheckSADs();
-}
-
-TEST_P(SADx4Test, MaxSrc) {
- FillConstant(source_data_, source_stride_, mask_);
- FillConstant(GetReference(0), reference_stride_, 0);
- FillConstant(GetReference(1), reference_stride_, 0);
- FillConstant(GetReference(2), reference_stride_, 0);
- FillConstant(GetReference(3), reference_stride_, 0);
- CheckSADs();
-}
-
-TEST_P(SADx4Test, ShortRef) {
- int tmp_stride = reference_stride_;
- reference_stride_ >>= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(GetReference(0), reference_stride_);
- FillRandom(GetReference(1), reference_stride_);
- FillRandom(GetReference(2), reference_stride_);
- FillRandom(GetReference(3), reference_stride_);
- CheckSADs();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADx4Test, UnalignedRef) {
- // The reference frame, but not the source frame, may be unaligned for
- // certain types of searches.
- int tmp_stride = reference_stride_;
- reference_stride_ -= 1;
- FillRandom(source_data_, source_stride_);
- FillRandom(GetReference(0), reference_stride_);
- FillRandom(GetReference(1), reference_stride_);
- FillRandom(GetReference(2), reference_stride_);
- FillRandom(GetReference(3), reference_stride_);
- CheckSADs();
- reference_stride_ = tmp_stride;
-}
-
-TEST_P(SADx4Test, ShortSrc) {
- int tmp_stride = source_stride_;
- source_stride_ >>= 1;
- int test_count = 1000;
- while (test_count > 0) {
- FillRandom(source_data_, source_stride_);
- FillRandom(GetReference(0), reference_stride_);
- FillRandom(GetReference(1), reference_stride_);
- FillRandom(GetReference(2), reference_stride_);
- FillRandom(GetReference(3), reference_stride_);
- CheckSADs();
- test_count -= 1;
- }
- source_stride_ = tmp_stride;
-}
-
-TEST_P(SADx4Test, SrcAlignedByWidth) {
- uint8_t *tmp_source_data = source_data_;
- source_data_ += width_;
- FillRandom(source_data_, source_stride_);
- FillRandom(GetReference(0), reference_stride_);
- FillRandom(GetReference(1), reference_stride_);
- FillRandom(GetReference(2), reference_stride_);
- FillRandom(GetReference(3), reference_stride_);
- CheckSADs();
- source_data_ = tmp_source_data;
-}
-
-using ::testing::make_tuple;
-
-//------------------------------------------------------------------------------
-// C functions
-const SadMxNParam c_tests[] = {
- make_tuple(128, 128, &aom_sad128x128_c, -1),
- make_tuple(128, 64, &aom_sad128x64_c, -1),
- make_tuple(64, 128, &aom_sad64x128_c, -1),
- make_tuple(64, 64, &aom_sad64x64_c, -1),
- make_tuple(64, 32, &aom_sad64x32_c, -1),
- make_tuple(32, 64, &aom_sad32x64_c, -1),
- make_tuple(32, 32, &aom_sad32x32_c, -1),
- make_tuple(32, 16, &aom_sad32x16_c, -1),
- make_tuple(16, 32, &aom_sad16x32_c, -1),
- make_tuple(16, 16, &aom_sad16x16_c, -1),
- make_tuple(16, 8, &aom_sad16x8_c, -1),
- make_tuple(8, 16, &aom_sad8x16_c, -1),
- make_tuple(8, 8, &aom_sad8x8_c, -1),
- make_tuple(8, 4, &aom_sad8x4_c, -1),
- make_tuple(4, 8, &aom_sad4x8_c, -1),
- make_tuple(4, 4, &aom_sad4x4_c, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128_c, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64_c, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128_c, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_c, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_c, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_c, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_c, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_c, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_c, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_c, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_c, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16_c, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8_c, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4_c, 8),
- make_tuple(4, 8, &aom_highbd_sad4x8_c, 8),
- make_tuple(4, 4, &aom_highbd_sad4x4_c, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128_c, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64_c, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128_c, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_c, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_c, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_c, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_c, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_c, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_c, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_c, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_c, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16_c, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8_c, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4_c, 10),
- make_tuple(4, 8, &aom_highbd_sad4x8_c, 10),
- make_tuple(4, 4, &aom_highbd_sad4x4_c, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128_c, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64_c, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128_c, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64_c, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_c, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_c, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_c, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_c, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_c, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_c, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_c, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16_c, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8_c, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4_c, 12),
- make_tuple(4, 8, &aom_highbd_sad4x8_c, 12),
- make_tuple(4, 4, &aom_highbd_sad4x4_c, 12),
-};
-INSTANTIATE_TEST_CASE_P(C, SADTest, ::testing::ValuesIn(c_tests));
-
-const SadMxNAvgParam avg_c_tests[] = {
- make_tuple(128, 128, &aom_sad128x128_avg_c, -1),
- make_tuple(128, 64, &aom_sad128x64_avg_c, -1),
- make_tuple(64, 128, &aom_sad64x128_avg_c, -1),
- make_tuple(64, 64, &aom_sad64x64_avg_c, -1),
- make_tuple(64, 32, &aom_sad64x32_avg_c, -1),
- make_tuple(32, 64, &aom_sad32x64_avg_c, -1),
- make_tuple(32, 32, &aom_sad32x32_avg_c, -1),
- make_tuple(32, 16, &aom_sad32x16_avg_c, -1),
- make_tuple(16, 32, &aom_sad16x32_avg_c, -1),
- make_tuple(16, 16, &aom_sad16x16_avg_c, -1),
- make_tuple(16, 8, &aom_sad16x8_avg_c, -1),
- make_tuple(8, 16, &aom_sad8x16_avg_c, -1),
- make_tuple(8, 8, &aom_sad8x8_avg_c, -1),
- make_tuple(8, 4, &aom_sad8x4_avg_c, -1),
- make_tuple(4, 8, &aom_sad4x8_avg_c, -1),
- make_tuple(4, 4, &aom_sad4x4_avg_c, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 8),
- make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 8),
- make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 10),
- make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 10),
- make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 12),
- make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 12),
- make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 12),
-};
-INSTANTIATE_TEST_CASE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));
-
-// TODO(chengchen): add highbd tests
-const JntCompAvgParam jnt_comp_avg_c_tests[] = {
- make_tuple(128, 128, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(128, 64, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(64, 128, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(64, 64, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(64, 32, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(32, 64, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(32, 32, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(32, 16, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(16, 32, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(16, 16, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(16, 8, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(8, 16, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(8, 8, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(8, 4, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(4, 8, &aom_jnt_comp_avg_pred_c, -1),
- make_tuple(4, 4, &aom_jnt_comp_avg_pred_c, -1),
-};
-
-INSTANTIATE_TEST_CASE_P(C, JntCompAvgTest,
- ::testing::ValuesIn(jnt_comp_avg_c_tests));
-
-const JntSadMxNAvgParam jnt_avg_c_tests[] = {
- make_tuple(128, 128, &aom_jnt_sad128x128_avg_c, -1),
- make_tuple(128, 64, &aom_jnt_sad128x64_avg_c, -1),
- make_tuple(64, 128, &aom_jnt_sad64x128_avg_c, -1),
- make_tuple(64, 64, &aom_jnt_sad64x64_avg_c, -1),
- make_tuple(64, 32, &aom_jnt_sad64x32_avg_c, -1),
- make_tuple(32, 64, &aom_jnt_sad32x64_avg_c, -1),
- make_tuple(32, 32, &aom_jnt_sad32x32_avg_c, -1),
- make_tuple(32, 16, &aom_jnt_sad32x16_avg_c, -1),
- make_tuple(16, 32, &aom_jnt_sad16x32_avg_c, -1),
- make_tuple(16, 16, &aom_jnt_sad16x16_avg_c, -1),
- make_tuple(16, 8, &aom_jnt_sad16x8_avg_c, -1),
- make_tuple(8, 16, &aom_jnt_sad8x16_avg_c, -1),
- make_tuple(8, 8, &aom_jnt_sad8x8_avg_c, -1),
- make_tuple(8, 4, &aom_jnt_sad8x4_avg_c, -1),
- make_tuple(4, 8, &aom_jnt_sad4x8_avg_c, -1),
- make_tuple(4, 4, &aom_jnt_sad4x4_avg_c, -1),
-};
-INSTANTIATE_TEST_CASE_P(C, JntSADavgTest, ::testing::ValuesIn(jnt_avg_c_tests));
-
-const SadMxNx4Param x4d_c_tests[] = {
- make_tuple(128, 128, &aom_sad128x128x4d_c, -1),
- make_tuple(128, 64, &aom_sad128x64x4d_c, -1),
- make_tuple(64, 128, &aom_sad64x128x4d_c, -1),
- make_tuple(64, 64, &aom_sad64x64x4d_c, -1),
- make_tuple(64, 32, &aom_sad64x32x4d_c, -1),
- make_tuple(32, 64, &aom_sad32x64x4d_c, -1),
- make_tuple(32, 32, &aom_sad32x32x4d_c, -1),
- make_tuple(32, 16, &aom_sad32x16x4d_c, -1),
- make_tuple(16, 32, &aom_sad16x32x4d_c, -1),
- make_tuple(16, 16, &aom_sad16x16x4d_c, -1),
- make_tuple(16, 8, &aom_sad16x8x4d_c, -1),
- make_tuple(8, 16, &aom_sad8x16x4d_c, -1),
- make_tuple(8, 8, &aom_sad8x8x4d_c, -1),
- make_tuple(8, 4, &aom_sad8x4x4d_c, -1),
- make_tuple(4, 8, &aom_sad4x8x4d_c, -1),
- make_tuple(4, 4, &aom_sad4x4x4d_c, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 8),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 8),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 10),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 10),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 12),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 12),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 12),
-};
-INSTANTIATE_TEST_CASE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));
-
-//------------------------------------------------------------------------------
-// ARM functions
-#if HAVE_NEON
-const SadMxNParam neon_tests[] = {
- make_tuple(64, 64, &aom_sad64x64_neon, -1),
- make_tuple(32, 32, &aom_sad32x32_neon, -1),
- make_tuple(16, 16, &aom_sad16x16_neon, -1),
- make_tuple(16, 8, &aom_sad16x8_neon, -1),
- make_tuple(8, 16, &aom_sad8x16_neon, -1),
- make_tuple(8, 8, &aom_sad8x8_neon, -1),
- make_tuple(4, 4, &aom_sad4x4_neon, -1),
-};
-INSTANTIATE_TEST_CASE_P(NEON, SADTest, ::testing::ValuesIn(neon_tests));
-
-const SadMxNx4Param x4d_neon_tests[] = {
- make_tuple(64, 64, &aom_sad64x64x4d_neon, -1),
- make_tuple(32, 32, &aom_sad32x32x4d_neon, -1),
- make_tuple(16, 16, &aom_sad16x16x4d_neon, -1),
-};
-INSTANTIATE_TEST_CASE_P(NEON, SADx4Test, ::testing::ValuesIn(x4d_neon_tests));
-#endif // HAVE_NEON
-
-//------------------------------------------------------------------------------
-// x86 functions
-#if HAVE_SSE2
-const SadMxNParam sse2_tests[] = {
- make_tuple(128, 128, &aom_sad128x128_sse2, -1),
- make_tuple(128, 64, &aom_sad128x64_sse2, -1),
- make_tuple(64, 128, &aom_sad64x128_sse2, -1),
- make_tuple(64, 64, &aom_sad64x64_sse2, -1),
- make_tuple(64, 32, &aom_sad64x32_sse2, -1),
- make_tuple(32, 64, &aom_sad32x64_sse2, -1),
- make_tuple(32, 32, &aom_sad32x32_sse2, -1),
- make_tuple(32, 16, &aom_sad32x16_sse2, -1),
- make_tuple(16, 32, &aom_sad16x32_sse2, -1),
- make_tuple(16, 16, &aom_sad16x16_sse2, -1),
- make_tuple(16, 8, &aom_sad16x8_sse2, -1),
- make_tuple(8, 16, &aom_sad8x16_sse2, -1),
- make_tuple(8, 8, &aom_sad8x8_sse2, -1),
- make_tuple(8, 4, &aom_sad8x4_sse2, -1),
- make_tuple(4, 8, &aom_sad4x8_sse2, -1),
- make_tuple(4, 4, &aom_sad4x4_sse2, -1),
- make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 12),
-};
-INSTANTIATE_TEST_CASE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));
-
-const SadMxNAvgParam avg_sse2_tests[] = {
- make_tuple(128, 128, &aom_sad128x128_avg_sse2, -1),
- make_tuple(128, 64, &aom_sad128x64_avg_sse2, -1),
- make_tuple(64, 128, &aom_sad64x128_avg_sse2, -1),
- make_tuple(64, 64, &aom_sad64x64_avg_sse2, -1),
- make_tuple(64, 32, &aom_sad64x32_avg_sse2, -1),
- make_tuple(32, 64, &aom_sad32x64_avg_sse2, -1),
- make_tuple(32, 32, &aom_sad32x32_avg_sse2, -1),
- make_tuple(32, 16, &aom_sad32x16_avg_sse2, -1),
- make_tuple(16, 32, &aom_sad16x32_avg_sse2, -1),
- make_tuple(16, 16, &aom_sad16x16_avg_sse2, -1),
- make_tuple(16, 8, &aom_sad16x8_avg_sse2, -1),
- make_tuple(8, 16, &aom_sad8x16_avg_sse2, -1),
- make_tuple(8, 8, &aom_sad8x8_avg_sse2, -1),
- make_tuple(8, 4, &aom_sad8x4_avg_sse2, -1),
- make_tuple(4, 8, &aom_sad4x8_avg_sse2, -1),
- make_tuple(4, 4, &aom_sad4x4_avg_sse2, -1),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 12),
-};
-INSTANTIATE_TEST_CASE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));
-
-const SadMxNx4Param x4d_sse2_tests[] = {
- make_tuple(128, 128, &aom_sad128x128x4d_sse2, -1),
- make_tuple(128, 64, &aom_sad128x64x4d_sse2, -1),
- make_tuple(64, 128, &aom_sad64x128x4d_sse2, -1),
- make_tuple(64, 64, &aom_sad64x64x4d_sse2, -1),
- make_tuple(64, 32, &aom_sad64x32x4d_sse2, -1),
- make_tuple(32, 64, &aom_sad32x64x4d_sse2, -1),
- make_tuple(32, 32, &aom_sad32x32x4d_sse2, -1),
- make_tuple(32, 16, &aom_sad32x16x4d_sse2, -1),
- make_tuple(16, 32, &aom_sad16x32x4d_sse2, -1),
- make_tuple(16, 16, &aom_sad16x16x4d_sse2, -1),
- make_tuple(16, 8, &aom_sad16x8x4d_sse2, -1),
- make_tuple(8, 16, &aom_sad8x16x4d_sse2, -1),
- make_tuple(8, 8, &aom_sad8x8x4d_sse2, -1),
- make_tuple(8, 4, &aom_sad8x4x4d_sse2, -1),
- make_tuple(4, 8, &aom_sad4x8x4d_sse2, -1),
- make_tuple(4, 4, &aom_sad4x4x4d_sse2, -1),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 8),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 8),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 8),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 8),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 8),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 10),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 10),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 10),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 10),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 10),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 12),
- make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 12),
- make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 12),
- make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 12),
- make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 12),
- make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 12),
-};
-INSTANTIATE_TEST_CASE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-// Note: These are named sse2, but part of ssse3 file and only built and linked
-// when ssse3 is enabled.
-const JntSadMxhParam jnt_sad_sse2_tests[] = {
- make_tuple(4, 4, &aom_sad4xh_sse2, -1),
- make_tuple(4, 8, &aom_sad4xh_sse2, -1),
- make_tuple(8, 4, &aom_sad8xh_sse2, -1),
- make_tuple(8, 8, &aom_sad8xh_sse2, -1),
- make_tuple(8, 16, &aom_sad8xh_sse2, -1),
- make_tuple(16, 8, &aom_sad16xh_sse2, -1),
- make_tuple(16, 16, &aom_sad16xh_sse2, -1),
- make_tuple(16, 32, &aom_sad16xh_sse2, -1),
- make_tuple(32, 16, &aom_sad32xh_sse2, -1),
- make_tuple(32, 32, &aom_sad32xh_sse2, -1),
- make_tuple(32, 64, &aom_sad32xh_sse2, -1),
- make_tuple(64, 32, &aom_sad64xh_sse2, -1),
- make_tuple(64, 64, &aom_sad64xh_sse2, -1),
- make_tuple(128, 128, &aom_sad128xh_sse2, -1),
- make_tuple(128, 64, &aom_sad128xh_sse2, -1),
- make_tuple(64, 128, &aom_sad64xh_sse2, -1),
- make_tuple(4, 16, &aom_sad4xh_sse2, -1),
- make_tuple(16, 4, &aom_sad16xh_sse2, -1),
- make_tuple(8, 32, &aom_sad8xh_sse2, -1),
- make_tuple(32, 8, &aom_sad32xh_sse2, -1),
- make_tuple(16, 64, &aom_sad16xh_sse2, -1),
- make_tuple(64, 16, &aom_sad64xh_sse2, -1),
-};
-INSTANTIATE_TEST_CASE_P(SSE2, JntSADTest,
- ::testing::ValuesIn(jnt_sad_sse2_tests));
-
-#endif // HAVE_SSSE3
-
-#if HAVE_SSE3
-// Only functions are x3, which do not have tests.
-#endif // HAVE_SSE3
-
-#if HAVE_SSSE3
-const JntCompAvgParam jnt_comp_avg_ssse3_tests[] = {
- make_tuple(128, 128, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(128, 64, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(64, 128, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(64, 64, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(64, 32, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(32, 64, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(32, 32, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(32, 16, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(16, 32, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(16, 16, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(16, 8, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(8, 16, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(8, 8, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(8, 4, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(4, 8, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(4, 4, &aom_jnt_comp_avg_pred_ssse3, -1),
- make_tuple(16, 16, &aom_jnt_comp_avg_pred_ssse3, -1),
-};
-
-INSTANTIATE_TEST_CASE_P(SSSE3, JntCompAvgTest,
- ::testing::ValuesIn(jnt_comp_avg_ssse3_tests));
-
-const JntSadMxNAvgParam jnt_avg_ssse3_tests[] = {
- make_tuple(128, 128, &aom_jnt_sad128x128_avg_ssse3, -1),
- make_tuple(128, 64, &aom_jnt_sad128x64_avg_ssse3, -1),
- make_tuple(64, 128, &aom_jnt_sad64x128_avg_ssse3, -1),
- make_tuple(64, 64, &aom_jnt_sad64x64_avg_ssse3, -1),
- make_tuple(64, 32, &aom_jnt_sad64x32_avg_ssse3, -1),
- make_tuple(32, 64, &aom_jnt_sad32x64_avg_ssse3, -1),
- make_tuple(32, 32, &aom_jnt_sad32x32_avg_ssse3, -1),
- make_tuple(32, 16, &aom_jnt_sad32x16_avg_ssse3, -1),
- make_tuple(16, 32, &aom_jnt_sad16x32_avg_ssse3, -1),
- make_tuple(16, 16, &aom_jnt_sad16x16_avg_ssse3, -1),
- make_tuple(16, 8, &aom_jnt_sad16x8_avg_ssse3, -1),
- make_tuple(8, 16, &aom_jnt_sad8x16_avg_ssse3, -1),
- make_tuple(8, 8, &aom_jnt_sad8x8_avg_ssse3, -1),
- make_tuple(8, 4, &aom_jnt_sad8x4_avg_ssse3, -1),
- make_tuple(4, 8, &aom_jnt_sad4x8_avg_ssse3, -1),
- make_tuple(4, 4, &aom_jnt_sad4x4_avg_ssse3, -1),
-};
-INSTANTIATE_TEST_CASE_P(SSSE3, JntSADavgTest,
- ::testing::ValuesIn(jnt_avg_ssse3_tests));
-#endif // HAVE_SSSE3
-
-#if HAVE_SSE4_1
-// Only functions are x8, which do not have tests.
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-const SadMxNParam avx2_tests[] = {
- make_tuple(64, 128, &aom_sad64x128_avx2, -1),
- make_tuple(128, 64, &aom_sad128x64_avx2, -1),
- make_tuple(128, 128, &aom_sad128x128_avx2, -1),
- make_tuple(64, 64, &aom_sad64x64_avx2, -1),
- make_tuple(64, 32, &aom_sad64x32_avx2, -1),
- make_tuple(32, 64, &aom_sad32x64_avx2, -1),
- make_tuple(32, 32, &aom_sad32x32_avx2, -1),
- make_tuple(32, 16, &aom_sad32x16_avx2, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 12),
-};
-INSTANTIATE_TEST_CASE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));
-
-const SadMxNAvgParam avg_avx2_tests[] = {
- make_tuple(64, 128, &aom_sad64x128_avg_avx2, -1),
- make_tuple(128, 64, &aom_sad128x64_avg_avx2, -1),
- make_tuple(128, 128, &aom_sad128x128_avg_avx2, -1),
- make_tuple(64, 64, &aom_sad64x64_avg_avx2, -1),
- make_tuple(64, 32, &aom_sad64x32_avg_avx2, -1),
- make_tuple(32, 64, &aom_sad32x64_avg_avx2, -1),
- make_tuple(32, 32, &aom_sad32x32_avg_avx2, -1),
- make_tuple(32, 16, &aom_sad32x16_avg_avx2, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 12),
-};
-INSTANTIATE_TEST_CASE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));
-
-const SadMxNx4Param x4d_avx2_tests[] = {
- make_tuple(64, 128, &aom_sad64x128x4d_avx2, -1),
- make_tuple(128, 64, &aom_sad128x64x4d_avx2, -1),
- make_tuple(128, 128, &aom_sad128x128x4d_avx2, -1),
- make_tuple(64, 64, &aom_sad64x64x4d_avx2, -1),
- make_tuple(32, 64, &aom_sad32x64x4d_avx2, -1),
- make_tuple(64, 32, &aom_sad64x32x4d_avx2, -1),
- make_tuple(32, 32, &aom_sad32x32x4d_avx2, -1),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 8),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 10),
- make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 12),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 8),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 10),
- make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 12),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 8),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 10),
- make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 12),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 8),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 10),
- make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 12),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 8),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 10),
- make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 12),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 8),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 10),
- make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 12),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 8),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 10),
- make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 12),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 8),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 10),
- make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 12),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 8),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 10),
- make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 12),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 8),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 10),
- make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 12),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 8),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 10),
- make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 12),
-};
-INSTANTIATE_TEST_CASE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
-#endif // HAVE_AVX2
-
-//------------------------------------------------------------------------------
-// MIPS functions
-#if HAVE_MSA
-const SadMxNParam msa_tests[] = {
- make_tuple(64, 64, &aom_sad64x64_msa, -1),
- make_tuple(64, 32, &aom_sad64x32_msa, -1),
- make_tuple(32, 64, &aom_sad32x64_msa, -1),
- make_tuple(32, 32, &aom_sad32x32_msa, -1),
- make_tuple(32, 16, &aom_sad32x16_msa, -1),
- make_tuple(16, 32, &aom_sad16x32_msa, -1),
- make_tuple(16, 16, &aom_sad16x16_msa, -1),
- make_tuple(16, 8, &aom_sad16x8_msa, -1),
- make_tuple(8, 16, &aom_sad8x16_msa, -1),
- make_tuple(8, 8, &aom_sad8x8_msa, -1),
- make_tuple(8, 4, &aom_sad8x4_msa, -1),
- make_tuple(4, 8, &aom_sad4x8_msa, -1),
- make_tuple(4, 4, &aom_sad4x4_msa, -1),
-};
-INSTANTIATE_TEST_CASE_P(MSA, SADTest, ::testing::ValuesIn(msa_tests));
-
-const SadMxNAvgParam avg_msa_tests[] = {
- make_tuple(64, 64, &aom_sad64x64_avg_msa, -1),
- make_tuple(64, 32, &aom_sad64x32_avg_msa, -1),
- make_tuple(32, 64, &aom_sad32x64_avg_msa, -1),
- make_tuple(32, 32, &aom_sad32x32_avg_msa, -1),
- make_tuple(32, 16, &aom_sad32x16_avg_msa, -1),
- make_tuple(16, 32, &aom_sad16x32_avg_msa, -1),
- make_tuple(16, 16, &aom_sad16x16_avg_msa, -1),
- make_tuple(16, 8, &aom_sad16x8_avg_msa, -1),
- make_tuple(8, 16, &aom_sad8x16_avg_msa, -1),
- make_tuple(8, 8, &aom_sad8x8_avg_msa, -1),
- make_tuple(8, 4, &aom_sad8x4_avg_msa, -1),
- make_tuple(4, 8, &aom_sad4x8_avg_msa, -1),
- make_tuple(4, 4, &aom_sad4x4_avg_msa, -1),
-};
-INSTANTIATE_TEST_CASE_P(MSA, SADavgTest, ::testing::ValuesIn(avg_msa_tests));
-
-const SadMxNx4Param x4d_msa_tests[] = {
- make_tuple(64, 64, &aom_sad64x64x4d_msa, -1),
- make_tuple(64, 32, &aom_sad64x32x4d_msa, -1),
- make_tuple(32, 64, &aom_sad32x64x4d_msa, -1),
- make_tuple(32, 32, &aom_sad32x32x4d_msa, -1),
- make_tuple(32, 16, &aom_sad32x16x4d_msa, -1),
- make_tuple(16, 32, &aom_sad16x32x4d_msa, -1),
- make_tuple(16, 16, &aom_sad16x16x4d_msa, -1),
- make_tuple(16, 8, &aom_sad16x8x4d_msa, -1),
- make_tuple(8, 16, &aom_sad8x16x4d_msa, -1),
- make_tuple(8, 8, &aom_sad8x8x4d_msa, -1),
- make_tuple(8, 4, &aom_sad8x4x4d_msa, -1),
- make_tuple(4, 8, &aom_sad4x8x4d_msa, -1),
- make_tuple(4, 4, &aom_sad4x4x4d_msa, -1),
-};
-INSTANTIATE_TEST_CASE_P(MSA, SADx4Test, ::testing::ValuesIn(x4d_msa_tests));
-#endif // HAVE_MSA
-
-} // namespace
diff --git a/third_party/aom/test/scalability_test.cc b/third_party/aom/test/scalability_test.cc
deleted file mode 100644
index b39918861..000000000
--- a/third_party/aom/test/scalability_test.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-const int kCpuUsed = 8;
-const int kBaseLayerQp = 55;
-const int kEnhancementLayerQp = 20;
-
-class ScalabilityTest
- : public ::libaom_test::CodecTestWithParam<libaom_test::TestMode>,
- public ::libaom_test::EncoderTest {
- protected:
- ScalabilityTest() : EncoderTest(GET_PARAM(0)) {}
- virtual ~ScalabilityTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(GET_PARAM(1));
- num_spatial_layers_ = 2;
- }
-
- virtual void PreEncodeFrameHook(::libaom_test::VideoSource *video,
- ::libaom_test::Encoder *encoder) {
- if (video->frame() == 0) {
- encoder->Control(AOME_SET_CPUUSED, kCpuUsed);
- encoder->Control(AOME_SET_NUMBER_SPATIAL_LAYERS, num_spatial_layers_);
- } else if (video->frame() % num_spatial_layers_) {
- frame_flags_ = AOM_EFLAG_NO_REF_LAST2 | AOM_EFLAG_NO_REF_LAST3 |
- AOM_EFLAG_NO_REF_GF | AOM_EFLAG_NO_REF_ARF |
- AOM_EFLAG_NO_REF_BWD | AOM_EFLAG_NO_REF_ARF2 |
- AOM_EFLAG_NO_UPD_LAST | AOM_EFLAG_NO_UPD_GF |
- AOM_EFLAG_NO_UPD_ARF | AOM_EFLAG_NO_UPD_ENTROPY;
- encoder->Control(AOME_SET_SPATIAL_LAYER_ID, 1);
- encoder->Control(AOME_SET_CQ_LEVEL, kEnhancementLayerQp);
- } else {
- frame_flags_ = AOM_EFLAG_NO_REF_LAST2 | AOM_EFLAG_NO_REF_LAST3 |
- AOM_EFLAG_NO_REF_GF | AOM_EFLAG_NO_REF_ARF |
- AOM_EFLAG_NO_REF_BWD | AOM_EFLAG_NO_REF_ARF2 |
- AOM_EFLAG_NO_UPD_GF | AOM_EFLAG_NO_UPD_ARF |
- AOM_EFLAG_NO_UPD_ENTROPY;
- encoder->Control(AOME_SET_SPATIAL_LAYER_ID, 0);
- encoder->Control(AOME_SET_CQ_LEVEL, kBaseLayerQp);
- }
- }
-
- void DoTest(int num_spatial_layers) {
- num_spatial_layers_ = num_spatial_layers;
- cfg_.rc_end_usage = AOM_Q;
- cfg_.g_lag_in_frames = 0;
-
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352,
- 288, 30, 1, 0, 18);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- }
-
- int num_spatial_layers_;
-};
-
-TEST_P(ScalabilityTest, TestNoMismatch2SpatialLayers) { DoTest(2); }
-
-TEST_P(ScalabilityTest, TestNoMismatch3SpatialLayers) { DoTest(3); }
-
-AV1_INSTANTIATE_TEST_CASE(ScalabilityTest,
- ::testing::Values(::libaom_test::kRealTime));
-
-} // namespace
diff --git a/third_party/aom/test/scan_test.cc b/third_party/aom/test/scan_test.cc
deleted file mode 100644
index dee2ab5a6..000000000
--- a/third_party/aom/test/scan_test.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "av1/common/scan.h"
-#include "av1/common/txb_common.h"
-#include "test/av1_txfm_test.h"
-
-static int scan_test(const int16_t *scan, const int16_t *iscan, int si, int r,
- int c, int w) {
- if (iscan[r * w + c] != si || scan[si] != r * w + c) {
- printf("r %d c %d ref_iscan %d iscan %d ref_scan %d scan %d\n", r, c, si,
- iscan[r * w + c], r * w + c, scan[si]);
- return 1;
- } else {
- return 0;
- }
-}
-
-int scan_order_test(const SCAN_ORDER *scan_order, int w, int h,
- SCAN_MODE mode) {
- const int16_t *scan = scan_order->scan;
- const int16_t *iscan = scan_order->iscan;
- int dim = w + h - 1;
- if (mode == SCAN_MODE_ZIG_ZAG) {
- int si = 0;
- for (int i = 0; i < dim; ++i) {
- if (i % 2 == 0) {
- for (int c = 0; c < w; ++c) {
- int r = i - c;
- if (r >= 0 && r < h) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- } else {
- for (int r = 0; r < h; ++r) {
- int c = i - r;
- if (c >= 0 && c < w) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- }
- }
- } else if (mode == SCAN_MODE_COL_DIAG) {
- int si = 0;
- for (int i = 0; i < dim; ++i) {
- for (int c = 0; c < w; ++c) {
- int r = i - c;
- if (r >= 0 && r < h) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- }
- } else if (mode == SCAN_MODE_ROW_DIAG) {
- int si = 0;
- for (int i = 0; i < dim; ++i) {
- for (int r = 0; r < h; ++r) {
- int c = i - r;
- if (c >= 0 && c < w) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- }
- } else if (mode == SCAN_MODE_ROW_1D) {
- int si = 0;
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < w; ++c) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- } else {
- assert(mode == SCAN_MODE_COL_1D);
- int si = 0;
- for (int c = 0; c < w; ++c) {
- for (int r = 0; r < h; ++r) {
- if (scan_test(scan, iscan, si, r, c, w)) return 1;
- ++si;
- }
- }
- }
- return 0;
-}
-
-TEST(Av1ScanTest, Dependency) {
- for (int tx_size = TX_4X4; tx_size < TX_SIZES_ALL; ++tx_size) {
- const int org_rows = tx_size_high[(TX_SIZE)tx_size];
- const int org_cols = tx_size_wide[(TX_SIZE)tx_size];
- const int rows = get_txb_high((TX_SIZE)tx_size);
- const int cols = get_txb_wide((TX_SIZE)tx_size);
- for (int tx_type = 0; tx_type < TX_TYPES; ++tx_type) {
- if (libaom_test::IsTxSizeTypeValid(static_cast<TX_SIZE>(tx_size),
- static_cast<TX_TYPE>(tx_type)) ==
- false) {
- continue;
- }
- SCAN_MODE scan_mode;
- TX_CLASS tx_class = tx_type_to_class[(TX_TYPE)tx_type];
- if (tx_class == TX_CLASS_2D) {
- if (rows == cols) {
- scan_mode = SCAN_MODE_ZIG_ZAG;
- } else if (rows > cols) {
- scan_mode = SCAN_MODE_ROW_DIAG;
- } else {
- scan_mode = SCAN_MODE_COL_DIAG;
- }
- } else if (tx_class == TX_CLASS_VERT) {
- scan_mode = SCAN_MODE_ROW_1D;
- } else {
- assert(tx_class == TX_CLASS_HORIZ);
- scan_mode = SCAN_MODE_COL_1D;
- }
- const SCAN_ORDER *scan_order =
- get_default_scan((TX_SIZE)tx_size, (TX_TYPE)tx_type);
- ASSERT_EQ(scan_order_test(scan_order, cols, rows, scan_mode), 0)
- << "scan mismatch tx_class " << tx_class << " tx_type " << tx_type
- << " tx_w " << org_cols << " tx_h " << org_rows << " scan_mode "
- << scan_mode << "\n";
- }
- }
-}
diff --git a/third_party/aom/test/segment_binarization_sync.cc b/third_party/aom/test/segment_binarization_sync.cc
deleted file mode 100644
index bd8cf1141..000000000
--- a/third_party/aom/test/segment_binarization_sync.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-
-using libaom_test::ACMRandom;
-
-extern "C" {
-int av1_neg_interleave(int x, int ref, int max);
-int av1_neg_deinterleave(int diff, int ref, int max);
-}
-
-namespace {
-
-struct Segment {
- int id;
- int pred;
- int last_id;
-};
-
-Segment GenerateSegment(int seed) {
- static const int MAX_SEGMENTS = 8;
-
- ACMRandom rnd_(seed);
-
- Segment segment;
- const int last_segid = rnd_.PseudoUniform(MAX_SEGMENTS);
- segment.last_id = last_segid;
- segment.pred = rnd_.PseudoUniform(MAX_SEGMENTS);
- segment.id = rnd_.PseudoUniform(last_segid + 1);
-
- return segment;
-}
-
-// Try to reveal a mismatch between segment binarization and debinarization
-TEST(SegmentBinarizationSync, SearchForBinarizationMismatch) {
- const int count_tests = 1000;
- const int seed_init = 4321;
-
- for (int i = 0; i < count_tests; ++i) {
- const Segment seg = GenerateSegment(seed_init + i);
-
- const int max_segid = seg.last_id + 1;
- const int seg_diff = av1_neg_interleave(seg.id, seg.pred, max_segid);
- const int decoded_segid =
- av1_neg_deinterleave(seg_diff, seg.pred, max_segid);
-
- ASSERT_EQ(decoded_segid, seg.id);
- }
-}
-
-} // namespace
diff --git a/third_party/aom/test/selfguided_filter_test.cc b/third_party/aom/test/selfguided_filter_test.cc
deleted file mode 100644
index d2d5c6105..000000000
--- a/third_party/aom/test/selfguided_filter_test.cc
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <ctime>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/av1_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-
-#include "aom_ports/aom_timer.h"
-#include "av1/common/mv.h"
-#include "av1/common/restoration.h"
-
-namespace {
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-
-typedef void (*SgrFunc)(const uint8_t *dat8, int width, int height, int stride,
- int eps, const int *xqd, uint8_t *dst8, int dst_stride,
- int32_t *tmpbuf, int bit_depth, int highbd);
-
-// Test parameter list:
-// <tst_fun_>
-typedef tuple<SgrFunc> FilterTestParam;
-
-class AV1SelfguidedFilterTest
- : public ::testing::TestWithParam<FilterTestParam> {
- public:
- virtual ~AV1SelfguidedFilterTest() {}
- virtual void SetUp() {}
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunSpeedTest() {
- tst_fun_ = GET_PARAM(0);
- const int pu_width = RESTORATION_PROC_UNIT_SIZE;
- const int pu_height = RESTORATION_PROC_UNIT_SIZE;
- const int width = 256, height = 256, stride = 288, out_stride = 288;
- const int NUM_ITERS = 2000;
- int i, j, k;
-
- uint8_t *input_ =
- (uint8_t *)aom_memalign(32, stride * (height + 32) * sizeof(uint8_t));
- uint8_t *output_ = (uint8_t *)aom_memalign(
- 32, out_stride * (height + 32) * sizeof(uint8_t));
- int32_t *tmpbuf = (int32_t *)aom_memalign(32, RESTORATION_TMPBUF_SIZE);
- uint8_t *input = input_ + stride * 16 + 16;
- uint8_t *output = output_ + out_stride * 16 + 16;
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- for (i = -16; i < height + 16; ++i)
- for (j = -16; j < width + 16; ++j)
- input[i * stride + j] = rnd.Rand16() & 0xFF;
-
- int xqd[2] = { SGRPROJ_PRJ_MIN0 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX0 + 1 -
- SGRPROJ_PRJ_MIN0),
- SGRPROJ_PRJ_MIN1 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX1 + 1 -
- SGRPROJ_PRJ_MIN1) };
- // Fix a parameter set, since the speed depends slightly on r.
- // Change this to test different combinations of values of r.
- int eps = 15;
-
- av1_loop_restoration_precal();
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (i = 0; i < NUM_ITERS; ++i) {
- for (k = 0; k < height; k += pu_height)
- for (j = 0; j < width; j += pu_width) {
- int w = AOMMIN(pu_width, width - j);
- int h = AOMMIN(pu_height, height - k);
- uint8_t *input_p = input + k * stride + j;
- uint8_t *output_p = output + k * out_stride + j;
- apply_selfguided_restoration_c(input_p, w, h, stride, eps, xqd,
- output_p, out_stride, tmpbuf, 8, 0);
- }
- }
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (i = 0; i < NUM_ITERS; ++i) {
- for (k = 0; k < height; k += pu_height)
- for (j = 0; j < width; j += pu_width) {
- int w = AOMMIN(pu_width, width - j);
- int h = AOMMIN(pu_height, height - k);
- uint8_t *input_p = input + k * stride + j;
- uint8_t *output_p = output + k * out_stride + j;
- tst_fun_(input_p, w, h, stride, eps, xqd, output_p, out_stride,
- tmpbuf, 8, 0);
- }
- }
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: AV1SelfguidedFilterTest.SpeedTest, SIMD slower than C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
-
- aom_free(input_);
- aom_free(output_);
- aom_free(tmpbuf);
- }
-
- void RunCorrectnessTest() {
- tst_fun_ = GET_PARAM(0);
- const int pu_width = RESTORATION_PROC_UNIT_SIZE;
- const int pu_height = RESTORATION_PROC_UNIT_SIZE;
- // Set the maximum width/height to test here. We actually test a small
- // range of sizes *up to* this size, so that we can check, eg.,
- // the behaviour on tiles which are not a multiple of 4 wide.
- const int max_w = 260, max_h = 260, stride = 672, out_stride = 672;
- const int NUM_ITERS = 81;
- int i, j, k;
-
- uint8_t *input_ =
- (uint8_t *)aom_memalign(32, stride * (max_h + 32) * sizeof(uint8_t));
- uint8_t *output_ = (uint8_t *)aom_memalign(
- 32, out_stride * (max_h + 32) * sizeof(uint8_t));
- uint8_t *output2_ = (uint8_t *)aom_memalign(
- 32, out_stride * (max_h + 32) * sizeof(uint8_t));
- int32_t *tmpbuf = (int32_t *)aom_memalign(32, RESTORATION_TMPBUF_SIZE);
-
- uint8_t *input = input_ + stride * 16 + 16;
- uint8_t *output = output_ + out_stride * 16 + 16;
- uint8_t *output2 = output2_ + out_stride * 16 + 16;
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- av1_loop_restoration_precal();
-
- for (i = 0; i < NUM_ITERS; ++i) {
- for (j = -16; j < max_h + 16; ++j)
- for (k = -16; k < max_w + 16; ++k)
- input[j * stride + k] = rnd.Rand16() & 0xFF;
-
- int xqd[2] = { SGRPROJ_PRJ_MIN0 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX0 + 1 -
- SGRPROJ_PRJ_MIN0),
- SGRPROJ_PRJ_MIN1 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX1 + 1 -
- SGRPROJ_PRJ_MIN1) };
- int eps = rnd.PseudoUniform(1 << SGRPROJ_PARAMS_BITS);
-
- // Test various tile sizes around 256x256
- int test_w = max_w - (i / 9);
- int test_h = max_h - (i % 9);
-
- for (k = 0; k < test_h; k += pu_height)
- for (j = 0; j < test_w; j += pu_width) {
- int w = AOMMIN(pu_width, test_w - j);
- int h = AOMMIN(pu_height, test_h - k);
- uint8_t *input_p = input + k * stride + j;
- uint8_t *output_p = output + k * out_stride + j;
- uint8_t *output2_p = output2 + k * out_stride + j;
- tst_fun_(input_p, w, h, stride, eps, xqd, output_p, out_stride,
- tmpbuf, 8, 0);
- apply_selfguided_restoration_c(input_p, w, h, stride, eps, xqd,
- output2_p, out_stride, tmpbuf, 8, 0);
- }
-
- for (j = 0; j < test_h; ++j)
- for (k = 0; k < test_w; ++k) {
- ASSERT_EQ(output[j * out_stride + k], output2[j * out_stride + k]);
- }
- }
-
- aom_free(input_);
- aom_free(output_);
- aom_free(output2_);
- aom_free(tmpbuf);
- }
-
- private:
- SgrFunc tst_fun_;
-};
-
-TEST_P(AV1SelfguidedFilterTest, DISABLED_SpeedTest) { RunSpeedTest(); }
-TEST_P(AV1SelfguidedFilterTest, CorrectnessTest) { RunCorrectnessTest(); }
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1SelfguidedFilterTest,
- ::testing::Values(apply_selfguided_restoration_sse4_1));
-#endif
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AV1SelfguidedFilterTest,
- ::testing::Values(apply_selfguided_restoration_avx2));
-#endif
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, AV1SelfguidedFilterTest,
- ::testing::Values(apply_selfguided_restoration_neon));
-#endif
-
-// Test parameter list:
-// <tst_fun_, bit_depth>
-typedef tuple<SgrFunc, int> HighbdFilterTestParam;
-
-class AV1HighbdSelfguidedFilterTest
- : public ::testing::TestWithParam<HighbdFilterTestParam> {
- public:
- virtual ~AV1HighbdSelfguidedFilterTest() {}
- virtual void SetUp() {}
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- void RunSpeedTest() {
- tst_fun_ = GET_PARAM(0);
- const int pu_width = RESTORATION_PROC_UNIT_SIZE;
- const int pu_height = RESTORATION_PROC_UNIT_SIZE;
- const int width = 256, height = 256, stride = 288, out_stride = 288;
- const int NUM_ITERS = 2000;
- int i, j, k;
- int bit_depth = GET_PARAM(1);
- int mask = (1 << bit_depth) - 1;
-
- uint16_t *input_ =
- (uint16_t *)aom_memalign(32, stride * (height + 32) * sizeof(uint16_t));
- uint16_t *output_ = (uint16_t *)aom_memalign(
- 32, out_stride * (height + 32) * sizeof(uint16_t));
- int32_t *tmpbuf = (int32_t *)aom_memalign(32, RESTORATION_TMPBUF_SIZE);
- uint16_t *input = input_ + stride * 16 + 16;
- uint16_t *output = output_ + out_stride * 16 + 16;
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- for (i = -16; i < height + 16; ++i)
- for (j = -16; j < width + 16; ++j)
- input[i * stride + j] = rnd.Rand16() & mask;
-
- int xqd[2] = { SGRPROJ_PRJ_MIN0 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX0 + 1 -
- SGRPROJ_PRJ_MIN0),
- SGRPROJ_PRJ_MIN1 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX1 + 1 -
- SGRPROJ_PRJ_MIN1) };
- // Fix a parameter set, since the speed depends slightly on r.
- // Change this to test different combinations of values of r.
- int eps = 15;
-
- av1_loop_restoration_precal();
-
- aom_usec_timer ref_timer;
- aom_usec_timer_start(&ref_timer);
- for (i = 0; i < NUM_ITERS; ++i) {
- for (k = 0; k < height; k += pu_height)
- for (j = 0; j < width; j += pu_width) {
- int w = AOMMIN(pu_width, width - j);
- int h = AOMMIN(pu_height, height - k);
- uint16_t *input_p = input + k * stride + j;
- uint16_t *output_p = output + k * out_stride + j;
- apply_selfguided_restoration_c(
- CONVERT_TO_BYTEPTR(input_p), w, h, stride, eps, xqd,
- CONVERT_TO_BYTEPTR(output_p), out_stride, tmpbuf, bit_depth, 1);
- }
- }
- aom_usec_timer_mark(&ref_timer);
- const int64_t ref_time = aom_usec_timer_elapsed(&ref_timer);
-
- aom_usec_timer tst_timer;
- aom_usec_timer_start(&tst_timer);
- for (i = 0; i < NUM_ITERS; ++i) {
- for (k = 0; k < height; k += pu_height)
- for (j = 0; j < width; j += pu_width) {
- int w = AOMMIN(pu_width, width - j);
- int h = AOMMIN(pu_height, height - k);
- uint16_t *input_p = input + k * stride + j;
- uint16_t *output_p = output + k * out_stride + j;
- tst_fun_(CONVERT_TO_BYTEPTR(input_p), w, h, stride, eps, xqd,
- CONVERT_TO_BYTEPTR(output_p), out_stride, tmpbuf, bit_depth,
- 1);
- }
- }
- aom_usec_timer_mark(&tst_timer);
- const int64_t tst_time = aom_usec_timer_elapsed(&tst_timer);
-
- std::cout << "[ ] C time = " << ref_time / 1000
- << " ms, SIMD time = " << tst_time / 1000 << " ms\n";
-
- EXPECT_GT(ref_time, tst_time)
- << "Error: AV1HighbdSelfguidedFilterTest.SpeedTest, SIMD slower than "
- "C.\n"
- << "C time: " << ref_time << " us\n"
- << "SIMD time: " << tst_time << " us\n";
-
- aom_free(input_);
- aom_free(output_);
- aom_free(tmpbuf);
- }
-
- void RunCorrectnessTest() {
- tst_fun_ = GET_PARAM(0);
- const int pu_width = RESTORATION_PROC_UNIT_SIZE;
- const int pu_height = RESTORATION_PROC_UNIT_SIZE;
- // Set the maximum width/height to test here. We actually test a small
- // range of sizes *up to* this size, so that we can check, eg.,
- // the behaviour on tiles which are not a multiple of 4 wide.
- const int max_w = 260, max_h = 260, stride = 672, out_stride = 672;
- const int NUM_ITERS = 81;
- int i, j, k;
- int bit_depth = GET_PARAM(1);
- int mask = (1 << bit_depth) - 1;
-
- uint16_t *input_ =
- (uint16_t *)aom_memalign(32, stride * (max_h + 32) * sizeof(uint16_t));
- uint16_t *output_ = (uint16_t *)aom_memalign(
- 32, out_stride * (max_h + 32) * sizeof(uint16_t));
- uint16_t *output2_ = (uint16_t *)aom_memalign(
- 32, out_stride * (max_h + 32) * sizeof(uint16_t));
- int32_t *tmpbuf = (int32_t *)aom_memalign(32, RESTORATION_TMPBUF_SIZE);
-
- uint16_t *input = input_ + stride * 16 + 16;
- uint16_t *output = output_ + out_stride * 16 + 16;
- uint16_t *output2 = output2_ + out_stride * 16 + 16;
-
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- av1_loop_restoration_precal();
-
- for (i = 0; i < NUM_ITERS; ++i) {
- for (j = -16; j < max_h + 16; ++j)
- for (k = -16; k < max_w + 16; ++k)
- input[j * stride + k] = rnd.Rand16() & mask;
-
- int xqd[2] = { SGRPROJ_PRJ_MIN0 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX0 + 1 -
- SGRPROJ_PRJ_MIN0),
- SGRPROJ_PRJ_MIN1 + rnd.PseudoUniform(SGRPROJ_PRJ_MAX1 + 1 -
- SGRPROJ_PRJ_MIN1) };
- int eps = rnd.PseudoUniform(1 << SGRPROJ_PARAMS_BITS);
-
- // Test various tile sizes around 256x256
- int test_w = max_w - (i / 9);
- int test_h = max_h - (i % 9);
-
- for (k = 0; k < test_h; k += pu_height)
- for (j = 0; j < test_w; j += pu_width) {
- int w = AOMMIN(pu_width, test_w - j);
- int h = AOMMIN(pu_height, test_h - k);
- uint16_t *input_p = input + k * stride + j;
- uint16_t *output_p = output + k * out_stride + j;
- uint16_t *output2_p = output2 + k * out_stride + j;
- tst_fun_(CONVERT_TO_BYTEPTR(input_p), w, h, stride, eps, xqd,
- CONVERT_TO_BYTEPTR(output_p), out_stride, tmpbuf, bit_depth,
- 1);
- apply_selfguided_restoration_c(
- CONVERT_TO_BYTEPTR(input_p), w, h, stride, eps, xqd,
- CONVERT_TO_BYTEPTR(output2_p), out_stride, tmpbuf, bit_depth, 1);
- }
-
- for (j = 0; j < test_h; ++j)
- for (k = 0; k < test_w; ++k)
- ASSERT_EQ(output[j * out_stride + k], output2[j * out_stride + k]);
- }
-
- aom_free(input_);
- aom_free(output_);
- aom_free(output2_);
- aom_free(tmpbuf);
- }
-
- private:
- SgrFunc tst_fun_;
-};
-
-TEST_P(AV1HighbdSelfguidedFilterTest, DISABLED_SpeedTest) { RunSpeedTest(); }
-TEST_P(AV1HighbdSelfguidedFilterTest, CorrectnessTest) { RunCorrectnessTest(); }
-
-#if HAVE_SSE4_1
-const int highbd_params_sse4_1[] = { 8, 10, 12 };
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AV1HighbdSelfguidedFilterTest,
- ::testing::Combine(::testing::Values(apply_selfguided_restoration_sse4_1),
- ::testing::ValuesIn(highbd_params_sse4_1)));
-#endif
-
-#if HAVE_AVX2
-const int highbd_params_avx2[] = { 8, 10, 12 };
-INSTANTIATE_TEST_CASE_P(
- AVX2, AV1HighbdSelfguidedFilterTest,
- ::testing::Combine(::testing::Values(apply_selfguided_restoration_avx2),
- ::testing::ValuesIn(highbd_params_avx2)));
-#endif
-#if HAVE_NEON
-const int highbd_params_neon[] = { 8, 10, 12 };
-INSTANTIATE_TEST_CASE_P(
- NEON, AV1HighbdSelfguidedFilterTest,
- ::testing::Combine(::testing::Values(apply_selfguided_restoration_neon),
- ::testing::ValuesIn(highbd_params_neon)));
-#endif
-} // namespace
diff --git a/third_party/aom/test/set_maps.sh b/third_party/aom/test/set_maps.sh
deleted file mode 100755
index 4f59b06d6..000000000
--- a/third_party/aom/test/set_maps.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom set_maps example. To add new tests to this file,
-## do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to set_maps_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $YUV_RAW_INPUT is required, and set_maps must exist in
-# $LIBAOM_BIN_PATH.
-set_maps_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
- if [ -z "$(aom_tool_path set_maps)" ]; then
- elog "set_maps not found. It must exist in LIBAOM_BIN_PATH or its parent."
- return 1
- fi
-}
-
-# Runs set_maps using the codec specified by $1.
-set_maps() {
- local encoder="$(aom_tool_path set_maps)"
- local codec="$1"
- local output_file="${AOM_TEST_OUTPUT_DIR}/set_maps_${codec}.ivf"
-
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \
- "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" \
- ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-set_maps_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- set_maps av1 || return 1
- fi
-}
-
-set_maps_tests="set_maps_av1"
-
-run_tests set_maps_verify_environment "${set_maps_tests}"
diff --git a/third_party/aom/test/simd_avx2_test.cc b/third_party/aom/test/simd_avx2_test.cc
deleted file mode 100644
index 8a012bff8..000000000
--- a/third_party/aom/test/simd_avx2_test.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#define ARCH AVX2
-#define ARCH_POSTFIX(name) name##_avx2
-#define SIMD_NAMESPACE simd_test_avx2
-#include "test/simd_impl.h"
diff --git a/third_party/aom/test/simd_cmp_avx2.cc b/third_party/aom/test/simd_cmp_avx2.cc
deleted file mode 100644
index cda632bcd..000000000
--- a/third_party/aom/test/simd_cmp_avx2.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#define ARCH AVX2
-#define ARCH_POSTFIX(name) name##_avx2
-#define SIMD_NAMESPACE simd_test_avx2
-#include "test/simd_cmp_impl.h"
diff --git a/third_party/aom/test/simd_cmp_impl.h b/third_party/aom/test/simd_cmp_impl.h
deleted file mode 100644
index b98af9aad..000000000
--- a/third_party/aom/test/simd_cmp_impl.h
+++ /dev/null
@@ -1,2171 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <assert.h>
-#include <string>
-
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "aom_dsp/aom_simd.h"
-#undef SIMD_INLINE
-#define SIMD_INLINE static // Don't enforce inlining
-#include "aom_dsp/simd/v256_intrinsics_c.h"
-
-// Machine tuned code goes into this file. This file is included from
-// simd_cmp_sse2.cc, simd_cmp_ssse3.cc etc which define the macros
-// ARCH (=neon, sse2, ssse3, etc), SIMD_NAMESPACE and ARCH_POSTFIX().
-
-#ifdef _MSC_VER
-// Disable "value of intrinsic immediate argument 'value' is out of range
-// 'lowerbound - upperbound'" warning. Visual Studio emits this warning though
-// the parameters are conditionally checked in e.g., v256_shr_n_byte. Adding a
-// mask doesn't always appear to be sufficient.
-#pragma warning(disable : 4556)
-#endif
-
-using libaom_test::ACMRandom;
-
-namespace SIMD_NAMESPACE {
-
-// Wrap templates around intrinsics using immediate values
-template <int shift>
-v64 imm_v64_shl_n_byte(v64 a) {
- return v64_shl_n_byte(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_byte(v64 a) {
- return v64_shr_n_byte(a, shift);
-}
-template <int shift>
-v64 imm_v64_shl_n_8(v64 a) {
- return v64_shl_n_8(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_u8(v64 a) {
- return v64_shr_n_u8(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_s8(v64 a) {
- return v64_shr_n_s8(a, shift);
-}
-template <int shift>
-v64 imm_v64_shl_n_16(v64 a) {
- return v64_shl_n_16(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_u16(v64 a) {
- return v64_shr_n_u16(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_s16(v64 a) {
- return v64_shr_n_s16(a, shift);
-}
-template <int shift>
-v64 imm_v64_shl_n_32(v64 a) {
- return v64_shl_n_32(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_u32(v64 a) {
- return v64_shr_n_u32(a, shift);
-}
-template <int shift>
-v64 imm_v64_shr_n_s32(v64 a) {
- return v64_shr_n_s32(a, shift);
-}
-template <int shift>
-v64 imm_v64_align(v64 a, v64 b) {
- return v64_align(a, b, shift);
-}
-
-// Wrap templates around corresponding C implementations of the above
-template <int shift>
-c_v64 c_imm_v64_shl_n_byte(c_v64 a) {
- return c_v64_shl_n_byte(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_byte(c_v64 a) {
- return c_v64_shr_n_byte(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shl_n_8(c_v64 a) {
- return c_v64_shl_n_8(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_u8(c_v64 a) {
- return c_v64_shr_n_u8(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_s8(c_v64 a) {
- return c_v64_shr_n_s8(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shl_n_16(c_v64 a) {
- return c_v64_shl_n_16(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_u16(c_v64 a) {
- return c_v64_shr_n_u16(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_s16(c_v64 a) {
- return c_v64_shr_n_s16(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shl_n_32(c_v64 a) {
- return c_v64_shl_n_32(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_u32(c_v64 a) {
- return c_v64_shr_n_u32(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_shr_n_s32(c_v64 a) {
- return c_v64_shr_n_s32(a, shift);
-}
-template <int shift>
-c_v64 c_imm_v64_align(c_v64 a, c_v64 b) {
- return c_v64_align(a, b, shift);
-}
-
-template <int shift>
-v128 imm_v128_shl_n_byte(v128 a) {
- return v128_shl_n_byte(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_byte(v128 a) {
- return v128_shr_n_byte(a, shift);
-}
-template <int shift>
-v128 imm_v128_shl_n_8(v128 a) {
- return v128_shl_n_8(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_u8(v128 a) {
- return v128_shr_n_u8(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_s8(v128 a) {
- return v128_shr_n_s8(a, shift);
-}
-template <int shift>
-v128 imm_v128_shl_n_16(v128 a) {
- return v128_shl_n_16(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_u16(v128 a) {
- return v128_shr_n_u16(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_s16(v128 a) {
- return v128_shr_n_s16(a, shift);
-}
-template <int shift>
-v128 imm_v128_shl_n_32(v128 a) {
- return v128_shl_n_32(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_u32(v128 a) {
- return v128_shr_n_u32(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_s32(v128 a) {
- return v128_shr_n_s32(a, shift);
-}
-template <int shift>
-v128 imm_v128_shl_n_64(v128 a) {
- return v128_shl_n_64(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_u64(v128 a) {
- return v128_shr_n_u64(a, shift);
-}
-template <int shift>
-v128 imm_v128_shr_n_s64(v128 a) {
- return v128_shr_n_s64(a, shift);
-}
-template <int shift>
-v128 imm_v128_align(v128 a, v128 b) {
- return v128_align(a, b, shift);
-}
-
-template <int shift>
-c_v128 c_imm_v128_shl_n_byte(c_v128 a) {
- return c_v128_shl_n_byte(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_byte(c_v128 a) {
- return c_v128_shr_n_byte(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shl_n_8(c_v128 a) {
- return c_v128_shl_n_8(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_u8(c_v128 a) {
- return c_v128_shr_n_u8(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_s8(c_v128 a) {
- return c_v128_shr_n_s8(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shl_n_16(c_v128 a) {
- return c_v128_shl_n_16(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_u16(c_v128 a) {
- return c_v128_shr_n_u16(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_s16(c_v128 a) {
- return c_v128_shr_n_s16(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shl_n_32(c_v128 a) {
- return c_v128_shl_n_32(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_u32(c_v128 a) {
- return c_v128_shr_n_u32(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_s32(c_v128 a) {
- return c_v128_shr_n_s32(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shl_n_64(c_v128 a) {
- return c_v128_shl_n_64(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_u64(c_v128 a) {
- return c_v128_shr_n_u64(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_shr_n_s64(c_v128 a) {
- return c_v128_shr_n_s64(a, shift);
-}
-template <int shift>
-c_v128 c_imm_v128_align(c_v128 a, c_v128 b) {
- return c_v128_align(a, b, shift);
-}
-
-template <int shift>
-v256 imm_v256_shl_n_word(v256 a) {
- return v256_shl_n_word(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_word(v256 a) {
- return v256_shr_n_word(a, shift);
-}
-template <int shift>
-v256 imm_v256_shl_n_byte(v256 a) {
- return v256_shl_n_byte(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_byte(v256 a) {
- return v256_shr_n_byte(a, shift);
-}
-template <int shift>
-v256 imm_v256_shl_n_8(v256 a) {
- return v256_shl_n_8(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_u8(v256 a) {
- return v256_shr_n_u8(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_s8(v256 a) {
- return v256_shr_n_s8(a, shift);
-}
-template <int shift>
-v256 imm_v256_shl_n_16(v256 a) {
- return v256_shl_n_16(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_u16(v256 a) {
- return v256_shr_n_u16(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_s16(v256 a) {
- return v256_shr_n_s16(a, shift);
-}
-template <int shift>
-v256 imm_v256_shl_n_32(v256 a) {
- return v256_shl_n_32(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_u32(v256 a) {
- return v256_shr_n_u32(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_s32(v256 a) {
- return v256_shr_n_s32(a, shift);
-}
-template <int shift>
-v256 imm_v256_shl_n_64(v256 a) {
- return v256_shl_n_64(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_u64(v256 a) {
- return v256_shr_n_u64(a, shift);
-}
-template <int shift>
-v256 imm_v256_shr_n_s64(v256 a) {
- return v256_shr_n_s64(a, shift);
-}
-template <int shift>
-v256 imm_v256_align(v256 a, v256 b) {
- return v256_align(a, b, shift);
-}
-
-template <int shift>
-c_v256 c_imm_v256_shl_n_word(c_v256 a) {
- return c_v256_shl_n_word(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_word(c_v256 a) {
- return c_v256_shr_n_word(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shl_n_byte(c_v256 a) {
- return c_v256_shl_n_byte(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_byte(c_v256 a) {
- return c_v256_shr_n_byte(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shl_n_8(c_v256 a) {
- return c_v256_shl_n_8(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_u8(c_v256 a) {
- return c_v256_shr_n_u8(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_s8(c_v256 a) {
- return c_v256_shr_n_s8(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shl_n_16(c_v256 a) {
- return c_v256_shl_n_16(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_u16(c_v256 a) {
- return c_v256_shr_n_u16(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_s16(c_v256 a) {
- return c_v256_shr_n_s16(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shl_n_32(c_v256 a) {
- return c_v256_shl_n_32(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_u32(c_v256 a) {
- return c_v256_shr_n_u32(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_s32(c_v256 a) {
- return c_v256_shr_n_s32(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shl_n_64(c_v256 a) {
- return c_v256_shl_n_64(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_u64(c_v256 a) {
- return c_v256_shr_n_u64(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_shr_n_s64(c_v256 a) {
- return c_v256_shr_n_s64(a, shift);
-}
-template <int shift>
-c_v256 c_imm_v256_align(c_v256 a, c_v256 b) {
- return c_v256_align(a, b, shift);
-}
-
-// Wrappers around the the SAD and SSD functions
-uint32_t v64_sad_u8(v64 a, v64 b) {
- return v64_sad_u8_sum(::v64_sad_u8(v64_sad_u8_init(), a, b));
-}
-uint32_t v64_ssd_u8(v64 a, v64 b) {
- return v64_ssd_u8_sum(::v64_ssd_u8(v64_ssd_u8_init(), a, b));
-}
-
-uint32_t c_v64_sad_u8(c_v64 a, c_v64 b) {
- return c_v64_sad_u8_sum(::c_v64_sad_u8(c_v64_sad_u8_init(), a, b));
-}
-uint32_t c_v64_ssd_u8(c_v64 a, c_v64 b) {
- return c_v64_ssd_u8_sum(::c_v64_ssd_u8(c_v64_ssd_u8_init(), a, b));
-}
-uint32_t v128_sad_u8(v128 a, v128 b) {
- return v128_sad_u8_sum(::v128_sad_u8(v128_sad_u8_init(), a, b));
-}
-uint32_t v128_ssd_u8(v128 a, v128 b) {
- return v128_ssd_u8_sum(::v128_ssd_u8(v128_ssd_u8_init(), a, b));
-}
-uint32_t c_v128_sad_u8(c_v128 a, c_v128 b) {
- return c_v128_sad_u8_sum(::c_v128_sad_u8(c_v128_sad_u8_init(), a, b));
-}
-uint32_t c_v128_ssd_u8(c_v128 a, c_v128 b) {
- return c_v128_ssd_u8_sum(::c_v128_ssd_u8(c_v128_ssd_u8_init(), a, b));
-}
-uint32_t v128_sad_u16(v128 a, v128 b) {
- return v128_sad_u16_sum(::v128_sad_u16(v128_sad_u16_init(), a, b));
-}
-uint64_t v128_ssd_s16(v128 a, v128 b) {
- return v128_ssd_s16_sum(::v128_ssd_s16(v128_ssd_s16_init(), a, b));
-}
-uint32_t c_v128_sad_u16(c_v128 a, c_v128 b) {
- return c_v128_sad_u16_sum(::c_v128_sad_u16(c_v128_sad_u16_init(), a, b));
-}
-uint64_t c_v128_ssd_s16(c_v128 a, c_v128 b) {
- return c_v128_ssd_s16_sum(::c_v128_ssd_s16(c_v128_ssd_s16_init(), a, b));
-}
-uint32_t v256_sad_u8(v256 a, v256 b) {
- return v256_sad_u8_sum(::v256_sad_u8(v256_sad_u8_init(), a, b));
-}
-uint32_t v256_ssd_u8(v256 a, v256 b) {
- return v256_ssd_u8_sum(::v256_ssd_u8(v256_ssd_u8_init(), a, b));
-}
-uint32_t c_v256_sad_u8(c_v256 a, c_v256 b) {
- return c_v256_sad_u8_sum(::c_v256_sad_u8(c_v256_sad_u8_init(), a, b));
-}
-uint32_t c_v256_ssd_u8(c_v256 a, c_v256 b) {
- return c_v256_ssd_u8_sum(::c_v256_ssd_u8(c_v256_ssd_u8_init(), a, b));
-}
-uint32_t v256_sad_u16(v256 a, v256 b) {
- return v256_sad_u16_sum(::v256_sad_u16(v256_sad_u16_init(), a, b));
-}
-uint64_t v256_ssd_s16(v256 a, v256 b) {
- return v256_ssd_s16_sum(::v256_ssd_s16(v256_ssd_s16_init(), a, b));
-}
-uint32_t c_v256_sad_u16(c_v256 a, c_v256 b) {
- return c_v256_sad_u16_sum(::c_v256_sad_u16(c_v256_sad_u16_init(), a, b));
-}
-uint64_t c_v256_ssd_s16(c_v256 a, c_v256 b) {
- return c_v256_ssd_s16_sum(::c_v256_ssd_s16(c_v256_ssd_s16_init(), a, b));
-}
-
-namespace {
-
-typedef void (*fptr)();
-
-typedef struct {
- const char *name;
- fptr ref;
- fptr simd;
-} mapping;
-
-#define MAP(name) \
- { \
- #name, reinterpret_cast < fptr > (c_##name), \
- reinterpret_cast < fptr > (name) \
- }
-
-const mapping m[] = { MAP(v64_sad_u8),
- MAP(v64_ssd_u8),
- MAP(v64_add_8),
- MAP(v64_add_16),
- MAP(v64_sadd_s8),
- MAP(v64_sadd_u8),
- MAP(v64_sadd_s16),
- MAP(v64_add_32),
- MAP(v64_sub_8),
- MAP(v64_ssub_u8),
- MAP(v64_ssub_s8),
- MAP(v64_sub_16),
- MAP(v64_ssub_s16),
- MAP(v64_ssub_u16),
- MAP(v64_sub_32),
- MAP(v64_ziplo_8),
- MAP(v64_ziphi_8),
- MAP(v64_ziplo_16),
- MAP(v64_ziphi_16),
- MAP(v64_ziplo_32),
- MAP(v64_ziphi_32),
- MAP(v64_pack_s32_u16),
- MAP(v64_pack_s32_s16),
- MAP(v64_pack_s16_u8),
- MAP(v64_pack_s16_s8),
- MAP(v64_unziphi_8),
- MAP(v64_unziplo_8),
- MAP(v64_unziphi_16),
- MAP(v64_unziplo_16),
- MAP(v64_or),
- MAP(v64_xor),
- MAP(v64_and),
- MAP(v64_andn),
- MAP(v64_mullo_s16),
- MAP(v64_mulhi_s16),
- MAP(v64_mullo_s32),
- MAP(v64_madd_s16),
- MAP(v64_madd_us8),
- MAP(v64_avg_u8),
- MAP(v64_rdavg_u8),
- MAP(v64_rdavg_u16),
- MAP(v64_avg_u16),
- MAP(v64_min_u8),
- MAP(v64_max_u8),
- MAP(v64_min_s8),
- MAP(v64_max_s8),
- MAP(v64_min_s16),
- MAP(v64_max_s16),
- MAP(v64_cmpgt_s8),
- MAP(v64_cmplt_s8),
- MAP(v64_cmpeq_8),
- MAP(v64_cmpgt_s16),
- MAP(v64_cmplt_s16),
- MAP(v64_cmpeq_16),
- MAP(v64_shuffle_8),
- MAP(imm_v64_align<1>),
- MAP(imm_v64_align<2>),
- MAP(imm_v64_align<3>),
- MAP(imm_v64_align<4>),
- MAP(imm_v64_align<5>),
- MAP(imm_v64_align<6>),
- MAP(imm_v64_align<7>),
- MAP(v64_abs_s8),
- MAP(v64_abs_s16),
- MAP(v64_unpacklo_u8_s16),
- MAP(v64_unpackhi_u8_s16),
- MAP(v64_unpacklo_s8_s16),
- MAP(v64_unpackhi_s8_s16),
- MAP(v64_unpacklo_u16_s32),
- MAP(v64_unpacklo_s16_s32),
- MAP(v64_unpackhi_u16_s32),
- MAP(v64_unpackhi_s16_s32),
- MAP(imm_v64_shr_n_byte<1>),
- MAP(imm_v64_shr_n_byte<2>),
- MAP(imm_v64_shr_n_byte<3>),
- MAP(imm_v64_shr_n_byte<4>),
- MAP(imm_v64_shr_n_byte<5>),
- MAP(imm_v64_shr_n_byte<6>),
- MAP(imm_v64_shr_n_byte<7>),
- MAP(imm_v64_shl_n_byte<1>),
- MAP(imm_v64_shl_n_byte<2>),
- MAP(imm_v64_shl_n_byte<3>),
- MAP(imm_v64_shl_n_byte<4>),
- MAP(imm_v64_shl_n_byte<5>),
- MAP(imm_v64_shl_n_byte<6>),
- MAP(imm_v64_shl_n_byte<7>),
- MAP(imm_v64_shl_n_8<1>),
- MAP(imm_v64_shl_n_8<2>),
- MAP(imm_v64_shl_n_8<3>),
- MAP(imm_v64_shl_n_8<4>),
- MAP(imm_v64_shl_n_8<5>),
- MAP(imm_v64_shl_n_8<6>),
- MAP(imm_v64_shl_n_8<7>),
- MAP(imm_v64_shr_n_u8<1>),
- MAP(imm_v64_shr_n_u8<2>),
- MAP(imm_v64_shr_n_u8<3>),
- MAP(imm_v64_shr_n_u8<4>),
- MAP(imm_v64_shr_n_u8<5>),
- MAP(imm_v64_shr_n_u8<6>),
- MAP(imm_v64_shr_n_u8<7>),
- MAP(imm_v64_shr_n_s8<1>),
- MAP(imm_v64_shr_n_s8<2>),
- MAP(imm_v64_shr_n_s8<3>),
- MAP(imm_v64_shr_n_s8<4>),
- MAP(imm_v64_shr_n_s8<5>),
- MAP(imm_v64_shr_n_s8<6>),
- MAP(imm_v64_shr_n_s8<7>),
- MAP(imm_v64_shl_n_16<1>),
- MAP(imm_v64_shl_n_16<2>),
- MAP(imm_v64_shl_n_16<4>),
- MAP(imm_v64_shl_n_16<6>),
- MAP(imm_v64_shl_n_16<8>),
- MAP(imm_v64_shl_n_16<10>),
- MAP(imm_v64_shl_n_16<12>),
- MAP(imm_v64_shl_n_16<14>),
- MAP(imm_v64_shr_n_u16<1>),
- MAP(imm_v64_shr_n_u16<2>),
- MAP(imm_v64_shr_n_u16<4>),
- MAP(imm_v64_shr_n_u16<6>),
- MAP(imm_v64_shr_n_u16<8>),
- MAP(imm_v64_shr_n_u16<10>),
- MAP(imm_v64_shr_n_u16<12>),
- MAP(imm_v64_shr_n_u16<14>),
- MAP(imm_v64_shr_n_s16<1>),
- MAP(imm_v64_shr_n_s16<2>),
- MAP(imm_v64_shr_n_s16<4>),
- MAP(imm_v64_shr_n_s16<6>),
- MAP(imm_v64_shr_n_s16<8>),
- MAP(imm_v64_shr_n_s16<10>),
- MAP(imm_v64_shr_n_s16<12>),
- MAP(imm_v64_shr_n_s16<14>),
- MAP(imm_v64_shl_n_32<1>),
- MAP(imm_v64_shl_n_32<4>),
- MAP(imm_v64_shl_n_32<8>),
- MAP(imm_v64_shl_n_32<12>),
- MAP(imm_v64_shl_n_32<16>),
- MAP(imm_v64_shl_n_32<20>),
- MAP(imm_v64_shl_n_32<24>),
- MAP(imm_v64_shl_n_32<28>),
- MAP(imm_v64_shr_n_u32<1>),
- MAP(imm_v64_shr_n_u32<4>),
- MAP(imm_v64_shr_n_u32<8>),
- MAP(imm_v64_shr_n_u32<12>),
- MAP(imm_v64_shr_n_u32<16>),
- MAP(imm_v64_shr_n_u32<20>),
- MAP(imm_v64_shr_n_u32<24>),
- MAP(imm_v64_shr_n_u32<28>),
- MAP(imm_v64_shr_n_s32<1>),
- MAP(imm_v64_shr_n_s32<4>),
- MAP(imm_v64_shr_n_s32<8>),
- MAP(imm_v64_shr_n_s32<12>),
- MAP(imm_v64_shr_n_s32<16>),
- MAP(imm_v64_shr_n_s32<20>),
- MAP(imm_v64_shr_n_s32<24>),
- MAP(imm_v64_shr_n_s32<28>),
- MAP(v64_shl_8),
- MAP(v64_shr_u8),
- MAP(v64_shr_s8),
- MAP(v64_shl_16),
- MAP(v64_shr_u16),
- MAP(v64_shr_s16),
- MAP(v64_shl_32),
- MAP(v64_shr_u32),
- MAP(v64_shr_s32),
- MAP(v64_hadd_u8),
- MAP(v64_hadd_s16),
- MAP(v64_dotp_s16),
- MAP(v64_dotp_su8),
- MAP(v64_u64),
- MAP(v64_low_u32),
- MAP(v64_high_u32),
- MAP(v64_low_s32),
- MAP(v64_high_s32),
- MAP(v64_dup_8),
- MAP(v64_dup_16),
- MAP(v64_dup_32),
- MAP(v64_from_32),
- MAP(v64_zero),
- MAP(v64_from_16),
- MAP(v128_sad_u8),
- MAP(v128_ssd_u8),
- MAP(v128_sad_u16),
- MAP(v128_ssd_s16),
- MAP(v128_add_8),
- MAP(v128_add_16),
- MAP(v128_sadd_s8),
- MAP(v128_sadd_u8),
- MAP(v128_sadd_s16),
- MAP(v128_add_32),
- MAP(v128_add_64),
- MAP(v128_sub_8),
- MAP(v128_ssub_u8),
- MAP(v128_ssub_s8),
- MAP(v128_sub_16),
- MAP(v128_ssub_s16),
- MAP(v128_ssub_u16),
- MAP(v128_sub_32),
- MAP(v128_sub_64),
- MAP(v128_ziplo_8),
- MAP(v128_ziphi_8),
- MAP(v128_ziplo_16),
- MAP(v128_ziphi_16),
- MAP(v128_ziplo_32),
- MAP(v128_ziphi_32),
- MAP(v128_ziplo_64),
- MAP(v128_ziphi_64),
- MAP(v128_unziphi_8),
- MAP(v128_unziplo_8),
- MAP(v128_unziphi_16),
- MAP(v128_unziplo_16),
- MAP(v128_unziphi_32),
- MAP(v128_unziplo_32),
- MAP(v128_pack_s32_u16),
- MAP(v128_pack_s32_s16),
- MAP(v128_pack_s16_u8),
- MAP(v128_pack_s16_s8),
- MAP(v128_or),
- MAP(v128_xor),
- MAP(v128_and),
- MAP(v128_andn),
- MAP(v128_mullo_s16),
- MAP(v128_mulhi_s16),
- MAP(v128_mullo_s32),
- MAP(v128_madd_s16),
- MAP(v128_madd_us8),
- MAP(v128_avg_u8),
- MAP(v128_rdavg_u8),
- MAP(v128_rdavg_u16),
- MAP(v128_avg_u16),
- MAP(v128_min_u8),
- MAP(v128_max_u8),
- MAP(v128_min_s8),
- MAP(v128_max_s8),
- MAP(v128_min_s16),
- MAP(v128_max_s16),
- MAP(v128_min_s32),
- MAP(v128_max_s32),
- MAP(v128_cmpgt_s8),
- MAP(v128_cmplt_s8),
- MAP(v128_cmpeq_8),
- MAP(v128_cmpgt_s16),
- MAP(v128_cmpeq_16),
- MAP(v128_cmplt_s16),
- MAP(v128_cmpgt_s32),
- MAP(v128_cmpeq_32),
- MAP(v128_cmplt_s32),
- MAP(v128_shuffle_8),
- MAP(imm_v128_align<1>),
- MAP(imm_v128_align<2>),
- MAP(imm_v128_align<3>),
- MAP(imm_v128_align<4>),
- MAP(imm_v128_align<5>),
- MAP(imm_v128_align<6>),
- MAP(imm_v128_align<7>),
- MAP(imm_v128_align<8>),
- MAP(imm_v128_align<9>),
- MAP(imm_v128_align<10>),
- MAP(imm_v128_align<11>),
- MAP(imm_v128_align<12>),
- MAP(imm_v128_align<13>),
- MAP(imm_v128_align<14>),
- MAP(imm_v128_align<15>),
- MAP(v128_abs_s8),
- MAP(v128_abs_s16),
- MAP(v128_padd_u8),
- MAP(v128_padd_s16),
- MAP(v128_unpacklo_u16_s32),
- MAP(v128_unpacklo_s16_s32),
- MAP(v128_unpackhi_u16_s32),
- MAP(v128_unpackhi_s16_s32),
- MAP(imm_v128_shr_n_byte<1>),
- MAP(imm_v128_shr_n_byte<2>),
- MAP(imm_v128_shr_n_byte<3>),
- MAP(imm_v128_shr_n_byte<4>),
- MAP(imm_v128_shr_n_byte<5>),
- MAP(imm_v128_shr_n_byte<6>),
- MAP(imm_v128_shr_n_byte<7>),
- MAP(imm_v128_shr_n_byte<8>),
- MAP(imm_v128_shr_n_byte<9>),
- MAP(imm_v128_shr_n_byte<10>),
- MAP(imm_v128_shr_n_byte<11>),
- MAP(imm_v128_shr_n_byte<12>),
- MAP(imm_v128_shr_n_byte<13>),
- MAP(imm_v128_shr_n_byte<14>),
- MAP(imm_v128_shr_n_byte<15>),
- MAP(imm_v128_shl_n_byte<1>),
- MAP(imm_v128_shl_n_byte<2>),
- MAP(imm_v128_shl_n_byte<3>),
- MAP(imm_v128_shl_n_byte<4>),
- MAP(imm_v128_shl_n_byte<5>),
- MAP(imm_v128_shl_n_byte<6>),
- MAP(imm_v128_shl_n_byte<7>),
- MAP(imm_v128_shl_n_byte<8>),
- MAP(imm_v128_shl_n_byte<9>),
- MAP(imm_v128_shl_n_byte<10>),
- MAP(imm_v128_shl_n_byte<11>),
- MAP(imm_v128_shl_n_byte<12>),
- MAP(imm_v128_shl_n_byte<13>),
- MAP(imm_v128_shl_n_byte<14>),
- MAP(imm_v128_shl_n_byte<15>),
- MAP(imm_v128_shl_n_8<1>),
- MAP(imm_v128_shl_n_8<2>),
- MAP(imm_v128_shl_n_8<3>),
- MAP(imm_v128_shl_n_8<4>),
- MAP(imm_v128_shl_n_8<5>),
- MAP(imm_v128_shl_n_8<6>),
- MAP(imm_v128_shl_n_8<7>),
- MAP(imm_v128_shr_n_u8<1>),
- MAP(imm_v128_shr_n_u8<2>),
- MAP(imm_v128_shr_n_u8<3>),
- MAP(imm_v128_shr_n_u8<4>),
- MAP(imm_v128_shr_n_u8<5>),
- MAP(imm_v128_shr_n_u8<6>),
- MAP(imm_v128_shr_n_u8<7>),
- MAP(imm_v128_shr_n_s8<1>),
- MAP(imm_v128_shr_n_s8<2>),
- MAP(imm_v128_shr_n_s8<3>),
- MAP(imm_v128_shr_n_s8<4>),
- MAP(imm_v128_shr_n_s8<5>),
- MAP(imm_v128_shr_n_s8<6>),
- MAP(imm_v128_shr_n_s8<7>),
- MAP(imm_v128_shl_n_16<1>),
- MAP(imm_v128_shl_n_16<2>),
- MAP(imm_v128_shl_n_16<4>),
- MAP(imm_v128_shl_n_16<6>),
- MAP(imm_v128_shl_n_16<8>),
- MAP(imm_v128_shl_n_16<10>),
- MAP(imm_v128_shl_n_16<12>),
- MAP(imm_v128_shl_n_16<14>),
- MAP(imm_v128_shr_n_u16<1>),
- MAP(imm_v128_shr_n_u16<2>),
- MAP(imm_v128_shr_n_u16<4>),
- MAP(imm_v128_shr_n_u16<6>),
- MAP(imm_v128_shr_n_u16<8>),
- MAP(imm_v128_shr_n_u16<10>),
- MAP(imm_v128_shr_n_u16<12>),
- MAP(imm_v128_shr_n_u16<14>),
- MAP(imm_v128_shr_n_s16<1>),
- MAP(imm_v128_shr_n_s16<2>),
- MAP(imm_v128_shr_n_s16<4>),
- MAP(imm_v128_shr_n_s16<6>),
- MAP(imm_v128_shr_n_s16<8>),
- MAP(imm_v128_shr_n_s16<10>),
- MAP(imm_v128_shr_n_s16<12>),
- MAP(imm_v128_shr_n_s16<14>),
- MAP(imm_v128_shl_n_32<1>),
- MAP(imm_v128_shl_n_32<4>),
- MAP(imm_v128_shl_n_32<8>),
- MAP(imm_v128_shl_n_32<12>),
- MAP(imm_v128_shl_n_32<16>),
- MAP(imm_v128_shl_n_32<20>),
- MAP(imm_v128_shl_n_32<24>),
- MAP(imm_v128_shl_n_32<28>),
- MAP(imm_v128_shr_n_u32<1>),
- MAP(imm_v128_shr_n_u32<4>),
- MAP(imm_v128_shr_n_u32<8>),
- MAP(imm_v128_shr_n_u32<12>),
- MAP(imm_v128_shr_n_u32<16>),
- MAP(imm_v128_shr_n_u32<20>),
- MAP(imm_v128_shr_n_u32<24>),
- MAP(imm_v128_shr_n_u32<28>),
- MAP(imm_v128_shr_n_s32<1>),
- MAP(imm_v128_shr_n_s32<4>),
- MAP(imm_v128_shr_n_s32<8>),
- MAP(imm_v128_shr_n_s32<12>),
- MAP(imm_v128_shr_n_s32<16>),
- MAP(imm_v128_shr_n_s32<20>),
- MAP(imm_v128_shr_n_s32<24>),
- MAP(imm_v128_shr_n_s32<28>),
- MAP(imm_v128_shl_n_64<1>),
- MAP(imm_v128_shl_n_64<4>),
- MAP(imm_v128_shl_n_64<8>),
- MAP(imm_v128_shl_n_64<12>),
- MAP(imm_v128_shl_n_64<16>),
- MAP(imm_v128_shl_n_64<20>),
- MAP(imm_v128_shl_n_64<24>),
- MAP(imm_v128_shl_n_64<28>),
- MAP(imm_v128_shl_n_64<32>),
- MAP(imm_v128_shl_n_64<36>),
- MAP(imm_v128_shl_n_64<40>),
- MAP(imm_v128_shl_n_64<44>),
- MAP(imm_v128_shl_n_64<48>),
- MAP(imm_v128_shl_n_64<52>),
- MAP(imm_v128_shl_n_64<56>),
- MAP(imm_v128_shl_n_64<60>),
- MAP(imm_v128_shr_n_u64<1>),
- MAP(imm_v128_shr_n_u64<4>),
- MAP(imm_v128_shr_n_u64<8>),
- MAP(imm_v128_shr_n_u64<12>),
- MAP(imm_v128_shr_n_u64<16>),
- MAP(imm_v128_shr_n_u64<20>),
- MAP(imm_v128_shr_n_u64<24>),
- MAP(imm_v128_shr_n_u64<28>),
- MAP(imm_v128_shr_n_u64<32>),
- MAP(imm_v128_shr_n_u64<36>),
- MAP(imm_v128_shr_n_u64<40>),
- MAP(imm_v128_shr_n_u64<44>),
- MAP(imm_v128_shr_n_u64<48>),
- MAP(imm_v128_shr_n_u64<52>),
- MAP(imm_v128_shr_n_u64<56>),
- MAP(imm_v128_shr_n_u64<60>),
- MAP(imm_v128_shr_n_s64<1>),
- MAP(imm_v128_shr_n_s64<4>),
- MAP(imm_v128_shr_n_s64<8>),
- MAP(imm_v128_shr_n_s64<12>),
- MAP(imm_v128_shr_n_s64<16>),
- MAP(imm_v128_shr_n_s64<20>),
- MAP(imm_v128_shr_n_s64<24>),
- MAP(imm_v128_shr_n_s64<28>),
- MAP(imm_v128_shr_n_s64<32>),
- MAP(imm_v128_shr_n_s64<36>),
- MAP(imm_v128_shr_n_s64<40>),
- MAP(imm_v128_shr_n_s64<44>),
- MAP(imm_v128_shr_n_s64<48>),
- MAP(imm_v128_shr_n_s64<52>),
- MAP(imm_v128_shr_n_s64<56>),
- MAP(imm_v128_shr_n_s64<60>),
- MAP(v128_from_v64),
- MAP(v128_zip_8),
- MAP(v128_zip_16),
- MAP(v128_zip_32),
- MAP(v128_mul_s16),
- MAP(v128_unpack_u8_s16),
- MAP(v128_unpack_s8_s16),
- MAP(v128_unpack_u16_s32),
- MAP(v128_unpack_s16_s32),
- MAP(v128_shl_8),
- MAP(v128_shr_u8),
- MAP(v128_shr_s8),
- MAP(v128_shl_16),
- MAP(v128_shr_u16),
- MAP(v128_shr_s16),
- MAP(v128_shl_32),
- MAP(v128_shr_u32),
- MAP(v128_shr_s32),
- MAP(v128_shl_64),
- MAP(v128_shr_u64),
- MAP(v128_shr_s64),
- MAP(v128_hadd_u8),
- MAP(v128_dotp_su8),
- MAP(v128_dotp_s16),
- MAP(v128_dotp_s32),
- MAP(v128_low_u32),
- MAP(v128_low_v64),
- MAP(v128_high_v64),
- MAP(v128_from_64),
- MAP(v128_from_32),
- MAP(v128_movemask_8),
- MAP(v128_zero),
- MAP(v128_dup_8),
- MAP(v128_dup_16),
- MAP(v128_dup_32),
- MAP(v128_dup_64),
- MAP(v128_unpacklo_u8_s16),
- MAP(v128_unpackhi_u8_s16),
- MAP(v128_unpacklo_s8_s16),
- MAP(v128_unpackhi_s8_s16),
- MAP(v128_blend_8),
- MAP(u32_load_unaligned),
- MAP(u32_store_unaligned),
- MAP(v64_load_unaligned),
- MAP(v64_store_unaligned),
- MAP(v128_load_unaligned),
- MAP(v128_store_unaligned),
- MAP(v256_sad_u8),
- MAP(v256_ssd_u8),
- MAP(v256_sad_u16),
- MAP(v256_ssd_s16),
- MAP(v256_hadd_u8),
- MAP(v256_low_u64),
- MAP(v256_dotp_su8),
- MAP(v256_dotp_s16),
- MAP(v256_dotp_s32),
- MAP(v256_add_8),
- MAP(v256_add_16),
- MAP(v256_sadd_s8),
- MAP(v256_sadd_u8),
- MAP(v256_sadd_s16),
- MAP(v256_add_32),
- MAP(v256_add_64),
- MAP(v256_sub_8),
- MAP(v256_ssub_u8),
- MAP(v256_ssub_s8),
- MAP(v256_sub_16),
- MAP(v256_ssub_u16),
- MAP(v256_ssub_s16),
- MAP(v256_sub_32),
- MAP(v256_sub_64),
- MAP(v256_ziplo_8),
- MAP(v256_ziphi_8),
- MAP(v256_ziplo_16),
- MAP(v256_ziphi_16),
- MAP(v256_ziplo_32),
- MAP(v256_ziphi_32),
- MAP(v256_ziplo_64),
- MAP(v256_ziphi_64),
- MAP(v256_unziphi_8),
- MAP(v256_unziplo_8),
- MAP(v256_unziphi_16),
- MAP(v256_unziplo_16),
- MAP(v256_unziphi_32),
- MAP(v256_unziplo_32),
- MAP(v256_unziphi_64),
- MAP(v256_unziplo_64),
- MAP(v256_pack_s32_u16),
- MAP(v256_pack_s32_s16),
- MAP(v256_pack_s16_u8),
- MAP(v256_pack_s16_s8),
- MAP(v256_or),
- MAP(v256_xor),
- MAP(v256_and),
- MAP(v256_andn),
- MAP(v256_mullo_s16),
- MAP(v256_mulhi_s16),
- MAP(v256_mullo_s32),
- MAP(v256_madd_s16),
- MAP(v256_madd_us8),
- MAP(v256_avg_u8),
- MAP(v256_rdavg_u8),
- MAP(v256_rdavg_u16),
- MAP(v256_avg_u16),
- MAP(v256_min_u8),
- MAP(v256_max_u8),
- MAP(v256_min_s8),
- MAP(v256_max_s8),
- MAP(v256_min_s16),
- MAP(v256_max_s16),
- MAP(v256_min_s32),
- MAP(v256_max_s32),
- MAP(v256_cmpgt_s8),
- MAP(v256_cmplt_s8),
- MAP(v256_cmpeq_8),
- MAP(v256_cmpgt_s16),
- MAP(v256_cmplt_s16),
- MAP(v256_cmpeq_16),
- MAP(v256_cmpgt_s32),
- MAP(v256_cmplt_s32),
- MAP(v256_cmpeq_32),
- MAP(v256_shuffle_8),
- MAP(v256_pshuffle_8),
- MAP(v256_wideshuffle_8),
- MAP(imm_v256_align<1>),
- MAP(imm_v256_align<2>),
- MAP(imm_v256_align<3>),
- MAP(imm_v256_align<4>),
- MAP(imm_v256_align<5>),
- MAP(imm_v256_align<6>),
- MAP(imm_v256_align<7>),
- MAP(imm_v256_align<8>),
- MAP(imm_v256_align<9>),
- MAP(imm_v256_align<10>),
- MAP(imm_v256_align<11>),
- MAP(imm_v256_align<12>),
- MAP(imm_v256_align<13>),
- MAP(imm_v256_align<14>),
- MAP(imm_v256_align<15>),
- MAP(imm_v256_align<16>),
- MAP(imm_v256_align<17>),
- MAP(imm_v256_align<18>),
- MAP(imm_v256_align<19>),
- MAP(imm_v256_align<20>),
- MAP(imm_v256_align<21>),
- MAP(imm_v256_align<22>),
- MAP(imm_v256_align<23>),
- MAP(imm_v256_align<24>),
- MAP(imm_v256_align<25>),
- MAP(imm_v256_align<26>),
- MAP(imm_v256_align<27>),
- MAP(imm_v256_align<28>),
- MAP(imm_v256_align<29>),
- MAP(imm_v256_align<30>),
- MAP(imm_v256_align<31>),
- MAP(v256_from_v128),
- MAP(v256_zip_8),
- MAP(v256_zip_16),
- MAP(v256_zip_32),
- MAP(v256_mul_s16),
- MAP(v256_unpack_u8_s16),
- MAP(v256_unpack_s8_s16),
- MAP(v256_unpack_u16_s32),
- MAP(v256_unpack_s16_s32),
- MAP(v256_shl_8),
- MAP(v256_shr_u8),
- MAP(v256_shr_s8),
- MAP(v256_shl_16),
- MAP(v256_shr_u16),
- MAP(v256_shr_s16),
- MAP(v256_shl_32),
- MAP(v256_shr_u32),
- MAP(v256_shr_s32),
- MAP(v256_shl_64),
- MAP(v256_shr_u64),
- MAP(v256_shr_s64),
- MAP(v256_abs_s8),
- MAP(v256_abs_s16),
- MAP(v256_padd_u8),
- MAP(v256_padd_s16),
- MAP(v256_unpacklo_u16_s32),
- MAP(v256_unpacklo_s16_s32),
- MAP(v256_unpackhi_u16_s32),
- MAP(v256_unpackhi_s16_s32),
- MAP(imm_v256_shr_n_word<1>),
- MAP(imm_v256_shr_n_word<2>),
- MAP(imm_v256_shr_n_word<3>),
- MAP(imm_v256_shr_n_word<4>),
- MAP(imm_v256_shr_n_word<5>),
- MAP(imm_v256_shr_n_word<6>),
- MAP(imm_v256_shr_n_word<7>),
- MAP(imm_v256_shr_n_word<8>),
- MAP(imm_v256_shr_n_word<9>),
- MAP(imm_v256_shr_n_word<10>),
- MAP(imm_v256_shr_n_word<11>),
- MAP(imm_v256_shr_n_word<12>),
- MAP(imm_v256_shr_n_word<13>),
- MAP(imm_v256_shr_n_word<14>),
- MAP(imm_v256_shr_n_word<15>),
- MAP(imm_v256_shl_n_word<1>),
- MAP(imm_v256_shl_n_word<2>),
- MAP(imm_v256_shl_n_word<3>),
- MAP(imm_v256_shl_n_word<4>),
- MAP(imm_v256_shl_n_word<5>),
- MAP(imm_v256_shl_n_word<6>),
- MAP(imm_v256_shl_n_word<7>),
- MAP(imm_v256_shl_n_word<8>),
- MAP(imm_v256_shl_n_word<9>),
- MAP(imm_v256_shl_n_word<10>),
- MAP(imm_v256_shl_n_word<11>),
- MAP(imm_v256_shl_n_word<12>),
- MAP(imm_v256_shl_n_word<13>),
- MAP(imm_v256_shl_n_word<14>),
- MAP(imm_v256_shl_n_word<15>),
- MAP(imm_v256_shr_n_byte<1>),
- MAP(imm_v256_shr_n_byte<2>),
- MAP(imm_v256_shr_n_byte<3>),
- MAP(imm_v256_shr_n_byte<4>),
- MAP(imm_v256_shr_n_byte<5>),
- MAP(imm_v256_shr_n_byte<6>),
- MAP(imm_v256_shr_n_byte<7>),
- MAP(imm_v256_shr_n_byte<8>),
- MAP(imm_v256_shr_n_byte<9>),
- MAP(imm_v256_shr_n_byte<10>),
- MAP(imm_v256_shr_n_byte<11>),
- MAP(imm_v256_shr_n_byte<12>),
- MAP(imm_v256_shr_n_byte<13>),
- MAP(imm_v256_shr_n_byte<14>),
- MAP(imm_v256_shr_n_byte<15>),
- MAP(imm_v256_shr_n_byte<16>),
- MAP(imm_v256_shr_n_byte<17>),
- MAP(imm_v256_shr_n_byte<18>),
- MAP(imm_v256_shr_n_byte<19>),
- MAP(imm_v256_shr_n_byte<20>),
- MAP(imm_v256_shr_n_byte<21>),
- MAP(imm_v256_shr_n_byte<22>),
- MAP(imm_v256_shr_n_byte<23>),
- MAP(imm_v256_shr_n_byte<24>),
- MAP(imm_v256_shr_n_byte<25>),
- MAP(imm_v256_shr_n_byte<26>),
- MAP(imm_v256_shr_n_byte<27>),
- MAP(imm_v256_shr_n_byte<28>),
- MAP(imm_v256_shr_n_byte<29>),
- MAP(imm_v256_shr_n_byte<30>),
- MAP(imm_v256_shr_n_byte<31>),
- MAP(imm_v256_shl_n_byte<1>),
- MAP(imm_v256_shl_n_byte<2>),
- MAP(imm_v256_shl_n_byte<3>),
- MAP(imm_v256_shl_n_byte<4>),
- MAP(imm_v256_shl_n_byte<5>),
- MAP(imm_v256_shl_n_byte<6>),
- MAP(imm_v256_shl_n_byte<7>),
- MAP(imm_v256_shl_n_byte<8>),
- MAP(imm_v256_shl_n_byte<9>),
- MAP(imm_v256_shl_n_byte<10>),
- MAP(imm_v256_shl_n_byte<11>),
- MAP(imm_v256_shl_n_byte<12>),
- MAP(imm_v256_shl_n_byte<13>),
- MAP(imm_v256_shl_n_byte<14>),
- MAP(imm_v256_shl_n_byte<15>),
- MAP(imm_v256_shl_n_byte<16>),
- MAP(imm_v256_shl_n_byte<17>),
- MAP(imm_v256_shl_n_byte<18>),
- MAP(imm_v256_shl_n_byte<19>),
- MAP(imm_v256_shl_n_byte<20>),
- MAP(imm_v256_shl_n_byte<21>),
- MAP(imm_v256_shl_n_byte<22>),
- MAP(imm_v256_shl_n_byte<23>),
- MAP(imm_v256_shl_n_byte<24>),
- MAP(imm_v256_shl_n_byte<25>),
- MAP(imm_v256_shl_n_byte<26>),
- MAP(imm_v256_shl_n_byte<27>),
- MAP(imm_v256_shl_n_byte<28>),
- MAP(imm_v256_shl_n_byte<29>),
- MAP(imm_v256_shl_n_byte<30>),
- MAP(imm_v256_shl_n_byte<31>),
- MAP(imm_v256_shl_n_8<1>),
- MAP(imm_v256_shl_n_8<2>),
- MAP(imm_v256_shl_n_8<3>),
- MAP(imm_v256_shl_n_8<4>),
- MAP(imm_v256_shl_n_8<5>),
- MAP(imm_v256_shl_n_8<6>),
- MAP(imm_v256_shl_n_8<7>),
- MAP(imm_v256_shr_n_u8<1>),
- MAP(imm_v256_shr_n_u8<2>),
- MAP(imm_v256_shr_n_u8<3>),
- MAP(imm_v256_shr_n_u8<4>),
- MAP(imm_v256_shr_n_u8<5>),
- MAP(imm_v256_shr_n_u8<6>),
- MAP(imm_v256_shr_n_u8<7>),
- MAP(imm_v256_shr_n_s8<1>),
- MAP(imm_v256_shr_n_s8<2>),
- MAP(imm_v256_shr_n_s8<3>),
- MAP(imm_v256_shr_n_s8<4>),
- MAP(imm_v256_shr_n_s8<5>),
- MAP(imm_v256_shr_n_s8<6>),
- MAP(imm_v256_shr_n_s8<7>),
- MAP(imm_v256_shl_n_16<1>),
- MAP(imm_v256_shl_n_16<2>),
- MAP(imm_v256_shl_n_16<4>),
- MAP(imm_v256_shl_n_16<6>),
- MAP(imm_v256_shl_n_16<8>),
- MAP(imm_v256_shl_n_16<10>),
- MAP(imm_v256_shl_n_16<12>),
- MAP(imm_v256_shl_n_16<14>),
- MAP(imm_v256_shr_n_u16<1>),
- MAP(imm_v256_shr_n_u16<2>),
- MAP(imm_v256_shr_n_u16<4>),
- MAP(imm_v256_shr_n_u16<6>),
- MAP(imm_v256_shr_n_u16<8>),
- MAP(imm_v256_shr_n_u16<10>),
- MAP(imm_v256_shr_n_u16<12>),
- MAP(imm_v256_shr_n_u16<14>),
- MAP(imm_v256_shr_n_s16<1>),
- MAP(imm_v256_shr_n_s16<2>),
- MAP(imm_v256_shr_n_s16<4>),
- MAP(imm_v256_shr_n_s16<6>),
- MAP(imm_v256_shr_n_s16<8>),
- MAP(imm_v256_shr_n_s16<10>),
- MAP(imm_v256_shr_n_s16<12>),
- MAP(imm_v256_shr_n_s16<14>),
- MAP(imm_v256_shl_n_32<1>),
- MAP(imm_v256_shl_n_32<4>),
- MAP(imm_v256_shl_n_32<8>),
- MAP(imm_v256_shl_n_32<12>),
- MAP(imm_v256_shl_n_32<16>),
- MAP(imm_v256_shl_n_32<20>),
- MAP(imm_v256_shl_n_32<24>),
- MAP(imm_v256_shl_n_32<28>),
- MAP(imm_v256_shr_n_u32<1>),
- MAP(imm_v256_shr_n_u32<4>),
- MAP(imm_v256_shr_n_u32<8>),
- MAP(imm_v256_shr_n_u32<12>),
- MAP(imm_v256_shr_n_u32<16>),
- MAP(imm_v256_shr_n_u32<20>),
- MAP(imm_v256_shr_n_u32<24>),
- MAP(imm_v256_shr_n_u32<28>),
- MAP(imm_v256_shr_n_s32<1>),
- MAP(imm_v256_shr_n_s32<4>),
- MAP(imm_v256_shr_n_s32<8>),
- MAP(imm_v256_shr_n_s32<12>),
- MAP(imm_v256_shr_n_s32<16>),
- MAP(imm_v256_shr_n_s32<20>),
- MAP(imm_v256_shr_n_s32<24>),
- MAP(imm_v256_shr_n_s32<28>),
- MAP(imm_v256_shl_n_64<1>),
- MAP(imm_v256_shl_n_64<4>),
- MAP(imm_v256_shl_n_64<8>),
- MAP(imm_v256_shl_n_64<12>),
- MAP(imm_v256_shl_n_64<16>),
- MAP(imm_v256_shl_n_64<20>),
- MAP(imm_v256_shl_n_64<24>),
- MAP(imm_v256_shl_n_64<28>),
- MAP(imm_v256_shl_n_64<32>),
- MAP(imm_v256_shl_n_64<36>),
- MAP(imm_v256_shl_n_64<40>),
- MAP(imm_v256_shl_n_64<44>),
- MAP(imm_v256_shl_n_64<48>),
- MAP(imm_v256_shl_n_64<52>),
- MAP(imm_v256_shl_n_64<56>),
- MAP(imm_v256_shl_n_64<60>),
- MAP(imm_v256_shr_n_u64<1>),
- MAP(imm_v256_shr_n_u64<4>),
- MAP(imm_v256_shr_n_u64<8>),
- MAP(imm_v256_shr_n_u64<12>),
- MAP(imm_v256_shr_n_u64<16>),
- MAP(imm_v256_shr_n_u64<20>),
- MAP(imm_v256_shr_n_u64<24>),
- MAP(imm_v256_shr_n_u64<28>),
- MAP(imm_v256_shr_n_u64<32>),
- MAP(imm_v256_shr_n_u64<36>),
- MAP(imm_v256_shr_n_u64<40>),
- MAP(imm_v256_shr_n_u64<44>),
- MAP(imm_v256_shr_n_u64<48>),
- MAP(imm_v256_shr_n_u64<52>),
- MAP(imm_v256_shr_n_u64<56>),
- MAP(imm_v256_shr_n_u64<60>),
- MAP(imm_v256_shr_n_s64<1>),
- MAP(imm_v256_shr_n_s64<4>),
- MAP(imm_v256_shr_n_s64<8>),
- MAP(imm_v256_shr_n_s64<12>),
- MAP(imm_v256_shr_n_s64<16>),
- MAP(imm_v256_shr_n_s64<20>),
- MAP(imm_v256_shr_n_s64<24>),
- MAP(imm_v256_shr_n_s64<28>),
- MAP(imm_v256_shr_n_s64<32>),
- MAP(imm_v256_shr_n_s64<36>),
- MAP(imm_v256_shr_n_s64<40>),
- MAP(imm_v256_shr_n_s64<44>),
- MAP(imm_v256_shr_n_s64<48>),
- MAP(imm_v256_shr_n_s64<52>),
- MAP(imm_v256_shr_n_s64<56>),
- MAP(imm_v256_shr_n_s64<60>),
- MAP(v256_movemask_8),
- MAP(v256_zero),
- MAP(v256_dup_8),
- MAP(v256_dup_16),
- MAP(v256_dup_32),
- MAP(v256_dup_64),
- MAP(v256_low_u32),
- MAP(v256_low_v64),
- MAP(v256_from_64),
- MAP(v256_from_v64),
- MAP(v256_ziplo_128),
- MAP(v256_ziphi_128),
- MAP(v256_unpacklo_u8_s16),
- MAP(v256_unpackhi_u8_s16),
- MAP(v256_unpacklo_s8_s16),
- MAP(v256_unpackhi_s8_s16),
- MAP(v256_blend_8),
- { NULL, NULL, NULL } };
-#undef MAP
-
-// Map reference functions to machine tuned functions. Since the
-// functions depend on machine tuned types, the non-machine tuned
-// instantiations of the test can't refer to these functions directly,
-// so we refer to them by name and do the mapping here.
-void Map(const char *name, fptr *ref, fptr *simd) {
- unsigned int i;
- for (i = 0; m[i].name && strcmp(name, m[i].name); i++) {
- }
-
- *ref = m[i].ref;
- *simd = m[i].simd;
-}
-
-// Used for printing errors in TestSimd1Arg, TestSimd2Args and TestSimd3Args
-std::string Print(const uint8_t *a, int size) {
- std::string text = "0x";
- for (int i = 0; i < size; i++) {
- const uint8_t c = a[!CONFIG_BIG_ENDIAN ? size - 1 - i : i];
- // Same as snprintf(..., ..., "%02x", c)
- text += (c >> 4) + '0' + ((c >> 4) > 9) * ('a' - '0' - 10);
- text += (c & 15) + '0' + ((c & 15) > 9) * ('a' - '0' - 10);
- }
-
- return text;
-}
-
-// Used in TestSimd1Arg, TestSimd2Args and TestSimd3Args to restrict argument
-// ranges
-void SetMask(uint8_t *s, int size, uint32_t mask, uint32_t maskwidth) {
- switch (maskwidth) {
- case 0: {
- break;
- }
- case 8: {
- for (int i = 0; i < size; i++) s[i] &= mask;
- break;
- }
- case 16: {
- uint16_t *t = reinterpret_cast<uint16_t *>(s);
- assert(!(reinterpret_cast<uintptr_t>(s) & 1));
- for (int i = 0; i < size / 2; i++) t[i] &= mask;
- break;
- }
- case 32: {
- uint32_t *t = reinterpret_cast<uint32_t *>(s);
- assert(!(reinterpret_cast<uintptr_t>(s) & 3));
- for (int i = 0; i < size / 4; i++) t[i] &= mask;
- break;
- }
- case 64: {
- uint64_t *t = reinterpret_cast<uint64_t *>(s);
- assert(!(reinterpret_cast<uintptr_t>(s) & 7));
- for (int i = 0; i < size / 8; i++) t[i] &= mask;
- break;
- }
- default: {
- FAIL() << "Unsupported mask width";
- break;
- }
- }
-}
-
-// We need some extra load/store functions
-void u64_store_aligned(void *p, uint64_t a) {
- v64_store_aligned(p, v64_from_64(a));
-}
-void s32_store_aligned(void *p, int32_t a) {
- u32_store_aligned(p, static_cast<uint32_t>(a));
-}
-void s64_store_aligned(void *p, int64_t a) {
- v64_store_aligned(p, v64_from_64(static_cast<uint64_t>(a)));
-}
-
-void c_u64_store_aligned(void *p, uint64_t a) {
- c_v64_store_aligned(p, c_v64_from_64(a));
-}
-
-void c_s32_store_aligned(void *p, int32_t a) {
- c_u32_store_aligned(p, static_cast<uint32_t>(a));
-}
-
-void c_s64_store_aligned(void *p, int64_t a) {
- c_v64_store_aligned(p, c_v64_from_64(static_cast<uint64_t>(a)));
-}
-
-uint64_t u64_load_aligned(const void *p) {
- return v64_u64(v64_load_aligned(p));
-}
-uint16_t u16_load_aligned(const void *p) {
- return *(reinterpret_cast<const uint16_t *>(p));
-}
-uint8_t u8_load_aligned(const void *p) {
- return *(reinterpret_cast<const uint8_t *>(p));
-}
-
-uint64_t c_u64_load_aligned(const void *p) {
- return c_v64_u64(c_v64_load_aligned(p));
-}
-uint16_t c_u16_load_aligned(const void *p) {
- return *(reinterpret_cast<const uint16_t *>(p));
-}
-uint8_t c_u8_load_aligned(const void *p) {
- return *(reinterpret_cast<const uint8_t *>(p));
-}
-
-// CompareSimd1Arg, CompareSimd2Args and CompareSimd3Args compare
-// intrinsics taking 1, 2 or 3 arguments respectively with their
-// corresponding C reference. Ideally, the loads and stores should
-// have gone into the template parameter list, but v64 and v128 could
-// be typedef'ed to the same type (which is the case on x86) and then
-// we can't instantiate both v64 and v128, so the function return and
-// argument types, including the always differing types in the C
-// equivalent are used instead. The function arguments must be void
-// pointers and then go through a cast to avoid matching errors in the
-// branches eliminated by the typeid tests in the calling function.
-template <typename Ret, typename Arg, typename CRet, typename CArg>
-int CompareSimd1Arg(fptr store, fptr load, fptr simd, void *d, fptr c_store,
- fptr c_load, fptr c_simd, void *ref_d, const void *a) {
- void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
- Arg (*const my_load)(const void *) = (Arg(*const)(const void *))load;
- Ret (*const my_simd)(Arg) = (Ret(*const)(Arg))simd;
- void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
- CArg (*const my_c_load)(const void *) = (CArg(*const)(const void *))c_load;
- CRet (*const my_c_simd)(CArg) = (CRet(*const)(CArg))c_simd;
-
- // Call reference and intrinsic
- my_c_store(ref_d, my_c_simd(my_c_load(a)));
- my_store(d, my_simd(my_load(a)));
-
- // Compare results
- return memcmp(ref_d, d, sizeof(CRet));
-}
-
-template <typename Ret, typename Arg1, typename Arg2, typename CRet,
- typename CArg1, typename CArg2>
-int CompareSimd2Args(fptr store, fptr load1, fptr load2, fptr simd, void *d,
- fptr c_store, fptr c_load1, fptr c_load2, fptr c_simd,
- void *ref_d, const void *a, const void *b) {
- void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
- Arg1 (*const my_load1)(const void *) = (Arg1(*const)(const void *))load1;
- Arg2 (*const my_load2)(const void *) = (Arg2(*const)(const void *))load2;
- Ret (*const my_simd)(Arg1, Arg2) = (Ret(*const)(Arg1, Arg2))simd;
- void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
- CArg1 (*const my_c_load1)(const void *) =
- (CArg1(*const)(const void *))c_load1;
- CArg2 (*const my_c_load2)(const void *) =
- (CArg2(*const)(const void *))c_load2;
- CRet (*const my_c_simd)(CArg1, CArg2) = (CRet(*const)(CArg1, CArg2))c_simd;
-
- // Call reference and intrinsic
- my_c_store(ref_d, my_c_simd(my_c_load1(a), my_c_load2(b)));
- my_store(d, my_simd(my_load1(a), my_load2(b)));
-
- // Compare results
- return memcmp(ref_d, d, sizeof(CRet));
-}
-
-template <typename Ret, typename Arg1, typename Arg2, typename Arg3,
- typename CRet, typename CArg1, typename CArg2, typename CArg3>
-int CompareSimd3Args(fptr store, fptr load1, fptr load2, fptr load3, fptr simd,
- void *d, fptr c_store, fptr c_load1, fptr c_load2,
- fptr c_load3, fptr c_simd, void *ref_d, const void *a,
- const void *b, const void *c) {
- void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
- Arg1 (*const my_load1)(const void *) = (Arg1(*const)(const void *))load1;
- Arg2 (*const my_load2)(const void *) = (Arg2(*const)(const void *))load2;
- Arg3 (*const my_load3)(const void *) = (Arg3(*const)(const void *))load3;
- Ret (*const my_simd)(Arg1, Arg2, Arg3) = (Ret(*const)(Arg1, Arg2, Arg3))simd;
- void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
- CArg1 (*const my_c_load1)(const void *) =
- (CArg1(*const)(const void *))c_load1;
- CArg2 (*const my_c_load2)(const void *) =
- (CArg2(*const)(const void *))c_load2;
- CArg2 (*const my_c_load3)(const void *) =
- (CArg2(*const)(const void *))c_load3;
- CRet (*const my_c_simd)(CArg1, CArg2, CArg3) =
- (CRet(*const)(CArg1, CArg2, CArg3))c_simd;
-
- // Call reference and intrinsic
- my_c_store(ref_d, my_c_simd(my_c_load1(a), my_c_load2(b), my_c_load3(c)));
- my_store(d, my_simd(my_load1(a), my_load2(b), my_load3(c)));
-
- // Compare results
- return memcmp(ref_d, d, sizeof(CRet));
-}
-
-} // namespace
-
-template <typename CRet, typename CArg>
-void TestSimd1Arg(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- fptr ref_simd;
- fptr simd;
- int error = 0;
- DECLARE_ALIGNED(32, uint8_t, s[32]);
- DECLARE_ALIGNED(32, uint8_t, d[32]);
- DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
- assert(sizeof(CArg) <= 32 && sizeof(CRet) <= 32);
- memset(ref_d, 0, sizeof(ref_d));
- memset(d, 0, sizeof(d));
-
- Map(name, &ref_simd, &simd);
- if (simd == NULL || ref_simd == NULL) {
- FAIL() << "Internal error: Unknown intrinsic function " << name;
- }
- for (unsigned int count = 0;
- count < iterations && !error && !testing::Test::HasFailure(); count++) {
- for (unsigned int c = 0; c < sizeof(CArg); c++) s[c] = rnd.Rand8();
-
- if (maskwidth) {
- SetMask(s, sizeof(CArg), mask, maskwidth);
- }
-
- if (typeid(CRet) == typeid(c_v64) && typeid(CArg) == typeid(c_v64)) {
- // V64_V64
- error = CompareSimd1Arg<v64, v64, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg) == typeid(uint8_t)) {
- // V64_U8
- error = CompareSimd1Arg<v64, uint8_t, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(u8_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg) == typeid(uint16_t)) {
- // V64_U16
- error = CompareSimd1Arg<v64, uint16_t, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(u16_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg) == typeid(uint32_t)) {
- // V64_U32
- error = CompareSimd1Arg<v64, uint32_t, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint64_t) &&
- typeid(CArg) == typeid(c_v64)) {
- // U64_V64
- error = CompareSimd1Arg<uint64_t, v64, CRet, CArg>(
- reinterpret_cast<fptr>(u64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(int64_t) &&
- typeid(CArg) == typeid(c_v64)) {
- // S64_V64
- error = CompareSimd1Arg<int64_t, v64, CRet, CArg>(
- reinterpret_cast<fptr>(s64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_s64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg) == typeid(c_v64)) {
- // U32_V64
- error = CompareSimd1Arg<uint32_t, v64, CRet, CArg>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(int32_t) &&
- typeid(CArg) == typeid(c_v64)) {
- // S32_V64
- error = CompareSimd1Arg<int32_t, v64, CRet, CArg>(
- reinterpret_cast<fptr>(s32_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_s32_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg) == typeid(c_v128)) {
- // U32_V128
- error = CompareSimd1Arg<uint32_t, v128, CRet, CArg>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint64_t) &&
- typeid(CArg) == typeid(c_v128)) {
- // U64_V128
- error = CompareSimd1Arg<uint64_t, v128, CRet, CArg>(
- reinterpret_cast<fptr>(u64_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u64_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint64_t) &&
- typeid(CArg) == typeid(c_v256)) {
- // U64_V256
- error = CompareSimd1Arg<uint64_t, v256, CRet, CArg>(
- reinterpret_cast<fptr>(u64_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u64_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg) == typeid(c_v128)) {
- // V64_V128
- error = CompareSimd1Arg<v64, v128, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(c_v128)) {
- // V128_V128
- error = CompareSimd1Arg<v128, v128, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(c_v64)) {
- // V128_V64
- error = CompareSimd1Arg<v128, v64, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(uint8_t)) {
- // V128_U8
- error = CompareSimd1Arg<v128, uint8_t, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(u8_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(uint16_t)) {
- // V128_U16
- error = CompareSimd1Arg<v128, uint16_t, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(u16_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(uint32_t)) {
- // V128_U32
- error = CompareSimd1Arg<v128, uint32_t, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg) == typeid(uint64_t)) {
- // V128_U64
- error = CompareSimd1Arg<v128, uint64_t, CRet, CArg>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(u64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_u64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(c_v256)) {
- // V256_V256
- error = CompareSimd1Arg<v256, v256, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(c_v128)) {
- // V256_V128
- error = CompareSimd1Arg<v256, v128, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(uint8_t)) {
- // V256_U8
- error = CompareSimd1Arg<v256, uint8_t, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(u8_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(uint16_t)) {
- // V256_U16
- error = CompareSimd1Arg<v256, uint16_t, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(u16_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(uint32_t)) {
- // V256_U32
- error = CompareSimd1Arg<v256, uint32_t, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg) == typeid(uint64_t)) {
- // V256_U64
- error = CompareSimd1Arg<v256, uint64_t, CRet, CArg>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(u64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_u64_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg) == typeid(c_v256)) {
- // U32_V256
- error = CompareSimd1Arg<uint32_t, v256, CRet, CArg>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg) == typeid(c_v256)) {
- // V64_V256
- error = CompareSimd1Arg<v64, v256, CRet, CArg>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
- } else {
- FAIL() << "Internal error: Unknown intrinsic function "
- << typeid(CRet).name() << " " << name << "(" << typeid(CArg).name()
- << ")";
- }
- }
-
- EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
- << Print(s, sizeof(s)) << ") -> " << Print(d, sizeof(d))
- << " (simd), " << Print(ref_d, sizeof(ref_d)) << " (ref)";
-}
-
-template <typename CRet, typename CArg1, typename CArg2>
-void TestSimd2Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- fptr ref_simd;
- fptr simd;
- int error = 0;
- DECLARE_ALIGNED(32, uint8_t, s1[32]);
- DECLARE_ALIGNED(32, uint8_t, s2[32]);
- DECLARE_ALIGNED(32, uint8_t, d[32]);
- DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
- assert(sizeof(CArg1) <= 32 && sizeof(CArg2) <= 32 && sizeof(CRet) <= 32);
- memset(ref_d, 0, sizeof(ref_d));
- memset(d, 0, sizeof(d));
-
- Map(name, &ref_simd, &simd);
- if (simd == NULL || ref_simd == NULL) {
- FAIL() << "Internal error: Unknown intrinsic function " << name;
- }
-
- for (unsigned int count = 0;
- count < iterations && !error && !testing::Test::HasFailure(); count++) {
- for (unsigned int c = 0; c < sizeof(CArg1); c++) s1[c] = rnd.Rand8();
-
- for (unsigned int c = 0; c < sizeof(CArg2); c++) s2[c] = rnd.Rand8();
-
- if (maskwidth) SetMask(s2, sizeof(CArg2), mask, maskwidth);
-
- if (typeid(CRet) == typeid(c_v64) && typeid(CArg1) == typeid(c_v64) &&
- typeid(CArg2) == typeid(c_v64)) {
- // V64_V64V64
- error = CompareSimd2Args<v64, v64, v64, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg1) == typeid(uint32_t) &&
- typeid(CArg2) == typeid(uint32_t)) {
- // V64_U32U32
- error = CompareSimd2Args<v64, uint32_t, uint32_t, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(u32_load_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg1) == typeid(c_v64) &&
- typeid(CArg2) == typeid(c_v64)) {
- // U32_V64V64
- error = CompareSimd2Args<uint32_t, v64, v64, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(int64_t) &&
- typeid(CArg1) == typeid(c_v64) &&
- typeid(CArg2) == typeid(c_v64)) {
- // S64_V64V64
- error = CompareSimd2Args<int64_t, v64, v64, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(s64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_s64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v64) &&
- typeid(CArg1) == typeid(c_v64) &&
- typeid(CArg2) == typeid(uint32_t)) {
- // V64_V64U32
- error = CompareSimd2Args<v64, v64, uint32_t, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v64_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v64_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128)) {
- // V128_V128V128
- error = CompareSimd2Args<v128, v128, v128, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128)) {
- // U32_V128V128
- error = CompareSimd2Args<uint32_t, v128, v128, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(uint64_t) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128)) {
- // U64_V128V128
- error = CompareSimd2Args<uint64_t, v128, v128, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(u64_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u64_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(int64_t) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128)) {
- // S64_V128V128
- error = CompareSimd2Args<int64_t, v128, v128, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(s64_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_s64_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg1) == typeid(uint64_t) &&
- typeid(CArg2) == typeid(uint64_t)) {
- // V128_U64U64
- error = CompareSimd2Args<v128, uint64_t, uint64_t, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(u64_load_aligned),
- reinterpret_cast<fptr>(u64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_u64_load_aligned),
- reinterpret_cast<fptr>(c_u64_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg1) == typeid(c_v64) &&
- typeid(CArg2) == typeid(c_v64)) {
- // V128_V64V64
- error = CompareSimd2Args<v128, v64, v64, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v64_load_aligned),
- reinterpret_cast<fptr>(v64_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(c_v64_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v128) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(uint32_t)) {
- // V128_V128U32
- error = CompareSimd2Args<v128, v128, uint32_t, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(c_v256)) {
- // V256_V256V256
- error = CompareSimd2Args<v256, v256, v256, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(uint64_t) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(c_v256)) {
- // U64_V256V256
- error = CompareSimd2Args<uint64_t, v256, v256, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(u64_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u64_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(int64_t) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(c_v256)) {
- // S64_V256V256
- error = CompareSimd2Args<int64_t, v256, v256, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(s64_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_s64_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(uint32_t) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(c_v256)) {
- // U32_V256V256
- error = CompareSimd2Args<uint32_t, v256, v256, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(u32_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_u32_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128)) {
- // V256_V128V128
- error = CompareSimd2Args<v256, v128, v128, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(uint32_t)) {
- // V256_V256U32
- error = CompareSimd2Args<v256, v256, uint32_t, CRet, CArg1, CArg2>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(u32_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_u32_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
-
- } else {
- FAIL() << "Internal error: Unknown intrinsic function "
- << typeid(CRet).name() << " " << name << "("
- << typeid(CArg1).name() << ", " << typeid(CArg2).name() << ")";
- }
- }
-
- EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
- << Print(s1, sizeof(s1)) << ", " << Print(s2, sizeof(s2))
- << ") -> " << Print(d, sizeof(d)) << " (simd), "
- << Print(ref_d, sizeof(ref_d)) << " (ref)";
-}
-
-template <typename CRet, typename CArg1, typename CArg2, typename CArg3>
-void TestSimd3Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- fptr ref_simd;
- fptr simd;
- int error = 0;
- DECLARE_ALIGNED(32, uint8_t, s1[32]);
- DECLARE_ALIGNED(32, uint8_t, s2[32]);
- DECLARE_ALIGNED(32, uint8_t, s3[32]);
- DECLARE_ALIGNED(32, uint8_t, d[32]);
- DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
- assert(sizeof(CArg1) <= 32 && sizeof(CArg2) <= 32 && sizeof(CArg3) <= 32 &&
- sizeof(CRet) <= 32);
- memset(ref_d, 0, sizeof(ref_d));
- memset(d, 0, sizeof(d));
-
- Map(name, &ref_simd, &simd);
- if (simd == NULL || ref_simd == NULL) {
- FAIL() << "Internal error: Unknown intrinsic function " << name;
- }
-
- for (unsigned int count = 0;
- count < iterations && !error && !testing::Test::HasFailure(); count++) {
- for (unsigned int c = 0; c < sizeof(CArg1); c++) s1[c] = rnd.Rand8();
-
- for (unsigned int c = 0; c < sizeof(CArg2); c++) s2[c] = rnd.Rand8();
-
- for (unsigned int c = 0; c < sizeof(CArg3); c++) s3[c] = rnd.Rand8();
-
- if (maskwidth) SetMask(s3, sizeof(CArg3), mask, maskwidth);
-
- if (typeid(CRet) == typeid(c_v128) && typeid(CArg1) == typeid(c_v128) &&
- typeid(CArg2) == typeid(c_v128) && typeid(CArg3) == typeid(c_v128)) {
- // V128_V128V128V128
- error =
- CompareSimd3Args<v128, v128, v128, v128, CRet, CArg1, CArg2, CArg3>(
- reinterpret_cast<fptr>(v128_store_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned),
- reinterpret_cast<fptr>(v128_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v128_store_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(c_v128_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2, s3);
- } else if (typeid(CRet) == typeid(c_v256) &&
- typeid(CArg1) == typeid(c_v256) &&
- typeid(CArg2) == typeid(c_v256) &&
- typeid(CArg3) == typeid(c_v256)) {
- // V256_V256V256V256
- error =
- CompareSimd3Args<v256, v256, v256, v256, CRet, CArg1, CArg2, CArg3>(
- reinterpret_cast<fptr>(v256_store_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned),
- reinterpret_cast<fptr>(v256_load_aligned), simd, d,
- reinterpret_cast<fptr>(c_v256_store_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(c_v256_load_aligned),
- reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2, s3);
- } else {
- FAIL() << "Internal error: Unknown intrinsic function "
- << typeid(CRet).name() << " " << name << "("
- << typeid(CArg1).name() << ", " << typeid(CArg2).name() << ", "
- << typeid(CArg3).name() << ")";
- }
- }
-
- EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
- << Print(s1, sizeof(s1)) << ", " << Print(s2, sizeof(s2))
- << ", " << Print(s3, sizeof(s3)) << ") -> "
- << Print(d, sizeof(d)) << " (simd), "
- << Print(ref_d, sizeof(ref_d)) << " (ref)";
-}
-
-// Instantiations to make the functions callable from another files
-template void TestSimd1Arg<c_v64, uint8_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v64, uint16_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v64, uint32_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint32_t, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<int32_t, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint64_t, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<int64_t, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<c_v64, uint32_t, uint32_t>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v64, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<c_v64, c_v64, uint32_t>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<int64_t, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<uint32_t, c_v64, c_v64>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd1Arg<c_v128, c_v128>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v128, uint8_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v128, uint16_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v128, uint32_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v128, uint64_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v128, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint32_t, c_v128>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint64_t, c_v128>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v64, c_v128>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<c_v128, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v128, c_v128, uint32_t>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v128, uint64_t, uint64_t>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v128, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<uint64_t, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<int64_t, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<uint32_t, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd3Args<c_v128, c_v128, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, c_v128>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, c_v256>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint64_t, c_v256>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, uint8_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, uint16_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, uint32_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v256, uint64_t>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<uint32_t, c_v256>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd1Arg<c_v64, c_v256>(uint32_t, uint32_t, uint32_t,
- const char *);
-template void TestSimd2Args<c_v256, c_v128, c_v128>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v256, c_v256, c_v256>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<c_v256, c_v256, uint32_t>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<uint64_t, c_v256, c_v256>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<int64_t, c_v256, c_v256>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd2Args<uint32_t, c_v256, c_v256>(uint32_t, uint32_t,
- uint32_t, const char *);
-template void TestSimd3Args<c_v256, c_v256, c_v256, c_v256>(uint32_t, uint32_t,
- uint32_t,
- const char *);
-
-} // namespace SIMD_NAMESPACE
diff --git a/third_party/aom/test/simd_cmp_neon.cc b/third_party/aom/test/simd_cmp_neon.cc
deleted file mode 100644
index 53c1e2a07..000000000
--- a/third_party/aom/test/simd_cmp_neon.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if defined(__OPTIMIZE__) && __OPTIMIZE__
-#define ARCH NEON
-#define ARCH_POSTFIX(name) name##_neon
-#define SIMD_NAMESPACE simd_test_neon
-#include "test/simd_cmp_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_cmp_sse2.cc b/third_party/aom/test/simd_cmp_sse2.cc
deleted file mode 100644
index f7827a7fa..000000000
--- a/third_party/aom/test/simd_cmp_sse2.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSE2
-#define ARCH_POSTFIX(name) name##_sse2
-#define SIMD_NAMESPACE simd_test_sse2
-#include "test/simd_cmp_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_cmp_sse4.cc b/third_party/aom/test/simd_cmp_sse4.cc
deleted file mode 100644
index 3566764b6..000000000
--- a/third_party/aom/test/simd_cmp_sse4.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSE4_1
-#define ARCH_POSTFIX(name) name##_sse4_1
-#define SIMD_NAMESPACE simd_test_sse4_1
-#include "test/simd_cmp_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_cmp_ssse3.cc b/third_party/aom/test/simd_cmp_ssse3.cc
deleted file mode 100644
index 57bf135dd..000000000
--- a/third_party/aom/test/simd_cmp_ssse3.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSSE3
-#define ARCH_POSTFIX(name) name##_ssse3
-#define SIMD_NAMESPACE simd_test_ssse3
-#include "test/simd_cmp_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_impl.h b/third_party/aom/test/simd_impl.h
deleted file mode 100644
index fd06f67fd..000000000
--- a/third_party/aom/test/simd_impl.h
+++ /dev/null
@@ -1,1141 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#define SIMD_CHECK 1
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "aom_dsp/aom_simd_inline.h"
-#include "aom_dsp/simd/v256_intrinsics_c.h"
-
-namespace SIMD_NAMESPACE {
-
-template <typename param_signature>
-class TestIntrinsic : public ::testing::TestWithParam<param_signature> {
- public:
- virtual ~TestIntrinsic() {}
- virtual void SetUp() {
- mask = ::testing::get<0>(this->GetParam());
- maskwidth = ::testing::get<1>(this->GetParam());
- name = ::testing::get<2>(this->GetParam());
- }
-
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-
- protected:
- uint32_t mask, maskwidth;
- const char *name;
-};
-
-// Create one typedef for each function signature
-#define TYPEDEF_SIMD(name) \
- typedef TestIntrinsic< ::testing::tuple<uint32_t, uint32_t, const char *> > \
- ARCH_POSTFIX(name)
-
-TYPEDEF_SIMD(V64_U8);
-TYPEDEF_SIMD(V64_U16);
-TYPEDEF_SIMD(V64_U32);
-TYPEDEF_SIMD(V64_V64);
-TYPEDEF_SIMD(U32_V64);
-TYPEDEF_SIMD(S32_V64);
-TYPEDEF_SIMD(U64_V64);
-TYPEDEF_SIMD(S64_V64);
-TYPEDEF_SIMD(V64_U32U32);
-TYPEDEF_SIMD(V64_V64V64);
-TYPEDEF_SIMD(S64_V64V64);
-TYPEDEF_SIMD(V64_V64U32);
-TYPEDEF_SIMD(U32_V64V64);
-TYPEDEF_SIMD(V128_V64);
-TYPEDEF_SIMD(V128_V128);
-TYPEDEF_SIMD(U32_V128);
-TYPEDEF_SIMD(U64_V128);
-TYPEDEF_SIMD(V64_V128);
-TYPEDEF_SIMD(V128_U8);
-TYPEDEF_SIMD(V128_U16);
-TYPEDEF_SIMD(V128_U32);
-TYPEDEF_SIMD(V128_U64);
-TYPEDEF_SIMD(V128_U64U64);
-TYPEDEF_SIMD(V128_V64V64);
-TYPEDEF_SIMD(V128_V128V128);
-TYPEDEF_SIMD(V128_V128V128V128);
-TYPEDEF_SIMD(S64_V128V128);
-TYPEDEF_SIMD(V128_V128U32);
-TYPEDEF_SIMD(U32_V128V128);
-TYPEDEF_SIMD(U64_V128V128);
-TYPEDEF_SIMD(V256_V128);
-TYPEDEF_SIMD(V256_V256);
-TYPEDEF_SIMD(U64_V256);
-TYPEDEF_SIMD(V256_V128V128);
-TYPEDEF_SIMD(V256_V256V256);
-TYPEDEF_SIMD(V256_V256V256V256);
-TYPEDEF_SIMD(U64_V256V256);
-TYPEDEF_SIMD(S64_V256V256);
-TYPEDEF_SIMD(V256_V256U32);
-TYPEDEF_SIMD(U32_V256V256);
-TYPEDEF_SIMD(V256_U8);
-TYPEDEF_SIMD(V256_U16);
-TYPEDEF_SIMD(V256_U32);
-TYPEDEF_SIMD(V256_U64);
-TYPEDEF_SIMD(U32_V256);
-TYPEDEF_SIMD(V64_V256);
-
-// Google Test allows up to 50 tests per case, so split the largest
-typedef ARCH_POSTFIX(V64_V64) ARCH_POSTFIX(V64_V64_Part2);
-typedef ARCH_POSTFIX(V64_V64V64) ARCH_POSTFIX(V64_V64V64_Part2);
-typedef ARCH_POSTFIX(V128_V128) ARCH_POSTFIX(V128_V128_Part2);
-typedef ARCH_POSTFIX(V128_V128) ARCH_POSTFIX(V128_V128_Part3);
-typedef ARCH_POSTFIX(V128_V128) ARCH_POSTFIX(V128_V128_Part4);
-typedef ARCH_POSTFIX(V128_V128V128) ARCH_POSTFIX(V128_V128V128_Part2);
-typedef ARCH_POSTFIX(V256_V256) ARCH_POSTFIX(V256_V256_Part2);
-typedef ARCH_POSTFIX(V256_V256) ARCH_POSTFIX(V256_V256_Part3);
-typedef ARCH_POSTFIX(V256_V256) ARCH_POSTFIX(V256_V256_Part4);
-typedef ARCH_POSTFIX(V256_V256) ARCH_POSTFIX(V256_V256_Part5);
-typedef ARCH_POSTFIX(V256_V256V256) ARCH_POSTFIX(V256_V256V256_Part2);
-
-// These functions are machine tuned located elsewhere
-template <typename c_ret, typename c_arg>
-void TestSimd1Arg(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name);
-
-template <typename c_ret, typename c_arg1, typename c_arg2>
-void TestSimd2Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name);
-
-template <typename c_ret, typename c_arg1, typename c_arg2, typename c_arg3>
-void TestSimd3Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
- const char *name);
-
-const int kIterations = 65536;
-
-// Add a macro layer since TEST_P will quote the name so we need to
-// expand it first with the prefix.
-#define MY_TEST_P(name, test) TEST_P(name, test)
-
-MY_TEST_P(ARCH_POSTFIX(V64_U8), TestIntrinsics) {
- TestSimd1Arg<c_v64, uint8_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_U16), TestIntrinsics) {
- TestSimd1Arg<c_v64, uint16_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_U32), TestIntrinsics) {
- TestSimd1Arg<c_v64, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V64), TestIntrinsics) {
- TestSimd1Arg<c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U64_V64), TestIntrinsics) {
- TestSimd1Arg<uint64_t, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(S64_V64), TestIntrinsics) {
- TestSimd1Arg<int64_t, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V64), TestIntrinsics) {
- TestSimd1Arg<uint32_t, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(S32_V64), TestIntrinsics) {
- TestSimd1Arg<int32_t, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_U32U32), TestIntrinsics) {
- TestSimd2Args<c_v64, uint32_t, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V64V64), TestIntrinsics) {
- TestSimd2Args<c_v64, c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(S64_V64V64), TestIntrinsics) {
- TestSimd2Args<int64_t, c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V64V64), TestIntrinsics) {
- TestSimd2Args<uint32_t, c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V64U32), TestIntrinsics) {
- TestSimd2Args<c_v64, c_v64, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-// Google Test allows up to 50 tests per case, so split the largest
-MY_TEST_P(ARCH_POSTFIX(V64_V64_Part2), TestIntrinsics) {
- TestSimd1Arg<c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V64V64_Part2), TestIntrinsics) {
- TestSimd2Args<c_v64, c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V128), TestIntrinsics) {
- TestSimd1Arg<uint32_t, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U64_V128), TestIntrinsics) {
- TestSimd1Arg<uint64_t, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V128), TestIntrinsics) {
- TestSimd1Arg<c_v64, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128), TestIntrinsics) {
- TestSimd1Arg<c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_U8), TestIntrinsics) {
- TestSimd1Arg<c_v128, uint8_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_U16), TestIntrinsics) {
- TestSimd1Arg<c_v128, uint16_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_U32), TestIntrinsics) {
- TestSimd1Arg<c_v128, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_U64), TestIntrinsics) {
- TestSimd1Arg<c_v128, uint64_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V64), TestIntrinsics) {
- TestSimd1Arg<c_v128, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128V128), TestIntrinsics) {
- TestSimd2Args<c_v128, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128V128V128), TestIntrinsics) {
- TestSimd3Args<c_v128, c_v128, c_v128, c_v128>(kIterations, mask, maskwidth,
- name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V128V128), TestIntrinsics) {
- TestSimd2Args<uint32_t, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U64_V128V128), TestIntrinsics) {
- TestSimd2Args<uint64_t, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(S64_V128V128), TestIntrinsics) {
- TestSimd2Args<int64_t, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_U64U64), TestIntrinsics) {
- TestSimd2Args<c_v128, uint64_t, uint64_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V64V64), TestIntrinsics) {
- TestSimd2Args<c_v128, c_v64, c_v64>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128U32), TestIntrinsics) {
- TestSimd2Args<c_v128, c_v128, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128V128_Part2), TestIntrinsics) {
- TestSimd2Args<c_v128, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128_Part2), TestIntrinsics) {
- TestSimd1Arg<c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128_Part3), TestIntrinsics) {
- TestSimd1Arg<c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V128_V128_Part4), TestIntrinsics) {
- TestSimd1Arg<c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U64_V256), TestIntrinsics) {
- TestSimd1Arg<uint64_t, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V128), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256V256), TestIntrinsics) {
- TestSimd2Args<c_v256, c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256V256V256), TestIntrinsics) {
- TestSimd3Args<c_v256, c_v256, c_v256, c_v256>(kIterations, mask, maskwidth,
- name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V128V128), TestIntrinsics) {
- TestSimd2Args<c_v256, c_v128, c_v128>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V256V256), TestIntrinsics) {
- TestSimd2Args<uint32_t, c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U64_V256V256), TestIntrinsics) {
- TestSimd2Args<uint64_t, c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(S64_V256V256), TestIntrinsics) {
- TestSimd2Args<int64_t, c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256V256_Part2), TestIntrinsics) {
- TestSimd2Args<c_v256, c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256U32), TestIntrinsics) {
- TestSimd2Args<c_v256, c_v256, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256_Part2), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256_Part3), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256_Part4), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_V256_Part5), TestIntrinsics) {
- TestSimd1Arg<c_v256, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_U8), TestIntrinsics) {
- TestSimd1Arg<c_v256, uint8_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_U16), TestIntrinsics) {
- TestSimd1Arg<c_v256, uint16_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_U32), TestIntrinsics) {
- TestSimd1Arg<c_v256, uint32_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V256_U64), TestIntrinsics) {
- TestSimd1Arg<c_v256, uint64_t>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(U32_V256), TestIntrinsics) {
- TestSimd1Arg<uint32_t, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-MY_TEST_P(ARCH_POSTFIX(V64_V256), TestIntrinsics) {
- TestSimd1Arg<c_v64, c_v256>(kIterations, mask, maskwidth, name);
-}
-
-// Add a macro layer since INSTANTIATE_TEST_CASE_P will quote the name
-// so we need to expand it first with the prefix
-#define INSTANTIATE(name, type, ...) \
- INSTANTIATE_TEST_CASE_P(name, type, ::testing::Values(__VA_ARGS__))
-
-#define SIMD_TUPLE(name, mask, maskwidth) \
- ::testing::make_tuple(mask, maskwidth, static_cast<const char *>(#name))
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V64V64),
- (SIMD_TUPLE(v64_sad_u8, 0U, 0U), SIMD_TUPLE(v64_ssd_u8, 0U, 0U)));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V64_V64V64), SIMD_TUPLE(v64_add_8, 0U, 0U),
- SIMD_TUPLE(v64_add_16, 0U, 0U), SIMD_TUPLE(v64_sadd_s16, 0U, 0U),
- SIMD_TUPLE(v64_add_32, 0U, 0U), SIMD_TUPLE(v64_sub_8, 0U, 0U),
- SIMD_TUPLE(v64_ssub_u8, 0U, 0U), SIMD_TUPLE(v64_ssub_s8, 0U, 0U),
- SIMD_TUPLE(v64_sub_16, 0U, 0U), SIMD_TUPLE(v64_ssub_s16, 0U, 0U),
- SIMD_TUPLE(v64_ssub_u16, 0U, 0U), SIMD_TUPLE(v64_sub_32, 0U, 0U),
- SIMD_TUPLE(v64_ziplo_8, 0U, 0U), SIMD_TUPLE(v64_ziphi_8, 0U, 0U),
- SIMD_TUPLE(v64_ziplo_16, 0U, 0U), SIMD_TUPLE(v64_ziphi_16, 0U, 0U),
- SIMD_TUPLE(v64_ziplo_32, 0U, 0U), SIMD_TUPLE(v64_ziphi_32, 0U, 0U),
- SIMD_TUPLE(v64_pack_s32_s16, 0U, 0U), SIMD_TUPLE(v64_pack_s16_u8, 0U, 0U),
- SIMD_TUPLE(v64_pack_s16_s8, 0U, 0U), SIMD_TUPLE(v64_unziphi_8, 0U, 0U),
- SIMD_TUPLE(v64_unziplo_8, 0U, 0U), SIMD_TUPLE(v64_unziphi_16, 0U, 0U),
- SIMD_TUPLE(v64_unziplo_16, 0U, 0U), SIMD_TUPLE(v64_or, 0U, 0U),
- SIMD_TUPLE(v64_xor, 0U, 0U), SIMD_TUPLE(v64_and, 0U, 0U),
- SIMD_TUPLE(v64_andn, 0U, 0U), SIMD_TUPLE(v64_mullo_s16, 0U, 0U),
- SIMD_TUPLE(v64_mulhi_s16, 0U, 0U), SIMD_TUPLE(v64_mullo_s32, 0U, 0U),
- SIMD_TUPLE(v64_madd_s16, 0U, 0U), SIMD_TUPLE(v64_madd_us8, 0U, 0U),
- SIMD_TUPLE(v64_avg_u8, 0U, 0U), SIMD_TUPLE(v64_rdavg_u8, 0U, 0U),
- SIMD_TUPLE(v64_avg_u16, 0U, 0U), SIMD_TUPLE(v64_min_u8, 0U, 0U),
- SIMD_TUPLE(v64_max_u8, 0U, 0U), SIMD_TUPLE(v64_min_s8, 0U, 0U),
- SIMD_TUPLE(v64_max_s8, 0U, 0U), SIMD_TUPLE(v64_min_s16, 0U, 0U),
- SIMD_TUPLE(v64_max_s16, 0U, 0U), SIMD_TUPLE(v64_cmpgt_s8, 0U, 0U),
- SIMD_TUPLE(v64_cmplt_s8, 0U, 0U), SIMD_TUPLE(v64_cmpeq_8, 0U, 0U),
- SIMD_TUPLE(v64_cmpgt_s16, 0U, 0U), SIMD_TUPLE(v64_cmplt_s16, 0U, 0U),
- SIMD_TUPLE(v64_cmpeq_16, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V64_V64V64_Part2), SIMD_TUPLE(v64_shuffle_8, 7U, 8U),
- SIMD_TUPLE(v64_pack_s32_u16, 0U, 0U), SIMD_TUPLE(v64_rdavg_u16, 0U, 0U),
- SIMD_TUPLE(v64_sadd_s8, 0U, 0U), SIMD_TUPLE(v64_sadd_u8, 0U, 0U),
- SIMD_TUPLE(imm_v64_align<1>, 0U, 0U), SIMD_TUPLE(imm_v64_align<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_align<3>, 0U, 0U), SIMD_TUPLE(imm_v64_align<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_align<5>, 0U, 0U), SIMD_TUPLE(imm_v64_align<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_align<7>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_V64), SIMD_TUPLE(v64_abs_s8, 0U, 0U),
- SIMD_TUPLE(v64_abs_s16, 0U, 0U),
- SIMD_TUPLE(v64_unpacklo_u8_s16, 0U, 0U),
- SIMD_TUPLE(v64_unpackhi_u8_s16, 0U, 0U),
- SIMD_TUPLE(v64_unpacklo_s8_s16, 0U, 0U),
- SIMD_TUPLE(v64_unpackhi_s8_s16, 0U, 0U),
- SIMD_TUPLE(v64_unpacklo_u16_s32, 0U, 0U),
- SIMD_TUPLE(v64_unpacklo_s16_s32, 0U, 0U),
- SIMD_TUPLE(v64_unpackhi_u16_s32, 0U, 0U),
- SIMD_TUPLE(v64_unpackhi_s16_s32, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<8>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_V64_Part2),
- SIMD_TUPLE(imm_v64_shl_n_16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shl_n_32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_u32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v64_shr_n_s32<28>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_V64U32), SIMD_TUPLE(v64_shl_8, 7U, 32U),
- SIMD_TUPLE(v64_shr_u8, 7U, 32U), SIMD_TUPLE(v64_shr_s8, 7U, 32U),
- SIMD_TUPLE(v64_shl_16, 15U, 32U), SIMD_TUPLE(v64_shr_u16, 15U, 32U),
- SIMD_TUPLE(v64_shr_s16, 15U, 32U), SIMD_TUPLE(v64_shl_32, 31U, 32U),
- SIMD_TUPLE(v64_shr_u32, 31U, 32U),
- SIMD_TUPLE(v64_shr_s32, 31U, 32U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U64_V64), SIMD_TUPLE(v64_hadd_u8, 0U, 0U),
- SIMD_TUPLE(v64_u64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(S64_V64), SIMD_TUPLE(v64_hadd_s16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V64), SIMD_TUPLE(v64_low_u32, 0U, 0U),
- SIMD_TUPLE(v64_high_u32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(S32_V64), SIMD_TUPLE(v64_low_s32, 0U, 0U),
- SIMD_TUPLE(v64_high_s32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(S64_V64V64), SIMD_TUPLE(v64_dotp_s16, 0U, 0U),
- SIMD_TUPLE(v64_dotp_su8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_U8), SIMD_TUPLE(v64_dup_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_U16), SIMD_TUPLE(v64_dup_16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_U32), SIMD_TUPLE(v64_dup_32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_U32U32), SIMD_TUPLE(v64_from_32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V128V128), SIMD_TUPLE(v128_sad_u8, 0U, 0U),
- SIMD_TUPLE(v128_ssd_u8, 0U, 0U), SIMD_TUPLE(v128_sad_u16, 0U, 0U));
-INSTANTIATE(ARCH, ARCH_POSTFIX(U64_V128V128), SIMD_TUPLE(v128_ssd_s16, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V128_V128V128), SIMD_TUPLE(v128_add_8, 0U, 0U),
- SIMD_TUPLE(v128_add_16, 0U, 0U), SIMD_TUPLE(v128_sadd_s16, 0U, 0U),
- SIMD_TUPLE(v128_add_32, 0U, 0U), SIMD_TUPLE(v128_sub_8, 0U, 0U),
- SIMD_TUPLE(v128_ssub_u8, 0U, 0U), SIMD_TUPLE(v128_ssub_s8, 0U, 0U),
- SIMD_TUPLE(v128_sub_16, 0U, 0U), SIMD_TUPLE(v128_ssub_s16, 0U, 0U),
- SIMD_TUPLE(v128_ssub_u16, 0U, 0U), SIMD_TUPLE(v128_sub_32, 0U, 0U),
- SIMD_TUPLE(v128_ziplo_8, 0U, 0U), SIMD_TUPLE(v128_ziphi_8, 0U, 0U),
- SIMD_TUPLE(v128_ziplo_16, 0U, 0U), SIMD_TUPLE(v128_ziphi_16, 0U, 0U),
- SIMD_TUPLE(v128_ziplo_32, 0U, 0U), SIMD_TUPLE(v128_ziphi_32, 0U, 0U),
- SIMD_TUPLE(v128_ziplo_64, 0U, 0U), SIMD_TUPLE(v128_ziphi_64, 0U, 0U),
- SIMD_TUPLE(v128_unziphi_8, 0U, 0U), SIMD_TUPLE(v128_unziplo_8, 0U, 0U),
- SIMD_TUPLE(v128_unziphi_16, 0U, 0U), SIMD_TUPLE(v128_unziplo_16, 0U, 0U),
- SIMD_TUPLE(v128_unziphi_32, 0U, 0U), SIMD_TUPLE(v128_unziplo_32, 0U, 0U),
- SIMD_TUPLE(v128_pack_s32_s16, 0U, 0U), SIMD_TUPLE(v128_pack_s16_u8, 0U, 0U),
- SIMD_TUPLE(v128_pack_s16_s8, 0U, 0U), SIMD_TUPLE(v128_or, 0U, 0U),
- SIMD_TUPLE(v128_xor, 0U, 0U), SIMD_TUPLE(v128_and, 0U, 0U),
- SIMD_TUPLE(v128_andn, 0U, 0U), SIMD_TUPLE(v128_mullo_s16, 0U, 0U),
- SIMD_TUPLE(v128_mulhi_s16, 0U, 0U), SIMD_TUPLE(v128_mullo_s32, 0U, 0U),
- SIMD_TUPLE(v128_madd_s16, 0U, 0U), SIMD_TUPLE(v128_madd_us8, 0U, 0U),
- SIMD_TUPLE(v128_avg_u8, 0U, 0U), SIMD_TUPLE(v128_rdavg_u8, 0U, 0U),
- SIMD_TUPLE(v128_avg_u16, 0U, 0U), SIMD_TUPLE(v128_min_u8, 0U, 0U),
- SIMD_TUPLE(v128_max_u8, 0U, 0U), SIMD_TUPLE(v128_min_s8, 0U, 0U),
- SIMD_TUPLE(v128_max_s8, 0U, 0U), SIMD_TUPLE(v128_min_s16, 0U, 0U),
- SIMD_TUPLE(v128_max_s16, 0U, 0U), SIMD_TUPLE(v128_cmpgt_s8, 0U, 0U),
- SIMD_TUPLE(v128_cmplt_s8, 0U, 0U), SIMD_TUPLE(v128_cmpeq_8, 0U, 0U),
- SIMD_TUPLE(v128_cmpgt_s16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128V128_Part2),
- SIMD_TUPLE(v128_pack_s32_u16, 0U, 0U),
- SIMD_TUPLE(v128_rdavg_u16, 0U, 0U), SIMD_TUPLE(v128_add_64, 0U, 0U),
- SIMD_TUPLE(v128_sub_64, 0U, 0U), SIMD_TUPLE(v128_sadd_s8, 0U, 0U),
- SIMD_TUPLE(v128_sadd_u8, 0U, 0U), SIMD_TUPLE(v128_cmpeq_16, 0U, 0U),
- SIMD_TUPLE(v128_cmplt_s16, 0U, 0U),
- SIMD_TUPLE(v128_cmplt_s32, 0U, 0U),
- SIMD_TUPLE(v128_cmpeq_32, 0U, 0U),
- SIMD_TUPLE(v128_cmpgt_s32, 0U, 0U),
- SIMD_TUPLE(v128_shuffle_8, 15U, 8U),
- SIMD_TUPLE(v128_min_s32, 0U, 0U), SIMD_TUPLE(v128_max_s32, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<9>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<11>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<13>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_align<15>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128V128V128),
- SIMD_TUPLE(v128_blend_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128), SIMD_TUPLE(v128_abs_s8, 0U, 0U),
- SIMD_TUPLE(v128_abs_s16, 0U, 0U), SIMD_TUPLE(v128_padd_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpacklo_u8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpacklo_s8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpacklo_u16_s32, 0U, 0U),
- SIMD_TUPLE(v128_unpacklo_s16_s32, 0U, 0U),
- SIMD_TUPLE(v128_unpackhi_u8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpackhi_s8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpackhi_u16_s32, 0U, 0U),
- SIMD_TUPLE(v128_unpackhi_s16_s32, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<9>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<11>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<13>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_byte<15>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<9>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<11>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<13>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_byte<15>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<1>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128_Part2),
- SIMD_TUPLE(imm_v128_shr_n_u8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<4>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128_Part3),
- SIMD_TUPLE(imm_v128_shr_n_u32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s32<28>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V128_Part4),
- SIMD_TUPLE(imm_v128_shl_n_64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shl_n_64<60>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_u64<60>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v128_shr_n_s64<60>, 0U, 0U),
- SIMD_TUPLE(v128_padd_u8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V64V64), SIMD_TUPLE(v128_from_v64, 0U, 0U),
- SIMD_TUPLE(v128_zip_8, 0U, 0U), SIMD_TUPLE(v128_zip_16, 0U, 0U),
- SIMD_TUPLE(v128_zip_32, 0U, 0U), SIMD_TUPLE(v128_mul_s16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_U64U64), SIMD_TUPLE(v128_from_64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_V64),
- SIMD_TUPLE(v128_unpack_u8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpack_s8_s16, 0U, 0U),
- SIMD_TUPLE(v128_unpack_u16_s32, 0U, 0U),
- SIMD_TUPLE(v128_unpack_s16_s32, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V128_V128U32), SIMD_TUPLE(v128_shl_8, 7U, 32U),
- SIMD_TUPLE(v128_shr_u8, 7U, 32U), SIMD_TUPLE(v128_shr_s8, 7U, 32U),
- SIMD_TUPLE(v128_shl_16, 15U, 32U), SIMD_TUPLE(v128_shr_u16, 15U, 32U),
- SIMD_TUPLE(v128_shr_s16, 15U, 32U), SIMD_TUPLE(v128_shl_32, 31U, 32U),
- SIMD_TUPLE(v128_shr_u32, 31U, 32U), SIMD_TUPLE(v128_shr_s32, 31U, 32U),
- SIMD_TUPLE(v128_shl_64, 63U, 32U), SIMD_TUPLE(v128_shr_u64, 63U, 32U),
- SIMD_TUPLE(v128_shr_s64, 63U, 32U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V128), SIMD_TUPLE(v128_low_u32, 0U, 0U),
- SIMD_TUPLE(v128_movemask_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U64_V128), SIMD_TUPLE(v128_hadd_u8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_V128), SIMD_TUPLE(v128_low_v64, 0U, 0U),
- SIMD_TUPLE(v128_high_v64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_U8), SIMD_TUPLE(v128_dup_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_U16), SIMD_TUPLE(v128_dup_16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_U32), SIMD_TUPLE(v128_dup_32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V128_U64), SIMD_TUPLE(v128_dup_64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(S64_V128V128), SIMD_TUPLE(v128_dotp_s16, 0U, 0U),
- SIMD_TUPLE(v128_dotp_s32, 0U, 0U),
- SIMD_TUPLE(v128_dotp_su8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V256V256), SIMD_TUPLE(v256_sad_u8, 0U, 0U),
- SIMD_TUPLE(v256_ssd_u8, 0U, 0U), SIMD_TUPLE(v256_sad_u16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U64_V256), SIMD_TUPLE(v256_hadd_u8, 0U, 0U),
- SIMD_TUPLE(v256_low_u64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(S64_V256V256), SIMD_TUPLE(v256_dotp_s16, 0U, 0U),
- SIMD_TUPLE(v256_dotp_s32, 0U, 0U),
- SIMD_TUPLE(v256_dotp_su8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U64_V256V256), SIMD_TUPLE(v256_ssd_s16, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V256_V256V256), SIMD_TUPLE(v256_add_8, 0U, 0U),
- SIMD_TUPLE(v256_add_16, 0U, 0U), SIMD_TUPLE(v256_sadd_s16, 0U, 0U),
- SIMD_TUPLE(v256_add_32, 0U, 0U), SIMD_TUPLE(v256_sub_8, 0U, 0U),
- SIMD_TUPLE(v256_ssub_u8, 0U, 0U), SIMD_TUPLE(v256_ssub_s8, 0U, 0U),
- SIMD_TUPLE(v256_sub_16, 0U, 0U), SIMD_TUPLE(v256_ssub_s16, 0U, 0U),
- SIMD_TUPLE(v256_ssub_u16, 0U, 0U), SIMD_TUPLE(v256_sub_32, 0U, 0U),
- SIMD_TUPLE(v256_ziplo_8, 0U, 0U), SIMD_TUPLE(v256_ziphi_8, 0U, 0U),
- SIMD_TUPLE(v256_ziplo_16, 0U, 0U), SIMD_TUPLE(v256_ziphi_16, 0U, 0U),
- SIMD_TUPLE(v256_ziplo_32, 0U, 0U), SIMD_TUPLE(v256_ziphi_32, 0U, 0U),
- SIMD_TUPLE(v256_ziplo_64, 0U, 0U), SIMD_TUPLE(v256_ziphi_64, 0U, 0U),
- SIMD_TUPLE(v256_ziplo_128, 0U, 0U), SIMD_TUPLE(v256_ziphi_128, 0U, 0U),
- SIMD_TUPLE(v256_unziphi_8, 0U, 0U), SIMD_TUPLE(v256_unziplo_8, 0U, 0U),
- SIMD_TUPLE(v256_unziphi_16, 0U, 0U), SIMD_TUPLE(v256_unziplo_16, 0U, 0U),
- SIMD_TUPLE(v256_unziphi_32, 0U, 0U), SIMD_TUPLE(v256_unziplo_32, 0U, 0U),
- SIMD_TUPLE(v256_pack_s32_s16, 0U, 0U), SIMD_TUPLE(v256_pack_s16_u8, 0U, 0U),
- SIMD_TUPLE(v256_pack_s16_s8, 0U, 0U), SIMD_TUPLE(v256_or, 0U, 0U),
- SIMD_TUPLE(v256_xor, 0U, 0U), SIMD_TUPLE(v256_and, 0U, 0U),
- SIMD_TUPLE(v256_andn, 0U, 0U), SIMD_TUPLE(v256_mullo_s16, 0U, 0U),
- SIMD_TUPLE(v256_mulhi_s16, 0U, 0U), SIMD_TUPLE(v256_mullo_s32, 0U, 0U),
- SIMD_TUPLE(v256_madd_s16, 0U, 0U), SIMD_TUPLE(v256_madd_us8, 0U, 0U),
- SIMD_TUPLE(v256_avg_u8, 0U, 0U), SIMD_TUPLE(v256_rdavg_u8, 0U, 0U),
- SIMD_TUPLE(v256_avg_u16, 0U, 0U), SIMD_TUPLE(v256_min_u8, 0U, 0U),
- SIMD_TUPLE(v256_max_u8, 0U, 0U), SIMD_TUPLE(v256_min_s8, 0U, 0U),
- SIMD_TUPLE(v256_max_s8, 0U, 0U), SIMD_TUPLE(v256_min_s16, 0U, 0U),
- SIMD_TUPLE(v256_max_s16, 0U, 0U), SIMD_TUPLE(v256_cmpgt_s8, 0U, 0U),
- SIMD_TUPLE(v256_cmplt_s8, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V256_V256V256_Part2), SIMD_TUPLE(v256_cmpeq_8, 0U, 0U),
- SIMD_TUPLE(v256_min_s32, 0U, 0U), SIMD_TUPLE(v256_max_s32, 0U, 0U),
- SIMD_TUPLE(v256_add_64, 0U, 0U), SIMD_TUPLE(v256_sub_64, 0U, 0U),
- SIMD_TUPLE(v256_cmpgt_s16, 0U, 0U), SIMD_TUPLE(v256_cmplt_s16, 0U, 0U),
- SIMD_TUPLE(v256_cmpeq_16, 0U, 0U), SIMD_TUPLE(v256_cmpgt_s32, 0U, 0U),
- SIMD_TUPLE(v256_cmplt_s32, 0U, 0U), SIMD_TUPLE(v256_cmpeq_32, 0U, 0U),
- SIMD_TUPLE(v256_shuffle_8, 31U, 8U), SIMD_TUPLE(v256_pshuffle_8, 15U, 8U),
- SIMD_TUPLE(imm_v256_align<1>, 0U, 0U), SIMD_TUPLE(v256_sadd_s8, 0U, 0U),
- SIMD_TUPLE(v256_sadd_u8, 0U, 0U), SIMD_TUPLE(v256_pack_s32_u16, 0U, 0U),
- SIMD_TUPLE(v256_rdavg_u16, 0U, 0U), SIMD_TUPLE(imm_v256_align<2>, 0U, 0U),
- SIMD_TUPLE(v256_unziphi_64, 0U, 0U), SIMD_TUPLE(v256_unziplo_64, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<9>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<11>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<13>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<15>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<17>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<18>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<19>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<21>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<22>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<23>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<25>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<26>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<27>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<29>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<30>, 0U, 0U),
- SIMD_TUPLE(imm_v256_align<31>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V128V128),
- SIMD_TUPLE(v256_from_v128, 0U, 0U), SIMD_TUPLE(v256_zip_8, 0U, 0U),
- SIMD_TUPLE(v256_zip_16, 0U, 0U), SIMD_TUPLE(v256_zip_32, 0U, 0U),
- SIMD_TUPLE(v256_mul_s16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V128),
- SIMD_TUPLE(v256_unpack_u8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpack_s8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpack_u16_s32, 0U, 0U),
- SIMD_TUPLE(v256_unpack_s16_s32, 0U, 0U));
-
-INSTANTIATE(
- ARCH, ARCH_POSTFIX(V256_V256U32), SIMD_TUPLE(v256_shl_8, 7U, 32U),
- SIMD_TUPLE(v256_shr_u8, 7U, 32U), SIMD_TUPLE(v256_shr_s8, 7U, 32U),
- SIMD_TUPLE(v256_shl_16, 15U, 32U), SIMD_TUPLE(v256_shr_u16, 15U, 32U),
- SIMD_TUPLE(v256_shr_s16, 15U, 32U), SIMD_TUPLE(v256_shl_32, 31U, 32U),
- SIMD_TUPLE(v256_shr_u32, 31U, 32U), SIMD_TUPLE(v256_shr_s32, 31U, 32U),
- SIMD_TUPLE(v256_shl_64, 63U, 32U), SIMD_TUPLE(v256_shr_u64, 63U, 32U),
- SIMD_TUPLE(v256_shr_s64, 63U, 32U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256), SIMD_TUPLE(v256_abs_s8, 0U, 0U),
- SIMD_TUPLE(v256_abs_s16, 0U, 0U), SIMD_TUPLE(v256_padd_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpacklo_u8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpacklo_s8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpacklo_u16_s32, 0U, 0U),
- SIMD_TUPLE(v256_unpacklo_s16_s32, 0U, 0U),
- SIMD_TUPLE(v256_unpackhi_u8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpackhi_s8_s16, 0U, 0U),
- SIMD_TUPLE(v256_unpackhi_u16_s32, 0U, 0U),
- SIMD_TUPLE(v256_unpackhi_s16_s32, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<9>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<11>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<13>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<15>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<17>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<18>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<19>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<21>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<22>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<23>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<25>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<26>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<27>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<29>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<30>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_byte<31>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<8>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256_Part2),
- SIMD_TUPLE(imm_v256_shl_n_byte<9>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<11>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<13>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<15>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<17>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<18>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<19>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<21>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<22>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<23>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<25>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<26>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<27>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<29>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<30>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_byte<31>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s8<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<10>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256_Part3),
- SIMD_TUPLE(imm_v256_shl_n_16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s16<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u32<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s32<28>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256_Part4),
- SIMD_TUPLE(imm_v256_shl_n_64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_64<60>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_u64<60>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<16>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<20>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<24>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<28>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<32>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<36>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<40>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<44>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<48>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<52>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<56>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_s64<60>, 0U, 0U),
- SIMD_TUPLE(v256_padd_u8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256_Part5),
- SIMD_TUPLE(imm_v256_shr_n_word<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<9>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<11>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<13>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shr_n_word<15>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<1>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<2>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<3>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<4>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<5>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<6>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<7>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<8>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<9>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<10>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<11>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<12>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<13>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<14>, 0U, 0U),
- SIMD_TUPLE(imm_v256_shl_n_word<15>, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_V256V256V256),
- SIMD_TUPLE(v256_blend_8, 0U, 0U),
- SIMD_TUPLE(v256_wideshuffle_8, 63U, 8U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_U8), SIMD_TUPLE(v256_dup_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_U16), SIMD_TUPLE(v256_dup_16, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_U32), SIMD_TUPLE(v256_dup_32, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V256_U64), SIMD_TUPLE(v256_dup_64, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(U32_V256), SIMD_TUPLE(v256_low_u32, 0U, 0U),
- SIMD_TUPLE(v256_movemask_8, 0U, 0U));
-
-INSTANTIATE(ARCH, ARCH_POSTFIX(V64_V256), SIMD_TUPLE(v256_low_v64, 0U, 0U));
-
-} // namespace SIMD_NAMESPACE
diff --git a/third_party/aom/test/simd_neon_test.cc b/third_party/aom/test/simd_neon_test.cc
deleted file mode 100644
index b67b18895..000000000
--- a/third_party/aom/test/simd_neon_test.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if defined(__OPTIMIZE__) && __OPTIMIZE__
-#define ARCH NEON
-#define ARCH_POSTFIX(name) name##_neon
-#define SIMD_NAMESPACE simd_test_neon
-#include "test/simd_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_sse2_test.cc b/third_party/aom/test/simd_sse2_test.cc
deleted file mode 100644
index b37a931b3..000000000
--- a/third_party/aom/test/simd_sse2_test.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSE2
-#define ARCH_POSTFIX(name) name##_sse2
-#define SIMD_NAMESPACE simd_test_sse2
-#include "test/simd_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_sse4_test.cc b/third_party/aom/test/simd_sse4_test.cc
deleted file mode 100644
index b1c9d5cd8..000000000
--- a/third_party/aom/test/simd_sse4_test.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSE4_1
-#define ARCH_POSTFIX(name) name##_sse4_1
-#define SIMD_NAMESPACE simd_test_sse4_1
-#include "test/simd_impl.h"
-#endif
diff --git a/third_party/aom/test/simd_ssse3_test.cc b/third_party/aom/test/simd_ssse3_test.cc
deleted file mode 100644
index d95c26fb5..000000000
--- a/third_party/aom/test/simd_ssse3_test.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#if (defined(__OPTIMIZE__) && __OPTIMIZE__) || \
- (!defined(__GNUC__) && !defined(_DEBUG))
-#define ARCH SSSE3
-#define ARCH_POSTFIX(name) name##_ssse3
-#define SIMD_NAMESPACE simd_test_ssse3
-#include "test/simd_impl.h"
-#endif
diff --git a/third_party/aom/test/simple_decoder.sh b/third_party/aom/test/simple_decoder.sh
deleted file mode 100755
index 5f39ad206..000000000
--- a/third_party/aom/test/simple_decoder.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom simple_decoder example code. To add new tests to
-## this file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to simple_decoder_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: Make sure input is available:
-simple_decoder_verify_environment() {
- if [ ! "$(av1_encode_available)" = "yes" ] && [ ! -e "${AV1_IVF_FILE}" ]; then
- return 1
- fi
-}
-
-# Runs simple_decoder using $1 as input file. $2 is the codec name, and is used
-# solely to name the output file.
-simple_decoder() {
- local decoder="$(aom_tool_path simple_decoder)"
- local input_file="$1"
- local codec="$2"
- local output_file="${AOM_TEST_OUTPUT_DIR}/simple_decoder_${codec}.raw"
-
- if [ ! -x "${decoder}" ]; then
- elog "${decoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${decoder}" "${input_file}" "${output_file}" \
- ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-simple_decoder_av1() {
- if [ "$(av1_decode_available)" = "yes" ]; then
- if [ ! -e "${AV1_IVF_FILE}" ]; then
- local file="${AOM_TEST_OUTPUT_DIR}/test_encode.ivf"
- encode_yuv_raw_input_av1 "${file}" --ivf
- simple_decoder "${file}" av1 || return 1
- else
- simple_decoder "${AV1_IVF_FILE}" av1 || return 1
- fi
- fi
-}
-
-simple_decoder_tests="simple_decoder_av1"
-
-run_tests simple_decoder_verify_environment "${simple_decoder_tests}"
diff --git a/third_party/aom/test/simple_encoder.sh b/third_party/aom/test/simple_encoder.sh
deleted file mode 100755
index 5cd6b46a1..000000000
--- a/third_party/aom/test/simple_encoder.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom simple_encoder example. To add new tests to this
-## file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to simple_encoder_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $YUV_RAW_INPUT is required.
-simple_encoder_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
-}
-
-# Runs simple_encoder using the codec specified by $1 with a frame limit of 100.
-simple_encoder() {
- local encoder="${LIBAOM_BIN_PATH}/simple_encoder${AOM_TEST_EXE_SUFFIX}"
- local codec="$1"
- local output_file="${AOM_TEST_OUTPUT_DIR}/simple_encoder_${codec}.ivf"
-
- if [ ! -x "${encoder}" ]; then
- elog "${encoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \
- "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" 9999 0 5 \
- ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-
-simple_encoder_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- simple_encoder av1 || return 1
- fi
-}
-
-simple_encoder_tests="simple_encoder_av1"
-
-run_tests simple_encoder_verify_environment "${simple_encoder_tests}"
diff --git a/third_party/aom/test/subtract_test.cc b/third_party/aom/test/subtract_test.cc
deleted file mode 100644
index 7dcedf56d..000000000
--- a/third_party/aom/test/subtract_test.cc
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "av1/common/blockd.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/mem.h"
-
-typedef void (*SubtractFunc)(int rows, int cols, int16_t *diff_ptr,
- ptrdiff_t diff_stride, const uint8_t *src_ptr,
- ptrdiff_t src_stride, const uint8_t *pred_ptr,
- ptrdiff_t pred_stride);
-
-namespace {
-
-class AV1SubtractBlockTest : public ::testing::TestWithParam<SubtractFunc> {
- public:
- virtual void TearDown() { libaom_test::ClearSystemState(); }
-};
-
-using libaom_test::ACMRandom;
-
-TEST_P(AV1SubtractBlockTest, SimpleSubtract) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
-
- // FIXME(rbultje) split in its own file
- for (BLOCK_SIZE bsize = BLOCK_4X4; bsize < BLOCK_SIZES;
- bsize = static_cast<BLOCK_SIZE>(static_cast<int>(bsize) + 1)) {
- const int block_width = block_size_wide[bsize];
- const int block_height = block_size_high[bsize];
- int16_t *diff = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(*diff) * block_width * block_height * 2));
- uint8_t *pred = reinterpret_cast<uint8_t *>(
- aom_memalign(16, block_width * block_height * 2));
- uint8_t *src = reinterpret_cast<uint8_t *>(
- aom_memalign(16, block_width * block_height * 2));
-
- for (int n = 0; n < 100; n++) {
- for (int r = 0; r < block_height; ++r) {
- for (int c = 0; c < block_width * 2; ++c) {
- src[r * block_width * 2 + c] = rnd.Rand8();
- pred[r * block_width * 2 + c] = rnd.Rand8();
- }
- }
-
- GetParam()(block_height, block_width, diff, block_width, src, block_width,
- pred, block_width);
-
- for (int r = 0; r < block_height; ++r) {
- for (int c = 0; c < block_width; ++c) {
- EXPECT_EQ(diff[r * block_width + c],
- (src[r * block_width + c] - pred[r * block_width + c]))
- << "r = " << r << ", c = " << c << ", bs = " << bsize;
- }
- }
-
- GetParam()(block_height, block_width, diff, block_width * 2, src,
- block_width * 2, pred, block_width * 2);
-
- for (int r = 0; r < block_height; ++r) {
- for (int c = 0; c < block_width; ++c) {
- EXPECT_EQ(
- diff[r * block_width * 2 + c],
- (src[r * block_width * 2 + c] - pred[r * block_width * 2 + c]))
- << "r = " << r << ", c = " << c << ", bs = " << bsize;
- }
- }
- }
- aom_free(diff);
- aom_free(pred);
- aom_free(src);
- }
-}
-
-INSTANTIATE_TEST_CASE_P(C, AV1SubtractBlockTest,
- ::testing::Values(aom_subtract_block_c));
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, AV1SubtractBlockTest,
- ::testing::Values(aom_subtract_block_sse2));
-#endif
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, AV1SubtractBlockTest,
- ::testing::Values(aom_subtract_block_neon));
-#endif
-#if HAVE_MSA
-INSTANTIATE_TEST_CASE_P(MSA, AV1SubtractBlockTest,
- ::testing::Values(aom_subtract_block_msa));
-#endif
-
-typedef void (*HBDSubtractFunc)(int rows, int cols, int16_t *diff_ptr,
- ptrdiff_t diff_stride, const uint8_t *src_ptr,
- ptrdiff_t src_stride, const uint8_t *pred_ptr,
- ptrdiff_t pred_stride, int bd);
-
-using ::testing::get;
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-// <width, height, bit_dpeth, subtract>
-typedef tuple<int, int, int, HBDSubtractFunc> Params;
-
-class AV1HBDSubtractBlockTest : public ::testing::TestWithParam<Params> {
- public:
- virtual void SetUp() {
- block_width_ = GET_PARAM(0);
- block_height_ = GET_PARAM(1);
- bit_depth_ = static_cast<aom_bit_depth_t>(GET_PARAM(2));
- func_ = GET_PARAM(3);
-
- rnd_.Reset(ACMRandom::DeterministicSeed());
-
- const size_t max_width = 128;
- const size_t max_block_size = max_width * max_width;
- src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
- aom_memalign(16, max_block_size * sizeof(uint16_t))));
- pred_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
- aom_memalign(16, max_block_size * sizeof(uint16_t))));
- diff_ = reinterpret_cast<int16_t *>(
- aom_memalign(16, max_block_size * sizeof(int16_t)));
- }
-
- virtual void TearDown() {
- aom_free(CONVERT_TO_SHORTPTR(src_));
- aom_free(CONVERT_TO_SHORTPTR(pred_));
- aom_free(diff_);
- }
-
- protected:
- void CheckResult();
- void RunForSpeed();
-
- private:
- ACMRandom rnd_;
- int block_height_;
- int block_width_;
- aom_bit_depth_t bit_depth_;
- HBDSubtractFunc func_;
- uint8_t *src_;
- uint8_t *pred_;
- int16_t *diff_;
-};
-
-void AV1HBDSubtractBlockTest::CheckResult() {
- const int test_num = 100;
- const size_t max_width = 128;
- const int max_block_size = max_width * max_width;
- const int mask = (1 << bit_depth_) - 1;
- int i, j;
-
- for (i = 0; i < test_num; ++i) {
- for (j = 0; j < max_block_size; ++j) {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask;
- CONVERT_TO_SHORTPTR(pred_)[j] = rnd_.Rand16() & mask;
- }
-
- func_(block_height_, block_width_, diff_, block_width_, src_, block_width_,
- pred_, block_width_, bit_depth_);
-
- for (int r = 0; r < block_height_; ++r) {
- for (int c = 0; c < block_width_; ++c) {
- EXPECT_EQ(diff_[r * block_width_ + c],
- (CONVERT_TO_SHORTPTR(src_)[r * block_width_ + c] -
- CONVERT_TO_SHORTPTR(pred_)[r * block_width_ + c]))
- << "r = " << r << ", c = " << c << ", test: " << i;
- }
- }
- }
-}
-
-TEST_P(AV1HBDSubtractBlockTest, CheckResult) { CheckResult(); }
-
-void AV1HBDSubtractBlockTest::RunForSpeed() {
- const int test_num = 200000;
- const size_t max_width = 128;
- const int max_block_size = max_width * max_width;
- const int mask = (1 << bit_depth_) - 1;
- int i, j;
-
- for (j = 0; j < max_block_size; ++j) {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask;
- CONVERT_TO_SHORTPTR(pred_)[j] = rnd_.Rand16() & mask;
- }
-
- for (i = 0; i < test_num; ++i) {
- func_(block_height_, block_width_, diff_, block_width_, src_, block_width_,
- pred_, block_width_, bit_depth_);
- }
-}
-
-TEST_P(AV1HBDSubtractBlockTest, DISABLED_Speed) { RunForSpeed(); }
-
-#if HAVE_SSE2
-
-const Params kAV1HBDSubtractBlock_sse2[] = {
- make_tuple(4, 4, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(4, 4, 12, &aom_highbd_subtract_block_c),
- make_tuple(4, 8, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(4, 8, 12, &aom_highbd_subtract_block_c),
- make_tuple(8, 4, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(8, 4, 12, &aom_highbd_subtract_block_c),
- make_tuple(8, 8, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(8, 8, 12, &aom_highbd_subtract_block_c),
- make_tuple(8, 16, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(8, 16, 12, &aom_highbd_subtract_block_c),
- make_tuple(16, 8, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(16, 8, 12, &aom_highbd_subtract_block_c),
- make_tuple(16, 16, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(16, 16, 12, &aom_highbd_subtract_block_c),
- make_tuple(16, 32, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(16, 32, 12, &aom_highbd_subtract_block_c),
- make_tuple(32, 16, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(32, 16, 12, &aom_highbd_subtract_block_c),
- make_tuple(32, 32, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(32, 32, 12, &aom_highbd_subtract_block_c),
- make_tuple(32, 64, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(32, 64, 12, &aom_highbd_subtract_block_c),
- make_tuple(64, 32, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(64, 32, 12, &aom_highbd_subtract_block_c),
- make_tuple(64, 64, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(64, 64, 12, &aom_highbd_subtract_block_c),
- make_tuple(64, 128, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(64, 128, 12, &aom_highbd_subtract_block_c),
- make_tuple(128, 64, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(128, 64, 12, &aom_highbd_subtract_block_c),
- make_tuple(128, 128, 12, &aom_highbd_subtract_block_sse2),
- make_tuple(128, 128, 12, &aom_highbd_subtract_block_c)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, AV1HBDSubtractBlockTest,
- ::testing::ValuesIn(kAV1HBDSubtractBlock_sse2));
-#endif // HAVE_SSE2
-} // namespace
diff --git a/third_party/aom/test/sum_squares_test.cc b/third_party/aom/test/sum_squares_test.cc
deleted file mode 100644
index f10998498..000000000
--- a/third_party/aom/test/sum_squares_test.cc
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cmath>
-#include <cstdlib>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom_ports/mem.h"
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "test/util.h"
-#include "test/function_equivalence_test.h"
-
-using libaom_test::ACMRandom;
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-const int kNumIterations = 10000;
-
-static const int16_t kInt13Max = (1 << 12) - 1;
-
-typedef uint64_t (*SSI16Func)(const int16_t *src, int stride, int width,
- int height);
-typedef libaom_test::FuncParam<SSI16Func> TestFuncs;
-
-class SumSquaresTest : public ::testing::TestWithParam<TestFuncs> {
- public:
- virtual ~SumSquaresTest() {}
- virtual void SetUp() {
- params_ = this->GetParam();
- rnd_.Reset(ACMRandom::DeterministicSeed());
- src_ = reinterpret_cast<int16_t *>(aom_memalign(16, 256 * 256 * 2));
- ASSERT_TRUE(src_ != NULL);
- }
-
- virtual void TearDown() {
- libaom_test::ClearSystemState();
- aom_free(src_);
- }
- void RunTest(int isRandom);
- void RunSpeedTest();
-
- void GenRandomData(int width, int height, int stride) {
- const int msb = 11; // Up to 12 bit input
- const int limit = 1 << (msb + 1);
- for (int ii = 0; ii < height; ii++) {
- for (int jj = 0; jj < width; jj++) {
- src_[ii * stride + jj] = rnd_(2) ? rnd_(limit) : -rnd_(limit);
- }
- }
- }
-
- void GenExtremeData(int width, int height, int stride) {
- const int msb = 11; // Up to 12 bit input
- const int limit = 1 << (msb + 1);
- const int val = rnd_(2) ? limit - 1 : -(limit - 1);
- for (int ii = 0; ii < height; ii++) {
- for (int jj = 0; jj < width; jj++) {
- src_[ii * stride + jj] = val;
- }
- }
- }
-
- protected:
- TestFuncs params_;
- int16_t *src_;
- ACMRandom rnd_;
-};
-
-void SumSquaresTest::RunTest(int isRandom) {
- int failed = 0;
- for (int k = 0; k < kNumIterations; k++) {
- const int width = 4 * (rnd_(31) + 1); // Up to 128x128
- const int height = 4 * (rnd_(31) + 1); // Up to 128x128
- int stride = 4 << rnd_(7); // Up to 256 stride
- while (stride < width) { // Make sure it's valid
- stride = 4 << rnd_(7);
- }
- if (isRandom) {
- GenRandomData(width, height, stride);
- } else {
- GenExtremeData(width, height, stride);
- }
- const uint64_t res_ref = params_.ref_func(src_, stride, width, height);
- uint64_t res_tst;
- ASM_REGISTER_STATE_CHECK(res_tst =
- params_.tst_func(src_, stride, width, height));
-
- if (!failed) {
- failed = res_ref != res_tst;
- EXPECT_EQ(res_ref, res_tst)
- << "Error: Sum Squares Test [" << width << "x" << height
- << "] C output does not match optimized output.";
- }
- }
-}
-
-void SumSquaresTest::RunSpeedTest() {
- for (int block = BLOCK_4X4; block < BLOCK_SIZES_ALL; block++) {
- const int width = block_size_wide[block]; // Up to 128x128
- const int height = block_size_high[block]; // Up to 128x128
- int stride = 4 << rnd_(7); // Up to 256 stride
- while (stride < width) { // Make sure it's valid
- stride = 4 << rnd_(7);
- }
- GenExtremeData(width, height, stride);
- const int num_loops = 1000000000 / (width + height);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- params_.ref_func(src_, stride, width, height);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("SumSquaresTest C %3dx%-3d: %7.2f ns\n", width, height,
- 1000.0 * elapsed_time / num_loops);
-
- aom_usec_timer timer1;
- aom_usec_timer_start(&timer1);
- for (int i = 0; i < num_loops; ++i)
- params_.tst_func(src_, stride, width, height);
- aom_usec_timer_mark(&timer1);
- const int elapsed_time1 = static_cast<int>(aom_usec_timer_elapsed(&timer1));
- printf("SumSquaresTest Test %3dx%-3d: %7.2f ns\n", width, height,
- 1000.0 * elapsed_time1 / num_loops);
- }
-}
-
-TEST_P(SumSquaresTest, OperationCheck) {
- RunTest(1); // GenRandomData
-}
-
-TEST_P(SumSquaresTest, ExtremeValues) {
- RunTest(0); // GenExtremeData
-}
-
-TEST_P(SumSquaresTest, DISABLED_Speed) { RunSpeedTest(); }
-
-#if HAVE_SSE2
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, SumSquaresTest,
- ::testing::Values(TestFuncs(&aom_sum_squares_2d_i16_c,
- &aom_sum_squares_2d_i16_sse2)));
-
-#endif // HAVE_SSE2
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(
- AVX2, SumSquaresTest,
- ::testing::Values(TestFuncs(&aom_sum_squares_2d_i16_c,
- &aom_sum_squares_2d_i16_avx2)));
-#endif // HAVE_AVX2
-
-//////////////////////////////////////////////////////////////////////////////
-// 1D version
-//////////////////////////////////////////////////////////////////////////////
-
-typedef uint64_t (*F1D)(const int16_t *src, uint32_t N);
-typedef libaom_test::FuncParam<F1D> TestFuncs1D;
-
-class SumSquares1DTest : public FunctionEquivalenceTest<F1D> {
- protected:
- static const int kIterations = 1000;
- static const int kMaxSize = 256;
-};
-
-TEST_P(SumSquares1DTest, RandomValues) {
- DECLARE_ALIGNED(16, int16_t, src[kMaxSize * kMaxSize]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < kMaxSize * kMaxSize; ++i)
- src[i] = rng_(kInt13Max * 2 + 1) - kInt13Max;
-
- const int N = rng_(2) ? rng_(kMaxSize * kMaxSize + 1 - kMaxSize) + kMaxSize
- : rng_(kMaxSize) + 1;
-
- const uint64_t ref_res = params_.ref_func(src, N);
- uint64_t tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(src, N));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-TEST_P(SumSquares1DTest, ExtremeValues) {
- DECLARE_ALIGNED(16, int16_t, src[kMaxSize * kMaxSize]);
-
- for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
- if (rng_(2)) {
- for (int i = 0; i < kMaxSize * kMaxSize; ++i) src[i] = kInt13Max;
- } else {
- for (int i = 0; i < kMaxSize * kMaxSize; ++i) src[i] = -kInt13Max;
- }
-
- const int N = rng_(2) ? rng_(kMaxSize * kMaxSize + 1 - kMaxSize) + kMaxSize
- : rng_(kMaxSize) + 1;
-
- const uint64_t ref_res = params_.ref_func(src, N);
- uint64_t tst_res;
- ASM_REGISTER_STATE_CHECK(tst_res = params_.tst_func(src, N));
-
- ASSERT_EQ(ref_res, tst_res);
- }
-}
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, SumSquares1DTest,
- ::testing::Values(TestFuncs1D(
- aom_sum_squares_i16_c, aom_sum_squares_i16_sse2)));
-
-#endif // HAVE_SSE2
-} // namespace
diff --git a/third_party/aom/test/superframe_test.cc b/third_party/aom/test/superframe_test.cc
deleted file mode 100644
index 7be18f72a..000000000
--- a/third_party/aom/test/superframe_test.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <climits>
-#include <vector>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-
-namespace {
-
-const int kTestMode = 0;
-const int kTileCols = 1;
-const int kTileRows = 2;
-
-typedef ::testing::tuple<libaom_test::TestMode, int, int> SuperframeTestParam;
-
-class SuperframeTest
- : public ::libaom_test::CodecTestWithParam<SuperframeTestParam>,
- public ::libaom_test::EncoderTest {
- protected:
- SuperframeTest() : EncoderTest(GET_PARAM(0)), last_sf_pts_(0) {}
- virtual ~SuperframeTest() {}
-
- virtual void SetUp() {
- InitializeConfig();
- const SuperframeTestParam input = GET_PARAM(1);
- const libaom_test::TestMode mode = ::testing::get<kTestMode>(input);
- SetMode(mode);
- sf_count_ = 0;
- sf_count_max_ = INT_MAX;
- n_tile_cols_ = ::testing::get<kTileCols>(input);
- n_tile_rows_ = ::testing::get<kTileRows>(input);
- }
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AOME_SET_ENABLEAUTOALTREF, 1);
- encoder->Control(AOME_SET_CPUUSED, 2);
- encoder->Control(AV1E_SET_TILE_COLUMNS, n_tile_cols_);
- encoder->Control(AV1E_SET_TILE_ROWS, n_tile_rows_);
- }
- }
-
- virtual const aom_codec_cx_pkt_t *MutateEncoderOutputHook(
- const aom_codec_cx_pkt_t *pkt) {
- if (pkt->kind != AOM_CODEC_CX_FRAME_PKT) return pkt;
-
- const uint8_t *buffer = reinterpret_cast<uint8_t *>(pkt->data.frame.buf);
- const uint8_t marker = buffer[0];
- const int frames = (marker & 0x7) + 1;
- const int mag = ((marker >> 3) & 3) + 1;
- const unsigned int index_sz = 2 + mag * (frames - 1);
- if ((marker & 0xe0) == 0xc0 && pkt->data.frame.sz >= index_sz &&
- buffer[index_sz - 1] == marker) {
- // frame is a superframe. strip off the index.
- modified_buf_.resize(pkt->data.frame.sz - index_sz);
- memcpy(&modified_buf_[0], (uint8_t *)pkt->data.frame.buf + index_sz,
- pkt->data.frame.sz - index_sz);
- modified_pkt_ = *pkt;
- modified_pkt_.data.frame.buf = &modified_buf_[0];
- modified_pkt_.data.frame.sz -= index_sz;
-
- sf_count_++;
- last_sf_pts_ = pkt->data.frame.pts;
- return &modified_pkt_;
- }
-
- // Make sure we do a few frames after the last SF
- abort_ |=
- sf_count_ > sf_count_max_ && pkt->data.frame.pts - last_sf_pts_ >= 5;
- return pkt;
- }
-
- int sf_count_;
- int sf_count_max_;
- aom_codec_cx_pkt_t modified_pkt_;
- std::vector<uint8_t> modified_buf_;
- aom_codec_pts_t last_sf_pts_;
-
- private:
- int n_tile_cols_;
- int n_tile_rows_;
-};
-
-TEST_P(SuperframeTest, TestSuperframeIndexIsOptional) {
- sf_count_max_ = 0; // early exit on successful test.
- cfg_.g_lag_in_frames = 25;
- cfg_.large_scale_tile = 1;
- ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
- 30, 1, 0, 40);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- // NOTE: The use of BWDREF_FRAME will enable the coding of more non-show
- // frames besides ALTREF_FRAME.
- EXPECT_GE(sf_count_, 1);
-}
-
-} // namespace
diff --git a/third_party/aom/test/test-data.sha1 b/third_party/aom/test/test-data.sha1
deleted file mode 100644
index b6ee34701..000000000
--- a/third_party/aom/test/test-data.sha1
+++ /dev/null
@@ -1,507 +0,0 @@
-d5dfb0151c9051f8c85999255645d7a23916d3c0 *hantro_collage_w352h288.yuv
-b87815bf86020c592ccc7a846ba2e28ec8043902 *hantro_odd.yuv
-26b7f64399b84db4b4c9c915d743ec5c2619d4b9 *invalid-bug-1814.ivf
-d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-bug-1814.ivf.res
-fa06784f23751d8c37be94160fb821e855199af4 *invalid-oss-fuzz-10061.ivf
-b055f06b9a95aaa5697fa26497b592a47843a7c8 *invalid-oss-fuzz-10061.ivf.res
-c9e06c4c7fb7d69fd635a1f606a5e478d60e99cf *invalid-oss-fuzz-10117-mc-buf-use-highbd.ivf
-88e18e61bd2b7457b4c71ebefbdff0029c41cc04 *invalid-oss-fuzz-10117-mc-buf-use-highbd.ivf.res
-91a5bedeb4832c1c2900736cc0f644bb63971bbc *invalid-oss-fuzz-10227.ivf
-b055f06b9a95aaa5697fa26497b592a47843a7c8 *invalid-oss-fuzz-10227.ivf.res
-c0960f032484579f967881cc025b71cfd7a79ee1 *invalid-oss-fuzz-9463.ivf
-d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-oss-fuzz-9463.ivf.res
-f448caf378e250b7eea4fa2d1c3cd7ef4a3211ce *invalid-oss-fuzz-9482.ivf
-b055f06b9a95aaa5697fa26497b592a47843a7c8 *invalid-oss-fuzz-9482.ivf.res
-a686989de79af89136f631fd630df639c7861851 *invalid-oss-fuzz-9720.ivf
-d3964f9dad9f60363c81b688324d95b4ec7c8038 *invalid-oss-fuzz-9720.ivf.res
-a432f96ff0a787268e2f94a8092ab161a18d1b06 *park_joy_90p_10_420.y4m
-0b194cc312c3a2e84d156a221b0a5eb615dfddc5 *park_joy_90p_10_422.y4m
-ff0e0a21dc2adc95b8c1b37902713700655ced17 *park_joy_90p_10_444.y4m
-c934da6fb8cc54ee2a8c17c54cf6076dac37ead0 *park_joy_90p_10_440.yuv
-614c32ae1eca391e867c70d19974f0d62664dd99 *park_joy_90p_12_420.y4m
-c92825f1ea25c5c37855083a69faac6ac4641a9e *park_joy_90p_12_422.y4m
-b592189b885b6cc85db55cc98512a197d73d3b34 *park_joy_90p_12_444.y4m
-82c1bfcca368c2f22bad7d693d690d5499ecdd11 *park_joy_90p_12_440.yuv
-b9e1e90aece2be6e2c90d89e6ab2372d5f8c792d *park_joy_90p_8_420_a10-1.y4m
-4e0eb61e76f0684188d9bc9f3ce61f6b6b77bb2c *park_joy_90p_8_420.y4m
-7a193ff7dfeb96ba5f82b2afd7afa9e1fe83d947 *park_joy_90p_8_422.y4m
-bdb7856e6bc93599bdda05c2e773a9f22b6c6d03 *park_joy_90p_8_444.y4m
-81e1f3843748438b8f2e71db484eb22daf72e939 *park_joy_90p_8_440.yuv
-b1f1c3ec79114b9a0651af24ce634afb44a9a419 *rush_hour_444.y4m
-eb438c6540eb429f74404eedfa3228d409c57874 *desktop_640_360_30.yuv
-89e70ebd22c27d275fe14dc2f1a41841a6d8b9ab *kirland_640_480_30.yuv
-33c533192759e5bb4f07abfbac389dc259db4686 *macmarcomoving_640_480_30.yuv
-8bfaab121080821b8f03b23467911e59ec59b8fe *macmarcostationary_640_480_30.yuv
-70894878d916a599842d9ad0dcd24e10c13e5467 *niklas_640_480_30.yuv
-8784b6df2d8cc946195a90ac00540500d2e522e4 *tacomanarrows_640_480_30.yuv
-edd86a1f5e62fd9da9a9d46078247759c2638009 *tacomasmallcameramovement_640_480_30.yuv
-9a70e8b7d14fba9234d0e51dce876635413ce444 *thaloundeskmtg_640_480_30.yuv
-e7d315dbf4f3928779e0dc624311196d44491d32 *niklas_1280_720_30.yuv
-717da707afcaa1f692ff1946f291054eb75a4f06 *screendata.y4m
-9cfc855459e7549fd015c79e8eca512b2f2cb7e3 *niklas_1280_720_30.y4m
-5b5763b388b1b52a81bb82b39f7ec25c4bd3d0e1 *desktop_credits.y4m
-36ddab9b99eb7545aa0bf362d6f498212d596516 *vase10x10.yuv
-c2e1ec9936b95254187a359e94aa32a9f3dad1b7 *av1-1-b8-00-quantizer-00.ivf
-26cd2a0321d01d9db5f6dace8b43a40cd5b9d58d *av1-1-b8-00-quantizer-00.ivf.md5
-a56dd02c0258d4afea1ee358a22b54e99e39d5e1 *av1-1-b8-00-quantizer-01.ivf
-b3d24124d81f1fbb26f5eb0036accb54f3ec69b2 *av1-1-b8-00-quantizer-01.ivf.md5
-3466327cb842a91d69839b11ef930a74f086f4c6 *av1-1-b8-00-quantizer-02.ivf
-c111dce946100efeaad34203080eee1d55464df6 *av1-1-b8-00-quantizer-02.ivf.md5
-d3f1f32de5e2c0c19a58bb8ef096108388c6a820 *av1-1-b8-00-quantizer-03.ivf
-6265321b31130545b4454982ca93e412a56845b8 *av1-1-b8-00-quantizer-03.ivf.md5
-f37c393ebe73266a5ec8508a2ca33c586ff28e64 *av1-1-b8-00-quantizer-04.ivf
-c6e979da71aecc593c0abb40135dd304152b00dd *av1-1-b8-00-quantizer-04.ivf.md5
-ac9c5e93cb19942a9be259d0567ec96c54dcdc7c *av1-1-b8-00-quantizer-05.ivf
-49e35a7399568a0e4f015ce323d5a45ea780ca87 *av1-1-b8-00-quantizer-05.ivf.md5
-461142b1b50ae74c6b698d23f5ed3b764eadfb89 *av1-1-b8-00-quantizer-06.ivf
-6477ff260624e0f76c94ac872d1e7d5576af4177 *av1-1-b8-00-quantizer-06.ivf.md5
-7f8113cd13d8faaa06fdbaaa50dc328daf037e6d *av1-1-b8-00-quantizer-07.ivf
-b26795c6cb408487c20737977cd6b77311772bf7 *av1-1-b8-00-quantizer-07.ivf.md5
-4218f7945a172e1fe4f9e77ec35085a394eda9f4 *av1-1-b8-00-quantizer-08.ivf
-ea5d7d501e9a69d805251e4871515d28468d8676 *av1-1-b8-00-quantizer-08.ivf.md5
-837f3bcadfe56cf302db2ebaf9a990446fb35801 *av1-1-b8-00-quantizer-09.ivf
-eede995cdac5fd01a411da2e74e86e8394138be1 *av1-1-b8-00-quantizer-09.ivf.md5
-adc229b3780a4968c18ded1bcbe72e3f04643833 *av1-1-b8-00-quantizer-10.ivf
-0799b7e54e54ee97bf0e8aad2b75509ce59c7097 *av1-1-b8-00-quantizer-10.ivf.md5
-44bac8247160a8d9a0ab19f890fc89cc9298de1d *av1-1-b8-00-quantizer-11.ivf
-cc6b2bf167e114599b242aba574e8c6f1fa2f047 *av1-1-b8-00-quantizer-11.ivf.md5
-ebb3af7dfc15567188bcb617021cdc95ebc560e3 *av1-1-b8-00-quantizer-12.ivf
-b716ae29d56cd0c052dbfa1b5dcf850cd0fa8ca7 *av1-1-b8-00-quantizer-12.ivf.md5
-46159641f981a26fb9c374a5ca41e44f0ce0a9f0 *av1-1-b8-00-quantizer-13.ivf
-c6db1b8b4a74f83e4a0647e053cea0fc00f6abab *av1-1-b8-00-quantizer-13.ivf.md5
-fadc909d18eb640760fbb075f922fb050e715470 *av1-1-b8-00-quantizer-14.ivf
-e36bb6b23273633ba3ef7d28160a7258840a1476 *av1-1-b8-00-quantizer-14.ivf.md5
-8befbd9cc1601dcd36ec6911613855f68e6fd40e *av1-1-b8-00-quantizer-15.ivf
-cfc2334b76fb5e7aa9d8607e89d37cbc7716d62e *av1-1-b8-00-quantizer-15.ivf.md5
-ca42e00ae27c6b7f684fe3d2a787d50d2827cb3f *av1-1-b8-00-quantizer-16.ivf
-f11278218a7c3c73cfaab2332bab55f06cedcc81 *av1-1-b8-00-quantizer-16.ivf.md5
-05270d365bdc067f9446eda3029a6f41571a5229 *av1-1-b8-00-quantizer-17.ivf
-fb6482f35e7ad04bf231ea1806226760abcb3c26 *av1-1-b8-00-quantizer-17.ivf.md5
-617bc72037165efbff478d5a0d342b3c20ffcafd *av1-1-b8-00-quantizer-18.ivf
-1ff68d5424f91322123fe0d58f436b8e49cfa99d *av1-1-b8-00-quantizer-18.ivf.md5
-821c3b1ae6054c7a91b2f64428806e57f1157ca6 *av1-1-b8-00-quantizer-19.ivf
-f2fd118e786697553d6987f786660a2bb9f00680 *av1-1-b8-00-quantizer-19.ivf.md5
-48bcf17c27d9a4eb73632a68c09f42eff9f9af99 *av1-1-b8-00-quantizer-20.ivf
-64d55e4c858414bc2837c9c3e2d5fb6d2208c4b8 *av1-1-b8-00-quantizer-20.ivf.md5
-d61ecdd4f0950bc5c8bae1270b22e711bdd22763 *av1-1-b8-00-quantizer-21.ivf
-9d447938596096704fd5f4d41bcdf6fabf9cdfb9 *av1-1-b8-00-quantizer-21.ivf.md5
-59b4b65d8e56ccdd1bddff26a03e991a63409334 *av1-1-b8-00-quantizer-22.ivf
-aa1be0c7c7622d612af85f9bf96a212f6fe5ab56 *av1-1-b8-00-quantizer-22.ivf.md5
-95ed96988eb9916cad956db9b929718769de49f1 *av1-1-b8-00-quantizer-23.ivf
-596b8a3aea468996d609624367465c412751f52b *av1-1-b8-00-quantizer-23.ivf.md5
-e6c2dc4ce725003152797b3d7b34d7eb34da50c8 *av1-1-b8-00-quantizer-24.ivf
-1cd3d7e8b3813a9e5591b94eaeb72d471780e64a *av1-1-b8-00-quantizer-24.ivf.md5
-6734e353008824e523939d1a18daa3f2ab2d8ec6 *av1-1-b8-00-quantizer-25.ivf
-c45cf440a05802c1f9e29472175ed397d130d988 *av1-1-b8-00-quantizer-25.ivf.md5
-3372b1c69fb39811156adcea4f6dba802c0918c2 *av1-1-b8-00-quantizer-26.ivf
-b1751d55bb3fb788751fe28fb7434bee153bda68 *av1-1-b8-00-quantizer-26.ivf.md5
-e7ddb19a6e2a798d6a4e7dfdfc10b4df777b60e3 *av1-1-b8-00-quantizer-27.ivf
-0e19d6b79cd71de69d03e0455349568af979b170 *av1-1-b8-00-quantizer-27.ivf.md5
-7f1c90a35543d6b673e353b3702baf3aa1caeaa7 *av1-1-b8-00-quantizer-28.ivf
-d9a4f9cb88103249a05a7e6aa616bf0c16bf9c95 *av1-1-b8-00-quantizer-28.ivf.md5
-28d741b923011c7fcc50a7318256a638d3110a07 *av1-1-b8-00-quantizer-29.ivf
-c68cacf2b2ff2694945a99ad836dcf1ee3961c09 *av1-1-b8-00-quantizer-29.ivf.md5
-9a5d9ea4bc76dd40d04e92f33f45e9c2e120e85d *av1-1-b8-00-quantizer-30.ivf
-eb02bb8c16c4c0368ddff83e05e516e84ec9eaf3 *av1-1-b8-00-quantizer-30.ivf.md5
-20193c372f44f522e094c2c05fc7e4aaa0717fa8 *av1-1-b8-00-quantizer-31.ivf
-a4c1a4ac332f4911f0d5abbd826ebecfb8432d6c *av1-1-b8-00-quantizer-31.ivf.md5
-9617bbd691f093d259dbc8a642a57a153c1fc00c *av1-1-b8-00-quantizer-32.ivf
-73d60a348454b126ea6368ea604954bc23f210ae *av1-1-b8-00-quantizer-32.ivf.md5
-d9aea9d72a686c59b60584d827f60ca1ee8eee26 *av1-1-b8-00-quantizer-33.ivf
-fbf64de376a63d2d3051da83b0e4e56579b55c0a *av1-1-b8-00-quantizer-33.ivf.md5
-791aaf067f125e5cf4a247cf06a2e29ab071ec90 *av1-1-b8-00-quantizer-34.ivf
-8e2e6efe4c069e54844da19125c4280b95990c69 *av1-1-b8-00-quantizer-34.ivf.md5
-01ba67bba5cbf7c94c65da8f4c9bd6e7db24cf3a *av1-1-b8-00-quantizer-35.ivf
-0c5e60704a4a6bd27e67b6fd72ca7d2cf7fff50f *av1-1-b8-00-quantizer-35.ivf.md5
-3e255b4a320c9522dcec539fef770b6920b9a102 *av1-1-b8-00-quantizer-36.ivf
-1241aab865fd7b4bae73736cbeec1866ea9c90ec *av1-1-b8-00-quantizer-36.ivf.md5
-44fa6fca109747d8f43f6c6aa46d782e5d476d54 *av1-1-b8-00-quantizer-37.ivf
-947f0f887c5ac9149cf85e8114a709d6f410fc32 *av1-1-b8-00-quantizer-37.ivf.md5
-8319ac1ddd6ce3279da5780175dff7a3a5fa1054 *av1-1-b8-00-quantizer-38.ivf
-5f571b7f88678eab9e54f162cc9898f14e437770 *av1-1-b8-00-quantizer-38.ivf.md5
-5975e7056e17608593a8c40619b68e6576d373d9 *av1-1-b8-00-quantizer-39.ivf
-7c870192d6eb70ce5367147a3d2c6a52e11f7bec *av1-1-b8-00-quantizer-39.ivf.md5
-47da942f1e455f1422fc65f06dd57304541d16ac *av1-1-b8-00-quantizer-40.ivf
-6ea7116c9ce3a1641c7060bab2f5e06fd0910d61 *av1-1-b8-00-quantizer-40.ivf.md5
-ab35c15dfde21c2572b14e04dbfd5fac1adae449 *av1-1-b8-00-quantizer-41.ivf
-19596f9849653b913186b9d6b7072984ede96177 *av1-1-b8-00-quantizer-41.ivf.md5
-23a5fa6c3d0eaffaf13f6402465f5dd33d8ea7f1 *av1-1-b8-00-quantizer-42.ivf
-5a2726f0d1b1799d4f70883f1bfe5c9d976c6cf5 *av1-1-b8-00-quantizer-42.ivf.md5
-86cddfc463d2b186ec5a1aa25c4562c05201e3c3 *av1-1-b8-00-quantizer-43.ivf
-674c64ec8487ee774ad09350380fa6ac43815807 *av1-1-b8-00-quantizer-43.ivf.md5
-6894c154eb56c4f3fe44d54fc4f9af468b03d175 *av1-1-b8-00-quantizer-44.ivf
-eca679a2781eb894d18b3d578e3aaf4f48019a15 *av1-1-b8-00-quantizer-44.ivf.md5
-0960bf018ada4224b8344519cf091850d50a57bd *av1-1-b8-00-quantizer-45.ivf
-291bb43b9e1ab167040b51019daf1ccf94fd1e50 *av1-1-b8-00-quantizer-45.ivf.md5
-ea644a4732f1a2534332802c2fa5073344f3c356 *av1-1-b8-00-quantizer-46.ivf
-4c7915382b1d6d08709c95525b04ab8830f20ca1 *av1-1-b8-00-quantizer-46.ivf.md5
-d1f8832d33234e2c74a2280090850153ea24ea82 *av1-1-b8-00-quantizer-47.ivf
-90eb9959e612602934dcc512fe6f54abf0c88d9c *av1-1-b8-00-quantizer-47.ivf.md5
-69c93f760e8b666eb5b98f510e09d90f9230ac9b *av1-1-b8-00-quantizer-48.ivf
-931f869e14bd455de9dac2101b383c29e7d6f04c *av1-1-b8-00-quantizer-48.ivf.md5
-8b660c577d95c031d6711c1134b8d115097f8d7e *av1-1-b8-00-quantizer-49.ivf
-0e3fe8b49d497050dc1a0eac5f3ad60f5fe068fe *av1-1-b8-00-quantizer-49.ivf.md5
-d40bb21448a6da0fc9b88cbcf76d2f4226573acb *av1-1-b8-00-quantizer-50.ivf
-bcd2a9c9a021ba44fc5dc74ae02194fe49ca76a4 *av1-1-b8-00-quantizer-50.ivf.md5
-3b5a1d464aa89b0f1a6ad4f5a03602292b826172 *av1-1-b8-00-quantizer-51.ivf
-49bcde0c56cf8b7fbe429336981be22d39025b74 *av1-1-b8-00-quantizer-51.ivf.md5
-38970a02fb38ddb4954fe4240164cb75de5fc744 *av1-1-b8-00-quantizer-52.ivf
-fd02b034d79d4be150efb02bd4349edfd0e41311 *av1-1-b8-00-quantizer-52.ivf.md5
-2fde7a7cf3014d5196d011c47de4a144227ed122 *av1-1-b8-00-quantizer-53.ivf
-0cb66e6d8fbb29962a69ae1703e22da50db2c92b *av1-1-b8-00-quantizer-53.ivf.md5
-89a69e9b9a601e40cb491ac3a1d32491f2468ac8 *av1-1-b8-00-quantizer-54.ivf
-2f8af51acc73c99b5af81db2bdd1883b611ad311 *av1-1-b8-00-quantizer-54.ivf.md5
-31ee4f56fcb0043e95fff7af49e4ef82aafa5543 *av1-1-b8-00-quantizer-55.ivf
-04a7104e02bdd0fa38c118202dbbecdbd11ace02 *av1-1-b8-00-quantizer-55.ivf.md5
-f262f0b234006a2652fceb77b1a8711aa53abb54 *av1-1-b8-00-quantizer-56.ivf
-bdd54dc25bc5a147c76163af0bced45c56435d79 *av1-1-b8-00-quantizer-56.ivf.md5
-1ef00617091db4b2b839de623bd6b4fb0b2f5f83 *av1-1-b8-00-quantizer-57.ivf
-714c65363a87ed5e6e4ad75c79ddb6af57d41fd9 *av1-1-b8-00-quantizer-57.ivf.md5
-43c9b02feccbb3c709d96015f126b7e3d4c24c64 *av1-1-b8-00-quantizer-58.ivf
-bae22b8d6377862bff8219470c0d87205d186a68 *av1-1-b8-00-quantizer-58.ivf.md5
-ca5f780abe4c02e48cceb9c804f3625723c359bf *av1-1-b8-00-quantizer-59.ivf
-c60a20bbf60b0b0a442ef3f7b682979053909d6e *av1-1-b8-00-quantizer-59.ivf.md5
-1f6f047e9f0e1da22fb514370d92c3c7c66dcf89 *av1-1-b8-00-quantizer-60.ivf
-86dc7fa59d363cf1ae4b027a57b119bda893c1c1 *av1-1-b8-00-quantizer-60.ivf.md5
-bcf0c3353568c47a043f2dc34c9abd3fc04eebd4 *av1-1-b8-00-quantizer-61.ivf
-66fc4f729c5915aa19939d1b6e28e5b398e747bb *av1-1-b8-00-quantizer-61.ivf.md5
-ac8d3c54451b52cf557ef435d33e7638088d66df *av1-1-b8-00-quantizer-62.ivf
-b57f4e1276ead626a3662339a86111ae6fda49d2 *av1-1-b8-00-quantizer-62.ivf.md5
-2a8aa33513d8e01ae9410c4bf5fe1e471b775482 *av1-1-b8-00-quantizer-63.ivf
-9f646ec35a168f495e144c64ba7ce9aeb41cd0a2 *av1-1-b8-00-quantizer-63.ivf.md5
-838388fbda4a1d91be81ff62694c3bf13c460d38 *av1-1-b8-01-size-16x16.ivf
-4229c1caf8e25eb3073456fb90ceed206753901e *av1-1-b8-01-size-16x16.ivf.md5
-23f4253bf71e02b2e8ead66da4b3de875e879ef2 *av1-1-b8-01-size-18x16.ivf
-af125644436d4b6897dade68336cedad663b6610 *av1-1-b8-01-size-18x16.ivf.md5
-94e4a75bd93052f79998e9e08e6b5dd73dc27e50 *av1-1-b8-01-size-32x16.ivf
-e7b3fbc5e4b2469838e7ae36512bd3ce0a81040c *av1-1-b8-01-size-32x16.ivf.md5
-f297bde01c05ec5c07ff8118a0280bd36c52b246 *av1-1-b8-01-size-34x16.ivf
-f6bbd94d6063c689de3c7cf94afa2c68b969d12c *av1-1-b8-01-size-34x16.ivf.md5
-1e18bdf68bab7e7282aacc77e423bc7d93d04a8e *av1-1-b8-01-size-64x16.ivf
-de75732fccfb385294b23c17f0f1a57b455edcf7 *av1-1-b8-01-size-64x16.ivf.md5
-26b1f6ae80b161e971468085778cc1ece502b330 *av1-1-b8-01-size-66x16.ivf
-48bd99813557c314d398e6952da78da07c79d416 *av1-1-b8-01-size-66x16.ivf.md5
-ff213ecf31b982a3a7f009c9739f64e066e1ffe9 *av1-1-b8-01-size-16x18.ivf
-86b20a13b1939dc5f678e80491f190d376233d58 *av1-1-b8-01-size-16x18.ivf.md5
-c90bd878c59263a15c6a6f515d1c7e071f141559 *av1-1-b8-01-size-18x18.ivf
-6f659036ffcd3dd380cf970cf1a06f7755e0b2de *av1-1-b8-01-size-18x18.ivf.md5
-e16a1411381b34817a4c0d8e5eeaeb8cddcc9c46 *av1-1-b8-01-size-32x18.ivf
-fdb1c4ec56f5aa690eadbe897340fee86a06ae2f *av1-1-b8-01-size-32x18.ivf.md5
-fac7052b39bd2d0ae107e0e94050226712c770c2 *av1-1-b8-01-size-34x18.ivf
-adb0d5a99228027eaa3b016963df447c9818c447 *av1-1-b8-01-size-34x18.ivf.md5
-b8be5e55d9be42746c2b547d0e26e80b21c9802a *av1-1-b8-01-size-64x18.ivf
-8f8f6da34cdf78c5a6551c637e1afe279cc3884e *av1-1-b8-01-size-64x18.ivf.md5
-9e066bdcc2cd789cdf551bd4c9c85c178887b880 *av1-1-b8-01-size-66x18.ivf
-e8ec6effa936423ae2eec2b60a3160720d2de912 *av1-1-b8-01-size-66x18.ivf.md5
-6ebe45085cdeebc2acd6da5abd542a59312c0ff4 *av1-1-b8-01-size-16x32.ivf
-044695669103dbf158591dce9c649317a177d5f6 *av1-1-b8-01-size-16x32.ivf.md5
-9fabb4f60641b8c7995d1dc451419165d41258ff *av1-1-b8-01-size-18x32.ivf
-7263764680dfec864c3fad5df824ab1973489a14 *av1-1-b8-01-size-18x32.ivf.md5
-3f72841a24a13e601d79cf029aa1fdb02970ce0b *av1-1-b8-01-size-32x32.ivf
-bbe1ae2888d291ec6bc98cd0784937580c554103 *av1-1-b8-01-size-32x32.ivf.md5
-392131a7c7609acd0dba88fee14f1ed042d23ab1 *av1-1-b8-01-size-34x32.ivf
-eea68165ebe9acd28693374bf2266374b9c77786 *av1-1-b8-01-size-34x32.ivf.md5
-78afdd96265811ab9466e906347b57161e5c010d *av1-1-b8-01-size-64x32.ivf
-47b317af582700b67f6e77659db1dfaa26c8cde6 *av1-1-b8-01-size-64x32.ivf.md5
-2b4d01f2c9f23044c0d886482c7073bd4d5d37d1 *av1-1-b8-01-size-66x32.ivf
-3ad5a58a0ee5086af370b22ab2b5b7592a4f33e7 *av1-1-b8-01-size-66x32.ivf.md5
-78ddae04eb8277ae605bd7017ad7ad27bfc82d39 *av1-1-b8-01-size-16x34.ivf
-d0c18e679f1fc51e4f7409831321eed9c4858f6f *av1-1-b8-01-size-16x34.ivf.md5
-38d8ed885f46aead6ec1271d8a5d4aee79b8eb68 *av1-1-b8-01-size-18x34.ivf
-097ddbd69b8f54826a35efeb0b8b07ec198bba6b *av1-1-b8-01-size-18x34.ivf.md5
-91a42720bc2e7ba701f4d97b463a098b6707cdbd *av1-1-b8-01-size-32x34.ivf
-c590d43d37095bd2e8f8d12c9278477419b72d1a *av1-1-b8-01-size-32x34.ivf.md5
-4cc2a437dba56e8878113d9b390b980522542028 *av1-1-b8-01-size-34x34.ivf
-57eeb971f00e64abde25be69dbcb4e3ce5065a57 *av1-1-b8-01-size-34x34.ivf.md5
-b36fee1b6ad69d1206466615d69c05e0a4407939 *av1-1-b8-01-size-64x34.ivf
-a78aea0250d0b32657dc0eaf2d8394bc766c0e35 *av1-1-b8-01-size-64x34.ivf.md5
-10e441209262e082e31fef8c15b51579c9e81509 *av1-1-b8-01-size-66x34.ivf
-558b46f6ef1662c208012d0b66d1857eeff3244e *av1-1-b8-01-size-66x34.ivf.md5
-dd44aad500c7ca0fc97e3d8f0abed3c83b24c79c *av1-1-b8-01-size-16x64.ivf
-a5b64e8063abcf3e4872dc4baf1c32384dc5cf83 *av1-1-b8-01-size-16x64.ivf.md5
-aa849f0d09bcb2ead44719d63043536932d5c9f2 *av1-1-b8-01-size-18x64.ivf
-bcdf2dea3590c7031158ffe7b907d9ee35e2fe57 *av1-1-b8-01-size-18x64.ivf.md5
-36e856d30e160ba2fbb00510296202f61afaae49 *av1-1-b8-01-size-32x64.ivf
-99299f75b82c40c13f168adf2d124f57044a39a2 *av1-1-b8-01-size-32x64.ivf.md5
-e3e03ec5d38eb25e97e4ec3adc6ed40ecdebd278 *av1-1-b8-01-size-34x64.ivf
-84625abf8a200a7d20dd3dd3b277b50b3d62ce32 *av1-1-b8-01-size-34x64.ivf.md5
-7d017daebef2d39ed42a505a8e6103ab0c0988c1 *av1-1-b8-01-size-64x64.ivf
-1ff38d5ecba82fb2e6ac3b09c29c9fe74885ac29 *av1-1-b8-01-size-64x64.ivf.md5
-e1b58ba0b462508593399a2ed84db5f1c59ffcd2 *av1-1-b8-01-size-66x64.ivf
-a6b2c84c94fe79ab0373d157d1203f8d66de0706 *av1-1-b8-01-size-66x64.ivf.md5
-7b4faa7eb7b73392b62de6613282a98dddc13bb6 *av1-1-b8-01-size-16x66.ivf
-a2dacf2bae3c4ab352af66a9600946d29ab9a6ee *av1-1-b8-01-size-16x66.ivf.md5
-0f97805fa30497d4cf39665150f00dfdea52d862 *av1-1-b8-01-size-18x66.ivf
-33d8ea0765953250f998da3fe161f2a8cfca2353 *av1-1-b8-01-size-18x66.ivf.md5
-c8bb00256de973e3b3ee31b924f554336d310cdb *av1-1-b8-01-size-32x66.ivf
-6a6588e6edc68ff7739968a9e7cc6d9eaaeed356 *av1-1-b8-01-size-32x66.ivf.md5
-75ec54fec5c36eecde6d0a16e0389a5f7ad8ec22 *av1-1-b8-01-size-34x66.ivf
-36101dfa9495c18696c0d7d61f25e748f4de7425 *av1-1-b8-01-size-34x66.ivf.md5
-7e5491716e70f8199156b8843513c935667b281e *av1-1-b8-01-size-64x66.ivf
-da38755bb0c9ef56b81617835ddf1340242c6dce *av1-1-b8-01-size-64x66.ivf.md5
-68b47b386f61d67cb5b824a7e6bf87c8b9c2bf7b *av1-1-b8-01-size-66x66.ivf
-25974893956ebd92df474325946130c34f880ea7 *av1-1-b8-01-size-66x66.ivf.md5
-9f386d19c87dbfd6ac84a06d2393dd88863ac003 *av1-1-b8-01-size-196x196.ivf
-788f77f655f55de3db94dd69870316134c149116 *av1-1-b8-01-size-196x196.ivf.md5
-ed3bb2bb52a9d1786e233ef38142b15b85097875 *av1-1-b8-01-size-198x196.ivf
-3bb6b6721ad9b2838b2d07e47b29d6c0117526b1 *av1-1-b8-01-size-198x196.ivf.md5
-49461772caaaa7b824d48f4e9c77a906b0dc02d5 *av1-1-b8-01-size-200x196.ivf
-f1cba00c36909c56097c8785df476d42bc91f259 *av1-1-b8-01-size-200x196.ivf.md5
-44a656a22958e26ed169a69deb8f373117224f06 *av1-1-b8-01-size-202x196.ivf
-69be876b52fe42811bba52d36d0bcc88d6c25b3f *av1-1-b8-01-size-202x196.ivf.md5
-0a6fe9b478363faedbfd465a75790b4c2661b9ba *av1-1-b8-01-size-208x196.ivf
-fc8e95a6860a8a37ccdf1dfe49828502fcf96a08 *av1-1-b8-01-size-208x196.ivf.md5
-8e05b5a20ec95afd92bb615a7daa2e17a7ef55a8 *av1-1-b8-01-size-210x196.ivf
-0add512bffbda3300d8f684a53b13b996fe2e46d *av1-1-b8-01-size-210x196.ivf.md5
-a15f12652c6b4d0c30f13a439c941bfc4a431d1a *av1-1-b8-01-size-224x196.ivf
-b904b93252175f79e0e2b28896131ce93d5fc925 *av1-1-b8-01-size-224x196.ivf.md5
-1a57b913443b267f4a31a6925c39f5b58022f550 *av1-1-b8-01-size-226x196.ivf
-7cf3087de5804763a82d2a798243a66459664772 *av1-1-b8-01-size-226x196.ivf.md5
-2cc28541a2a72e8b45a368f71e70fc294e2de3ab *av1-1-b8-01-size-196x198.ivf
-bb736eedb4bd1e39bf9d60435b4b27a12842e112 *av1-1-b8-01-size-196x198.ivf.md5
-c4ebf93fbf3ae52108fd7b39ddef3afae48188ea *av1-1-b8-01-size-198x198.ivf
-fa4de6881511728bafa15b5f441a0cfdf683cc75 *av1-1-b8-01-size-198x198.ivf.md5
-55fce983186d454b0eb15527393bb2465ba41c6b *av1-1-b8-01-size-200x198.ivf
-1ac8fb1ee622cbc4aa1b83cb46b4731c85efae62 *av1-1-b8-01-size-200x198.ivf.md5
-67d276c67886f0a91a7ee06751a64f95eeb7bc1f *av1-1-b8-01-size-202x198.ivf
-1633b62d9e4ea41737c42f70cbde9a5671da0cef *av1-1-b8-01-size-202x198.ivf.md5
-081cb3f29d3956d4d858d9661fd3d62c94b68867 *av1-1-b8-01-size-208x198.ivf
-871d1c99167408dd32fa7603a7296c9b99ccda15 *av1-1-b8-01-size-208x198.ivf.md5
-b2d80b42468d5f296ae240cfb1fc0b3dd3d96bbc *av1-1-b8-01-size-210x198.ivf
-6a3382656cb17b532a97b1061697f9a878fc58d1 *av1-1-b8-01-size-210x198.ivf.md5
-84d7994fa20fcf6c1d8dbd4c2060c988a6fce831 *av1-1-b8-01-size-224x198.ivf
-42ea12e15de81f2e8617b6de7bae76de2da4d648 *av1-1-b8-01-size-224x198.ivf.md5
-c74a9281cf98c597121df6bff0ac5312b887f969 *av1-1-b8-01-size-226x198.ivf
-4133aae0001804e2bbc7928fc065517a6dd8b288 *av1-1-b8-01-size-226x198.ivf.md5
-27adbf148c63f807bd617cfd78aeaedb8b0f2304 *av1-1-b8-01-size-196x200.ivf
-9253e525e6207ef1ce0839b8f88ea781e9abe41e *av1-1-b8-01-size-196x200.ivf.md5
-21c9ea4d882e48353d3df66fcde0e4746168163f *av1-1-b8-01-size-198x200.ivf
-3d5ee59fde9194f0eaff736051cfd1d7b7daeff1 *av1-1-b8-01-size-198x200.ivf.md5
-c27b0b57667910847122a0309c703315e444110f *av1-1-b8-01-size-200x200.ivf
-7b2a15a17b421ef07e285ca4e8a224f0512c434d *av1-1-b8-01-size-200x200.ivf.md5
-780de549e4163a52590f7c0f488e027a8a4aa053 *av1-1-b8-01-size-202x200.ivf
-cb0ec0969522ca60d79a639e9b9509363468ffd0 *av1-1-b8-01-size-202x200.ivf.md5
-2c59821904863e264ae61401cbd494a79bc04f13 *av1-1-b8-01-size-208x200.ivf
-9963955966a52b65cdd13465c9fb2ba3b5356755 *av1-1-b8-01-size-208x200.ivf.md5
-ff63121611ea9c0628c7e5af13de5e7786611ca6 *av1-1-b8-01-size-210x200.ivf
-2a5993be234e3af2af6d185b2a6f3aaf1979b83a *av1-1-b8-01-size-210x200.ivf.md5
-b8485ada95440d78b51153227231b1aced1a8273 *av1-1-b8-01-size-224x200.ivf
-9c3cd32ea6c006a91eb37d69dbeccf878de5d214 *av1-1-b8-01-size-224x200.ivf.md5
-1aa0ce3e3a74f9b600a146e98b05547a0b454c48 *av1-1-b8-01-size-226x200.ivf
-e045be96c3af16a9ddc10a9933e8ddfb3319d716 *av1-1-b8-01-size-226x200.ivf.md5
-e92b76480f4339855d998b97182f36b28deadcfa *av1-1-b8-01-size-196x202.ivf
-480c707abcd2a650e2160ec397f8348cecb45770 *av1-1-b8-01-size-196x202.ivf.md5
-137b9c0d10a3bdbdf6f97b3e6331f3e8acaf8f91 *av1-1-b8-01-size-198x202.ivf
-7429642146d0da55161ab13024a261094ee2ce87 *av1-1-b8-01-size-198x202.ivf.md5
-9cea71c44ad015ac702d675bacca17876e65cb1a *av1-1-b8-01-size-200x202.ivf
-76b1ec6c42da55f47e389a561590d1a7c713e495 *av1-1-b8-01-size-200x202.ivf.md5
-26dffdcd0dac9becf68d12e31fcd91eddf1f7154 *av1-1-b8-01-size-202x202.ivf
-ddb75e99123fed4ef05d9b85200cefd8985bc84c *av1-1-b8-01-size-202x202.ivf.md5
-04007e83bb66ba547d09f8926ea5bfc7fd9e4b2a *av1-1-b8-01-size-208x202.ivf
-5b72eb58db22087ad416c499119f41e718395b52 *av1-1-b8-01-size-208x202.ivf.md5
-721ff7c0ae0e2ed896b5acac230113f1404e769c *av1-1-b8-01-size-210x202.ivf
-187d2ef939fc26e1a1c7de65abe8e058d8aae17a *av1-1-b8-01-size-210x202.ivf.md5
-dba41421cc938bcf0234254f96be0325ab66186e *av1-1-b8-01-size-224x202.ivf
-58856038c1eb13a7bf0353a30b1affe844cd31b1 *av1-1-b8-01-size-224x202.ivf.md5
-55eba14878d25dcc351ee5e92fa06e559035b409 *av1-1-b8-01-size-226x202.ivf
-e295b3d791d40d7c1fff2c40a260078dccaef24a *av1-1-b8-01-size-226x202.ivf.md5
-6c777223990ddfd92040a8526646ed0f39299b0d *av1-1-b8-01-size-196x208.ivf
-5210daff766cddaf3945610ee05ff242aef8175a *av1-1-b8-01-size-196x208.ivf.md5
-252831abfb9f4a9a8556c21cc3bf60adfe88210f *av1-1-b8-01-size-198x208.ivf
-35ed9601e608a829980cec81e41b7bd3e5f4c2ce *av1-1-b8-01-size-198x208.ivf.md5
-e800ed893a88704a4576d4984957f3664560daa9 *av1-1-b8-01-size-200x208.ivf
-82c038f9072a2fcf8d55fb4a474fdd791ba9a290 *av1-1-b8-01-size-200x208.ivf.md5
-9ce7bb932dd99f86da8ff2ab89fa4d3089a78da8 *av1-1-b8-01-size-202x208.ivf
-0611bf0179abe3c820a447a2bd3a04c3790f3a87 *av1-1-b8-01-size-202x208.ivf.md5
-e5900d9150c8bebc49776227afd3b0a21f5a6ac6 *av1-1-b8-01-size-208x208.ivf
-86d6b9a3840aa0a77938547c905bd6f45d069681 *av1-1-b8-01-size-208x208.ivf.md5
-2758ba5dad16f4a91334f2ed07a4a037201bb873 *av1-1-b8-01-size-210x208.ivf
-78453b1fda2ccc6f35e0d762567807757bcddb16 *av1-1-b8-01-size-210x208.ivf.md5
-fff88fb8e833f6b4ad64cb591b219c7cceb7f2d2 *av1-1-b8-01-size-224x208.ivf
-87266fc34aaed82cdb98cbc309b221ad52eccd81 *av1-1-b8-01-size-224x208.ivf.md5
-dec839fe64046461015b56cda191835284f42a52 *av1-1-b8-01-size-226x208.ivf
-d7a15264fc3fd55d3aec0ccfaa7c434c6d90969f *av1-1-b8-01-size-226x208.ivf.md5
-584782e93ed1cb7797a90fece44becdd1e23bf0d *av1-1-b8-01-size-196x210.ivf
-ed76ec841b18a457853e368576967c4768fc2730 *av1-1-b8-01-size-196x210.ivf.md5
-dab625599b9f01398b593e865d9a4a95a029d60f *av1-1-b8-01-size-198x210.ivf
-b90e8d96a1f5b329b088b467a11fed2d055d74ca *av1-1-b8-01-size-198x210.ivf.md5
-6774bee17b9e50d2d8630e2e1afc30ded67e662d *av1-1-b8-01-size-200x210.ivf
-343a86bd54eb3dd5e9902eb62a3d776dcff2f4f3 *av1-1-b8-01-size-200x210.ivf.md5
-0456c3b8e242eeee019ca97d155f81124de62c90 *av1-1-b8-01-size-202x210.ivf
-5a6a6428c9858a0d3561db42ceaf981c143fe479 *av1-1-b8-01-size-202x210.ivf.md5
-6a3a8f65bf806b1be7726b983427880f772c9986 *av1-1-b8-01-size-208x210.ivf
-5563ea6d8c65887553ff3000addc6418913f1650 *av1-1-b8-01-size-208x210.ivf.md5
-5a8b69489f8e9b917ea7718ad2645101cdbe5644 *av1-1-b8-01-size-210x210.ivf
-f4b01604036fa23000d44fbf42097ae1181bcd62 *av1-1-b8-01-size-210x210.ivf.md5
-fb6f5b08a048698cfe324557ee8cd840c4a3f6ce *av1-1-b8-01-size-224x210.ivf
-3ce5c404e3ca09c8e994b3043bad42cd555b00c0 *av1-1-b8-01-size-224x210.ivf.md5
-2e9fc8510d2131b2f3c9a93bececac985e4426d2 *av1-1-b8-01-size-226x210.ivf
-897c537e259331ca86cdd6e4d2bd343f8538402e *av1-1-b8-01-size-226x210.ivf.md5
-8300512106fce3424eb74b5d4bc0f4f19f7c9af8 *av1-1-b8-01-size-196x224.ivf
-43662ea025ea79afe4964fd4d12a77f4aa4e565e *av1-1-b8-01-size-196x224.ivf.md5
-640f8fda7ade8f2850e2275a9f5e233e33a0ba8d *av1-1-b8-01-size-198x224.ivf
-9ac690bdbbce47d7b169128b568f955e70076f8c *av1-1-b8-01-size-198x224.ivf.md5
-ce2e9379c72fc924e364d5727605394a1438a211 *av1-1-b8-01-size-200x224.ivf
-1ec35a53d88072b96b255202f678178bc7e5bb20 *av1-1-b8-01-size-200x224.ivf.md5
-5d3af7921623deccb578115c8ce207c019f97f50 *av1-1-b8-01-size-202x224.ivf
-14eafd55b0cda3a3476cae7ad500dbd5ee899dd5 *av1-1-b8-01-size-202x224.ivf.md5
-6b6d78e466cf94a5ef8dfe252caa0948dd2ec175 *av1-1-b8-01-size-208x224.ivf
-e178b0c272dfcfe614c6b49cb28dad11781af0b6 *av1-1-b8-01-size-208x224.ivf.md5
-dd2232b9e18971d7e19650a1e3218aef1010247f *av1-1-b8-01-size-210x224.ivf
-40a66198c47820f5fa2d2e389ec0c1191ea4ffcc *av1-1-b8-01-size-210x224.ivf.md5
-9ec028b81a5ea311683328d856f436e6d0b0e6a0 *av1-1-b8-01-size-224x224.ivf
-143b9530ce722385db2c2d883daa649ed42b8d40 *av1-1-b8-01-size-224x224.ivf.md5
-bf833947e62935c54e1e727ccb36157f7c1e9e5d *av1-1-b8-01-size-226x224.ivf
-ca4f3b44463106e4f0bb54e490c3bd457d7d780b *av1-1-b8-01-size-226x224.ivf.md5
-5525f7e312ec073f480ed5a2be5bdc4f0ce51a09 *av1-1-b8-01-size-196x226.ivf
-062d4b240741184458d2d2abd243ed7877631de8 *av1-1-b8-01-size-196x226.ivf.md5
-e6b911142394b94c23191eaa63c9eb41a00f80b0 *av1-1-b8-01-size-198x226.ivf
-3b580d903dddf47082f5e055bfb01a4f05c09b7d *av1-1-b8-01-size-198x226.ivf.md5
-70feb5efeb28df25f7d1a661c73bf013c5ada9b4 *av1-1-b8-01-size-200x226.ivf
-f0b894e7f787e62f1492be62f3dedeb065062160 *av1-1-b8-01-size-200x226.ivf.md5
-7f9a10831e2389b31497fad50080b4d5452d6e91 *av1-1-b8-01-size-202x226.ivf
-45b7194eba9367c8059403c23ca4ae49e988dfaf *av1-1-b8-01-size-202x226.ivf.md5
-967837a2cfbf9aa3131f73aec6a52dcdd82926c7 *av1-1-b8-01-size-208x226.ivf
-c8baedb48fd5d4c956aa8d73fd957370f718f047 *av1-1-b8-01-size-208x226.ivf.md5
-9c926226b9f6b015501d8ac1e3f95e8570283a05 *av1-1-b8-01-size-210x226.ivf
-57d4837667fd4c5a7aeb908626d701b632852c60 *av1-1-b8-01-size-210x226.ivf.md5
-25a4940922761239809d82c45c2be1c5e4f48785 *av1-1-b8-01-size-224x226.ivf
-87ae7e7558241bf3575a333f56fbad4dfdade8ff *av1-1-b8-01-size-224x226.ivf.md5
-40dd208eb525cd90d7c0674cf787097fb909afae *av1-1-b8-01-size-226x226.ivf
-34bdef682a4eae0e0a05e4486a968af1df8b220a *av1-1-b8-01-size-226x226.ivf.md5
-9bbe8499796aa588ff02e313fb0d4349940d2fea *av1-1-b10-00-quantizer-00.ivf
-36b402eedad2bacee8ac09acce44e2fc356dd80b *av1-1-b10-00-quantizer-00.ivf.md5
-1d5e1d2827624f328020bf123df213bb175577e0 *av1-1-b10-00-quantizer-01.ivf
-16c529be5502369e43ce9c6fe99a9709968e3daf *av1-1-b10-00-quantizer-01.ivf.md5
-39abc20739242a8f05efd4b35d7603c8ad7ff45d *av1-1-b10-00-quantizer-02.ivf
-81faa72c3d43b003966fe09ffaae51b07b1059be *av1-1-b10-00-quantizer-02.ivf.md5
-92ebf349b803333a43824a83d997b8cf76f656f9 *av1-1-b10-00-quantizer-03.ivf
-5e7556dc998cb8b506a43cc078e30802d7e600e6 *av1-1-b10-00-quantizer-03.ivf.md5
-1c496177c66e49f2e3556af87ec67afb5060170b *av1-1-b10-00-quantizer-04.ivf
-560fea4800a44fe19ed8d3e74f425bdbf1fb8abd *av1-1-b10-00-quantizer-04.ivf.md5
-7de864b8475ce0acd0ecb01827f2c9add815352b *av1-1-b10-00-quantizer-05.ivf
-1c1aea3db3f54a91866d89fd3b1a0d285ca10310 *av1-1-b10-00-quantizer-05.ivf.md5
-b6501c165619b036d0f7864fd4739973d2d18970 *av1-1-b10-00-quantizer-06.ivf
-d758c8eff275651006c41e7dd447cac13b489ad7 *av1-1-b10-00-quantizer-06.ivf.md5
-e4df6f588f156dffaafd9517b64f753cfc9ccf05 *av1-1-b10-00-quantizer-07.ivf
-3c577f67dade4537de642fd457ea2b367424f336 *av1-1-b10-00-quantizer-07.ivf.md5
-07e9c4c18abb36c8699c1c12bebcc727f090b525 *av1-1-b10-00-quantizer-08.ivf
-4981568ade3170f311cb114fa2689edc4bc35e67 *av1-1-b10-00-quantizer-08.ivf.md5
-2268ecd2899f1b41ae9898925b1d62cfefa30282 *av1-1-b10-00-quantizer-09.ivf
-029b03029b65b7c4c208961f0820467ad42fd3d6 *av1-1-b10-00-quantizer-09.ivf.md5
-3d2adaf6441cfa9585dcbf7d19d65bf6992a29a3 *av1-1-b10-00-quantizer-10.ivf
-017b7fb4c3ba0747c2d5688d493da33ef993d110 *av1-1-b10-00-quantizer-10.ivf.md5
-006535760bd7dc1cfc95e648b05215954a2e76c2 *av1-1-b10-00-quantizer-11.ivf
-c0ae083deb8e820aa49034af4d100944dd977018 *av1-1-b10-00-quantizer-11.ivf.md5
-840e0cbfe1acc8a7a45c823dc55ab44a0b6b553e *av1-1-b10-00-quantizer-12.ivf
-49232ea38bdef650c94808f53834f1137cd4bf39 *av1-1-b10-00-quantizer-12.ivf.md5
-04b0e5a7387e07474f51be4b2c3e05211b40f0d0 *av1-1-b10-00-quantizer-13.ivf
-a51b5ec4b890df3a64f9f0d866b8c41296c9e081 *av1-1-b10-00-quantizer-13.ivf.md5
-5dc47a140fbcbf08bf91481ee3585e9e067561ab *av1-1-b10-00-quantizer-14.ivf
-2625319eef69d6225e6ab6e5ce7790491406cb5d *av1-1-b10-00-quantizer-14.ivf.md5
-f866be86d8d8aa08ded30e42988b0936c1a16064 *av1-1-b10-00-quantizer-15.ivf
-03b7c1eefb54d99e30051c7123c0453f04a6579d *av1-1-b10-00-quantizer-15.ivf.md5
-548df2371dfb485419ed9baf28e3f495c64f364a *av1-1-b10-00-quantizer-16.ivf
-8a0d6bf1626b05b65c77331305414fe9be54e8c6 *av1-1-b10-00-quantizer-16.ivf.md5
-0077c82f96a2e095a3cb8de9bfa63715e3c9f438 *av1-1-b10-00-quantizer-17.ivf
-5d85f77f3087f4b206930722a945c60039262be4 *av1-1-b10-00-quantizer-17.ivf.md5
-1e0f1245ecb4c903b5dc7072d959fc43a7bba381 *av1-1-b10-00-quantizer-18.ivf
-06316ae2b45f2359a70cc3855ffd6ab81048b41a *av1-1-b10-00-quantizer-18.ivf.md5
-f197198f7ec058110185fda5297a1a43993654df *av1-1-b10-00-quantizer-19.ivf
-bac522c7f234d506c75b5495d74b3fa57c83a4df *av1-1-b10-00-quantizer-19.ivf.md5
-c2f57324d000b349323f37d5ebebde8c2b861f30 *av1-1-b10-00-quantizer-20.ivf
-999c6110786cbc25e67792234a5a02f2cb4553c7 *av1-1-b10-00-quantizer-20.ivf.md5
-2ffad9adfd19286fe2166ba877289d201c9a634f *av1-1-b10-00-quantizer-21.ivf
-d55713eaa791cfd7bf69b6c26d5032029d9a0f06 *av1-1-b10-00-quantizer-21.ivf.md5
-382528db53328c1a38976f5d9b579eef35d839f4 *av1-1-b10-00-quantizer-22.ivf
-cb5bd459e1a90126da9264cff4281515f95755b2 *av1-1-b10-00-quantizer-22.ivf.md5
-b52cc6160fc66f72ad66c198d275a1c73f925022 *av1-1-b10-00-quantizer-23.ivf
-c0f9d6659e1f283e9356fd7b4ac9f7cc5544cdc2 *av1-1-b10-00-quantizer-23.ivf.md5
-e11f15e3b63e7606b1122bb3670ee77c09c04840 *av1-1-b10-00-quantizer-24.ivf
-e9f141b924440e044270c81a68458fe498599a8e *av1-1-b10-00-quantizer-24.ivf.md5
-fb91793b69824c99b0218788dcea0a74ebd7e84e *av1-1-b10-00-quantizer-25.ivf
-434e33d609b2683c3cfbcc3a2cdfc26339590fb6 *av1-1-b10-00-quantizer-25.ivf.md5
-d82e38f31cdcf8b43479e6ddaa83373de38f70a2 *av1-1-b10-00-quantizer-26.ivf
-183943b851ba383a536f13c83b93f61ac8961ad5 *av1-1-b10-00-quantizer-26.ivf.md5
-6bf5e4e8e0aca699e493b9eb3672d2117494d74d *av1-1-b10-00-quantizer-27.ivf
-f0fb7e0a99180828b0e38b2cfe0622eecc2d26b8 *av1-1-b10-00-quantizer-27.ivf.md5
-d5adee2567544c3ae4223b3f3528a770377878d2 *av1-1-b10-00-quantizer-28.ivf
-14edf588efc67570e529b0ff8aeb8e7a0c69238b *av1-1-b10-00-quantizer-28.ivf.md5
-e6dcdc106847956035e3f00aabf4470f97e1887e *av1-1-b10-00-quantizer-29.ivf
-413c5cb778611c7c1a810b53861b9ab1fb391f17 *av1-1-b10-00-quantizer-29.ivf.md5
-b5e98b3f6b1db04d46bf43064c6ac64f797aff00 *av1-1-b10-00-quantizer-30.ivf
-d1a603661d76c28658c7cd2892b408e91d77893e *av1-1-b10-00-quantizer-30.ivf.md5
-80168371d1150e82e3f46bcbbcabba458b835b19 *av1-1-b10-00-quantizer-31.ivf
-904ecd033d4af5239c4d5b3f86e51ed5c3c2e3fb *av1-1-b10-00-quantizer-31.ivf.md5
-96291f6ace85980892d135a5b74188cd629c325f *av1-1-b10-00-quantizer-32.ivf
-a5ceace390d4a75d48281fe29060c21557e4f5ae *av1-1-b10-00-quantizer-32.ivf.md5
-0f80495de34eae07c4905b72573a315a879390ec *av1-1-b10-00-quantizer-33.ivf
-72b8f662973a660412946687dff878b276ae518e *av1-1-b10-00-quantizer-33.ivf.md5
-24905e3be7db320994b7fb8311dfd50a7c9e54da *av1-1-b10-00-quantizer-34.ivf
-cea514bb1b7b064c4d31914a2cb266611c278577 *av1-1-b10-00-quantizer-34.ivf.md5
-083012960dd7c17d3b00fa0e807759c98faded8f *av1-1-b10-00-quantizer-35.ivf
-de5fdb9e1e581484af1cc7d2dd3c3e84c90cebb2 *av1-1-b10-00-quantizer-35.ivf.md5
-f725f179aeee5b413620c0dd81b007b245c2a7ed *av1-1-b10-00-quantizer-36.ivf
-246b1931c04c02df1f168090e2650827cd5dbabd *av1-1-b10-00-quantizer-36.ivf.md5
-f6aa824156e9848f237481889a8103eb6130f31d *av1-1-b10-00-quantizer-37.ivf
-a8f78dd15fc2994369a08c2ddddcd0760c62ea5b *av1-1-b10-00-quantizer-37.ivf.md5
-a8dd662338c493aea266b99203e70af25982633f *av1-1-b10-00-quantizer-38.ivf
-09f36d998e85d0450060f540e50b075ae1432fc6 *av1-1-b10-00-quantizer-38.ivf.md5
-d97428871720ed658da6ed0e3f7c15da83387e4c *av1-1-b10-00-quantizer-39.ivf
-8c5230048909ee8f86f87c116f153cd910d0141f *av1-1-b10-00-quantizer-39.ivf.md5
-86e754e55e9b63c6e0a4fef01761414f8a6b61ca *av1-1-b10-00-quantizer-40.ivf
-99a71accf6457264e45ca80d3b1f082ee5acdecc *av1-1-b10-00-quantizer-40.ivf.md5
-9d18b7236506ab7e107c062620b64096ec0cf423 *av1-1-b10-00-quantizer-41.ivf
-5771159a9a7c7b66c9e13bb13ec3d53b37860208 *av1-1-b10-00-quantizer-41.ivf.md5
-54b72bc879a80e66613f421e67db62bba1c0041b *av1-1-b10-00-quantizer-42.ivf
-bf958236883ee7209ef4cb0b7503b430634a291e *av1-1-b10-00-quantizer-42.ivf.md5
-a06d5321a51d90404dd7085ae511d7df5d5e1e05 *av1-1-b10-00-quantizer-43.ivf
-ddb25723d976043d863634b9dc3b5fb84a245803 *av1-1-b10-00-quantizer-43.ivf.md5
-2ea0b64c170d7299dae1c14a8a49349aee8e0d08 *av1-1-b10-00-quantizer-44.ivf
-d18bde1b4893792173fa2014665e9364395ad5e9 *av1-1-b10-00-quantizer-44.ivf.md5
-73e506a32d3518e23424f231c7b5323d7a34a3d6 *av1-1-b10-00-quantizer-45.ivf
-be6224ebc77a3e5fb9c1645b876007e584a09d89 *av1-1-b10-00-quantizer-45.ivf.md5
-841223871374464194edc739c48dc7cefd1ff255 *av1-1-b10-00-quantizer-46.ivf
-4766d616f923496a8dc113c9b7f875f0c0735f9a *av1-1-b10-00-quantizer-46.ivf.md5
-8bbbbea130aaea453f7b826956a5520d10a0eccf *av1-1-b10-00-quantizer-47.ivf
-3ea21fac0c492b03d8ec25e4ee0971cd57e5f71a *av1-1-b10-00-quantizer-47.ivf.md5
-3ce83e0f1e1835b9a6c10fe502a16fd3650839e0 *av1-1-b10-00-quantizer-48.ivf
-b468de2c09fca5a6b2bb7a20bab4afd8d192c31d *av1-1-b10-00-quantizer-48.ivf.md5
-f3a757c678aa00f9a9c4c4658d37733fd935925a *av1-1-b10-00-quantizer-49.ivf
-f888dc88db576122695d4eb41c486aacd28a2d1d *av1-1-b10-00-quantizer-49.ivf.md5
-a9d78aaef105cc5a95b7ebb54783f37e75673123 *av1-1-b10-00-quantizer-50.ivf
-06d0c5e79cc794030c4be022089b1d12c1383f71 *av1-1-b10-00-quantizer-50.ivf.md5
-165c20ee372f83682d094541097e375227353239 *av1-1-b10-00-quantizer-51.ivf
-b3d90214b8c6e6f6d9357bb5784d10081325c356 *av1-1-b10-00-quantizer-51.ivf.md5
-5b3ea7a18654d943065f5c176974c3960b56664e *av1-1-b10-00-quantizer-52.ivf
-dc61a6e4e2549074130023b14b137fb4fe442ce3 *av1-1-b10-00-quantizer-52.ivf.md5
-74c3b5851b6a94d33b575a689eb8d34592e95d5f *av1-1-b10-00-quantizer-53.ivf
-a80e43a0fb2b852426bd941b8d4b8f56690e9bc9 *av1-1-b10-00-quantizer-53.ivf.md5
-d05b8dea2cddd4f0d9e792f42f71afbd29f7811c *av1-1-b10-00-quantizer-54.ivf
-432937893321f4bd25fa400b8988c5788cb06ecf *av1-1-b10-00-quantizer-54.ivf.md5
-4eaee0f1970426be0bbeb7d4fccdc7e804e9bea4 *av1-1-b10-00-quantizer-55.ivf
-710ab95ce1dcd2540db4477ff4ee6ab771fe0759 *av1-1-b10-00-quantizer-55.ivf.md5
-fe637930c9faa8744cba37effc4cb5510315d1c0 *av1-1-b10-00-quantizer-56.ivf
-2f9431b30523fb6a3e4122f22c6c3ff7b96a7987 *av1-1-b10-00-quantizer-56.ivf.md5
-ed54fc7fcec194eef1f50adbbe12a6a36ab6836b *av1-1-b10-00-quantizer-57.ivf
-43bccac7800b399210cf15520a83739c23a5d9c7 *av1-1-b10-00-quantizer-57.ivf.md5
-a7b8d628ba3e4c5f37aa6a3d7b82afda73ac89dc *av1-1-b10-00-quantizer-58.ivf
-b26638272b787df54f45a46629b852acbcb73e3d *av1-1-b10-00-quantizer-58.ivf.md5
-c077f22ff547fb5ffd020e8dac91d05942fb52df *av1-1-b10-00-quantizer-59.ivf
-4efd99cc0891bf345b8cd2ae8e21709d61be497b *av1-1-b10-00-quantizer-59.ivf.md5
-301ab53039d75e1ffa8cc6a0874d9ea94e4a6a0d *av1-1-b10-00-quantizer-60.ivf
-4729bd734a6edd2d8d0432a3f66b3d91d565050e *av1-1-b10-00-quantizer-60.ivf.md5
-c78640d3211034df9fcb273bdfc18625819652f2 *av1-1-b10-00-quantizer-61.ivf
-3d823eb2b33ccfea68db506626bcbecf49b0f167 *av1-1-b10-00-quantizer-61.ivf.md5
-bf241a449a28773b93e6e529a06dfc28109577e4 *av1-1-b10-00-quantizer-62.ivf
-75457d8476f1927f737d089dcf3d0f7f99f3c4fb *av1-1-b10-00-quantizer-62.ivf.md5
-8b6eb3fff2e0db7eac775b08c745250ca591e2d9 *av1-1-b10-00-quantizer-63.ivf
-63ea689d025593e5d91760785b8e446d04d4671e *av1-1-b10-00-quantizer-63.ivf.md5
-a9f7ea6312a533cc6426a6145edd190d45813c37 *av1-1-b8-02-allintra.ivf
-8fd8f789cfee1069d20f3e2c241f5cad7292239e *av1-1-b8-02-allintra.ivf.md5
-e69e41fee40b408b6eebcc79f266a95f2ee24f9e *av1-1-b8-03-sizedown.mkv
-8c528fb3ccda959a29721566e132f730935ca32b *av1-1-b8-03-sizedown.mkv.md5
-1889da5ee1708007e47bb887470ac477e1d7ba01 *av1-1-b8-03-sizeup.mkv
-8de81b170635d456602dc8923a8b39c534d01fa8 *av1-1-b8-03-sizeup.mkv.md5
-d3ed7de0aa8c155fe35e0f5f4203240710d31383 *park_joy_90p_8_420_monochrome.y4m
-5b3f0907407b809aa66b62cb080feda8c92454ca *park_joy_90p_8_420_vertical_csp.y4m
diff --git a/third_party/aom/test/test.cmake b/third_party/aom/test/test.cmake
deleted file mode 100644
index b16ae14c3..000000000
--- a/third_party/aom/test/test.cmake
+++ /dev/null
@@ -1,438 +0,0 @@
-#
-# Copyright (c) 2017, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and the
-# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
-# not distributed with this source code in the LICENSE file, you can obtain it
-# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
-# License 1.0 was not distributed with this source code in the PATENTS file, you
-# can obtain it at www.aomedia.org/license/patent.
-#
-if(AOM_TEST_TEST_CMAKE_)
- return()
-endif() # AOM_TEST_TEST_CMAKE_
-set(AOM_TEST_TEST_CMAKE_ 1)
-
-include(FindPythonInterp)
-include(ProcessorCount)
-
-include("${AOM_ROOT}/test/test_data_util.cmake")
-
-set(AOM_UNIT_TEST_DATA_LIST_FILE "${AOM_ROOT}/test/test-data.sha1")
-
-list(APPEND AOM_UNIT_TEST_WRAPPER_SOURCES "${AOM_GEN_SRC_DIR}/usage_exit.c"
- "${AOM_ROOT}/test/test_libaom.cc")
-
-list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/acm_random.h"
- "${AOM_ROOT}/test/aom_integer_test.cc"
- "${AOM_ROOT}/test/av1_config_test.cc"
- "${AOM_ROOT}/test/blockd_test.cc"
- "${AOM_ROOT}/test/clear_system_state.h"
- "${AOM_ROOT}/test/codec_factory.h"
- "${AOM_ROOT}/test/decode_test_driver.cc"
- "${AOM_ROOT}/test/decode_test_driver.h"
- "${AOM_ROOT}/test/function_equivalence_test.h"
- "${AOM_ROOT}/test/log2_test.cc"
- "${AOM_ROOT}/test/md5_helper.h"
- "${AOM_ROOT}/test/register_state_check.h"
- "${AOM_ROOT}/test/test_vectors.cc"
- "${AOM_ROOT}/test/test_vectors.h"
- "${AOM_ROOT}/test/transform_test_base.h"
- "${AOM_ROOT}/test/util.h"
- "${AOM_ROOT}/test/video_source.h")
-
-if(CONFIG_INTERNAL_STATS)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/hbd_metrics_test.cc")
-endif()
-
-list(APPEND AOM_UNIT_TEST_DECODER_SOURCES "${AOM_ROOT}/test/decode_api_test.cc"
- "${AOM_ROOT}/test/external_frame_buffer_test.cc"
- "${AOM_ROOT}/test/invalid_file_test.cc"
- "${AOM_ROOT}/test/test_vector_test.cc"
- "${AOM_ROOT}/test/ivf_video_source.h")
-
-list(APPEND AOM_UNIT_TEST_ENCODER_SOURCES
- "${AOM_ROOT}/test/active_map_test.cc"
- "${AOM_ROOT}/test/altref_test.cc"
- "${AOM_ROOT}/test/aq_segment_test.cc"
- "${AOM_ROOT}/test/borders_test.cc"
- "${AOM_ROOT}/test/cpu_speed_test.cc"
- "${AOM_ROOT}/test/datarate_test.cc"
- "${AOM_ROOT}/test/encode_api_test.cc"
- "${AOM_ROOT}/test/encode_test_driver.cc"
- "${AOM_ROOT}/test/encode_test_driver.h"
- "${AOM_ROOT}/test/end_to_end_test.cc"
- "${AOM_ROOT}/test/error_resilience_test.cc"
- "${AOM_ROOT}/test/frame_size_tests.cc"
- "${AOM_ROOT}/test/horz_superres_test.cc"
- "${AOM_ROOT}/test/i420_video_source.h"
- "${AOM_ROOT}/test/lossless_test.cc"
- "${AOM_ROOT}/test/monochrome_test.cc"
- "${AOM_ROOT}/test/qm_test.cc"
- "${AOM_ROOT}/test/resize_test.cc"
- "${AOM_ROOT}/test/scalability_test.cc"
- "${AOM_ROOT}/test/y4m_test.cc"
- "${AOM_ROOT}/test/y4m_video_source.h"
- "${AOM_ROOT}/test/yuv_video_source.h")
-
-list(APPEND AOM_DECODE_PERF_TEST_SOURCES "${AOM_ROOT}/test/decode_perf_test.cc")
-list(APPEND AOM_ENCODE_PERF_TEST_SOURCES "${AOM_ROOT}/test/encode_perf_test.cc")
-list(APPEND AOM_UNIT_TEST_WEBM_SOURCES "${AOM_ROOT}/test/webm_video_source.h")
-list(APPEND AOM_TEST_INTRA_PRED_SPEED_SOURCES "${AOM_GEN_SRC_DIR}/usage_exit.c"
- "${AOM_ROOT}/test/test_intra_pred_speed.cc")
-
-if(NOT BUILD_SHARED_LIBS)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/cdef_test.cc"
- "${AOM_ROOT}/test/cfl_test.cc"
- "${AOM_ROOT}/test/convolve_test.cc"
- "${AOM_ROOT}/test/hiprec_convolve_test.cc"
- "${AOM_ROOT}/test/hiprec_convolve_test_util.cc"
- "${AOM_ROOT}/test/hiprec_convolve_test_util.h"
- "${AOM_ROOT}/test/intrabc_test.cc"
- "${AOM_ROOT}/test/intrapred_test.cc"
- "${AOM_ROOT}/test/lpf_test.cc"
- "${AOM_ROOT}/test/onyxc_int_test.cc"
- "${AOM_ROOT}/test/scan_test.cc"
- "${AOM_ROOT}/test/selfguided_filter_test.cc"
- "${AOM_ROOT}/test/simd_cmp_impl.h"
- "${AOM_ROOT}/test/simd_impl.h")
-
- if(CONFIG_ACCOUNTING)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/accounting_test.cc")
- endif()
-
- if(CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/av1_encoder_parms_get_to_decoder.cc"
- "${AOM_ROOT}/test/av1_ext_tile_test.cc"
- "${AOM_ROOT}/test/binary_codes_test.cc"
- "${AOM_ROOT}/test/boolcoder_test.cc"
- "${AOM_ROOT}/test/coding_path_sync.cc"
- "${AOM_ROOT}/test/decode_multithreaded_test.cc"
- "${AOM_ROOT}/test/divu_small_test.cc"
- "${AOM_ROOT}/test/dr_prediction_test.cc"
- "${AOM_ROOT}/test/ec_test.cc"
- "${AOM_ROOT}/test/ethread_test.cc"
- "${AOM_ROOT}/test/film_grain_table_test.cc"
- "${AOM_ROOT}/test/segment_binarization_sync.cc"
- "${AOM_ROOT}/test/superframe_test.cc"
- "${AOM_ROOT}/test/tile_independence_test.cc")
- endif()
-
- list(APPEND AOM_UNIT_TEST_COMMON_INTRIN_NEON
- "${AOM_ROOT}/test/simd_cmp_neon.cc")
- if(HAVE_NEON)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/simd_neon_test.cc")
- endif()
-
- list(APPEND AOM_UNIT_TEST_COMMON_INTRIN_SSE2
- "${AOM_ROOT}/test/simd_cmp_sse2.cc")
- if(HAVE_SSE2)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/simd_sse2_test.cc")
- endif()
-
- list(APPEND AOM_UNIT_TEST_COMMON_INTRIN_SSSE3
- "${AOM_ROOT}/test/simd_cmp_ssse3.cc")
- if(HAVE_SSSE3)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/simd_ssse3_test.cc")
- endif()
-
- if(HAVE_SSE4)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/simd_sse4_test.cc")
- endif()
-
- if(HAVE_SSE4_1)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/filterintra_test.cc")
- endif()
-
- list(APPEND AOM_UNIT_TEST_COMMON_INTRIN_AVX2
- "${AOM_ROOT}/test/simd_cmp_avx2.cc")
- if(HAVE_AVX2)
- list(APPEND AOM_UNIT_TEST_COMMON_SOURCES
- "${AOM_ROOT}/test/simd_avx2_test.cc")
- endif()
-
- list(APPEND AOM_UNIT_TEST_ENCODER_SOURCES
- "${AOM_ROOT}/test/arf_freq_test.cc"
- "${AOM_ROOT}/test/av1_convolve_2d_test.cc"
- "${AOM_ROOT}/test/av1_convolve_2d_test_util.cc"
- "${AOM_ROOT}/test/av1_convolve_2d_test_util.h"
- "${AOM_ROOT}/test/av1_fwd_txfm1d_test.cc"
- "${AOM_ROOT}/test/av1_fwd_txfm2d_test.cc"
- "${AOM_ROOT}/test/av1_inv_txfm1d_test.cc"
- "${AOM_ROOT}/test/av1_inv_txfm2d_test.cc"
- "${AOM_ROOT}/test/av1_round_shift_array_test.cc"
- "${AOM_ROOT}/test/av1_txfm_test.cc"
- "${AOM_ROOT}/test/av1_txfm_test.h"
- "${AOM_ROOT}/test/av1_wedge_utils_test.cc"
- "${AOM_ROOT}/test/blend_a64_mask_1d_test.cc"
- "${AOM_ROOT}/test/blend_a64_mask_test.cc"
- "${AOM_ROOT}/test/comp_avg_pred_test.cc"
- "${AOM_ROOT}/test/comp_avg_pred_test.h"
- "${AOM_ROOT}/test/comp_mask_variance_test.cc"
- "${AOM_ROOT}/test/encodetxb_test.cc"
- "${AOM_ROOT}/test/error_block_test.cc"
- "${AOM_ROOT}/test/fft_test.cc"
- "${AOM_ROOT}/test/fwht4x4_test.cc"
- "${AOM_ROOT}/test/masked_sad_test.cc"
- "${AOM_ROOT}/test/masked_variance_test.cc"
- "${AOM_ROOT}/test/motion_vector_test.cc"
- "${AOM_ROOT}/test/noise_model_test.cc"
- "${AOM_ROOT}/test/obmc_sad_test.cc"
- "${AOM_ROOT}/test/obmc_variance_test.cc"
- "${AOM_ROOT}/test/pickrst_test.cc"
- "${AOM_ROOT}/test/sad_test.cc"
- "${AOM_ROOT}/test/subtract_test.cc"
- "${AOM_ROOT}/test/reconinter_test.cc"
- "${AOM_ROOT}/test/sum_squares_test.cc"
- "${AOM_ROOT}/test/variance_test.cc"
- "${AOM_ROOT}/test/wiener_test.cc"
- "${AOM_ROOT}/test/warp_filter_test.cc"
- "${AOM_ROOT}/test/warp_filter_test_util.cc"
- "${AOM_ROOT}/test/warp_filter_test_util.h")
-
- list(APPEND AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1
- "${AOM_ROOT}/test/av1_highbd_iht_test.cc"
- "${AOM_ROOT}/test/av1_quantize_test.cc"
- "${AOM_ROOT}/test/corner_match_test.cc"
- "${AOM_ROOT}/test/quantize_func_test.cc"
- "${AOM_ROOT}/test/simd_cmp_sse4.cc")
-
- if(HAVE_SSE4_1)
- list(APPEND AOM_UNIT_TEST_ENCODER_SOURCES
- "${AOM_ROOT}/test/av1_convolve_scale_test.cc"
- "${AOM_ROOT}/test/av1_horz_only_frame_superres_test.cc"
- "${AOM_ROOT}/test/intra_edge_test.cc")
-
- endif()
-
- if(HAVE_SSE4_2)
- list(APPEND AOM_UNIT_TEST_ENCODER_SOURCES "${AOM_ROOT}/test/hash_test.cc")
- endif()
-
-endif()
-
-if(ENABLE_TESTS)
- find_package(PythonInterp)
- if(NOT PYTHONINTERP_FOUND)
- message(FATAL_ERROR
- "--- Unit tests require Python, rerun cmake with "
- "-DENABLE_TESTS=0 to avoid this error, or install Python and "
- "make sure it's in your PATH.")
- endif()
-
- if(MSVC) # Force static run time to avoid collisions with googletest.
- include("${AOM_ROOT}/build/cmake/msvc_runtime.cmake")
- if(BUILD_SHARED_LIBS)
- set(AOM_DISABLE_GTEST_CMAKE 1)
- endif()
- endif()
-
- if(BUILD_SHARED_LIBS AND APPLE) # Silence an RPATH warning.
- set(CMAKE_MACOSX_RPATH 1)
- endif()
-
- include_directories(
- "${AOM_ROOT}/third_party/googletest/src/googletest/include")
-
- if(AOM_DISABLE_GTEST_CMAKE)
- include_directories("${AOM_ROOT}/third_party/googletest/src/googletest")
- add_library(
- gtest
- STATIC
- "${AOM_ROOT}/third_party/googletest/src/googletest/src/gtest-all.cc")
- else()
- add_subdirectory("${AOM_ROOT}/third_party/googletest/src/googletest"
- EXCLUDE_FROM_ALL)
- endif()
-endif()
-
-# Setup testdata download targets, test build targets, and test run targets. The
-# libaom and app util targets must exist before this function is called.
-function(setup_aom_test_targets)
-
- # TODO(tomfinegan): Build speed optimization. $AOM_UNIT_TEST_COMMON_SOURCES
- # and $AOM_UNIT_TEST_ENCODER_SOURCES are very large. The build of test targets
- # could be sped up (on multicore build machines) by compiling sources in each
- # list into separate object library targets, and then linking them into
- # test_libaom.
- add_library(test_aom_common OBJECT ${AOM_UNIT_TEST_COMMON_SOURCES})
- add_dependencies(test_aom_common aom)
-
- if(CONFIG_AV1_DECODER)
- add_library(test_aom_decoder OBJECT ${AOM_UNIT_TEST_DECODER_SOURCES})
- add_dependencies(test_aom_decoder aom)
- endif()
-
- if(CONFIG_AV1_ENCODER)
- add_library(test_aom_encoder OBJECT ${AOM_UNIT_TEST_ENCODER_SOURCES})
- add_dependencies(test_aom_encoder aom)
- endif()
-
- add_executable(test_libaom ${AOM_UNIT_TEST_WRAPPER_SOURCES}
- $<TARGET_OBJECTS:aom_common_app_util>
- $<TARGET_OBJECTS:test_aom_common>)
- list(APPEND AOM_APP_TARGETS test_libaom)
-
- if(CONFIG_AV1_DECODER)
- target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:aom_decoder_app_util>
- $<TARGET_OBJECTS:test_aom_decoder>)
-
- if(ENABLE_DECODE_PERF_TESTS AND CONFIG_WEBM_IO)
- target_sources(test_libaom PRIVATE ${AOM_DECODE_PERF_TEST_SOURCES})
- endif()
- endif()
-
- if(CONFIG_AV1_ENCODER)
- target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:test_aom_encoder>
- $<TARGET_OBJECTS:aom_encoder_app_util>)
-
- if(ENABLE_ENCODE_PERF_TESTS)
- target_sources(test_libaom PRIVATE ${AOM_ENCODE_PERF_TEST_SOURCES})
- endif()
-
- if(NOT BUILD_SHARED_LIBS)
- add_executable(test_intra_pred_speed ${AOM_TEST_INTRA_PRED_SPEED_SOURCES}
- $<TARGET_OBJECTS:aom_common_app_util>)
- target_link_libraries(test_intra_pred_speed ${AOM_LIB_LINK_TYPE} aom
- gtest)
- list(APPEND AOM_APP_TARGETS test_intra_pred_speed)
- endif()
- endif()
-
- target_link_libraries(test_libaom ${AOM_LIB_LINK_TYPE} aom gtest)
-
- if(CONFIG_LIBYUV)
- target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:yuv>)
- endif()
- if(CONFIG_WEBM_IO)
- target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:webm>)
- endif()
- if(HAVE_SSE2)
- add_intrinsics_source_to_target("-msse2" "test_libaom"
- "AOM_UNIT_TEST_COMMON_INTRIN_SSE2")
- endif()
- if(HAVE_SSSE3)
- add_intrinsics_source_to_target("-mssse3" "test_libaom"
- "AOM_UNIT_TEST_COMMON_INTRIN_SSSE3")
- endif()
- if(HAVE_SSE4_1)
- add_intrinsics_source_to_target("-msse4.1" "test_libaom"
- "AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1")
- if(CONFIG_AV1_ENCODER)
- if(AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1)
- add_intrinsics_source_to_target("-msse4.1" "test_libaom"
- "AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1")
- endif()
- endif()
- endif()
- if(HAVE_AVX2)
- add_intrinsics_source_to_target("-mavx2" "test_libaom"
- "AOM_UNIT_TEST_COMMON_INTRIN_AVX2")
- endif()
- if(HAVE_NEON)
- add_intrinsics_source_to_target("${AOM_NEON_INTRIN_FLAG}" "test_libaom"
- "AOM_UNIT_TEST_COMMON_INTRIN_NEON")
- endif()
-
- if(ENABLE_TESTDATA)
- make_test_data_lists("${AOM_UNIT_TEST_DATA_LIST_FILE}" test_files
- test_file_checksums)
- list(LENGTH test_files num_test_files)
- list(LENGTH test_file_checksums num_test_file_checksums)
-
- math(EXPR max_file_index "${num_test_files} - 1")
- foreach(test_index RANGE ${max_file_index})
- list(GET test_files ${test_index} test_file)
- list(GET test_file_checksums ${test_index} test_file_checksum)
- add_custom_target(testdata_${test_index}
- COMMAND
- ${CMAKE_COMMAND} -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
- -DAOM_ROOT="${AOM_ROOT}"
- -DAOM_TEST_FILE="${test_file}"
- -DAOM_TEST_CHECKSUM=${test_file_checksum} -P
- "${AOM_ROOT}/test/test_data_download_worker.cmake")
- list(APPEND testdata_targets testdata_${test_index})
- endforeach()
-
- # Create a custom build target for running each test data download target.
- add_custom_target(testdata)
- add_dependencies(testdata ${testdata_targets})
-
- # Skip creation of test run targets when generating for Visual Studio and
- # Xcode unless the user explicitly requests IDE test hosting. This is done
- # to make build cycles in the IDE tolerable when the IDE command for build
- # project is used to build AOM. Default behavior in IDEs is to build all
- # targets, and the test run takes hours.
- if(((NOT MSVC) AND (NOT XCODE)) OR ENABLE_IDE_TEST_HOSTING)
-
- # Pick a reasonable number of targets (this controls parallelization).
- processorcount(num_test_targets)
- if(num_test_targets EQUAL 0) # Just default to 10 targets when there's no
- # processor count available.
- set(num_test_targets 10)
- endif()
-
- math(EXPR max_shard_index "${num_test_targets} - 1")
- foreach(shard_index RANGE ${max_shard_index})
- set(test_name "test_${shard_index}")
- add_custom_target(${test_name}
- COMMAND ${CMAKE_COMMAND}
- -DGTEST_SHARD_INDEX=${shard_index}
- -DGTEST_TOTAL_SHARDS=${num_test_targets}
- -DTEST_LIBAOM=$<TARGET_FILE:test_libaom> -P
- "${AOM_ROOT}/test/test_runner.cmake"
- DEPENDS testdata test_libaom)
- list(APPEND test_targets ${test_name})
- endforeach()
- add_custom_target(runtests)
- add_dependencies(runtests ${test_targets})
- endif()
- endif()
-
- # Collect all variables containing libaom test source files.
- get_cmake_property(all_cmake_vars VARIABLES)
- foreach(var ${all_cmake_vars})
-
- # https://github.com/cheshirekow/cmake_format/issues/34
-# cmake-format: off
- if (("${var}" MATCHES "_TEST_" AND NOT
- "${var}" MATCHES
- "_DATA_\|_CMAKE_\|INTRA_PRED\|_COMPILED\|_HOSTING\|_PERF_\|CODER_")
- OR (CONFIG_AV1_ENCODER AND ENABLE_ENCODE_PERF_TESTS AND
- "${var}" MATCHES "_ENCODE_PERF_TEST_")
- OR (CONFIG_AV1_DECODER AND ENABLE_DECODE_PERF_TESTS AND
- "${var}" MATCHES "_DECODE_PERF_TEST_")
- OR (CONFIG_AV1_ENCODER AND "${var}" MATCHES "_TEST_ENCODER_")
- OR (CONFIG_AV1_DECODER AND "${var}" MATCHES "_TEST_DECODER_"))
- list(APPEND aom_test_source_vars ${var})
- endif()
- # cmake-format: on
- endforeach()
-
- # Libaom_test_srcs.txt generation.
- set(libaom_test_srcs_txt_file "${AOM_CONFIG_DIR}/libaom_test_srcs.txt")
- file(WRITE "${libaom_test_srcs_txt_file}"
- "# This file is generated. DO NOT EDIT.\n")
-
- # Static source file list first.
- foreach(aom_test_source_var ${aom_test_source_vars})
- foreach(file ${${aom_test_source_var}})
- if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
- string(REPLACE "${AOM_ROOT}/" "" file "${file}")
- file(APPEND "${libaom_test_srcs_txt_file}" "${file}\n")
- endif()
- endforeach()
- endforeach()
-
- set(AOM_APP_TARGETS ${AOM_APP_TARGETS} PARENT_SCOPE)
-endfunction()
diff --git a/third_party/aom/test/test_data_download_worker.cmake b/third_party/aom/test/test_data_download_worker.cmake
deleted file mode 100644
index dc803497d..000000000
--- a/third_party/aom/test/test_data_download_worker.cmake
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright (c) 2017, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and the
-# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
-# not distributed with this source code in the LICENSE file, you can obtain it
-# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
-# License 1.0 was not distributed with this source code in the PATENTS file, you
-# can obtain it at www.aomedia.org/license/patent.
-#
-include("${AOM_ROOT}/test/test_data_util.cmake")
-
-# https://github.com/cheshirekow/cmake_format/issues/34
-# cmake-format: off
-if (NOT AOM_ROOT OR NOT AOM_CONFIG_DIR OR NOT AOM_TEST_FILE
- OR NOT AOM_TEST_CHECKSUM)
- message(FATAL_ERROR
- "AOM_ROOT, AOM_CONFIG_DIR, AOM_TEST_FILE and AOM_TEST_CHECKSUM must be
- defined.")
-endif ()
-# cmake-format: on
-
-set(AOM_TEST_DATA_URL "http://storage.googleapis.com/aom-test-data")
-
-if(NOT AOM_TEST_DATA_PATH)
- set(AOM_TEST_DATA_PATH "$ENV{LIBAOM_TEST_DATA_PATH}")
-endif()
-
-if("${AOM_TEST_DATA_PATH}" STREQUAL "")
- message(WARNING
- "Writing test data to ${AOM_CONFIG_DIR}, set "
- "$LIBAOM_TEST_DATA_PATH in your environment to avoid this warning.")
- set(AOM_TEST_DATA_PATH "${AOM_CONFIG_DIR}")
-endif()
-
-if(NOT EXISTS "${AOM_TEST_DATA_PATH}")
- file(MAKE_DIRECTORY "${AOM_TEST_DATA_PATH}")
-endif()
-
-expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_PATH}" "filepath")
-expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_URL}" "url")
-
-check_file("${filepath}" "${AOM_TEST_CHECKSUM}" "needs_download")
-if(needs_download)
- download_test_file("${url}" "${AOM_TEST_CHECKSUM}" "${filepath}")
-endif()
diff --git a/third_party/aom/test/test_data_util.cmake b/third_party/aom/test/test_data_util.cmake
deleted file mode 100644
index 45c951478..000000000
--- a/third_party/aom/test/test_data_util.cmake
+++ /dev/null
@@ -1,598 +0,0 @@
-#
-# Copyright (c) 2017, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and the
-# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
-# not distributed with this source code in the LICENSE file, you can obtain it
-# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
-# License 1.0 was not distributed with this source code in the PATENTS file, you
-# can obtain it at www.aomedia.org/license/patent.
-#
-
-list(APPEND AOM_TEST_DATA_FILE_NAMES
- "hantro_collage_w352h288.yuv"
- "hantro_odd.yuv"
- "invalid-bug-1814.ivf"
- "invalid-bug-1814.ivf.res"
- "invalid-oss-fuzz-10061.ivf"
- "invalid-oss-fuzz-10061.ivf.res"
- "invalid-oss-fuzz-10117-mc-buf-use-highbd.ivf"
- "invalid-oss-fuzz-10117-mc-buf-use-highbd.ivf.res"
- "invalid-oss-fuzz-10227.ivf"
- "invalid-oss-fuzz-10227.ivf.res"
- "invalid-oss-fuzz-9463.ivf"
- "invalid-oss-fuzz-9463.ivf.res"
- "invalid-oss-fuzz-9482.ivf"
- "invalid-oss-fuzz-9482.ivf.res"
- "invalid-oss-fuzz-9720.ivf"
- "invalid-oss-fuzz-9720.ivf.res"
- "park_joy_90p_10_420.y4m"
- "park_joy_90p_10_422.y4m"
- "park_joy_90p_10_444.y4m"
- "park_joy_90p_12_420.y4m"
- "park_joy_90p_12_422.y4m"
- "park_joy_90p_12_444.y4m"
- "park_joy_90p_8_420_a10-1.y4m"
- "park_joy_90p_8_420.y4m"
- "park_joy_90p_8_420_monochrome.y4m"
- "park_joy_90p_8_420_vertical_csp.y4m"
- "park_joy_90p_8_422.y4m"
- "park_joy_90p_8_444.y4m"
- "desktop_credits.y4m"
- "niklas_1280_720_30.y4m"
- "rush_hour_444.y4m"
- "screendata.y4m"
- "niklas_640_480_30.yuv"
- "vase10x10.yuv")
-
-if(ENABLE_DECODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
- list(APPEND AOM_TEST_DATA_FILE_NAMES "niklas_1280_720_30.yuv")
-endif()
-
-if(CONFIG_AV1_DECODER)
- list(APPEND AOM_TEST_DATA_FILE_NAMES
- "av1-1-b8-00-quantizer-00.ivf"
- "av1-1-b8-00-quantizer-00.ivf.md5"
- "av1-1-b8-00-quantizer-01.ivf"
- "av1-1-b8-00-quantizer-01.ivf.md5"
- "av1-1-b8-00-quantizer-02.ivf"
- "av1-1-b8-00-quantizer-02.ivf.md5"
- "av1-1-b8-00-quantizer-03.ivf"
- "av1-1-b8-00-quantizer-03.ivf.md5"
- "av1-1-b8-00-quantizer-04.ivf"
- "av1-1-b8-00-quantizer-04.ivf.md5"
- "av1-1-b8-00-quantizer-05.ivf"
- "av1-1-b8-00-quantizer-05.ivf.md5"
- "av1-1-b8-00-quantizer-06.ivf"
- "av1-1-b8-00-quantizer-06.ivf.md5"
- "av1-1-b8-00-quantizer-07.ivf"
- "av1-1-b8-00-quantizer-07.ivf.md5"
- "av1-1-b8-00-quantizer-08.ivf"
- "av1-1-b8-00-quantizer-08.ivf.md5"
- "av1-1-b8-00-quantizer-09.ivf"
- "av1-1-b8-00-quantizer-09.ivf.md5"
- "av1-1-b8-00-quantizer-10.ivf"
- "av1-1-b8-00-quantizer-10.ivf.md5"
- "av1-1-b8-00-quantizer-11.ivf"
- "av1-1-b8-00-quantizer-11.ivf.md5"
- "av1-1-b8-00-quantizer-12.ivf"
- "av1-1-b8-00-quantizer-12.ivf.md5"
- "av1-1-b8-00-quantizer-13.ivf"
- "av1-1-b8-00-quantizer-13.ivf.md5"
- "av1-1-b8-00-quantizer-14.ivf"
- "av1-1-b8-00-quantizer-14.ivf.md5"
- "av1-1-b8-00-quantizer-15.ivf"
- "av1-1-b8-00-quantizer-15.ivf.md5"
- "av1-1-b8-00-quantizer-16.ivf"
- "av1-1-b8-00-quantizer-16.ivf.md5"
- "av1-1-b8-00-quantizer-17.ivf"
- "av1-1-b8-00-quantizer-17.ivf.md5"
- "av1-1-b8-00-quantizer-18.ivf"
- "av1-1-b8-00-quantizer-18.ivf.md5"
- "av1-1-b8-00-quantizer-19.ivf"
- "av1-1-b8-00-quantizer-19.ivf.md5"
- "av1-1-b8-00-quantizer-20.ivf"
- "av1-1-b8-00-quantizer-20.ivf.md5"
- "av1-1-b8-00-quantizer-21.ivf"
- "av1-1-b8-00-quantizer-21.ivf.md5"
- "av1-1-b8-00-quantizer-22.ivf"
- "av1-1-b8-00-quantizer-22.ivf.md5"
- "av1-1-b8-00-quantizer-23.ivf"
- "av1-1-b8-00-quantizer-23.ivf.md5"
- "av1-1-b8-00-quantizer-24.ivf"
- "av1-1-b8-00-quantizer-24.ivf.md5"
- "av1-1-b8-00-quantizer-25.ivf"
- "av1-1-b8-00-quantizer-25.ivf.md5"
- "av1-1-b8-00-quantizer-26.ivf"
- "av1-1-b8-00-quantizer-26.ivf.md5"
- "av1-1-b8-00-quantizer-27.ivf"
- "av1-1-b8-00-quantizer-27.ivf.md5"
- "av1-1-b8-00-quantizer-28.ivf"
- "av1-1-b8-00-quantizer-28.ivf.md5"
- "av1-1-b8-00-quantizer-29.ivf"
- "av1-1-b8-00-quantizer-29.ivf.md5"
- "av1-1-b8-00-quantizer-30.ivf"
- "av1-1-b8-00-quantizer-30.ivf.md5"
- "av1-1-b8-00-quantizer-31.ivf"
- "av1-1-b8-00-quantizer-31.ivf.md5"
- "av1-1-b8-00-quantizer-32.ivf"
- "av1-1-b8-00-quantizer-32.ivf.md5"
- "av1-1-b8-00-quantizer-33.ivf"
- "av1-1-b8-00-quantizer-33.ivf.md5"
- "av1-1-b8-00-quantizer-34.ivf"
- "av1-1-b8-00-quantizer-34.ivf.md5"
- "av1-1-b8-00-quantizer-35.ivf"
- "av1-1-b8-00-quantizer-35.ivf.md5"
- "av1-1-b8-00-quantizer-36.ivf"
- "av1-1-b8-00-quantizer-36.ivf.md5"
- "av1-1-b8-00-quantizer-37.ivf"
- "av1-1-b8-00-quantizer-37.ivf.md5"
- "av1-1-b8-00-quantizer-38.ivf"
- "av1-1-b8-00-quantizer-38.ivf.md5"
- "av1-1-b8-00-quantizer-39.ivf"
- "av1-1-b8-00-quantizer-39.ivf.md5"
- "av1-1-b8-00-quantizer-40.ivf"
- "av1-1-b8-00-quantizer-40.ivf.md5"
- "av1-1-b8-00-quantizer-41.ivf"
- "av1-1-b8-00-quantizer-41.ivf.md5"
- "av1-1-b8-00-quantizer-42.ivf"
- "av1-1-b8-00-quantizer-42.ivf.md5"
- "av1-1-b8-00-quantizer-43.ivf"
- "av1-1-b8-00-quantizer-43.ivf.md5"
- "av1-1-b8-00-quantizer-44.ivf"
- "av1-1-b8-00-quantizer-44.ivf.md5"
- "av1-1-b8-00-quantizer-45.ivf"
- "av1-1-b8-00-quantizer-45.ivf.md5"
- "av1-1-b8-00-quantizer-46.ivf"
- "av1-1-b8-00-quantizer-46.ivf.md5"
- "av1-1-b8-00-quantizer-47.ivf"
- "av1-1-b8-00-quantizer-47.ivf.md5"
- "av1-1-b8-00-quantizer-48.ivf"
- "av1-1-b8-00-quantizer-48.ivf.md5"
- "av1-1-b8-00-quantizer-49.ivf"
- "av1-1-b8-00-quantizer-49.ivf.md5"
- "av1-1-b8-00-quantizer-50.ivf"
- "av1-1-b8-00-quantizer-50.ivf.md5"
- "av1-1-b8-00-quantizer-51.ivf"
- "av1-1-b8-00-quantizer-51.ivf.md5"
- "av1-1-b8-00-quantizer-52.ivf"
- "av1-1-b8-00-quantizer-52.ivf.md5"
- "av1-1-b8-00-quantizer-53.ivf"
- "av1-1-b8-00-quantizer-53.ivf.md5"
- "av1-1-b8-00-quantizer-54.ivf"
- "av1-1-b8-00-quantizer-54.ivf.md5"
- "av1-1-b8-00-quantizer-55.ivf"
- "av1-1-b8-00-quantizer-55.ivf.md5"
- "av1-1-b8-00-quantizer-56.ivf"
- "av1-1-b8-00-quantizer-56.ivf.md5"
- "av1-1-b8-00-quantizer-57.ivf"
- "av1-1-b8-00-quantizer-57.ivf.md5"
- "av1-1-b8-00-quantizer-58.ivf"
- "av1-1-b8-00-quantizer-58.ivf.md5"
- "av1-1-b8-00-quantizer-59.ivf"
- "av1-1-b8-00-quantizer-59.ivf.md5"
- "av1-1-b8-00-quantizer-60.ivf"
- "av1-1-b8-00-quantizer-60.ivf.md5"
- "av1-1-b8-00-quantizer-61.ivf"
- "av1-1-b8-00-quantizer-61.ivf.md5"
- "av1-1-b8-00-quantizer-62.ivf"
- "av1-1-b8-00-quantizer-62.ivf.md5"
- "av1-1-b8-00-quantizer-63.ivf"
- "av1-1-b8-00-quantizer-63.ivf.md5"
- "av1-1-b10-00-quantizer-00.ivf"
- "av1-1-b10-00-quantizer-00.ivf.md5"
- "av1-1-b10-00-quantizer-01.ivf"
- "av1-1-b10-00-quantizer-01.ivf.md5"
- "av1-1-b10-00-quantizer-02.ivf"
- "av1-1-b10-00-quantizer-02.ivf.md5"
- "av1-1-b10-00-quantizer-03.ivf"
- "av1-1-b10-00-quantizer-03.ivf.md5"
- "av1-1-b10-00-quantizer-04.ivf"
- "av1-1-b10-00-quantizer-04.ivf.md5"
- "av1-1-b10-00-quantizer-05.ivf"
- "av1-1-b10-00-quantizer-05.ivf.md5"
- "av1-1-b10-00-quantizer-06.ivf"
- "av1-1-b10-00-quantizer-06.ivf.md5"
- "av1-1-b10-00-quantizer-07.ivf"
- "av1-1-b10-00-quantizer-07.ivf.md5"
- "av1-1-b10-00-quantizer-08.ivf"
- "av1-1-b10-00-quantizer-08.ivf.md5"
- "av1-1-b10-00-quantizer-09.ivf"
- "av1-1-b10-00-quantizer-09.ivf.md5"
- "av1-1-b10-00-quantizer-10.ivf"
- "av1-1-b10-00-quantizer-10.ivf.md5"
- "av1-1-b10-00-quantizer-11.ivf"
- "av1-1-b10-00-quantizer-11.ivf.md5"
- "av1-1-b10-00-quantizer-12.ivf"
- "av1-1-b10-00-quantizer-12.ivf.md5"
- "av1-1-b10-00-quantizer-13.ivf"
- "av1-1-b10-00-quantizer-13.ivf.md5"
- "av1-1-b10-00-quantizer-14.ivf"
- "av1-1-b10-00-quantizer-14.ivf.md5"
- "av1-1-b10-00-quantizer-15.ivf"
- "av1-1-b10-00-quantizer-15.ivf.md5"
- "av1-1-b10-00-quantizer-16.ivf"
- "av1-1-b10-00-quantizer-16.ivf.md5"
- "av1-1-b10-00-quantizer-17.ivf"
- "av1-1-b10-00-quantizer-17.ivf.md5"
- "av1-1-b10-00-quantizer-18.ivf"
- "av1-1-b10-00-quantizer-18.ivf.md5"
- "av1-1-b10-00-quantizer-19.ivf"
- "av1-1-b10-00-quantizer-19.ivf.md5"
- "av1-1-b10-00-quantizer-20.ivf"
- "av1-1-b10-00-quantizer-20.ivf.md5"
- "av1-1-b10-00-quantizer-21.ivf"
- "av1-1-b10-00-quantizer-21.ivf.md5"
- "av1-1-b10-00-quantizer-22.ivf"
- "av1-1-b10-00-quantizer-22.ivf.md5"
- "av1-1-b10-00-quantizer-23.ivf"
- "av1-1-b10-00-quantizer-23.ivf.md5"
- "av1-1-b10-00-quantizer-24.ivf"
- "av1-1-b10-00-quantizer-24.ivf.md5"
- "av1-1-b10-00-quantizer-25.ivf"
- "av1-1-b10-00-quantizer-25.ivf.md5"
- "av1-1-b10-00-quantizer-26.ivf"
- "av1-1-b10-00-quantizer-26.ivf.md5"
- "av1-1-b10-00-quantizer-27.ivf"
- "av1-1-b10-00-quantizer-27.ivf.md5"
- "av1-1-b10-00-quantizer-28.ivf"
- "av1-1-b10-00-quantizer-28.ivf.md5"
- "av1-1-b10-00-quantizer-29.ivf"
- "av1-1-b10-00-quantizer-29.ivf.md5"
- "av1-1-b10-00-quantizer-30.ivf"
- "av1-1-b10-00-quantizer-30.ivf.md5"
- "av1-1-b10-00-quantizer-31.ivf"
- "av1-1-b10-00-quantizer-31.ivf.md5"
- "av1-1-b10-00-quantizer-32.ivf"
- "av1-1-b10-00-quantizer-32.ivf.md5"
- "av1-1-b10-00-quantizer-33.ivf"
- "av1-1-b10-00-quantizer-33.ivf.md5"
- "av1-1-b10-00-quantizer-34.ivf"
- "av1-1-b10-00-quantizer-34.ivf.md5"
- "av1-1-b10-00-quantizer-35.ivf"
- "av1-1-b10-00-quantizer-35.ivf.md5"
- "av1-1-b10-00-quantizer-36.ivf"
- "av1-1-b10-00-quantizer-36.ivf.md5"
- "av1-1-b10-00-quantizer-37.ivf"
- "av1-1-b10-00-quantizer-37.ivf.md5"
- "av1-1-b10-00-quantizer-38.ivf"
- "av1-1-b10-00-quantizer-38.ivf.md5"
- "av1-1-b10-00-quantizer-39.ivf"
- "av1-1-b10-00-quantizer-39.ivf.md5"
- "av1-1-b10-00-quantizer-40.ivf"
- "av1-1-b10-00-quantizer-40.ivf.md5"
- "av1-1-b10-00-quantizer-41.ivf"
- "av1-1-b10-00-quantizer-41.ivf.md5"
- "av1-1-b10-00-quantizer-42.ivf"
- "av1-1-b10-00-quantizer-42.ivf.md5"
- "av1-1-b10-00-quantizer-43.ivf"
- "av1-1-b10-00-quantizer-43.ivf.md5"
- "av1-1-b10-00-quantizer-44.ivf"
- "av1-1-b10-00-quantizer-44.ivf.md5"
- "av1-1-b10-00-quantizer-45.ivf"
- "av1-1-b10-00-quantizer-45.ivf.md5"
- "av1-1-b10-00-quantizer-46.ivf"
- "av1-1-b10-00-quantizer-46.ivf.md5"
- "av1-1-b10-00-quantizer-47.ivf"
- "av1-1-b10-00-quantizer-47.ivf.md5"
- "av1-1-b10-00-quantizer-48.ivf"
- "av1-1-b10-00-quantizer-48.ivf.md5"
- "av1-1-b10-00-quantizer-49.ivf"
- "av1-1-b10-00-quantizer-49.ivf.md5"
- "av1-1-b10-00-quantizer-50.ivf"
- "av1-1-b10-00-quantizer-50.ivf.md5"
- "av1-1-b10-00-quantizer-51.ivf"
- "av1-1-b10-00-quantizer-51.ivf.md5"
- "av1-1-b10-00-quantizer-52.ivf"
- "av1-1-b10-00-quantizer-52.ivf.md5"
- "av1-1-b10-00-quantizer-53.ivf"
- "av1-1-b10-00-quantizer-53.ivf.md5"
- "av1-1-b10-00-quantizer-54.ivf"
- "av1-1-b10-00-quantizer-54.ivf.md5"
- "av1-1-b10-00-quantizer-55.ivf"
- "av1-1-b10-00-quantizer-55.ivf.md5"
- "av1-1-b10-00-quantizer-56.ivf"
- "av1-1-b10-00-quantizer-56.ivf.md5"
- "av1-1-b10-00-quantizer-57.ivf"
- "av1-1-b10-00-quantizer-57.ivf.md5"
- "av1-1-b10-00-quantizer-58.ivf"
- "av1-1-b10-00-quantizer-58.ivf.md5"
- "av1-1-b10-00-quantizer-59.ivf"
- "av1-1-b10-00-quantizer-59.ivf.md5"
- "av1-1-b10-00-quantizer-60.ivf"
- "av1-1-b10-00-quantizer-60.ivf.md5"
- "av1-1-b10-00-quantizer-61.ivf"
- "av1-1-b10-00-quantizer-61.ivf.md5"
- "av1-1-b10-00-quantizer-62.ivf"
- "av1-1-b10-00-quantizer-62.ivf.md5"
- "av1-1-b10-00-quantizer-63.ivf"
- "av1-1-b10-00-quantizer-63.ivf.md5"
- "av1-1-b8-01-size-16x16.ivf"
- "av1-1-b8-01-size-16x16.ivf.md5"
- "av1-1-b8-01-size-16x18.ivf"
- "av1-1-b8-01-size-16x18.ivf.md5"
- "av1-1-b8-01-size-16x32.ivf"
- "av1-1-b8-01-size-16x32.ivf.md5"
- "av1-1-b8-01-size-16x34.ivf"
- "av1-1-b8-01-size-16x34.ivf.md5"
- "av1-1-b8-01-size-16x64.ivf"
- "av1-1-b8-01-size-16x64.ivf.md5"
- "av1-1-b8-01-size-16x66.ivf"
- "av1-1-b8-01-size-16x66.ivf.md5"
- "av1-1-b8-01-size-18x16.ivf"
- "av1-1-b8-01-size-18x16.ivf.md5"
- "av1-1-b8-01-size-18x18.ivf"
- "av1-1-b8-01-size-18x18.ivf.md5"
- "av1-1-b8-01-size-18x32.ivf"
- "av1-1-b8-01-size-18x32.ivf.md5"
- "av1-1-b8-01-size-18x34.ivf"
- "av1-1-b8-01-size-18x34.ivf.md5"
- "av1-1-b8-01-size-18x64.ivf"
- "av1-1-b8-01-size-18x64.ivf.md5"
- "av1-1-b8-01-size-18x66.ivf"
- "av1-1-b8-01-size-18x66.ivf.md5"
- "av1-1-b8-01-size-196x196.ivf"
- "av1-1-b8-01-size-196x196.ivf.md5"
- "av1-1-b8-01-size-196x198.ivf"
- "av1-1-b8-01-size-196x198.ivf.md5"
- "av1-1-b8-01-size-196x200.ivf"
- "av1-1-b8-01-size-196x200.ivf.md5"
- "av1-1-b8-01-size-196x202.ivf"
- "av1-1-b8-01-size-196x202.ivf.md5"
- "av1-1-b8-01-size-196x208.ivf"
- "av1-1-b8-01-size-196x208.ivf.md5"
- "av1-1-b8-01-size-196x210.ivf"
- "av1-1-b8-01-size-196x210.ivf.md5"
- "av1-1-b8-01-size-196x224.ivf"
- "av1-1-b8-01-size-196x224.ivf.md5"
- "av1-1-b8-01-size-196x226.ivf"
- "av1-1-b8-01-size-196x226.ivf.md5"
- "av1-1-b8-01-size-198x196.ivf"
- "av1-1-b8-01-size-198x196.ivf.md5"
- "av1-1-b8-01-size-198x198.ivf"
- "av1-1-b8-01-size-198x198.ivf.md5"
- "av1-1-b8-01-size-198x200.ivf"
- "av1-1-b8-01-size-198x200.ivf.md5"
- "av1-1-b8-01-size-198x202.ivf"
- "av1-1-b8-01-size-198x202.ivf.md5"
- "av1-1-b8-01-size-198x208.ivf"
- "av1-1-b8-01-size-198x208.ivf.md5"
- "av1-1-b8-01-size-198x210.ivf"
- "av1-1-b8-01-size-198x210.ivf.md5"
- "av1-1-b8-01-size-198x224.ivf"
- "av1-1-b8-01-size-198x224.ivf.md5"
- "av1-1-b8-01-size-198x226.ivf"
- "av1-1-b8-01-size-198x226.ivf.md5"
- "av1-1-b8-01-size-200x196.ivf"
- "av1-1-b8-01-size-200x196.ivf.md5"
- "av1-1-b8-01-size-200x198.ivf"
- "av1-1-b8-01-size-200x198.ivf.md5"
- "av1-1-b8-01-size-200x200.ivf"
- "av1-1-b8-01-size-200x200.ivf.md5"
- "av1-1-b8-01-size-200x202.ivf"
- "av1-1-b8-01-size-200x202.ivf.md5"
- "av1-1-b8-01-size-200x208.ivf"
- "av1-1-b8-01-size-200x208.ivf.md5"
- "av1-1-b8-01-size-200x210.ivf"
- "av1-1-b8-01-size-200x210.ivf.md5"
- "av1-1-b8-01-size-200x224.ivf"
- "av1-1-b8-01-size-200x224.ivf.md5"
- "av1-1-b8-01-size-200x226.ivf"
- "av1-1-b8-01-size-200x226.ivf.md5"
- "av1-1-b8-01-size-202x196.ivf"
- "av1-1-b8-01-size-202x196.ivf.md5"
- "av1-1-b8-01-size-202x198.ivf"
- "av1-1-b8-01-size-202x198.ivf.md5"
- "av1-1-b8-01-size-202x200.ivf"
- "av1-1-b8-01-size-202x200.ivf.md5"
- "av1-1-b8-01-size-202x202.ivf"
- "av1-1-b8-01-size-202x202.ivf.md5"
- "av1-1-b8-01-size-202x208.ivf"
- "av1-1-b8-01-size-202x208.ivf.md5"
- "av1-1-b8-01-size-202x210.ivf"
- "av1-1-b8-01-size-202x210.ivf.md5"
- "av1-1-b8-01-size-202x224.ivf"
- "av1-1-b8-01-size-202x224.ivf.md5"
- "av1-1-b8-01-size-202x226.ivf"
- "av1-1-b8-01-size-202x226.ivf.md5"
- "av1-1-b8-01-size-208x196.ivf"
- "av1-1-b8-01-size-208x196.ivf.md5"
- "av1-1-b8-01-size-208x198.ivf"
- "av1-1-b8-01-size-208x198.ivf.md5"
- "av1-1-b8-01-size-208x200.ivf"
- "av1-1-b8-01-size-208x200.ivf.md5"
- "av1-1-b8-01-size-208x202.ivf"
- "av1-1-b8-01-size-208x202.ivf.md5"
- "av1-1-b8-01-size-208x208.ivf"
- "av1-1-b8-01-size-208x208.ivf.md5"
- "av1-1-b8-01-size-208x210.ivf"
- "av1-1-b8-01-size-208x210.ivf.md5"
- "av1-1-b8-01-size-208x224.ivf"
- "av1-1-b8-01-size-208x224.ivf.md5"
- "av1-1-b8-01-size-208x226.ivf"
- "av1-1-b8-01-size-208x226.ivf.md5"
- "av1-1-b8-01-size-210x196.ivf"
- "av1-1-b8-01-size-210x196.ivf.md5"
- "av1-1-b8-01-size-210x198.ivf"
- "av1-1-b8-01-size-210x198.ivf.md5"
- "av1-1-b8-01-size-210x200.ivf"
- "av1-1-b8-01-size-210x200.ivf.md5"
- "av1-1-b8-01-size-210x202.ivf"
- "av1-1-b8-01-size-210x202.ivf.md5"
- "av1-1-b8-01-size-210x208.ivf"
- "av1-1-b8-01-size-210x208.ivf.md5"
- "av1-1-b8-01-size-210x210.ivf"
- "av1-1-b8-01-size-210x210.ivf.md5"
- "av1-1-b8-01-size-210x224.ivf"
- "av1-1-b8-01-size-210x224.ivf.md5"
- "av1-1-b8-01-size-210x226.ivf"
- "av1-1-b8-01-size-210x226.ivf.md5"
- "av1-1-b8-01-size-224x196.ivf"
- "av1-1-b8-01-size-224x196.ivf.md5"
- "av1-1-b8-01-size-224x198.ivf"
- "av1-1-b8-01-size-224x198.ivf.md5"
- "av1-1-b8-01-size-224x200.ivf"
- "av1-1-b8-01-size-224x200.ivf.md5"
- "av1-1-b8-01-size-224x202.ivf"
- "av1-1-b8-01-size-224x202.ivf.md5"
- "av1-1-b8-01-size-224x208.ivf"
- "av1-1-b8-01-size-224x208.ivf.md5"
- "av1-1-b8-01-size-224x210.ivf"
- "av1-1-b8-01-size-224x210.ivf.md5"
- "av1-1-b8-01-size-224x224.ivf"
- "av1-1-b8-01-size-224x224.ivf.md5"
- "av1-1-b8-01-size-224x226.ivf"
- "av1-1-b8-01-size-224x226.ivf.md5"
- "av1-1-b8-01-size-226x196.ivf"
- "av1-1-b8-01-size-226x196.ivf.md5"
- "av1-1-b8-01-size-226x198.ivf"
- "av1-1-b8-01-size-226x198.ivf.md5"
- "av1-1-b8-01-size-226x200.ivf"
- "av1-1-b8-01-size-226x200.ivf.md5"
- "av1-1-b8-01-size-226x202.ivf"
- "av1-1-b8-01-size-226x202.ivf.md5"
- "av1-1-b8-01-size-226x208.ivf"
- "av1-1-b8-01-size-226x208.ivf.md5"
- "av1-1-b8-01-size-226x210.ivf"
- "av1-1-b8-01-size-226x210.ivf.md5"
- "av1-1-b8-01-size-226x224.ivf"
- "av1-1-b8-01-size-226x224.ivf.md5"
- "av1-1-b8-01-size-226x226.ivf"
- "av1-1-b8-01-size-226x226.ivf.md5"
- "av1-1-b8-01-size-32x16.ivf"
- "av1-1-b8-01-size-32x16.ivf.md5"
- "av1-1-b8-01-size-32x18.ivf"
- "av1-1-b8-01-size-32x18.ivf.md5"
- "av1-1-b8-01-size-32x32.ivf"
- "av1-1-b8-01-size-32x32.ivf.md5"
- "av1-1-b8-01-size-32x34.ivf"
- "av1-1-b8-01-size-32x34.ivf.md5"
- "av1-1-b8-01-size-32x64.ivf"
- "av1-1-b8-01-size-32x64.ivf.md5"
- "av1-1-b8-01-size-32x66.ivf"
- "av1-1-b8-01-size-32x66.ivf.md5"
- "av1-1-b8-01-size-34x16.ivf"
- "av1-1-b8-01-size-34x16.ivf.md5"
- "av1-1-b8-01-size-34x18.ivf"
- "av1-1-b8-01-size-34x18.ivf.md5"
- "av1-1-b8-01-size-34x32.ivf"
- "av1-1-b8-01-size-34x32.ivf.md5"
- "av1-1-b8-01-size-34x34.ivf"
- "av1-1-b8-01-size-34x34.ivf.md5"
- "av1-1-b8-01-size-34x64.ivf"
- "av1-1-b8-01-size-34x64.ivf.md5"
- "av1-1-b8-01-size-34x66.ivf"
- "av1-1-b8-01-size-34x66.ivf.md5"
- "av1-1-b8-01-size-64x16.ivf"
- "av1-1-b8-01-size-64x16.ivf.md5"
- "av1-1-b8-01-size-64x18.ivf"
- "av1-1-b8-01-size-64x18.ivf.md5"
- "av1-1-b8-01-size-64x32.ivf"
- "av1-1-b8-01-size-64x32.ivf.md5"
- "av1-1-b8-01-size-64x34.ivf"
- "av1-1-b8-01-size-64x34.ivf.md5"
- "av1-1-b8-01-size-64x64.ivf"
- "av1-1-b8-01-size-64x64.ivf.md5"
- "av1-1-b8-01-size-64x66.ivf"
- "av1-1-b8-01-size-64x66.ivf.md5"
- "av1-1-b8-01-size-66x16.ivf"
- "av1-1-b8-01-size-66x16.ivf.md5"
- "av1-1-b8-01-size-66x18.ivf"
- "av1-1-b8-01-size-66x18.ivf.md5"
- "av1-1-b8-01-size-66x32.ivf"
- "av1-1-b8-01-size-66x32.ivf.md5"
- "av1-1-b8-01-size-66x34.ivf"
- "av1-1-b8-01-size-66x34.ivf.md5"
- "av1-1-b8-01-size-66x64.ivf"
- "av1-1-b8-01-size-66x64.ivf.md5"
- "av1-1-b8-01-size-66x66.ivf"
- "av1-1-b8-01-size-66x66.ivf.md5"
- "av1-1-b8-02-allintra.ivf"
- "av1-1-b8-02-allintra.ivf.md5"
- "av1-1-b8-03-sizeup.mkv"
- "av1-1-b8-03-sizeup.mkv.md5"
- "av1-1-b8-03-sizedown.mkv"
- "av1-1-b8-03-sizedown.mkv.md5")
-endif()
-
-if(ENABLE_ENCODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
- list(APPEND AOM_TEST_DATA_FILE_NAMES "desktop_640_360_30.yuv"
- "kirland_640_480_30.yuv" "macmarcomoving_640_480_30.yuv"
- "macmarcostationary_640_480_30.yuv" "niklas_1280_720_30.yuv"
- "tacomanarrows_640_480_30.yuv"
- "tacomasmallcameramovement_640_480_30.yuv"
- "thaloundeskmtg_640_480_30.yuv")
-endif()
-
-# Parses test/test-data.sha1 and writes captured file names and checksums to
-# $out_files and $out_checksums as lists.
-function(make_test_data_lists test_data_file out_files out_checksums)
- if(NOT test_data_file OR NOT EXISTS "${test_data_file}")
- message(FATAL_ERROR "Test info file missing or empty (${test_data_file})")
- endif()
-
- # Read $test_data_file into $files_and_checksums. $files_and_checksums becomes
- # a list with an entry for each line from $test_data_file.
- file(STRINGS "${test_data_file}" files_and_checksums)
-
- # Iterate over the list of lines and split it into $checksums and $filenames.
- foreach(line ${files_and_checksums})
- string(FIND "${line}" " *" delim_pos)
-
- math(EXPR filename_pos "${delim_pos} + 2")
- string(SUBSTRING "${line}" 0 ${delim_pos} checksum)
- string(SUBSTRING "${line}" ${filename_pos} -1 filename)
-
- list(FIND AOM_TEST_DATA_FILE_NAMES ${filename} list_index)
- if(NOT ${list_index} EQUAL -1)
-
- # Include the name and checksum in output only when the file is needed.
- set(checksums ${checksums} ${checksum})
- set(filenames ${filenames} ${filename})
- endif()
- endforeach()
-
- list(LENGTH filenames num_files)
- list(LENGTH checksums num_checksums)
- if(NOT checksums OR NOT filenames OR NOT num_files EQUAL num_checksums)
- message(FATAL_ERROR "Parsing of ${test_data_file} failed.")
- endif()
-
- set(${out_checksums} ${checksums} PARENT_SCOPE)
- set(${out_files} ${filenames} PARENT_SCOPE)
-endfunction()
-
-# Appends each file name in $test_files to $test_dir and adds the result path to
-# $out_path_list.
-function(expand_test_file_paths test_files test_dir out_path_list)
- foreach(filename ${${test_files}})
- set(path_list ${path_list} "${test_dir}/${filename}")
- endforeach()
- set(${out_path_list} ${path_list} PARENT_SCOPE)
-endfunction()
-
-function(check_file local_path expected_checksum out_needs_update)
- if(EXISTS "${local_path}")
- file(SHA1 "${local_path}" file_checksum)
- else()
- set(${out_needs_update} 1 PARENT_SCOPE)
- return()
- endif()
-
- if("${file_checksum}" STREQUAL "${expected_checksum}")
- unset(${out_needs_update} PARENT_SCOPE)
- else()
- set(${out_needs_update} 1 PARENT_SCOPE)
- return()
- endif()
- message("${local_path} up to date.")
-endfunction()
-
-# Downloads data from $file_url, confirms that $file_checksum matches, and
-# writes it to $local_path.
-function(download_test_file file_url file_checksum local_path)
- message("Downloading ${file_url} ...")
- file(DOWNLOAD "${file_url}" "${local_path}" SHOW_PROGRESS
- EXPECTED_HASH SHA1=${file_checksum})
- message("Download of ${file_url} complete.")
-endfunction()
diff --git a/third_party/aom/test/test_intra_pred_speed.cc b/third_party/aom/test/test_intra_pred_speed.cc
deleted file mode 100644
index b72ac1167..000000000
--- a/third_party/aom/test/test_intra_pred_speed.cc
+++ /dev/null
@@ -1,1464 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-// Test and time AOM intra-predictor functions
-
-#include <stdio.h>
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/md5_helper.h"
-#include "aom/aom_integer.h"
-#include "aom_ports/mem.h"
-#include "aom_ports/aom_timer.h"
-#include "av1/common/common_data.h"
-
-// -----------------------------------------------------------------------------
-
-namespace {
-
-// Note:
-// APPLY_UNIT_TESTS
-// 1: Do unit tests
-// 0: Generate MD5 array as required
-#define APPLY_UNIT_TESTS 1
-
-typedef void (*AvxPredFunc)(uint8_t *dst, ptrdiff_t y_stride,
- const uint8_t *above, const uint8_t *left);
-
-const int kBPS = 64;
-const int kTotalPixels = kBPS * kBPS;
-// 4 DC variants, V, H, PAETH, SMOOTH, SMOOTH_V, SMOOTH_H
-const int kNumAv1IntraFuncs = 10;
-
-#if APPLY_UNIT_TESTS
-const char *kAv1IntraPredNames[kNumAv1IntraFuncs] = {
- "DC_PRED", "DC_LEFT_PRED", "DC_TOP_PRED", "DC_128_PRED", "V_PRED",
- "H_PRED", "PAETH_PRED", "SMOOTH_PRED", "SMOOTH_V_PRED", "SMOOTH_H_PRED",
-};
-#endif // APPLY_UNIT_TESTS
-
-template <typename Pixel>
-struct IntraPredTestMem {
- void Init(int block_width, int block_height, int bd) {
- ASSERT_LE(block_width, kBPS);
- ASSERT_LE(block_height, kBPS);
- // Note: for blocks having width <= 32 and height <= 32, we generate 32x32
- // random pixels as before to avoid having to recalculate all hashes again.
- const int block_size_upto_32 = (block_width <= 32) && (block_height <= 32);
- stride = block_size_upto_32 ? 32 : kBPS;
- num_pixels = stride * stride;
- libaom_test::ACMRandom rnd(libaom_test::ACMRandom::DeterministicSeed());
- above = above_mem + 16;
- const int mask = (1 << bd) - 1;
- for (int i = 0; i < num_pixels; ++i) ref_src[i] = rnd.Rand16() & mask;
- for (int i = 0; i < stride; ++i) left[i] = rnd.Rand16() & mask;
- for (int i = -1; i < stride; ++i) above[i] = rnd.Rand16() & mask;
-
- for (int i = stride; i < 2 * stride; ++i) {
- left[i] = rnd.Rand16() & mask;
- above[i] = rnd.Rand16() & mask;
- }
- }
-
- DECLARE_ALIGNED(16, Pixel, src[kTotalPixels]);
- DECLARE_ALIGNED(16, Pixel, ref_src[kTotalPixels]);
- DECLARE_ALIGNED(16, Pixel, left[2 * kBPS]);
- Pixel *above;
- int stride;
- int num_pixels;
-
- private:
- DECLARE_ALIGNED(16, Pixel, above_mem[2 * kBPS + 16]);
-};
-
-// -----------------------------------------------------------------------------
-// Low Bittdepth
-
-typedef IntraPredTestMem<uint8_t> Av1IntraPredTestMem;
-
-static const char *const kTxSizeStrings[TX_SIZES_ALL] = {
- "4X4", "8X8", "16X16", "32X32", "64X64", "4X8", "8X4",
- "8X16", "16X8", "16X32", "32X16", "32X64", "64X32", "4X16",
- "16X4", "8X32", "32X8", "16X64", "64X16",
-};
-
-void CheckMd5Signature(TX_SIZE tx_size, bool is_hbd,
- const char *const signatures[], const void *data,
- size_t data_size, int elapsed_time, int idx) {
- const std::string hbd_str = is_hbd ? "Hbd " : "";
- const std::string name_str = hbd_str + "Intra" + kTxSizeStrings[tx_size];
- libaom_test::MD5 md5;
- md5.Add(reinterpret_cast<const uint8_t *>(data), data_size);
-#if APPLY_UNIT_TESTS
- printf("Mode %s[%13s]: %5d ms MD5: %s\n", name_str.c_str(),
- kAv1IntraPredNames[idx], elapsed_time, md5.Get());
- EXPECT_STREQ(signatures[idx], md5.Get());
-#else
- (void)signatures;
- (void)elapsed_time;
- (void)idx;
- printf("\"%s\",\n", md5.Get());
-#endif
-}
-
-void TestIntraPred(TX_SIZE tx_size, AvxPredFunc const *pred_funcs,
- const char *const signatures[]) {
- const int block_width = tx_size_wide[tx_size];
- const int block_height = tx_size_high[tx_size];
- const int num_pixels_per_test =
- block_width * block_height * kNumAv1IntraFuncs;
- const int kNumTests = static_cast<int>(2.e10 / num_pixels_per_test);
- Av1IntraPredTestMem intra_pred_test_mem;
- intra_pred_test_mem.Init(block_width, block_height, 8);
-
- for (int k = 0; k < kNumAv1IntraFuncs; ++k) {
- if (pred_funcs[k] == NULL) continue;
- memcpy(intra_pred_test_mem.src, intra_pred_test_mem.ref_src,
- sizeof(intra_pred_test_mem.src));
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int num_tests = 0; num_tests < kNumTests; ++num_tests) {
- pred_funcs[k](intra_pred_test_mem.src, intra_pred_test_mem.stride,
- intra_pred_test_mem.above, intra_pred_test_mem.left);
- }
- libaom_test::ClearSystemState();
- aom_usec_timer_mark(&timer);
- const int elapsed_time =
- static_cast<int>(aom_usec_timer_elapsed(&timer) / 1000);
- CheckMd5Signature(
- tx_size, false, signatures, intra_pred_test_mem.src,
- intra_pred_test_mem.num_pixels * sizeof(*intra_pred_test_mem.src),
- elapsed_time, k);
- }
-}
-
-static const char *const kSignatures[TX_SIZES_ALL][kNumAv1IntraFuncs] = {
- {
- // 4X4
- "e7ed7353c3383fff942e500e9bfe82fe",
- "2a4a26fcc6ce005eadc08354d196c8a9",
- "269d92eff86f315d9c38fe7640d85b15",
- "ae2960eea9f71ee3dabe08b282ec1773",
- "6c1abcc44e90148998b51acd11144e9c",
- "f7bb3186e1ef8a2b326037ff898cad8e",
- "59fc0e923a08cfac0a493fb38988e2bb",
- "9ff8bb37d9c830e6ab8ecb0c435d3c91",
- "de6937fca02354f2874dbc5dbec5d5b3",
- "723cf948137f7d8c7860d814e55ae67d",
- },
- {
- // 8X8
- "d8bbae5d6547cfc17e4f5f44c8730e88",
- "373bab6d931868d41a601d9d88ce9ac3",
- "6fdd5ff4ff79656c14747598ca9e3706",
- "d9661c2811d6a73674f40ffb2b841847",
- "7c722d10b19ccff0b8c171868e747385",
- "f81dd986eb2b50f750d3a7da716b7e27",
- "064404361748dd111a890a1470d7f0ea",
- "dc29b7e1f78cc8e7525d5ea4c0ab9b78",
- "97111eb1bc26bade6272015df829f1ae",
- "d19a8a73cc46b807f2c5e817576cc1e1",
- },
- {
- // 16X16
- "50971c07ce26977d30298538fffec619",
- "527a6b9e0dc5b21b98cf276305432bef",
- "7eff2868f80ebc2c43a4f367281d80f7",
- "67cd60512b54964ef6aff1bd4816d922",
- "48371c87dc95c08a33b2048f89cf6468",
- "b0acf2872ee411d7530af6d2625a7084",
- "93d6b5352b571805ab16a55e1bbed86a",
- "03764e4c0aebbc180e4e2c68fb06df2b",
- "bb6c74c9076c9f266ab11fb57060d8e6",
- "0c5162bc28489756ddb847b5678e6f07",
- },
- {
- // 32X32
- "a0a618c900e65ae521ccc8af789729f2",
- "985aaa7c72b4a6c2fb431d32100cf13a",
- "10662d09febc3ca13ee4e700120daeb5",
- "b3b01379ba08916ef6b1b35f7d9ad51c",
- "9f4261755795af97e34679c333ec7004",
- "bc2c9da91ad97ef0d1610fb0a9041657",
- "ef1653982b69e1f64bee3759f3e1ec45",
- "1a51a675deba2c83282142eb48d3dc3d",
- "866c224746dc260cda861a7b1b383fb3",
- "cea23799fc3526e1b6a6ff02b42b82af",
- },
- {
- // 64X64
- "6e1094fa7b50bc813aa2ba29f5df8755",
- "afe020786b83b793c2bbd9468097ff6e",
- "be91585259bc37bf4dc1651936e90b3e",
- "a1650dbcd56e10288c3e269eca37967d",
- "9e5c34f3797e0cdd3cd9d4c05b0d8950",
- "bc87be7ac899cc6a28f399d7516c49fe",
- "9811fd0d2dd515f06122f5d1bd18b784",
- "3c140e466f2c2c0d9cb7d2157ab8dc27",
- "9543de76c925a8f6adc884cc7f98dc91",
- "df1df0376cc944afe7e74e94f53e575a",
- },
- {
- // 4X8
- "d9fbebdc85f71ab1e18461b2db4a2adc",
- "5ccb2a68284bc9714d94b8a06ccadbb2",
- "735d059abc2744f3ff3f9590f7191b37",
- "d9fbebdc85f71ab1e18461b2db4a2adc",
- "6819497c44cd0ace120add83672996ee",
- "7e3244f5a2d3edf81c7e962a842b97f9",
- "809350f164cd4d1650850bb0f59c3260",
- "1b60a394331eeab6927a6f8aaff57040",
- "5307de1bd7329ba6b281d2c1b0b457f9",
- "24c58a8138339846d95568efb91751db",
- },
- {
- // 8X4
- "23f9fc11344426c9bee2e06d57dfd628",
- "2d71a26d1bae1fb34734de7b42fc5eb7",
- "5af9c1b2fd9d5721fad67b67b3f7c816",
- "00d71b17be662753813d515f197d145e",
- "bef10ec984427e28f4390f43809d10af",
- "77773cdfb7ed6bc882ab202a64b0a470",
- "2cc48bd66d6b0121b5221d52ccd732af",
- "b302155e1c9eeeafe2ba2bf68e807a46",
- "561bc8d0e76d5041ebd5168fc6a115e1",
- "81d0113fb1d0a9a24ffd6f1987b77948",
- },
- {
- // 8X16
- "c849de88b24f773dfcdd1d48d1209796",
- "6cb807c1897b94866a0f3d3c56ed8695",
- "d56db05a8ac7981762f5b877f486c4ef",
- "b4bc01eb6e59a40922ad17715cafb04b",
- "09d178439534f4062ae687c351f66d64",
- "644501399cf73080ac606e5cef7ca09b",
- "278076495180e17c065a95ab7278539a",
- "9dd7f324816f242be408ffeb0c673732",
- "f520c4a20acfa0bea1d253c6f0f040fd",
- "85f38df809df2c2d7c8b4a157a65cd44",
- },
- {
- // 16X8
- "b4cbdbdf10ce13300b4063a3daf99e04",
- "3731e1e6202064a9d0604d7c293ecee4",
- "6c856188c4256a06452f0d5d70cac436",
- "1f2192b4c8c497589484ea7bf9c944e8",
- "84011bd4b7f565119d06787840e333a0",
- "0e48949f7a6aa36f0d76b5d01f91124a",
- "60eff8064634b6c73b10681356baeee9",
- "1559aeb081a9c0c71111d6093c2ff9fd",
- "c15479b739713773e5cabb748451987b",
- "72e33ec12c9b67aea26d8d005fb82de2",
- },
- {
- // 16X32
- "abe5233d189cdbf79424721571bbaa7b",
- "282759f81e3cfb2e2d396fe406b72a8b",
- "e2224926c264f6f174cbc3167a233168",
- "6814e85c2b33f8c9415d62e80394b47b",
- "99cbbb60459c08a3061d72c4e4f6276a",
- "1d1567d40b8e816f8c1f71e576fe0f87",
- "36fdd371b624a075814d497c4832ec85",
- "8ab8da61b727442b6ff692b40d0df018",
- "e35a10ad7fdf2327e821504a90f6a6eb",
- "1f7211e727dc1de7d6a55d082fbdd821",
- },
- {
- // 32X16
- "d1aeb8d5fdcfd3307922af01a798a4dc",
- "b0bcb514ebfbee065faea9d34c12ae75",
- "d6a18c63b4e909871c0137ca652fad23",
- "fd047f2fc1b8ffb95d0eeef3e8796a45",
- "645ab60779ea348fd93c81561c31bab9",
- "4409633c9db8dff41ade4292a3a56e7f",
- "5e36a11e069b31c2a739f3a9c7b37c24",
- "e83b9483d702cfae496991c3c7fa92c0",
- "12f6ddf98c7f30a277307f1ea935b030",
- "354321d6c32bbdb0739e4fa2acbf41e1",
- },
- {
- // 32X64
- "0ce332b343934b34cd4417725faa85cb",
- "4e2a2cfd8f56f15939bdfc753145b303",
- "0f46d124ba9f48cdd5d5290acf786d6d",
- "e1e8ed803236367821981500a3d9eebe",
- "1d2f8e48e3adb7c448be05d9f66f4954",
- "9fb2e176636a5689b26f73ca73fcc512",
- "e720ebccae7e25e36f23da53ae5b5d6a",
- "86fe4364734169aaa4520d799890d530",
- "b1870290764bb1b100d1974e2bd70f1d",
- "ce5b238e19d85ef69d85badfab4e63ae",
- },
- {
- // 64X32
- "a6c5aeb722615089efbca80b02951ceb",
- "538424b24bd0830f21788e7238ca762f",
- "80c15b303235f9bc2259027bb92dfdc4",
- "e48e1ac15e97191a8fda08d62fff343e",
- "12604b37875533665078405ef4582e35",
- "0048afa17bd3e1632d68b96048836530",
- "07a0cfcb56a5eed50c4bd6c26814336b",
- "529d8a070de5bc6531fa3ee8f450c233",
- "33c50a11c7d78f72434064f634305e95",
- "e0ef7f0559c1a50ec5a8c12011b962f7",
- },
- {
- // 4X16
- "750491056568eb8fe15387b86bdf06b8",
- "3a52dae9f599f08cfb3bd1b910dc0e11",
- "af79f71e3e03dbeca44e2e13561f70c7",
- "ca7dfd7624afc0c06fb5552f44398535",
- "b591af115444bf43140c29c269f68fb2",
- "483d942ae36e69e62f31eb215331416f",
- "f14b58525e81870bc5d95c7ac71a347f",
- "371208bb4027d9badb04095d1590bbc4",
- "c7049c21b2924d70c7c12784d6b6b796",
- "7d87233f4b5b0f12086045e5d7b2d4c2",
- },
- {
- // 16X4
- "7c6e325a65e77e732b3adbe237e045e4",
- "24478f93ffcec47852e004d0fe948464",
- "258d042c67d4ba3ecfa667f0adc9aebf",
- "b2cd21d06959f159a1f3c4d9768ee7fb",
- "b4e1f38157bf8410e7c3da02f687a343",
- "869e703729eb0fc0711c254944ff5d5a",
- "9638dd77105a640b146a8201ea7a0801",
- "919d932c6af8a1cc7486e8ce996dd487",
- "e1c9be493b6714c7ae48f30044c43140",
- "bf0fe3889d654b2f6eb98c8fc751f9e4",
- },
- {
- // 8X32
- "8dfac4319fe0bd40013ffb3102da8c72",
- "feb46b6dc4e2ca0a09533bfc51d4dcb0",
- "850837ec714c37262216527aaf4cbbe9",
- "4603c7800fb08361f163daca876e8bda",
- "1ff95e7d2debc27b05806fb25abfd624",
- "d81b9a51a062b23ca7823804cb7bec22",
- "f1d8978158766f46335203608cb807e7",
- "f3527096256258c0878d644a9d7d53ca",
- "cbde98ac8b009953eb112807ad2ea29e",
- "654fb1153415747feae599f538122af5",
- },
- {
- // 32X8
- "3d4ee16fab374357474f60b845327bc7",
- "bc17c5059473a476df4e85f56395ad55",
- "3d4ee16fab374357474f60b845327bc7",
- "c14b8db34dc2355b84e3735c9ba16c7f",
- "a71d25b5d47a92a8b9223c98f18458ee",
- "6c1cfe2b1893f4576a80675687cb6426",
- "92d11bbef8b85bb48d799bb055de3514",
- "bcf81d1db8ae5cc03360467f44f498ec",
- "79f8c564163555592e808e145eaf5c60",
- "46fff139cef2ef773938bcc8b0e5abb8",
- },
- {
- // 16X64
- "3b2a053ee8b05a8ac35ad23b0422a151",
- "12b0c69595328c465e0b25e0c9e3e9fc",
- "f77c544ac8035e01920deae40cee7b07",
- "727797ef15ccd8d325476fe8f12006a3",
- "f3be77c0fe67eb5d9d515e92bec21eb7",
- "f1ece6409e01e9dd98b800d49628247d",
- "efd2ec9bfbbd4fd1f6604ea369df1894",
- "ec703de918422b9e03197ba0ed60a199",
- "739418efb89c07f700895deaa5d0b3e3",
- "9943ae1bbeeebfe1d3a92dc39e049d63",
- },
- {
- // 64X16
- "821b76b1494d4f84d20817840f719a1a",
- "69e462c3338a9aaf993c3f7cfbc15649",
- "516d8f6eb054d74d150e7b444185b6b9",
- "de1b736e9d99129609d6ef3a491507a0",
- "fd9b4276e7affe1e0e4ce4f428058994",
- "cd82fd361a4767ac29a9f406b480b8f3",
- "2792c2f810157a4a6cb13c28529ff779",
- "1220442d90c4255ba0969d28b91e93a6",
- "c7253e10b45f7f67dfee3256c9b94825",
- "879792198071c7e0b50b9b5010d8c18f",
- },
-};
-
-} // namespace
-
-// Defines a test case for |arch| (e.g., C, SSE2, ...) passing the predictors
-// to TestIntraPred. The test name is 'arch.TestIntraPred_tx_size', e.g.,
-// C.TestIntraPred.0
-#define INTRA_PRED_TEST(arch, tx_size, dc, dc_left, dc_top, dc_128, v, h, \
- paeth, smooth, smooth_v, smooth_h) \
- TEST(arch, DISABLED_##TestIntraPred_##tx_size) { \
- static const AvxPredFunc aom_intra_pred[] = { \
- dc, dc_left, dc_top, dc_128, v, h, paeth, smooth, smooth_v, smooth_h \
- }; \
- TestIntraPred(tx_size, aom_intra_pred, kSignatures[tx_size]); \
- }
-
-// -----------------------------------------------------------------------------
-// 4x4, 4x8, 4x16
-
-INTRA_PRED_TEST(C_1, TX_4X4, aom_dc_predictor_4x4_c,
- aom_dc_left_predictor_4x4_c, aom_dc_top_predictor_4x4_c,
- aom_dc_128_predictor_4x4_c, aom_v_predictor_4x4_c,
- aom_h_predictor_4x4_c, aom_paeth_predictor_4x4_c,
- aom_smooth_predictor_4x4_c, aom_smooth_v_predictor_4x4_c,
- aom_smooth_h_predictor_4x4_c)
-
-INTRA_PRED_TEST(C_2, TX_4X8, aom_dc_predictor_4x8_c,
- aom_dc_left_predictor_4x8_c, aom_dc_top_predictor_4x8_c,
- aom_dc_128_predictor_4x8_c, aom_v_predictor_4x8_c,
- aom_h_predictor_4x8_c, aom_paeth_predictor_4x8_c,
- aom_smooth_predictor_4x8_c, aom_smooth_v_predictor_4x8_c,
- aom_smooth_h_predictor_4x8_c)
-
-INTRA_PRED_TEST(C_3, TX_4X16, aom_dc_predictor_4x16_c,
- aom_dc_left_predictor_4x16_c, aom_dc_top_predictor_4x16_c,
- aom_dc_128_predictor_4x16_c, aom_v_predictor_4x16_c,
- aom_h_predictor_4x16_c, aom_paeth_predictor_4x16_c,
- aom_smooth_predictor_4x16_c, aom_smooth_v_predictor_4x16_c,
- aom_smooth_h_predictor_4x16_c)
-
-#if HAVE_SSE2
-INTRA_PRED_TEST(SSE2_1, TX_4X4, aom_dc_predictor_4x4_sse2,
- aom_dc_left_predictor_4x4_sse2, aom_dc_top_predictor_4x4_sse2,
- aom_dc_128_predictor_4x4_sse2, aom_v_predictor_4x4_sse2,
- aom_h_predictor_4x4_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_2, TX_4X8, aom_dc_predictor_4x8_sse2,
- aom_dc_left_predictor_4x8_sse2, aom_dc_top_predictor_4x8_sse2,
- aom_dc_128_predictor_4x8_sse2, aom_v_predictor_4x8_sse2,
- aom_h_predictor_4x8_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_3, TX_4X16, aom_dc_predictor_4x16_sse2,
- aom_dc_left_predictor_4x16_sse2, aom_dc_top_predictor_4x16_sse2,
- aom_dc_128_predictor_4x16_sse2, aom_v_predictor_4x16_sse2,
- aom_h_predictor_4x16_sse2, NULL, NULL, NULL, NULL)
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-INTRA_PRED_TEST(SSSE3_1, TX_4X4, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_4x4_ssse3, aom_smooth_predictor_4x4_ssse3,
- aom_smooth_v_predictor_4x4_ssse3,
- aom_smooth_h_predictor_4x4_ssse3)
-INTRA_PRED_TEST(SSSE3_2, TX_4X8, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_4x8_ssse3, aom_smooth_predictor_4x8_ssse3,
- aom_smooth_v_predictor_4x8_ssse3,
- aom_smooth_h_predictor_4x8_ssse3)
-INTRA_PRED_TEST(SSSE3_3, TX_4X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_4x16_ssse3, aom_smooth_predictor_4x16_ssse3,
- aom_smooth_v_predictor_4x16_ssse3,
- aom_smooth_h_predictor_4x16_ssse3)
-#endif // HAVE_SSSE3
-
-#if HAVE_DSPR2
-INTRA_PRED_TEST(DSPR2, TX_4X4, aom_dc_predictor_4x4_dspr2, NULL, NULL, NULL,
- NULL, aom_h_predictor_4x4_dspr2, NULL, NULL, NULL, NULL)
-#endif // HAVE_DSPR2
-
-#if HAVE_NEON
-INTRA_PRED_TEST(NEON, TX_4X4, aom_dc_predictor_4x4_neon,
- aom_dc_left_predictor_4x4_neon, aom_dc_top_predictor_4x4_neon,
- aom_dc_128_predictor_4x4_neon, aom_v_predictor_4x4_neon,
- aom_h_predictor_4x4_neon, NULL, NULL, NULL, NULL)
-#endif // HAVE_NEON
-
-#if HAVE_MSA
-INTRA_PRED_TEST(MSA, TX_4X4, aom_dc_predictor_4x4_msa,
- aom_dc_left_predictor_4x4_msa, aom_dc_top_predictor_4x4_msa,
- aom_dc_128_predictor_4x4_msa, aom_v_predictor_4x4_msa,
- aom_h_predictor_4x4_msa, NULL, NULL, NULL, NULL)
-#endif // HAVE_MSA
-
-// -----------------------------------------------------------------------------
-// 8x8, 8x4, 8x16, 8x32
-
-INTRA_PRED_TEST(C_1, TX_8X8, aom_dc_predictor_8x8_c,
- aom_dc_left_predictor_8x8_c, aom_dc_top_predictor_8x8_c,
- aom_dc_128_predictor_8x8_c, aom_v_predictor_8x8_c,
- aom_h_predictor_8x8_c, aom_paeth_predictor_8x8_c,
- aom_smooth_predictor_8x8_c, aom_smooth_v_predictor_8x8_c,
- aom_smooth_h_predictor_8x8_c)
-
-INTRA_PRED_TEST(C_2, TX_8X4, aom_dc_predictor_8x4_c,
- aom_dc_left_predictor_8x4_c, aom_dc_top_predictor_8x4_c,
- aom_dc_128_predictor_8x4_c, aom_v_predictor_8x4_c,
- aom_h_predictor_8x4_c, aom_paeth_predictor_8x4_c,
- aom_smooth_predictor_8x4_c, aom_smooth_v_predictor_8x4_c,
- aom_smooth_h_predictor_8x4_c)
-
-INTRA_PRED_TEST(C_3, TX_8X16, aom_dc_predictor_8x16_c,
- aom_dc_left_predictor_8x16_c, aom_dc_top_predictor_8x16_c,
- aom_dc_128_predictor_8x16_c, aom_v_predictor_8x16_c,
- aom_h_predictor_8x16_c, aom_paeth_predictor_8x16_c,
- aom_smooth_predictor_8x16_c, aom_smooth_v_predictor_8x16_c,
- aom_smooth_h_predictor_8x16_c)
-
-INTRA_PRED_TEST(C_4, TX_8X32, aom_dc_predictor_8x32_c,
- aom_dc_left_predictor_8x32_c, aom_dc_top_predictor_8x32_c,
- aom_dc_128_predictor_8x32_c, aom_v_predictor_8x32_c,
- aom_h_predictor_8x32_c, aom_paeth_predictor_8x32_c,
- aom_smooth_predictor_8x32_c, aom_smooth_v_predictor_8x32_c,
- aom_smooth_h_predictor_8x32_c)
-
-#if HAVE_SSE2
-INTRA_PRED_TEST(SSE2_1, TX_8X8, aom_dc_predictor_8x8_sse2,
- aom_dc_left_predictor_8x8_sse2, aom_dc_top_predictor_8x8_sse2,
- aom_dc_128_predictor_8x8_sse2, aom_v_predictor_8x8_sse2,
- aom_h_predictor_8x8_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_2, TX_8X4, aom_dc_predictor_8x4_sse2,
- aom_dc_left_predictor_8x4_sse2, aom_dc_top_predictor_8x4_sse2,
- aom_dc_128_predictor_8x4_sse2, aom_v_predictor_8x4_sse2,
- aom_h_predictor_8x4_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_3, TX_8X16, aom_dc_predictor_8x16_sse2,
- aom_dc_left_predictor_8x16_sse2, aom_dc_top_predictor_8x16_sse2,
- aom_dc_128_predictor_8x16_sse2, aom_v_predictor_8x16_sse2,
- aom_h_predictor_8x16_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_4, TX_8X32, aom_dc_predictor_8x32_sse2,
- aom_dc_left_predictor_8x32_sse2, aom_dc_top_predictor_8x32_sse2,
- aom_dc_128_predictor_8x32_sse2, aom_v_predictor_8x32_sse2,
- aom_h_predictor_8x32_sse2, NULL, NULL, NULL, NULL)
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-INTRA_PRED_TEST(SSSE3_1, TX_8X8, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_8x8_ssse3, aom_smooth_predictor_8x8_ssse3,
- aom_smooth_v_predictor_8x8_ssse3,
- aom_smooth_h_predictor_8x8_ssse3)
-INTRA_PRED_TEST(SSSE3_2, TX_8X4, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_8x4_ssse3, aom_smooth_predictor_8x4_ssse3,
- aom_smooth_v_predictor_8x4_ssse3,
- aom_smooth_h_predictor_8x4_ssse3)
-INTRA_PRED_TEST(SSSE3_3, TX_8X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_8x16_ssse3, aom_smooth_predictor_8x16_ssse3,
- aom_smooth_v_predictor_8x16_ssse3,
- aom_smooth_h_predictor_8x16_ssse3)
-INTRA_PRED_TEST(SSSE3_4, TX_8X32, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_8x32_ssse3, aom_smooth_predictor_8x32_ssse3,
- aom_smooth_v_predictor_8x32_ssse3,
- aom_smooth_h_predictor_8x32_ssse3)
-#endif // HAVE_SSSE3
-
-#if HAVE_DSPR2
-INTRA_PRED_TEST(DSPR2, TX_8X8, aom_dc_predictor_8x8_dspr2, NULL, NULL, NULL,
- NULL, aom_h_predictor_8x8_dspr2, NULL, NULL, NULL, NULL)
-#endif // HAVE_DSPR2
-
-#if HAVE_NEON
-INTRA_PRED_TEST(NEON, TX_8X8, aom_dc_predictor_8x8_neon,
- aom_dc_left_predictor_8x8_neon, aom_dc_top_predictor_8x8_neon,
- aom_dc_128_predictor_8x8_neon, aom_v_predictor_8x8_neon,
- aom_h_predictor_8x8_neon, NULL, NULL, NULL, NULL)
-#endif // HAVE_NEON
-
-#if HAVE_MSA
-INTRA_PRED_TEST(MSA, TX_8X8, aom_dc_predictor_8x8_msa,
- aom_dc_left_predictor_8x8_msa, aom_dc_top_predictor_8x8_msa,
- aom_dc_128_predictor_8x8_msa, aom_v_predictor_8x8_msa,
- aom_h_predictor_8x8_msa, NULL, NULL, NULL, NULL)
-#endif // HAVE_MSA
-
-// -----------------------------------------------------------------------------
-// 16x16, 16x8, 16x32, 16x4, 16x64
-
-INTRA_PRED_TEST(C_1, TX_16X16, aom_dc_predictor_16x16_c,
- aom_dc_left_predictor_16x16_c, aom_dc_top_predictor_16x16_c,
- aom_dc_128_predictor_16x16_c, aom_v_predictor_16x16_c,
- aom_h_predictor_16x16_c, aom_paeth_predictor_16x16_c,
- aom_smooth_predictor_16x16_c, aom_smooth_v_predictor_16x16_c,
- aom_smooth_h_predictor_16x16_c)
-
-INTRA_PRED_TEST(C_2, TX_16X8, aom_dc_predictor_16x8_c,
- aom_dc_left_predictor_16x8_c, aom_dc_top_predictor_16x8_c,
- aom_dc_128_predictor_16x8_c, aom_v_predictor_16x8_c,
- aom_h_predictor_16x8_c, aom_paeth_predictor_16x8_c,
- aom_smooth_predictor_16x8_c, aom_smooth_v_predictor_16x8_c,
- aom_smooth_h_predictor_16x8_c)
-
-INTRA_PRED_TEST(C_3, TX_16X32, aom_dc_predictor_16x32_c,
- aom_dc_left_predictor_16x32_c, aom_dc_top_predictor_16x32_c,
- aom_dc_128_predictor_16x32_c, aom_v_predictor_16x32_c,
- aom_h_predictor_16x32_c, aom_paeth_predictor_16x32_c,
- aom_smooth_predictor_16x32_c, aom_smooth_v_predictor_16x32_c,
- aom_smooth_h_predictor_16x32_c)
-
-INTRA_PRED_TEST(C_4, TX_16X4, aom_dc_predictor_16x4_c,
- aom_dc_left_predictor_16x4_c, aom_dc_top_predictor_16x4_c,
- aom_dc_128_predictor_16x4_c, aom_v_predictor_16x4_c,
- aom_h_predictor_16x4_c, aom_paeth_predictor_16x4_c,
- aom_smooth_predictor_16x4_c, aom_smooth_v_predictor_16x4_c,
- aom_smooth_h_predictor_16x4_c)
-
-INTRA_PRED_TEST(C_5, TX_16X64, aom_dc_predictor_16x64_c,
- aom_dc_left_predictor_16x64_c, aom_dc_top_predictor_16x64_c,
- aom_dc_128_predictor_16x64_c, aom_v_predictor_16x64_c,
- aom_h_predictor_16x64_c, aom_paeth_predictor_16x64_c,
- aom_smooth_predictor_16x64_c, aom_smooth_v_predictor_16x64_c,
- aom_smooth_h_predictor_16x64_c)
-
-#if HAVE_SSE2
-INTRA_PRED_TEST(SSE2_1, TX_16X16, aom_dc_predictor_16x16_sse2,
- aom_dc_left_predictor_16x16_sse2,
- aom_dc_top_predictor_16x16_sse2,
- aom_dc_128_predictor_16x16_sse2, aom_v_predictor_16x16_sse2,
- aom_h_predictor_16x16_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_2, TX_16X8, aom_dc_predictor_16x8_sse2,
- aom_dc_left_predictor_16x8_sse2, aom_dc_top_predictor_16x8_sse2,
- aom_dc_128_predictor_16x8_sse2, aom_v_predictor_16x8_sse2,
- aom_h_predictor_16x8_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_3, TX_16X32, aom_dc_predictor_16x32_sse2,
- aom_dc_left_predictor_16x32_sse2,
- aom_dc_top_predictor_16x32_sse2,
- aom_dc_128_predictor_16x32_sse2, aom_v_predictor_16x32_sse2,
- aom_h_predictor_16x32_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_4, TX_16X64, aom_dc_predictor_16x64_sse2,
- aom_dc_left_predictor_16x64_sse2,
- aom_dc_top_predictor_16x64_sse2,
- aom_dc_128_predictor_16x64_sse2, aom_v_predictor_16x64_sse2,
- aom_h_predictor_16x64_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_5, TX_16X4, aom_dc_predictor_16x4_sse2,
- aom_dc_left_predictor_16x4_sse2, aom_dc_top_predictor_16x4_sse2,
- aom_dc_128_predictor_16x4_sse2, aom_v_predictor_16x4_sse2,
- aom_h_predictor_16x4_sse2, NULL, NULL, NULL, NULL)
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-INTRA_PRED_TEST(SSSE3_1, TX_16X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x16_ssse3,
- aom_smooth_predictor_16x16_ssse3,
- aom_smooth_v_predictor_16x16_ssse3,
- aom_smooth_h_predictor_16x16_ssse3)
-INTRA_PRED_TEST(SSSE3_2, TX_16X8, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x8_ssse3, aom_smooth_predictor_16x8_ssse3,
- aom_smooth_v_predictor_16x8_ssse3,
- aom_smooth_h_predictor_16x8_ssse3)
-INTRA_PRED_TEST(SSSE3_3, TX_16X32, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x32_ssse3,
- aom_smooth_predictor_16x32_ssse3,
- aom_smooth_v_predictor_16x32_ssse3,
- aom_smooth_h_predictor_16x32_ssse3)
-INTRA_PRED_TEST(SSSE3_4, TX_16X64, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x64_ssse3,
- aom_smooth_predictor_16x64_ssse3,
- aom_smooth_v_predictor_16x64_ssse3,
- aom_smooth_h_predictor_16x64_ssse3)
-INTRA_PRED_TEST(SSSE3_5, TX_16X4, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x4_ssse3, aom_smooth_predictor_16x4_ssse3,
- aom_smooth_v_predictor_16x4_ssse3,
- aom_smooth_h_predictor_16x4_ssse3)
-#endif // HAVE_SSSE3
-
-#if HAVE_AVX2
-INTRA_PRED_TEST(AVX2_1, TX_16X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x16_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_2, TX_16X8, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x8_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_3, TX_16X32, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x32_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_4, TX_16X64, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_16x64_avx2, NULL, NULL, NULL)
-#endif // HAVE_AVX2
-
-#if HAVE_DSPR2
-INTRA_PRED_TEST(DSPR2, TX_16X16, aom_dc_predictor_16x16_dspr2, NULL, NULL, NULL,
- NULL, aom_h_predictor_16x16_dspr2, NULL, NULL, NULL, NULL)
-#endif // HAVE_DSPR2
-
-#if HAVE_NEON
-INTRA_PRED_TEST(NEON, TX_16X16, aom_dc_predictor_16x16_neon,
- aom_dc_left_predictor_16x16_neon,
- aom_dc_top_predictor_16x16_neon,
- aom_dc_128_predictor_16x16_neon, aom_v_predictor_16x16_neon,
- aom_h_predictor_16x16_neon, NULL, NULL, NULL, NULL)
-#endif // HAVE_NEON
-
-#if HAVE_MSA
-INTRA_PRED_TEST(MSA, TX_16X16, aom_dc_predictor_16x16_msa,
- aom_dc_left_predictor_16x16_msa, aom_dc_top_predictor_16x16_msa,
- aom_dc_128_predictor_16x16_msa, aom_v_predictor_16x16_msa,
- aom_h_predictor_16x16_msa, NULL, NULL, NULL, NULL)
-#endif // HAVE_MSA
-
-// -----------------------------------------------------------------------------
-// 32x32, 32x16, 32x64, 32x8
-
-INTRA_PRED_TEST(C_1, TX_32X32, aom_dc_predictor_32x32_c,
- aom_dc_left_predictor_32x32_c, aom_dc_top_predictor_32x32_c,
- aom_dc_128_predictor_32x32_c, aom_v_predictor_32x32_c,
- aom_h_predictor_32x32_c, aom_paeth_predictor_32x32_c,
- aom_smooth_predictor_32x32_c, aom_smooth_v_predictor_32x32_c,
- aom_smooth_h_predictor_32x32_c)
-
-INTRA_PRED_TEST(C_2, TX_32X16, aom_dc_predictor_32x16_c,
- aom_dc_left_predictor_32x16_c, aom_dc_top_predictor_32x16_c,
- aom_dc_128_predictor_32x16_c, aom_v_predictor_32x16_c,
- aom_h_predictor_32x16_c, aom_paeth_predictor_32x16_c,
- aom_smooth_predictor_32x16_c, aom_smooth_v_predictor_32x16_c,
- aom_smooth_h_predictor_32x16_c)
-
-INTRA_PRED_TEST(C_3, TX_32X64, aom_dc_predictor_32x64_c,
- aom_dc_left_predictor_32x64_c, aom_dc_top_predictor_32x64_c,
- aom_dc_128_predictor_32x64_c, aom_v_predictor_32x64_c,
- aom_h_predictor_32x64_c, aom_paeth_predictor_32x64_c,
- aom_smooth_predictor_32x64_c, aom_smooth_v_predictor_32x64_c,
- aom_smooth_h_predictor_32x64_c)
-
-INTRA_PRED_TEST(C_4, TX_32X8, aom_dc_predictor_32x8_c,
- aom_dc_left_predictor_32x8_c, aom_dc_top_predictor_32x8_c,
- aom_dc_128_predictor_32x8_c, aom_v_predictor_32x8_c,
- aom_h_predictor_32x8_c, aom_paeth_predictor_32x8_c,
- aom_smooth_predictor_32x8_c, aom_smooth_v_predictor_32x8_c,
- aom_smooth_h_predictor_32x8_c)
-
-#if HAVE_SSE2
-INTRA_PRED_TEST(SSE2_1, TX_32X32, aom_dc_predictor_32x32_sse2,
- aom_dc_left_predictor_32x32_sse2,
- aom_dc_top_predictor_32x32_sse2,
- aom_dc_128_predictor_32x32_sse2, aom_v_predictor_32x32_sse2,
- aom_h_predictor_32x32_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_2, TX_32X16, aom_dc_predictor_32x16_sse2,
- aom_dc_left_predictor_32x16_sse2,
- aom_dc_top_predictor_32x16_sse2,
- aom_dc_128_predictor_32x16_sse2, aom_v_predictor_32x16_sse2,
- aom_h_predictor_32x16_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_3, TX_32X64, aom_dc_predictor_32x64_sse2,
- aom_dc_left_predictor_32x64_sse2,
- aom_dc_top_predictor_32x64_sse2,
- aom_dc_128_predictor_32x64_sse2, aom_v_predictor_32x64_sse2,
- aom_h_predictor_32x64_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_4, TX_32X8, aom_dc_predictor_32x8_sse2,
- aom_dc_left_predictor_32x8_sse2, aom_dc_top_predictor_32x8_sse2,
- aom_dc_128_predictor_32x8_sse2, aom_v_predictor_32x8_sse2,
- aom_h_predictor_32x8_sse2, NULL, NULL, NULL, NULL)
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-INTRA_PRED_TEST(SSSE3_1, TX_32X32, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_32x32_ssse3,
- aom_smooth_predictor_32x32_ssse3,
- aom_smooth_v_predictor_32x32_ssse3,
- aom_smooth_h_predictor_32x32_ssse3)
-INTRA_PRED_TEST(SSSE3_2, TX_32X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_32x16_ssse3,
- aom_smooth_predictor_32x16_ssse3,
- aom_smooth_v_predictor_32x16_ssse3,
- aom_smooth_h_predictor_32x16_ssse3)
-INTRA_PRED_TEST(SSSE3_3, TX_32X64, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_32x64_ssse3,
- aom_smooth_predictor_32x64_ssse3,
- aom_smooth_v_predictor_32x64_ssse3,
- aom_smooth_h_predictor_32x64_ssse3)
-INTRA_PRED_TEST(SSSE3_4, TX_32X8, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_32x8_ssse3, aom_smooth_predictor_32x8_ssse3,
- aom_smooth_v_predictor_32x8_ssse3,
- aom_smooth_h_predictor_32x8_ssse3)
-#endif // HAVE_SSSE3
-
-#if HAVE_AVX2
-INTRA_PRED_TEST(AVX2_1, TX_32X32, aom_dc_predictor_32x32_avx2,
- aom_dc_left_predictor_32x32_avx2,
- aom_dc_top_predictor_32x32_avx2,
- aom_dc_128_predictor_32x32_avx2, aom_v_predictor_32x32_avx2,
- aom_h_predictor_32x32_avx2, aom_paeth_predictor_32x32_avx2,
- NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_2, TX_32X16, aom_dc_predictor_32x16_avx2,
- aom_dc_left_predictor_32x16_avx2,
- aom_dc_top_predictor_32x16_avx2,
- aom_dc_128_predictor_32x16_avx2, aom_v_predictor_32x16_avx2,
- NULL, aom_paeth_predictor_32x16_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_3, TX_32X64, aom_dc_predictor_32x64_avx2,
- aom_dc_left_predictor_32x64_avx2,
- aom_dc_top_predictor_32x64_avx2,
- aom_dc_128_predictor_32x64_avx2, aom_v_predictor_32x64_avx2,
- NULL, aom_paeth_predictor_32x64_avx2, NULL, NULL, NULL)
-#endif // HAVE_AVX2
-
-#if HAVE_NEON
-INTRA_PRED_TEST(NEON, TX_32X32, aom_dc_predictor_32x32_neon,
- aom_dc_left_predictor_32x32_neon,
- aom_dc_top_predictor_32x32_neon,
- aom_dc_128_predictor_32x32_neon, aom_v_predictor_32x32_neon,
- aom_h_predictor_32x32_neon, NULL, NULL, NULL, NULL)
-#endif // HAVE_NEON
-
-#if HAVE_MSA
-INTRA_PRED_TEST(MSA, TX_32X32, aom_dc_predictor_32x32_msa,
- aom_dc_left_predictor_32x32_msa, aom_dc_top_predictor_32x32_msa,
- aom_dc_128_predictor_32x32_msa, aom_v_predictor_32x32_msa,
- aom_h_predictor_32x32_msa, NULL, NULL, NULL, NULL)
-#endif // HAVE_MSA
-
-// -----------------------------------------------------------------------------
-// 64x64, 64x32, 64x16
-
-INTRA_PRED_TEST(C_1, TX_64X64, aom_dc_predictor_64x64_c,
- aom_dc_left_predictor_64x64_c, aom_dc_top_predictor_64x64_c,
- aom_dc_128_predictor_64x64_c, aom_v_predictor_64x64_c,
- aom_h_predictor_64x64_c, aom_paeth_predictor_64x64_c,
- aom_smooth_predictor_64x64_c, aom_smooth_v_predictor_64x64_c,
- aom_smooth_h_predictor_64x64_c)
-
-INTRA_PRED_TEST(C_2, TX_64X32, aom_dc_predictor_64x32_c,
- aom_dc_left_predictor_64x32_c, aom_dc_top_predictor_64x32_c,
- aom_dc_128_predictor_64x32_c, aom_v_predictor_64x32_c,
- aom_h_predictor_64x32_c, aom_paeth_predictor_64x32_c,
- aom_smooth_predictor_64x32_c, aom_smooth_v_predictor_64x32_c,
- aom_smooth_h_predictor_64x32_c)
-
-INTRA_PRED_TEST(C_3, TX_64X16, aom_dc_predictor_64x16_c,
- aom_dc_left_predictor_64x16_c, aom_dc_top_predictor_64x16_c,
- aom_dc_128_predictor_64x16_c, aom_v_predictor_64x16_c,
- aom_h_predictor_64x16_c, aom_paeth_predictor_64x16_c,
- aom_smooth_predictor_64x16_c, aom_smooth_v_predictor_64x16_c,
- aom_smooth_h_predictor_64x16_c)
-
-#if HAVE_SSE2
-INTRA_PRED_TEST(SSE2_4, TX_64X64, aom_dc_predictor_64x64_sse2,
- aom_dc_left_predictor_64x64_sse2,
- aom_dc_top_predictor_64x64_sse2,
- aom_dc_128_predictor_64x64_sse2, aom_v_predictor_64x64_sse2,
- aom_h_predictor_64x64_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_5, TX_64X32, aom_dc_predictor_64x32_sse2,
- aom_dc_left_predictor_64x32_sse2,
- aom_dc_top_predictor_64x32_sse2,
- aom_dc_128_predictor_64x32_sse2, aom_v_predictor_64x32_sse2,
- aom_h_predictor_64x32_sse2, NULL, NULL, NULL, NULL)
-INTRA_PRED_TEST(SSE2_6, TX_64X16, aom_dc_predictor_64x16_sse2,
- aom_dc_left_predictor_64x16_sse2,
- aom_dc_top_predictor_64x16_sse2,
- aom_dc_128_predictor_64x16_sse2, aom_v_predictor_64x16_sse2,
- aom_h_predictor_64x16_sse2, NULL, NULL, NULL, NULL)
-#endif
-
-#if HAVE_SSSE3
-INTRA_PRED_TEST(SSSE3_4, TX_64X64, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_64x64_ssse3,
- aom_smooth_predictor_64x64_ssse3,
- aom_smooth_v_predictor_64x64_ssse3,
- aom_smooth_h_predictor_64x64_ssse3)
-INTRA_PRED_TEST(SSSE3_5, TX_64X32, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_64x32_ssse3,
- aom_smooth_predictor_64x32_ssse3,
- aom_smooth_v_predictor_64x32_ssse3,
- aom_smooth_h_predictor_64x32_ssse3)
-INTRA_PRED_TEST(SSSE3_6, TX_64X16, NULL, NULL, NULL, NULL, NULL, NULL,
- aom_paeth_predictor_64x16_ssse3,
- aom_smooth_predictor_64x16_ssse3,
- aom_smooth_v_predictor_64x16_ssse3,
- aom_smooth_h_predictor_64x16_ssse3)
-#endif
-
-#if HAVE_AVX2
-INTRA_PRED_TEST(AVX2_4, TX_64X64, aom_dc_predictor_64x64_avx2,
- aom_dc_left_predictor_64x64_avx2,
- aom_dc_top_predictor_64x64_avx2,
- aom_dc_128_predictor_64x64_avx2, aom_v_predictor_64x64_avx2,
- NULL, aom_paeth_predictor_64x64_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_5, TX_64X32, aom_dc_predictor_64x32_avx2,
- aom_dc_left_predictor_64x32_avx2,
- aom_dc_top_predictor_64x32_avx2,
- aom_dc_128_predictor_64x32_avx2, aom_v_predictor_64x32_avx2,
- NULL, aom_paeth_predictor_64x32_avx2, NULL, NULL, NULL)
-INTRA_PRED_TEST(AVX2_6, TX_64X16, aom_dc_predictor_64x16_avx2,
- aom_dc_left_predictor_64x16_avx2,
- aom_dc_top_predictor_64x16_avx2,
- aom_dc_128_predictor_64x16_avx2, aom_v_predictor_64x16_avx2,
- NULL, aom_paeth_predictor_64x16_avx2, NULL, NULL, NULL)
-#endif
-// -----------------------------------------------------------------------------
-// High Bitdepth
-namespace {
-
-typedef void (*AvxHighbdPredFunc)(uint16_t *dst, ptrdiff_t y_stride,
- const uint16_t *above, const uint16_t *left,
- int bd);
-
-typedef IntraPredTestMem<uint16_t> Av1HighbdIntraPredTestMem;
-
-void TestHighbdIntraPred(TX_SIZE tx_size, AvxHighbdPredFunc const *pred_funcs,
- const char *const signatures[]) {
- const int block_width = tx_size_wide[tx_size];
- const int block_height = tx_size_high[tx_size];
- const int num_pixels_per_test =
- block_width * block_height * kNumAv1IntraFuncs;
- const int kNumTests = static_cast<int>(2.e10 / num_pixels_per_test);
- Av1HighbdIntraPredTestMem intra_pred_test_mem;
- const int bd = 12;
- intra_pred_test_mem.Init(block_width, block_height, bd);
-
- for (int k = 0; k < kNumAv1IntraFuncs; ++k) {
- if (pred_funcs[k] == NULL) continue;
- memcpy(intra_pred_test_mem.src, intra_pred_test_mem.ref_src,
- sizeof(intra_pred_test_mem.src));
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int num_tests = 0; num_tests < kNumTests; ++num_tests) {
- pred_funcs[k](intra_pred_test_mem.src, intra_pred_test_mem.stride,
- intra_pred_test_mem.above, intra_pred_test_mem.left, bd);
- }
- libaom_test::ClearSystemState();
- aom_usec_timer_mark(&timer);
- const int elapsed_time =
- static_cast<int>(aom_usec_timer_elapsed(&timer) / 1000);
- CheckMd5Signature(
- tx_size, true, signatures, intra_pred_test_mem.src,
- intra_pred_test_mem.num_pixels * sizeof(*intra_pred_test_mem.src),
- elapsed_time, k);
- }
-}
-
-static const char *const kHighbdSignatures[TX_SIZES_ALL][kNumAv1IntraFuncs] = {
- {
- // 4X4
- "11f74af6c5737df472f3275cbde062fa",
- "51bea056b6447c93f6eb8f6b7e8f6f71",
- "27e97f946766331795886f4de04c5594",
- "53ab15974b049111fb596c5168ec7e3f",
- "f0b640bb176fbe4584cf3d32a9b0320a",
- "729783ca909e03afd4b47111c80d967b",
- "6e30009c45474a22032678b1bd579c8f",
- "e57cba016d808aa8a35619df2a65f049",
- "55a6c37f39afcbbf5abca4a985b96459",
- "a623d45b37dafec1f8a75c4c5218913d",
- },
- {
- // 8X8
- "03da8829fe94663047fd108c5fcaa71d",
- "ecdb37b8120a2d3a4c706b016bd1bfd7",
- "1d4543ed8d2b9368cb96898095fe8a75",
- "f791c9a67b913cbd82d9da8ecede30e2",
- "065c70646f4dbaff913282f55a45a441",
- "51f87123616662ef7c35691497dfd0ba",
- "85c01ba03df68f9ece7bd3fa0f8980e6",
- "ad19b7dac092f56df6d054e1f67f21e7",
- "0edc415b5dd7299f7a34fb9f71d31d78",
- "2bc8ec19e9f4b77a64b8a0a1f6aec7e7",
- },
- {
- // 16X16
- "e33cb3f56a878e2fddb1b2fc51cdd275",
- "c7bff6f04b6052c8ab335d726dbbd52d",
- "d0b0b47b654a9bcc5c6008110a44589b",
- "78f5da7b10b2b9ab39f114a33b6254e9",
- "c78e31d23831abb40d6271a318fdd6f3",
- "90d1347f4ec9198a0320daecb6ff90b8",
- "e63ded54ab3d0e8728b6f24d4f01e53f",
- "35ce21fbe0ea114c089fc3489a78155d",
- "f277f6ef8e4d717f1f0dfe2706ac197d",
- "e8014d3f41256976c02e0f1e622ba2b9",
- },
- {
- // 32X32
- "a3e8056ba7e36628cce4917cd956fedd",
- "cc7d3024fe8748b512407edee045377e",
- "2aab0a0f330a1d3e19b8ecb8f06387a3",
- "a547bc3fb7b06910bf3973122a426661",
- "26f712514da95042f93d6e8dc8e431dc",
- "bb08c6e16177081daa3d936538dbc2e3",
- "84bf83f94a51b33654ca940c6f8bc057",
- "7168b03fc31bf29596a344d6a35d007c",
- "b073a70d3672f1282236994f5d12e94b",
- "c51607aebad5dcb3c1e3b58ef9e5b84e",
- },
- {
- // 64X64
- "a6baa0d4bfb2269a94c7a38f86a4bccf",
- "3f1ef5f473a49eba743f17a3324adf9d",
- "12ac11889ae5f55b7781454efd706a6a",
- "d9a906c0e692b22e1b4414e71a704b7e",
- "47d4cadd56f70c11ff8f3e5d8df81161",
- "de997744cf24c16c5ac2a36b02b351cc",
- "23781211ae178ddeb6c4bb97a6bd7d83",
- "a79d2e28340ca34b9e37daabbf030f63",
- "0372bd3ddfc258750a6ac106b70587f4",
- "228ef625d9460cbf6fa253a16a730976",
- },
- {
- // 4X8
- "22d519b796d59644043466320e4ccd14",
- "09513a738c49b3f9542d27f34abbe1d5",
- "807ae5e8813443ff01e71be6efacfb69",
- "cbfa18d0293430b6e9708b0be1fd2394",
- "346c354c34ec7fa780b576db355dab88",
- "f97dae85c35359632380b09ca98d611e",
- "698ae351d8896d89ed9e4e67b6e53eda",
- "dcc197034a9c45a3d8238bf085835f4e",
- "7a35e2c42ffdc2efc2d6d1d75a100fc7",
- "41ab6cebd4516c87a91b2a593e2c2506",
- },
- {
- // 8X4
- "d58cd4c4bf3b7bbaa5db5e1a5622ec78",
- "6e572c35aa782d00cafcb99e9ea047ea",
- "e8c22a3702b416dc9ab974505afbed09",
- "aaa4e4762a795aad7ad74de0c662c4e4",
- "a19f9101967383c3dcbd516dc317a291",
- "9ab8cb91f1a595b9ebe3fe8de58031aa",
- "2cf9021d5f1169268699807ee118b65f",
- "ee9605fcbd6fb871f1c5cd81a6989327",
- "b4871af8316089e3e23522175df7e93f",
- "d33301e1c2cb173be46792a22d19881a",
- },
- {
- // 8X16
- "4562de1d0336610880fdd5685498a9ec",
- "16310fa7076394f16fc85c4b149d89c9",
- "0e94af88e1dc573b6f0f499cddd1f530",
- "dfd245ee20d091c67809160340365aa9",
- "d3562504327f70c096c5be23fd8a3747",
- "601b853558502acbb5135eadd2da117a",
- "3c624345a723a1b2b1bea05a6a08bc99",
- "2a9c781de609e0184cc7ab442050f4e5",
- "0ddc5035c22252747126b61fc238c74d",
- "e43f5d83bab759af69c7b6773fc8f9b2",
- },
- {
- // 16X8
- "a57d6b5a9bfd30c29591d8717ace9c51",
- "f5907ba97ee6c53e339e953fc8d845ee",
- "ea3aa727913ce45af06f89dd1808db5f",
- "408af4f23e48d14b48ee35ae094fcd18",
- "85c41cbcb5d744f7961e8950026fbffe",
- "8a4e588a837638887ba671f8d4910485",
- "b792d8826b67a21757ea7097cff9e05b",
- "f94ce7101bb87fd3bb9312112527dbf4",
- "688c6660a6dc6fa61fa1aa38e708c209",
- "0cdf641b4f81d69509c92ae0b93ef5ff",
- },
- {
- // 16X32
- "aee4b3b0e3cc02d48e2c40d77f807927",
- "8baef2b2e789f79c8df9d90ad10f34a4",
- "038c38ee3c4f090bb8d736eab136aafc",
- "1a3de2aaeaffd68a9fd6c7f6557b83f3",
- "385c6e0ea29421dd81011a2934641e26",
- "6cf96c285d1a2d4787f955dad715b08c",
- "2d7f75dcd73b9528c8396279ff09ff3a",
- "5a63cd1841e4ed470e4ca5ef845f2281",
- "610d899ca945fbead33287d4335a8b32",
- "6bafaad81fce37be46730187e78d8b11",
- },
- {
- // 32X16
- "290b23c9f5a1de7905bfa71a942da29b",
- "701e7b82593c66da5052fc4b6afd79ce",
- "4da828c5455cd246735a663fbb204989",
- "e3fbeaf234efece8dbd752b77226200c",
- "4d1d8c969f05155a7e7e84cf7aad021b",
- "c22e4877c2c946d5bdc0d542e29e70cf",
- "8ac1ce815e7780500f842b0beb0bb980",
- "9fee2e2502b507f25bfad30a55b0b610",
- "4ced9c212ec6f9956e27f68a91b59fef",
- "4a7a0b93f138bb0863e4e465b01ec0b1",
- },
- {
- // 32X64
- "ad9cfc395a5c5644a21d958c7274ac14",
- "f29d6d03c143ddf96fef04c19f2c8333",
- "a8bdc852ef704dd4975c61893e8fbc3f",
- "7d0bd7dea26226741dbca9a97f27fa74",
- "45c27c5cca9a91b6ae8379feb0881c9f",
- "8a0b78df1e001b85c874d686eac4aa1b",
- "ce9fa75fac54a3f6c0cc3f2083b938f1",
- "c0dca10d88762c954af18dc9e3791a39",
- "61df229eddfccab913b8fda4bb02f9ac",
- "4f4df6bc8d50a5600b573f0e44d70e66",
- },
- {
- // 64X32
- "db9d82921fd88b24fdff6f849f2f9c87",
- "5ecc7fdc52d2f575ad4f2d0e9e6b1e11",
- "b4581311a0a73d95dfac7f8f44591032",
- "68bd283cfd1a125f6b2ee47cee874d36",
- "804179f05c032908a5e36077bb87c994",
- "fc5fd041a8ee779015394d0c066ee43c",
- "68f5579ccadfe9a1baafb158334a3db2",
- "fe237e45e215ab06d79046da9ad71e84",
- "9a8a938a6824551bf7d21b8fd1d70ea1",
- "eb7332f2017cd96882c76e7136aeaf53",
- },
- {
- // 4X16
- "7bafa307d507747b8132e7735b7f1c73",
- "e58bc2d8213a97d1fea9cfb73d7a9633",
- "435f8a8e8bbf14dbf2fe16b2be9e97aa",
- "1d0e767b68d84acbfb50b7a04e633836",
- "5f713bd7b324fe73bb7063e35ee14e5e",
- "0dac4e1fa3d59814202715468c01ed56",
- "47709d1db4a330c7a8900f450e6fddd1",
- "258e0b930bb27db28f05da9cf7d1ee7c",
- "36cf030fbae767912593efea045bfff5",
- "248d7aceabb7499febae663fae41a920",
- },
- {
- // 16X4
- "04dde98e632670e393704742c89f9067",
- "8c72543f1664651ae1fa08e2ac0adb9b",
- "2354a2cdc2773aa2df8ab4010db1be39",
- "6300ad3221c26da39b10e0e6d87ee3be",
- "8ea30b661c6ba60b28d3167f19e449b8",
- "fb6c1e4ff101a371cede63c2955cdb7e",
- "a517c06433d6d7927b16a72184a23e92",
- "393828be5d62ab6c48668bea5e2f801a",
- "b1e510c542013eb9d6fb188dea2ce90a",
- "569a8f2fe01679ca216535ecbcdccb62",
- },
- {
- // 8X32
- "9d541865c185ca7607852852613ac1fc",
- "b96be67f08c6b5fa5ebd3411299c2f7c",
- "75a2dcf50004b9d188849b048239767e",
- "429492ff415c9fd9b050d73b2ad500f8",
- "64b3606c1ccd036bd766bd5711392cf4",
- "cb59844a0f01660ac955bae3511f1100",
- "3e076155b7a70e8828618e3f33b51e3d",
- "ed2d1f597ab7c50beff690f737cf9726",
- "7909c6a26aaf20c59d996d3e5b5f9c29",
- "965798807240c98c6f7cc9b457ed0773",
- },
- {
- // 32X8
- "36f391aa31619eec1f4d9ee95ea454cc",
- "b82648f14eeba2527357cb50bc3223cb",
- "7a7b2adf429125e8bee9d1d00a66e13f",
- "4198e4d6ba503b7cc2d7e96bb845f661",
- "96c160d2ec1be9fe0cdea9682f14d257",
- "19a450bcebaa75afb4fc6bd1fd6434af",
- "2bd2e35967d43d0ec1c6587a36f204d5",
- "49799a99aa4ccfbd989bee92a99422f1",
- "955530e99813812a74659edeac3f5475",
- "f0316b84e378a19cd11b19a6e40b2914",
- },
- {
- // 16X64
- "8cba1b70a0bde29e8ef235cedc5faa7d",
- "96d00ddc7537bf7f196006591b733b4e",
- "cbf69d5d157c9f3355a4757b1d6e3414",
- "3ac1f642019493dec1b737d7a3a1b4e5",
- "35f9ee300d7fa3c97338e81a6f21dcd4",
- "aae335442e77c8ebc280f16ea50ba9c7",
- "a6140fdac2278644328be094d88731db",
- "2df93621b6ff100f7008432d509f4161",
- "c77bf5aee39e7ed4a3dd715f816f452a",
- "02109bd63557d90225c32a8f1338258e",
- },
- {
- // 64X16
- "a5e2f9fb685d5f4a048e9a96affd25a4",
- "1348f249690d9eefe09d9ad7ead2c801",
- "525da4b187acd81b1ff1116b60461141",
- "e99d072de858094c98b01bd4a6772634",
- "873bfa9dc24693f19721f7c8d527f7d3",
- "0acfc6507bd3468e9679efc127d6e4b9",
- "57d03f8d079c7264854e22ac1157cfae",
- "6c2c4036f70c7d957a9399b5436c0774",
- "42b8e4a97b7f8416c72a5148c031c0b1",
- "a38a2c5f79993dfae8530e9e25800893",
- },
-};
-
-} // namespace
-
-#define HIGHBD_INTRA_PRED_TEST(arch, tx_size, dc, dc_left, dc_top, dc_128, v, \
- h, paeth, smooth, smooth_v, smooth_h) \
- TEST(arch, DISABLED_##TestHighbdIntraPred_##tx_size) { \
- static const AvxHighbdPredFunc aom_intra_pred[] = { \
- dc, dc_left, dc_top, dc_128, v, h, paeth, smooth, smooth_v, smooth_h \
- }; \
- TestHighbdIntraPred(tx_size, aom_intra_pred, kHighbdSignatures[tx_size]); \
- }
-
-// -----------------------------------------------------------------------------
-// 4x4, 4x8, 4x16
-
-HIGHBD_INTRA_PRED_TEST(
- C_1, TX_4X4, aom_highbd_dc_predictor_4x4_c,
- aom_highbd_dc_left_predictor_4x4_c, aom_highbd_dc_top_predictor_4x4_c,
- aom_highbd_dc_128_predictor_4x4_c, aom_highbd_v_predictor_4x4_c,
- aom_highbd_h_predictor_4x4_c, aom_highbd_paeth_predictor_4x4_c,
- aom_highbd_smooth_predictor_4x4_c, aom_highbd_smooth_v_predictor_4x4_c,
- aom_highbd_smooth_h_predictor_4x4_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_2, TX_4X8, aom_highbd_dc_predictor_4x8_c,
- aom_highbd_dc_left_predictor_4x8_c, aom_highbd_dc_top_predictor_4x8_c,
- aom_highbd_dc_128_predictor_4x8_c, aom_highbd_v_predictor_4x8_c,
- aom_highbd_h_predictor_4x8_c, aom_highbd_paeth_predictor_4x8_c,
- aom_highbd_smooth_predictor_4x8_c, aom_highbd_smooth_v_predictor_4x8_c,
- aom_highbd_smooth_h_predictor_4x8_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_3, TX_4X16, aom_highbd_dc_predictor_4x16_c,
- aom_highbd_dc_left_predictor_4x16_c, aom_highbd_dc_top_predictor_4x16_c,
- aom_highbd_dc_128_predictor_4x16_c, aom_highbd_v_predictor_4x16_c,
- aom_highbd_h_predictor_4x16_c, aom_highbd_paeth_predictor_4x16_c,
- aom_highbd_smooth_predictor_4x16_c, aom_highbd_smooth_v_predictor_4x16_c,
- aom_highbd_smooth_h_predictor_4x16_c)
-
-#if HAVE_SSE2
-HIGHBD_INTRA_PRED_TEST(SSE2_1, TX_4X4, aom_highbd_dc_predictor_4x4_sse2,
- aom_highbd_dc_left_predictor_4x4_sse2,
- aom_highbd_dc_top_predictor_4x4_sse2,
- aom_highbd_dc_128_predictor_4x4_sse2,
- aom_highbd_v_predictor_4x4_sse2,
- aom_highbd_h_predictor_4x4_sse2, NULL, NULL, NULL, NULL)
-
-HIGHBD_INTRA_PRED_TEST(SSE2_2, TX_4X8, aom_highbd_dc_predictor_4x8_sse2,
- aom_highbd_dc_left_predictor_4x8_sse2,
- aom_highbd_dc_top_predictor_4x8_sse2,
- aom_highbd_dc_128_predictor_4x8_sse2,
- aom_highbd_v_predictor_4x8_sse2,
- aom_highbd_h_predictor_4x8_sse2, NULL, NULL, NULL, NULL)
-#endif
-
-// -----------------------------------------------------------------------------
-// 8x8, 8x4, 8x16, 8x32
-
-HIGHBD_INTRA_PRED_TEST(
- C_1, TX_8X8, aom_highbd_dc_predictor_8x8_c,
- aom_highbd_dc_left_predictor_8x8_c, aom_highbd_dc_top_predictor_8x8_c,
- aom_highbd_dc_128_predictor_8x8_c, aom_highbd_v_predictor_8x8_c,
- aom_highbd_h_predictor_8x8_c, aom_highbd_paeth_predictor_8x8_c,
- aom_highbd_smooth_predictor_8x8_c, aom_highbd_smooth_v_predictor_8x8_c,
- aom_highbd_smooth_h_predictor_8x8_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_2, TX_8X4, aom_highbd_dc_predictor_8x4_c,
- aom_highbd_dc_left_predictor_8x4_c, aom_highbd_dc_top_predictor_8x4_c,
- aom_highbd_dc_128_predictor_8x4_c, aom_highbd_v_predictor_8x4_c,
- aom_highbd_h_predictor_8x4_c, aom_highbd_paeth_predictor_8x4_c,
- aom_highbd_smooth_predictor_8x4_c, aom_highbd_smooth_v_predictor_8x4_c,
- aom_highbd_smooth_h_predictor_8x4_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_3, TX_8X16, aom_highbd_dc_predictor_8x16_c,
- aom_highbd_dc_left_predictor_8x16_c, aom_highbd_dc_top_predictor_8x16_c,
- aom_highbd_dc_128_predictor_8x16_c, aom_highbd_v_predictor_8x16_c,
- aom_highbd_h_predictor_8x16_c, aom_highbd_paeth_predictor_8x16_c,
- aom_highbd_smooth_predictor_8x16_c, aom_highbd_smooth_v_predictor_8x16_c,
- aom_highbd_smooth_h_predictor_8x16_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_4, TX_8X32, aom_highbd_dc_predictor_8x32_c,
- aom_highbd_dc_left_predictor_8x32_c, aom_highbd_dc_top_predictor_8x32_c,
- aom_highbd_dc_128_predictor_8x32_c, aom_highbd_v_predictor_8x32_c,
- aom_highbd_h_predictor_8x32_c, aom_highbd_paeth_predictor_8x32_c,
- aom_highbd_smooth_predictor_8x32_c, aom_highbd_smooth_v_predictor_8x32_c,
- aom_highbd_smooth_h_predictor_8x32_c)
-
-#if HAVE_SSE2
-HIGHBD_INTRA_PRED_TEST(SSE2_1, TX_8X8, aom_highbd_dc_predictor_8x8_sse2,
- aom_highbd_dc_left_predictor_8x8_sse2,
- aom_highbd_dc_top_predictor_8x8_sse2,
- aom_highbd_dc_128_predictor_8x8_sse2,
- aom_highbd_v_predictor_8x8_sse2,
- aom_highbd_h_predictor_8x8_sse2, NULL, NULL, NULL, NULL)
-HIGHBD_INTRA_PRED_TEST(SSE2_2, TX_8X4, aom_highbd_dc_predictor_8x4_sse2,
- aom_highbd_dc_left_predictor_8x4_sse2,
- aom_highbd_dc_top_predictor_8x4_sse2,
- aom_highbd_dc_128_predictor_8x4_sse2,
- aom_highbd_v_predictor_8x4_sse2,
- aom_highbd_h_predictor_8x4_sse2, NULL, NULL, NULL, NULL)
-HIGHBD_INTRA_PRED_TEST(SSE2_3, TX_8X16, aom_highbd_dc_predictor_8x16_sse2,
- aom_highbd_dc_left_predictor_8x16_sse2,
- aom_highbd_dc_top_predictor_8x16_sse2,
- aom_highbd_dc_128_predictor_8x16_sse2,
- aom_highbd_v_predictor_8x16_sse2,
- aom_highbd_h_predictor_8x16_sse2, NULL, NULL, NULL, NULL)
-#endif
-
-#if HAVE_SSSE3
-HIGHBD_INTRA_PRED_TEST(SSSE3, TX_8X8, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL)
-#endif
-
-// -----------------------------------------------------------------------------
-// 16x16, 16x8, 16x32, 16x4, 16x64
-
-HIGHBD_INTRA_PRED_TEST(
- C_1, TX_16X16, aom_highbd_dc_predictor_16x16_c,
- aom_highbd_dc_left_predictor_16x16_c, aom_highbd_dc_top_predictor_16x16_c,
- aom_highbd_dc_128_predictor_16x16_c, aom_highbd_v_predictor_16x16_c,
- aom_highbd_h_predictor_16x16_c, aom_highbd_paeth_predictor_16x16_c,
- aom_highbd_smooth_predictor_16x16_c, aom_highbd_smooth_v_predictor_16x16_c,
- aom_highbd_smooth_h_predictor_16x16_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_2, TX_16X8, aom_highbd_dc_predictor_16x8_c,
- aom_highbd_dc_left_predictor_16x8_c, aom_highbd_dc_top_predictor_16x8_c,
- aom_highbd_dc_128_predictor_16x8_c, aom_highbd_v_predictor_16x8_c,
- aom_highbd_h_predictor_16x8_c, aom_highbd_paeth_predictor_16x8_c,
- aom_highbd_smooth_predictor_16x8_c, aom_highbd_smooth_v_predictor_16x8_c,
- aom_highbd_smooth_h_predictor_16x8_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_3, TX_16X32, aom_highbd_dc_predictor_16x32_c,
- aom_highbd_dc_left_predictor_16x32_c, aom_highbd_dc_top_predictor_16x32_c,
- aom_highbd_dc_128_predictor_16x32_c, aom_highbd_v_predictor_16x32_c,
- aom_highbd_h_predictor_16x32_c, aom_highbd_paeth_predictor_16x32_c,
- aom_highbd_smooth_predictor_16x32_c, aom_highbd_smooth_v_predictor_16x32_c,
- aom_highbd_smooth_h_predictor_16x32_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_4, TX_16X4, aom_highbd_dc_predictor_16x4_c,
- aom_highbd_dc_left_predictor_16x4_c, aom_highbd_dc_top_predictor_16x4_c,
- aom_highbd_dc_128_predictor_16x4_c, aom_highbd_v_predictor_16x4_c,
- aom_highbd_h_predictor_16x4_c, aom_highbd_paeth_predictor_16x4_c,
- aom_highbd_smooth_predictor_16x4_c, aom_highbd_smooth_v_predictor_16x4_c,
- aom_highbd_smooth_h_predictor_16x4_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_5, TX_16X64, aom_highbd_dc_predictor_16x64_c,
- aom_highbd_dc_left_predictor_16x64_c, aom_highbd_dc_top_predictor_16x64_c,
- aom_highbd_dc_128_predictor_16x64_c, aom_highbd_v_predictor_16x64_c,
- aom_highbd_h_predictor_16x64_c, aom_highbd_paeth_predictor_16x64_c,
- aom_highbd_smooth_predictor_16x64_c, aom_highbd_smooth_v_predictor_16x64_c,
- aom_highbd_smooth_h_predictor_16x64_c)
-
-#if HAVE_SSE2
-HIGHBD_INTRA_PRED_TEST(SSE2_1, TX_16X16, aom_highbd_dc_predictor_16x16_sse2,
- aom_highbd_dc_left_predictor_16x16_sse2,
- aom_highbd_dc_top_predictor_16x16_sse2,
- aom_highbd_dc_128_predictor_16x16_sse2,
- aom_highbd_v_predictor_16x16_sse2,
- aom_highbd_h_predictor_16x16_sse2, NULL, NULL, NULL,
- NULL)
-HIGHBD_INTRA_PRED_TEST(SSE2_2, TX_16X8, aom_highbd_dc_predictor_16x8_sse2,
- aom_highbd_dc_left_predictor_16x8_sse2,
- aom_highbd_dc_top_predictor_16x8_sse2,
- aom_highbd_dc_128_predictor_16x8_sse2,
- aom_highbd_v_predictor_16x8_sse2,
- aom_highbd_h_predictor_16x8_sse2, NULL, NULL, NULL, NULL)
-HIGHBD_INTRA_PRED_TEST(SSE2_3, TX_16X32, aom_highbd_dc_predictor_16x32_sse2,
- aom_highbd_dc_left_predictor_16x32_sse2,
- aom_highbd_dc_top_predictor_16x32_sse2,
- aom_highbd_dc_128_predictor_16x32_sse2,
- aom_highbd_v_predictor_16x32_sse2,
- aom_highbd_h_predictor_16x32_sse2, NULL, NULL, NULL,
- NULL)
-#endif
-
-#if HAVE_SSSE3
-HIGHBD_INTRA_PRED_TEST(SSSE3_1, TX_16X16, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-#endif
-
-#if HAVE_AVX2
-HIGHBD_INTRA_PRED_TEST(AVX2_1, TX_16X16, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-
-HIGHBD_INTRA_PRED_TEST(AVX2_2, TX_16X8, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-
-HIGHBD_INTRA_PRED_TEST(AVX2_3, TX_16X32, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-#endif
-
-// -----------------------------------------------------------------------------
-// 32x32, 32x16, 32x64, 32x8
-
-HIGHBD_INTRA_PRED_TEST(
- C_1, TX_32X32, aom_highbd_dc_predictor_32x32_c,
- aom_highbd_dc_left_predictor_32x32_c, aom_highbd_dc_top_predictor_32x32_c,
- aom_highbd_dc_128_predictor_32x32_c, aom_highbd_v_predictor_32x32_c,
- aom_highbd_h_predictor_32x32_c, aom_highbd_paeth_predictor_32x32_c,
- aom_highbd_smooth_predictor_32x32_c, aom_highbd_smooth_v_predictor_32x32_c,
- aom_highbd_smooth_h_predictor_32x32_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_2, TX_32X16, aom_highbd_dc_predictor_32x16_c,
- aom_highbd_dc_left_predictor_32x16_c, aom_highbd_dc_top_predictor_32x16_c,
- aom_highbd_dc_128_predictor_32x16_c, aom_highbd_v_predictor_32x16_c,
- aom_highbd_h_predictor_32x16_c, aom_highbd_paeth_predictor_32x16_c,
- aom_highbd_smooth_predictor_32x16_c, aom_highbd_smooth_v_predictor_32x16_c,
- aom_highbd_smooth_h_predictor_32x16_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_3, TX_32X64, aom_highbd_dc_predictor_32x64_c,
- aom_highbd_dc_left_predictor_32x64_c, aom_highbd_dc_top_predictor_32x64_c,
- aom_highbd_dc_128_predictor_32x64_c, aom_highbd_v_predictor_32x64_c,
- aom_highbd_h_predictor_32x64_c, aom_highbd_paeth_predictor_32x64_c,
- aom_highbd_smooth_predictor_32x64_c, aom_highbd_smooth_v_predictor_32x64_c,
- aom_highbd_smooth_h_predictor_32x64_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_4, TX_32X8, aom_highbd_dc_predictor_32x8_c,
- aom_highbd_dc_left_predictor_32x8_c, aom_highbd_dc_top_predictor_32x8_c,
- aom_highbd_dc_128_predictor_32x8_c, aom_highbd_v_predictor_32x8_c,
- aom_highbd_h_predictor_32x8_c, aom_highbd_paeth_predictor_32x8_c,
- aom_highbd_smooth_predictor_32x8_c, aom_highbd_smooth_v_predictor_32x8_c,
- aom_highbd_smooth_h_predictor_32x8_c)
-
-#if HAVE_SSE2
-HIGHBD_INTRA_PRED_TEST(SSE2_1, TX_32X32, aom_highbd_dc_predictor_32x32_sse2,
- aom_highbd_dc_left_predictor_32x32_sse2,
- aom_highbd_dc_top_predictor_32x32_sse2,
- aom_highbd_dc_128_predictor_32x32_sse2,
- aom_highbd_v_predictor_32x32_sse2,
- aom_highbd_h_predictor_32x32_sse2, NULL, NULL, NULL,
- NULL)
-HIGHBD_INTRA_PRED_TEST(SSE2_2, TX_32X16, aom_highbd_dc_predictor_32x16_sse2,
- aom_highbd_dc_left_predictor_32x16_sse2,
- aom_highbd_dc_top_predictor_32x16_sse2,
- aom_highbd_dc_128_predictor_32x16_sse2,
- aom_highbd_v_predictor_32x16_sse2,
- aom_highbd_h_predictor_32x16_sse2, NULL, NULL, NULL,
- NULL)
-#endif
-
-#if HAVE_SSSE3
-HIGHBD_INTRA_PRED_TEST(SSSE3_1, TX_32X32, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-#endif
-
-#if HAVE_AVX2
-HIGHBD_INTRA_PRED_TEST(AVX2_1, TX_32X32, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-
-HIGHBD_INTRA_PRED_TEST(AVX2_2, TX_32X16, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL)
-#endif
-
-// -----------------------------------------------------------------------------
-// 64x64, 64x32, 64x16
-
-HIGHBD_INTRA_PRED_TEST(
- C_1, TX_64X64, aom_highbd_dc_predictor_64x64_c,
- aom_highbd_dc_left_predictor_64x64_c, aom_highbd_dc_top_predictor_64x64_c,
- aom_highbd_dc_128_predictor_64x64_c, aom_highbd_v_predictor_64x64_c,
- aom_highbd_h_predictor_64x64_c, aom_highbd_paeth_predictor_64x64_c,
- aom_highbd_smooth_predictor_64x64_c, aom_highbd_smooth_v_predictor_64x64_c,
- aom_highbd_smooth_h_predictor_64x64_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_2, TX_64X32, aom_highbd_dc_predictor_64x32_c,
- aom_highbd_dc_left_predictor_64x32_c, aom_highbd_dc_top_predictor_64x32_c,
- aom_highbd_dc_128_predictor_64x32_c, aom_highbd_v_predictor_64x32_c,
- aom_highbd_h_predictor_64x32_c, aom_highbd_paeth_predictor_64x32_c,
- aom_highbd_smooth_predictor_64x32_c, aom_highbd_smooth_v_predictor_64x32_c,
- aom_highbd_smooth_h_predictor_64x32_c)
-
-HIGHBD_INTRA_PRED_TEST(
- C_3, TX_64X16, aom_highbd_dc_predictor_64x16_c,
- aom_highbd_dc_left_predictor_64x16_c, aom_highbd_dc_top_predictor_64x16_c,
- aom_highbd_dc_128_predictor_64x16_c, aom_highbd_v_predictor_64x16_c,
- aom_highbd_h_predictor_64x16_c, aom_highbd_paeth_predictor_64x16_c,
- aom_highbd_smooth_predictor_64x16_c, aom_highbd_smooth_v_predictor_64x16_c,
- aom_highbd_smooth_h_predictor_64x16_c)
-
-// -----------------------------------------------------------------------------
-
-#include "test/test_libaom.cc"
diff --git a/third_party/aom/test/test_libaom.cc b/third_party/aom/test/test_libaom.cc
deleted file mode 100644
index b55d76237..000000000
--- a/third_party/aom/test/test_libaom.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string.h>
-
-#include <string>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-
-#if ARCH_X86 || ARCH_X86_64
-#include "aom_ports/x86.h"
-#endif
-extern "C" {
-extern void av1_rtcd();
-extern void aom_dsp_rtcd();
-extern void aom_scale_rtcd();
-}
-
-#if ARCH_X86 || ARCH_X86_64
-static void append_negative_gtest_filter(const char *str) {
- std::string filter = ::testing::FLAGS_gtest_filter;
- // Negative patterns begin with one '-' followed by a ':' separated list.
- if (filter.find('-') == std::string::npos) filter += '-';
- // OPT.* matches TEST() functions
- // OPT/* matches TEST_P() functions
- // OPT_* matches tests which have been manually sharded.
- // We do not match OPT* because of SSE/SSE2 collisions.
- const char *search_terminators = "./_";
- for (size_t pos = 0; pos < strlen(search_terminators); ++pos) {
- filter += ":";
- filter += str;
- filter += search_terminators[pos];
- filter += "*";
- }
- ::testing::FLAGS_gtest_filter = filter;
-}
-#endif // ARCH_X86 || ARCH_X86_64
-
-int main(int argc, char **argv) {
- ::testing::InitGoogleTest(&argc, argv);
-
-#if ARCH_X86 || ARCH_X86_64
- const int simd_caps = x86_simd_caps();
- if (!(simd_caps & HAS_MMX)) append_negative_gtest_filter("MMX");
- if (!(simd_caps & HAS_SSE)) append_negative_gtest_filter("SSE");
- if (!(simd_caps & HAS_SSE2)) append_negative_gtest_filter("SSE2");
- if (!(simd_caps & HAS_SSE3)) append_negative_gtest_filter("SSE3");
- if (!(simd_caps & HAS_SSSE3)) append_negative_gtest_filter("SSSE3");
- if (!(simd_caps & HAS_SSE4_1)) append_negative_gtest_filter("SSE4_1");
- if (!(simd_caps & HAS_SSE4_2)) append_negative_gtest_filter("SSE4_2");
- if (!(simd_caps & HAS_AVX)) append_negative_gtest_filter("AVX");
- if (!(simd_caps & HAS_AVX2)) append_negative_gtest_filter("AVX2");
-#endif // ARCH_X86 || ARCH_X86_64
-
-// Shared library builds don't support whitebox tests that exercise internal
-// symbols.
-#if !CONFIG_SHARED
- av1_rtcd();
- aom_dsp_rtcd();
- aom_scale_rtcd();
-#endif // !CONFIG_SHARED
-
- return RUN_ALL_TESTS();
-}
diff --git a/third_party/aom/test/test_runner.cmake b/third_party/aom/test/test_runner.cmake
deleted file mode 100644
index d3747b1e3..000000000
--- a/third_party/aom/test/test_runner.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Copyright (c) 2017, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and the
-# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
-# not distributed with this source code in the LICENSE file, you can obtain it
-# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
-# License 1.0 was not distributed with this source code in the PATENTS file, you
-# can obtain it at www.aomedia.org/license/patent.
-#
-if(NOT GTEST_TOTAL_SHARDS OR "${GTEST_SHARD_INDEX}" STREQUAL "" OR NOT
- TEST_LIBAOM)
- message(
- FATAL_ERROR
- "The variables GTEST_SHARD_INDEX, GTEST_TOTAL_SHARDS and TEST_LIBAOM
- must be defined."
- )
-endif()
-
-set($ENV{GTEST_SHARD_INDEX} ${GTEST_SHARD_INDEX})
-set($ENV{GTEST_TOTAL_SHARDS} ${GTEST_TOTAL_SHARDS})
-execute_process(COMMAND ${TEST_LIBAOM} RESULT_VARIABLE test_result)
-set(test_message "Test shard ${GTEST_SHARD_INDEX}/${GTEST_TOTAL_SHARDS} result")
-message("${test_message}: ${test_result}")
-
-if(NOT "${test_result}" STREQUAL "0")
- message(FATAL_ERROR "${test_message}: FAILED, non-zero exit code.")
-endif()
diff --git a/third_party/aom/test/test_vector_test.cc b/third_party/aom/test/test_vector_test.cc
deleted file mode 100644
index 286988b17..000000000
--- a/third_party/aom/test/test_vector_test.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdio>
-#include <cstdlib>
-#include <set>
-#include <string>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "common/tools_common.h"
-#include "config/aom_config.h"
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/ivf_video_source.h"
-#include "test/md5_helper.h"
-#include "test/test_vectors.h"
-#include "test/util.h"
-#if CONFIG_WEBM_IO
-#include "test/webm_video_source.h"
-#endif
-
-namespace {
-
-const int kThreads = 0;
-const int kFileName = 1;
-const int kRowMT = 2;
-
-typedef ::testing::tuple<int, const char *, int> DecodeParam;
-
-class TestVectorTest : public ::libaom_test::DecoderTest,
- public ::libaom_test::CodecTestWithParam<DecodeParam> {
- protected:
- TestVectorTest() : DecoderTest(GET_PARAM(0)), md5_file_(NULL) {}
-
- virtual ~TestVectorTest() {
- if (md5_file_) fclose(md5_file_);
- }
-
- void OpenMD5File(const std::string &md5_file_name_) {
- md5_file_ = libaom_test::OpenTestDataFile(md5_file_name_);
- ASSERT_TRUE(md5_file_ != NULL)
- << "Md5 file open failed. Filename: " << md5_file_name_;
- }
-
- virtual void PreDecodeFrameHook(
- const libaom_test::CompressedVideoSource &video,
- libaom_test::Decoder *decoder) {
- if (video.frame_number() == 0) decoder->Control(AV1D_SET_ROW_MT, row_mt_);
- }
-
- virtual void DecompressedFrameHook(const aom_image_t &img,
- const unsigned int frame_number) {
- ASSERT_TRUE(md5_file_ != NULL);
- char expected_md5[33];
- char junk[128];
-
- // Read correct md5 checksums.
- const int res = fscanf(md5_file_, "%s %s", expected_md5, junk);
- ASSERT_NE(res, EOF) << "Read md5 data failed";
- expected_md5[32] = '\0';
-
- ::libaom_test::MD5 md5_res;
-#if !CONFIG_LOWBITDEPTH
- const aom_img_fmt_t shifted_fmt =
- (aom_img_fmt)(img.fmt & ~AOM_IMG_FMT_HIGHBITDEPTH);
- if (img.bit_depth == 8 && shifted_fmt != img.fmt) {
- aom_image_t *img_shifted =
- aom_img_alloc(NULL, shifted_fmt, img.d_w, img.d_h, 16);
- img_shifted->bit_depth = img.bit_depth;
- img_shifted->monochrome = img.monochrome;
- aom_img_downshift(img_shifted, &img, 0);
- md5_res.Add(img_shifted);
- aom_img_free(img_shifted);
- } else {
-#endif
- md5_res.Add(&img);
-#if !CONFIG_LOWBITDEPTH
- }
-#endif
-
- const char *actual_md5 = md5_res.Get();
- // Check md5 match.
- ASSERT_STREQ(expected_md5, actual_md5)
- << "Md5 checksums don't match: frame number = " << frame_number;
- }
-
- unsigned int row_mt_;
-
- private:
- FILE *md5_file_;
-};
-
-// This test runs through the whole set of test vectors, and decodes them.
-// The md5 checksums are computed for each frame in the video file. If md5
-// checksums match the correct md5 data, then the test is passed. Otherwise,
-// the test failed.
-TEST_P(TestVectorTest, MD5Match) {
- const DecodeParam input = GET_PARAM(1);
- const std::string filename = ::testing::get<kFileName>(input);
- aom_codec_flags_t flags = 0;
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- char str[256];
-
- cfg.threads = ::testing::get<kThreads>(input);
- row_mt_ = ::testing::get<kRowMT>(input);
-
- snprintf(str, sizeof(str) / sizeof(str[0]) - 1, "file: %s threads: %d",
- filename.c_str(), cfg.threads);
- SCOPED_TRACE(str);
-
- // Open compressed video file.
- testing::internal::scoped_ptr<libaom_test::CompressedVideoSource> video;
- if (filename.substr(filename.length() - 3, 3) == "ivf") {
- video.reset(new libaom_test::IVFVideoSource(filename));
- } else if (filename.substr(filename.length() - 4, 4) == "webm" ||
- filename.substr(filename.length() - 3, 3) == "mkv") {
-#if CONFIG_WEBM_IO
- video.reset(new libaom_test::WebMVideoSource(filename));
-#else
- fprintf(stderr, "WebM IO is disabled, skipping test vector %s\n",
- filename.c_str());
- return;
-#endif
- }
- ASSERT_TRUE(video.get() != NULL);
- video->Init();
-
- // Construct md5 file name.
- const std::string md5_filename = filename + ".md5";
- OpenMD5File(md5_filename);
-
- // Set decode config and flags.
- cfg.allow_lowbitdepth = CONFIG_LOWBITDEPTH;
- set_cfg(cfg);
- set_flags(flags);
-
- // Decode frame, and check the md5 matching.
- ASSERT_NO_FATAL_FAILURE(RunLoop(video.get(), cfg));
-}
-
-#if CONFIG_AV1_DECODER
-AV1_INSTANTIATE_TEST_CASE(
- TestVectorTest,
- ::testing::Combine(::testing::Values(1), // Single thread.
- ::testing::ValuesIn(libaom_test::kAV1TestVectors,
- libaom_test::kAV1TestVectors +
- libaom_test::kNumAV1TestVectors),
- ::testing::Values(0)));
-
-// Test AV1 decode in with different numbers of threads.
-INSTANTIATE_TEST_CASE_P(
- AV1MultiThreaded, TestVectorTest,
- ::testing::Combine(
- ::testing::Values(
- static_cast<const libaom_test::CodecFactory *>(&libaom_test::kAV1)),
- ::testing::Combine(
- ::testing::Range(2, 9), // With 2 ~ 8 threads.
- ::testing::ValuesIn(libaom_test::kAV1TestVectors,
- libaom_test::kAV1TestVectors +
- libaom_test::kNumAV1TestVectors),
- ::testing::Range(0, 2))));
-
-#endif // CONFIG_AV1_DECODER
-
-} // namespace
diff --git a/third_party/aom/test/test_vectors.cc b/third_party/aom/test/test_vectors.cc
deleted file mode 100644
index 71e431e18..000000000
--- a/third_party/aom/test/test_vectors.cc
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include "test/test_vectors.h"
-
-namespace libaom_test {
-
-#define NELEMENTS(x) static_cast<int>(sizeof(x) / sizeof(x[0]))
-
-#if CONFIG_AV1_DECODER
-const char *const kAV1TestVectors[] = {
- "av1-1-b8-00-quantizer-00.ivf", "av1-1-b8-00-quantizer-01.ivf",
- "av1-1-b8-00-quantizer-02.ivf", "av1-1-b8-00-quantizer-03.ivf",
- "av1-1-b8-00-quantizer-04.ivf", "av1-1-b8-00-quantizer-05.ivf",
- "av1-1-b8-00-quantizer-06.ivf", "av1-1-b8-00-quantizer-07.ivf",
- "av1-1-b8-00-quantizer-08.ivf", "av1-1-b8-00-quantizer-09.ivf",
- "av1-1-b8-00-quantizer-10.ivf", "av1-1-b8-00-quantizer-11.ivf",
- "av1-1-b8-00-quantizer-12.ivf", "av1-1-b8-00-quantizer-13.ivf",
- "av1-1-b8-00-quantizer-14.ivf", "av1-1-b8-00-quantizer-15.ivf",
- "av1-1-b8-00-quantizer-16.ivf", "av1-1-b8-00-quantizer-17.ivf",
- "av1-1-b8-00-quantizer-18.ivf", "av1-1-b8-00-quantizer-19.ivf",
- "av1-1-b8-00-quantizer-20.ivf", "av1-1-b8-00-quantizer-21.ivf",
- "av1-1-b8-00-quantizer-22.ivf", "av1-1-b8-00-quantizer-23.ivf",
- "av1-1-b8-00-quantizer-24.ivf", "av1-1-b8-00-quantizer-25.ivf",
- "av1-1-b8-00-quantizer-26.ivf", "av1-1-b8-00-quantizer-27.ivf",
- "av1-1-b8-00-quantizer-28.ivf", "av1-1-b8-00-quantizer-29.ivf",
- "av1-1-b8-00-quantizer-30.ivf", "av1-1-b8-00-quantizer-31.ivf",
- "av1-1-b8-00-quantizer-32.ivf", "av1-1-b8-00-quantizer-33.ivf",
- "av1-1-b8-00-quantizer-34.ivf", "av1-1-b8-00-quantizer-35.ivf",
- "av1-1-b8-00-quantizer-36.ivf", "av1-1-b8-00-quantizer-37.ivf",
- "av1-1-b8-00-quantizer-38.ivf", "av1-1-b8-00-quantizer-39.ivf",
- "av1-1-b8-00-quantizer-40.ivf", "av1-1-b8-00-quantizer-41.ivf",
- "av1-1-b8-00-quantizer-42.ivf", "av1-1-b8-00-quantizer-43.ivf",
- "av1-1-b8-00-quantizer-44.ivf", "av1-1-b8-00-quantizer-45.ivf",
- "av1-1-b8-00-quantizer-46.ivf", "av1-1-b8-00-quantizer-47.ivf",
- "av1-1-b8-00-quantizer-48.ivf", "av1-1-b8-00-quantizer-49.ivf",
- "av1-1-b8-00-quantizer-50.ivf", "av1-1-b8-00-quantizer-51.ivf",
- "av1-1-b8-00-quantizer-52.ivf", "av1-1-b8-00-quantizer-53.ivf",
- "av1-1-b8-00-quantizer-54.ivf", "av1-1-b8-00-quantizer-55.ivf",
- "av1-1-b8-00-quantizer-56.ivf", "av1-1-b8-00-quantizer-57.ivf",
- "av1-1-b8-00-quantizer-58.ivf", "av1-1-b8-00-quantizer-59.ivf",
- "av1-1-b8-00-quantizer-60.ivf", "av1-1-b8-00-quantizer-61.ivf",
- "av1-1-b8-00-quantizer-62.ivf", "av1-1-b8-00-quantizer-63.ivf",
- "av1-1-b10-00-quantizer-00.ivf", "av1-1-b10-00-quantizer-01.ivf",
- "av1-1-b10-00-quantizer-02.ivf", "av1-1-b10-00-quantizer-03.ivf",
- "av1-1-b10-00-quantizer-04.ivf", "av1-1-b10-00-quantizer-05.ivf",
- "av1-1-b10-00-quantizer-06.ivf", "av1-1-b10-00-quantizer-07.ivf",
- "av1-1-b10-00-quantizer-08.ivf", "av1-1-b10-00-quantizer-09.ivf",
- "av1-1-b10-00-quantizer-10.ivf", "av1-1-b10-00-quantizer-11.ivf",
- "av1-1-b10-00-quantizer-12.ivf", "av1-1-b10-00-quantizer-13.ivf",
- "av1-1-b10-00-quantizer-14.ivf", "av1-1-b10-00-quantizer-15.ivf",
- "av1-1-b10-00-quantizer-16.ivf", "av1-1-b10-00-quantizer-17.ivf",
- "av1-1-b10-00-quantizer-18.ivf", "av1-1-b10-00-quantizer-19.ivf",
- "av1-1-b10-00-quantizer-20.ivf", "av1-1-b10-00-quantizer-21.ivf",
- "av1-1-b10-00-quantizer-22.ivf", "av1-1-b10-00-quantizer-23.ivf",
- "av1-1-b10-00-quantizer-24.ivf", "av1-1-b10-00-quantizer-25.ivf",
- "av1-1-b10-00-quantizer-26.ivf", "av1-1-b10-00-quantizer-27.ivf",
- "av1-1-b10-00-quantizer-28.ivf", "av1-1-b10-00-quantizer-29.ivf",
- "av1-1-b10-00-quantizer-30.ivf", "av1-1-b10-00-quantizer-31.ivf",
- "av1-1-b10-00-quantizer-32.ivf", "av1-1-b10-00-quantizer-33.ivf",
- "av1-1-b10-00-quantizer-34.ivf", "av1-1-b10-00-quantizer-35.ivf",
- "av1-1-b10-00-quantizer-36.ivf", "av1-1-b10-00-quantizer-37.ivf",
- "av1-1-b10-00-quantizer-38.ivf", "av1-1-b10-00-quantizer-39.ivf",
- "av1-1-b10-00-quantizer-40.ivf", "av1-1-b10-00-quantizer-41.ivf",
- "av1-1-b10-00-quantizer-42.ivf", "av1-1-b10-00-quantizer-43.ivf",
- "av1-1-b10-00-quantizer-44.ivf", "av1-1-b10-00-quantizer-45.ivf",
- "av1-1-b10-00-quantizer-46.ivf", "av1-1-b10-00-quantizer-47.ivf",
- "av1-1-b10-00-quantizer-48.ivf", "av1-1-b10-00-quantizer-49.ivf",
- "av1-1-b10-00-quantizer-50.ivf", "av1-1-b10-00-quantizer-51.ivf",
- "av1-1-b10-00-quantizer-52.ivf", "av1-1-b10-00-quantizer-53.ivf",
- "av1-1-b10-00-quantizer-54.ivf", "av1-1-b10-00-quantizer-55.ivf",
- "av1-1-b10-00-quantizer-56.ivf", "av1-1-b10-00-quantizer-57.ivf",
- "av1-1-b10-00-quantizer-58.ivf", "av1-1-b10-00-quantizer-59.ivf",
- "av1-1-b10-00-quantizer-60.ivf", "av1-1-b10-00-quantizer-61.ivf",
- "av1-1-b10-00-quantizer-62.ivf", "av1-1-b10-00-quantizer-63.ivf",
- "av1-1-b8-01-size-16x16.ivf", "av1-1-b8-01-size-16x18.ivf",
- "av1-1-b8-01-size-16x32.ivf", "av1-1-b8-01-size-16x34.ivf",
- "av1-1-b8-01-size-16x64.ivf", "av1-1-b8-01-size-16x66.ivf",
- "av1-1-b8-01-size-18x16.ivf", "av1-1-b8-01-size-18x18.ivf",
- "av1-1-b8-01-size-18x32.ivf", "av1-1-b8-01-size-18x34.ivf",
- "av1-1-b8-01-size-18x64.ivf", "av1-1-b8-01-size-18x66.ivf",
- "av1-1-b8-01-size-196x196.ivf", "av1-1-b8-01-size-196x198.ivf",
- "av1-1-b8-01-size-196x200.ivf", "av1-1-b8-01-size-196x202.ivf",
- "av1-1-b8-01-size-196x208.ivf", "av1-1-b8-01-size-196x210.ivf",
- "av1-1-b8-01-size-196x224.ivf", "av1-1-b8-01-size-196x226.ivf",
- "av1-1-b8-01-size-198x196.ivf", "av1-1-b8-01-size-198x198.ivf",
- "av1-1-b8-01-size-198x200.ivf", "av1-1-b8-01-size-198x202.ivf",
- "av1-1-b8-01-size-198x208.ivf", "av1-1-b8-01-size-198x210.ivf",
- "av1-1-b8-01-size-198x224.ivf", "av1-1-b8-01-size-198x226.ivf",
- "av1-1-b8-01-size-200x196.ivf", "av1-1-b8-01-size-200x198.ivf",
- "av1-1-b8-01-size-200x200.ivf", "av1-1-b8-01-size-200x202.ivf",
- "av1-1-b8-01-size-200x208.ivf", "av1-1-b8-01-size-200x210.ivf",
- "av1-1-b8-01-size-200x224.ivf", "av1-1-b8-01-size-200x226.ivf",
- "av1-1-b8-01-size-202x196.ivf", "av1-1-b8-01-size-202x198.ivf",
- "av1-1-b8-01-size-202x200.ivf", "av1-1-b8-01-size-202x202.ivf",
- "av1-1-b8-01-size-202x208.ivf", "av1-1-b8-01-size-202x210.ivf",
- "av1-1-b8-01-size-202x224.ivf", "av1-1-b8-01-size-202x226.ivf",
- "av1-1-b8-01-size-208x196.ivf", "av1-1-b8-01-size-208x198.ivf",
- "av1-1-b8-01-size-208x200.ivf", "av1-1-b8-01-size-208x202.ivf",
- "av1-1-b8-01-size-208x208.ivf", "av1-1-b8-01-size-208x210.ivf",
- "av1-1-b8-01-size-208x224.ivf", "av1-1-b8-01-size-208x226.ivf",
- "av1-1-b8-01-size-210x196.ivf", "av1-1-b8-01-size-210x198.ivf",
- "av1-1-b8-01-size-210x200.ivf", "av1-1-b8-01-size-210x202.ivf",
- "av1-1-b8-01-size-210x208.ivf", "av1-1-b8-01-size-210x210.ivf",
- "av1-1-b8-01-size-210x224.ivf", "av1-1-b8-01-size-210x226.ivf",
- "av1-1-b8-01-size-224x196.ivf", "av1-1-b8-01-size-224x198.ivf",
- "av1-1-b8-01-size-224x200.ivf", "av1-1-b8-01-size-224x202.ivf",
- "av1-1-b8-01-size-224x208.ivf", "av1-1-b8-01-size-224x210.ivf",
- "av1-1-b8-01-size-224x224.ivf", "av1-1-b8-01-size-224x226.ivf",
- "av1-1-b8-01-size-226x196.ivf", "av1-1-b8-01-size-226x198.ivf",
- "av1-1-b8-01-size-226x200.ivf", "av1-1-b8-01-size-226x202.ivf",
- "av1-1-b8-01-size-226x208.ivf", "av1-1-b8-01-size-226x210.ivf",
- "av1-1-b8-01-size-226x224.ivf", "av1-1-b8-01-size-226x226.ivf",
- "av1-1-b8-01-size-32x16.ivf", "av1-1-b8-01-size-32x18.ivf",
- "av1-1-b8-01-size-32x32.ivf", "av1-1-b8-01-size-32x34.ivf",
- "av1-1-b8-01-size-32x64.ivf", "av1-1-b8-01-size-32x66.ivf",
- "av1-1-b8-01-size-34x16.ivf", "av1-1-b8-01-size-34x18.ivf",
- "av1-1-b8-01-size-34x32.ivf", "av1-1-b8-01-size-34x34.ivf",
- "av1-1-b8-01-size-34x64.ivf", "av1-1-b8-01-size-34x66.ivf",
- "av1-1-b8-01-size-64x16.ivf", "av1-1-b8-01-size-64x18.ivf",
- "av1-1-b8-01-size-64x32.ivf", "av1-1-b8-01-size-64x34.ivf",
- "av1-1-b8-01-size-64x64.ivf", "av1-1-b8-01-size-64x66.ivf",
- "av1-1-b8-01-size-66x16.ivf", "av1-1-b8-01-size-66x18.ivf",
- "av1-1-b8-01-size-66x32.ivf", "av1-1-b8-01-size-66x34.ivf",
- "av1-1-b8-01-size-66x64.ivf", "av1-1-b8-01-size-66x66.ivf",
- "av1-1-b8-02-allintra.ivf", "av1-1-b8-03-sizedown.mkv",
- "av1-1-b8-03-sizeup.mkv"
-};
-const int kNumAV1TestVectors = NELEMENTS(kAV1TestVectors);
-#endif // CONFIG_AV1_DECODER
-
-} // namespace libaom_test
diff --git a/third_party/aom/test/test_vectors.h b/third_party/aom/test/test_vectors.h
deleted file mode 100644
index be37f6e37..000000000
--- a/third_party/aom/test/test_vectors.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_TEST_VECTORS_H_
-#define AOM_TEST_TEST_VECTORS_H_
-
-#include "config/aom_config.h"
-
-namespace libaom_test {
-
-#if CONFIG_AV1_DECODER
-extern const int kNumAV1TestVectors;
-extern const char *const kAV1TestVectors[];
-#endif
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_TEST_VECTORS_H_
diff --git a/third_party/aom/test/tile_independence_test.cc b/third_party/aom/test/tile_independence_test.cc
deleted file mode 100644
index cf534c0c5..000000000
--- a/third_party/aom/test/tile_independence_test.cc
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdio>
-#include <cstdlib>
-#include <string>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/encode_test_driver.h"
-#include "test/i420_video_source.h"
-#include "test/util.h"
-#include "test/md5_helper.h"
-#include "aom_mem/aom_mem.h"
-
-namespace {
-class TileIndependenceTest
- : public ::libaom_test::CodecTestWith3Params<int, int, int>,
- public ::libaom_test::EncoderTest {
- protected:
- TileIndependenceTest()
- : EncoderTest(GET_PARAM(0)), md5_fw_order_(), md5_inv_order_(),
- n_tile_cols_(GET_PARAM(1)), n_tile_rows_(GET_PARAM(2)),
- n_tile_groups_(GET_PARAM(3)) {
- init_flags_ = AOM_CODEC_USE_PSNR;
- aom_codec_dec_cfg_t cfg = aom_codec_dec_cfg_t();
- cfg.w = 704;
- cfg.h = 576;
- cfg.threads = 1;
- cfg.allow_lowbitdepth = 1;
- fw_dec_ = codec_->CreateDecoder(cfg, 0);
- inv_dec_ = codec_->CreateDecoder(cfg, 0);
- inv_dec_->Control(AV1_INVERT_TILE_DECODE_ORDER, 1);
-
- if (fw_dec_->IsAV1() && inv_dec_->IsAV1()) {
- fw_dec_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- fw_dec_->Control(AV1_SET_DECODE_TILE_COL, -1);
- inv_dec_->Control(AV1_SET_DECODE_TILE_ROW, -1);
- inv_dec_->Control(AV1_SET_DECODE_TILE_COL, -1);
- }
- }
-
- virtual ~TileIndependenceTest() {
- delete fw_dec_;
- delete inv_dec_;
- }
-
- virtual void SetUp() {
- InitializeConfig();
- SetMode(libaom_test::kTwoPassGood);
- }
-
- virtual void PreEncodeFrameHook(libaom_test::VideoSource *video,
- libaom_test::Encoder *encoder) {
- if (video->frame() == 1) {
- encoder->Control(AV1E_SET_TILE_COLUMNS, n_tile_cols_);
- encoder->Control(AV1E_SET_TILE_ROWS, n_tile_rows_);
- SetCpuUsed(encoder);
- } else if (video->frame() == 3) {
- encoder->Control(AV1E_SET_NUM_TG, n_tile_groups_);
- }
- }
-
- virtual void SetCpuUsed(libaom_test::Encoder *encoder) {
- static const int kCpuUsed = 3;
- encoder->Control(AOME_SET_CPUUSED, kCpuUsed);
- }
-
- void UpdateMD5(::libaom_test::Decoder *dec, const aom_codec_cx_pkt_t *pkt,
- ::libaom_test::MD5 *md5) {
- const aom_codec_err_t res = dec->DecodeFrame(
- reinterpret_cast<uint8_t *>(pkt->data.frame.buf), pkt->data.frame.sz);
- if (res != AOM_CODEC_OK) {
- abort_ = true;
- ASSERT_EQ(AOM_CODEC_OK, res);
- }
- const aom_image_t *img = dec->GetDxData().Next();
- md5->Add(img);
- }
-
- virtual void FramePktHook(const aom_codec_cx_pkt_t *pkt) {
- UpdateMD5(fw_dec_, pkt, &md5_fw_order_);
- UpdateMD5(inv_dec_, pkt, &md5_inv_order_);
- }
-
- void DoTest() {
- const aom_rational timebase = { 33333333, 1000000000 };
- cfg_.g_timebase = timebase;
- cfg_.rc_target_bitrate = 500;
- cfg_.g_lag_in_frames = 12;
- cfg_.rc_end_usage = AOM_VBR;
-
- libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 704, 576,
- timebase.den, timebase.num, 0, 5);
- ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
-
- const char *md5_fw_str = md5_fw_order_.Get();
- const char *md5_inv_str = md5_inv_order_.Get();
- ASSERT_STREQ(md5_fw_str, md5_inv_str);
- }
-
- ::libaom_test::MD5 md5_fw_order_, md5_inv_order_;
- ::libaom_test::Decoder *fw_dec_, *inv_dec_;
-
- private:
- int n_tile_cols_;
- int n_tile_rows_;
- int n_tile_groups_;
-};
-
-// run an encode with 2 or 4 tiles, and do the decode both in normal and
-// inverted tile ordering. Ensure that the MD5 of the output in both cases
-// is identical. If so, tiles are considered independent and the test passes.
-TEST_P(TileIndependenceTest, MD5Match) {
- cfg_.large_scale_tile = 0;
- fw_dec_->Control(AV1_SET_TILE_MODE, 0);
- inv_dec_->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-class TileIndependenceTestLarge : public TileIndependenceTest {
- virtual void SetCpuUsed(libaom_test::Encoder *encoder) {
- static const int kCpuUsed = 0;
- encoder->Control(AOME_SET_CPUUSED, kCpuUsed);
- }
-};
-
-TEST_P(TileIndependenceTestLarge, MD5Match) {
- cfg_.large_scale_tile = 0;
- fw_dec_->Control(AV1_SET_TILE_MODE, 0);
- inv_dec_->Control(AV1_SET_TILE_MODE, 0);
- DoTest();
-}
-
-AV1_INSTANTIATE_TEST_CASE(TileIndependenceTest, ::testing::Values(0, 1),
- ::testing::Values(0, 1), ::testing::Values(1, 2, 4));
-AV1_INSTANTIATE_TEST_CASE(TileIndependenceTestLarge, ::testing::Values(0, 1),
- ::testing::Values(0, 1), ::testing::Values(1, 2, 4));
-
-class TileIndependenceLSTest : public TileIndependenceTest {};
-
-TEST_P(TileIndependenceLSTest, MD5Match) {
- cfg_.large_scale_tile = 1;
- fw_dec_->Control(AV1_SET_TILE_MODE, 1);
- fw_dec_->Control(AV1D_EXT_TILE_DEBUG, 1);
- inv_dec_->Control(AV1_SET_TILE_MODE, 1);
- inv_dec_->Control(AV1D_EXT_TILE_DEBUG, 1);
- DoTest();
-}
-
-class TileIndependenceLSTestLarge : public TileIndependenceTestLarge {};
-
-TEST_P(TileIndependenceLSTestLarge, MD5Match) {
- cfg_.large_scale_tile = 1;
- fw_dec_->Control(AV1_SET_TILE_MODE, 1);
- fw_dec_->Control(AV1D_EXT_TILE_DEBUG, 1);
- inv_dec_->Control(AV1_SET_TILE_MODE, 1);
- inv_dec_->Control(AV1D_EXT_TILE_DEBUG, 1);
- DoTest();
-}
-
-AV1_INSTANTIATE_TEST_CASE(TileIndependenceLSTest, ::testing::Values(6),
- ::testing::Values(6), ::testing::Values(1));
-AV1_INSTANTIATE_TEST_CASE(TileIndependenceLSTestLarge, ::testing::Values(6),
- ::testing::Values(6), ::testing::Values(1));
-} // namespace
diff --git a/third_party/aom/test/tools_common.sh b/third_party/aom/test/tools_common.sh
deleted file mode 100755
index c08710606..000000000
--- a/third_party/aom/test/tools_common.sh
+++ /dev/null
@@ -1,477 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file contains shell code shared by test scripts for libaom tools.
-
-# Use $AOM_TEST_TOOLS_COMMON_SH as a pseudo include guard.
-if [ -z "${AOM_TEST_TOOLS_COMMON_SH}" ]; then
-AOM_TEST_TOOLS_COMMON_SH=included
-
-set -e
-devnull='> /dev/null 2>&1'
-AOM_TEST_PREFIX=""
-
-elog() {
- echo "$@" 1>&2
-}
-
-vlog() {
- if [ "${AOM_TEST_VERBOSE_OUTPUT}" = "yes" ]; then
- echo "$@"
- fi
-}
-
-# Sets $AOM_TOOL_TEST to the name specified by positional parameter one.
-test_begin() {
- AOM_TOOL_TEST="${1}"
-}
-
-# Clears the AOM_TOOL_TEST variable after confirming that $AOM_TOOL_TEST matches
-# positional parameter one.
-test_end() {
- if [ "$1" != "${AOM_TOOL_TEST}" ]; then
- echo "FAIL completed test mismatch!."
- echo " completed test: ${1}"
- echo " active test: ${AOM_TOOL_TEST}."
- return 1
- fi
- AOM_TOOL_TEST='<unset>'
-}
-
-# Echoes the target configuration being tested.
-test_configuration_target() {
- aom_config_c="${LIBAOM_CONFIG_PATH}/config/aom_config.c"
- # Clean up the cfg pointer line from aom_config.c for easier re-use by
- # someone examining a failure in the example tests.
- # 1. Run grep on aom_config.c for cfg and limit the results to 1.
- # 2. Split the line using ' = ' as separator.
- # 3. Abuse sed to consume the leading " and trailing "; from the assignment
- # to the cfg pointer.
- cmake_config=$(awk -F ' = ' '/cfg/ { print $NF; exit }' "${aom_config_c}" \
- | sed -e s/\"// -e s/\"\;//)
- echo cmake generated via command: cmake path/to/aom ${cmake_config}
-}
-
-# Trap function used for failure reports and tool output directory removal.
-# When the contents of $AOM_TOOL_TEST do not match the string '<unset>', reports
-# failure of test stored in $AOM_TOOL_TEST.
-cleanup() {
- if [ -n "${AOM_TOOL_TEST}" ] && [ "${AOM_TOOL_TEST}" != '<unset>' ]; then
- echo "FAIL: $AOM_TOOL_TEST"
- fi
- if [ "${AOM_TEST_PRESERVE_OUTPUT}" = "yes" ]; then
- return
- fi
- if [ -n "${AOM_TEST_OUTPUT_DIR}" ] && [ -d "${AOM_TEST_OUTPUT_DIR}" ]; then
- rm -rf "${AOM_TEST_OUTPUT_DIR}"
- fi
-}
-
-# Echoes the version string assigned to the VERSION_STRING_NOSP variable defined
-# in $LIBAOM_CONFIG_PATH/config/aom_version.h to stdout.
-cmake_version() {
- aom_version_h="${LIBAOM_CONFIG_PATH}/config/aom_version.h"
-
- # Find VERSION_STRING_NOSP line, split it with '"' and print the next to last
- # field to output the version string to stdout.
- aom_version=$(awk -F \" '/VERSION_STRING_NOSP/ {print $(NF-1)}' \
- "${aom_version_h}")
- echo "v${aom_version}"
-}
-
-# Echoes current git version as reported by running 'git describe', or the
-# version used by the cmake build when git is unavailable.
-source_version() {
- if git --version > /dev/null 2>&1; then
- (cd "$(dirname "${0}")"
- git describe)
- else
- cmake_version
- fi
-}
-
-# Echoes warnings to stdout when source version and CMake build generated
-# version are out of sync.
-check_version_strings() {
- cmake_version=$(cmake_version)
- source_version=$(source_version)
-
- if [ "${cmake_version}" != "${source_version}" ]; then
- echo "Warning: version has changed since last cmake run."
- vlog " cmake version: ${cmake_version} version now: ${source_version}"
- fi
-}
-
-# $1 is the name of an environment variable containing a directory name to
-# test.
-test_env_var_dir() {
- local dir=$(eval echo "\${$1}")
- if [ ! -d "${dir}" ]; then
- elog "'${dir}': No such directory"
- elog "The $1 environment variable must be set to a valid directory."
- return 1
- fi
-}
-
-# This script requires that the LIBAOM_BIN_PATH, LIBAOM_CONFIG_PATH, and
-# LIBAOM_TEST_DATA_PATH variables are in the environment: Confirm that
-# the variables are set and that they all evaluate to directory paths.
-verify_aom_test_environment() {
- test_env_var_dir "LIBAOM_BIN_PATH" \
- && test_env_var_dir "LIBAOM_CONFIG_PATH" \
- && test_env_var_dir "LIBAOM_TEST_DATA_PATH"
-}
-
-# Greps aom_config.h in LIBAOM_CONFIG_PATH for positional parameter one, which
-# should be a LIBAOM preprocessor flag. Echoes yes to stdout when the feature
-# is available.
-aom_config_option_enabled() {
- aom_config_option="${1}"
- aom_config_file="${LIBAOM_CONFIG_PATH}/config/aom_config.h"
- config_line=$(grep "${aom_config_option}" "${aom_config_file}")
- if echo "${config_line}" | egrep -q '1$'; then
- echo yes
- fi
-}
-
-# Echoes yes when output of test_configuration_target() contains win32 or win64.
-is_windows_target() {
- if test_configuration_target \
- | grep -q -e win32 -e win64 > /dev/null 2>&1; then
- echo yes
- fi
-}
-
-# Echoes path to $1 when it's executable and exists in one of the directories
-# included in $tool_paths, or an empty string. Caller is responsible for testing
-# the string once the function returns.
-aom_tool_path() {
- local tool_name="$1"
- local root_path="${LIBAOM_BIN_PATH}"
- local suffix="${AOM_TEST_EXE_SUFFIX}"
- local tool_paths="\
- ${root_path}/${tool_name}${suffix} \
- ${root_path}/../${tool_name}${suffix} \
- ${root_path}/tools/${tool_name}${suffix} \
- ${root_path}/../tools/${tool_name}${suffix}"
-
- local toolpath=""
-
- for tool_path in ${tool_paths}; do
- if [ -x "${tool_path}" ] && [ -f "${tool_path}" ]; then
- echo "${tool_path}"
- return 0
- fi
- done
-
- return 1
-}
-
-# Echoes yes to stdout when the file named by positional parameter one exists
-# in LIBAOM_BIN_PATH, and is executable.
-aom_tool_available() {
- local tool_name="$1"
- local tool="${LIBAOM_BIN_PATH}/${tool_name}${AOM_TEST_EXE_SUFFIX}"
- [ -x "${tool}" ] && echo yes
-}
-
-# Echoes yes to stdout when aom_config_option_enabled() reports yes for
-# CONFIG_AV1_DECODER.
-av1_decode_available() {
- [ "$(aom_config_option_enabled CONFIG_AV1_DECODER)" = "yes" ] && echo yes
-}
-
-# Echoes yes to stdout when aom_config_option_enabled() reports yes for
-# CONFIG_AV1_ENCODER.
-av1_encode_available() {
- [ "$(aom_config_option_enabled CONFIG_AV1_ENCODER)" = "yes" ] && echo yes
-}
-
-# Echoes "fast" encode params for use with aomenc.
-aomenc_encode_test_fast_params() {
- echo "--cpu-used=1
- --limit=${AV1_ENCODE_TEST_FRAME_LIMIT}
- --lag-in-frames=0
- --test-decode=fatal"
-}
-
-# Echoes yes to stdout when aom_config_option_enabled() reports yes for
-# CONFIG_WEBM_IO.
-webm_io_available() {
- [ "$(aom_config_option_enabled CONFIG_WEBM_IO)" = "yes" ] && echo yes
-}
-
-# Filters strings from $1 using the filter specified by $2. Filter behavior
-# depends on the presence of $3. When $3 is present, strings that match the
-# filter are excluded. When $3 is omitted, strings matching the filter are
-# included.
-# The filtered result is echoed to stdout.
-filter_strings() {
- strings=${1}
- filter=${2}
- exclude=${3}
-
- if [ -n "${exclude}" ]; then
- # When positional parameter three exists the caller wants to remove strings.
- # Tell grep to invert matches using the -v argument.
- exclude='-v'
- else
- unset exclude
- fi
-
- if [ -n "${filter}" ]; then
- for s in ${strings}; do
- if echo "${s}" | egrep -q ${exclude} "${filter}" > /dev/null 2>&1; then
- filtered_strings="${filtered_strings} ${s}"
- fi
- done
- else
- filtered_strings="${strings}"
- fi
- echo "${filtered_strings}"
-}
-
-# Runs user test functions passed via positional parameters one and two.
-# Functions in positional parameter one are treated as environment verification
-# functions and are run unconditionally. Functions in positional parameter two
-# are run according to the rules specified in aom_test_usage().
-run_tests() {
- local env_tests="verify_aom_test_environment $1"
- local tests_to_filter="$2"
- local test_name="${AOM_TEST_NAME}"
-
- if [ -z "${test_name}" ]; then
- test_name="$(basename "${0%.*}")"
- fi
-
- if [ "${AOM_TEST_RUN_DISABLED_TESTS}" != "yes" ]; then
- # Filter out DISABLED tests.
- tests_to_filter=$(filter_strings "${tests_to_filter}" ^DISABLED exclude)
- fi
-
- if [ -n "${AOM_TEST_FILTER}" ]; then
- # Remove tests not matching the user's filter.
- tests_to_filter=$(filter_strings "${tests_to_filter}" ${AOM_TEST_FILTER})
- fi
-
- # User requested test listing: Dump test names and return.
- if [ "${AOM_TEST_LIST_TESTS}" = "yes" ]; then
- for test_name in $tests_to_filter; do
- echo ${test_name}
- done
- return
- fi
-
- # Don't bother with the environment tests if everything else was disabled.
- [ -z "${tests_to_filter}" ] && return
-
- # Combine environment and actual tests.
- local tests_to_run="${env_tests} ${tests_to_filter}"
-
- check_version_strings
-
- # Run tests.
- for test in ${tests_to_run}; do
- test_begin "${test}"
- vlog " RUN ${test}"
- "${test}"
- vlog " PASS ${test}"
- test_end "${test}"
- done
-
- local tested_config="$(test_configuration_target) @ $(source_version)"
- echo "${test_name}: Done, all tests pass for ${tested_config}."
-}
-
-aom_test_usage() {
-cat << EOF
- Usage: ${0##*/} [arguments]
- --bin-path <path to libaom binaries directory>
- --config-path <path to libaom config directory>
- --filter <filter>: User test filter. Only tests matching filter are run.
- --run-disabled-tests: Run disabled tests.
- --help: Display this message and exit.
- --test-data-path <path to libaom test data directory>
- --show-program-output: Shows output from all programs being tested.
- --prefix: Allows for a user specified prefix to be inserted before all test
- programs. Grants the ability, for example, to run test programs
- within valgrind.
- --list-tests: List all test names and exit without actually running tests.
- --verbose: Verbose output.
-
- When the --bin-path option is not specified the script attempts to use
- \$LIBAOM_BIN_PATH and then the current directory.
-
- When the --config-path option is not specified the script attempts to use
- \$LIBAOM_CONFIG_PATH and then the current directory.
-
- When the -test-data-path option is not specified the script attempts to use
- \$LIBAOM_TEST_DATA_PATH and then the current directory.
-EOF
-}
-
-# Returns non-zero (failure) when required environment variables are empty
-# strings.
-aom_test_check_environment() {
- if [ -z "${LIBAOM_BIN_PATH}" ] || \
- [ -z "${LIBAOM_CONFIG_PATH}" ] || \
- [ -z "${LIBAOM_TEST_DATA_PATH}" ]; then
- return 1
- fi
-}
-
-# Echo aomenc command line parameters allowing use of a raw yuv file as
-# input to aomenc.
-yuv_raw_input() {
- echo ""${YUV_RAW_INPUT}"
- --width="${YUV_RAW_INPUT_WIDTH}"
- --height="${YUV_RAW_INPUT_HEIGHT}""
-}
-
-# Do a small encode for testing decoders.
-encode_yuv_raw_input_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- local output="$1"
- local encoder="$(aom_tool_path aomenc)"
- shift
- eval "${encoder}" $(yuv_raw_input) \
- $(aomenc_encode_test_fast_params) \
- --output="${output}" \
- $@ \
- ${devnull}
-
- if [ ! -e "${output}" ]; then
- elog "Output file does not exist."
- return 1
- fi
- fi
-}
-
-# Parse the command line.
-while [ -n "$1" ]; do
- case "$1" in
- --bin-path)
- LIBAOM_BIN_PATH="$2"
- shift
- ;;
- --config-path)
- LIBAOM_CONFIG_PATH="$2"
- shift
- ;;
- --filter)
- AOM_TEST_FILTER="$2"
- shift
- ;;
- --run-disabled-tests)
- AOM_TEST_RUN_DISABLED_TESTS=yes
- ;;
- --help)
- aom_test_usage
- exit
- ;;
- --test-data-path)
- LIBAOM_TEST_DATA_PATH="$2"
- shift
- ;;
- --prefix)
- AOM_TEST_PREFIX="$2"
- shift
- ;;
- --verbose)
- AOM_TEST_VERBOSE_OUTPUT=yes
- ;;
- --show-program-output)
- devnull=
- ;;
- --list-tests)
- AOM_TEST_LIST_TESTS=yes
- ;;
- *)
- aom_test_usage
- exit 1
- ;;
- esac
- shift
-done
-
-# Handle running the tests from a build directory without arguments when running
-# the tests on *nix/macosx.
-LIBAOM_BIN_PATH="${LIBAOM_BIN_PATH:-.}"
-LIBAOM_CONFIG_PATH="${LIBAOM_CONFIG_PATH:-.}"
-LIBAOM_TEST_DATA_PATH="${LIBAOM_TEST_DATA_PATH:-.}"
-
-# Create a temporary directory for output files, and a trap to clean it up.
-if [ -n "${TMPDIR}" ]; then
- AOM_TEST_TEMP_ROOT="${TMPDIR}"
-elif [ -n "${TEMPDIR}" ]; then
- AOM_TEST_TEMP_ROOT="${TEMPDIR}"
-else
- AOM_TEST_TEMP_ROOT=/tmp
-fi
-
-AOM_TEST_OUTPUT_DIR="${AOM_TEST_OUTPUT_DIR:-${AOM_TEST_TEMP_ROOT}/aom_test_$$}"
-
-if ! mkdir -p "${AOM_TEST_OUTPUT_DIR}" || \
- [ ! -d "${AOM_TEST_OUTPUT_DIR}" ]; then
- echo "${0##*/}: Cannot create output directory, giving up."
- echo "${0##*/}: AOM_TEST_OUTPUT_DIR=${AOM_TEST_OUTPUT_DIR}"
- exit 1
-fi
-
-AOM_TEST_PRESERVE_OUTPUT=${AOM_TEST_PRESERVE_OUTPUT:-no}
-
-if [ "$(is_windows_target)" = "yes" ]; then
- AOM_TEST_EXE_SUFFIX=".exe"
-fi
-
-# Variables shared by tests.
-AV1_ENCODE_CPU_USED=${AV1_ENCODE_CPU_USED:-1}
-AV1_ENCODE_TEST_FRAME_LIMIT=${AV1_ENCODE_TEST_FRAME_LIMIT:-5}
-AV1_IVF_FILE="${AV1_IVF_FILE:-${AOM_TEST_OUTPUT_DIR}/av1.ivf}"
-AV1_OBU_ANNEXB_FILE="${AV1_OBU_ANNEXB_FILE:-${AOM_TEST_OUTPUT_DIR}/av1.annexb.obu}"
-AV1_OBU_SEC5_FILE="${AV1_OBU_SEC5_FILE:-${AOM_TEST_OUTPUT_DIR}/av1.section5.obu}"
-AV1_WEBM_FILE="${AV1_WEBM_FILE:-${AOM_TEST_OUTPUT_DIR}/av1.webm}"
-
-YUV_RAW_INPUT="${LIBAOM_TEST_DATA_PATH}/hantro_collage_w352h288.yuv"
-YUV_RAW_INPUT_WIDTH=352
-YUV_RAW_INPUT_HEIGHT=288
-
-Y4M_NOSQ_PAR_INPUT="${LIBAOM_TEST_DATA_PATH}/park_joy_90p_8_420_a10-1.y4m"
-Y4M_720P_INPUT="${LIBAOM_TEST_DATA_PATH}/niklas_1280_720_30.y4m"
-
-# Setup a trap function to clean up after tests complete.
-trap cleanup EXIT
-
-vlog "$(basename "${0%.*}") test configuration:
- LIBAOM_BIN_PATH=${LIBAOM_BIN_PATH}
- LIBAOM_CONFIG_PATH=${LIBAOM_CONFIG_PATH}
- LIBAOM_TEST_DATA_PATH=${LIBAOM_TEST_DATA_PATH}
- AOM_TEST_EXE_SUFFIX=${AOM_TEST_EXE_SUFFIX}
- AOM_TEST_FILTER=${AOM_TEST_FILTER}
- AOM_TEST_LIST_TESTS=${AOM_TEST_LIST_TESTS}
- AOM_TEST_OUTPUT_DIR=${AOM_TEST_OUTPUT_DIR}
- AOM_TEST_PREFIX=${AOM_TEST_PREFIX}
- AOM_TEST_PRESERVE_OUTPUT=${AOM_TEST_PRESERVE_OUTPUT}
- AOM_TEST_RUN_DISABLED_TESTS=${AOM_TEST_RUN_DISABLED_TESTS}
- AOM_TEST_SHOW_PROGRAM_OUTPUT=${AOM_TEST_SHOW_PROGRAM_OUTPUT}
- AOM_TEST_TEMP_ROOT=${AOM_TEST_TEMP_ROOT}
- AOM_TEST_VERBOSE_OUTPUT=${AOM_TEST_VERBOSE_OUTPUT}
- AV1_ENCODE_CPU_USED=${AV1_ENCODE_CPU_USED}
- AV1_ENCODE_TEST_FRAME_LIMIT=${AV1_ENCODE_TEST_FRAME_LIMIT}
- AV1_IVF_FILE=${AV1_IVF_FILE}
- AV1_OBU_ANNEXB_FILE=${AV1_OBU_ANNEXB_FILE}
- AV1_OBU_SEC5_FILE=${AV1_OBU_SEC5_FILE}
- AV1_WEBM_FILE=${AV1_WEBM_FILE}
- YUV_RAW_INPUT=${YUV_RAW_INPUT}
- YUV_RAW_INPUT_WIDTH=${YUV_RAW_INPUT_WIDTH}
- YUV_RAW_INPUT_HEIGHT=${YUV_RAW_INPUT_HEIGHT}
- Y4M_NOSQ_PAR_INPUT=${Y4M_NOSQ_PAR_INPUT}"
-
-fi # End $AOM_TEST_TOOLS_COMMON_SH pseudo include guard.
diff --git a/third_party/aom/test/transform_test_base.h b/third_party/aom/test/transform_test_base.h
deleted file mode 100644
index 8ebcf5ff7..000000000
--- a/third_party/aom/test/transform_test_base.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_TRANSFORM_TEST_BASE_H_
-#define AOM_TEST_TRANSFORM_TEST_BASE_H_
-
-#include "config/aom_config.h"
-
-#include "aom_mem/aom_mem.h"
-#include "aom/aom_codec.h"
-#include "aom_dsp/txfm_common.h"
-
-namespace libaom_test {
-
-// Note:
-// Same constant are defined in av1/common/av1_entropy.h and
-// av1/common/entropy.h. Goal is to make this base class
-// to use for future codec transform testing. But including
-// either of them would lead to compiling error when we do
-// unit test for another codec. Suggest to move the definition
-// to a aom header file.
-const int kDctMaxValue = 16384;
-
-typedef void (*FhtFunc)(const int16_t *in, tran_low_t *out, int stride,
- TxfmParam *txfm_param);
-
-typedef void (*IhtFunc)(const tran_low_t *in, uint8_t *out, int stride,
- const TxfmParam *txfm_param);
-
-class TransformTestBase {
- public:
- virtual ~TransformTestBase() {}
-
- protected:
- virtual void RunFwdTxfm(const int16_t *in, tran_low_t *out, int stride) = 0;
-
- virtual void RunInvTxfm(const tran_low_t *out, uint8_t *dst, int stride) = 0;
-
- void RunAccuracyCheck(uint32_t ref_max_error, double ref_avg_error) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- uint32_t max_error = 0;
- int64_t total_error = 0;
- const int count_test_block = 10000;
-
- int16_t *test_input_block = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(int16_t) * num_coeffs_));
- tran_low_t *test_temp_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
- uint8_t *dst = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * num_coeffs_));
- uint8_t *src = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * num_coeffs_));
- uint16_t *dst16 = reinterpret_cast<uint16_t *>(
- aom_memalign(16, sizeof(uint16_t) * num_coeffs_));
- uint16_t *src16 = reinterpret_cast<uint16_t *>(
- aom_memalign(16, sizeof(uint16_t) * num_coeffs_));
-
- for (int i = 0; i < count_test_block; ++i) {
- // Initialize a test block with input range [-255, 255].
- for (int j = 0; j < num_coeffs_; ++j) {
- if (bit_depth_ == AOM_BITS_8) {
- src[j] = rnd.Rand8();
- dst[j] = rnd.Rand8();
- test_input_block[j] = src[j] - dst[j];
- } else {
- src16[j] = rnd.Rand16() & mask_;
- dst16[j] = rnd.Rand16() & mask_;
- test_input_block[j] = src16[j] - dst16[j];
- }
- }
-
- ASM_REGISTER_STATE_CHECK(
- RunFwdTxfm(test_input_block, test_temp_block, pitch_));
- if (bit_depth_ == AOM_BITS_8) {
- ASM_REGISTER_STATE_CHECK(RunInvTxfm(test_temp_block, dst, pitch_));
- } else {
- ASM_REGISTER_STATE_CHECK(
- RunInvTxfm(test_temp_block, CONVERT_TO_BYTEPTR(dst16), pitch_));
- }
-
- for (int j = 0; j < num_coeffs_; ++j) {
- const int diff =
- bit_depth_ == AOM_BITS_8 ? dst[j] - src[j] : dst16[j] - src16[j];
- const uint32_t error = diff * diff;
- if (max_error < error) max_error = error;
- total_error += error;
- }
- }
-
- double avg_error = total_error * 1. / count_test_block / num_coeffs_;
-
- EXPECT_GE(ref_max_error, max_error)
- << "Error: FHT/IHT has an individual round trip error > "
- << ref_max_error;
-
- EXPECT_GE(ref_avg_error, avg_error)
- << "Error: FHT/IHT has average round trip error > " << ref_avg_error
- << " per block";
-
- aom_free(test_input_block);
- aom_free(test_temp_block);
- aom_free(dst);
- aom_free(src);
- aom_free(dst16);
- aom_free(src16);
- }
-
- void RunCoeffCheck() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int count_test_block = 5000;
-
- // Use a stride value which is not the width of any transform, to catch
- // cases where the transforms use the stride incorrectly.
- int stride = 96;
-
- int16_t *input_block = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(int16_t) * stride * height_));
- tran_low_t *output_ref_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
- tran_low_t *output_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
-
- for (int i = 0; i < count_test_block; ++i) {
- int j, k;
- for (j = 0; j < height_; ++j) {
- for (k = 0; k < pitch_; ++k) {
- int in_idx = j * stride + k;
- int out_idx = j * pitch_ + k;
- input_block[in_idx] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
- if (bit_depth_ == AOM_BITS_8) {
- output_block[out_idx] = output_ref_block[out_idx] = rnd.Rand8();
- } else {
- output_block[out_idx] = output_ref_block[out_idx] =
- rnd.Rand16() & mask_;
- }
- }
- }
-
- fwd_txfm_ref(input_block, output_ref_block, stride, &txfm_param_);
- ASM_REGISTER_STATE_CHECK(RunFwdTxfm(input_block, output_block, stride));
-
- // The minimum quant value is 4.
- for (j = 0; j < height_; ++j) {
- for (k = 0; k < pitch_; ++k) {
- int out_idx = j * pitch_ + k;
- ASSERT_EQ(output_block[out_idx], output_ref_block[out_idx])
- << "Error: not bit-exact result at index: " << out_idx
- << " at test block: " << i;
- }
- }
- }
- aom_free(input_block);
- aom_free(output_ref_block);
- aom_free(output_block);
- }
-
- void RunInvCoeffCheck() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int count_test_block = 5000;
-
- // Use a stride value which is not the width of any transform, to catch
- // cases where the transforms use the stride incorrectly.
- int stride = 96;
-
- int16_t *input_block = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(int16_t) * num_coeffs_));
- tran_low_t *trans_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
- uint8_t *output_block = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * stride * height_));
- uint8_t *output_ref_block = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * stride * height_));
-
- for (int i = 0; i < count_test_block; ++i) {
- // Initialize a test block with input range [-mask_, mask_].
- int j, k;
- for (j = 0; j < height_; ++j) {
- for (k = 0; k < pitch_; ++k) {
- int in_idx = j * pitch_ + k;
- int out_idx = j * stride + k;
- input_block[in_idx] = (rnd.Rand16() & mask_) - (rnd.Rand16() & mask_);
- output_ref_block[out_idx] = rnd.Rand16() & mask_;
- output_block[out_idx] = output_ref_block[out_idx];
- }
- }
-
- fwd_txfm_ref(input_block, trans_block, pitch_, &txfm_param_);
-
- inv_txfm_ref(trans_block, output_ref_block, stride, &txfm_param_);
- ASM_REGISTER_STATE_CHECK(RunInvTxfm(trans_block, output_block, stride));
-
- for (j = 0; j < height_; ++j) {
- for (k = 0; k < pitch_; ++k) {
- int out_idx = j * stride + k;
- ASSERT_EQ(output_block[out_idx], output_ref_block[out_idx])
- << "Error: not bit-exact result at index: " << out_idx
- << " j = " << j << " k = " << k << " at test block: " << i;
- }
- }
- }
- aom_free(input_block);
- aom_free(trans_block);
- aom_free(output_ref_block);
- aom_free(output_block);
- }
-
- void RunMemCheck() {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int count_test_block = 5000;
-
- int16_t *input_extreme_block = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(int16_t) * num_coeffs_));
- tran_low_t *output_ref_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
- tran_low_t *output_block = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
-
- for (int i = 0; i < count_test_block; ++i) {
- // Initialize a test block with input range [-mask_, mask_].
- for (int j = 0; j < num_coeffs_; ++j) {
- input_extreme_block[j] = rnd.Rand8() % 2 ? mask_ : -mask_;
- }
- if (i == 0) {
- for (int j = 0; j < num_coeffs_; ++j) input_extreme_block[j] = mask_;
- } else if (i == 1) {
- for (int j = 0; j < num_coeffs_; ++j) input_extreme_block[j] = -mask_;
- }
-
- fwd_txfm_ref(input_extreme_block, output_ref_block, pitch_, &txfm_param_);
- ASM_REGISTER_STATE_CHECK(
- RunFwdTxfm(input_extreme_block, output_block, pitch_));
-
- int row_length = FindRowLength();
- // The minimum quant value is 4.
- for (int j = 0; j < num_coeffs_; ++j) {
- ASSERT_EQ(output_block[j], output_ref_block[j])
- << "Not bit-exact at test index: " << i << ", "
- << "j = " << j << std::endl;
- EXPECT_GE(row_length * kDctMaxValue << (bit_depth_ - 8),
- abs(output_block[j]))
- << "Error: NxN FDCT has coefficient larger than N*DCT_MAX_VALUE";
- }
- }
- aom_free(input_extreme_block);
- aom_free(output_ref_block);
- aom_free(output_block);
- }
-
- void RunInvAccuracyCheck(int limit) {
- ACMRandom rnd(ACMRandom::DeterministicSeed());
- const int count_test_block = 1000;
-
- int16_t *in = reinterpret_cast<int16_t *>(
- aom_memalign(16, sizeof(int16_t) * num_coeffs_));
- tran_low_t *coeff = reinterpret_cast<tran_low_t *>(
- aom_memalign(16, sizeof(tran_low_t) * num_coeffs_));
- uint8_t *dst = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * num_coeffs_));
- uint8_t *src = reinterpret_cast<uint8_t *>(
- aom_memalign(16, sizeof(uint8_t) * num_coeffs_));
-
- uint16_t *dst16 = reinterpret_cast<uint16_t *>(
- aom_memalign(16, sizeof(uint16_t) * num_coeffs_));
- uint16_t *src16 = reinterpret_cast<uint16_t *>(
- aom_memalign(16, sizeof(uint16_t) * num_coeffs_));
-
- for (int i = 0; i < count_test_block; ++i) {
- // Initialize a test block with input range [-mask_, mask_].
- for (int j = 0; j < num_coeffs_; ++j) {
- if (bit_depth_ == AOM_BITS_8) {
- src[j] = rnd.Rand8();
- dst[j] = rnd.Rand8();
- in[j] = src[j] - dst[j];
- } else {
- src16[j] = rnd.Rand16() & mask_;
- dst16[j] = rnd.Rand16() & mask_;
- in[j] = src16[j] - dst16[j];
- }
- }
-
- fwd_txfm_ref(in, coeff, pitch_, &txfm_param_);
-
- if (bit_depth_ == AOM_BITS_8) {
- ASM_REGISTER_STATE_CHECK(RunInvTxfm(coeff, dst, pitch_));
- } else {
- ASM_REGISTER_STATE_CHECK(
- RunInvTxfm(coeff, CONVERT_TO_BYTEPTR(dst16), pitch_));
- }
-
- for (int j = 0; j < num_coeffs_; ++j) {
- const int diff =
- bit_depth_ == AOM_BITS_8 ? dst[j] - src[j] : dst16[j] - src16[j];
- const uint32_t error = diff * diff;
- ASSERT_GE(static_cast<uint32_t>(limit), error)
- << "Error: 4x4 IDCT has error " << error << " at index " << j;
- }
- }
- aom_free(in);
- aom_free(coeff);
- aom_free(dst);
- aom_free(src);
- aom_free(src16);
- aom_free(dst16);
- }
-
- int pitch_;
- int height_;
- FhtFunc fwd_txfm_ref;
- IhtFunc inv_txfm_ref;
- aom_bit_depth_t bit_depth_;
- int mask_;
- int num_coeffs_;
- TxfmParam txfm_param_;
-
- private:
- // Assume transform size is 4x4, 8x8, 16x16,...
- int FindRowLength() const {
- int row = 4;
- if (16 == num_coeffs_) {
- row = 4;
- } else if (64 == num_coeffs_) {
- row = 8;
- } else if (256 == num_coeffs_) {
- row = 16;
- } else if (1024 == num_coeffs_) {
- row = 32;
- }
- return row;
- }
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_TRANSFORM_TEST_BASE_H_
diff --git a/third_party/aom/test/twopass_encoder.sh b/third_party/aom/test/twopass_encoder.sh
deleted file mode 100755
index cca44ced8..000000000
--- a/third_party/aom/test/twopass_encoder.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-## This file tests the libaom twopass_encoder example. To add new tests to this
-## file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to twopass_encoder_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $YUV_RAW_INPUT is required.
-twopass_encoder_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- echo "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
- return 1
- fi
-}
-
-# Runs twopass_encoder using the codec specified by $1 with a frame limit of
-# 100.
-twopass_encoder() {
- local encoder="$(aom_tool_path twopass_encoder)"
- local codec="$1"
- local output_file="${AOM_TEST_OUTPUT_DIR}/twopass_encoder_${codec}.ivf"
- local limit=7
-
- if [ ! -x "${encoder}" ]; then
- elog "${encoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${AOM_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \
- "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" "${limit}" \
- ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-twopass_encoder_av1() {
- if [ "$(av1_encode_available)" = "yes" ]; then
- twopass_encoder av1 || return 1
- fi
-}
-
-twopass_encoder_tests="twopass_encoder_av1"
-
-run_tests twopass_encoder_verify_environment "${twopass_encoder_tests}"
diff --git a/third_party/aom/test/util.h b/third_party/aom/test/util.h
deleted file mode 100644
index c3f4e4442..000000000
--- a/third_party/aom/test/util.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_UTIL_H_
-#define AOM_TEST_UTIL_H_
-
-#include <stdio.h>
-#include <math.h>
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "aom/aom_integer.h"
-#include "aom/aom_image.h"
-#include "aom_ports/aom_timer.h"
-
-// Macros
-#define GET_PARAM(k) ::testing::get<k>(GetParam())
-
-inline double compute_psnr(const aom_image_t *img1, const aom_image_t *img2) {
- assert((img1->fmt == img2->fmt) && (img1->d_w == img2->d_w) &&
- (img1->d_h == img2->d_h));
-
- const unsigned int width_y = img1->d_w;
- const unsigned int height_y = img1->d_h;
- unsigned int i, j;
-
- int64_t sqrerr = 0;
- for (i = 0; i < height_y; ++i)
- for (j = 0; j < width_y; ++j) {
- int64_t d = img1->planes[AOM_PLANE_Y][i * img1->stride[AOM_PLANE_Y] + j] -
- img2->planes[AOM_PLANE_Y][i * img2->stride[AOM_PLANE_Y] + j];
- sqrerr += d * d;
- }
- double mse = static_cast<double>(sqrerr) / (width_y * height_y);
- double psnr = 100.0;
- if (mse > 0.0) {
- psnr = 10 * log10(255.0 * 255.0 / mse);
- }
- return psnr;
-}
-
-static INLINE double get_time_mark(aom_usec_timer *t) {
- aom_usec_timer_mark(t);
- return static_cast<double>(aom_usec_timer_elapsed(t));
-}
-
-#endif // AOM_TEST_UTIL_H_
diff --git a/third_party/aom/test/variance_test.cc b/third_party/aom/test/variance_test.cc
deleted file mode 100644
index 0df314b0f..000000000
--- a/third_party/aom/test/variance_test.cc
+++ /dev/null
@@ -1,2064 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <cstdlib>
-#include <new>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "test/acm_random.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-#include "aom/aom_codec.h"
-#include "aom/aom_integer.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_ports/aom_timer.h"
-#include "aom_ports/mem.h"
-
-namespace {
-
-typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride,
- const uint8_t *b, int b_stride,
- unsigned int *sse);
-typedef unsigned int (*SubpixVarMxNFunc)(const uint8_t *a, int a_stride,
- int xoffset, int yoffset,
- const uint8_t *b, int b_stride,
- unsigned int *sse);
-typedef unsigned int (*SubpixAvgVarMxNFunc)(const uint8_t *a, int a_stride,
- int xoffset, int yoffset,
- const uint8_t *b, int b_stride,
- uint32_t *sse,
- const uint8_t *second_pred);
-typedef unsigned int (*Get4x4SseFunc)(const uint8_t *a, int a_stride,
- const uint8_t *b, int b_stride);
-typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);
-typedef unsigned int (*JntSubpixAvgVarMxNFunc)(
- const uint8_t *a, int a_stride, int xoffset, int yoffset, const uint8_t *b,
- int b_stride, uint32_t *sse, const uint8_t *second_pred,
- const JNT_COMP_PARAMS *jcp_param);
-typedef uint32_t (*ObmcSubpelVarFunc)(const uint8_t *pre, int pre_stride,
- int xoffset, int yoffset,
- const int32_t *wsrc, const int32_t *mask,
- unsigned int *sse);
-
-using libaom_test::ACMRandom;
-
-// Truncate high bit depth results by downshifting (with rounding) by:
-// 2 * (bit_depth - 8) for sse
-// (bit_depth - 8) for se
-static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
- switch (bit_depth) {
- case AOM_BITS_12:
- *sse = (*sse + 128) >> 8;
- *se = (*se + 8) >> 4;
- break;
- case AOM_BITS_10:
- *sse = (*sse + 8) >> 4;
- *se = (*se + 2) >> 2;
- break;
- case AOM_BITS_8:
- default: break;
- }
-}
-
-static unsigned int mb_ss_ref(const int16_t *src) {
- unsigned int res = 0;
- for (int i = 0; i < 256; ++i) {
- res += src[i] * src[i];
- }
- return res;
-}
-
-/* Note:
- * Our codebase calculates the "diff" value in the variance algorithm by
- * (src - ref).
- */
-static uint32_t variance_ref(const uint8_t *src, const uint8_t *ref, int l2w,
- int l2h, int src_stride, int ref_stride,
- uint32_t *sse_ptr, bool use_high_bit_depth_,
- aom_bit_depth_t bit_depth) {
- int64_t se = 0;
- uint64_t sse = 0;
- const int w = 1 << l2w;
- const int h = 1 << l2h;
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- int diff;
- if (!use_high_bit_depth_) {
- diff = src[y * src_stride + x] - ref[y * ref_stride + x];
- se += diff;
- sse += diff * diff;
- } else {
- diff = CONVERT_TO_SHORTPTR(src)[y * src_stride + x] -
- CONVERT_TO_SHORTPTR(ref)[y * ref_stride + x];
- se += diff;
- sse += diff * diff;
- }
- }
- }
- RoundHighBitDepth(bit_depth, &se, &sse);
- *sse_ptr = static_cast<uint32_t>(sse);
- return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
-}
-
-/* The subpel reference functions differ from the codec version in one aspect:
- * they calculate the bilinear factors directly instead of using a lookup table
- * and therefore upshift xoff and yoff by 1. Only every other calculated value
- * is used so the codec version shrinks the table to save space and maintain
- * compatibility with vp8.
- */
-static uint32_t subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
- int l2w, int l2h, int xoff, int yoff,
- uint32_t *sse_ptr, bool use_high_bit_depth_,
- aom_bit_depth_t bit_depth) {
- int64_t se = 0;
- uint64_t sse = 0;
- const int w = 1 << l2w;
- const int h = 1 << l2h;
-
- xoff <<= 1;
- yoff <<= 1;
-
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- // Bilinear interpolation at a 16th pel step.
- if (!use_high_bit_depth_) {
- const int a1 = ref[(w + 1) * (y + 0) + x + 0];
- const int a2 = ref[(w + 1) * (y + 0) + x + 1];
- const int b1 = ref[(w + 1) * (y + 1) + x + 0];
- const int b2 = ref[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff = r - src[w * y + x];
- se += diff;
- sse += diff * diff;
- } else {
- uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
- uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
- const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
- const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
- const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
- const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff = r - src16[w * y + x];
- se += diff;
- sse += diff * diff;
- }
- }
- }
- RoundHighBitDepth(bit_depth, &se, &sse);
- *sse_ptr = static_cast<uint32_t>(sse);
- return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
-}
-
-static uint32_t subpel_avg_variance_ref(const uint8_t *ref, const uint8_t *src,
- const uint8_t *second_pred, int l2w,
- int l2h, int xoff, int yoff,
- uint32_t *sse_ptr,
- bool use_high_bit_depth,
- aom_bit_depth_t bit_depth) {
- int64_t se = 0;
- uint64_t sse = 0;
- const int w = 1 << l2w;
- const int h = 1 << l2h;
-
- xoff <<= 1;
- yoff <<= 1;
-
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- // bilinear interpolation at a 16th pel step
- if (!use_high_bit_depth) {
- const int a1 = ref[(w + 1) * (y + 0) + x + 0];
- const int a2 = ref[(w + 1) * (y + 0) + x + 1];
- const int b1 = ref[(w + 1) * (y + 1) + x + 0];
- const int b2 = ref[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff =
- ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
- se += diff;
- sse += diff * diff;
- } else {
- const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
- const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
- const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
- const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
- const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
- const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
- const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
- se += diff;
- sse += diff * diff;
- }
- }
- }
- RoundHighBitDepth(bit_depth, &se, &sse);
- *sse_ptr = static_cast<uint32_t>(sse);
- return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
-}
-
-static uint32_t jnt_subpel_avg_variance_ref(
- const uint8_t *ref, const uint8_t *src, const uint8_t *second_pred, int l2w,
- int l2h, int xoff, int yoff, uint32_t *sse_ptr, bool use_high_bit_depth,
- aom_bit_depth_t bit_depth, JNT_COMP_PARAMS *jcp_param) {
- int64_t se = 0;
- uint64_t sse = 0;
- const int w = 1 << l2w;
- const int h = 1 << l2h;
-
- xoff <<= 1;
- yoff <<= 1;
-
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- // bilinear interpolation at a 16th pel step
- if (!use_high_bit_depth) {
- const int a1 = ref[(w + 0) * (y + 0) + x + 0];
- const int a2 = ref[(w + 0) * (y + 0) + x + 1];
- const int b1 = ref[(w + 0) * (y + 1) + x + 0];
- const int b2 = ref[(w + 0) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int avg = ROUND_POWER_OF_TWO(
- r * jcp_param->fwd_offset +
- second_pred[w * y + x] * jcp_param->bck_offset,
- DIST_PRECISION_BITS);
- const int diff = avg - src[w * y + x];
-
- se += diff;
- sse += diff * diff;
- } else {
- const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
- const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
- const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
- const int a1 = ref16[(w + 0) * (y + 0) + x + 0];
- const int a2 = ref16[(w + 0) * (y + 0) + x + 1];
- const int b1 = ref16[(w + 0) * (y + 1) + x + 0];
- const int b2 = ref16[(w + 0) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int avg =
- ROUND_POWER_OF_TWO(r * jcp_param->fwd_offset +
- sec16[w * y + x] * jcp_param->bck_offset,
- DIST_PRECISION_BITS);
- const int diff = avg - src16[w * y + x];
-
- se += diff;
- sse += diff * diff;
- }
- }
- }
- RoundHighBitDepth(bit_depth, &se, &sse);
- *sse_ptr = static_cast<uint32_t>(sse);
- return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
-}
-
-static uint32_t obmc_subpel_variance_ref(const uint8_t *pre, int l2w, int l2h,
- int xoff, int yoff,
- const int32_t *wsrc,
- const int32_t *mask, uint32_t *sse_ptr,
- bool use_high_bit_depth_,
- aom_bit_depth_t bit_depth) {
- int64_t se = 0;
- uint64_t sse = 0;
- const int w = 1 << l2w;
- const int h = 1 << l2h;
-
- xoff <<= 1;
- yoff <<= 1;
-
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- // Bilinear interpolation at a 16th pel step.
- if (!use_high_bit_depth_) {
- const int a1 = pre[(w + 1) * (y + 0) + x + 0];
- const int a2 = pre[(w + 1) * (y + 0) + x + 1];
- const int b1 = pre[(w + 1) * (y + 1) + x + 0];
- const int b2 = pre[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff = ROUND_POWER_OF_TWO_SIGNED(
- wsrc[w * y + x] - r * mask[w * y + x], 12);
- se += diff;
- sse += diff * diff;
- } else {
- uint16_t *pre16 = CONVERT_TO_SHORTPTR(pre);
- const int a1 = pre16[(w + 1) * (y + 0) + x + 0];
- const int a2 = pre16[(w + 1) * (y + 0) + x + 1];
- const int b1 = pre16[(w + 1) * (y + 1) + x + 0];
- const int b2 = pre16[(w + 1) * (y + 1) + x + 1];
- const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
- const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
- const int r = a + (((b - a) * yoff + 8) >> 4);
- const int diff = ROUND_POWER_OF_TWO_SIGNED(
- wsrc[w * y + x] - r * mask[w * y + x], 12);
- se += diff;
- sse += diff * diff;
- }
- }
- }
- RoundHighBitDepth(bit_depth, &se, &sse);
- *sse_ptr = static_cast<uint32_t>(sse);
- return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
- public:
- SumOfSquaresTest() : func_(GetParam()) {}
-
- virtual ~SumOfSquaresTest() { libaom_test::ClearSystemState(); }
-
- protected:
- void ConstTest();
- void RefTest();
-
- SumOfSquaresFunction func_;
- ACMRandom rnd_;
-};
-
-void SumOfSquaresTest::ConstTest() {
- int16_t mem[256];
- unsigned int res;
- for (int v = 0; v < 256; ++v) {
- for (int i = 0; i < 256; ++i) {
- mem[i] = v;
- }
- ASM_REGISTER_STATE_CHECK(res = func_(mem));
- EXPECT_EQ(256u * (v * v), res);
- }
-}
-
-void SumOfSquaresTest::RefTest() {
- int16_t mem[256];
- for (int i = 0; i < 100; ++i) {
- for (int j = 0; j < 256; ++j) {
- mem[j] = rnd_.Rand8() - rnd_.Rand8();
- }
-
- const unsigned int expected = mb_ss_ref(mem);
- unsigned int res;
- ASM_REGISTER_STATE_CHECK(res = func_(mem));
- EXPECT_EQ(expected, res);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Encapsulating struct to store the function to test along with
-// some testing context.
-// Can be used for MSE, SSE, Variance, etc.
-
-template <typename Func>
-struct TestParams {
- TestParams(int log2w = 0, int log2h = 0, Func function = NULL,
- int bit_depth_value = 0)
- : log2width(log2w), log2height(log2h), func(function) {
- use_high_bit_depth = (bit_depth_value > 0);
- if (use_high_bit_depth) {
- bit_depth = static_cast<aom_bit_depth_t>(bit_depth_value);
- } else {
- bit_depth = AOM_BITS_8;
- }
- width = 1 << log2width;
- height = 1 << log2height;
- block_size = width * height;
- mask = (1u << bit_depth) - 1;
- }
-
- int log2width, log2height;
- int width, height;
- int block_size;
- Func func;
- aom_bit_depth_t bit_depth;
- bool use_high_bit_depth;
- uint32_t mask;
-};
-
-template <typename Func>
-std::ostream &operator<<(std::ostream &os, const TestParams<Func> &p) {
- return os << "width/height:" << p.width << "/" << p.height
- << " function:" << reinterpret_cast<const void *>(p.func)
- << " bit-depth:" << p.bit_depth;
-}
-
-// Main class for testing a function type
-template <typename FunctionType>
-class MainTestClass
- : public ::testing::TestWithParam<TestParams<FunctionType> > {
- public:
- virtual void SetUp() {
- params_ = this->GetParam();
-
- rnd_.Reset(ACMRandom::DeterministicSeed());
- const size_t unit =
- use_high_bit_depth() ? sizeof(uint16_t) : sizeof(uint8_t);
- src_ = reinterpret_cast<uint8_t *>(aom_memalign(16, block_size() * unit));
- ref_ = new uint8_t[block_size() * unit];
- ASSERT_TRUE(src_ != NULL);
- ASSERT_TRUE(ref_ != NULL);
- if (use_high_bit_depth()) {
- // TODO(skal): remove!
- src_ = CONVERT_TO_BYTEPTR(src_);
- ref_ = CONVERT_TO_BYTEPTR(ref_);
- }
- }
-
- virtual void TearDown() {
- if (use_high_bit_depth()) {
- // TODO(skal): remove!
- src_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(src_));
- ref_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(ref_));
- }
-
- aom_free(src_);
- delete[] ref_;
- src_ = NULL;
- ref_ = NULL;
- libaom_test::ClearSystemState();
- }
-
- protected:
- // We could sub-class MainTestClass into dedicated class for Variance
- // and MSE/SSE, but it involves a lot of 'this->xxx' dereferencing
- // to access top class fields xxx. That's cumbersome, so for now we'll just
- // implement the testing methods here:
-
- // Variance tests
- void ZeroTest();
- void RefTest();
- void RefStrideTest();
- void OneQuarterTest();
- void SpeedTest();
-
- // MSE/SSE tests
- void RefTestMse();
- void RefTestSse();
- void MaxTestMse();
- void MaxTestSse();
-
- protected:
- ACMRandom rnd_;
- uint8_t *src_;
- uint8_t *ref_;
- TestParams<FunctionType> params_;
-
- // some relay helpers
- bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
- int byte_shift() const { return params_.bit_depth - 8; }
- int block_size() const { return params_.block_size; }
- int width() const { return params_.width; }
- int height() const { return params_.height; }
- uint32_t mask() const { return params_.mask; }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Tests related to variance.
-
-template <typename VarianceFunctionType>
-void MainTestClass<VarianceFunctionType>::ZeroTest() {
- for (int i = 0; i <= 255; ++i) {
- if (!use_high_bit_depth()) {
- memset(src_, i, block_size());
- } else {
- uint16_t *const src16 = CONVERT_TO_SHORTPTR(src_);
- for (int k = 0; k < block_size(); ++k) src16[k] = i << byte_shift();
- }
- for (int j = 0; j <= 255; ++j) {
- if (!use_high_bit_depth()) {
- memset(ref_, j, block_size());
- } else {
- uint16_t *const ref16 = CONVERT_TO_SHORTPTR(ref_);
- for (int k = 0; k < block_size(); ++k) ref16[k] = j << byte_shift();
- }
- unsigned int sse, var;
- ASM_REGISTER_STATE_CHECK(
- var = params_.func(src_, width(), ref_, width(), &sse));
- EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
- }
- }
-}
-
-template <typename VarianceFunctionType>
-void MainTestClass<VarianceFunctionType>::RefTest() {
- for (int i = 0; i < 10; ++i) {
- for (int j = 0; j < block_size(); j++) {
- if (!use_high_bit_depth()) {
- src_[j] = rnd_.Rand8();
- ref_[j] = rnd_.Rand8();
- } else {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
- CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
- }
- }
- unsigned int sse1, sse2, var1, var2;
- const int stride = width();
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(src_, stride, ref_, stride, &sse1));
- var2 =
- variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
- stride, &sse2, use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
- EXPECT_EQ(var1, var2) << "Error at test index: " << i;
- }
-}
-
-template <typename VarianceFunctionType>
-void MainTestClass<VarianceFunctionType>::RefStrideTest() {
- for (int i = 0; i < 10; ++i) {
- const int ref_stride = (i & 1) * width();
- const int src_stride = ((i >> 1) & 1) * width();
- for (int j = 0; j < block_size(); j++) {
- const int ref_ind = (j / width()) * ref_stride + j % width();
- const int src_ind = (j / width()) * src_stride + j % width();
- if (!use_high_bit_depth()) {
- src_[src_ind] = rnd_.Rand8();
- ref_[ref_ind] = rnd_.Rand8();
- } else {
- CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() & mask();
- CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() & mask();
- }
- }
- unsigned int sse1, sse2;
- unsigned int var1, var2;
-
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(src_, src_stride, ref_, ref_stride, &sse1));
- var2 = variance_ref(src_, ref_, params_.log2width, params_.log2height,
- src_stride, ref_stride, &sse2, use_high_bit_depth(),
- params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
- EXPECT_EQ(var1, var2) << "Error at test index: " << i;
- }
-}
-
-template <typename VarianceFunctionType>
-void MainTestClass<VarianceFunctionType>::OneQuarterTest() {
- const int half = block_size() / 2;
- if (!use_high_bit_depth()) {
- memset(src_, 255, block_size());
- memset(ref_, 255, half);
- memset(ref_ + half, 0, half);
- } else {
- aom_memset16(CONVERT_TO_SHORTPTR(src_), 255 << byte_shift(), block_size());
- aom_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << byte_shift(), half);
- aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
- }
- unsigned int sse, var, expected;
- ASM_REGISTER_STATE_CHECK(
- var = params_.func(src_, width(), ref_, width(), &sse));
- expected = block_size() * 255 * 255 / 4;
- EXPECT_EQ(expected, var);
-}
-
-template <typename VarianceFunctionType>
-void MainTestClass<VarianceFunctionType>::SpeedTest() {
- for (int j = 0; j < block_size(); j++) {
- if (!use_high_bit_depth()) {
- src_[j] = rnd_.Rand8();
- ref_[j] = rnd_.Rand8();
- } else {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
- CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
- }
- }
- unsigned int sse;
- const int stride = width();
- int run_time = 1000000000 / block_size();
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_time; ++i) {
- params_.func(src_, stride, ref_, stride, &sse);
- }
-
- aom_usec_timer_mark(&timer);
- const double elapsed_time =
- static_cast<double>(aom_usec_timer_elapsed(&timer));
- printf("Variance %dx%d : %7.2fns\n", width(), height(), elapsed_time);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Tests related to MSE / SSE.
-
-template <typename FunctionType>
-void MainTestClass<FunctionType>::RefTestMse() {
- for (int i = 0; i < 10; ++i) {
- for (int j = 0; j < block_size(); ++j) {
- src_[j] = rnd_.Rand8();
- ref_[j] = rnd_.Rand8();
- }
- unsigned int sse1, sse2;
- const int stride = width();
- ASM_REGISTER_STATE_CHECK(params_.func(src_, stride, ref_, stride, &sse1));
- variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
- stride, &sse2, false, AOM_BITS_8);
- EXPECT_EQ(sse1, sse2);
- }
-}
-
-template <typename FunctionType>
-void MainTestClass<FunctionType>::RefTestSse() {
- for (int i = 0; i < 10; ++i) {
- for (int j = 0; j < block_size(); ++j) {
- src_[j] = rnd_.Rand8();
- ref_[j] = rnd_.Rand8();
- }
- unsigned int sse2;
- unsigned int var1;
- const int stride = width();
- ASM_REGISTER_STATE_CHECK(var1 = params_.func(src_, stride, ref_, stride));
- variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
- stride, &sse2, false, AOM_BITS_8);
- EXPECT_EQ(var1, sse2);
- }
-}
-
-template <typename FunctionType>
-void MainTestClass<FunctionType>::MaxTestMse() {
- memset(src_, 255, block_size());
- memset(ref_, 0, block_size());
- unsigned int sse;
- ASM_REGISTER_STATE_CHECK(params_.func(src_, width(), ref_, width(), &sse));
- const unsigned int expected = block_size() * 255 * 255;
- EXPECT_EQ(expected, sse);
-}
-
-template <typename FunctionType>
-void MainTestClass<FunctionType>::MaxTestSse() {
- memset(src_, 255, block_size());
- memset(ref_, 0, block_size());
- unsigned int var;
- ASM_REGISTER_STATE_CHECK(var = params_.func(src_, width(), ref_, width()));
- const unsigned int expected = block_size() * 255 * 255;
- EXPECT_EQ(expected, var);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-using ::testing::get;
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-template <typename FunctionType>
-class SubpelVarianceTest
- : public ::testing::TestWithParam<TestParams<FunctionType> > {
- public:
- virtual void SetUp() {
- params_ = this->GetParam();
-
- rnd_.Reset(ACMRandom::DeterministicSeed());
- if (!use_high_bit_depth()) {
- src_ = reinterpret_cast<uint8_t *>(aom_memalign(32, block_size()));
- sec_ = reinterpret_cast<uint8_t *>(aom_memalign(32, block_size()));
- ref_ = reinterpret_cast<uint8_t *>(
- aom_memalign(32, block_size() + width() + height() + 1));
- } else {
- src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
- aom_memalign(32, block_size() * sizeof(uint16_t))));
- sec_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
- aom_memalign(32, block_size() * sizeof(uint16_t))));
- ref_ = CONVERT_TO_BYTEPTR(aom_memalign(
- 32, (block_size() + width() + height() + 1) * sizeof(uint16_t)));
- }
- ASSERT_TRUE(src_ != NULL);
- ASSERT_TRUE(sec_ != NULL);
- ASSERT_TRUE(ref_ != NULL);
- }
-
- virtual void TearDown() {
- if (!use_high_bit_depth()) {
- aom_free(src_);
- aom_free(ref_);
- aom_free(sec_);
- } else {
- aom_free(CONVERT_TO_SHORTPTR(src_));
- aom_free(CONVERT_TO_SHORTPTR(ref_));
- aom_free(CONVERT_TO_SHORTPTR(sec_));
- }
- libaom_test::ClearSystemState();
- }
-
- protected:
- void RefTest();
- void ExtremeRefTest();
-
- ACMRandom rnd_;
- uint8_t *src_;
- uint8_t *ref_;
- uint8_t *sec_;
- TestParams<FunctionType> params_;
- JNT_COMP_PARAMS jcp_param_;
-
- // some relay helpers
- bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
- int byte_shift() const { return params_.bit_depth - 8; }
- int block_size() const { return params_.block_size; }
- int width() const { return params_.width; }
- int height() const { return params_.height; }
- uint32_t mask() const { return params_.mask; }
-};
-
-template <typename SubpelVarianceFunctionType>
-void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- if (!use_high_bit_depth()) {
- for (int j = 0; j < block_size(); j++) {
- src_[j] = rnd_.Rand8();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- ref_[j] = rnd_.Rand8();
- }
- } else {
- for (int j = 0; j < block_size(); j++) {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
- }
- }
- unsigned int sse1, sse2;
- unsigned int var1;
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
- const unsigned int var2 = subpel_variance_ref(
- ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
- use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
- EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
- }
- }
-}
-
-template <typename SubpelVarianceFunctionType>
-void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
- // Compare against reference.
- // Src: Set the first half of values to 0, the second half to the maximum.
- // Ref: Set the first half of values to the maximum, the second half to 0.
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- const int half = block_size() / 2;
- if (!use_high_bit_depth()) {
- memset(src_, 0, half);
- memset(src_ + half, 255, half);
- memset(ref_, 255, half);
- memset(ref_ + half, 0, half + width() + height() + 1);
- } else {
- aom_memset16(CONVERT_TO_SHORTPTR(src_), mask(), half);
- aom_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
- aom_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
- aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask(),
- half + width() + height() + 1);
- }
- unsigned int sse1, sse2;
- unsigned int var1;
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
- const unsigned int var2 = subpel_variance_ref(
- ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
- use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
- EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
- }
- }
-}
-
-template <>
-void SubpelVarianceTest<SubpixAvgVarMxNFunc>::RefTest() {
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- if (!use_high_bit_depth()) {
- for (int j = 0; j < block_size(); j++) {
- src_[j] = rnd_.Rand8();
- sec_[j] = rnd_.Rand8();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- ref_[j] = rnd_.Rand8();
- }
- } else {
- for (int j = 0; j < block_size(); j++) {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
- CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
- }
- }
- uint32_t sse1, sse2;
- uint32_t var1, var2;
- ASM_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 1, x, y,
- src_, width(), &sse1, sec_));
- var2 = subpel_avg_variance_ref(ref_, src_, sec_, params_.log2width,
- params_.log2height, x, y, &sse2,
- use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
- EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
- }
- }
-}
-
-template <>
-void SubpelVarianceTest<JntSubpixAvgVarMxNFunc>::RefTest() {
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- if (!use_high_bit_depth()) {
- for (int j = 0; j < block_size(); j++) {
- src_[j] = rnd_.Rand8();
- sec_[j] = rnd_.Rand8();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- ref_[j] = rnd_.Rand8();
- }
- } else {
- for (int j = 0; j < block_size(); j++) {
- CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
- CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
- }
- for (int j = 0; j < block_size() + width() + height() + 1; j++) {
- CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
- }
- }
- for (int x0 = 0; x0 < 2; ++x0) {
- for (int y0 = 0; y0 < 4; ++y0) {
- uint32_t sse1, sse2;
- uint32_t var1, var2;
- jcp_param_.fwd_offset = quant_dist_lookup_table[x0][y0][0];
- jcp_param_.bck_offset = quant_dist_lookup_table[x0][y0][1];
- ASM_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 0, x, y,
- src_, width(), &sse1,
- sec_, &jcp_param_));
- var2 = jnt_subpel_avg_variance_ref(
- ref_, src_, sec_, params_.log2width, params_.log2height, x, y,
- &sse2, use_high_bit_depth(), params_.bit_depth, &jcp_param_);
- EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
- EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
- }
- }
- }
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-static const int kMaskMax = 64;
-
-typedef TestParams<ObmcSubpelVarFunc> ObmcSubpelVarianceParams;
-
-template <typename FunctionType>
-class ObmcVarianceTest
- : public ::testing::TestWithParam<TestParams<FunctionType> > {
- public:
- virtual void SetUp() {
- params_ = this->GetParam();
-
- rnd_.Reset(ACMRandom::DeterministicSeed());
- if (!use_high_bit_depth()) {
- pre_ = reinterpret_cast<uint8_t *>(
- aom_memalign(32, block_size() + width() + height() + 1));
- } else {
- pre_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(aom_memalign(
- 32, block_size() + width() + height() + 1 * sizeof(uint16_t))));
- }
- wsrc_ = reinterpret_cast<int32_t *>(
- aom_memalign(32, block_size() * sizeof(uint32_t)));
- mask_ = reinterpret_cast<int32_t *>(
- aom_memalign(32, block_size() * sizeof(uint32_t)));
- ASSERT_TRUE(pre_ != NULL);
- ASSERT_TRUE(wsrc_ != NULL);
- ASSERT_TRUE(mask_ != NULL);
- }
-
- virtual void TearDown() {
- if (!use_high_bit_depth()) {
- aom_free(pre_);
- } else {
- aom_free(CONVERT_TO_SHORTPTR(pre_));
- }
- aom_free(wsrc_);
- aom_free(mask_);
- libaom_test::ClearSystemState();
- }
-
- protected:
- void RefTest();
- void ExtremeRefTest();
- void SpeedTest();
-
- ACMRandom rnd_;
- uint8_t *pre_;
- int32_t *wsrc_;
- int32_t *mask_;
- TestParams<FunctionType> params_;
-
- // some relay helpers
- bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
- int byte_shift() const { return params_.bit_depth - 8; }
- int block_size() const { return params_.block_size; }
- int width() const { return params_.width; }
- int height() const { return params_.height; }
- uint32_t bd_mask() const { return params_.mask; }
-};
-
-template <>
-void ObmcVarianceTest<ObmcSubpelVarFunc>::RefTest() {
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- if (!use_high_bit_depth())
- for (int j = 0; j < block_size() + width() + height() + 1; j++)
- pre_[j] = rnd_.Rand8();
- else
- for (int j = 0; j < block_size() + width() + height() + 1; j++)
- CONVERT_TO_SHORTPTR(pre_)[j] = rnd_.Rand16() & bd_mask();
- for (int j = 0; j < block_size(); j++) {
- wsrc_[j] = (rnd_.Rand16() & bd_mask()) * rnd_(kMaskMax * kMaskMax + 1);
- mask_[j] = rnd_(kMaskMax * kMaskMax + 1);
- }
-
- uint32_t sse1, sse2;
- uint32_t var1, var2;
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(pre_, width() + 1, x, y, wsrc_, mask_, &sse1));
- var2 = obmc_subpel_variance_ref(
- pre_, params_.log2width, params_.log2height, x, y, wsrc_, mask_,
- &sse2, use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
- EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
- }
- }
-}
-
-template <>
-void ObmcVarianceTest<ObmcSubpelVarFunc>::ExtremeRefTest() {
- // Pre: Set the first half of values to the maximum, the second half to 0.
- // Mask: same as above
- // WSrc: Set the first half of values to 0, the second half to the maximum.
- for (int x = 0; x < 8; ++x) {
- for (int y = 0; y < 8; ++y) {
- const int half = block_size() / 2;
- if (!use_high_bit_depth()) {
- memset(pre_, 255, half);
- memset(pre_ + half, 0, half + width() + height() + 1);
- } else {
- aom_memset16(CONVERT_TO_SHORTPTR(pre_), bd_mask(), half);
- aom_memset16(CONVERT_TO_SHORTPTR(pre_) + half, 0, half);
- }
- for (int j = 0; j < half; j++) {
- wsrc_[j] = bd_mask() * kMaskMax * kMaskMax;
- mask_[j] = 0;
- }
- for (int j = half; j < block_size(); j++) {
- wsrc_[j] = 0;
- mask_[j] = kMaskMax * kMaskMax;
- }
-
- uint32_t sse1, sse2;
- uint32_t var1, var2;
- ASM_REGISTER_STATE_CHECK(
- var1 = params_.func(pre_, width() + 1, x, y, wsrc_, mask_, &sse1));
- var2 = obmc_subpel_variance_ref(
- pre_, params_.log2width, params_.log2height, x, y, wsrc_, mask_,
- &sse2, use_high_bit_depth(), params_.bit_depth);
- EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
- EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
- }
- }
-}
-
-template <>
-void ObmcVarianceTest<ObmcSubpelVarFunc>::SpeedTest() {
- if (!use_high_bit_depth())
- for (int j = 0; j < block_size() + width() + height() + 1; j++)
- pre_[j] = rnd_.Rand8();
- else
- for (int j = 0; j < block_size() + width() + height() + 1; j++)
- CONVERT_TO_SHORTPTR(pre_)[j] = rnd_.Rand16() & bd_mask();
- for (int j = 0; j < block_size(); j++) {
- wsrc_[j] = (rnd_.Rand16() & bd_mask()) * rnd_(kMaskMax * kMaskMax + 1);
- mask_[j] = rnd_(kMaskMax * kMaskMax + 1);
- }
- unsigned int sse1;
- const int stride = width() + 1;
- int run_time = 1000000000 / block_size();
- aom_usec_timer timer;
-
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_time; ++i) {
- int x = rnd_(8);
- int y = rnd_(8);
- ASM_REGISTER_STATE_CHECK(
- params_.func(pre_, stride, x, y, wsrc_, mask_, &sse1));
- }
- aom_usec_timer_mark(&timer);
-
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("obmc_sub_pixel_variance_%dx%d_%d: %d us\n", width(), height(),
- params_.bit_depth, elapsed_time);
-}
-
-typedef MainTestClass<Get4x4SseFunc> AvxSseTest;
-typedef MainTestClass<VarianceMxNFunc> AvxMseTest;
-typedef MainTestClass<VarianceMxNFunc> AvxVarianceTest;
-typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxSubpelVarianceTest;
-typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxSubpelAvgVarianceTest;
-typedef SubpelVarianceTest<JntSubpixAvgVarMxNFunc> AvxJntSubpelAvgVarianceTest;
-typedef ObmcVarianceTest<ObmcSubpelVarFunc> AvxObmcSubpelVarianceTest;
-
-TEST_P(AvxSseTest, RefSse) { RefTestSse(); }
-TEST_P(AvxSseTest, MaxSse) { MaxTestSse(); }
-TEST_P(AvxMseTest, RefMse) { RefTestMse(); }
-TEST_P(AvxMseTest, MaxMse) { MaxTestMse(); }
-TEST_P(AvxVarianceTest, Zero) { ZeroTest(); }
-TEST_P(AvxVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxVarianceTest, RefStride) { RefStrideTest(); }
-TEST_P(AvxVarianceTest, OneQuarter) { OneQuarterTest(); }
-TEST_P(AvxVarianceTest, DISABLED_Speed) { SpeedTest(); }
-TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
-TEST_P(SumOfSquaresTest, Ref) { RefTest(); }
-TEST_P(AvxSubpelVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
-TEST_P(AvxSubpelAvgVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxJntSubpelAvgVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxObmcSubpelVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxObmcSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
-TEST_P(AvxObmcSubpelVarianceTest, DISABLED_Speed) { SpeedTest(); }
-
-INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest,
- ::testing::Values(aom_get_mb_ss_c));
-
-typedef TestParams<Get4x4SseFunc> SseParams;
-INSTANTIATE_TEST_CASE_P(C, AvxSseTest,
- ::testing::Values(SseParams(2, 2,
- &aom_get4x4sse_cs_c)));
-
-typedef TestParams<VarianceMxNFunc> MseParams;
-INSTANTIATE_TEST_CASE_P(C, AvxMseTest,
- ::testing::Values(MseParams(4, 4, &aom_mse16x16_c),
- MseParams(4, 3, &aom_mse16x8_c),
- MseParams(3, 4, &aom_mse8x16_c),
- MseParams(3, 3, &aom_mse8x8_c)));
-
-typedef TestParams<VarianceMxNFunc> VarianceParams;
-INSTANTIATE_TEST_CASE_P(
- C, AvxVarianceTest,
- ::testing::Values(VarianceParams(7, 7, &aom_variance128x128_c),
- VarianceParams(7, 6, &aom_variance128x64_c),
- VarianceParams(6, 7, &aom_variance64x128_c),
- VarianceParams(6, 6, &aom_variance64x64_c),
- VarianceParams(6, 5, &aom_variance64x32_c),
- VarianceParams(5, 6, &aom_variance32x64_c),
- VarianceParams(5, 5, &aom_variance32x32_c),
- VarianceParams(5, 4, &aom_variance32x16_c),
- VarianceParams(4, 5, &aom_variance16x32_c),
- VarianceParams(4, 4, &aom_variance16x16_c),
- VarianceParams(4, 3, &aom_variance16x8_c),
- VarianceParams(3, 4, &aom_variance8x16_c),
- VarianceParams(3, 3, &aom_variance8x8_c),
- VarianceParams(3, 2, &aom_variance8x4_c),
- VarianceParams(2, 3, &aom_variance4x8_c),
- VarianceParams(2, 2, &aom_variance4x4_c)));
-
-typedef TestParams<SubpixVarMxNFunc> SubpelVarianceParams;
-INSTANTIATE_TEST_CASE_P(
- C, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_c, 0),
- SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_c, 0),
- SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_c, 0),
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_c, 0),
- SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_c, 0),
- SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_c, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_c, 0),
- SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_c, 0),
- SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_c, 0),
- SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_c, 0),
- SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_c, 0),
- SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_c, 0),
- SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_c, 0),
- SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_c, 0),
- SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_c, 0),
- SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_c, 0)));
-
-typedef TestParams<SubpixAvgVarMxNFunc> SubpelAvgVarianceParams;
-INSTANTIATE_TEST_CASE_P(
- C, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_c, 0),
- SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_c, 0),
- SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_c, 0),
- SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_c, 0),
- SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_c, 0),
- SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_c, 0),
- SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_c, 0),
- SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_c, 0),
- SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_c, 0),
- SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_c, 0),
- SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_c, 0),
- SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_c, 0),
- SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_c, 0),
- SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_c, 0),
- SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_c, 0),
- SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_c, 0)));
-
-typedef TestParams<JntSubpixAvgVarMxNFunc> JntSubpelAvgVarianceParams;
-INSTANTIATE_TEST_CASE_P(
- C, AvxJntSubpelAvgVarianceTest,
- ::testing::Values(
- JntSubpelAvgVarianceParams(6, 6, &aom_jnt_sub_pixel_avg_variance64x64_c,
- 0),
- JntSubpelAvgVarianceParams(6, 5, &aom_jnt_sub_pixel_avg_variance64x32_c,
- 0),
- JntSubpelAvgVarianceParams(5, 6, &aom_jnt_sub_pixel_avg_variance32x64_c,
- 0),
- JntSubpelAvgVarianceParams(5, 5, &aom_jnt_sub_pixel_avg_variance32x32_c,
- 0),
- JntSubpelAvgVarianceParams(5, 4, &aom_jnt_sub_pixel_avg_variance32x16_c,
- 0),
- JntSubpelAvgVarianceParams(4, 5, &aom_jnt_sub_pixel_avg_variance16x32_c,
- 0),
- JntSubpelAvgVarianceParams(4, 4, &aom_jnt_sub_pixel_avg_variance16x16_c,
- 0),
- JntSubpelAvgVarianceParams(4, 3, &aom_jnt_sub_pixel_avg_variance16x8_c,
- 0),
- JntSubpelAvgVarianceParams(3, 4, &aom_jnt_sub_pixel_avg_variance8x16_c,
- 0),
- JntSubpelAvgVarianceParams(3, 3, &aom_jnt_sub_pixel_avg_variance8x8_c,
- 0),
- JntSubpelAvgVarianceParams(3, 2, &aom_jnt_sub_pixel_avg_variance8x4_c,
- 0),
- JntSubpelAvgVarianceParams(2, 3, &aom_jnt_sub_pixel_avg_variance4x8_c,
- 0),
- JntSubpelAvgVarianceParams(2, 2, &aom_jnt_sub_pixel_avg_variance4x4_c,
- 0)));
-
-INSTANTIATE_TEST_CASE_P(
- C, AvxObmcSubpelVarianceTest,
- ::testing::Values(
- ObmcSubpelVarianceParams(7, 7, &aom_obmc_sub_pixel_variance128x128_c,
- 0),
- ObmcSubpelVarianceParams(7, 6, &aom_obmc_sub_pixel_variance128x64_c, 0),
- ObmcSubpelVarianceParams(6, 7, &aom_obmc_sub_pixel_variance64x128_c, 0),
- ObmcSubpelVarianceParams(6, 6, &aom_obmc_sub_pixel_variance64x64_c, 0),
- ObmcSubpelVarianceParams(6, 5, &aom_obmc_sub_pixel_variance64x32_c, 0),
- ObmcSubpelVarianceParams(5, 6, &aom_obmc_sub_pixel_variance32x64_c, 0),
- ObmcSubpelVarianceParams(5, 5, &aom_obmc_sub_pixel_variance32x32_c, 0),
- ObmcSubpelVarianceParams(5, 4, &aom_obmc_sub_pixel_variance32x16_c, 0),
- ObmcSubpelVarianceParams(4, 5, &aom_obmc_sub_pixel_variance16x32_c, 0),
- ObmcSubpelVarianceParams(4, 4, &aom_obmc_sub_pixel_variance16x16_c, 0),
- ObmcSubpelVarianceParams(4, 3, &aom_obmc_sub_pixel_variance16x8_c, 0),
- ObmcSubpelVarianceParams(3, 4, &aom_obmc_sub_pixel_variance8x16_c, 0),
- ObmcSubpelVarianceParams(3, 3, &aom_obmc_sub_pixel_variance8x8_c, 0),
- ObmcSubpelVarianceParams(3, 2, &aom_obmc_sub_pixel_variance8x4_c, 0),
- ObmcSubpelVarianceParams(2, 3, &aom_obmc_sub_pixel_variance4x8_c, 0),
- ObmcSubpelVarianceParams(2, 2, &aom_obmc_sub_pixel_variance4x4_c, 0)));
-
-typedef MainTestClass<VarianceMxNFunc> AvxHBDMseTest;
-typedef MainTestClass<VarianceMxNFunc> AvxHBDVarianceTest;
-typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxHBDSubpelVarianceTest;
-typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxHBDSubpelAvgVarianceTest;
-typedef ObmcVarianceTest<ObmcSubpelVarFunc> AvxHBDObmcSubpelVarianceTest;
-
-TEST_P(AvxHBDMseTest, RefMse) { RefTestMse(); }
-TEST_P(AvxHBDMseTest, MaxMse) { MaxTestMse(); }
-TEST_P(AvxHBDVarianceTest, Zero) { ZeroTest(); }
-TEST_P(AvxHBDVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxHBDVarianceTest, RefStride) { RefStrideTest(); }
-TEST_P(AvxHBDVarianceTest, OneQuarter) { OneQuarterTest(); }
-TEST_P(AvxHBDVarianceTest, DISABLED_Speed) { SpeedTest(); }
-TEST_P(AvxHBDSubpelVarianceTest, Ref) { RefTest(); }
-TEST_P(AvxHBDSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
-TEST_P(AvxHBDSubpelAvgVarianceTest, Ref) { RefTest(); }
-
-/* TODO(debargha): This test does not support the highbd version
-INSTANTIATE_TEST_CASE_P(
- C, AvxHBDMseTest,
- ::testing::Values(make_tuple(4, 4, &aom_highbd_12_mse16x16_c),
- make_tuple(4, 4, &aom_highbd_12_mse16x8_c),
- make_tuple(4, 4, &aom_highbd_12_mse8x16_c),
- make_tuple(4, 4, &aom_highbd_12_mse8x8_c),
- make_tuple(4, 4, &aom_highbd_10_mse16x16_c),
- make_tuple(4, 4, &aom_highbd_10_mse16x8_c),
- make_tuple(4, 4, &aom_highbd_10_mse8x16_c),
- make_tuple(4, 4, &aom_highbd_10_mse8x8_c),
- make_tuple(4, 4, &aom_highbd_8_mse16x16_c),
- make_tuple(4, 4, &aom_highbd_8_mse16x8_c),
- make_tuple(4, 4, &aom_highbd_8_mse8x16_c),
- make_tuple(4, 4, &aom_highbd_8_mse8x8_c)));
-*/
-
-const VarianceParams kArrayHBDVariance_c[] = {
- VarianceParams(7, 7, &aom_highbd_12_variance128x128_c, 12),
- VarianceParams(7, 6, &aom_highbd_12_variance128x64_c, 12),
- VarianceParams(6, 7, &aom_highbd_12_variance64x128_c, 12),
- VarianceParams(6, 6, &aom_highbd_12_variance64x64_c, 12),
- VarianceParams(6, 5, &aom_highbd_12_variance64x32_c, 12),
- VarianceParams(5, 6, &aom_highbd_12_variance32x64_c, 12),
- VarianceParams(5, 5, &aom_highbd_12_variance32x32_c, 12),
- VarianceParams(5, 4, &aom_highbd_12_variance32x16_c, 12),
- VarianceParams(4, 5, &aom_highbd_12_variance16x32_c, 12),
- VarianceParams(4, 4, &aom_highbd_12_variance16x16_c, 12),
- VarianceParams(4, 3, &aom_highbd_12_variance16x8_c, 12),
- VarianceParams(3, 4, &aom_highbd_12_variance8x16_c, 12),
- VarianceParams(3, 3, &aom_highbd_12_variance8x8_c, 12),
- VarianceParams(3, 2, &aom_highbd_12_variance8x4_c, 12),
- VarianceParams(2, 3, &aom_highbd_12_variance4x8_c, 12),
- VarianceParams(2, 2, &aom_highbd_12_variance4x4_c, 12),
- VarianceParams(7, 7, &aom_highbd_10_variance128x128_c, 10),
- VarianceParams(7, 6, &aom_highbd_10_variance128x64_c, 10),
- VarianceParams(6, 7, &aom_highbd_10_variance64x128_c, 10),
- VarianceParams(6, 6, &aom_highbd_10_variance64x64_c, 10),
- VarianceParams(6, 5, &aom_highbd_10_variance64x32_c, 10),
- VarianceParams(5, 6, &aom_highbd_10_variance32x64_c, 10),
- VarianceParams(5, 5, &aom_highbd_10_variance32x32_c, 10),
- VarianceParams(5, 4, &aom_highbd_10_variance32x16_c, 10),
- VarianceParams(4, 5, &aom_highbd_10_variance16x32_c, 10),
- VarianceParams(4, 4, &aom_highbd_10_variance16x16_c, 10),
- VarianceParams(4, 3, &aom_highbd_10_variance16x8_c, 10),
- VarianceParams(3, 4, &aom_highbd_10_variance8x16_c, 10),
- VarianceParams(3, 3, &aom_highbd_10_variance8x8_c, 10),
- VarianceParams(3, 2, &aom_highbd_10_variance8x4_c, 10),
- VarianceParams(2, 3, &aom_highbd_10_variance4x8_c, 10),
- VarianceParams(2, 2, &aom_highbd_10_variance4x4_c, 10),
- VarianceParams(7, 7, &aom_highbd_8_variance128x128_c, 8),
- VarianceParams(7, 6, &aom_highbd_8_variance128x64_c, 8),
- VarianceParams(6, 7, &aom_highbd_8_variance64x128_c, 8),
- VarianceParams(6, 6, &aom_highbd_8_variance64x64_c, 8),
- VarianceParams(6, 5, &aom_highbd_8_variance64x32_c, 8),
- VarianceParams(5, 6, &aom_highbd_8_variance32x64_c, 8),
- VarianceParams(5, 5, &aom_highbd_8_variance32x32_c, 8),
- VarianceParams(5, 4, &aom_highbd_8_variance32x16_c, 8),
- VarianceParams(4, 5, &aom_highbd_8_variance16x32_c, 8),
- VarianceParams(4, 4, &aom_highbd_8_variance16x16_c, 8),
- VarianceParams(4, 3, &aom_highbd_8_variance16x8_c, 8),
- VarianceParams(3, 4, &aom_highbd_8_variance8x16_c, 8),
- VarianceParams(3, 3, &aom_highbd_8_variance8x8_c, 8),
- VarianceParams(3, 2, &aom_highbd_8_variance8x4_c, 8),
- VarianceParams(2, 3, &aom_highbd_8_variance4x8_c, 8),
- VarianceParams(2, 2, &aom_highbd_8_variance4x4_c, 8)
-};
-INSTANTIATE_TEST_CASE_P(C, AvxHBDVarianceTest,
- ::testing::ValuesIn(kArrayHBDVariance_c));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AvxHBDVarianceTest,
- ::testing::Values(
- VarianceParams(2, 2, &aom_highbd_8_variance4x4_sse4_1, 8),
- VarianceParams(2, 2, &aom_highbd_10_variance4x4_sse4_1, 10),
- VarianceParams(2, 2, &aom_highbd_12_variance4x4_sse4_1, 12)));
-#endif // HAVE_SSE4_1
-
-const SubpelVarianceParams kArrayHBDSubpelVariance_c[] = {
- SubpelVarianceParams(7, 7, &aom_highbd_8_sub_pixel_variance128x128_c, 8),
- SubpelVarianceParams(7, 6, &aom_highbd_8_sub_pixel_variance128x64_c, 8),
- SubpelVarianceParams(6, 7, &aom_highbd_8_sub_pixel_variance64x128_c, 8),
- SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_c, 8),
- SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_c, 8),
- SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_c, 8),
- SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_c, 8),
- SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_c, 8),
- SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_c, 8),
- SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_c, 8),
- SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_c, 8),
- SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_c, 8),
- SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_c, 8),
- SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_c, 8),
- SubpelVarianceParams(2, 3, &aom_highbd_8_sub_pixel_variance4x8_c, 8),
- SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_c, 8),
- SubpelVarianceParams(7, 7, &aom_highbd_10_sub_pixel_variance128x128_c, 10),
- SubpelVarianceParams(7, 6, &aom_highbd_10_sub_pixel_variance128x64_c, 10),
- SubpelVarianceParams(6, 7, &aom_highbd_10_sub_pixel_variance64x128_c, 10),
- SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_c, 10),
- SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_c, 10),
- SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_c, 10),
- SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_c, 10),
- SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_c, 10),
- SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_c, 10),
- SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_c, 10),
- SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_c, 10),
- SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_c, 10),
- SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_c, 10),
- SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_c, 10),
- SubpelVarianceParams(2, 3, &aom_highbd_10_sub_pixel_variance4x8_c, 10),
- SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_c, 10),
- SubpelVarianceParams(7, 7, &aom_highbd_12_sub_pixel_variance128x128_c, 12),
- SubpelVarianceParams(7, 6, &aom_highbd_12_sub_pixel_variance128x64_c, 12),
- SubpelVarianceParams(6, 7, &aom_highbd_12_sub_pixel_variance64x128_c, 12),
- SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_c, 12),
- SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_c, 12),
- SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_c, 12),
- SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_c, 12),
- SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_c, 12),
- SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_c, 12),
- SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_c, 12),
- SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_c, 12),
- SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_c, 12),
- SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_c, 12),
- SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_c, 12),
- SubpelVarianceParams(2, 3, &aom_highbd_12_sub_pixel_variance4x8_c, 12),
- SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_c, 12),
-};
-INSTANTIATE_TEST_CASE_P(C, AvxHBDSubpelVarianceTest,
- ::testing::ValuesIn(kArrayHBDSubpelVariance_c));
-
-const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_c[] = {
- SubpelAvgVarianceParams(7, 7, &aom_highbd_8_sub_pixel_avg_variance128x128_c,
- 8),
- SubpelAvgVarianceParams(7, 6, &aom_highbd_8_sub_pixel_avg_variance128x64_c,
- 8),
- SubpelAvgVarianceParams(6, 7, &aom_highbd_8_sub_pixel_avg_variance64x128_c,
- 8),
- SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_c, 8),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_c, 8),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_c, 8),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_c, 8),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_c, 8),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_c, 8),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_c, 8),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_c, 8),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_c, 8),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_c, 8),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_c, 8),
- SubpelAvgVarianceParams(2, 3, &aom_highbd_8_sub_pixel_avg_variance4x8_c, 8),
- SubpelAvgVarianceParams(2, 2, &aom_highbd_8_sub_pixel_avg_variance4x4_c, 8),
- SubpelAvgVarianceParams(7, 7, &aom_highbd_10_sub_pixel_avg_variance128x128_c,
- 10),
- SubpelAvgVarianceParams(7, 6, &aom_highbd_10_sub_pixel_avg_variance128x64_c,
- 10),
- SubpelAvgVarianceParams(6, 7, &aom_highbd_10_sub_pixel_avg_variance64x128_c,
- 10),
- SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_c,
- 10),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_c,
- 10),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_c,
- 10),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_c,
- 10),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_c,
- 10),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_c,
- 10),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_c,
- 10),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_c,
- 10),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_c,
- 10),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_c, 10),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_c, 10),
- SubpelAvgVarianceParams(2, 3, &aom_highbd_10_sub_pixel_avg_variance4x8_c, 10),
- SubpelAvgVarianceParams(2, 2, &aom_highbd_10_sub_pixel_avg_variance4x4_c, 10),
- SubpelAvgVarianceParams(7, 7, &aom_highbd_12_sub_pixel_avg_variance128x128_c,
- 12),
- SubpelAvgVarianceParams(7, 6, &aom_highbd_12_sub_pixel_avg_variance128x64_c,
- 12),
- SubpelAvgVarianceParams(6, 7, &aom_highbd_12_sub_pixel_avg_variance64x128_c,
- 12),
- SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_c,
- 12),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_c,
- 12),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_c,
- 12),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_c,
- 12),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_c,
- 12),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_c,
- 12),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_c,
- 12),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_c,
- 12),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_c,
- 12),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_c, 12),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_c, 12),
- SubpelAvgVarianceParams(2, 3, &aom_highbd_12_sub_pixel_avg_variance4x8_c, 12),
- SubpelAvgVarianceParams(2, 2, &aom_highbd_12_sub_pixel_avg_variance4x4_c, 12)
-};
-INSTANTIATE_TEST_CASE_P(C, AvxHBDSubpelAvgVarianceTest,
- ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_c));
-
-const ObmcSubpelVarianceParams kArrayHBDObmcSubpelVariance_c[] = {
- ObmcSubpelVarianceParams(7, 7, &aom_highbd_obmc_sub_pixel_variance128x128_c,
- 8),
- ObmcSubpelVarianceParams(7, 6, &aom_highbd_obmc_sub_pixel_variance128x64_c,
- 8),
- ObmcSubpelVarianceParams(6, 7, &aom_highbd_obmc_sub_pixel_variance64x128_c,
- 8),
- ObmcSubpelVarianceParams(6, 6, &aom_highbd_obmc_sub_pixel_variance64x64_c, 8),
- ObmcSubpelVarianceParams(6, 5, &aom_highbd_obmc_sub_pixel_variance64x32_c, 8),
- ObmcSubpelVarianceParams(5, 6, &aom_highbd_obmc_sub_pixel_variance32x64_c, 8),
- ObmcSubpelVarianceParams(5, 5, &aom_highbd_obmc_sub_pixel_variance32x32_c, 8),
- ObmcSubpelVarianceParams(5, 4, &aom_highbd_obmc_sub_pixel_variance32x16_c, 8),
- ObmcSubpelVarianceParams(4, 5, &aom_highbd_obmc_sub_pixel_variance16x32_c, 8),
- ObmcSubpelVarianceParams(4, 4, &aom_highbd_obmc_sub_pixel_variance16x16_c, 8),
- ObmcSubpelVarianceParams(4, 3, &aom_highbd_obmc_sub_pixel_variance16x8_c, 8),
- ObmcSubpelVarianceParams(3, 4, &aom_highbd_obmc_sub_pixel_variance8x16_c, 8),
- ObmcSubpelVarianceParams(3, 3, &aom_highbd_obmc_sub_pixel_variance8x8_c, 8),
- ObmcSubpelVarianceParams(3, 2, &aom_highbd_obmc_sub_pixel_variance8x4_c, 8),
- ObmcSubpelVarianceParams(2, 3, &aom_highbd_obmc_sub_pixel_variance4x8_c, 8),
- ObmcSubpelVarianceParams(2, 2, &aom_highbd_obmc_sub_pixel_variance4x4_c, 8),
- ObmcSubpelVarianceParams(7, 7,
- &aom_highbd_10_obmc_sub_pixel_variance128x128_c, 10),
- ObmcSubpelVarianceParams(7, 6, &aom_highbd_10_obmc_sub_pixel_variance128x64_c,
- 10),
- ObmcSubpelVarianceParams(6, 7, &aom_highbd_10_obmc_sub_pixel_variance64x128_c,
- 10),
- ObmcSubpelVarianceParams(6, 6, &aom_highbd_10_obmc_sub_pixel_variance64x64_c,
- 10),
- ObmcSubpelVarianceParams(6, 5, &aom_highbd_10_obmc_sub_pixel_variance64x32_c,
- 10),
- ObmcSubpelVarianceParams(5, 6, &aom_highbd_10_obmc_sub_pixel_variance32x64_c,
- 10),
- ObmcSubpelVarianceParams(5, 5, &aom_highbd_10_obmc_sub_pixel_variance32x32_c,
- 10),
- ObmcSubpelVarianceParams(5, 4, &aom_highbd_10_obmc_sub_pixel_variance32x16_c,
- 10),
- ObmcSubpelVarianceParams(4, 5, &aom_highbd_10_obmc_sub_pixel_variance16x32_c,
- 10),
- ObmcSubpelVarianceParams(4, 4, &aom_highbd_10_obmc_sub_pixel_variance16x16_c,
- 10),
- ObmcSubpelVarianceParams(4, 3, &aom_highbd_10_obmc_sub_pixel_variance16x8_c,
- 10),
- ObmcSubpelVarianceParams(3, 4, &aom_highbd_10_obmc_sub_pixel_variance8x16_c,
- 10),
- ObmcSubpelVarianceParams(3, 3, &aom_highbd_10_obmc_sub_pixel_variance8x8_c,
- 10),
- ObmcSubpelVarianceParams(3, 2, &aom_highbd_10_obmc_sub_pixel_variance8x4_c,
- 10),
- ObmcSubpelVarianceParams(2, 3, &aom_highbd_10_obmc_sub_pixel_variance4x8_c,
- 10),
- ObmcSubpelVarianceParams(2, 2, &aom_highbd_10_obmc_sub_pixel_variance4x4_c,
- 10),
- ObmcSubpelVarianceParams(7, 7,
- &aom_highbd_12_obmc_sub_pixel_variance128x128_c, 12),
- ObmcSubpelVarianceParams(7, 6, &aom_highbd_12_obmc_sub_pixel_variance128x64_c,
- 12),
- ObmcSubpelVarianceParams(6, 7, &aom_highbd_12_obmc_sub_pixel_variance64x128_c,
- 12),
- ObmcSubpelVarianceParams(6, 6, &aom_highbd_12_obmc_sub_pixel_variance64x64_c,
- 12),
- ObmcSubpelVarianceParams(6, 5, &aom_highbd_12_obmc_sub_pixel_variance64x32_c,
- 12),
- ObmcSubpelVarianceParams(5, 6, &aom_highbd_12_obmc_sub_pixel_variance32x64_c,
- 12),
- ObmcSubpelVarianceParams(5, 5, &aom_highbd_12_obmc_sub_pixel_variance32x32_c,
- 12),
- ObmcSubpelVarianceParams(5, 4, &aom_highbd_12_obmc_sub_pixel_variance32x16_c,
- 12),
- ObmcSubpelVarianceParams(4, 5, &aom_highbd_12_obmc_sub_pixel_variance16x32_c,
- 12),
- ObmcSubpelVarianceParams(4, 4, &aom_highbd_12_obmc_sub_pixel_variance16x16_c,
- 12),
- ObmcSubpelVarianceParams(4, 3, &aom_highbd_12_obmc_sub_pixel_variance16x8_c,
- 12),
- ObmcSubpelVarianceParams(3, 4, &aom_highbd_12_obmc_sub_pixel_variance8x16_c,
- 12),
- ObmcSubpelVarianceParams(3, 3, &aom_highbd_12_obmc_sub_pixel_variance8x8_c,
- 12),
- ObmcSubpelVarianceParams(3, 2, &aom_highbd_12_obmc_sub_pixel_variance8x4_c,
- 12),
- ObmcSubpelVarianceParams(2, 3, &aom_highbd_12_obmc_sub_pixel_variance4x8_c,
- 12),
- ObmcSubpelVarianceParams(2, 2, &aom_highbd_12_obmc_sub_pixel_variance4x4_c,
- 12)
-};
-INSTANTIATE_TEST_CASE_P(C, AvxHBDObmcSubpelVarianceTest,
- ::testing::ValuesIn(kArrayHBDObmcSubpelVariance_c));
-
-#if HAVE_SSE2
-INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest,
- ::testing::Values(aom_get_mb_ss_sse2));
-
-INSTANTIATE_TEST_CASE_P(SSE2, AvxMseTest,
- ::testing::Values(MseParams(4, 4, &aom_mse16x16_sse2),
- MseParams(4, 3, &aom_mse16x8_sse2),
- MseParams(3, 4, &aom_mse8x16_sse2),
- MseParams(3, 3, &aom_mse8x8_sse2)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, AvxVarianceTest,
- ::testing::Values(VarianceParams(7, 7, &aom_variance128x128_sse2),
- VarianceParams(7, 6, &aom_variance128x64_sse2),
- VarianceParams(6, 7, &aom_variance64x128_sse2),
- VarianceParams(6, 6, &aom_variance64x64_sse2),
- VarianceParams(6, 5, &aom_variance64x32_sse2),
- VarianceParams(6, 4, &aom_variance64x16_sse2),
- VarianceParams(5, 6, &aom_variance32x64_sse2),
- VarianceParams(5, 5, &aom_variance32x32_sse2),
- VarianceParams(5, 4, &aom_variance32x16_sse2),
- VarianceParams(5, 3, &aom_variance32x8_sse2),
- VarianceParams(4, 6, &aom_variance16x64_sse2),
- VarianceParams(4, 5, &aom_variance16x32_sse2),
- VarianceParams(4, 4, &aom_variance16x16_sse2),
- VarianceParams(4, 3, &aom_variance16x8_sse2),
- VarianceParams(4, 2, &aom_variance16x4_sse2),
- VarianceParams(3, 5, &aom_variance8x32_sse2),
- VarianceParams(3, 4, &aom_variance8x16_sse2),
- VarianceParams(3, 3, &aom_variance8x8_sse2),
- VarianceParams(3, 2, &aom_variance8x4_sse2),
- VarianceParams(2, 4, &aom_variance4x16_sse2),
- VarianceParams(2, 3, &aom_variance4x8_sse2),
- VarianceParams(2, 2, &aom_variance4x4_sse2)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_sse2, 0),
- SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_sse2, 0),
- SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_sse2, 0),
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_sse2, 0),
- SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_sse2, 0),
- SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_sse2, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_sse2, 0),
- SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_sse2, 0),
- SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_sse2, 0),
- SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_sse2, 0),
- SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_sse2, 0),
- SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_sse2, 0),
- SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_sse2, 0),
- SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_sse2, 0),
- SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_sse2, 0),
- SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_sse2, 0)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE2, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_sse2,
- 0),
- SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_sse2,
- 0),
- SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_sse2,
- 0),
- SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_sse2, 0),
- SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_sse2, 0),
- SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_sse2, 0),
- SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_sse2, 0),
- SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_sse2, 0),
- SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_sse2, 0),
- SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_sse2, 0),
- SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_sse2, 0),
- SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_sse2, 0),
- SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_sse2, 0),
- SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_sse2, 0),
- SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_sse2, 0),
- SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_sse2, 0)));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_sse4_1,
- 8),
- SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_sse4_1,
- 10),
- SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_sse4_1,
- 12)));
-
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(2, 2,
- &aom_highbd_8_sub_pixel_avg_variance4x4_sse4_1,
- 8),
- SubpelAvgVarianceParams(2, 2,
- &aom_highbd_10_sub_pixel_avg_variance4x4_sse4_1,
- 10),
- SubpelAvgVarianceParams(2, 2,
- &aom_highbd_12_sub_pixel_avg_variance4x4_sse4_1,
- 12)));
-#endif // HAVE_SSE4_1
-
-/* TODO(debargha): This test does not support the highbd version
-INSTANTIATE_TEST_CASE_P(
- SSE2, AvxHBDMseTest,
- ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_sse2),
- MseParams(4, 3, &aom_highbd_12_mse16x8_sse2),
- MseParams(3, 4, &aom_highbd_12_mse8x16_sse2),
- MseParams(3, 3, &aom_highbd_12_mse8x8_sse2),
- MseParams(4, 4, &aom_highbd_10_mse16x16_sse2),
- MseParams(4, 3, &aom_highbd_10_mse16x8_sse2),
- MseParams(3, 4, &aom_highbd_10_mse8x16_sse2),
- MseParams(3, 3, &aom_highbd_10_mse8x8_sse2),
- MseParams(4, 4, &aom_highbd_8_mse16x16_sse2),
- MseParams(4, 3, &aom_highbd_8_mse16x8_sse2),
- MseParams(3, 4, &aom_highbd_8_mse8x16_sse2),
- MseParams(3, 3, &aom_highbd_8_mse8x8_sse2)));
-*/
-
-const VarianceParams kArrayHBDVariance_sse2[] = {
- VarianceParams(7, 7, &aom_highbd_12_variance128x128_sse2, 12),
- VarianceParams(7, 6, &aom_highbd_12_variance128x64_sse2, 12),
- VarianceParams(6, 7, &aom_highbd_12_variance64x128_sse2, 12),
- VarianceParams(6, 6, &aom_highbd_12_variance64x64_sse2, 12),
- VarianceParams(6, 5, &aom_highbd_12_variance64x32_sse2, 12),
- VarianceParams(5, 6, &aom_highbd_12_variance32x64_sse2, 12),
- VarianceParams(5, 5, &aom_highbd_12_variance32x32_sse2, 12),
- VarianceParams(5, 4, &aom_highbd_12_variance32x16_sse2, 12),
- VarianceParams(4, 5, &aom_highbd_12_variance16x32_sse2, 12),
- VarianceParams(4, 4, &aom_highbd_12_variance16x16_sse2, 12),
- VarianceParams(4, 3, &aom_highbd_12_variance16x8_sse2, 12),
- VarianceParams(3, 4, &aom_highbd_12_variance8x16_sse2, 12),
- VarianceParams(3, 3, &aom_highbd_12_variance8x8_sse2, 12),
- VarianceParams(7, 7, &aom_highbd_10_variance128x128_sse2, 10),
- VarianceParams(7, 6, &aom_highbd_10_variance128x64_sse2, 10),
- VarianceParams(6, 7, &aom_highbd_10_variance64x128_sse2, 10),
- VarianceParams(6, 6, &aom_highbd_10_variance64x64_sse2, 10),
- VarianceParams(6, 5, &aom_highbd_10_variance64x32_sse2, 10),
- VarianceParams(5, 6, &aom_highbd_10_variance32x64_sse2, 10),
- VarianceParams(5, 5, &aom_highbd_10_variance32x32_sse2, 10),
- VarianceParams(5, 4, &aom_highbd_10_variance32x16_sse2, 10),
- VarianceParams(4, 5, &aom_highbd_10_variance16x32_sse2, 10),
- VarianceParams(4, 4, &aom_highbd_10_variance16x16_sse2, 10),
- VarianceParams(4, 3, &aom_highbd_10_variance16x8_sse2, 10),
- VarianceParams(3, 4, &aom_highbd_10_variance8x16_sse2, 10),
- VarianceParams(3, 3, &aom_highbd_10_variance8x8_sse2, 10),
- VarianceParams(7, 7, &aom_highbd_8_variance128x128_sse2, 8),
- VarianceParams(7, 6, &aom_highbd_8_variance128x64_sse2, 8),
- VarianceParams(6, 7, &aom_highbd_8_variance64x128_sse2, 8),
- VarianceParams(6, 6, &aom_highbd_8_variance64x64_sse2, 8),
- VarianceParams(6, 5, &aom_highbd_8_variance64x32_sse2, 8),
- VarianceParams(5, 6, &aom_highbd_8_variance32x64_sse2, 8),
- VarianceParams(5, 5, &aom_highbd_8_variance32x32_sse2, 8),
- VarianceParams(5, 4, &aom_highbd_8_variance32x16_sse2, 8),
- VarianceParams(4, 5, &aom_highbd_8_variance16x32_sse2, 8),
- VarianceParams(4, 4, &aom_highbd_8_variance16x16_sse2, 8),
- VarianceParams(4, 3, &aom_highbd_8_variance16x8_sse2, 8),
- VarianceParams(3, 4, &aom_highbd_8_variance8x16_sse2, 8),
- VarianceParams(3, 3, &aom_highbd_8_variance8x8_sse2, 8)
-};
-INSTANTIATE_TEST_CASE_P(SSE2, AvxHBDVarianceTest,
- ::testing::ValuesIn(kArrayHBDVariance_sse2));
-
-#if HAVE_AVX2
-
-const VarianceParams kArrayHBDVariance_avx2[] = {
- VarianceParams(7, 7, &aom_highbd_10_variance128x128_avx2, 10),
- VarianceParams(7, 6, &aom_highbd_10_variance128x64_avx2, 10),
- VarianceParams(6, 7, &aom_highbd_10_variance64x128_avx2, 10),
- VarianceParams(6, 6, &aom_highbd_10_variance64x64_avx2, 10),
- VarianceParams(6, 5, &aom_highbd_10_variance64x32_avx2, 10),
- VarianceParams(5, 6, &aom_highbd_10_variance32x64_avx2, 10),
- VarianceParams(5, 5, &aom_highbd_10_variance32x32_avx2, 10),
- VarianceParams(5, 4, &aom_highbd_10_variance32x16_avx2, 10),
- VarianceParams(4, 5, &aom_highbd_10_variance16x32_avx2, 10),
- VarianceParams(4, 4, &aom_highbd_10_variance16x16_avx2, 10),
- VarianceParams(4, 3, &aom_highbd_10_variance16x8_avx2, 10),
- VarianceParams(3, 4, &aom_highbd_10_variance8x16_avx2, 10),
- VarianceParams(3, 3, &aom_highbd_10_variance8x8_avx2, 10)
-};
-
-INSTANTIATE_TEST_CASE_P(AVX2, AvxHBDVarianceTest,
- ::testing::ValuesIn(kArrayHBDVariance_avx2));
-#endif // HAVE_AVX2
-
-const SubpelVarianceParams kArrayHBDSubpelVariance_sse2[] = {
- SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_sse2, 12),
- SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_sse2, 12),
- SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_sse2, 12),
- SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_sse2, 12),
- SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_sse2, 12),
- SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_sse2, 12),
- SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_sse2, 12),
- SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_sse2, 12),
- SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_sse2, 12),
- SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_sse2, 12),
- SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_sse2, 12),
- SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_sse2, 10),
- SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_sse2, 10),
- SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_sse2, 10),
- SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_sse2, 10),
- SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_sse2, 10),
- SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_sse2, 10),
- SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_sse2, 10),
- SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_sse2, 10),
- SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_sse2, 10),
- SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_sse2, 10),
- SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_sse2, 10),
- SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_sse2, 8),
- SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_sse2, 8),
- SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_sse2, 8),
- SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_sse2, 8),
- SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_sse2, 8),
- SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_sse2, 8),
- SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_sse2, 8),
- SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_sse2, 8),
- SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_sse2, 8),
- SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_sse2, 8),
- SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_sse2, 8)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, AvxHBDSubpelVarianceTest,
- ::testing::ValuesIn(kArrayHBDSubpelVariance_sse2));
-
-const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_sse2[] = {
- SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_sse2,
- 12),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_sse2,
- 12),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_sse2,
- 12),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_sse2,
- 12),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_sse2,
- 12),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_sse2,
- 12),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_sse2,
- 12),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_sse2,
- 12),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_sse2,
- 12),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_sse2,
- 12),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_sse2,
- 12),
- SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_sse2,
- 10),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_sse2,
- 10),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_sse2,
- 10),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_sse2,
- 10),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_sse2,
- 10),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_sse2,
- 10),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_sse2,
- 10),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_sse2,
- 10),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_sse2,
- 10),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_sse2,
- 10),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_sse2,
- 10),
- SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_sse2,
- 8),
- SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_sse2,
- 8),
- SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_sse2,
- 8),
- SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_sse2,
- 8),
- SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_sse2,
- 8),
- SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_sse2,
- 8),
- SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_sse2,
- 8),
- SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_sse2,
- 8),
- SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_sse2,
- 8),
- SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_sse2,
- 8),
- SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_sse2, 8)
-};
-
-INSTANTIATE_TEST_CASE_P(SSE2, AvxHBDSubpelAvgVarianceTest,
- ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_sse2));
-#endif // HAVE_SSE2
-
-#if HAVE_SSSE3
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_ssse3, 0),
- SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_ssse3, 0),
- SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_ssse3, 0),
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_ssse3, 0),
- SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_ssse3, 0),
- SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_ssse3, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_ssse3, 0),
- SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_ssse3, 0),
- SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_ssse3, 0),
- SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_ssse3, 0),
- SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_ssse3, 0),
- SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_ssse3, 0),
- SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_ssse3, 0),
- SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_ssse3, 0),
- SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_ssse3, 0),
- SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_ssse3, 0)));
-
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_ssse3,
- 0),
- SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_ssse3,
- 0),
- SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_ssse3,
- 0),
- SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_ssse3,
- 0),
- SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_ssse3,
- 0),
- SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_ssse3,
- 0),
- SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_ssse3,
- 0),
- SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_ssse3,
- 0),
- SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_ssse3,
- 0),
- SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_ssse3,
- 0),
- SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_ssse3, 0),
- SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_ssse3, 0),
- SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_ssse3, 0),
- SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_ssse3, 0),
- SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_ssse3, 0),
- SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_ssse3,
- 0)));
-
-INSTANTIATE_TEST_CASE_P(
- SSSE3, AvxJntSubpelAvgVarianceTest,
- ::testing::Values(
- JntSubpelAvgVarianceParams(6, 6,
- &aom_jnt_sub_pixel_avg_variance64x64_ssse3,
- 0),
- JntSubpelAvgVarianceParams(6, 5,
- &aom_jnt_sub_pixel_avg_variance64x32_ssse3,
- 0),
- JntSubpelAvgVarianceParams(5, 6,
- &aom_jnt_sub_pixel_avg_variance32x64_ssse3,
- 0),
- JntSubpelAvgVarianceParams(5, 5,
- &aom_jnt_sub_pixel_avg_variance32x32_ssse3,
- 0),
- JntSubpelAvgVarianceParams(5, 4,
- &aom_jnt_sub_pixel_avg_variance32x16_ssse3,
- 0),
- JntSubpelAvgVarianceParams(4, 5,
- &aom_jnt_sub_pixel_avg_variance16x32_ssse3,
- 0),
- JntSubpelAvgVarianceParams(4, 4,
- &aom_jnt_sub_pixel_avg_variance16x16_ssse3,
- 0),
- JntSubpelAvgVarianceParams(4, 3,
- &aom_jnt_sub_pixel_avg_variance16x8_ssse3,
- 0),
- JntSubpelAvgVarianceParams(3, 4,
- &aom_jnt_sub_pixel_avg_variance8x16_ssse3,
- 0),
- JntSubpelAvgVarianceParams(3, 3,
- &aom_jnt_sub_pixel_avg_variance8x8_ssse3, 0),
- JntSubpelAvgVarianceParams(3, 2,
- &aom_jnt_sub_pixel_avg_variance8x4_ssse3, 0),
- JntSubpelAvgVarianceParams(2, 3,
- &aom_jnt_sub_pixel_avg_variance4x8_ssse3, 0),
- JntSubpelAvgVarianceParams(2, 2,
- &aom_jnt_sub_pixel_avg_variance4x4_ssse3,
- 0)));
-#endif // HAVE_SSSE3
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AvxObmcSubpelVarianceTest,
- ::testing::Values(
- ObmcSubpelVarianceParams(7, 7,
- &aom_obmc_sub_pixel_variance128x128_sse4_1, 0),
- ObmcSubpelVarianceParams(7, 6,
- &aom_obmc_sub_pixel_variance128x64_sse4_1, 0),
- ObmcSubpelVarianceParams(6, 7,
- &aom_obmc_sub_pixel_variance64x128_sse4_1, 0),
- ObmcSubpelVarianceParams(6, 6, &aom_obmc_sub_pixel_variance64x64_sse4_1,
- 0),
- ObmcSubpelVarianceParams(6, 5, &aom_obmc_sub_pixel_variance64x32_sse4_1,
- 0),
- ObmcSubpelVarianceParams(5, 6, &aom_obmc_sub_pixel_variance32x64_sse4_1,
- 0),
- ObmcSubpelVarianceParams(5, 5, &aom_obmc_sub_pixel_variance32x32_sse4_1,
- 0),
- ObmcSubpelVarianceParams(5, 4, &aom_obmc_sub_pixel_variance32x16_sse4_1,
- 0),
- ObmcSubpelVarianceParams(4, 5, &aom_obmc_sub_pixel_variance16x32_sse4_1,
- 0),
- ObmcSubpelVarianceParams(4, 4, &aom_obmc_sub_pixel_variance16x16_sse4_1,
- 0),
- ObmcSubpelVarianceParams(4, 3, &aom_obmc_sub_pixel_variance16x8_sse4_1,
- 0),
- ObmcSubpelVarianceParams(3, 4, &aom_obmc_sub_pixel_variance8x16_sse4_1,
- 0),
- ObmcSubpelVarianceParams(3, 3, &aom_obmc_sub_pixel_variance8x8_sse4_1,
- 0),
- ObmcSubpelVarianceParams(3, 2, &aom_obmc_sub_pixel_variance8x4_sse4_1,
- 0),
- ObmcSubpelVarianceParams(2, 3, &aom_obmc_sub_pixel_variance4x8_sse4_1,
- 0),
- ObmcSubpelVarianceParams(2, 2, &aom_obmc_sub_pixel_variance4x4_sse4_1,
- 0)));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-INSTANTIATE_TEST_CASE_P(AVX2, AvxMseTest,
- ::testing::Values(MseParams(4, 4, &aom_mse16x16_avx2)));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, AvxVarianceTest,
- ::testing::Values(VarianceParams(7, 7, &aom_variance128x128_avx2),
- VarianceParams(7, 6, &aom_variance128x64_avx2),
- VarianceParams(6, 7, &aom_variance64x128_avx2),
- VarianceParams(6, 6, &aom_variance64x64_avx2),
- VarianceParams(6, 5, &aom_variance64x32_avx2),
- VarianceParams(6, 4, &aom_variance64x16_avx2),
- VarianceParams(5, 6, &aom_variance32x64_avx2),
- VarianceParams(5, 5, &aom_variance32x32_avx2),
- VarianceParams(5, 4, &aom_variance32x16_avx2),
- VarianceParams(5, 3, &aom_variance32x8_avx2),
- VarianceParams(4, 6, &aom_variance16x64_avx2),
- VarianceParams(4, 5, &aom_variance16x32_avx2),
- VarianceParams(4, 4, &aom_variance16x16_avx2),
- VarianceParams(4, 3, &aom_variance16x8_avx2),
- VarianceParams(4, 2, &aom_variance16x4_avx2)));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_avx2, 0),
- SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_avx2, 0),
- SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_avx2, 0),
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_avx2, 0),
- SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_avx2, 0),
- SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_avx2, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_avx2, 0),
- SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_avx2, 0)));
-
-INSTANTIATE_TEST_CASE_P(
- AVX2, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_avx2,
- 0),
- SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_avx2,
- 0),
- SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_avx2,
- 0),
- SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_avx2, 0),
- SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_avx2, 0),
- SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_avx2, 0),
- SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_avx2, 0),
- SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_avx2,
- 0)));
-#endif // HAVE_AVX2
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(NEON, AvxSseTest,
- ::testing::Values(SseParams(2, 2,
- &aom_get4x4sse_cs_neon)));
-
-INSTANTIATE_TEST_CASE_P(NEON, AvxMseTest,
- ::testing::Values(MseParams(4, 4, &aom_mse16x16_neon)));
-
-INSTANTIATE_TEST_CASE_P(
- NEON, AvxVarianceTest,
- ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_neon),
- VarianceParams(6, 5, &aom_variance64x32_neon),
- VarianceParams(5, 6, &aom_variance32x64_neon),
- VarianceParams(5, 5, &aom_variance32x32_neon),
- VarianceParams(4, 4, &aom_variance16x16_neon),
- VarianceParams(4, 3, &aom_variance16x8_neon),
- VarianceParams(3, 4, &aom_variance8x16_neon),
- VarianceParams(3, 3, &aom_variance8x8_neon)));
-
-INSTANTIATE_TEST_CASE_P(
- NEON, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_neon, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_neon, 0),
- SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_neon, 0),
- SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_neon, 0)));
-#endif // HAVE_NEON
-
-#if HAVE_MSA
-INSTANTIATE_TEST_CASE_P(MSA, SumOfSquaresTest,
- ::testing::Values(aom_get_mb_ss_msa));
-
-INSTANTIATE_TEST_CASE_P(MSA, AvxSseTest,
- ::testing::Values(SseParams(2, 2,
- &aom_get4x4sse_cs_msa)));
-
-INSTANTIATE_TEST_CASE_P(MSA, AvxMseTest,
- ::testing::Values(MseParams(4, 4, &aom_mse16x16_msa),
- MseParams(4, 3, &aom_mse16x8_msa),
- MseParams(3, 4, &aom_mse8x16_msa),
- MseParams(3, 3, &aom_mse8x8_msa)));
-
-INSTANTIATE_TEST_CASE_P(
- MSA, AvxVarianceTest,
- ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_msa),
- VarianceParams(6, 5, &aom_variance64x32_msa),
- VarianceParams(5, 6, &aom_variance32x64_msa),
- VarianceParams(5, 5, &aom_variance32x32_msa),
- VarianceParams(5, 4, &aom_variance32x16_msa),
- VarianceParams(4, 5, &aom_variance16x32_msa),
- VarianceParams(4, 4, &aom_variance16x16_msa),
- VarianceParams(4, 3, &aom_variance16x8_msa),
- VarianceParams(3, 4, &aom_variance8x16_msa),
- VarianceParams(3, 3, &aom_variance8x8_msa),
- VarianceParams(3, 2, &aom_variance8x4_msa),
- VarianceParams(2, 3, &aom_variance4x8_msa),
- VarianceParams(2, 2, &aom_variance4x4_msa)));
-
-INSTANTIATE_TEST_CASE_P(
- MSA, AvxSubpelVarianceTest,
- ::testing::Values(
- SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_msa, 0),
- SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_msa, 0),
- SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_msa, 0),
- SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_msa, 0),
- SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_msa, 0),
- SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_msa, 0),
- SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_msa, 0),
- SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_msa, 0),
- SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_msa, 0),
- SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_msa, 0),
- SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_msa, 0),
- SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_msa, 0),
- SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_msa, 0)));
-
-INSTANTIATE_TEST_CASE_P(
- MSA, AvxSubpelAvgVarianceTest,
- ::testing::Values(
- SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_msa, 0),
- SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_msa, 0),
- SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_msa, 0),
- SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_msa, 0),
- SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_msa, 0),
- SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_msa, 0),
- SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_msa, 0),
- SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_msa, 0),
- SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_msa, 0),
- SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_msa, 0),
- SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_msa, 0),
- SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_msa, 0),
- SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_msa, 0)));
-#endif // HAVE_MSA
-} // namespace
diff --git a/third_party/aom/test/video_source.h b/third_party/aom/test/video_source.h
deleted file mode 100644
index 3c1c5e559..000000000
--- a/third_party/aom/test/video_source.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_VIDEO_SOURCE_H_
-#define AOM_TEST_VIDEO_SOURCE_H_
-
-#if defined(_WIN32)
-#undef NOMINMAX
-#define NOMINMAX
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#endif
-#include <cstdio>
-#include <cstdlib>
-#include <string>
-#include "test/acm_random.h"
-#include "aom/aom_encoder.h"
-
-namespace libaom_test {
-
-// Helper macros to ensure LIBAOM_TEST_DATA_PATH is a quoted string.
-// These are undefined right below GetDataPath
-// NOTE: LIBAOM_TEST_DATA_PATH MUST NOT be a quoted string before
-// Stringification or the GetDataPath will fail at runtime
-#define TO_STRING(S) #S
-#define STRINGIFY(S) TO_STRING(S)
-
-// A simple function to encapsulate cross platform retrieval of test data path
-static std::string GetDataPath() {
- const char *const data_path = getenv("LIBAOM_TEST_DATA_PATH");
- if (data_path == NULL) {
-#ifdef LIBAOM_TEST_DATA_PATH
- // In some environments, we cannot set environment variables
- // Instead, we set the data path by using a preprocessor symbol
- // which can be set from make files
- return STRINGIFY(LIBAOM_TEST_DATA_PATH);
-#else
- return ".";
-#endif
- }
- return data_path;
-}
-
-// Undefining stringification macros because they are not used elsewhere
-#undef TO_STRING
-#undef STRINGIFY
-
-inline FILE *OpenTestDataFile(const std::string &file_name) {
- const std::string path_to_source = GetDataPath() + "/" + file_name;
- return fopen(path_to_source.c_str(), "rb");
-}
-
-static FILE *GetTempOutFile(std::string *file_name) {
- file_name->clear();
-#if defined(_WIN32)
- char fname[MAX_PATH];
- char tmppath[MAX_PATH];
- if (GetTempPathA(MAX_PATH, tmppath)) {
- // Assume for now that the filename generated is unique per process
- if (GetTempFileNameA(tmppath, "lvx", 0, fname)) {
- file_name->assign(fname);
- return fopen(fname, "wb+");
- }
- }
- return NULL;
-#else
- char name_template[] = "/tmp/libaomtest.XXXXXX";
- const int fd = mkstemp(name_template);
- *file_name = name_template;
- return fdopen(fd, "wb+");
-#endif
-}
-
-class TempOutFile {
- public:
- TempOutFile() { file_ = GetTempOutFile(&file_name_); }
- ~TempOutFile() {
- CloseFile();
- if (!file_name_.empty()) {
- EXPECT_EQ(0, remove(file_name_.c_str()));
- }
- }
- FILE *file() { return file_; }
- const std::string &file_name() { return file_name_; }
-
- protected:
- void CloseFile() {
- if (file_) {
- fclose(file_);
- file_ = NULL;
- }
- }
- FILE *file_;
- std::string file_name_;
-};
-
-// Abstract base class for test video sources, which provide a stream of
-// aom_image_t images with associated timestamps and duration.
-class VideoSource {
- public:
- virtual ~VideoSource() {}
-
- // Prepare the stream for reading, rewind/open as necessary.
- virtual void Begin() = 0;
-
- // Advance the cursor to the next frame
- virtual void Next() = 0;
-
- // Get the current video frame, or NULL on End-Of-Stream.
- virtual aom_image_t *img() const = 0;
-
- // Get the presentation timestamp of the current frame.
- virtual aom_codec_pts_t pts() const = 0;
-
- // Get the current frame's duration
- virtual unsigned long duration() const = 0;
-
- // Get the timebase for the stream
- virtual aom_rational_t timebase() const = 0;
-
- // Get the current frame counter, starting at 0.
- virtual unsigned int frame() const = 0;
-
- // Get the current file limit.
- virtual unsigned int limit() const = 0;
-};
-
-class DummyVideoSource : public VideoSource {
- public:
- DummyVideoSource()
- : img_(NULL), limit_(100), width_(80), height_(64),
- format_(AOM_IMG_FMT_I420) {
- ReallocImage();
- }
-
- virtual ~DummyVideoSource() { aom_img_free(img_); }
-
- virtual void Begin() {
- frame_ = 0;
- FillFrame();
- }
-
- virtual void Next() {
- ++frame_;
- FillFrame();
- }
-
- virtual aom_image_t *img() const { return (frame_ < limit_) ? img_ : NULL; }
-
- // Models a stream where Timebase = 1/FPS, so pts == frame.
- virtual aom_codec_pts_t pts() const { return frame_; }
-
- virtual unsigned long duration() const { return 1; }
-
- virtual aom_rational_t timebase() const {
- const aom_rational_t t = { 1, 30 };
- return t;
- }
-
- virtual unsigned int frame() const { return frame_; }
-
- virtual unsigned int limit() const { return limit_; }
-
- void set_limit(unsigned int limit) { limit_ = limit; }
-
- void SetSize(unsigned int width, unsigned int height) {
- if (width != width_ || height != height_) {
- width_ = width;
- height_ = height;
- ReallocImage();
- }
- }
-
- void SetImageFormat(aom_img_fmt_t format) {
- if (format_ != format) {
- format_ = format;
- ReallocImage();
- }
- }
-
- protected:
- virtual void FillFrame() {
- if (img_) memset(img_->img_data, 0, raw_sz_);
- }
-
- void ReallocImage() {
- aom_img_free(img_);
- img_ = aom_img_alloc(NULL, format_, width_, height_, 32);
- raw_sz_ = ((img_->w + 31) & ~31) * img_->h * img_->bps / 8;
- }
-
- aom_image_t *img_;
- size_t raw_sz_;
- unsigned int limit_;
- unsigned int frame_;
- unsigned int width_;
- unsigned int height_;
- aom_img_fmt_t format_;
-};
-
-class RandomVideoSource : public DummyVideoSource {
- public:
- RandomVideoSource(int seed = ACMRandom::DeterministicSeed())
- : rnd_(seed), seed_(seed) {}
-
- protected:
- // Reset the RNG to get a matching stream for the second pass
- virtual void Begin() {
- frame_ = 0;
- rnd_.Reset(seed_);
- FillFrame();
- }
-
- // 15 frames of noise, followed by 15 static frames. Reset to 0 rather
- // than holding previous frames to encourage keyframes to be thrown.
- virtual void FillFrame() {
- if (img_) {
- if (frame_ % 30 < 15)
- for (size_t i = 0; i < raw_sz_; ++i) img_->img_data[i] = rnd_.Rand8();
- else
- memset(img_->img_data, 0, raw_sz_);
- }
- }
-
- ACMRandom rnd_;
- int seed_;
-};
-
-// Abstract base class for test video sources, which provide a stream of
-// decompressed images to the decoder.
-class CompressedVideoSource {
- public:
- virtual ~CompressedVideoSource() {}
-
- virtual void Init() = 0;
-
- // Prepare the stream for reading, rewind/open as necessary.
- virtual void Begin() = 0;
-
- // Advance the cursor to the next frame
- virtual void Next() = 0;
-
- virtual const uint8_t *cxdata() const = 0;
-
- virtual size_t frame_size() const = 0;
-
- virtual unsigned int frame_number() const = 0;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_VIDEO_SOURCE_H_
diff --git a/third_party/aom/test/visual_metrics.py b/third_party/aom/test/visual_metrics.py
deleted file mode 100755
index 9055feb33..000000000
--- a/third_party/aom/test/visual_metrics.py
+++ /dev/null
@@ -1,466 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2016, Alliance for Open Media. All rights reserved
-#
-# This source code is subject to the terms of the BSD 2 Clause License and
-# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-# was not distributed with this source code in the LICENSE file, you can
-# obtain it at www.aomedia.org/license/software. If the Alliance for Open
-# Media Patent License 1.0 was not distributed with this source code in the
-# PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-#
-
-"""Converts video encoding result data from text files to visualization
-data source."""
-
-__author__ = "jzern@google.com (James Zern),"
-__author__ += "jimbankoski@google.com (Jim Bankoski)"
-
-import fnmatch
-import numpy as np
-import scipy as sp
-import scipy.interpolate
-import os
-import re
-import string
-import sys
-import math
-import warnings
-
-import gviz_api
-
-from os.path import basename
-from os.path import splitext
-
-warnings.simplefilter('ignore', np.RankWarning)
-warnings.simplefilter('ignore', RuntimeWarning)
-
-def bdsnr2(metric_set1, metric_set2):
- """
- BJONTEGAARD Bjontegaard metric calculation adapted
- Bjontegaard's snr metric allows to compute the average % saving in decibels
- between two rate-distortion curves [1]. This is an adaptation of that
- method that fixes inconsistencies when the curve fit operation goes awry
- by replacing the curve fit function with a Piecewise Cubic Hermite
- Interpolating Polynomial and then integrating that by evaluating that
- function at small intervals using the trapezoid method to calculate
- the integral.
-
- metric_set1 - list of tuples ( bitrate, metric ) for first graph
- metric_set2 - list of tuples ( bitrate, metric ) for second graph
- """
-
- if not metric_set1 or not metric_set2:
- return 0.0
-
- try:
-
- # pchip_interlopate requires keys sorted by x axis. x-axis will
- # be our metric not the bitrate so sort by metric.
- metric_set1.sort()
- metric_set2.sort()
-
- # Pull the log of the rate and clamped psnr from metric_sets.
- log_rate1 = [math.log(x[0]) for x in metric_set1]
- metric1 = [100.0 if x[1] == float('inf') else x[1] for x in metric_set1]
- log_rate2 = [math.log(x[0]) for x in metric_set2]
- metric2 = [100.0 if x[1] == float('inf') else x[1] for x in metric_set2]
-
- # Integration interval. This metric only works on the area that's
- # overlapping. Extrapolation of these things is sketchy so we avoid.
- min_int = max([min(log_rate1), min(log_rate2)])
- max_int = min([max(log_rate1), max(log_rate2)])
-
- # No overlap means no sensible metric possible.
- if max_int <= min_int:
- return 0.0
-
- # Use Piecewise Cubic Hermite Interpolating Polynomial interpolation to
- # create 100 new samples points separated by interval.
- lin = np.linspace(min_int, max_int, num=100, retstep=True)
- interval = lin[1]
- samples = lin[0]
- v1 = scipy.interpolate.pchip_interpolate(log_rate1, metric1, samples)
- v2 = scipy.interpolate.pchip_interpolate(log_rate2, metric2, samples)
-
- # Calculate the integral using the trapezoid method on the samples.
- int_v1 = np.trapz(v1, dx=interval)
- int_v2 = np.trapz(v2, dx=interval)
-
- # Calculate the average improvement.
- avg_exp_diff = (int_v2 - int_v1) / (max_int - min_int)
-
- except (TypeError, ZeroDivisionError, ValueError, np.RankWarning) as e:
- return 0
-
- return avg_exp_diff
-
-def bdrate2(metric_set1, metric_set2):
- """
- BJONTEGAARD Bjontegaard metric calculation adapted
- Bjontegaard's metric allows to compute the average % saving in bitrate
- between two rate-distortion curves [1]. This is an adaptation of that
- method that fixes inconsistencies when the curve fit operation goes awry
- by replacing the curve fit function with a Piecewise Cubic Hermite
- Interpolating Polynomial and then integrating that by evaluating that
- function at small intervals using the trapezoid method to calculate
- the integral.
-
- metric_set1 - list of tuples ( bitrate, metric ) for first graph
- metric_set2 - list of tuples ( bitrate, metric ) for second graph
- """
-
- if not metric_set1 or not metric_set2:
- return 0.0
-
- try:
-
- # pchip_interlopate requires keys sorted by x axis. x-axis will
- # be our metric not the bitrate so sort by metric.
- metric_set1.sort(key=lambda tup: tup[1])
- metric_set2.sort(key=lambda tup: tup[1])
-
- # Pull the log of the rate and clamped psnr from metric_sets.
- log_rate1 = [math.log(x[0]) for x in metric_set1]
- metric1 = [100.0 if x[1] == float('inf') else x[1] for x in metric_set1]
- log_rate2 = [math.log(x[0]) for x in metric_set2]
- metric2 = [100.0 if x[1] == float('inf') else x[1] for x in metric_set2]
-
- # Integration interval. This metric only works on the area that's
- # overlapping. Extrapolation of these things is sketchy so we avoid.
- min_int = max([min(metric1), min(metric2)])
- max_int = min([max(metric1), max(metric2)])
-
- # No overlap means no sensible metric possible.
- if max_int <= min_int:
- return 0.0
-
- # Use Piecewise Cubic Hermite Interpolating Polynomial interpolation to
- # create 100 new samples points separated by interval.
- lin = np.linspace(min_int, max_int, num=100, retstep=True)
- interval = lin[1]
- samples = lin[0]
- v1 = scipy.interpolate.pchip_interpolate(metric1, log_rate1, samples)
- v2 = scipy.interpolate.pchip_interpolate(metric2, log_rate2, samples)
-
- # Calculate the integral using the trapezoid method on the samples.
- int_v1 = np.trapz(v1, dx=interval)
- int_v2 = np.trapz(v2, dx=interval)
-
- # Calculate the average improvement.
- avg_exp_diff = (int_v2 - int_v1) / (max_int - min_int)
-
- except (TypeError, ZeroDivisionError, ValueError, np.RankWarning) as e:
- return 0
-
- # Convert to a percentage.
- avg_diff = (math.exp(avg_exp_diff) - 1) * 100
-
- return avg_diff
-
-
-
-def FillForm(string_for_substitution, dictionary_of_vars):
- """
- This function substitutes all matches of the command string //%% ... %%//
- with the variable represented by ... .
- """
- return_string = string_for_substitution
- for i in re.findall("//%%(.*)%%//", string_for_substitution):
- return_string = re.sub("//%%" + i + "%%//", dictionary_of_vars[i],
- return_string)
- return return_string
-
-
-def HasMetrics(line):
- """
- The metrics files produced by aomenc are started with a B for headers.
- """
- # If the first char of the first word on the line is a digit
- if len(line) == 0:
- return False
- if len(line.split()) == 0:
- return False
- if line.split()[0][0:1].isdigit():
- return True
- return False
-
-def GetMetrics(file_name):
- metric_file = open(file_name, "r")
- return metric_file.readline().split();
-
-def ParseMetricFile(file_name, metric_column):
- metric_set1 = set([])
- metric_file = open(file_name, "r")
- for line in metric_file:
- metrics = string.split(line)
- if HasMetrics(line):
- if metric_column < len(metrics):
- try:
- tuple = float(metrics[0]), float(metrics[metric_column])
- except:
- tuple = float(metrics[0]), 0
- else:
- tuple = float(metrics[0]), 0
- metric_set1.add(tuple)
- metric_set1_sorted = sorted(metric_set1)
- return metric_set1_sorted
-
-
-def FileBetter(file_name_1, file_name_2, metric_column, method):
- """
- Compares two data files and determines which is better and by how
- much. Also produces a histogram of how much better, by PSNR.
- metric_column is the metric.
- """
- # Store and parse our two files into lists of unique tuples.
-
- # Read the two files, parsing out lines starting with bitrate.
- metric_set1_sorted = ParseMetricFile(file_name_1, metric_column)
- metric_set2_sorted = ParseMetricFile(file_name_2, metric_column)
-
-
- def GraphBetter(metric_set1_sorted, metric_set2_sorted, base_is_set_2):
- """
- Search through the sorted metric file for metrics on either side of
- the metric from file 1. Since both lists are sorted we really
- should not have to search through the entire range, but these
- are small files."""
- total_bitrate_difference_ratio = 0.0
- count = 0
- for bitrate, metric in metric_set1_sorted:
- if bitrate == 0:
- continue
- for i in range(len(metric_set2_sorted) - 1):
- s2_bitrate_0, s2_metric_0 = metric_set2_sorted[i]
- s2_bitrate_1, s2_metric_1 = metric_set2_sorted[i + 1]
- # We have a point on either side of our metric range.
- if metric > s2_metric_0 and metric <= s2_metric_1:
-
- # Calculate a slope.
- if s2_metric_1 - s2_metric_0 != 0:
- metric_slope = ((s2_bitrate_1 - s2_bitrate_0) /
- (s2_metric_1 - s2_metric_0))
- else:
- metric_slope = 0
-
- estimated_s2_bitrate = (s2_bitrate_0 + (metric - s2_metric_0) *
- metric_slope)
-
- if estimated_s2_bitrate == 0:
- continue
- # Calculate percentage difference as given by base.
- if base_is_set_2 == 0:
- bitrate_difference_ratio = ((bitrate - estimated_s2_bitrate) /
- bitrate)
- else:
- bitrate_difference_ratio = ((bitrate - estimated_s2_bitrate) /
- estimated_s2_bitrate)
-
- total_bitrate_difference_ratio += bitrate_difference_ratio
- count += 1
- break
-
- # Calculate the average improvement between graphs.
- if count != 0:
- avg = total_bitrate_difference_ratio / count
-
- else:
- avg = 0.0
-
- return avg
-
- # Be fair to both graphs by testing all the points in each.
- if method == 'avg':
- avg_improvement = 50 * (
- GraphBetter(metric_set1_sorted, metric_set2_sorted, 1) -
- GraphBetter(metric_set2_sorted, metric_set1_sorted, 0))
- elif method == 'dsnr':
- avg_improvement = bdsnr2(metric_set1_sorted, metric_set2_sorted)
- else:
- avg_improvement = bdrate2(metric_set2_sorted, metric_set1_sorted)
-
- return avg_improvement
-
-
-def HandleFiles(variables):
- """
- This script creates html for displaying metric data produced from data
- in a video stats file, as created by the AOM project when enable_psnr
- is turned on:
-
- Usage: visual_metrics.py template.html pattern base_dir sub_dir [ sub_dir2 ..]
-
- The script parses each metrics file [see below] that matches the
- statfile_pattern in the baseline directory and looks for the file that
- matches that same file in each of the sub_dirs, and compares the resultant
- metrics bitrate, avg psnr, glb psnr, and ssim. "
-
- It provides a table in which each row is a file in the line directory,
- and a column for each subdir, with the cells representing how that clip
- compares to baseline for that subdir. A graph is given for each which
- compares filesize to that metric. If you click on a point in the graph it
- zooms in on that point.
-
- a SAMPLE metrics file:
-
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 25.911 38.242 38.104 38.258 38.121 75.790 14103
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 49.982 41.264 41.129 41.255 41.122 83.993 19817
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 74.967 42.911 42.767 42.899 42.756 87.928 17332
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 100.012 43.983 43.838 43.881 43.738 89.695 25389
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 149.980 45.338 45.203 45.184 45.043 91.591 25438
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 199.852 46.225 46.123 46.113 45.999 92.679 28302
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 249.922 46.864 46.773 46.777 46.673 93.334 27244
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 299.998 47.366 47.281 47.317 47.220 93.844 27137
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 349.769 47.746 47.677 47.722 47.648 94.178 32226
- Bitrate AVGPsnr GLBPsnr AVPsnrP GLPsnrP VPXSSIM Time(us)
- 399.773 48.032 47.971 48.013 47.946 94.362 36203
-
- sample use:
- visual_metrics.py template.html "*stt" aom aom_b aom_c > metrics.html
- """
-
- # The template file is the html file into which we will write the
- # data from the stats file, formatted correctly for the gviz_api.
- template_file = open(variables[1], "r")
- page_template = template_file.read()
- template_file.close()
-
- # This is the path match pattern for finding stats files amongst
- # all the other files it could be. eg: *.stt
- file_pattern = variables[2]
-
- # This is the directory with files that we will use to do the comparison
- # against.
- baseline_dir = variables[3]
- snrs = ''
- filestable = {}
-
- filestable['dsnr'] = ''
- filestable['drate'] = ''
- filestable['avg'] = ''
-
- # Dirs is directories after the baseline to compare to the base.
- dirs = variables[4:len(variables)]
-
- # Find the metric files in the baseline directory.
- dir_list = sorted(fnmatch.filter(os.listdir(baseline_dir), file_pattern))
-
- metrics = GetMetrics(baseline_dir + "/" + dir_list[0])
-
- metrics_js = 'metrics = ["' + '", "'.join(metrics) + '"];'
-
- for column in range(1, len(metrics)):
-
- for metric in ['avg','dsnr','drate']:
- description = {"file": ("string", "File")}
-
- # Go through each directory and add a column header to our description.
- countoverall = {}
- sumoverall = {}
-
- for directory in dirs:
- description[directory] = ("number", directory)
- countoverall[directory] = 0
- sumoverall[directory] = 0
-
- # Data holds the data for the visualization, name given comes from
- # gviz_api sample code.
- data = []
- for filename in dir_list:
- row = {'file': splitext(basename(filename))[0] }
- baseline_file_name = baseline_dir + "/" + filename
-
- # Read the metric file from each of the directories in our list.
- for directory in dirs:
- metric_file_name = directory + "/" + filename
-
- # If there is a metric file in the current directory, open it
- # and calculate its overall difference between it and the baseline
- # directory's metric file.
- if os.path.isfile(metric_file_name):
- overall = FileBetter(baseline_file_name, metric_file_name,
- column, metric)
- row[directory] = overall
-
- sumoverall[directory] += overall
- countoverall[directory] += 1
-
- data.append(row)
-
- # Add the overall numbers.
- row = {"file": "OVERALL" }
- for directory in dirs:
- row[directory] = sumoverall[directory] / countoverall[directory]
- data.append(row)
-
- # write the tables out
- data_table = gviz_api.DataTable(description)
- data_table.LoadData(data)
-
- filestable[metric] = ( filestable[metric] + "filestable_" + metric +
- "[" + str(column) + "]=" +
- data_table.ToJSon(columns_order=["file"]+dirs) + "\n" )
-
- filestable_avg = filestable['avg']
- filestable_dpsnr = filestable['dsnr']
- filestable_drate = filestable['drate']
-
- # Now we collect all the data for all the graphs. First the column
- # headers which will be Datarate and then each directory.
- columns = ("datarate",baseline_dir)
- description = {"datarate":("number", "Datarate")}
- for directory in dirs:
- description[directory] = ("number", directory)
-
- description[baseline_dir] = ("number", baseline_dir)
-
- snrs = snrs + "snrs[" + str(column) + "] = ["
-
- # Now collect the data for the graphs, file by file.
- for filename in dir_list:
-
- data = []
-
- # Collect the file in each directory and store all of its metrics
- # in the associated gviz metrics table.
- all_dirs = dirs + [baseline_dir]
- for directory in all_dirs:
-
- metric_file_name = directory + "/" + filename
- if not os.path.isfile(metric_file_name):
- continue
-
- # Read and parse the metrics file storing it to the data we'll
- # use for the gviz_api.Datatable.
- metrics = ParseMetricFile(metric_file_name, column)
- for bitrate, metric in metrics:
- data.append({"datarate": bitrate, directory: metric})
-
- data_table = gviz_api.DataTable(description)
- data_table.LoadData(data)
- snrs = snrs + "'" + data_table.ToJSon(
- columns_order=tuple(["datarate",baseline_dir]+dirs)) + "',"
-
- snrs = snrs + "]\n"
-
- formatters = ""
- for i in range(len(dirs)):
- formatters = "%s formatter.format(better, %d);" % (formatters, i+1)
-
- print FillForm(page_template, vars())
- return
-
-if len(sys.argv) < 3:
- print HandleFiles.__doc__
-else:
- HandleFiles(sys.argv)
diff --git a/third_party/aom/test/warp_filter_test.cc b/third_party/aom/test/warp_filter_test.cc
deleted file mode 100644
index 19a4e8b6a..000000000
--- a/third_party/aom/test/warp_filter_test.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/warp_filter_test_util.h"
-using ::testing::make_tuple;
-using ::testing::tuple;
-using libaom_test::ACMRandom;
-using libaom_test::AV1HighbdWarpFilter::AV1HighbdWarpFilterTest;
-using libaom_test::AV1WarpFilter::AV1WarpFilterTest;
-
-namespace {
-
-TEST_P(AV1WarpFilterTest, CheckOutput) {
- RunCheckOutput(::testing::get<3>(GET_PARAM(0)));
-}
-TEST_P(AV1WarpFilterTest, DISABLED_Speed) {
- RunSpeedTest(::testing::get<3>(GET_PARAM(0)));
-}
-
-INSTANTIATE_TEST_CASE_P(
- C, AV1WarpFilterTest,
- libaom_test::AV1WarpFilter::BuildParams(av1_warp_affine_c));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(
- SSE4_1, AV1WarpFilterTest,
- libaom_test::AV1WarpFilter::BuildParams(av1_warp_affine_sse4_1));
-
-TEST_P(AV1HighbdWarpFilterTest, CheckOutput) {
- RunCheckOutput(::testing::get<4>(GET_PARAM(0)));
-}
-TEST_P(AV1HighbdWarpFilterTest, DISABLED_Speed) {
- RunSpeedTest(::testing::get<4>(GET_PARAM(0)));
-}
-
-INSTANTIATE_TEST_CASE_P(SSE4_1, AV1HighbdWarpFilterTest,
- libaom_test::AV1HighbdWarpFilter::BuildParams(
- av1_highbd_warp_affine_sse4_1));
-
-#endif // HAVE_SSE4_1
-
-#if HAVE_NEON
-INSTANTIATE_TEST_CASE_P(
- NEON, AV1WarpFilterTest,
- libaom_test::AV1WarpFilter::BuildParams(av1_warp_affine_neon));
-#endif // HAVE_NEON
-
-} // namespace
diff --git a/third_party/aom/test/warp_filter_test_util.cc b/third_party/aom/test/warp_filter_test_util.cc
deleted file mode 100644
index 69b2ed4af..000000000
--- a/third_party/aom/test/warp_filter_test_util.cc
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#include "aom_ports/aom_timer.h"
-#include "test/warp_filter_test_util.h"
-
-using ::testing::make_tuple;
-using ::testing::tuple;
-
-namespace libaom_test {
-
-int32_t random_warped_param(libaom_test::ACMRandom *rnd, int bits) {
- // 1 in 8 chance of generating zero (arbitrarily chosen)
- if (((rnd->Rand8()) & 7) == 0) return 0;
- // Otherwise, enerate uniform values in the range
- // [-(1 << bits), 1] U [1, 1<<bits]
- int32_t v = 1 + (rnd->Rand16() & ((1 << bits) - 1));
- if ((rnd->Rand8()) & 1) return -v;
- return v;
-}
-
-void generate_warped_model(libaom_test::ACMRandom *rnd, int32_t *mat,
- int16_t *alpha, int16_t *beta, int16_t *gamma,
- int16_t *delta, const int is_alpha_zero,
- const int is_beta_zero, const int is_gamma_zero,
- const int is_delta_zero) {
- while (1) {
- int rnd8 = rnd->Rand8() & 3;
- mat[0] = random_warped_param(rnd, WARPEDMODEL_PREC_BITS + 6);
- mat[1] = random_warped_param(rnd, WARPEDMODEL_PREC_BITS + 6);
- mat[2] = (random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3)) +
- (1 << WARPEDMODEL_PREC_BITS);
- mat[3] = random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3);
-
- if (rnd8 <= 1) {
- // AFFINE
- mat[4] = random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3);
- mat[5] = (random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3)) +
- (1 << WARPEDMODEL_PREC_BITS);
- } else if (rnd8 == 2) {
- mat[4] = -mat[3];
- mat[5] = mat[2];
- } else {
- mat[4] = random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3);
- mat[5] = (random_warped_param(rnd, WARPEDMODEL_PREC_BITS - 3)) +
- (1 << WARPEDMODEL_PREC_BITS);
- if (is_alpha_zero == 1) mat[2] = 1 << WARPEDMODEL_PREC_BITS;
- if (is_beta_zero == 1) mat[3] = 0;
- if (is_gamma_zero == 1) mat[4] = 0;
- if (is_delta_zero == 1)
- mat[5] = (((int64_t)mat[3] * mat[4] + (mat[2] / 2)) / mat[2]) +
- (1 << WARPEDMODEL_PREC_BITS);
- }
-
- // Calculate the derived parameters and check that they are suitable
- // for the warp filter.
- assert(mat[2] != 0);
-
- *alpha = clamp(mat[2] - (1 << WARPEDMODEL_PREC_BITS), INT16_MIN, INT16_MAX);
- *beta = clamp(mat[3], INT16_MIN, INT16_MAX);
- *gamma = clamp(((int64_t)mat[4] * (1 << WARPEDMODEL_PREC_BITS)) / mat[2],
- INT16_MIN, INT16_MAX);
- *delta =
- clamp(mat[5] - (((int64_t)mat[3] * mat[4] + (mat[2] / 2)) / mat[2]) -
- (1 << WARPEDMODEL_PREC_BITS),
- INT16_MIN, INT16_MAX);
-
- if ((4 * abs(*alpha) + 7 * abs(*beta) >= (1 << WARPEDMODEL_PREC_BITS)) ||
- (4 * abs(*gamma) + 4 * abs(*delta) >= (1 << WARPEDMODEL_PREC_BITS)))
- continue;
-
- *alpha = ROUND_POWER_OF_TWO_SIGNED(*alpha, WARP_PARAM_REDUCE_BITS) *
- (1 << WARP_PARAM_REDUCE_BITS);
- *beta = ROUND_POWER_OF_TWO_SIGNED(*beta, WARP_PARAM_REDUCE_BITS) *
- (1 << WARP_PARAM_REDUCE_BITS);
- *gamma = ROUND_POWER_OF_TWO_SIGNED(*gamma, WARP_PARAM_REDUCE_BITS) *
- (1 << WARP_PARAM_REDUCE_BITS);
- *delta = ROUND_POWER_OF_TWO_SIGNED(*delta, WARP_PARAM_REDUCE_BITS) *
- (1 << WARP_PARAM_REDUCE_BITS);
-
- // We have a valid model, so finish
- return;
- }
-}
-
-namespace AV1WarpFilter {
-::testing::internal::ParamGenerator<WarpTestParams> BuildParams(
- warp_affine_func filter) {
- WarpTestParam params[] = {
- make_tuple(4, 4, 50000, filter), make_tuple(8, 8, 50000, filter),
- make_tuple(64, 64, 1000, filter), make_tuple(4, 16, 20000, filter),
- make_tuple(32, 8, 10000, filter),
- };
- return ::testing::Combine(::testing::ValuesIn(params),
- ::testing::Values(0, 1), ::testing::Values(0, 1),
- ::testing::Values(0, 1), ::testing::Values(0, 1));
-}
-
-AV1WarpFilterTest::~AV1WarpFilterTest() {}
-void AV1WarpFilterTest::SetUp() { rnd_.Reset(ACMRandom::DeterministicSeed()); }
-
-void AV1WarpFilterTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1WarpFilterTest::RunSpeedTest(warp_affine_func test_impl) {
- const int w = 128, h = 128;
- const int border = 16;
- const int stride = w + 2 * border;
- WarpTestParam params = GET_PARAM(0);
- const int out_w = ::testing::get<0>(params),
- out_h = ::testing::get<1>(params);
- const int is_alpha_zero = GET_PARAM(1);
- const int is_beta_zero = GET_PARAM(2);
- const int is_gamma_zero = GET_PARAM(3);
- const int is_delta_zero = GET_PARAM(4);
- int sub_x, sub_y;
- const int bd = 8;
-
- uint8_t *input_ = new uint8_t[h * stride];
- uint8_t *input = input_ + border;
-
- // The warp functions always write rows with widths that are multiples of 8.
- // So to avoid a buffer overflow, we may need to pad rows to a multiple of 8.
- int output_n = ((out_w + 7) & ~7) * out_h;
- uint8_t *output = new uint8_t[output_n];
- int32_t mat[8];
- int16_t alpha, beta, gamma, delta;
- ConvolveParams conv_params = get_conv_params(0, 0, bd);
- CONV_BUF_TYPE *dsta = new CONV_BUF_TYPE[output_n];
- generate_warped_model(&rnd_, mat, &alpha, &beta, &gamma, &delta,
- is_alpha_zero, is_beta_zero, is_gamma_zero,
- is_delta_zero);
-
- for (int r = 0; r < h; ++r)
- for (int c = 0; c < w; ++c) input[r * stride + c] = rnd_.Rand8();
- for (int r = 0; r < h; ++r) {
- memset(input + r * stride - border, input[r * stride], border);
- memset(input + r * stride + w, input[r * stride + (w - 1)], border);
- }
-
- sub_x = 0;
- sub_y = 0;
- int do_average = 0;
-
- conv_params = get_conv_params_no_round(do_average, 0, dsta, out_w, 1, bd);
- conv_params.use_jnt_comp_avg = 0;
-
- const int num_loops = 1000000000 / (out_w + out_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < num_loops; ++i)
- test_impl(mat, input, w, h, stride, output, 32, 32, out_w, out_h, out_w,
- sub_x, sub_y, &conv_params, alpha, beta, gamma, delta);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("warp %3dx%-3d: %7.2f ns\n", out_w, out_h,
- 1000.0 * elapsed_time / num_loops);
-
- delete[] input_;
- delete[] output;
- delete[] dsta;
-}
-
-void AV1WarpFilterTest::RunCheckOutput(warp_affine_func test_impl) {
- const int w = 128, h = 128;
- const int border = 16;
- const int stride = w + 2 * border;
- WarpTestParam params = GET_PARAM(0);
- const int is_alpha_zero = GET_PARAM(1);
- const int is_beta_zero = GET_PARAM(2);
- const int is_gamma_zero = GET_PARAM(3);
- const int is_delta_zero = GET_PARAM(4);
- const int out_w = ::testing::get<0>(params),
- out_h = ::testing::get<1>(params);
- const int num_iters = ::testing::get<2>(params);
- int i, j, sub_x, sub_y;
- const int bd = 8;
-
- // The warp functions always write rows with widths that are multiples of 8.
- // So to avoid a buffer overflow, we may need to pad rows to a multiple of 8.
- int output_n = ((out_w + 7) & ~7) * out_h;
- uint8_t *input_ = new uint8_t[h * stride];
- uint8_t *input = input_ + border;
- uint8_t *output = new uint8_t[output_n];
- uint8_t *output2 = new uint8_t[output_n];
- int32_t mat[8];
- int16_t alpha, beta, gamma, delta;
- ConvolveParams conv_params = get_conv_params(0, 0, bd);
- CONV_BUF_TYPE *dsta = new CONV_BUF_TYPE[output_n];
- CONV_BUF_TYPE *dstb = new CONV_BUF_TYPE[output_n];
- for (int i = 0; i < output_n; ++i) output[i] = output2[i] = rnd_.Rand8();
-
- for (i = 0; i < num_iters; ++i) {
- // Generate an input block and extend its borders horizontally
- for (int r = 0; r < h; ++r)
- for (int c = 0; c < w; ++c) input[r * stride + c] = rnd_.Rand8();
- for (int r = 0; r < h; ++r) {
- memset(input + r * stride - border, input[r * stride], border);
- memset(input + r * stride + w, input[r * stride + (w - 1)], border);
- }
- const int use_no_round = rnd_.Rand8() & 1;
- for (sub_x = 0; sub_x < 2; ++sub_x)
- for (sub_y = 0; sub_y < 2; ++sub_y) {
- generate_warped_model(&rnd_, mat, &alpha, &beta, &gamma, &delta,
- is_alpha_zero, is_beta_zero, is_gamma_zero,
- is_delta_zero);
-
- for (int ii = 0; ii < 2; ++ii) {
- for (int jj = 0; jj < 5; ++jj) {
- for (int do_average = 0; do_average <= 1; ++do_average) {
- if (use_no_round) {
- conv_params =
- get_conv_params_no_round(do_average, 0, dsta, out_w, 1, bd);
- } else {
- conv_params = get_conv_params(0, 0, bd);
- }
- if (jj >= 4) {
- conv_params.use_jnt_comp_avg = 0;
- } else {
- conv_params.use_jnt_comp_avg = 1;
- conv_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- conv_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
- }
- av1_warp_affine_c(mat, input, w, h, stride, output, 32, 32, out_w,
- out_h, out_w, sub_x, sub_y, &conv_params, alpha,
- beta, gamma, delta);
- if (use_no_round) {
- conv_params =
- get_conv_params_no_round(do_average, 0, dstb, out_w, 1, bd);
- }
- if (jj >= 4) {
- conv_params.use_jnt_comp_avg = 0;
- } else {
- conv_params.use_jnt_comp_avg = 1;
- conv_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- conv_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
- }
- test_impl(mat, input, w, h, stride, output2, 32, 32, out_w, out_h,
- out_w, sub_x, sub_y, &conv_params, alpha, beta, gamma,
- delta);
- if (use_no_round) {
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(dsta[j], dstb[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- } else {
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- }
- }
- }
- }
- }
- }
- delete[] input_;
- delete[] output;
- delete[] output2;
- delete[] dsta;
- delete[] dstb;
-}
-} // namespace AV1WarpFilter
-
-namespace AV1HighbdWarpFilter {
-::testing::internal::ParamGenerator<HighbdWarpTestParams> BuildParams(
- highbd_warp_affine_func filter) {
- const HighbdWarpTestParam params[] = {
- make_tuple(4, 4, 100, 8, filter), make_tuple(8, 8, 100, 8, filter),
- make_tuple(64, 64, 100, 8, filter), make_tuple(4, 16, 100, 8, filter),
- make_tuple(32, 8, 100, 8, filter), make_tuple(4, 4, 100, 10, filter),
- make_tuple(8, 8, 100, 10, filter), make_tuple(64, 64, 100, 10, filter),
- make_tuple(4, 16, 100, 10, filter), make_tuple(32, 8, 100, 10, filter),
- make_tuple(4, 4, 100, 12, filter), make_tuple(8, 8, 100, 12, filter),
- make_tuple(64, 64, 100, 12, filter), make_tuple(4, 16, 100, 12, filter),
- make_tuple(32, 8, 100, 12, filter),
- };
- return ::testing::Combine(::testing::ValuesIn(params),
- ::testing::Values(0, 1), ::testing::Values(0, 1),
- ::testing::Values(0, 1), ::testing::Values(0, 1));
-}
-
-AV1HighbdWarpFilterTest::~AV1HighbdWarpFilterTest() {}
-void AV1HighbdWarpFilterTest::SetUp() {
- rnd_.Reset(ACMRandom::DeterministicSeed());
-}
-
-void AV1HighbdWarpFilterTest::TearDown() { libaom_test::ClearSystemState(); }
-
-void AV1HighbdWarpFilterTest::RunSpeedTest(highbd_warp_affine_func test_impl) {
- const int w = 128, h = 128;
- const int border = 16;
- const int stride = w + 2 * border;
- HighbdWarpTestParam param = GET_PARAM(0);
- const int is_alpha_zero = GET_PARAM(1);
- const int is_beta_zero = GET_PARAM(2);
- const int is_gamma_zero = GET_PARAM(3);
- const int is_delta_zero = GET_PARAM(4);
- const int out_w = ::testing::get<0>(param), out_h = ::testing::get<1>(param);
- const int bd = ::testing::get<3>(param);
- const int mask = (1 << bd) - 1;
- int sub_x, sub_y;
-
- // The warp functions always write rows with widths that are multiples of 8.
- // So to avoid a buffer overflow, we may need to pad rows to a multiple of 8.
- int output_n = ((out_w + 7) & ~7) * out_h;
- uint16_t *input_ = new uint16_t[h * stride];
- uint16_t *input = input_ + border;
- uint16_t *output = new uint16_t[output_n];
- int32_t mat[8];
- int16_t alpha, beta, gamma, delta;
- ConvolveParams conv_params = get_conv_params(0, 0, bd);
- CONV_BUF_TYPE *dsta = new CONV_BUF_TYPE[output_n];
-
- generate_warped_model(&rnd_, mat, &alpha, &beta, &gamma, &delta,
- is_alpha_zero, is_beta_zero, is_gamma_zero,
- is_delta_zero);
- // Generate an input block and extend its borders horizontally
- for (int r = 0; r < h; ++r)
- for (int c = 0; c < w; ++c) input[r * stride + c] = rnd_.Rand16() & mask;
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < border; ++c) {
- input[r * stride - border + c] = input[r * stride];
- input[r * stride + w + c] = input[r * stride + (w - 1)];
- }
- }
-
- sub_x = 0;
- sub_y = 0;
- int do_average = 0;
- conv_params.use_jnt_comp_avg = 0;
- conv_params = get_conv_params_no_round(do_average, 0, dsta, out_w, 1, bd);
-
- const int num_loops = 1000000000 / (out_w + out_h);
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
-
- for (int i = 0; i < num_loops; ++i)
- test_impl(mat, input, w, h, stride, output, 32, 32, out_w, out_h, out_w,
- sub_x, sub_y, bd, &conv_params, alpha, beta, gamma, delta);
-
- aom_usec_timer_mark(&timer);
- const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
- printf("highbd warp %3dx%-3d: %7.2f ns\n", out_w, out_h,
- 1000.0 * elapsed_time / num_loops);
-
- delete[] input_;
- delete[] output;
- delete[] dsta;
-}
-
-void AV1HighbdWarpFilterTest::RunCheckOutput(
- highbd_warp_affine_func test_impl) {
- const int w = 128, h = 128;
- const int border = 16;
- const int stride = w + 2 * border;
- HighbdWarpTestParam param = GET_PARAM(0);
- const int is_alpha_zero = GET_PARAM(1);
- const int is_beta_zero = GET_PARAM(2);
- const int is_gamma_zero = GET_PARAM(3);
- const int is_delta_zero = GET_PARAM(4);
- const int out_w = ::testing::get<0>(param), out_h = ::testing::get<1>(param);
- const int bd = ::testing::get<3>(param);
- const int num_iters = ::testing::get<2>(param);
- const int mask = (1 << bd) - 1;
- int i, j, sub_x, sub_y;
-
- // The warp functions always write rows with widths that are multiples of 8.
- // So to avoid a buffer overflow, we may need to pad rows to a multiple of 8.
- int output_n = ((out_w + 7) & ~7) * out_h;
- uint16_t *input_ = new uint16_t[h * stride];
- uint16_t *input = input_ + border;
- uint16_t *output = new uint16_t[output_n];
- uint16_t *output2 = new uint16_t[output_n];
- int32_t mat[8];
- int16_t alpha, beta, gamma, delta;
- ConvolveParams conv_params = get_conv_params(0, 0, bd);
- CONV_BUF_TYPE *dsta = new CONV_BUF_TYPE[output_n];
- CONV_BUF_TYPE *dstb = new CONV_BUF_TYPE[output_n];
- for (int i = 0; i < output_n; ++i) output[i] = output2[i] = rnd_.Rand16();
-
- for (i = 0; i < num_iters; ++i) {
- // Generate an input block and extend its borders horizontally
- for (int r = 0; r < h; ++r)
- for (int c = 0; c < w; ++c) input[r * stride + c] = rnd_.Rand16() & mask;
- for (int r = 0; r < h; ++r) {
- for (int c = 0; c < border; ++c) {
- input[r * stride - border + c] = input[r * stride];
- input[r * stride + w + c] = input[r * stride + (w - 1)];
- }
- }
- const int use_no_round = rnd_.Rand8() & 1;
- for (sub_x = 0; sub_x < 2; ++sub_x)
- for (sub_y = 0; sub_y < 2; ++sub_y) {
- generate_warped_model(&rnd_, mat, &alpha, &beta, &gamma, &delta,
- is_alpha_zero, is_beta_zero, is_gamma_zero,
- is_delta_zero);
- for (int ii = 0; ii < 2; ++ii) {
- for (int jj = 0; jj < 5; ++jj) {
- for (int do_average = 0; do_average <= 1; ++do_average) {
- if (use_no_round) {
- conv_params =
- get_conv_params_no_round(do_average, 0, dsta, out_w, 1, bd);
- } else {
- conv_params = get_conv_params(0, 0, bd);
- }
- if (jj >= 4) {
- conv_params.use_jnt_comp_avg = 0;
- } else {
- conv_params.use_jnt_comp_avg = 1;
- conv_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- conv_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
- }
-
- av1_highbd_warp_affine_c(mat, input, w, h, stride, output, 32, 32,
- out_w, out_h, out_w, sub_x, sub_y, bd,
- &conv_params, alpha, beta, gamma, delta);
- if (use_no_round) {
- // TODO(angiebird): Change this to test_impl once we have SIMD
- // implementation
- conv_params =
- get_conv_params_no_round(do_average, 0, dstb, out_w, 1, bd);
- }
- if (jj >= 4) {
- conv_params.use_jnt_comp_avg = 0;
- } else {
- conv_params.use_jnt_comp_avg = 1;
- conv_params.fwd_offset = quant_dist_lookup_table[ii][jj][0];
- conv_params.bck_offset = quant_dist_lookup_table[ii][jj][1];
- }
- test_impl(mat, input, w, h, stride, output2, 32, 32, out_w, out_h,
- out_w, sub_x, sub_y, bd, &conv_params, alpha, beta,
- gamma, delta);
-
- if (use_no_round) {
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(dsta[j], dstb[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- } else {
- for (j = 0; j < out_w * out_h; ++j)
- ASSERT_EQ(output[j], output2[j])
- << "Pixel mismatch at index " << j << " = ("
- << (j % out_w) << ", " << (j / out_w) << ") on iteration "
- << i;
- }
- }
- }
- }
- }
- }
-
- delete[] input_;
- delete[] output;
- delete[] output2;
- delete[] dsta;
- delete[] dstb;
-}
-} // namespace AV1HighbdWarpFilter
-} // namespace libaom_test
diff --git a/third_party/aom/test/warp_filter_test_util.h b/third_party/aom/test/warp_filter_test_util.h
deleted file mode 100644
index b8998e5c8..000000000
--- a/third_party/aom/test/warp_filter_test_util.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_TEST_WARP_FILTER_TEST_UTIL_H_
-#define AOM_TEST_WARP_FILTER_TEST_UTIL_H_
-
-#include "config/av1_rtcd.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-#include "test/acm_random.h"
-#include "test/util.h"
-#include "test/clear_system_state.h"
-#include "test/register_state_check.h"
-
-#include "av1/common/mv.h"
-#include "av1/common/common_data.h"
-
-namespace libaom_test {
-
-void generate_warped_model(libaom_test::ACMRandom *rnd, int32_t *mat,
- int16_t *alpha, int16_t *beta, int16_t *gamma,
- int16_t *delta, int is_alpha_zero, int is_beta_zero,
- int is_gamma_zero, int is_delta_zero);
-
-namespace AV1WarpFilter {
-
-typedef void (*warp_affine_func)(const int32_t *mat, const uint8_t *ref,
- int width, int height, int stride,
- uint8_t *pred, int p_col, int p_row,
- int p_width, int p_height, int p_stride,
- int subsampling_x, int subsampling_y,
- ConvolveParams *conv_params, int16_t alpha,
- int16_t beta, int16_t gamma, int16_t delta);
-
-typedef ::testing::tuple<int, int, int, warp_affine_func> WarpTestParam;
-typedef ::testing::tuple<WarpTestParam, int, int, int, int> WarpTestParams;
-
-::testing::internal::ParamGenerator<WarpTestParams> BuildParams(
- warp_affine_func filter);
-
-class AV1WarpFilterTest : public ::testing::TestWithParam<WarpTestParams> {
- public:
- virtual ~AV1WarpFilterTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(warp_affine_func test_impl);
- void RunSpeedTest(warp_affine_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-} // namespace AV1WarpFilter
-
-namespace AV1HighbdWarpFilter {
-typedef void (*highbd_warp_affine_func)(const int32_t *mat, const uint16_t *ref,
- int width, int height, int stride,
- uint16_t *pred, int p_col, int p_row,
- int p_width, int p_height, int p_stride,
- int subsampling_x, int subsampling_y,
- int bd, ConvolveParams *conv_params,
- int16_t alpha, int16_t beta,
- int16_t gamma, int16_t delta);
-
-typedef ::testing::tuple<int, int, int, int, highbd_warp_affine_func>
- HighbdWarpTestParam;
-typedef ::testing::tuple<HighbdWarpTestParam, int, int, int, int>
- HighbdWarpTestParams;
-
-::testing::internal::ParamGenerator<HighbdWarpTestParams> BuildParams(
- highbd_warp_affine_func filter);
-
-class AV1HighbdWarpFilterTest
- : public ::testing::TestWithParam<HighbdWarpTestParams> {
- public:
- virtual ~AV1HighbdWarpFilterTest();
- virtual void SetUp();
-
- virtual void TearDown();
-
- protected:
- void RunCheckOutput(highbd_warp_affine_func test_impl);
- void RunSpeedTest(highbd_warp_affine_func test_impl);
-
- libaom_test::ACMRandom rnd_;
-};
-
-} // namespace AV1HighbdWarpFilter
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_WARP_FILTER_TEST_UTIL_H_
diff --git a/third_party/aom/test/webm_video_source.h b/third_party/aom/test/webm_video_source.h
deleted file mode 100644
index bb3d11735..000000000
--- a/third_party/aom/test/webm_video_source.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_WEBM_VIDEO_SOURCE_H_
-#define AOM_TEST_WEBM_VIDEO_SOURCE_H_
-#include <cstdarg>
-#include <cstdio>
-#include <cstdlib>
-#include <new>
-#include <string>
-#include "common/tools_common.h"
-#include "common/webmdec.h"
-#include "test/video_source.h"
-
-namespace libaom_test {
-
-// This class extends VideoSource to allow parsing of WebM files,
-// so that we can do actual file decodes.
-class WebMVideoSource : public CompressedVideoSource {
- public:
- explicit WebMVideoSource(const std::string &file_name)
- : file_name_(file_name), aom_ctx_(new AvxInputContext()),
- webm_ctx_(new WebmInputContext()), buf_(NULL), buf_sz_(0), frame_sz_(0),
- frame_number_(0), end_of_file_(false) {}
-
- virtual ~WebMVideoSource() {
- if (aom_ctx_->file != NULL) fclose(aom_ctx_->file);
- webm_free(webm_ctx_);
- delete aom_ctx_;
- delete webm_ctx_;
- }
-
- virtual void Init() {}
-
- virtual void Begin() {
- aom_ctx_->file = OpenTestDataFile(file_name_);
- ASSERT_TRUE(aom_ctx_->file != NULL)
- << "Input file open failed. Filename: " << file_name_;
-
- ASSERT_EQ(file_is_webm(webm_ctx_, aom_ctx_), 1) << "file is not WebM";
-
- FillFrame();
- }
-
- virtual void Next() {
- ++frame_number_;
- FillFrame();
- }
-
- void FillFrame() {
- ASSERT_TRUE(aom_ctx_->file != NULL);
- const int status = webm_read_frame(webm_ctx_, &buf_, &frame_sz_, &buf_sz_);
- ASSERT_GE(status, 0) << "webm_read_frame failed";
- if (status == 1) {
- end_of_file_ = true;
- }
- }
-
- void SeekToNextKeyFrame() {
- ASSERT_TRUE(aom_ctx_->file != NULL);
- do {
- const int status =
- webm_read_frame(webm_ctx_, &buf_, &frame_sz_, &buf_sz_);
- ASSERT_GE(status, 0) << "webm_read_frame failed";
- ++frame_number_;
- if (status == 1) {
- end_of_file_ = true;
- }
- } while (!webm_ctx_->is_key_frame && !end_of_file_);
- }
-
- virtual const uint8_t *cxdata() const { return end_of_file_ ? NULL : buf_; }
- virtual size_t frame_size() const { return frame_sz_; }
- virtual unsigned int frame_number() const { return frame_number_; }
-
- protected:
- std::string file_name_;
- AvxInputContext *aom_ctx_;
- WebmInputContext *webm_ctx_;
- uint8_t *buf_; // Owned by webm_ctx_ and freed when webm_ctx_ is freed.
- size_t buf_sz_;
- size_t frame_sz_;
- unsigned int frame_number_;
- bool end_of_file_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_WEBM_VIDEO_SOURCE_H_
diff --git a/third_party/aom/test/wiener_test.cc b/third_party/aom/test/wiener_test.cc
deleted file mode 100644
index dfec09119..000000000
--- a/third_party/aom/test/wiener_test.cc
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2018, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <vector>
-
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-#include "test/function_equivalence_test.h"
-#include "test/register_state_check.h"
-
-#include "config/aom_config.h"
-#include "config/aom_dsp_rtcd.h"
-
-#include "aom/aom_integer.h"
-#include "av1/encoder/pickrst.h"
-
-#define MAX_WIENER_BLOCK 384
-#define MAX_DATA_BLOCK (MAX_WIENER_BLOCK + WIENER_WIN)
-using libaom_test::FunctionEquivalenceTest;
-
-namespace {
-
-static void compute_stats_win_opt_c(int wiener_win, const uint8_t *dgd,
- const uint8_t *src, int h_start, int h_end,
- int v_start, int v_end, int dgd_stride,
- int src_stride, double *M, double *H) {
- ASSERT_TRUE(wiener_win == WIENER_WIN || wiener_win == WIENER_WIN_CHROMA);
- int i, j, k, l, m, n;
- const int pixel_count = (h_end - h_start) * (v_end - v_start);
- const int wiener_win2 = wiener_win * wiener_win;
- const int wiener_halfwin = (wiener_win >> 1);
- const double avg =
- find_average(dgd, h_start, h_end, v_start, v_end, dgd_stride);
-
- std::vector<std::vector<int64_t> > M_int(wiener_win,
- std::vector<int64_t>(wiener_win, 0));
- std::vector<std::vector<int64_t> > H_int(
- wiener_win * wiener_win, std::vector<int64_t>(wiener_win * 8, 0));
- std::vector<std::vector<int32_t> > sumY(wiener_win,
- std::vector<int32_t>(wiener_win, 0));
- int32_t sumX = 0;
- const uint8_t *dgd_win = dgd - wiener_halfwin * dgd_stride - wiener_halfwin;
-
- for (i = v_start; i < v_end; i++) {
- for (j = h_start; j < h_end; j += 2) {
- const uint8_t X1 = src[i * src_stride + j];
- const uint8_t X2 = src[i * src_stride + j + 1];
- sumX += X1 + X2;
-
- const uint8_t *dgd_ij = dgd_win + i * dgd_stride + j;
- for (k = 0; k < wiener_win; k++) {
- for (l = 0; l < wiener_win; l++) {
- const uint8_t *dgd_ijkl = dgd_ij + k * dgd_stride + l;
- int64_t *H_int_temp = &H_int[(l * wiener_win + k)][0];
- const uint8_t D1 = dgd_ijkl[0];
- const uint8_t D2 = dgd_ijkl[1];
- sumY[k][l] += D1 + D2;
- M_int[l][k] += D1 * X1 + D2 * X2;
- for (m = 0; m < wiener_win; m++) {
- for (n = 0; n < wiener_win; n++) {
- H_int_temp[m * 8 + n] += D1 * dgd_ij[n + dgd_stride * m] +
- D2 * dgd_ij[n + dgd_stride * m + 1];
- }
- }
- }
- }
- }
- }
-
- const double avg_square_sum = avg * avg * pixel_count;
- for (k = 0; k < wiener_win; k++) {
- for (l = 0; l < wiener_win; l++) {
- M[l * wiener_win + k] =
- M_int[l][k] + avg_square_sum - avg * (sumX + sumY[k][l]);
- for (m = 0; m < wiener_win; m++) {
- for (n = 0; n < wiener_win; n++) {
- H[(l * wiener_win + k) * wiener_win2 + m * wiener_win + n] =
- H_int[(l * wiener_win + k)][n * 8 + m] + avg_square_sum -
- avg * (sumY[k][l] + sumY[n][m]);
- }
- }
- }
- }
-}
-
-void compute_stats_opt_c(int wiener_win, const uint8_t *dgd, const uint8_t *src,
- int h_start, int h_end, int v_start, int v_end,
- int dgd_stride, int src_stride, double *M, double *H) {
- if (wiener_win == WIENER_WIN || wiener_win == WIENER_WIN_CHROMA) {
- compute_stats_win_opt_c(wiener_win, dgd, src, h_start, h_end, v_start,
- v_end, dgd_stride, src_stride, M, H);
- } else {
- av1_compute_stats_c(wiener_win, dgd, src, h_start, h_end, v_start, v_end,
- dgd_stride, src_stride, M, H);
- }
-}
-
-static const int kIterations = 100;
-static const double min_error = (double)(0.01);
-typedef void (*compute_stats_Func)(int wiener_win, const uint8_t *dgd,
- const uint8_t *src, int h_start, int h_end,
- int v_start, int v_end, int dgd_stride,
- int src_stride, double *M, double *H);
-
-typedef libaom_test::FuncParam<compute_stats_Func> TestFuncs;
-
-////////////////////////////////////////////////////////////////////////////////
-// 8 bit
-////////////////////////////////////////////////////////////////////////////////
-
-typedef ::testing::tuple<const compute_stats_Func> WienerTestParam;
-
-class WienerTest : public ::testing::TestWithParam<WienerTestParam> {
- public:
- virtual void SetUp() { target_func_ = GET_PARAM(0); }
- void runWienerTest(const int32_t wiener_win, int32_t run_times);
- void runWienerTest_ExtremeValues(const int32_t wiener_win);
-
- private:
- compute_stats_Func target_func_;
- ACMRandom rng_;
-};
-
-void WienerTest::runWienerTest(const int32_t wiener_win, int32_t run_times) {
- const int32_t wiener_halfwin = wiener_win >> 1;
- const int32_t wiener_win2 = wiener_win * wiener_win;
- DECLARE_ALIGNED(32, uint8_t, dgd_buf[MAX_DATA_BLOCK * MAX_DATA_BLOCK]);
- DECLARE_ALIGNED(32, uint8_t, src_buf[MAX_DATA_BLOCK * MAX_DATA_BLOCK]);
- DECLARE_ALIGNED(32, double, M_ref[WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, H_ref[WIENER_WIN2 * WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, M_test[WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, H_test[WIENER_WIN2 * WIENER_WIN2]);
- const int h_start = ((rng_.Rand16() % (MAX_WIENER_BLOCK / 2)) & (~7));
- int h_end =
- run_times != 1 ? 256 : ((rng_.Rand16() % MAX_WIENER_BLOCK) & (~7)) + 8;
- const int v_start = ((rng_.Rand16() % (MAX_WIENER_BLOCK / 2)) & (~7));
- int v_end =
- run_times != 1 ? 256 : ((rng_.Rand16() % MAX_WIENER_BLOCK) & (~7)) + 8;
- const int dgd_stride = h_end;
- const int src_stride = MAX_DATA_BLOCK;
- const int iters = run_times == 1 ? kIterations : 2;
- for (int iter = 0; iter < iters && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_DATA_BLOCK * MAX_DATA_BLOCK; ++i) {
- dgd_buf[i] = rng_.Rand8();
- src_buf[i] = rng_.Rand8();
- }
- uint8_t *dgd = dgd_buf + wiener_halfwin * MAX_DATA_BLOCK + wiener_halfwin;
- uint8_t *src = src_buf;
-
- aom_usec_timer timer;
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- av1_compute_stats_c(wiener_win, dgd, src, h_start, h_end, v_start, v_end,
- dgd_stride, src_stride, M_ref, H_ref);
- }
- aom_usec_timer_mark(&timer);
- const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- aom_usec_timer_start(&timer);
- for (int i = 0; i < run_times; ++i) {
- target_func_(wiener_win, dgd, src, h_start, h_end, v_start, v_end,
- dgd_stride, src_stride, M_test, H_test);
- }
- aom_usec_timer_mark(&timer);
- const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));
- if (run_times > 10) {
- printf("win %d %3dx%-3d:%7.2f/%7.2fns", wiener_win, h_end, v_end, time1,
- time2);
- printf("(%3.2f)\n", time1 / time2);
- }
- int failed = 0;
- for (int i = 0; i < wiener_win2; ++i) {
- if (fabs(M_ref[i] - M_test[i]) > min_error) {
- failed = 1;
- printf("win %d M iter %d [%4d] ref %6.0f test %6.0f \n", wiener_win,
- iter, i, M_ref[i], M_test[i]);
- break;
- }
- }
- // ASSERT_EQ(failed, 0);
- for (int i = 0; i < wiener_win2 * wiener_win2; ++i) {
- if (fabs(H_ref[i] - H_test[i]) > min_error) {
- failed = 1;
- printf("win %d H iter %d [%4d] ref %6.0f test %6.0f \n", wiener_win,
- iter, i, H_ref[i], H_test[i]);
- break;
- }
- }
- ASSERT_EQ(failed, 0);
- }
-}
-
-void WienerTest::runWienerTest_ExtremeValues(const int32_t wiener_win) {
- const int32_t wiener_halfwin = wiener_win >> 1;
- const int32_t wiener_win2 = wiener_win * wiener_win;
- DECLARE_ALIGNED(32, uint8_t, dgd_buf[MAX_DATA_BLOCK * MAX_DATA_BLOCK]);
- DECLARE_ALIGNED(32, uint8_t, src_buf[MAX_DATA_BLOCK * MAX_DATA_BLOCK]);
- DECLARE_ALIGNED(32, double, M_ref[WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, H_ref[WIENER_WIN2 * WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, M_test[WIENER_WIN2]);
- DECLARE_ALIGNED(32, double, H_test[WIENER_WIN2 * WIENER_WIN2]);
- const int h_start = 16;
- const int h_end = MAX_WIENER_BLOCK;
- const int v_start = 16;
- const int v_end = MAX_WIENER_BLOCK;
- const int dgd_stride = h_end;
- const int src_stride = MAX_DATA_BLOCK;
- const int iters = 1;
- for (int iter = 0; iter < iters && !HasFatalFailure(); ++iter) {
- for (int i = 0; i < MAX_DATA_BLOCK * MAX_DATA_BLOCK; ++i) {
- dgd_buf[i] = 255;
- src_buf[i] = 255;
- }
- uint8_t *dgd = dgd_buf + wiener_halfwin * MAX_DATA_BLOCK + wiener_halfwin;
- uint8_t *src = src_buf;
-
- av1_compute_stats_c(wiener_win, dgd, src, h_start, h_end, v_start, v_end,
- dgd_stride, src_stride, M_ref, H_ref);
-
- target_func_(wiener_win, dgd, src, h_start, h_end, v_start, v_end,
- dgd_stride, src_stride, M_test, H_test);
-
- int failed = 0;
- for (int i = 0; i < wiener_win2; ++i) {
- if (fabs(M_ref[i] - M_test[i]) > min_error) {
- failed = 1;
- printf("win %d M iter %d [%4d] ref %6.0f test %6.0f \n", wiener_win,
- iter, i, M_ref[i], M_test[i]);
- break;
- }
- }
- // ASSERT_EQ(failed, 0);
- for (int i = 0; i < wiener_win2 * wiener_win2; ++i) {
- if (fabs(H_ref[i] - H_test[i]) > min_error) {
- failed = 1;
- printf("win %d H iter %d [%4d] ref %6.0f test %6.0f \n", wiener_win,
- iter, i, H_ref[i], H_test[i]);
- break;
- }
- }
- ASSERT_EQ(failed, 0);
- }
-}
-
-TEST_P(WienerTest, RandomValues) {
- runWienerTest(WIENER_WIN, 1);
- runWienerTest(WIENER_WIN_CHROMA, 1);
-}
-
-TEST_P(WienerTest, ExtremeValues) {
- runWienerTest_ExtremeValues(WIENER_WIN);
- runWienerTest_ExtremeValues(WIENER_WIN_CHROMA);
-}
-
-TEST_P(WienerTest, DISABLED_Speed) {
- runWienerTest(WIENER_WIN, 200);
- runWienerTest(WIENER_WIN_CHROMA, 200);
-}
-
-INSTANTIATE_TEST_CASE_P(C, WienerTest, ::testing::Values(compute_stats_opt_c));
-
-#if HAVE_SSE4_1
-INSTANTIATE_TEST_CASE_P(SSE4_1, WienerTest,
- ::testing::Values(av1_compute_stats_sse4_1));
-#endif // HAVE_SSE4_1
-
-#if HAVE_AVX2
-
-INSTANTIATE_TEST_CASE_P(AVX2, WienerTest,
- ::testing::Values(av1_compute_stats_avx2));
-#endif // HAVE_AVX2
-
-} // namespace
diff --git a/third_party/aom/test/y4m_test.cc b/third_party/aom/test/y4m_test.cc
deleted file mode 100644
index 6cc75ef5b..000000000
--- a/third_party/aom/test/y4m_test.cc
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <string>
-
-#include "config/aom_config.h"
-
-#include "common/y4menc.h"
-#include "test/md5_helper.h"
-#include "test/util.h"
-#include "test/y4m_video_source.h"
-#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
-
-namespace {
-
-using std::string;
-
-static const unsigned int kWidth = 160;
-static const unsigned int kHeight = 90;
-static const unsigned int kFrames = 10;
-
-struct Y4mTestParam {
- const char *filename;
- unsigned int bit_depth;
- aom_img_fmt format;
- const char *md5raw;
-};
-
-const Y4mTestParam kY4mTestVectors[] = {
- { "park_joy_90p_8_420.y4m", 8, AOM_IMG_FMT_I420,
- "e5406275b9fc6bb3436c31d4a05c1cab" },
- { "park_joy_90p_8_420_monochrome.y4m", 8, AOM_IMG_FMT_I420,
- "95ef5bf6218580588be24a5271bb6a7f" },
- { "park_joy_90p_8_420_vertical_csp.y4m", 8, AOM_IMG_FMT_I420,
- "f53a40fec15254ac312527339d9c686b" },
- { "park_joy_90p_8_422.y4m", 8, AOM_IMG_FMT_I422,
- "284a47a47133b12884ec3a14e959a0b6" },
- { "park_joy_90p_8_444.y4m", 8, AOM_IMG_FMT_I444,
- "90517ff33843d85de712fd4fe60dbed0" },
- { "park_joy_90p_10_420.y4m", 10, AOM_IMG_FMT_I42016,
- "63f21f9f717d8b8631bd2288ee87137b" },
- { "park_joy_90p_10_422.y4m", 10, AOM_IMG_FMT_I42216,
- "48ab51fb540aed07f7ff5af130c9b605" },
- { "park_joy_90p_10_444.y4m", 10, AOM_IMG_FMT_I44416,
- "067bfd75aa85ff9bae91fa3e0edd1e3e" },
- { "park_joy_90p_12_420.y4m", 12, AOM_IMG_FMT_I42016,
- "9e6d8f6508c6e55625f6b697bc461cef" },
- { "park_joy_90p_12_422.y4m", 12, AOM_IMG_FMT_I42216,
- "b239c6b301c0b835485be349ca83a7e3" },
- { "park_joy_90p_12_444.y4m", 12, AOM_IMG_FMT_I44416,
- "5a6481a550821dab6d0192f5c63845e9" },
-};
-
-static const int PLANES_YUV[] = { AOM_PLANE_Y, AOM_PLANE_U, AOM_PLANE_V };
-
-class Y4mVideoSourceTest : public ::testing::TestWithParam<Y4mTestParam>,
- public ::libaom_test::Y4mVideoSource {
- protected:
- Y4mVideoSourceTest() : Y4mVideoSource("", 0, 0) {}
-
- virtual ~Y4mVideoSourceTest() { CloseSource(); }
-
- virtual void Init(const std::string &file_name, int limit) {
- file_name_ = file_name;
- start_ = 0;
- limit_ = limit;
- frame_ = 0;
- Begin();
- }
-
- // Checks y4m header information
- void HeaderChecks(unsigned int bit_depth, aom_img_fmt_t fmt) {
- ASSERT_TRUE(input_file_ != NULL);
- ASSERT_EQ(y4m_.pic_w, (int)kWidth);
- ASSERT_EQ(y4m_.pic_h, (int)kHeight);
- ASSERT_EQ(img()->d_w, kWidth);
- ASSERT_EQ(img()->d_h, kHeight);
- ASSERT_EQ(y4m_.bit_depth, bit_depth);
- ASSERT_EQ(y4m_.aom_fmt, fmt);
- if (fmt == AOM_IMG_FMT_I420 || fmt == AOM_IMG_FMT_I42016) {
- ASSERT_EQ(y4m_.bps, (int)y4m_.bit_depth * 3 / 2);
- ASSERT_EQ(img()->x_chroma_shift, 1U);
- ASSERT_EQ(img()->y_chroma_shift, 1U);
- }
- if (fmt == AOM_IMG_FMT_I422 || fmt == AOM_IMG_FMT_I42216) {
- ASSERT_EQ(y4m_.bps, (int)y4m_.bit_depth * 2);
- ASSERT_EQ(img()->x_chroma_shift, 1U);
- ASSERT_EQ(img()->y_chroma_shift, 0U);
- }
- if (fmt == AOM_IMG_FMT_I444 || fmt == AOM_IMG_FMT_I44416) {
- ASSERT_EQ(y4m_.bps, (int)y4m_.bit_depth * 3);
- ASSERT_EQ(img()->x_chroma_shift, 0U);
- ASSERT_EQ(img()->y_chroma_shift, 0U);
- }
- }
-
- // Checks MD5 of the raw frame data
- void Md5Check(const string &expected_md5) {
- ASSERT_TRUE(input_file_ != NULL);
- libaom_test::MD5 md5;
- for (unsigned int i = start_; i < limit_; i++) {
- md5.Add(img());
- Next();
- }
- ASSERT_EQ(string(md5.Get()), expected_md5);
- }
-};
-
-TEST_P(Y4mVideoSourceTest, SourceTest) {
- const Y4mTestParam t = GetParam();
- Init(t.filename, kFrames);
- HeaderChecks(t.bit_depth, t.format);
- Md5Check(t.md5raw);
-}
-
-INSTANTIATE_TEST_CASE_P(C, Y4mVideoSourceTest,
- ::testing::ValuesIn(kY4mTestVectors));
-
-class Y4mVideoWriteTest : public Y4mVideoSourceTest {
- protected:
- Y4mVideoWriteTest() : tmpfile_(NULL) {}
-
- virtual ~Y4mVideoWriteTest() {
- delete tmpfile_;
- input_file_ = NULL;
- }
-
- void ReplaceInputFile(FILE *input_file) {
- CloseSource();
- frame_ = 0;
- input_file_ = input_file;
- rewind(input_file_);
- ReadSourceToStart();
- }
-
- // Writes out a y4m file and then reads it back
- void WriteY4mAndReadBack() {
- ASSERT_TRUE(input_file_ != NULL);
- char buf[Y4M_BUFFER_SIZE] = { 0 };
- const struct AvxRational framerate = { y4m_.fps_n, y4m_.fps_d };
- tmpfile_ = new libaom_test::TempOutFile;
- ASSERT_TRUE(tmpfile_->file() != NULL);
- y4m_write_file_header(buf, sizeof(buf), kWidth, kHeight, &framerate,
- img()->monochrome, img()->csp, y4m_.aom_fmt,
- y4m_.bit_depth);
- fputs(buf, tmpfile_->file());
- for (unsigned int i = start_; i < limit_; i++) {
- y4m_write_frame_header(buf, sizeof(buf));
- fputs(buf, tmpfile_->file());
- y4m_write_image_file(img(), PLANES_YUV, tmpfile_->file());
- Next();
- }
- ReplaceInputFile(tmpfile_->file());
- }
-
- virtual void Init(const std::string &file_name, int limit) {
- Y4mVideoSourceTest::Init(file_name, limit);
- WriteY4mAndReadBack();
- }
- libaom_test::TempOutFile *tmpfile_;
-};
-
-TEST_P(Y4mVideoWriteTest, WriteTest) {
- const Y4mTestParam t = GetParam();
- Init(t.filename, kFrames);
- HeaderChecks(t.bit_depth, t.format);
- Md5Check(t.md5raw);
-}
-
-INSTANTIATE_TEST_CASE_P(C, Y4mVideoWriteTest,
- ::testing::ValuesIn(kY4mTestVectors));
-} // namespace
diff --git a/third_party/aom/test/y4m_video_source.h b/third_party/aom/test/y4m_video_source.h
deleted file mode 100644
index 3dea901e6..000000000
--- a/third_party/aom/test/y4m_video_source.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_Y4M_VIDEO_SOURCE_H_
-#define AOM_TEST_Y4M_VIDEO_SOURCE_H_
-#include <algorithm>
-#include <string>
-
-#include "common/y4minput.h"
-#include "test/video_source.h"
-
-namespace libaom_test {
-
-// This class extends VideoSource to allow parsing of raw yv12
-// so that we can do actual file encodes.
-class Y4mVideoSource : public VideoSource {
- public:
- Y4mVideoSource(const std::string &file_name, unsigned int start, int limit)
- : file_name_(file_name), input_file_(NULL), img_(new aom_image_t()),
- start_(start), limit_(limit), frame_(0), framerate_numerator_(0),
- framerate_denominator_(0), y4m_() {}
-
- virtual ~Y4mVideoSource() {
- aom_img_free(img_.get());
- CloseSource();
- }
-
- virtual void OpenSource() {
- CloseSource();
- input_file_ = OpenTestDataFile(file_name_);
- ASSERT_TRUE(input_file_ != NULL)
- << "Input file open failed. Filename: " << file_name_;
- }
-
- virtual void ReadSourceToStart() {
- ASSERT_TRUE(input_file_ != NULL);
- ASSERT_FALSE(y4m_input_open(&y4m_, input_file_, NULL, 0, 0));
- framerate_numerator_ = y4m_.fps_n;
- framerate_denominator_ = y4m_.fps_d;
- frame_ = 0;
- for (unsigned int i = 0; i < start_; i++) {
- Next();
- }
- FillFrame();
- }
-
- virtual void Begin() {
- OpenSource();
- ReadSourceToStart();
- }
-
- virtual void Next() {
- ++frame_;
- FillFrame();
- }
-
- virtual aom_image_t *img() const {
- return (frame_ < limit_) ? img_.get() : NULL;
- }
-
- // Models a stream where Timebase = 1/FPS, so pts == frame.
- virtual aom_codec_pts_t pts() const { return frame_; }
-
- virtual unsigned long duration() const { return 1; }
-
- virtual aom_rational_t timebase() const {
- const aom_rational_t t = { framerate_denominator_, framerate_numerator_ };
- return t;
- }
-
- virtual unsigned int frame() const { return frame_; }
-
- virtual unsigned int limit() const { return limit_; }
-
- virtual void FillFrame() {
- ASSERT_TRUE(input_file_ != NULL);
- // Read a frame from input_file.
- y4m_input_fetch_frame(&y4m_, input_file_, img_.get());
- }
-
- // Swap buffers with another y4m source. This allows reading a new frame
- // while keeping the old frame around. A whole Y4mSource is required and
- // not just a aom_image_t because of how the y4m reader manipulates
- // aom_image_t internals,
- void SwapBuffers(Y4mVideoSource *other) {
- std::swap(other->y4m_.dst_buf, y4m_.dst_buf);
- aom_image_t *tmp;
- tmp = other->img_.release();
- other->img_.reset(img_.release());
- img_.reset(tmp);
- }
-
- protected:
- void CloseSource() {
- y4m_input_close(&y4m_);
- y4m_ = y4m_input();
- if (input_file_ != NULL) {
- fclose(input_file_);
- input_file_ = NULL;
- }
- }
-
- std::string file_name_;
- FILE *input_file_;
- testing::internal::scoped_ptr<aom_image_t> img_;
- unsigned int start_;
- unsigned int limit_;
- unsigned int frame_;
- int framerate_numerator_;
- int framerate_denominator_;
- y4m_input y4m_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_Y4M_VIDEO_SOURCE_H_
diff --git a/third_party/aom/test/yuv_video_source.h b/third_party/aom/test/yuv_video_source.h
deleted file mode 100644
index 774ecc008..000000000
--- a/third_party/aom/test/yuv_video_source.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-#ifndef AOM_TEST_YUV_VIDEO_SOURCE_H_
-#define AOM_TEST_YUV_VIDEO_SOURCE_H_
-
-#include <cstdio>
-#include <cstdlib>
-#include <string>
-
-#include "test/video_source.h"
-#include "aom/aom_image.h"
-
-namespace libaom_test {
-
-// This class extends VideoSource to allow parsing of raw YUV
-// formats of various color sampling and bit-depths so that we can
-// do actual file encodes.
-class YUVVideoSource : public VideoSource {
- public:
- YUVVideoSource(const std::string &file_name, aom_img_fmt format,
- unsigned int width, unsigned int height, int rate_numerator,
- int rate_denominator, unsigned int start, int limit)
- : file_name_(file_name), input_file_(NULL), img_(NULL), start_(start),
- limit_(limit), frame_(0), width_(0), height_(0),
- format_(AOM_IMG_FMT_NONE), framerate_numerator_(rate_numerator),
- framerate_denominator_(rate_denominator) {
- // This initializes format_, raw_size_, width_, height_ and allocates img.
- SetSize(width, height, format);
- }
-
- virtual ~YUVVideoSource() {
- aom_img_free(img_);
- if (input_file_) fclose(input_file_);
- }
-
- virtual void Begin() {
- if (input_file_) fclose(input_file_);
- input_file_ = OpenTestDataFile(file_name_);
- ASSERT_TRUE(input_file_ != NULL)
- << "Input file open failed. Filename: " << file_name_;
- if (start_)
- fseek(input_file_, static_cast<unsigned>(raw_size_) * start_, SEEK_SET);
-
- frame_ = start_;
- FillFrame();
- }
-
- virtual void Next() {
- ++frame_;
- FillFrame();
- }
-
- virtual aom_image_t *img() const { return (frame_ < limit_) ? img_ : NULL; }
-
- // Models a stream where Timebase = 1/FPS, so pts == frame.
- virtual aom_codec_pts_t pts() const { return frame_; }
-
- virtual unsigned long duration() const { return 1; }
-
- virtual aom_rational_t timebase() const {
- const aom_rational_t t = { framerate_denominator_, framerate_numerator_ };
- return t;
- }
-
- virtual unsigned int frame() const { return frame_; }
-
- virtual unsigned int limit() const { return limit_; }
-
- virtual void SetSize(unsigned int width, unsigned int height,
- aom_img_fmt format) {
- if (width != width_ || height != height_ || format != format_) {
- aom_img_free(img_);
- img_ = aom_img_alloc(NULL, format, width, height, 1);
- ASSERT_TRUE(img_ != NULL);
- width_ = width;
- height_ = height;
- format_ = format;
- switch (format) {
- case AOM_IMG_FMT_I420: raw_size_ = width * height * 3 / 2; break;
- case AOM_IMG_FMT_I422: raw_size_ = width * height * 2; break;
- case AOM_IMG_FMT_I444: raw_size_ = width * height * 3; break;
- case AOM_IMG_FMT_I42016: raw_size_ = width * height * 3; break;
- case AOM_IMG_FMT_I42216: raw_size_ = width * height * 4; break;
- case AOM_IMG_FMT_I44416: raw_size_ = width * height * 6; break;
- default: ASSERT_TRUE(0);
- }
- }
- }
-
- virtual void FillFrame() {
- ASSERT_TRUE(input_file_ != NULL);
- // Read a frame from input_file.
- if (fread(img_->img_data, raw_size_, 1, input_file_) == 0) {
- limit_ = frame_;
- }
- }
-
- protected:
- std::string file_name_;
- FILE *input_file_;
- aom_image_t *img_;
- size_t raw_size_;
- unsigned int start_;
- unsigned int limit_;
- unsigned int frame_;
- unsigned int width_;
- unsigned int height_;
- aom_img_fmt format_;
- int framerate_numerator_;
- int framerate_denominator_;
-};
-
-} // namespace libaom_test
-
-#endif // AOM_TEST_YUV_VIDEO_SOURCE_H_