X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=imdct.c;h=ac085bbc519dcd5dfa8b359f96475270ef2e1a48;hb=ed699ae871534d3e16f0be4cbabcea9c12af0848;hp=d04fe601a60988b73916abb1ad53358f19c72954;hpb=16758aa8a898d222ef417d408916f1dc11b12650;p=paraslash.git diff --git a/imdct.c b/imdct.c index d04fe601..ac085bbc 100644 --- a/imdct.c +++ b/imdct.c @@ -39,13 +39,15 @@ struct fft_context { }; struct mdct_context { - /** Size of MDCT (i.e. number of input data * 2). */ + /** Size of MDCT (number of input data * 2). */ int n; /** n = 2^n bits. */ int nbits; - /** pre/post rotation tables */ + /** Cosine table for pre/post rotation. */ fftsample_t *tcos; + /** Sine table for pre/post rotation. */ fftsample_t *tsin; + /** The context for the underlying fast Fourier transform. */ struct fft_context fft; }; @@ -85,7 +87,8 @@ static int split_radix_permutation(int i, int n) return split_radix_permutation(i, m) * 4 - 1; } -#define SQRTHALF (float)0.70710678118654752440 /* 1/sqrt(2) */ +/** 1 / sqrt(2). */ +#define SQRTHALF (float)0.70710678118654752440 #define BF(x,y,a,b) {\ x = a - b;\ @@ -297,19 +300,22 @@ static void imdct_half(struct mdct_context *s, fftsample_t *output, } /** - * Compute the inverse MDCT of size N = 2^nbits. + * Compute the inverse MDCT. * + * \param ctx The initialized context structure. * \param output N samples. * \param input N/2 samples. + * + * \sa \ref imdct_init(). */ -void imdct(struct mdct_context *s, float *output, const float *input) +void imdct(struct mdct_context *ctx, float *output, const float *input) { int k; - int n = 1 << s->nbits; + int n = 1 << ctx->nbits; int n2 = n >> 1; int n4 = n >> 2; - imdct_half(s, output + n4, input); + imdct_half(ctx, output + n4, input); for (k = 0; k < n4; k++) { output[k] = -output[n2 - k - 1]; @@ -341,13 +347,14 @@ static int fft_init(struct fft_context *s, int nbits) return 0; } -static void fft_end(struct fft_context *ctx) -{ - freep(&ctx->revtab); -} - /** * Initialize the inverse modified cosine transform. + * + * \param nbits The number of bits to use (4 <= \a nbits <= 18). + * + * \param result Opaque structure that must be passed to \ref imdct(). + * + * \return Standard. */ int imdct_init(int nbits, struct mdct_context **result) { @@ -380,10 +387,15 @@ fail: return ret; } +/** + * Deallocate imdct resources. + * + * \param ctx The pointer obtained by imdct_init(). + */ void imdct_end(struct mdct_context *ctx) { - freep(&ctx->tcos); - freep(&ctx->tsin); - fft_end(&ctx->fft); + free(ctx->tcos); + free(ctx->tsin); + free(ctx->fft.revtab); free(ctx); }