annotate vp8dsp.c @ 12483:0159a19bfff7 libavcodec

aacdec: Rework channel mapping compatibility hacks. For a PCE based configuration map the channels solely based on tags. For an indexed configuration map the channels solely based on position. This works with all known exotic samples including al17, elem_id0, bad_concat, and lfe_is_sce.
author alexc
date Fri, 10 Sep 2010 18:01:48 +0000
parents b4c63ffd959b
children
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
12342
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
54 block[i][0][0] = (t0 + t1) >> 3;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
55 block[i][1][0] = (t3 + t2) >> 3;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
56 block[i][2][0] = (t0 - t1) >> 3;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
57 block[i][3][0] = (t3 - t2) >> 3;
11921
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
12342
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
61 static void vp8_luma_dc_wht_dc_c(DCTELEM block[4][4][16], DCTELEM dc[16])
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
62 {
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
63 int i, val = (dc[0] + 3) >> 3;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
64 dc[0] = 0;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
65
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
66 for (i = 0; i < 4; i++) {
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
67 block[i][0][0] = val;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
68 block[i][1][0] = val;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
69 block[i][2][0] = val;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
70 block[i][3][0] = val;
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
71 }
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
72 }
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
73
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
74 #define MUL_20091(a) ((((a)*20091) >> 16) + (a))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
75 #define MUL_35468(a) (((a)*35468) >> 16)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
76
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
77 static void vp8_idct_add_c(uint8_t *dst, DCTELEM block[16], int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
78 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
79 int i, t0, t1, t2, t3;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
80 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
81 DCTELEM tmp[16];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
82
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
83 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
84 t0 = block[0*4+i] + block[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
85 t1 = block[0*4+i] - block[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
86 t2 = MUL_35468(block[1*4+i]) - MUL_20091(block[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
87 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
88 block[0*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
89 block[1*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
90 block[2*4+i] = 0;
e08d65897115 VP8: clear DCT blocks in iDCT instead of using clear_blocks.
darkshikari
parents: 12194
diff changeset
91 block[3*4+i] = 0;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
92
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
93 tmp[i*4+0] = t0 + t3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
94 tmp[i*4+1] = t1 + t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
95 tmp[i*4+2] = t1 - t2;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
96 tmp[i*4+3] = t0 - t3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
97 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
98
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
99 for (i = 0; i < 4; i++) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
100 t0 = tmp[0*4+i] + tmp[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
101 t1 = tmp[0*4+i] - tmp[2*4+i];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
102 t2 = MUL_35468(tmp[1*4+i]) - MUL_20091(tmp[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
103 t3 = MUL_20091(tmp[1*4+i]) + MUL_35468(tmp[3*4+i]);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
104
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
105 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
106 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
107 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
108 dst[3] = cm[dst[3] + ((t0 - t3 + 4) >> 3)];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
109 dst += stride;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
110 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
111 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
112
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
113 static void vp8_idct_dc_add_c(uint8_t *dst, DCTELEM block[16], int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
114 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
115 int i, dc = (block[0] + 4) >> 3;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
116 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
117 block[0] = 0;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
118
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
119 for (i = 0; i < 4; i++) {
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
120 dst[0] = cm[dst[0]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
121 dst[1] = cm[dst[1]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
122 dst[2] = cm[dst[2]];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
123 dst[3] = cm[dst[3]];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
124 dst += stride;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
125 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
126 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
127
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
128 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
129 {
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
130 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
131 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
132 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
133 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
134 }
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
135
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
136 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
137 {
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
138 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
139 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
140 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
141 vp8_idct_dc_add_c(dst+12, block[3], stride);
12238
1a7903913e9b VP8: 30% faster idct_mb
darkshikari
parents: 12235
diff changeset
142 }
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
143
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
144 // because I like only having two parameters to pass functions...
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
145 #define LOAD_PIXELS\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
146 int av_unused p3 = p[-4*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
147 int av_unused p2 = p[-3*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
148 int av_unused p1 = p[-2*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
149 int av_unused p0 = p[-1*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
150 int av_unused q0 = p[ 0*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
151 int av_unused q1 = p[ 1*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
152 int av_unused q2 = p[ 2*stride];\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
153 int av_unused q3 = p[ 3*stride];
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
154
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
155 #define clip_int8(n) (cm[n+0x80]-0x80)
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
156
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
157 static av_always_inline void filter_common(uint8_t *p, int stride, int is4tap)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
158 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
159 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
160 int a, f1, f2;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
161 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
162
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
163 a = 3*(q0 - p0);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
164
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
165 if (is4tap)
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
166 a += clip_int8(p1 - q1);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
167
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
168 a = clip_int8(a);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
169
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
170 // We deviate from the spec here with c(a+3) >> 3
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
171 // since that's what libvpx does.
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
172 f1 = FFMIN(a+4, 127) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
173 f2 = FFMIN(a+3, 127) >> 3;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
174
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
175 // Despite what the spec says, we do need to clamp here to
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
176 // be bitexact with libvpx.
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
177 p[-1*stride] = cm[p0 + f2];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
178 p[ 0*stride] = cm[q0 - f1];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
179
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
180 // only used for _inner on blocks without high edge variance
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
181 if (!is4tap) {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
182 a = (f1+1)>>1;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
183 p[-2*stride] = cm[p1 + a];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
184 p[ 1*stride] = cm[q1 - a];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
185 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
186 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
187
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
188 static av_always_inline int simple_limit(uint8_t *p, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
189 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
190 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
191 return 2*FFABS(p0-q0) + (FFABS(p1-q1) >> 1) <= flim;
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 /**
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
195 * E - limit at the macroblock edge
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
196 * I - limit for interior difference
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
197 */
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
198 static av_always_inline int normal_limit(uint8_t *p, int stride, int E, int I)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
199 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
200 LOAD_PIXELS
12081
812e23197d64 VP8: Move calculation of outer filter limit out of dsp functions for normal
conrad
parents: 12011
diff changeset
201 return simple_limit(p, stride, E)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
202 && FFABS(p3-p2) <= I && FFABS(p2-p1) <= I && FFABS(p1-p0) <= I
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
203 && FFABS(q3-q2) <= I && FFABS(q2-q1) <= I && FFABS(q1-q0) <= I;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
204 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
205
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
206 // high edge variance
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
207 static av_always_inline int hev(uint8_t *p, int stride, int thresh)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
208 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
209 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
210 return FFABS(p1-p0) > thresh || FFABS(q1-q0) > thresh;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
211 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
212
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
213 static av_always_inline void filter_mbedge(uint8_t *p, int stride)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
214 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
215 int a0, a1, a2, w;
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
216 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
217
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
218 LOAD_PIXELS
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
219
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
220 w = clip_int8(p1-q1);
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
221 w = clip_int8(w + 3*(q0-p0));
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
222
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
223 a0 = (27*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
224 a1 = (18*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
225 a2 = ( 9*w + 63) >> 7;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
226
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
227 p[-3*stride] = cm[p2 + a2];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
228 p[-2*stride] = cm[p1 + a1];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
229 p[-1*stride] = cm[p0 + a0];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
230 p[ 0*stride] = cm[q0 - a0];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
231 p[ 1*stride] = cm[q1 - a1];
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
232 p[ 2*stride] = cm[q2 - a2];
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
233 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
234
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
235 #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
236 static maybe_inline void vp8_ ## dir ## _loop_filter ## size ## _c(uint8_t *dst, int stride,\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
237 int flim_E, int flim_I, int hev_thresh)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
238 {\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
239 int i;\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
240 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
241 for (i = 0; i < size; i++)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
242 if (normal_limit(dst+i*stridea, strideb, flim_E, flim_I)) {\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
243 if (hev(dst+i*stridea, strideb, hev_thresh))\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
244 filter_common(dst+i*stridea, strideb, 1);\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
245 else\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
246 filter_mbedge(dst+i*stridea, strideb);\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
247 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
248 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
249 \
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
250 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
251 int flim_E, int flim_I, int hev_thresh)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
252 {\
12008
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
253 int i;\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
254 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
255 for (i = 0; i < size; i++)\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
256 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
257 int hv = hev(dst+i*stridea, strideb, hev_thresh);\
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
258 if (hv) \
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
259 filter_common(dst+i*stridea, strideb, 1);\
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
260 else \
98fd80705850 Faster C VP8 normal inner loop filter
darkshikari
parents: 12007
diff changeset
261 filter_common(dst+i*stridea, strideb, 0);\
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
262 }\
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
263 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
264
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
265 LOOP_FILTER(v, 16, 1, stride,)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
266 LOOP_FILTER(h, 16, stride, 1,)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
267
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
268 #define UV_LOOP_FILTER(dir, stridea, strideb) \
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
269 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
270 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
271 int fE, int fI, int hev_thresh)\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
272 {\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
273 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
274 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
275 }\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
276 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
277 int fE, int fI, int hev_thresh)\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
278 {\
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
279 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
280 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
281 }
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
282
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
283 UV_LOOP_FILTER(v, 1, stride)
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
284 UV_LOOP_FILTER(h, stride, 1)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
285
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
286 static void vp8_v_loop_filter_simple_c(uint8_t *dst, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
287 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
288 int i;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
289
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
290 for (i = 0; i < 16; i++)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
291 if (simple_limit(dst+i, stride, flim))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
292 filter_common(dst+i, stride, 1);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
293 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
294
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
295 static void vp8_h_loop_filter_simple_c(uint8_t *dst, int stride, int flim)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
296 {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
297 int i;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
298
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
299 for (i = 0; i < 16; i++)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
300 if (simple_limit(dst+i*stride, 1, flim))
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
301 filter_common(dst+i*stride, 1, 1);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
302 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
303
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
304 static const uint8_t subpel_filters[7][6] = {
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
305 { 0, 6, 123, 12, 1, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
306 { 2, 11, 108, 36, 8, 1 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
307 { 0, 9, 93, 50, 6, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
308 { 3, 16, 77, 77, 16, 3 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
309 { 0, 6, 50, 93, 9, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
310 { 1, 8, 36, 108, 11, 2 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
311 { 0, 1, 12, 123, 6, 0 },
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
312 };
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
313
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
314 #define PUT_PIXELS(WIDTH) \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
315 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
316 int i; \
496d1300204d Really fix r23782
darkshikari
parents: 11954
diff changeset
317 for (i = 0; i < h; i++, dst+= dststride, src+= srcstride) { \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
318 memcpy(dst, src, WIDTH); \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
319 } \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
320 }
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
321
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
322 PUT_PIXELS(16)
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
323 PUT_PIXELS(8)
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
324 PUT_PIXELS(4)
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
325
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
326 #define FILTER_6TAP(src, F, stride) \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
327 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
328 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
329
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
330 #define FILTER_4TAP(src, F, stride) \
12007
ec7be1d7d5b4 Use crop table in C implementations of VP8 DSP functions.
darkshikari
parents: 11985
diff changeset
331 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
332 F[3]*src[x+1*stride] - F[4]*src[x+2*stride] + 64) >> 7]
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
333
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
334 #define VP8_EPEL_H(SIZE, FILTER, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
335 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
336 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
337 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
338 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
339 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
340 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
341 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
342 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
343 dst[x] = FILTER(src, filter, 1); \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
344 dst += dststride; \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
345 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
346 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
347 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
348 #define VP8_EPEL_V(SIZE, FILTER, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
349 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
350 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
351 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
352 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
353 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
354 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
355 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
356 for (x = 0; x < SIZE; x++) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
357 dst[x] = FILTER(src, filter, srcstride); \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
358 dst += dststride; \
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
359 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
360 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
361 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
362 #define VP8_EPEL_HV(SIZE, FILTERX, FILTERY, FILTERNAME) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
363 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
364 { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
365 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
366 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
367 int x, y; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
368 uint8_t tmp_array[(2*SIZE+5)*SIZE]; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
369 uint8_t *tmp = tmp_array; \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
370 src -= 2*srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
371 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
372 for (y = 0; y < h+5; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
373 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
374 tmp[x] = FILTERX(src, filter, 1); \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
375 tmp += SIZE; \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
376 src += srcstride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
377 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
378 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
379 tmp = tmp_array + 2*SIZE; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
380 filter = subpel_filters[my-1]; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
381 \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
382 for (y = 0; y < h; y++) { \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
383 for (x = 0; x < SIZE; x++) \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
384 dst[x] = FILTERY(tmp, filter, SIZE); \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
385 dst += dststride; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
386 tmp += SIZE; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
387 } \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
388 }
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
389
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
390 VP8_EPEL_H(16, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
391 VP8_EPEL_H(8, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
392 VP8_EPEL_H(4, FILTER_4TAP, h4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
393 VP8_EPEL_H(16, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
394 VP8_EPEL_H(8, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
395 VP8_EPEL_H(4, FILTER_6TAP, h6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
396 VP8_EPEL_V(16, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
397 VP8_EPEL_V(8, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
398 VP8_EPEL_V(4, FILTER_4TAP, v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
399 VP8_EPEL_V(16, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
400 VP8_EPEL_V(8, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
401 VP8_EPEL_V(4, FILTER_6TAP, v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
402 VP8_EPEL_HV(16, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
403 VP8_EPEL_HV(8, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
404 VP8_EPEL_HV(4, FILTER_4TAP, FILTER_4TAP, h4v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
405 VP8_EPEL_HV(16, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
406 VP8_EPEL_HV(8, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
407 VP8_EPEL_HV(4, FILTER_4TAP, FILTER_6TAP, h4v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
408 VP8_EPEL_HV(16, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
409 VP8_EPEL_HV(8, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
410 VP8_EPEL_HV(4, FILTER_6TAP, FILTER_4TAP, h6v4)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
411 VP8_EPEL_HV(16, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
412 VP8_EPEL_HV(8, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
413 VP8_EPEL_HV(4, FILTER_6TAP, FILTER_6TAP, h6v6)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
414
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
415 #define VP8_BILINEAR(SIZE) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
416 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
417 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
418 int a = 8-mx, b = mx; \
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] = (a*src[x] + b*src[x+1] + 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 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
429 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
430 int c = 8-my, d = my; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
431 int x, y; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
432 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
433 for (y = 0; y < h; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
434 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
435 dst[x] = (c*src[x] + d*src[x+stride] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
436 dst += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
437 src += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
438 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
439 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
440 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
441 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
442 { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
443 int a = 8-mx, b = mx; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
444 int c = 8-my, d = my; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
445 int x, y; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
446 uint8_t tmp_array[(2*SIZE+1)*SIZE]; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
447 uint8_t *tmp = tmp_array; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
448 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
449 for (y = 0; y < h+1; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
450 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
451 tmp[x] = (a*src[x] + b*src[x+1] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
452 tmp += SIZE; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
453 src += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
454 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
455 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
456 tmp = tmp_array; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
457 \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
458 for (y = 0; y < h; y++) { \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
459 for (x = 0; x < SIZE; x++) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
460 dst[x] = (c*tmp[x] + d*tmp[x+SIZE] + 4) >> 3; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
461 dst += stride; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
462 tmp += SIZE; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
463 } \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
464 }
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
465
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
466 VP8_BILINEAR(16)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
467 VP8_BILINEAR(8)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
468 VP8_BILINEAR(4)
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
469
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
470 #define VP8_MC_FUNC(IDX, SIZE) \
11950
56aba5a9761c Make VP8 DSP functions take two strides
darkshikari
parents: 11921
diff changeset
471 dsp->put_vp8_epel_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
472 dsp->put_vp8_epel_pixels_tab[IDX][0][1] = put_vp8_epel ## SIZE ## _h4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
473 dsp->put_vp8_epel_pixels_tab[IDX][0][2] = put_vp8_epel ## SIZE ## _h6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
474 dsp->put_vp8_epel_pixels_tab[IDX][1][0] = put_vp8_epel ## SIZE ## _v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
475 dsp->put_vp8_epel_pixels_tab[IDX][1][1] = put_vp8_epel ## SIZE ## _h4v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
476 dsp->put_vp8_epel_pixels_tab[IDX][1][2] = put_vp8_epel ## SIZE ## _h6v4_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
477 dsp->put_vp8_epel_pixels_tab[IDX][2][0] = put_vp8_epel ## SIZE ## _v6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
478 dsp->put_vp8_epel_pixels_tab[IDX][2][1] = put_vp8_epel ## SIZE ## _h4v6_c; \
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
479 dsp->put_vp8_epel_pixels_tab[IDX][2][2] = put_vp8_epel ## SIZE ## _h6v6_c
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
480
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
481 #define VP8_BILINEAR_MC_FUNC(IDX, SIZE) \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
482 dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = put_vp8_pixels ## SIZE ## _c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
483 dsp->put_vp8_bilinear_pixels_tab[IDX][0][1] = put_vp8_bilinear ## SIZE ## _h_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
484 dsp->put_vp8_bilinear_pixels_tab[IDX][0][2] = put_vp8_bilinear ## SIZE ## _h_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
485 dsp->put_vp8_bilinear_pixels_tab[IDX][1][0] = put_vp8_bilinear ## SIZE ## _v_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
486 dsp->put_vp8_bilinear_pixels_tab[IDX][1][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
487 dsp->put_vp8_bilinear_pixels_tab[IDX][1][2] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
488 dsp->put_vp8_bilinear_pixels_tab[IDX][2][0] = put_vp8_bilinear ## SIZE ## _v_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
489 dsp->put_vp8_bilinear_pixels_tab[IDX][2][1] = put_vp8_bilinear ## SIZE ## _hv_c; \
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
490 dsp->put_vp8_bilinear_pixels_tab[IDX][2][2] = put_vp8_bilinear ## SIZE ## _hv_c
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
491
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
492 av_cold void ff_vp8dsp_init(VP8DSPContext *dsp)
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
493 {
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
494 dsp->vp8_luma_dc_wht = vp8_luma_dc_wht_c;
12342
b4c63ffd959b VP8: much faster DC transform handling
darkshikari
parents: 12340
diff changeset
495 dsp->vp8_luma_dc_wht_dc = vp8_luma_dc_wht_dc_c;
12241
c7f6ddcc5c01 VP8: optimize DC-only chroma case in the same way as luma.
darkshikari
parents: 12238
diff changeset
496 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
497 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
498 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
499 dsp->vp8_idct_dc_add4uv = vp8_idct_dc_add4uv_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
500
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
501 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
502 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
503 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
504 dsp->vp8_h_loop_filter8uv = vp8_h_loop_filter8uv_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
505
12194
80b142c2e9f7 Change function prototypes for width=8 inner and mbedge loopfilter functions
rbultje
parents: 12081
diff changeset
506 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
507 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
508 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
509 dsp->vp8_h_loop_filter8uv_inner = vp8_h_loop_filter8uv_inner_c;
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
510
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
511 dsp->vp8_v_loop_filter_simple = vp8_v_loop_filter_simple_c;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
512 dsp->vp8_h_loop_filter_simple = vp8_h_loop_filter_simple_c;
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
513
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
514 VP8_MC_FUNC(0, 16);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
515 VP8_MC_FUNC(1, 8);
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
516 VP8_MC_FUNC(2, 4);
11974
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
517
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
518 VP8_BILINEAR_MC_FUNC(0, 16);
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
519 VP8_BILINEAR_MC_FUNC(1, 8);
356b20a6566d VP8 bilinear filter
conrad
parents: 11956
diff changeset
520 VP8_BILINEAR_MC_FUNC(2, 4);
11975
c3afb5be0d9b First shot at VP8 optimizations:
rbultje
parents: 11974
diff changeset
521
11985
1cffcc7b1470 Fix linking if MMX is disabled.
stefano
parents: 11975
diff changeset
522 if (HAVE_MMX)
11975
c3afb5be0d9b First shot at VP8 optimizations:
rbultje
parents: 11974
diff changeset
523 ff_vp8dsp_init_x86(dsp);
12011
f96187e79438 Altivec VP8 MC functions
conrad
parents: 12008
diff changeset
524 if (HAVE_ALTIVEC)
f96187e79438 Altivec VP8 MC functions
conrad
parents: 12008
diff changeset
525 ff_vp8dsp_init_altivec(dsp);
11921
f2007d7c3f1d Native VP8 decoder.
rbultje
parents:
diff changeset
526 }