summaryrefslogtreecommitdiff
path: root/vp9/common/idct.h
blob: cbe1169bcbc5c90e8d0ad511538575a8083f8693 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 *  Copyright (c) 2010 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.
 */


#ifndef __INC_IDCT_H
#define __INC_IDCT_H

#include "vp9/common/blockd.h"

#define prototype_second_order(sym) \
  void sym(short *input, short *output)

#define prototype_idct(sym) \
  void sym(short *input, short *output, int pitch)

#define prototype_idct_scalar_add(sym) \
  void sym(short input, \
           unsigned char *pred, unsigned char *output, \
           int pitch, int stride)

#if ARCH_X86 || ARCH_X86_64
#include "x86/idct_x86.h"
#endif

#ifdef _MSC_VER
/* TODO: remove these after integer implmementations are done */
#define M_PI       3.14159265358979323846
#define round(x) (((x)>0)? floor((x)+0.5): ceil((x)-0.5))
#endif


#if ARCH_ARM
#include "arm/idct_arm.h"
#endif

#if CONFIG_LOSSLESS
#define WHT_UPSCALE_FACTOR 3
#define Y2_WHT_UPSCALE_FACTOR 2
#endif

#ifndef vp9_idct_idct16x16
#define vp9_idct_idct16x16 vp9_short_idct16x16_c
#endif
extern prototype_idct(vp9_idct_idct16x16);

#ifndef vp9_idct_idct8
#define vp9_idct_idct8 vp9_short_idct8x8_c
#endif
extern prototype_idct(vp9_idct_idct8);

#ifndef vp9_idct_idct8_1
#define vp9_idct_idct8_1 vp9_short_idct8x8_1_c
#endif
extern prototype_idct(vp9_idct_idct8_1);

#ifndef vp9_idct_ihaar2
#define vp9_idct_ihaar2 vp9_short_ihaar2x2_c
#endif
extern prototype_idct(vp9_idct_ihaar2);

#ifndef vp9_idct_ihaar2_1
#define vp9_idct_ihaar2_1 vp9_short_ihaar2x2_1_c
#endif
extern prototype_idct(vp9_idct_ihaar2_1);

#ifndef vp9_idct_idct1_scalar_add_8x8
#define vp9_idct_idct1_scalar_add_8x8 vp9_dc_only_idct_add_8x8_c
#endif
extern prototype_idct_scalar_add(vp9_idct_idct1_scalar_add_8x8);



#ifndef vp9_idct_idct1
#define vp9_idct_idct1 vp9_short_idct4x4llm_1_c
#endif
extern prototype_idct(vp9_idct_idct1);

#ifndef vp9_idct_idct16
#define vp9_idct_idct16 vp9_short_idct4x4llm_c
#endif
extern prototype_idct(vp9_idct_idct16);

#ifndef vp9_idct_idct1_scalar_add
#define vp9_idct_idct1_scalar_add vp9_dc_only_idct_add_c
#endif
extern prototype_idct_scalar_add(vp9_idct_idct1_scalar_add);


#ifndef vp9_idct_iwalsh1
#define vp9_idct_iwalsh1 vp9_short_inv_walsh4x4_1_c
#endif
extern prototype_second_order(vp9_idct_iwalsh1);

#ifndef vp9_idct_iwalsh16
#define vp9_idct_iwalsh16 vp9_short_inv_walsh4x4_c
#endif
extern prototype_second_order(vp9_idct_iwalsh16);

#if CONFIG_LOSSLESS
extern prototype_idct(vp9_short_inv_walsh4x4_x8_c);
extern prototype_idct(vp9_short_inv_walsh4x4_1_x8_c);
extern prototype_idct_scalar_add(vp9_dc_only_inv_walsh_add_c);
extern prototype_second_order(vp9_short_inv_walsh4x4_lossless_c);
extern prototype_second_order(vp9_short_inv_walsh4x4_1_lossless_c);
#endif

void vp9_ihtllm_c(const int16_t *input, int16_t *output, int pitch,
                  TX_TYPE tx_type, int tx_dim);

typedef prototype_idct((*vp9_idct_fn_t));
typedef prototype_idct_scalar_add((*vp9_idct_scalar_add_fn_t));
typedef prototype_second_order((*vp9_second_order_fn_t));

typedef struct {
  vp9_idct_fn_t            idct1;
  vp9_idct_fn_t            idct16;
  vp9_idct_scalar_add_fn_t idct1_scalar_add;

  vp9_second_order_fn_t iwalsh1;
  vp9_second_order_fn_t iwalsh16;

  vp9_idct_fn_t            idct8;
  vp9_idct_fn_t            idct8_1;
  vp9_idct_scalar_add_fn_t idct1_scalar_add_8x8;
  vp9_idct_fn_t ihaar2;
  vp9_idct_fn_t ihaar2_1;

  vp9_idct_fn_t            idct16x16;
} vp9_idct_rtcd_vtable_t;

#if CONFIG_RUNTIME_CPU_DETECT
#define IDCT_INVOKE(ctx,fn) (ctx)->fn
#else
#define IDCT_INVOKE(ctx,fn) vp9_idct_##fn
#endif

#endif