Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | /* |
michael@0 | 2 | * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
michael@0 | 3 | * |
michael@0 | 4 | * Use of this source code is governed by a BSD-style license |
michael@0 | 5 | * that can be found in the LICENSE file in the root of the source |
michael@0 | 6 | * tree. An additional intellectual property rights grant can be found |
michael@0 | 7 | * in the file PATENTS. All contributing project authors may |
michael@0 | 8 | * be found in the AUTHORS file in the root of the source tree. |
michael@0 | 9 | */ |
michael@0 | 10 | |
michael@0 | 11 | #ifndef VP9_COMMON_VP9_IDCT_H_ |
michael@0 | 12 | #define VP9_COMMON_VP9_IDCT_H_ |
michael@0 | 13 | |
michael@0 | 14 | #include <assert.h> |
michael@0 | 15 | |
michael@0 | 16 | #include "./vpx_config.h" |
michael@0 | 17 | #include "vpx/vpx_integer.h" |
michael@0 | 18 | #include "vp9/common/vp9_common.h" |
michael@0 | 19 | #include "vp9/common/vp9_enums.h" |
michael@0 | 20 | |
michael@0 | 21 | |
michael@0 | 22 | // Constants and Macros used by all idct/dct functions |
michael@0 | 23 | #define DCT_CONST_BITS 14 |
michael@0 | 24 | #define DCT_CONST_ROUNDING (1 << (DCT_CONST_BITS - 1)) |
michael@0 | 25 | |
michael@0 | 26 | #define UNIT_QUANT_SHIFT 2 |
michael@0 | 27 | #define UNIT_QUANT_FACTOR (1 << UNIT_QUANT_SHIFT) |
michael@0 | 28 | |
michael@0 | 29 | #define pair_set_epi16(a, b) \ |
michael@0 | 30 | _mm_set_epi16(b, a, b, a, b, a, b, a) |
michael@0 | 31 | |
michael@0 | 32 | #define pair_set_epi32(a, b) \ |
michael@0 | 33 | _mm_set_epi32(b, a, b, a) |
michael@0 | 34 | |
michael@0 | 35 | // Constants: |
michael@0 | 36 | // for (int i = 1; i< 32; ++i) |
michael@0 | 37 | // printf("static const int cospi_%d_64 = %.0f;\n", i, |
michael@0 | 38 | // round(16384 * cos(i*M_PI/64))); |
michael@0 | 39 | // Note: sin(k*Pi/64) = cos((32-k)*Pi/64) |
michael@0 | 40 | static const int cospi_1_64 = 16364; |
michael@0 | 41 | static const int cospi_2_64 = 16305; |
michael@0 | 42 | static const int cospi_3_64 = 16207; |
michael@0 | 43 | static const int cospi_4_64 = 16069; |
michael@0 | 44 | static const int cospi_5_64 = 15893; |
michael@0 | 45 | static const int cospi_6_64 = 15679; |
michael@0 | 46 | static const int cospi_7_64 = 15426; |
michael@0 | 47 | static const int cospi_8_64 = 15137; |
michael@0 | 48 | static const int cospi_9_64 = 14811; |
michael@0 | 49 | static const int cospi_10_64 = 14449; |
michael@0 | 50 | static const int cospi_11_64 = 14053; |
michael@0 | 51 | static const int cospi_12_64 = 13623; |
michael@0 | 52 | static const int cospi_13_64 = 13160; |
michael@0 | 53 | static const int cospi_14_64 = 12665; |
michael@0 | 54 | static const int cospi_15_64 = 12140; |
michael@0 | 55 | static const int cospi_16_64 = 11585; |
michael@0 | 56 | static const int cospi_17_64 = 11003; |
michael@0 | 57 | static const int cospi_18_64 = 10394; |
michael@0 | 58 | static const int cospi_19_64 = 9760; |
michael@0 | 59 | static const int cospi_20_64 = 9102; |
michael@0 | 60 | static const int cospi_21_64 = 8423; |
michael@0 | 61 | static const int cospi_22_64 = 7723; |
michael@0 | 62 | static const int cospi_23_64 = 7005; |
michael@0 | 63 | static const int cospi_24_64 = 6270; |
michael@0 | 64 | static const int cospi_25_64 = 5520; |
michael@0 | 65 | static const int cospi_26_64 = 4756; |
michael@0 | 66 | static const int cospi_27_64 = 3981; |
michael@0 | 67 | static const int cospi_28_64 = 3196; |
michael@0 | 68 | static const int cospi_29_64 = 2404; |
michael@0 | 69 | static const int cospi_30_64 = 1606; |
michael@0 | 70 | static const int cospi_31_64 = 804; |
michael@0 | 71 | |
michael@0 | 72 | // 16384 * sqrt(2) * sin(kPi/9) * 2 / 3 |
michael@0 | 73 | static const int sinpi_1_9 = 5283; |
michael@0 | 74 | static const int sinpi_2_9 = 9929; |
michael@0 | 75 | static const int sinpi_3_9 = 13377; |
michael@0 | 76 | static const int sinpi_4_9 = 15212; |
michael@0 | 77 | |
michael@0 | 78 | static INLINE int dct_const_round_shift(int input) { |
michael@0 | 79 | int rv = ROUND_POWER_OF_TWO(input, DCT_CONST_BITS); |
michael@0 | 80 | return (int16_t)rv; |
michael@0 | 81 | } |
michael@0 | 82 | |
michael@0 | 83 | typedef void (*transform_1d)(const int16_t*, int16_t*); |
michael@0 | 84 | |
michael@0 | 85 | typedef struct { |
michael@0 | 86 | transform_1d cols, rows; // vertical and horizontal |
michael@0 | 87 | } transform_2d; |
michael@0 | 88 | |
michael@0 | 89 | void vp9_iwht4x4_add(const int16_t *input, uint8_t *dest, int stride, int eob); |
michael@0 | 90 | |
michael@0 | 91 | void vp9_idct4x4_add(const int16_t *input, uint8_t *dest, int stride, int eob); |
michael@0 | 92 | void vp9_idct8x8_add(const int16_t *input, uint8_t *dest, int stride, int eob); |
michael@0 | 93 | void vp9_idct16x16_add(const int16_t *input, uint8_t *dest, int stride, int |
michael@0 | 94 | eob); |
michael@0 | 95 | void vp9_idct32x32_add(const int16_t *input, uint8_t *dest, int stride, |
michael@0 | 96 | int eob); |
michael@0 | 97 | |
michael@0 | 98 | void vp9_iht4x4_add(TX_TYPE tx_type, const int16_t *input, uint8_t *dest, |
michael@0 | 99 | int stride, int eob); |
michael@0 | 100 | void vp9_iht8x8_add(TX_TYPE tx_type, const int16_t *input, uint8_t *dest, |
michael@0 | 101 | int stride, int eob); |
michael@0 | 102 | void vp9_iht16x16_add(TX_TYPE tx_type, const int16_t *input, uint8_t *dest, |
michael@0 | 103 | int stride, int eob); |
michael@0 | 104 | |
michael@0 | 105 | |
michael@0 | 106 | #endif // VP9_COMMON_VP9_IDCT_H_ |