1/* 2 * (I)RDFT transforms 3 * Copyright (c) 2009 Alex Converse <alex dot converse at gmail dot com> 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#ifndef AVCODEC_RDFT_H 23#define AVCODEC_RDFT_H 24 25#include "config.h" 26#include "fft.h" 27 28#if CONFIG_HARDCODED_TABLES 29# define SINTABLE_CONST const 30#else 31# define SINTABLE_CONST 32#endif 33 34#define SINTABLE(size) \ 35 SINTABLE_CONST DECLARE_ALIGNED(16, FFTSample, ff_sin_##size)[size/2] 36 37extern SINTABLE(16); 38extern SINTABLE(32); 39extern SINTABLE(64); 40extern SINTABLE(128); 41extern SINTABLE(256); 42extern SINTABLE(512); 43extern SINTABLE(1024); 44extern SINTABLE(2048); 45extern SINTABLE(4096); 46extern SINTABLE(8192); 47extern SINTABLE(16384); 48extern SINTABLE(32768); 49extern SINTABLE(65536); 50 51struct RDFTContext { 52 int nbits; 53 int inverse; 54 int sign_convention; 55 56 /* pre/post rotation tables */ 57 const FFTSample *tcos; 58 SINTABLE_CONST FFTSample *tsin; 59 FFTContext fft; 60 void (*rdft_calc)(struct RDFTContext *s, FFTSample *z); 61}; 62 63/** 64 * Set up a real FFT. 65 * @param nbits log2 of the length of the input array 66 * @param trans the type of transform 67 */ 68int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans); 69void ff_rdft_end(RDFTContext *s); 70 71void ff_rdft_init_arm(RDFTContext *s); 72 73 74#endif /* AVCODEC_RDFT_H */ 75