Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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 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 */
  117.