Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Musepack decoder
  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
  25.  * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
  26.  * divided into 32 subbands.
  27.  */
  28.  
  29. #ifndef AVCODEC_MPC_H
  30. #define AVCODEC_MPC_H
  31.  
  32. #include "libavutil/lfg.h"
  33. #include "avcodec.h"
  34. #include "get_bits.h"
  35. #include "dsputil.h"
  36. #include "mpegaudio.h"
  37. #include "mpegaudiodsp.h"
  38.  
  39. #define BANDS            32
  40. #define SAMPLES_PER_BAND 36
  41. #define MPC_FRAME_SIZE   (BANDS * SAMPLES_PER_BAND)
  42.  
  43. /** Subband structure - hold all variables for each subband */
  44. typedef struct Band {
  45.     int msf; ///< mid-stereo flag
  46.     int res[2];
  47.     int scfi[2];
  48.     int scf_idx[2][3];
  49.     int Q[2];
  50. }Band;
  51.  
  52. typedef struct MPCContext {
  53.     DSPContext dsp;
  54.     MPADSPContext mpadsp;
  55.     GetBitContext gb;
  56.     int IS, MSS, gapless;
  57.     int lastframelen;
  58.     int maxbands, last_max_band;
  59.     int last_bits_used;
  60.     int oldDSCF[2][BANDS];
  61.     Band bands[BANDS];
  62.     int Q[2][MPC_FRAME_SIZE];
  63.     int cur_frame, frames;
  64.     uint8_t *bits;
  65.     int buf_size;
  66.     AVLFG rnd;
  67.     int frames_to_skip;
  68.     /* for synthesis */
  69.     DECLARE_ALIGNED(16, MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512*2];
  70.     int synth_buf_offset[MPA_MAX_CHANNELS];
  71.     DECLARE_ALIGNED(16, int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT];
  72. } MPCContext;
  73.  
  74. void ff_mpc_init(void);
  75. void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, int16_t **out, int channels);
  76.  
  77. #endif /* AVCODEC_MPC_H */
  78.