misc/winutils/include/libavcodec/avfft.h
changeset 7813 7ac83d79b897
equal deleted inserted replaced
7812:00696c1450da 7813:7ac83d79b897
       
     1 /*
       
     2  * This file is part of Libav.
       
     3  *
       
     4  * Libav 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  * Libav 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 Libav; 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 inverse
       
    47  */
       
    48 FFTContext *av_fft_init(int nbits, int inverse);
       
    49 
       
    50 /**
       
    51  * Do the permutation needed BEFORE calling ff_fft_calc().
       
    52  */
       
    53 void av_fft_permute(FFTContext *s, FFTComplex *z);
       
    54 
       
    55 /**
       
    56  * Do a complex FFT with the parameters defined in av_fft_init(). The
       
    57  * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
       
    58  */
       
    59 void av_fft_calc(FFTContext *s, FFTComplex *z);
       
    60 
       
    61 void av_fft_end(FFTContext *s);
       
    62 
       
    63 FFTContext *av_mdct_init(int nbits, int inverse, double scale);
       
    64 void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
       
    65 void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
       
    66 void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
       
    67 void av_mdct_end(FFTContext *s);
       
    68 
       
    69 /* Real Discrete Fourier Transform */
       
    70 
       
    71 enum RDFTransformType {
       
    72     DFT_R2C,
       
    73     IDFT_C2R,
       
    74     IDFT_R2C,
       
    75     DFT_C2R,
       
    76 };
       
    77 
       
    78 typedef struct RDFTContext RDFTContext;
       
    79 
       
    80 /**
       
    81  * Set up a real FFT.
       
    82  * @param nbits           log2 of the length of the input array
       
    83  * @param trans           the type of transform
       
    84  */
       
    85 RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
       
    86 void av_rdft_calc(RDFTContext *s, FFTSample *data);
       
    87 void av_rdft_end(RDFTContext *s);
       
    88 
       
    89 /* Discrete Cosine Transform */
       
    90 
       
    91 typedef struct DCTContext DCTContext;
       
    92 
       
    93 enum DCTTransformType {
       
    94     DCT_II = 0,
       
    95     DCT_III,
       
    96     DCT_I,
       
    97     DST_I,
       
    98 };
       
    99 
       
   100 /**
       
   101  * Set up DCT.
       
   102  * @param nbits           size of the input array:
       
   103  *                        (1 << nbits)     for DCT-II, DCT-III and DST-I
       
   104  *                        (1 << nbits) + 1 for DCT-I
       
   105  *
       
   106  * @note the first element of the input of DST-I is ignored
       
   107  */
       
   108 DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
       
   109 void av_dct_calc(DCTContext *s, FFTSample *data);
       
   110 void av_dct_end (DCTContext *s);
       
   111 
       
   112 /**
       
   113  * @}
       
   114  */
       
   115 
       
   116 #endif /* AVCODEC_AVFFT_H */