LCOV - code coverage report
Current view: top level - libavcodec - mdct_fixed.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 29 29 100.0 %
Date: 2017-12-15 02:19:58 Functions: 1 1 100.0 %

          Line data    Source code
       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             : #define FFT_FLOAT 0
      20             : #define FFT_FIXED_32 0
      21             : #include "mdct_template.c"
      22             : 
      23             : /* same as ff_mdct_calcw_c with double-width unscaled output */
      24        4344 : void ff_mdct_calcw_c(FFTContext *s, FFTDouble *out, const FFTSample *input)
      25             : {
      26             :     int i, j, n, n8, n4, n2, n3;
      27             :     FFTDouble re, im;
      28        4344 :     const uint16_t *revtab = s->revtab;
      29        4344 :     const FFTSample *tcos = s->tcos;
      30        4344 :     const FFTSample *tsin = s->tsin;
      31        4344 :     FFTComplex *x = s->tmp_buf;
      32        4344 :     FFTDComplex *o = (FFTDComplex *)out;
      33             : 
      34        4344 :     n = 1 << s->mdct_bits;
      35        4344 :     n2 = n >> 1;
      36        4344 :     n4 = n >> 2;
      37        4344 :     n8 = n >> 3;
      38        4344 :     n3 = 3 * n4;
      39             : 
      40             :     /* pre rotation */
      41      282360 :     for(i=0;i<n8;i++) {
      42      278016 :         re = RSCALE(-input[2*i+n3], - input[n3-1-2*i]);
      43      278016 :         im = RSCALE(-input[n4+2*i], + input[n4-1-2*i]);
      44      278016 :         j = revtab[i];
      45      278016 :         CMUL(x[j].re, x[j].im, re, im, -tcos[i], tsin[i]);
      46             : 
      47      278016 :         re = RSCALE( input[2*i]   , - input[n2-1-2*i]);
      48      278016 :         im = RSCALE(-input[n2+2*i], - input[ n-1-2*i]);
      49      278016 :         j = revtab[n8 + i];
      50      278016 :         CMUL(x[j].re, x[j].im, re, im, -tcos[n8 + i], tsin[n8 + i]);
      51             :     }
      52             : 
      53        4344 :     s->fft_calc(s, x);
      54             : 
      55             :     /* post rotation */
      56      282360 :     for(i=0;i<n8;i++) {
      57             :         FFTDouble r0, i0, r1, i1;
      58      278016 :         CMULL(i1, r0, x[n8-i-1].re, x[n8-i-1].im, -tsin[n8-i-1], -tcos[n8-i-1]);
      59      278016 :         CMULL(i0, r1, x[n8+i  ].re, x[n8+i  ].im, -tsin[n8+i  ], -tcos[n8+i  ]);
      60      278016 :         o[n8-i-1].re = r0;
      61      278016 :         o[n8-i-1].im = i0;
      62      278016 :         o[n8+i  ].re = r1;
      63      278016 :         o[n8+i  ].im = i1;
      64             :     }
      65        4344 : }

Generated by: LCOV version 1.13