Mercurial > libavcodec.hg
comparison jfdctfst.c @ 1589:eb26d190cf5a libavcodec
move identical code into its own function
intXY_t -> int_fastXY_t
author | michael |
---|---|
date | Thu, 30 Oct 2003 22:51:02 +0000 |
parents | aa4dc16c0f18 |
children | ef2149182f1c |
comparison
equal
deleted
inserted
replaced
1588:de5e2acd0f80 | 1589:eb26d190cf5a |
---|---|
110 * descale to yield a DCTELEM result. | 110 * descale to yield a DCTELEM result. |
111 */ | 111 */ |
112 | 112 |
113 #define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) | 113 #define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) |
114 | 114 |
115 | 115 static always_inline void row_fdct(DCTELEM * data){ |
116 /* | 116 int_fast16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; |
117 * Perform the forward DCT on one block of samples. | 117 int_fast16_t tmp10, tmp11, tmp12, tmp13; |
118 */ | 118 int_fast16_t z1, z2, z3, z4, z5, z11, z13; |
119 | |
120 GLOBAL(void) | |
121 fdct_ifast (DCTELEM * data) | |
122 { | |
123 DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; | |
124 DCTELEM tmp10, tmp11, tmp12, tmp13; | |
125 DCTELEM z1, z2, z3, z4, z5, z11, z13; | |
126 DCTELEM *dataptr; | 119 DCTELEM *dataptr; |
127 int ctr; | 120 int ctr; |
128 SHIFT_TEMPS | 121 SHIFT_TEMPS |
129 | 122 |
130 /* Pass 1: process rows. */ | 123 /* Pass 1: process rows. */ |
174 dataptr[1] = z11 + z4; | 167 dataptr[1] = z11 + z4; |
175 dataptr[7] = z11 - z4; | 168 dataptr[7] = z11 - z4; |
176 | 169 |
177 dataptr += DCTSIZE; /* advance pointer to next row */ | 170 dataptr += DCTSIZE; /* advance pointer to next row */ |
178 } | 171 } |
179 | 172 } |
173 | |
174 /* | |
175 * Perform the forward DCT on one block of samples. | |
176 */ | |
177 | |
178 GLOBAL(void) | |
179 fdct_ifast (DCTELEM * data) | |
180 { | |
181 int_fast16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; | |
182 int_fast16_t tmp10, tmp11, tmp12, tmp13; | |
183 int_fast16_t z1, z2, z3, z4, z5, z11, z13; | |
184 DCTELEM *dataptr; | |
185 int ctr; | |
186 SHIFT_TEMPS | |
187 | |
188 row_fdct(data); | |
189 | |
180 /* Pass 2: process columns. */ | 190 /* Pass 2: process columns. */ |
181 | 191 |
182 dataptr = data; | 192 dataptr = data; |
183 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { | 193 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { |
184 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; | 194 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; |
233 */ | 243 */ |
234 | 244 |
235 GLOBAL(void) | 245 GLOBAL(void) |
236 fdct_ifast248 (DCTELEM * data) | 246 fdct_ifast248 (DCTELEM * data) |
237 { | 247 { |
238 DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; | 248 int_fast16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; |
239 DCTELEM tmp10, tmp11, tmp12, tmp13; | 249 int_fast16_t tmp10, tmp11, tmp12, tmp13; |
240 DCTELEM z1, z2, z3, z4, z5, z11, z13; | 250 int_fast16_t z1; |
241 DCTELEM *dataptr; | 251 DCTELEM *dataptr; |
242 int ctr; | 252 int ctr; |
243 SHIFT_TEMPS | 253 SHIFT_TEMPS |
244 | 254 |
245 /* Pass 1: process rows. */ | 255 row_fdct(data); |
246 | 256 |
247 dataptr = data; | |
248 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { | |
249 tmp0 = dataptr[0] + dataptr[7]; | |
250 tmp7 = dataptr[0] - dataptr[7]; | |
251 tmp1 = dataptr[1] + dataptr[6]; | |
252 tmp6 = dataptr[1] - dataptr[6]; | |
253 tmp2 = dataptr[2] + dataptr[5]; | |
254 tmp5 = dataptr[2] - dataptr[5]; | |
255 tmp3 = dataptr[3] + dataptr[4]; | |
256 tmp4 = dataptr[3] - dataptr[4]; | |
257 | |
258 /* Even part */ | |
259 | |
260 tmp10 = tmp0 + tmp3; /* phase 2 */ | |
261 tmp13 = tmp0 - tmp3; | |
262 tmp11 = tmp1 + tmp2; | |
263 tmp12 = tmp1 - tmp2; | |
264 | |
265 dataptr[0] = tmp10 + tmp11; /* phase 3 */ | |
266 dataptr[4] = tmp10 - tmp11; | |
267 | |
268 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ | |
269 dataptr[2] = tmp13 + z1; /* phase 5 */ | |
270 dataptr[6] = tmp13 - z1; | |
271 | |
272 /* Odd part */ | |
273 | |
274 tmp10 = tmp4 + tmp5; /* phase 2 */ | |
275 tmp11 = tmp5 + tmp6; | |
276 tmp12 = tmp6 + tmp7; | |
277 | |
278 /* The rotator is modified from fig 4-8 to avoid extra negations. */ | |
279 z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ | |
280 z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ | |
281 z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ | |
282 z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ | |
283 | |
284 z11 = tmp7 + z3; /* phase 5 */ | |
285 z13 = tmp7 - z3; | |
286 | |
287 dataptr[5] = z13 + z2; /* phase 6 */ | |
288 dataptr[3] = z13 - z2; | |
289 dataptr[1] = z11 + z4; | |
290 dataptr[7] = z11 - z4; | |
291 | |
292 dataptr += DCTSIZE; /* advance pointer to next row */ | |
293 } | |
294 | |
295 /* Pass 2: process columns. */ | 257 /* Pass 2: process columns. */ |
296 | 258 |
297 dataptr = data; | 259 dataptr = data; |
298 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { | 260 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { |
299 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*1]; | 261 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*1]; |