| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 static int round(double x) { | 30 static int round(double x) { |
| 31 if (x < 0) | 31 if (x < 0) |
| 32 return static_cast<int>(ceil(x - 0.5)); | 32 return static_cast<int>(ceil(x - 0.5)); |
| 33 else | 33 else |
| 34 return static_cast<int>(floor(x + 0.5)); | 34 return static_cast<int>(floor(x + 0.5)); |
| 35 } | 35 } |
| 36 #endif | 36 #endif |
| 37 | 37 |
| 38 const int kNumCoeffs = 1024; | 38 const int kNumCoeffs = 1024; |
| 39 const double kPi = 3.141592653589793238462643383279502884; | 39 const double kPi = 3.141592653589793238462643383279502884; |
| 40 void reference_32x32_dct_1d(const double in[32], double out[32], int stride) { | 40 void reference_32x32_dct_1d(const double in[32], double out[32]) { |
| 41 const double kInvSqrt2 = 0.707106781186547524400844362104; | 41 const double kInvSqrt2 = 0.707106781186547524400844362104; |
| 42 for (int k = 0; k < 32; k++) { | 42 for (int k = 0; k < 32; k++) { |
| 43 out[k] = 0.0; | 43 out[k] = 0.0; |
| 44 for (int n = 0; n < 32; n++) | 44 for (int n = 0; n < 32; n++) |
| 45 out[k] += in[n] * cos(kPi * (2 * n + 1) * k / 64.0); | 45 out[k] += in[n] * cos(kPi * (2 * n + 1) * k / 64.0); |
| 46 if (k == 0) | 46 if (k == 0) |
| 47 out[k] = out[k] * kInvSqrt2; | 47 out[k] = out[k] * kInvSqrt2; |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 | 50 |
| 51 void reference_32x32_dct_2d(const int16_t input[kNumCoeffs], | 51 void reference_32x32_dct_2d(const int16_t input[kNumCoeffs], |
| 52 double output[kNumCoeffs]) { | 52 double output[kNumCoeffs]) { |
| 53 // First transform columns | 53 // First transform columns |
| 54 for (int i = 0; i < 32; ++i) { | 54 for (int i = 0; i < 32; ++i) { |
| 55 double temp_in[32], temp_out[32]; | 55 double temp_in[32], temp_out[32]; |
| 56 for (int j = 0; j < 32; ++j) | 56 for (int j = 0; j < 32; ++j) |
| 57 temp_in[j] = input[j*32 + i]; | 57 temp_in[j] = input[j*32 + i]; |
| 58 reference_32x32_dct_1d(temp_in, temp_out, 1); | 58 reference_32x32_dct_1d(temp_in, temp_out); |
| 59 for (int j = 0; j < 32; ++j) | 59 for (int j = 0; j < 32; ++j) |
| 60 output[j * 32 + i] = temp_out[j]; | 60 output[j * 32 + i] = temp_out[j]; |
| 61 } | 61 } |
| 62 // Then transform rows | 62 // Then transform rows |
| 63 for (int i = 0; i < 32; ++i) { | 63 for (int i = 0; i < 32; ++i) { |
| 64 double temp_in[32], temp_out[32]; | 64 double temp_in[32], temp_out[32]; |
| 65 for (int j = 0; j < 32; ++j) | 65 for (int j = 0; j < 32; ++j) |
| 66 temp_in[j] = output[j + i*32]; | 66 temp_in[j] = output[j + i*32]; |
| 67 reference_32x32_dct_1d(temp_in, temp_out, 1); | 67 reference_32x32_dct_1d(temp_in, temp_out); |
| 68 // Scale by some magic number | 68 // Scale by some magic number |
| 69 for (int j = 0; j < 32; ++j) | 69 for (int j = 0; j < 32; ++j) |
| 70 output[j + i * 32] = temp_out[j] / 4; | 70 output[j + i * 32] = temp_out[j] / 4; |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 | 73 |
| 74 typedef void (*FwdTxfmFunc)(const int16_t *in, int16_t *out, int stride); | 74 typedef void (*FwdTxfmFunc)(const int16_t *in, int16_t *out, int stride); |
| 75 typedef void (*InvTxfmFunc)(const int16_t *in, uint8_t *out, int stride); | 75 typedef void (*InvTxfmFunc)(const int16_t *in, uint8_t *out, int stride); |
| 76 | 76 |
| 77 typedef std::tr1::tuple<FwdTxfmFunc, InvTxfmFunc, int> Trans32x32Param; | 77 typedef std::tr1::tuple<FwdTxfmFunc, InvTxfmFunc, int> Trans32x32Param; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 #if HAVE_AVX2 | 273 #if HAVE_AVX2 |
| 274 INSTANTIATE_TEST_CASE_P( | 274 INSTANTIATE_TEST_CASE_P( |
| 275 AVX2, Trans32x32Test, | 275 AVX2, Trans32x32Test, |
| 276 ::testing::Values( | 276 ::testing::Values( |
| 277 make_tuple(&vp9_fdct32x32_avx2, | 277 make_tuple(&vp9_fdct32x32_avx2, |
| 278 &vp9_idct32x32_1024_add_sse2, 0), | 278 &vp9_idct32x32_1024_add_sse2, 0), |
| 279 make_tuple(&vp9_fdct32x32_rd_avx2, | 279 make_tuple(&vp9_fdct32x32_rd_avx2, |
| 280 &vp9_idct32x32_1024_add_sse2, 1))); | 280 &vp9_idct32x32_1024_add_sse2, 1))); |
| 281 #endif | 281 #endif |
| 282 } // namespace | 282 } // namespace |
| OLD | NEW |