| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | /***************************************************************************\ **                    MPEG Layer3-Audio Decoder*                  © 1997-2006 by Fraunhofer IIS *                        All Rights Reserved * *   filename: conceal.h *   project : ISO/MPEG-Decoder *   author  : Stefan Gewinner *   date    : 1998-05-26 *   contents/description: error concealment class - HEADER * *\***************************************************************************//* * $Date: 2010/11/17 20:46:02 $ * $Id: conceal.h,v 1.1 2010/11/17 20:46:02 audiodsp Exp $ */#ifndef __CONCEAL_H__#define __CONCEAL_H__/* ------------------------ includes --------------------------------------*/#include "mpeg.h"/*-------------------------------------------------------------------------*///// Error concealment class.////  This object is used to apply error concealment to a spectrum in case of//  CRC errors. CRC protection is optional for ISO/MPEG bitstreams.//class CErrorConcealment{public:  CErrorConcealment();  ~CErrorConcealment() {}  void Init();  void Apply    (    bool             fApply, // true: restore, false: store    const MPEG_INFO &Info,    MP3SI           &Si,    float           *lpSpec,    int              gr,    int              ch    );  enum { MAX_SPECTRUM_DATA = 4 };protected :  //  // structure to hold information for one granule  //  typedef struct tagGRAN_DATA    {    MP3SI_GRCH gr;                  /* side info                       */    float      Rs[SBLIMIT*SSLIMIT]; /* line amplitudes                 */    float      nrg[23];             /* sf-band energies                */    int        nrgValid;            /* valid-flag for sf-band energies */#ifdef DEBUG_CONCEALMENT    long      frameNumber;#endif    } GRAN_DATA;  //  // structure for concealment data  //  typedef struct tagSPECTRUM_DATA    {    int       writeOffset;             /* place to store next valid granule */    GRAN_DATA gran[MAX_SPECTRUM_DATA]; /* ring buffer */    GRAN_DATA estGran;    } SPECTRUM_DATA;  SPECTRUM_DATA SpecDataBuffer[2]; /* one buffer for each channel */  void Store    (    const MPEG_INFO &Info,    const MP3SI     &Si,    const float     *lpSpec,    int              gr,    int              ch    );  void Restore    (    const MPEG_INFO &Info,    MP3SI           &Si,    float           *lpSpec,    int              gr,    int              ch    );#ifdef USE_ENERGY_PREDICTION  float predict(const float *hist, const float *coff, int n);  void  adaptPredictor(const float *hist, float pwr, float *coff, float d, int n);#endif  void estimateBandEnergies(const MPEG_INFO &Info, GRAN_DATA *g);  void predictEnergies(const MPEG_INFO &Info, SPECTRUM_DATA *s);  //  // random seeds for the float and bit random generators  //  float ranHigh1(float a);  float ranHigh2(float a);  float ranLow(float a);  float ran3(long *idum);  int   irbit2(unsigned long *iseed);  int  inext;  int  inextp;  long ma [56];  int  iff ;  long          f_seed, w_seed ;  unsigned long b_seed ;#ifdef DEBUG_CONCEALMENT  long currentFrame ;#endif};/*-------------------------------------------------------------------------*/#endif
 |