Mercurial > libavcodec.hg
comparison simple_idct.c @ 503:2bf17a142cf4 libavcodec
Reintroduce lost idctSparseCol for Alpha. Sorry for adding even more
code duplication, I'm currently working on the put/add variants, but I
did not get them to be as fast as the old method yet...
author | mellum |
---|---|
date | Mon, 24 Jun 2002 21:17:22 +0000 |
parents | 40ffce2cb6ef |
children | e7b72c1dfa1b |
comparison
equal
deleted
inserted
replaced
502:f74798aca30e | 503:2bf17a142cf4 |
---|---|
165 row[6] = (a1 - b1) >> ROW_SHIFT; | 165 row[6] = (a1 - b1) >> ROW_SHIFT; |
166 row[7] = (a0 - b0) >> ROW_SHIFT; | 166 row[7] = (a0 - b0) >> ROW_SHIFT; |
167 | 167 |
168 return 2; | 168 return 2; |
169 } | 169 } |
170 | |
171 inline static void idctSparseCol(int16_t *col) | |
172 { | |
173 int a0, a1, a2, a3, b0, b1, b2, b3; | |
174 | |
175 col[0] += (1 << (COL_SHIFT - 1)) / W4; | |
176 | |
177 a0 = W4 * col[8 * 0]; | |
178 a1 = W4 * col[8 * 0]; | |
179 a2 = W4 * col[8 * 0]; | |
180 a3 = W4 * col[8 * 0]; | |
181 | |
182 if (col[8 * 2]) { | |
183 a0 += W2 * col[8 * 2]; | |
184 a1 += W6 * col[8 * 2]; | |
185 a2 -= W6 * col[8 * 2]; | |
186 a3 -= W2 * col[8 * 2]; | |
187 } | |
188 | |
189 if (col[8 * 4]) { | |
190 a0 += W4 * col[8 * 4]; | |
191 a1 -= W4 * col[8 * 4]; | |
192 a2 -= W4 * col[8 * 4]; | |
193 a3 += W4 * col[8 * 4]; | |
194 } | |
195 | |
196 if (col[8 * 6]) { | |
197 a0 += W6 * col[8 * 6]; | |
198 a1 -= W2 * col[8 * 6]; | |
199 a2 += W2 * col[8 * 6]; | |
200 a3 -= W6 * col[8 * 6]; | |
201 } | |
202 | |
203 if (col[8 * 1]) { | |
204 b0 = W1 * col[8 * 1]; | |
205 b1 = W3 * col[8 * 1]; | |
206 b2 = W5 * col[8 * 1]; | |
207 b3 = W7 * col[8 * 1]; | |
208 } else { | |
209 b0 = b1 = b2 = b3 = 0; | |
210 } | |
211 | |
212 if (col[8 * 3]) { | |
213 b0 += W3 * col[8 * 3]; | |
214 b1 -= W7 * col[8 * 3]; | |
215 b2 -= W1 * col[8 * 3]; | |
216 b3 -= W5 * col[8 * 3]; | |
217 } | |
218 | |
219 if (col[8 * 5]) { | |
220 b0 += W5 * col[8 * 5]; | |
221 b1 -= W1 * col[8 * 5]; | |
222 b2 += W7 * col[8 * 5]; | |
223 b3 += W3 * col[8 * 5]; | |
224 } | |
225 | |
226 if (col[8 * 7]) { | |
227 b0 += W7 * col[8 * 7]; | |
228 b1 -= W5 * col[8 * 7]; | |
229 b2 += W3 * col[8 * 7]; | |
230 b3 -= W1 * col[8 * 7]; | |
231 } | |
232 | |
233 col[8 * 0] = (a0 + b0) >> COL_SHIFT; | |
234 col[8 * 7] = (a0 - b0) >> COL_SHIFT; | |
235 col[8 * 1] = (a1 + b1) >> COL_SHIFT; | |
236 col[8 * 6] = (a1 - b1) >> COL_SHIFT; | |
237 col[8 * 2] = (a2 + b2) >> COL_SHIFT; | |
238 col[8 * 5] = (a2 - b2) >> COL_SHIFT; | |
239 col[8 * 3] = (a3 + b3) >> COL_SHIFT; | |
240 col[8 * 4] = (a3 - b3) >> COL_SHIFT; | |
241 } | |
242 | |
170 #else /* not ARCH_ALPHA */ | 243 #else /* not ARCH_ALPHA */ |
171 | 244 |
172 static inline void idctRowCondDC (int16_t * row) | 245 static inline void idctRowCondDC (int16_t * row) |
173 { | 246 { |
174 int a0, a1, a2, a3, b0, b1, b2, b3; | 247 int a0, a1, a2, a3, b0, b1, b2, b3; |