summaryrefslogtreecommitdiff
path: root/libavcodec/mdct_template.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/mdct_template.c')
-rw-r--r--libavcodec/mdct_template.c40
1 files changed, 15 insertions, 25 deletions
diff --git a/libavcodec/mdct_template.c b/libavcodec/mdct_template.c
index 5b3a6ff5aa..04396b46d6 100644
--- a/libavcodec/mdct_template.c
+++ b/libavcodec/mdct_template.c
@@ -2,26 +2,27 @@
* MDCT/IMDCT transforms
* Copyright (c) 2002 Fabrice Bellard
*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
*
- * Libav is free software; you can redistribute it and/or
+ * FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * Libav is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
#include <string.h>
#include "libavutil/common.h"
+#include "libavutil/libm.h"
#include "libavutil/mathematics.h"
#include "fft.h"
#include "fft-internal.h"
@@ -34,7 +35,11 @@
#if FFT_FLOAT
# define RSCALE(x) (x)
#else
+#if FFT_FIXED_32
+# define RSCALE(x) (((x) + 32) >> 6)
+#else /* FFT_FIXED_32 */
# define RSCALE(x) ((x) >> 1)
+#endif /* FFT_FIXED_32 */
#endif
/**
@@ -56,27 +61,7 @@ av_cold int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale)
if (ff_fft_init(s, s->mdct_bits - 2, inverse) < 0)
goto fail;
- s->imdct_calc = ff_imdct_calc_c;
- s->imdct_half = ff_imdct_half_c;
- s->mdct_calc = ff_mdct_calc_c;
-
-#if FFT_FLOAT
- if (ARCH_AARCH64)
- ff_mdct_init_aarch64(s);
- if (ARCH_ARM)
- ff_mdct_init_arm(s);
- if (ARCH_PPC)
- ff_mdct_init_ppc(s);
- if (ARCH_X86)
- ff_mdct_init_x86(s);
- s->mdct_calcw = s->mdct_calc;
-#else
- s->mdct_calcw = ff_mdct_calcw_c;
- if (ARCH_ARM)
- ff_mdct_fixed_init_arm(s);
-#endif
-
- s->tcos = av_malloc(n/2 * sizeof(FFTSample));
+ s->tcos = av_malloc_array(n/2, sizeof(FFTSample));
if (!s->tcos)
goto fail;
@@ -97,8 +82,13 @@ av_cold int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale)
scale = sqrt(fabs(scale));
for(i=0;i<n4;i++) {
alpha = 2 * M_PI * (i + theta) / n;
+#if FFT_FIXED_32
+ s->tcos[i*tstep] = lrint(-cos(alpha) * 2147483648.0);
+ s->tsin[i*tstep] = lrint(-sin(alpha) * 2147483648.0);
+#else
s->tcos[i*tstep] = FIX15(-cos(alpha) * scale);
s->tsin[i*tstep] = FIX15(-sin(alpha) * scale);
+#endif
}
return 0;
fail: