Go to the documentation of this file.
36 # define RSCALE(x, y) ((x) + (y))
39 # define RSCALE(x, y) ((int)((x) + (unsigned)(y) + 32) >> 6)
41 # define RSCALE(x, y) ((int)((x) + (unsigned)(y)) >> 1)
54 memset(
s, 0,
sizeof(*
s));
68 switch (
s->mdct_permutation) {
70 s->tsin =
s->tcos + n4;
74 s->tsin =
s->tcos + 1;
81 theta = 1.0 / 8.0 + (scale < 0 ? n4 : 0);
82 scale = sqrt(
fabs(scale));
89 s->tcos[
i*tstep] = FIX15(-cos(
alpha) * scale);
90 s->tsin[
i*tstep] = FIX15(-sin(
alpha) * scale);
107 int k, n8, n4, n2, n, j;
108 const uint16_t *revtab =
s->revtab;
114 n = 1 <<
s->mdct_bits;
121 in2 =
input + n2 - 1;
122 for(k = 0; k < n4; k++) {
124 CMUL(z[j].
re, z[j].
im, *in2, *in1, tcos[k], tsin[k]);
131 for(k = 0; k < n8; k++) {
133 CMUL(r0, i1, z[n8-k-1].
im, z[n8-k-1].
re, tsin[n8-k-1], tcos[n8-k-1]);
134 CMUL(r1, i0, z[n8+k ].
im, z[n8+k ].
re, tsin[n8+k ], tcos[n8+k ]);
150 int n = 1 <<
s->mdct_bits;
156 for(k = 0; k < n4; k++) {
169 int i, j, n, n8, n4, n2, n3;
171 const uint16_t *revtab =
s->revtab;
176 n = 1 <<
s->mdct_bits;
187 CMUL(x[j].
re, x[j].
im,
re,
im, -tcos[
i], tsin[
i]);
192 CMUL(x[j].
re, x[j].
im,
re,
im, -tcos[n8 +
i], tsin[n8 +
i]);
200 CMUL(i1, r0, x[n8-
i-1].
re, x[n8-
i-1].
im, -tsin[n8-
i-1], -tcos[n8-
i-1]);
201 CMUL(i0, r1, x[n8+
i ].
re, x[n8+
i ].
im, -tsin[n8+
i ], -tcos[n8+
i ]);
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
av_cold void ff_mdct_end(FFTContext *s)
av_cold int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale)
init MDCT or IMDCT computation.
void ff_mdct_calc_c(FFTContext *s, FFTSample *out, const FFTSample *input)
Compute MDCT of size N = 2^nbits.
static __device__ float fabs(float a)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some input
@ FF_MDCT_PERM_INTERLEAVE
#define av_malloc_array(a, b)
void ff_imdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input)
Compute inverse MDCT of size N = 2^nbits.
void ff_imdct_half_c(FFTContext *s, FFTSample *output, const FFTSample *input)
Compute the middle half of the inverse MDCT of size N = 2^nbits, thus excluding the parts that can be...
static const int16_t alpha[]
static uint32_t inverse(uint32_t v)
find multiplicative inverse modulo 2 ^ 32