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