1b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian/* 2b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 3b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * 4b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 5b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 6b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 7b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 8b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 9b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian */ 10b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 11b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include <math.h> 12b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include <stdlib.h> 13b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include <string.h> 14b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 15b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "third_party/googletest/src/include/gtest/gtest.h" 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "test/acm_random.h" 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "test/clear_system_state.h" 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "test/register_state_check.h" 19b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "test/util.h" 20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 21b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "./vp9_rtcd.h" 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/common/vp9_blockd.h" 23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/common/vp9_scan.h" 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vpx/vpx_integer.h" 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianusing libvpx_test::ACMRandom; 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniannamespace { 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef void (*fwd_txfm_t)(const int16_t *in, int16_t *out, int stride); 30b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef void (*inv_txfm_t)(const int16_t *in, uint8_t *out, int stride); 31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef std::tr1::tuple<inv_txfm_t, 32b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian inv_txfm_t, 33b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_SIZE, int> partial_itxfm_param_t; 34b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianconst int kMaxNumCoeffs = 1024; 35b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianclass PartialIDctTest : public ::testing::TestWithParam<partial_itxfm_param_t> { 36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian public: 37b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian virtual ~PartialIDctTest() {} 38b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian virtual void SetUp() { 39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian full_itxfm_ = GET_PARAM(0); 40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian partial_itxfm_ = GET_PARAM(1); 41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian tx_size_ = GET_PARAM(2); 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian last_nonzero_ = GET_PARAM(3); 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 45b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian virtual void TearDown() { libvpx_test::ClearSystemState(); } 46b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian protected: 48b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int last_nonzero_; 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_SIZE tx_size_; 50b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian inv_txfm_t full_itxfm_; 51b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian inv_txfm_t partial_itxfm_; 52b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}; 53b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 54b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianTEST_P(PartialIDctTest, ResultsMatch) { 55b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian ACMRandom rnd(ACMRandom::DeterministicSeed()); 56b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int size; 57b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian switch (tx_size_) { 58b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian case TX_4X4: 59b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian size = 4; 60b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian break; 61b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian case TX_8X8: 62b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian size = 8; 63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian break; 64b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian case TX_16X16: 65b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian size = 16; 66b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian break; 67b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian case TX_32X32: 68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian size = 32; 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian break; 70b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default: 71b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian FAIL() << "Wrong Size!"; 72b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian break; 73b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 74b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED_ARRAY(16, int16_t, test_coef_block1, kMaxNumCoeffs); 75b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED_ARRAY(16, int16_t, test_coef_block2, kMaxNumCoeffs); 76b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED_ARRAY(16, uint8_t, dst1, kMaxNumCoeffs); 77b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED_ARRAY(16, uint8_t, dst2, kMaxNumCoeffs); 78b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int count_test_block = 1000; 79b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int max_coeff = 32766 / 4; 80b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int block_size = size * size; 81b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int max_error = 0; 82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian for (int i = 0; i < count_test_block; ++i) { 83b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // clear out destination buffer 84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian memset(dst1, 0, sizeof(*dst1) * block_size); 85b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian memset(dst2, 0, sizeof(*dst2) * block_size); 86b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian memset(test_coef_block1, 0, sizeof(*test_coef_block1) * block_size); 87b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian memset(test_coef_block2, 0, sizeof(*test_coef_block2) * block_size); 88b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int max_energy_leftover = max_coeff * max_coeff; 89b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian for (int j = 0; j < last_nonzero_; ++j) { 90b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int16_t coef = static_cast<int16_t>(sqrt(1.0 * max_energy_leftover) * 91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian (rnd.Rand16() - 32768) / 65536); 92b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian max_energy_leftover -= coef * coef; 93b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian if (max_energy_leftover < 0) { 94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian max_energy_leftover = 0; 95b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian coef = 0; 96b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 97b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian test_coef_block1[vp9_default_scan_orders[tx_size_].scan[j]] = coef; 98b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 99b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 100b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian memcpy(test_coef_block2, test_coef_block1, 101b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian sizeof(*test_coef_block2) * block_size); 102b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 103b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian REGISTER_STATE_CHECK(full_itxfm_(test_coef_block1, dst1, size)); 104b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian REGISTER_STATE_CHECK(partial_itxfm_(test_coef_block2, dst2, size)); 105b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 106b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian for (int j = 0; j < block_size; ++j) { 107b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int diff = dst1[j] - dst2[j]; 108b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int error = diff * diff; 109b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian if (max_error < error) 110b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian max_error = error; 111b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 112b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 113b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 114b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian EXPECT_EQ(0, max_error) 115b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian << "Error: partial inverse transform produces different results"; 116b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} 117b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianusing std::tr1::make_tuple; 118b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 119b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P( 120b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian C, PartialIDctTest, 121b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian ::testing::Values( 122b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct32x32_1024_add_c, 123b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct32x32_34_add_c, 124b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_32X32, 34), 125b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct32x32_1024_add_c, 126b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct32x32_1_add_c, 127b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_32X32, 1), 128b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 129b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_10_add_c, 130b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 10), 131b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 132b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_1_add_c, 133b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 1), 134b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 135b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_10_add_c, 136b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 10), 137b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 138b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_1_add_c, 139b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 1), 140b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct4x4_16_add_c, 141b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct4x4_1_add_c, 142b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_4X4, 1))); 143b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#if HAVE_NEON 144b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P( 145b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian NEON, PartialIDctTest, 146b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian ::testing::Values( 147b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct32x32_1024_add_c, 148b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct32x32_1_add_neon, 149b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_32X32, 1), 150b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 151b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_10_add_neon, 152b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 10), 153b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 154b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_1_add_neon, 155b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 1), 156b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 157b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_10_add_neon, 158b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 10), 159b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 160b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_1_add_neon, 161b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 1), 162b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct4x4_16_add_c, 163b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct4x4_1_add_neon, 164b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_4X4, 1))); 165b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 166b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 167b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#if HAVE_SSE2 168b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P( 169b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian SSE2, PartialIDctTest, 170b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian ::testing::Values( 171b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct32x32_1024_add_c, 172b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct32x32_34_add_sse2, 173b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_32X32, 34), 174b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct32x32_1024_add_c, 175b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct32x32_1_add_sse2, 176b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_32X32, 1), 177b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 178b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_10_add_sse2, 179b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 10), 180b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct16x16_256_add_c, 181b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct16x16_1_add_sse2, 182b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_16X16, 1), 183b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 184b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_10_add_sse2, 185b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 10), 186b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct8x8_64_add_c, 187b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct8x8_1_add_sse2, 188b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_8X8, 1), 189b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian make_tuple(&vp9_idct4x4_16_add_c, 190b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian &vp9_idct4x4_1_add_sse2, 191b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian TX_4X4, 1))); 192b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 193b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // namespace 194