Mercurial > libavcodec.hg
comparison dct.c @ 12026:3f3d08bb5cf8 libavcodec
More mp{1,2,3} 32-point DCT transform to our common DCT framework.
Should allow for future SIMD optimizations.
| author | vitor |
|---|---|
| date | Wed, 30 Jun 2010 20:11:27 +0000 |
| parents | 7dd2a45249a9 |
| children | 1bf322283429 |
comparison
equal
deleted
inserted
replaced
| 12025:2d730a4acc77 | 12026:3f3d08bb5cf8 |
|---|---|
| 29 | 29 |
| 30 #include <math.h> | 30 #include <math.h> |
| 31 #include "libavutil/mathematics.h" | 31 #include "libavutil/mathematics.h" |
| 32 #include "fft.h" | 32 #include "fft.h" |
| 33 | 33 |
| 34 #define DCT32_FLOAT | |
| 35 #include "dct32.c" | |
| 36 | |
| 34 /* sin((M_PI * x / (2*n)) */ | 37 /* sin((M_PI * x / (2*n)) */ |
| 35 #define SIN(s,n,x) (s->costab[(n) - (x)]) | 38 #define SIN(s,n,x) (s->costab[(n) - (x)]) |
| 36 | 39 |
| 37 /* cos((M_PI * x / (2*n)) */ | 40 /* cos((M_PI * x / (2*n)) */ |
| 38 #define COS(s,n,x) (s->costab[x]) | 41 #define COS(s,n,x) (s->costab[x]) |
| 165 | 168 |
| 166 next += s * inr - c * ini; | 169 next += s * inr - c * ini; |
| 167 } | 170 } |
| 168 } | 171 } |
| 169 | 172 |
| 173 static void dct32_func(DCTContext *ctx, FFTSample *data) | |
| 174 { | |
| 175 ctx->dct32(data, data); | |
| 176 } | |
| 177 | |
| 170 void ff_dct_calc(DCTContext *s, FFTSample *data) | 178 void ff_dct_calc(DCTContext *s, FFTSample *data) |
| 171 { | 179 { |
| 172 s->dct_calc(s, data); | 180 s->dct_calc(s, data); |
| 173 } | 181 } |
| 174 | 182 |
| 198 case DCT_I : s->dct_calc = ff_dct_calc_I_c; break; | 206 case DCT_I : s->dct_calc = ff_dct_calc_I_c; break; |
| 199 case DCT_II : s->dct_calc = ff_dct_calc_II_c ; break; | 207 case DCT_II : s->dct_calc = ff_dct_calc_II_c ; break; |
| 200 case DCT_III: s->dct_calc = ff_dct_calc_III_c; break; | 208 case DCT_III: s->dct_calc = ff_dct_calc_III_c; break; |
| 201 case DST_I : s->dct_calc = ff_dst_calc_I_c; break; | 209 case DST_I : s->dct_calc = ff_dst_calc_I_c; break; |
| 202 } | 210 } |
| 211 | |
| 212 if (inverse == DCT_II && nbits == 5) | |
| 213 s->dct_calc = dct32_func; | |
| 214 | |
| 215 s->dct32 = dct32; | |
| 216 | |
| 203 return 0; | 217 return 0; |
| 204 } | 218 } |
| 205 | 219 |
| 206 av_cold void ff_dct_end(DCTContext *s) | 220 av_cold void ff_dct_end(DCTContext *s) |
| 207 { | 221 { |
