tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

avfft.h (3095B)


      1 /*
      2 * This file is part of FFmpeg.
      3 *
      4 * FFmpeg is free software; you can redistribute it and/or
      5 * modify it under the terms of the GNU Lesser General Public
      6 * License as published by the Free Software Foundation; either
      7 * version 2.1 of the License, or (at your option) any later version.
      8 *
      9 * FFmpeg is distributed in the hope that it will be useful,
     10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12 * Lesser General Public License for more details.
     13 *
     14 * You should have received a copy of the GNU Lesser General Public
     15 * License along with FFmpeg; if not, write to the Free Software
     16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     17 */
     18 
     19 #ifndef AVCODEC_AVFFT_H
     20 #define AVCODEC_AVFFT_H
     21 
     22 /**
     23 * @file
     24 * @ingroup lavc_fft
     25 * FFT functions
     26 */
     27 
     28 /**
     29 * @defgroup lavc_fft FFT functions
     30 * @ingroup lavc_misc
     31 *
     32 * @{
     33 */
     34 
     35 typedef float FFTSample;
     36 
     37 typedef struct FFTComplex {
     38  FFTSample re, im;
     39 } FFTComplex;
     40 
     41 typedef struct FFTContext FFTContext;
     42 
     43 /**
     44 * Set up a complex FFT.
     45 * @param nbits           log2 of the length of the input array
     46 * @param inverse         if 0 perform the forward transform, if 1 perform the
     47 * inverse
     48 */
     49 FFTContext* av_fft_init(int nbits, int inverse);
     50 
     51 /**
     52 * Do the permutation needed BEFORE calling ff_fft_calc().
     53 */
     54 void av_fft_permute(FFTContext* s, FFTComplex* z);
     55 
     56 /**
     57 * Do a complex FFT with the parameters defined in av_fft_init(). The
     58 * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
     59 */
     60 void av_fft_calc(FFTContext* s, FFTComplex* z);
     61 
     62 void av_fft_end(FFTContext* s);
     63 
     64 FFTContext* av_mdct_init(int nbits, int inverse, double scale);
     65 void av_imdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input);
     66 void av_imdct_half(FFTContext* s, FFTSample* output, const FFTSample* input);
     67 void av_mdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input);
     68 void av_mdct_end(FFTContext* s);
     69 
     70 /* Real Discrete Fourier Transform */
     71 
     72 enum RDFTransformType {
     73  DFT_R2C,
     74  IDFT_C2R,
     75  IDFT_R2C,
     76  DFT_C2R,
     77 };
     78 
     79 typedef struct RDFTContext RDFTContext;
     80 
     81 /**
     82 * Set up a real FFT.
     83 * @param nbits           log2 of the length of the input array
     84 * @param trans           the type of transform
     85 */
     86 RDFTContext* av_rdft_init(int nbits, enum RDFTransformType trans);
     87 void av_rdft_calc(RDFTContext* s, FFTSample* data);
     88 void av_rdft_end(RDFTContext* s);
     89 
     90 /* Discrete Cosine Transform */
     91 
     92 typedef struct DCTContext DCTContext;
     93 
     94 enum DCTTransformType {
     95  DCT_II = 0,
     96  DCT_III,
     97  DCT_I,
     98  DST_I,
     99 };
    100 
    101 /**
    102 * Set up DCT.
    103 *
    104 * @param nbits           size of the input array:
    105 *                        (1 << nbits)     for DCT-II, DCT-III and DST-I
    106 *                        (1 << nbits) + 1 for DCT-I
    107 * @param type            the type of transform
    108 *
    109 * @note the first element of the input of DST-I is ignored
    110 */
    111 DCTContext* av_dct_init(int nbits, enum DCTTransformType type);
    112 void av_dct_calc(DCTContext* s, FFTSample* data);
    113 void av_dct_end(DCTContext* s);
    114 
    115 /**
    116 * @}
    117 */
    118 
    119 #endif /* AVCODEC_AVFFT_H */