annotate vp8dsp.c @ 12340:2d15f62f4f8a libavcodec

VP8: move zeroing of luma DC block into the WHT Lets us do the zeroing in asm instead of C. Also makes it consistent with the way the regular iDCT code does it.
author darkshikari
date Mon, 02 Aug 2010 20:18:09 +0000
parents c7f6ddcc5c01
children b4c63ffd959b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
1 /**
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
2 * VP8 compatible video decoder
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
3 *
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
4 * Copyright (C) 2010 David Conrad
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
5 * Copyright (C) 2010 Ronald S. Bultje
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
6 *
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
7 * This file is part of FFmpeg.
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
8 *
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
13 *
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
17 * Lesser General Public License for more details.
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
18 *
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
22 */
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
23
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
24 #include "dsputil.h"
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
25 #include "vp8dsp.h"
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
26
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
27 // TODO: Maybe add dequant
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
28 static void vp8_luma_dc_wht_c(DCTELEM block[4][4][16], DCTELEM dc[16])
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
29 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
30 int i, t0, t1, t2, t3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
31
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
32 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
33 t0 = dc[0*4+i] + dc[3*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
34 t1 = dc[1*4+i] + dc[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
35 t2 = dc[1*4+i] - dc[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
36 t3 = dc[0*4+i] - dc[3*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
37
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
38 dc[0*4+i] = t0 + t1;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
39 dc[1*4+i] = t3 + t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
40 dc[2*4+i] = t0 - t1;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
41 dc[3*4+i] = t3 - t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
42 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
43
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
44 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
45 t0 = dc[i*4+0] + dc[i*4+3] + 3; // rounding
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
46 t1 = dc[i*4+1] + dc[i*4+2];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
47 t2 = dc[i*4+1] - dc[i*4+2];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
48 t3 = dc[i*4+0] - dc[i*4+3] + 3; // rounding
12340
2d15f62f4f8a VP8: move zeroing of luma DC block into the WHT
darkshikari
parents: 12241
diff changeset
49 dc[i*4+0] = 0;
2d15f62f4f8a VP8: move zeroing of luma DC block into the WHT
darkshikari
parents: 12241
diff changeset
50 dc[i*4+1] = 0;
2d15f62f4f8a VP8: move zeroing of luma DC block into the WHT
darkshikari
parents: 12241
diff changeset
51 dc[i*4+2] = 0;
2d15f62f4f8a VP8: move zeroing of luma DC block into the WHT
darkshikari
parents: 12241
diff changeset
52 dc[i*4+3] = 0;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
53
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
54 *block[i][0] = (t0 + t1) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
55 *block[i][1] = (t3 + t2) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
56 *block[i][2] = (t0 - t1) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
57 *block[i][3] = (t3 - t2) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
58 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
59 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
60
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
61
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
62 #define MUL_20091(a) ((((a)*20091) >> 16) + (a))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
63 #define MUL_35468(a) (((a)*35468) >> 16)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
64
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
65 static void vp8_idct_add_c(uint8_t *dst, DCTELEM block[16], int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
66 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
67 int i, t0, t1, t2, t3;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
68 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
69 DCTELEM tmp[16];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
70
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
71 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
72 t0 = block[0*4+i] + block[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
73 t1 = block[0*4+i] - block[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
74 t2 = MUL_35468(block[1*4+i]) - MUL_20091(block[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
75 t3 = MUL_20091(block[1*4+i]) + MUL_35468(block[3*4+i]);
12235
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
76 block[0*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
77 block[1*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
78 block[2*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
79 block[3*4+i] = 0;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
80
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
81 tmp[i*4+0] = t0 + t3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
82 tmp[i*4+1] = t1 + t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
83 tmp[i*4+2] = t1 - t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
84 tmp[i*4+3] = t0 - t3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
85 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
86
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
87 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
88 t0 = tmp[0*4+i] + tmp[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
89 t1 = tmp[0*4+i] - tmp[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
90 t2 = MUL_35468(tmp[1*4+i]) - MUL_20091(tmp[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
91 t3 = MUL_20091(tmp[1*4+i]) + MUL_35468(tmp[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
92
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
93 dst[0] = cm[dst[0] + ((t0 + t3 + 4) >> 3)];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
94 dst[1] = cm[dst[1] + ((t1 + t2 + 4) >> 3)];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
95 dst[2] = cm[dst[2] + ((t1 - t2 + 4) >> 3)];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
96 dst[3] = cm[dst[3] + ((t0 - t3 + 4) >> 3)];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
97 dst += stride;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
98 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
99 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
100
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
101 static void vp8_idct_dc_add_c(uint8_t *dst, DCTELEM block[16], int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
102 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
103 int i, dc = (block[0] + 4) >> 3;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
104 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP + dc;
12235
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
105 block[0] = 0;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
106
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
107 for (i = 0; i < 4; i++) {
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
108 dst[0] = cm[dst[0]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
109 dst[1] = cm[dst[1]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
110 dst[2] = cm[dst[2]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
111 dst[3] = cm[dst[3]];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
112 dst += stride;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
113 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
114 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
115
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
116 static void vp8_idct_dc_add4uv_c(uint8_t *dst, DCTELEM block[4][16], int stride)
12238
1a7903913e9b VP8: 30% faster idct_mb
darkshikari
parents: 12235
diff changeset
117 {
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
118 vp8_idct_dc_add_c(dst+stride*0+0, block[0], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
119 vp8_idct_dc_add_c(dst+stride*0+4, block[1], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
120 vp8_idct_dc_add_c(dst+stride*4+0, block[2], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
121 vp8_idct_dc_add_c(dst+stride*4+4, block[3], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
122 }
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
123
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
124 static void vp8_idct_dc_add4y_c(uint8_t *dst, DCTELEM block[4][16], int stride)
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
125 {
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
126 vp8_idct_dc_add_c(dst+ 0, block[0], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
127 vp8_idct_dc_add_c(dst+ 4, block[1], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
128 vp8_idct_dc_add_c(dst+ 8, block[2], stride);
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
129 vp8_idct_dc_add_c(dst+12, block[3], stride);
12238
1a7903913e9b VP8: 30% faster idct_mb
darkshikari
parents: 12235
diff changeset
130 }
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
131
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
132 // because I like only having two parameters to pass functions...
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
133 #define LOAD_PIXELS\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
134 int av_unused p3 = p[-4*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
135 int av_unused p2 = p[-3*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
136 int av_unused p1 = p[-2*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
137 int av_unused p0 = p[-1*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
138 int av_unused q0 = p[ 0*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
139 int av_unused q1 = p[ 1*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
140 int av_unused q2 = p[ 2*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
141 int av_unused q3 = p[ 3*stride];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
142
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
143 #define clip_int8(n) (cm[n+0x80]-0x80)
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
144
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
145 static av_always_inline void filter_common(uint8_t *p, int stride, int is4tap)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
146 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
147 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
148 int a, f1, f2;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
149 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
150
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
151 a = 3*(q0 - p0);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
152
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
153 if (is4tap)
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
154 a += clip_int8(p1 - q1);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
155
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
156 a = clip_int8(a);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
157
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
158 // We deviate from the spec here with c(a+3) >> 3
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
159 // since that's what libvpx does.
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
160 f1 = FFMIN(a+4, 127) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
161 f2 = FFMIN(a+3, 127) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
162
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
163 // Despite what the spec says, we do need to clamp here to
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
164 // be bitexact with libvpx.
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
165 p[-1*stride] = cm[p0 + f2];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
166 p[ 0*stride] = cm[q0 - f1];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
167
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
168 // only used for _inner on blocks without high edge variance
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
169 if (!is4tap) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
170 a = (f1+1)>>1;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
171 p[-2*stride] = cm[p1 + a];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
172 p[ 1*stride] = cm[q1 - a];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
173 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
174 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
175
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
176 static av_always_inline int simple_limit(uint8_t *p, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
177 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
178 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
179 return 2*FFABS(p0-q0) + (FFABS(p1-q1) >> 1) <= flim;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
180 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
181
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
182 /**
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
183 * E - limit at the macroblock edge
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
184 * I - limit for interior difference
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
185 */
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
186 static av_always_inline int normal_limit(uint8_t *p, int stride, int E, int I)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
187 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
188 LOAD_PIXELS
12081
812e23197d64 VP8: Move calculation of outer filter limit out of dsp functions for normal
conrad
parents: 12011
diff changeset
189 return simple_limit(p, stride, E)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
190 && FFABS(p3-p2) <= I && FFABS(p2-p1) <= I && FFABS(p1-p0) <= I
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
191 && FFABS(q3-q2) <= I && FFABS(q2-q1) <= I && FFABS(q1-q0) <= I;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
192 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
193
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
194 // high edge variance
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
195 static av_always_inline int hev(uint8_t *p, int stride, int thresh)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
196 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
197 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
198 return FFABS(p1-p0) > thresh || FFABS(q1-q0) > thresh;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
199 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
200
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
201 static av_always_inline void filter_mbedge(uint8_t *p, int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
202 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
203 int a0, a1, a2, w;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
204 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
205
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
206 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
207
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
208 w = clip_int8(p1-q1);
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
209 w = clip_int8(w + 3*(q0-p0));
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
210
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
211 a0 = (27*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
212 a1 = (18*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
213 a2 = ( 9*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
214
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
215 p[-3*stride] = cm[p2 + a2];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
216 p[-2*stride] = cm[p1 + a1];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
217 p[-1*stride] = cm[p0 + a0];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
218 p[ 0*stride] = cm[q0 - a0];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
219 p[ 1*stride] = cm[q1 - a1];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
220 p[ 2*stride] = cm[q2 - a2];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
221 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
222
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
223 #define LOOP_FILTER(dir, size, stridea, strideb, maybe_inline) \
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
224 static maybe_inline void vp8_ ## dir ## _loop_filter ## size ## _c(uint8_t *dst, int stride,\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
225 int flim_E, int flim_I, int hev_thresh)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
226 {\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
227 int i;\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
228 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
229 for (i = 0; i < size; i++)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
230 if (normal_limit(dst+i*stridea, strideb, flim_E, flim_I)) {\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
231 if (hev(dst+i*stridea, strideb, hev_thresh))\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
232 filter_common(dst+i*stridea, strideb, 1);\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
233 else\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
234 filter_mbedge(dst+i*stridea, strideb);\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
235 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
236 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
237 \
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
238 static maybe_inline void vp8_ ## dir ## _loop_filter ## size ## _inner_c(uint8_t *dst, int stride,\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
239 int flim_E, int flim_I, int hev_thresh)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
240 {\
12008
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
241 int i;\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
242 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
243 for (i = 0; i < size; i++)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
244 if (normal_limit(dst+i*stridea, strideb, flim_E, flim_I)) {\
12008
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
245 int hv = hev(dst+i*stridea, strideb, hev_thresh);\
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
246 if (hv) \
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
247 filter_common(dst+i*stridea, strideb, 1);\
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
248 else \
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
249 filter_common(dst+i*stridea, strideb, 0);\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
250 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
251 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
252
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
253 LOOP_FILTER(v, 16, 1, stride,)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
254 LOOP_FILTER(h, 16, stride, 1,)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
255
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
256 #define UV_LOOP_FILTER(dir, stridea, strideb) \
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
257 LOOP_FILTER(dir, 8, stridea, strideb, av_always_inline) \
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
258 static void vp8_ ## dir ## _loop_filter8uv_c(uint8_t *dstU, uint8_t *dstV, int stride,\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
259 int fE, int fI, int hev_thresh)\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
260 {\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
261 vp8_ ## dir ## _loop_filter8_c(dstU, stride, fE, fI, hev_thresh);\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
262 vp8_ ## dir ## _loop_filter8_c(dstV, stride, fE, fI, hev_thresh);\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
263 }\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
264 static void vp8_ ## dir ## _loop_filter8uv_inner_c(uint8_t *dstU, uint8_t *dstV, int stride,\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
265 int fE, int fI, int hev_thresh)\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
266 {\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
267 vp8_ ## dir ## _loop_filter8_inner_c(dstU, stride, fE, fI, hev_thresh);\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
268 vp8_ ## dir ## _loop_filter8_inner_c(dstV, stride, fE, fI, hev_thresh);\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
269 }
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
270
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
271 UV_LOOP_FILTER(v, 1, stride)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
272 UV_LOOP_FILTER(h, stride, 1)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
273
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
274 static void vp8_v_loop_filter_simple_c(uint8_t *dst, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
275 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
276 int i;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
277
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
278 for (i = 0; i < 16; i++)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
279 if (simple_limit(dst+i, stride, flim))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
280 filter_common(dst+i, stride, 1);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
281 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
282
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
283 static void vp8_h_loop_filter_simple_c(uint8_t *dst, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
284 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
285 int i;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
286
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
287 for (i = 0; i < 16; i++)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
288 if (simple_limit(dst+i*stride, 1, flim))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
289 filter_common(dst+i*stride, 1, 1);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
290 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
291
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
292 static const uint8_t subpel_filters[7][6] = {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
293 { 0, 6, 123, 12, 1, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
294 { 2, 11, 108, 36, 8, 1 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
295 { 0, 9, 93, 50, 6, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
296 { 3, 16, 77, 77, 16, 3 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
297 { 0, 6, 50, 93, 9, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
298 { 1, 8, 36, 108, 11, 2 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
299 { 0, 1, 12, 123, 6, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
300 };
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
301
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
302 #define PUT_PIXELS(WIDTH) \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
303 static void put_vp8_pixels ## WIDTH ##_c(uint8_t *dst, int dststride, uint8_t *src, int srcstride, int h, int x, int y) { \
11956
496d1300204d Really fix r23782
darkshikari
parents: 11954
diff changeset
304 int i; \
496d1300204d Really fix r23782
darkshikari
parents: 11954
diff changeset
305 for (i = 0; i < h; i++, dst+= dststride, src+= srcstride) { \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
306 memcpy(dst, src, WIDTH); \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
307 } \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
308 }
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
309
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
310 PUT_PIXELS(16)
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
311 PUT_PIXELS(8)
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
312 PUT_PIXELS(4)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
313
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
314 #define FILTER_6TAP(src, F, stride) \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
315 cm[(F[2]*src[x+0*stride] - F[1]*src[x-1*stride] + F[0]*src[x-2*stride] + \
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
316 F[3]*src[x+1*stride] - F[4]*src[x+2*stride] + F[5]*src[x+3*stride] + 64) >> 7]
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
317
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
318 #define FILTER_4TAP(src, F, stride) \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
319 cm[(F[2]*src[x+0*stride] - F[1]*src[x-1*stride] + \
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
320 F[3]*src[x+1*stride] - F[4]*src[x+2*stride] + 64) >> 7]
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
321
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
322 #define VP8_EPEL_H(SIZE, FILTER, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
323 static void put_vp8_epel ## SIZE ## _ ## FILTERNAME ## _c(uint8_t *dst, int dststride, uint8_t *src, int srcstride, int h, int mx, int my) \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
324 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
325 const uint8_t *filter = subpel_filters[mx-1]; \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
326 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
327 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
328 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
329 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
330 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
331 dst[x] = FILTER(src, filter, 1); \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
332 dst += dststride; \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
333 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
334 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
335 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
336 #define VP8_EPEL_V(SIZE, FILTER, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
337 static void put_vp8_epel ## SIZE ## _ ## FILTERNAME ## _c(uint8_t *dst, int dststride, uint8_t *src, int srcstride, int h, int mx, int my) \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
338 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
339 const uint8_t *filter = subpel_filters[my-1]; \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
340 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
341 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
342 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
343 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
344 for (x = 0; x < SIZE; x++) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
345 dst[x] = FILTER(src, filter, srcstride); \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
346 dst += dststride; \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
347 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
348 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
349 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
350 #define VP8_EPEL_HV(SIZE, FILTERX, FILTERY, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
351 static void put_vp8_epel ## SIZE ## _ ## FILTERNAME ## _c(uint8_t *dst, int dststride, uint8_t *src, int srcstride, int h, int mx, int my) \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
352 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
353 const uint8_t *filter = subpel_filters[mx-1]; \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
354 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
355 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
356 uint8_t tmp_array[(2*SIZE+5)*SIZE]; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
357 uint8_t *tmp = tmp_array; \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
358 src -= 2*srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
359 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
360 for (y = 0; y < h+5; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
361 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
362 tmp[x] = FILTERX(src, filter, 1); \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
363 tmp += SIZE; \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
364 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
365 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
366 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
367 tmp = tmp_array + 2*SIZE; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
368 filter = subpel_filters[my-1]; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
369 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
370 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
371 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
372 dst[x] = FILTERY(tmp, filter, SIZE); \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
373 dst += dststride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
374 tmp += SIZE; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
375 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
376 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
377
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
378 VP8_EPEL_H(16, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
379 VP8_EPEL_H(8, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
380 VP8_EPEL_H(4, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
381 VP8_EPEL_H(16, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
382 VP8_EPEL_H(8, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
383 VP8_EPEL_H(4, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
384 VP8_EPEL_V(16, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
385 VP8_EPEL_V(8, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
386 VP8_EPEL_V(4, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
387 VP8_EPEL_V(16, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
388 VP8_EPEL_V(8, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
389 VP8_EPEL_V(4, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
390 VP8_EPEL_HV(16, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
391 VP8_EPEL_HV(8, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
392 VP8_EPEL_HV(4, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
393 VP8_EPEL_HV(16, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
394 VP8_EPEL_HV(8, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
395 VP8_EPEL_HV(4, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
396 VP8_EPEL_HV(16, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
397 VP8_EPEL_HV(8, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
398 VP8_EPEL_HV(4, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
399 VP8_EPEL_HV(16, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
400 VP8_EPEL_HV(8, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
401 VP8_EPEL_HV(4, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
402
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
403 #define VP8_BILINEAR(SIZE) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
404 static void put_vp8_bilinear ## SIZE ## _h_c(uint8_t *dst, int stride, uint8_t *src, int s2, int h, int mx, int my) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
405 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
406 int a = 8-mx, b = mx; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
407 int x, y; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
408 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
409 for (y = 0; y < h; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
410 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
411 dst[x] = (a*src[x] + b*src[x+1] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
412 dst += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
413 src += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
414 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
415 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
416 static void put_vp8_bilinear ## SIZE ## _v_c(uint8_t *dst, int stride, uint8_t *src, int s2, int h, int mx, int my) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
417 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
418 int c = 8-my, d = my; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
419 int x, y; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
420 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
421 for (y = 0; y < h; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
422 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
423 dst[x] = (c*src[x] + d*src[x+stride] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
424 dst += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
425 src += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
426 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
427 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
428 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
429 static void put_vp8_bilinear ## SIZE ## _hv_c(uint8_t *dst, int stride, uint8_t *src, int s2, int h, int mx, int my) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
430 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
431 int a = 8-mx, b = mx; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
432 int c = 8-my, d = my; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
433 int x, y; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
434 uint8_t tmp_array[(2*SIZE+1)*SIZE]; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
435 uint8_t *tmp = tmp_array; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
436 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
437 for (y = 0; y < h+1; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
438 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
439 tmp[x] = (a*src[x] + b*src[x+1] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
440 tmp += SIZE; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
441 src += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
442 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
443 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
444 tmp = tmp_array; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
445 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
446 for (y = 0; y < h; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
447 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
448 dst[x] = (c*tmp[x] + d*tmp[x+SIZE] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
449 dst += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
450 tmp += SIZE; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
451 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
452 }
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
453
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
454 VP8_BILINEAR(16)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
455 VP8_BILINEAR(8)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
456 VP8_BILINEAR(4)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
457
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
458 #define VP8_MC_FUNC(IDX, SIZE) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
459 dsp->put_vp8_epel_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
460 dsp->put_vp8_epel_pixels_tab[IDX][0][1] = put_vp8_epel ## SIZE ## _h4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
461 dsp->put_vp8_epel_pixels_tab[IDX][0][2] = put_vp8_epel ## SIZE ## _h6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
462 dsp->put_vp8_epel_pixels_tab[IDX][1][0] = put_vp8_epel ## SIZE ## _v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
463 dsp->put_vp8_epel_pixels_tab[IDX][1][1] = put_vp8_epel ## SIZE ## _h4v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
464 dsp->put_vp8_epel_pixels_tab[IDX][1][2] = put_vp8_epel ## SIZE ## _h6v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
465 dsp->put_vp8_epel_pixels_tab[IDX][2][0] = put_vp8_epel ## SIZE ## _v6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
466 dsp->put_vp8_epel_pixels_tab[IDX][2][1] = put_vp8_epel ## SIZE ## _h4v6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
467 dsp->put_vp8_epel_pixels_tab[IDX][2][2] = put_vp8_epel ## SIZE ## _h6v6_c
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
468
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
469 #define VP8_BILINEAR_MC_FUNC(IDX, SIZE) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
470 dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
471 dsp->put_vp8_bilinear_pixels_tab[IDX][0][1] = put_vp8_bilinear ## SIZE ## _h_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
472 dsp->put_vp8_bilinear_pixels_tab[IDX][0][2] = put_vp8_bilinear ## SIZE ## _h_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
473 dsp->put_vp8_bilinear_pixels_tab[IDX][1][0] = put_vp8_bilinear ## SIZE ## _v_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
474 dsp->put_vp8_bilinear_pixels_tab[IDX][1][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
475 dsp->put_vp8_bilinear_pixels_tab[IDX][1][2] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
476 dsp->put_vp8_bilinear_pixels_tab[IDX][2][0] = put_vp8_bilinear ## SIZE ## _v_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
477 dsp->put_vp8_bilinear_pixels_tab[IDX][2][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
478 dsp->put_vp8_bilinear_pixels_tab[IDX][2][2] = put_vp8_bilinear ## SIZE ## _hv_c
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
479
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
480 av_cold void ff_vp8dsp_init(VP8DSPContext *dsp)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
481 {
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
482 dsp->vp8_luma_dc_wht = vp8_luma_dc_wht_c;
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
483 dsp->vp8_idct_add = vp8_idct_add_c;
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
484 dsp->vp8_idct_dc_add = vp8_idct_dc_add_c;
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
485 dsp->vp8_idct_dc_add4y = vp8_idct_dc_add4y_c;
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
486 dsp->vp8_idct_dc_add4uv = vp8_idct_dc_add4uv_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
487
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
488 dsp->vp8_v_loop_filter16y = vp8_v_loop_filter16_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
489 dsp->vp8_h_loop_filter16y = vp8_h_loop_filter16_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
490 dsp->vp8_v_loop_filter8uv = vp8_v_loop_filter8uv_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
491 dsp->vp8_h_loop_filter8uv = vp8_h_loop_filter8uv_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
492
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
493 dsp->vp8_v_loop_filter16y_inner = vp8_v_loop_filter16_inner_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
494 dsp->vp8_h_loop_filter16y_inner = vp8_h_loop_filter16_inner_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
495 dsp->vp8_v_loop_filter8uv_inner = vp8_v_loop_filter8uv_inner_c;
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
496 dsp->vp8_h_loop_filter8uv_inner = vp8_h_loop_filter8uv_inner_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
497
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
498 dsp->vp8_v_loop_filter_simple = vp8_v_loop_filter_simple_c;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
499 dsp->vp8_h_loop_filter_simple = vp8_h_loop_filter_simple_c;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
500
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
501 VP8_MC_FUNC(0, 16);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
502 VP8_MC_FUNC(1, 8);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
503 VP8_MC_FUNC(2, 4);
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
504
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
505 VP8_BILINEAR_MC_FUNC(0, 16);
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
506 VP8_BILINEAR_MC_FUNC(1, 8);
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
507 VP8_BILINEAR_MC_FUNC(2, 4);
11975
c3afb5be0d9b First shot at VP8 optimizations:
rbultje
parents: 11974
diff changeset
508
11985
1cffcc7b1470 Fix linking if MMX is disabled.
stefano
parents: 11975
diff changeset
509 if (HAVE_MMX)
11975
c3afb5be0d9b First shot at VP8 optimizations:
rbultje
parents: 11974
diff changeset
510 ff_vp8dsp_init_x86(dsp);
12011
f96187e79438 Altivec VP8 MC functions
conrad
parents: 12008
diff changeset
511 if (HAVE_ALTIVEC)
f96187e79438 Altivec VP8 MC functions
conrad
parents: 12008
diff changeset
512 ff_vp8dsp_init_altivec(dsp);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
513 }