LCOV - code coverage report
Current view: top level - libavcodec - mpc.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 37 37 100.0 %
Date: 2017-12-12 11:08:38 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Musepack decoder core
       3             :  * Copyright (c) 2006 Konstantin Shishkov
       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             : /**
      23             :  * @file
      24             :  * Musepack decoder core
      25             :  * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
      26             :  * divided into 32 subbands.
      27             :  */
      28             : 
      29             : #include "libavutil/attributes.h"
      30             : #include "avcodec.h"
      31             : #include "mpegaudiodsp.h"
      32             : #include "mpegaudio.h"
      33             : 
      34             : #include "mpc.h"
      35             : #include "mpcdata.h"
      36             : 
      37           4 : av_cold void ff_mpc_init(void)
      38             : {
      39           4 :     ff_mpa_synth_init_fixed(ff_mpa_synth_window_fixed);
      40           4 : }
      41             : 
      42             : /**
      43             :  * Process decoded Musepack data and produce PCM
      44             :  */
      45         456 : static void mpc_synth(MPCContext *c, int16_t **out, int channels)
      46             : {
      47         456 :     int dither_state = 0;
      48             :     int i, ch;
      49             : 
      50        1368 :     for(ch = 0;  ch < channels; ch++){
      51       33744 :         for(i = 0; i < SAMPLES_PER_BAND; i++) {
      52       65664 :             ff_mpa_synth_filter_fixed(&c->mpadsp,
      53       32832 :                                 c->synth_buf[ch], &(c->synth_buf_offset[ch]),
      54             :                                 ff_mpa_synth_window_fixed, &dither_state,
      55       32832 :                                 out[ch] + 32 * i, 1,
      56       32832 :                                 c->sb_samples[ch][i]);
      57             :         }
      58             :     }
      59         456 : }
      60             : 
      61         456 : void ff_mpc_dequantize_and_synth(MPCContext * c, int maxband, int16_t **out,
      62             :                                  int channels)
      63             : {
      64             :     int i, j, ch;
      65         456 :     Band *bands = c->bands;
      66             :     int off;
      67             :     float mul;
      68             : 
      69             :     /* dequantize */
      70         456 :     memset(c->sb_samples, 0, sizeof(c->sb_samples));
      71         456 :     off = 0;
      72       10870 :     for(i = 0; i <= maxband; i++, off += SAMPLES_PER_BAND){
      73       31242 :         for(ch = 0; ch < 2; ch++){
      74       20828 :             if(bands[i].res[ch]){
      75       18282 :                 j = 0;
      76       18282 :                 mul = (mpc_CC+1)[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][0] & 0xFF];
      77      237666 :                 for(; j < 12; j++)
      78      219384 :                     c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
      79       18282 :                 mul = (mpc_CC+1)[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][1] & 0xFF];
      80      237666 :                 for(; j < 24; j++)
      81      219384 :                     c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
      82       18282 :                 mul = (mpc_CC+1)[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][2] & 0xFF];
      83      237666 :                 for(; j < 36; j++)
      84      219384 :                     c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
      85             :             }
      86             :         }
      87       10414 :         if(bands[i].msf){
      88             :             int t1, t2;
      89      226625 :             for(j = 0; j < SAMPLES_PER_BAND; j++){
      90      220500 :                 t1 = c->sb_samples[0][j][i];
      91      220500 :                 t2 = c->sb_samples[1][j][i];
      92      220500 :                 c->sb_samples[0][j][i] = t1 + t2;
      93      220500 :                 c->sb_samples[1][j][i] = t1 - t2;
      94             :             }
      95             :         }
      96             :     }
      97             : 
      98         456 :     mpc_synth(c, out, channels);
      99         456 : }

Generated by: LCOV version 1.13