Mercurial > libavcodec.hg
annotate rv40dsp.c @ 12197:fbf4d5b1b664 libavcodec
Remove FF_MM_SSE2/3 flags for CPUs where this is generally not faster than
regular MMX code. Examples of this are the Core1 CPU. Instead, set a new flag,
FF_MM_SSE2/3SLOW, which can be checked for particular SSE2/3 functions that
have been checked specifically on such CPUs and are actually faster than
their MMX counterparts.
In addition, use this flag to enable particular VP8 and LPC SSE2 functions
that are faster than their MMX counterparts.
Based on a patch by Loren Merritt <lorenm AT u washington edu>.
author | rbultje |
---|---|
date | Mon, 19 Jul 2010 22:38:23 +0000 |
parents | 7dd2a45249a9 |
children |
rev | line source |
---|---|
8232 | 1 /* |
2 * RV40 decoder motion compensation functions | |
3 * Copyright (c) 2008 Konstantin Shishkov | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
22 /** | |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
8718
diff
changeset
|
23 * @file |
8232 | 24 * RV40 decoder motion compensation functions |
25 */ | |
26 | |
27 #include "avcodec.h" | |
28 #include "dsputil.h" | |
29 | |
30 #define RV40_LOWPASS(OPNAME, OP) \ | |
31 static av_unused void OPNAME ## rv40_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\ | |
32 const int h, const int C1, const int C2, const int SHIFT){\ | |
33 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ | |
34 int i;\ | |
35 for(i=0; i<h; i++)\ | |
36 {\ | |
37 OP(dst[0], (src[-2] + src[ 3] - 5*(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
38 OP(dst[1], (src[-1] + src[ 4] - 5*(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
39 OP(dst[2], (src[ 0] + src[ 5] - 5*(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
40 OP(dst[3], (src[ 1] + src[ 6] - 5*(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
41 OP(dst[4], (src[ 2] + src[ 7] - 5*(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
42 OP(dst[5], (src[ 3] + src[ 8] - 5*(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
43 OP(dst[6], (src[ 4] + src[ 9] - 5*(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
44 OP(dst[7], (src[ 5] + src[10] - 5*(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
45 dst+=dstStride;\ | |
46 src+=srcStride;\ | |
47 }\ | |
48 }\ | |
49 \ | |
50 static void OPNAME ## rv40_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\ | |
51 const int w, const int C1, const int C2, const int SHIFT){\ | |
52 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ | |
53 int i;\ | |
54 for(i=0; i<w; i++)\ | |
55 {\ | |
56 const int srcB = src[-2*srcStride];\ | |
57 const int srcA = src[-1*srcStride];\ | |
58 const int src0 = src[0 *srcStride];\ | |
59 const int src1 = src[1 *srcStride];\ | |
60 const int src2 = src[2 *srcStride];\ | |
61 const int src3 = src[3 *srcStride];\ | |
62 const int src4 = src[4 *srcStride];\ | |
63 const int src5 = src[5 *srcStride];\ | |
64 const int src6 = src[6 *srcStride];\ | |
65 const int src7 = src[7 *srcStride];\ | |
66 const int src8 = src[8 *srcStride];\ | |
67 const int src9 = src[9 *srcStride];\ | |
68 const int src10= src[10*srcStride];\ | |
69 OP(dst[0*dstStride], (srcB + src3 - 5*(srcA+src2) + src0*C1 + src1*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
70 OP(dst[1*dstStride], (srcA + src4 - 5*(src0+src3) + src1*C1 + src2*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
71 OP(dst[2*dstStride], (src0 + src5 - 5*(src1+src4) + src2*C1 + src3*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
72 OP(dst[3*dstStride], (src1 + src6 - 5*(src2+src5) + src3*C1 + src4*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
73 OP(dst[4*dstStride], (src2 + src7 - 5*(src3+src6) + src4*C1 + src5*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
74 OP(dst[5*dstStride], (src3 + src8 - 5*(src4+src7) + src5*C1 + src6*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
75 OP(dst[6*dstStride], (src4 + src9 - 5*(src5+src8) + src6*C1 + src7*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
76 OP(dst[7*dstStride], (src5 + src10 - 5*(src6+src9) + src7*C1 + src8*C2 + (1<<(SHIFT-1))) >> SHIFT);\ | |
77 dst++;\ | |
78 src++;\ | |
79 }\ | |
80 }\ | |
81 \ | |
82 static void OPNAME ## rv40_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\ | |
83 const int w, const int C1, const int C2, const int SHIFT){\ | |
84 OPNAME ## rv40_qpel8_v_lowpass(dst , src , dstStride, srcStride, 8, C1, C2, SHIFT);\ | |
85 OPNAME ## rv40_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, 8, C1, C2, SHIFT);\ | |
86 src += 8*srcStride;\ | |
87 dst += 8*dstStride;\ | |
88 OPNAME ## rv40_qpel8_v_lowpass(dst , src , dstStride, srcStride, w-8, C1, C2, SHIFT);\ | |
89 OPNAME ## rv40_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, w-8, C1, C2, SHIFT);\ | |
90 }\ | |
91 \ | |
92 static void OPNAME ## rv40_qpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\ | |
93 const int h, const int C1, const int C2, const int SHIFT){\ | |
94 OPNAME ## rv40_qpel8_h_lowpass(dst , src , dstStride, srcStride, 8, C1, C2, SHIFT);\ | |
95 OPNAME ## rv40_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, 8, C1, C2, SHIFT);\ | |
96 src += 8*srcStride;\ | |
97 dst += 8*dstStride;\ | |
98 OPNAME ## rv40_qpel8_h_lowpass(dst , src , dstStride, srcStride, h-8, C1, C2, SHIFT);\ | |
99 OPNAME ## rv40_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, h-8, C1, C2, SHIFT);\ | |
100 }\ | |
101 \ | |
102 | |
103 #define RV40_MC(OPNAME, SIZE) \ | |
104 static void OPNAME ## rv40_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\ | |
105 OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\ | |
106 }\ | |
107 \ | |
108 static void OPNAME ## rv40_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\ | |
109 OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\ | |
110 }\ | |
111 \ | |
112 static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\ | |
113 OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\ | |
114 }\ | |
115 \ | |
116 static void OPNAME ## rv40_qpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\ | |
117 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\ | |
118 }\ | |
119 \ | |
120 static void OPNAME ## rv40_qpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\ | |
121 uint8_t full[SIZE*(SIZE+5)];\ | |
122 uint8_t * const full_mid= full + SIZE*2;\ | |
123 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\ | |
124 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\ | |
125 }\ | |
126 \ | |
127 static void OPNAME ## rv40_qpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\ | |
128 uint8_t full[SIZE*(SIZE+5)];\ | |
129 uint8_t * const full_mid= full + SIZE*2;\ | |
130 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\ | |
131 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\ | |
132 }\ | |
133 \ | |
134 static void OPNAME ## rv40_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, int stride){\ | |
135 uint8_t full[SIZE*(SIZE+5)];\ | |
136 uint8_t * const full_mid= full + SIZE*2;\ | |
137 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 52, 6);\ | |
138 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\ | |
139 }\ | |
140 \ | |
141 static void OPNAME ## rv40_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\ | |
142 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\ | |
143 }\ | |
144 \ | |
145 static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\ | |
146 uint8_t full[SIZE*(SIZE+5)];\ | |
147 uint8_t * const full_mid= full + SIZE*2;\ | |
148 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\ | |
149 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\ | |
150 }\ | |
151 \ | |
152 static void OPNAME ## rv40_qpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\ | |
153 uint8_t full[SIZE*(SIZE+5)];\ | |
154 uint8_t * const full_mid= full + SIZE*2;\ | |
155 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\ | |
156 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\ | |
157 }\ | |
158 \ | |
159 static void OPNAME ## rv40_qpel ## SIZE ## _mc32_c(uint8_t *dst, uint8_t *src, int stride){\ | |
160 uint8_t full[SIZE*(SIZE+5)];\ | |
161 uint8_t * const full_mid= full + SIZE*2;\ | |
162 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 52, 6);\ | |
163 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\ | |
164 }\ | |
165 \ | |
166 static void OPNAME ## rv40_qpel ## SIZE ## _mc03_c(uint8_t *dst, uint8_t *src, int stride){\ | |
167 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\ | |
168 }\ | |
169 \ | |
170 static void OPNAME ## rv40_qpel ## SIZE ## _mc13_c(uint8_t *dst, uint8_t *src, int stride){\ | |
171 uint8_t full[SIZE*(SIZE+5)];\ | |
172 uint8_t * const full_mid= full + SIZE*2;\ | |
173 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\ | |
174 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 52, 6);\ | |
175 }\ | |
176 \ | |
177 static void OPNAME ## rv40_qpel ## SIZE ## _mc23_c(uint8_t *dst, uint8_t *src, int stride){\ | |
178 uint8_t full[SIZE*(SIZE+5)];\ | |
179 uint8_t * const full_mid= full + SIZE*2;\ | |
180 put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\ | |
181 OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 52, 6);\ | |
182 }\ | |
183 \ | |
184 | |
185 #define op_avg(a, b) a = (((a)+cm[b]+1)>>1) | |
186 #define op_put(a, b) a = cm[b] | |
187 | |
188 RV40_LOWPASS(put_ , op_put) | |
189 RV40_LOWPASS(avg_ , op_avg) | |
190 | |
191 #undef op_avg | |
192 #undef op_put | |
193 | |
194 RV40_MC(put_, 8) | |
195 RV40_MC(put_, 16) | |
196 RV40_MC(avg_, 8) | |
197 RV40_MC(avg_, 16) | |
198 | |
199 static const int rv40_bias[4][4] = { | |
200 { 0, 16, 32, 16 }, | |
201 { 32, 28, 32, 28 }, | |
202 { 0, 32, 16, 32 }, | |
203 { 32, 28, 32, 28 } | |
204 }; | |
205 | |
206 #define RV40_CHROMA_MC(OPNAME, OP)\ | |
207 static void OPNAME ## rv40_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\ | |
208 const int A=(8-x)*(8-y);\ | |
209 const int B=( x)*(8-y);\ | |
210 const int C=(8-x)*( y);\ | |
211 const int D=( x)*( y);\ | |
212 int i;\ | |
213 int bias = rv40_bias[y>>1][x>>1];\ | |
214 \ | |
215 assert(x<8 && y<8 && x>=0 && y>=0);\ | |
216 \ | |
217 if(D){\ | |
218 for(i=0; i<h; i++){\ | |
219 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + bias));\ | |
220 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + bias));\ | |
221 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + bias));\ | |
222 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + bias));\ | |
223 dst+= stride;\ | |
224 src+= stride;\ | |
225 }\ | |
226 }else{\ | |
227 const int E= B+C;\ | |
228 const int step= C ? stride : 1;\ | |
229 for(i=0; i<h; i++){\ | |
230 OP(dst[0], (A*src[0] + E*src[step+0] + bias));\ | |
231 OP(dst[1], (A*src[1] + E*src[step+1] + bias));\ | |
232 OP(dst[2], (A*src[2] + E*src[step+2] + bias));\ | |
233 OP(dst[3], (A*src[3] + E*src[step+3] + bias));\ | |
234 dst+= stride;\ | |
235 src+= stride;\ | |
236 }\ | |
237 }\ | |
238 }\ | |
239 \ | |
240 static void OPNAME ## rv40_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\ | |
241 const int A=(8-x)*(8-y);\ | |
242 const int B=( x)*(8-y);\ | |
243 const int C=(8-x)*( y);\ | |
244 const int D=( x)*( y);\ | |
245 int i;\ | |
246 int bias = rv40_bias[y>>1][x>>1];\ | |
247 \ | |
248 assert(x<8 && y<8 && x>=0 && y>=0);\ | |
249 \ | |
250 if(D){\ | |
251 for(i=0; i<h; i++){\ | |
252 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + bias));\ | |
253 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + bias));\ | |
254 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + bias));\ | |
255 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + bias));\ | |
256 OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5] + bias));\ | |
257 OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6] + bias));\ | |
258 OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7] + bias));\ | |
259 OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8] + bias));\ | |
260 dst+= stride;\ | |
261 src+= stride;\ | |
262 }\ | |
263 }else{\ | |
264 const int E= B+C;\ | |
265 const int step= C ? stride : 1;\ | |
266 for(i=0; i<h; i++){\ | |
267 OP(dst[0], (A*src[0] + E*src[step+0] + bias));\ | |
268 OP(dst[1], (A*src[1] + E*src[step+1] + bias));\ | |
269 OP(dst[2], (A*src[2] + E*src[step+2] + bias));\ | |
270 OP(dst[3], (A*src[3] + E*src[step+3] + bias));\ | |
271 OP(dst[4], (A*src[4] + E*src[step+4] + bias));\ | |
272 OP(dst[5], (A*src[5] + E*src[step+5] + bias));\ | |
273 OP(dst[6], (A*src[6] + E*src[step+6] + bias));\ | |
274 OP(dst[7], (A*src[7] + E*src[step+7] + bias));\ | |
275 dst+= stride;\ | |
276 src+= stride;\ | |
277 }\ | |
278 }\ | |
279 } | |
280 | |
281 #define op_avg(a, b) a = (((a)+((b)>>6)+1)>>1) | |
282 #define op_put(a, b) a = ((b)>>6) | |
283 | |
284 RV40_CHROMA_MC(put_, op_put) | |
285 RV40_CHROMA_MC(avg_, op_avg) | |
286 | |
287 void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx) { | |
288 c->put_rv40_qpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0]; | |
289 c->put_rv40_qpel_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c; | |
290 c->put_rv40_qpel_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c; | |
291 c->put_rv40_qpel_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c; | |
292 c->put_rv40_qpel_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c; | |
293 c->put_rv40_qpel_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c; | |
294 c->put_rv40_qpel_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c; | |
295 c->put_rv40_qpel_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c; | |
296 c->put_rv40_qpel_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c; | |
297 c->put_rv40_qpel_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c; | |
298 c->put_rv40_qpel_pixels_tab[0][10] = put_rv40_qpel16_mc22_c; | |
299 c->put_rv40_qpel_pixels_tab[0][11] = put_rv40_qpel16_mc32_c; | |
300 c->put_rv40_qpel_pixels_tab[0][12] = put_rv40_qpel16_mc03_c; | |
301 c->put_rv40_qpel_pixels_tab[0][13] = put_rv40_qpel16_mc13_c; | |
302 c->put_rv40_qpel_pixels_tab[0][14] = put_rv40_qpel16_mc23_c; | |
303 c->avg_rv40_qpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0]; | |
304 c->avg_rv40_qpel_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c; | |
305 c->avg_rv40_qpel_pixels_tab[0][ 2] = avg_rv40_qpel16_mc20_c; | |
306 c->avg_rv40_qpel_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c; | |
307 c->avg_rv40_qpel_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c; | |
308 c->avg_rv40_qpel_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c; | |
309 c->avg_rv40_qpel_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c; | |
310 c->avg_rv40_qpel_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c; | |
311 c->avg_rv40_qpel_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c; | |
312 c->avg_rv40_qpel_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c; | |
313 c->avg_rv40_qpel_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c; | |
314 c->avg_rv40_qpel_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c; | |
315 c->avg_rv40_qpel_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c; | |
316 c->avg_rv40_qpel_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c; | |
317 c->avg_rv40_qpel_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c; | |
318 c->put_rv40_qpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0]; | |
319 c->put_rv40_qpel_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c; | |
320 c->put_rv40_qpel_pixels_tab[1][ 2] = put_rv40_qpel8_mc20_c; | |
321 c->put_rv40_qpel_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c; | |
322 c->put_rv40_qpel_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c; | |
323 c->put_rv40_qpel_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c; | |
324 c->put_rv40_qpel_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c; | |
325 c->put_rv40_qpel_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c; | |
326 c->put_rv40_qpel_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c; | |
327 c->put_rv40_qpel_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c; | |
328 c->put_rv40_qpel_pixels_tab[1][10] = put_rv40_qpel8_mc22_c; | |
329 c->put_rv40_qpel_pixels_tab[1][11] = put_rv40_qpel8_mc32_c; | |
330 c->put_rv40_qpel_pixels_tab[1][12] = put_rv40_qpel8_mc03_c; | |
331 c->put_rv40_qpel_pixels_tab[1][13] = put_rv40_qpel8_mc13_c; | |
332 c->put_rv40_qpel_pixels_tab[1][14] = put_rv40_qpel8_mc23_c; | |
333 c->avg_rv40_qpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0]; | |
334 c->avg_rv40_qpel_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c; | |
335 c->avg_rv40_qpel_pixels_tab[1][ 2] = avg_rv40_qpel8_mc20_c; | |
336 c->avg_rv40_qpel_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c; | |
337 c->avg_rv40_qpel_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c; | |
338 c->avg_rv40_qpel_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c; | |
339 c->avg_rv40_qpel_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c; | |
340 c->avg_rv40_qpel_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c; | |
341 c->avg_rv40_qpel_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c; | |
342 c->avg_rv40_qpel_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c; | |
343 c->avg_rv40_qpel_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c; | |
344 c->avg_rv40_qpel_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c; | |
345 c->avg_rv40_qpel_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c; | |
346 c->avg_rv40_qpel_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c; | |
347 c->avg_rv40_qpel_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c; | |
348 | |
349 c->put_rv40_chroma_pixels_tab[0]= put_rv40_chroma_mc8_c; | |
350 c->put_rv40_chroma_pixels_tab[1]= put_rv40_chroma_mc4_c; | |
351 c->avg_rv40_chroma_pixels_tab[0]= avg_rv40_chroma_mc8_c; | |
352 c->avg_rv40_chroma_pixels_tab[1]= avg_rv40_chroma_mc4_c; | |
353 } |