mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-11 20:51:00 -05:00
113 lines
2.8 KiB
C++
113 lines
2.8 KiB
C++
/***************************************************************************\
|
|
*
|
|
* MPEG Layer3-Audio Decoder
|
|
* © 1997-2006 by Fraunhofer IIS
|
|
* All Rights Reserved
|
|
*
|
|
* filename: mp3decode.h
|
|
* project : ISO/MPEG-Decoder
|
|
* author : Martin Sieler
|
|
* date : 1998-05-26
|
|
* contents/description: MPEG Layer-3 decoder
|
|
*
|
|
*
|
|
\***************************************************************************/
|
|
|
|
/*
|
|
* $Date: 2011/01/28 21:45:29 $
|
|
* $Id: mp3decode.h,v 1.5 2011/01/28 21:45:29 audiodsp Exp $
|
|
*/
|
|
|
|
#ifndef __MP3DECODE_H__
|
|
#define __MP3DECODE_H__
|
|
|
|
/* ------------------------ includes --------------------------------------*/
|
|
|
|
#include "mpeg.h"
|
|
#include "mpegbitstream.h"
|
|
#include "huffdec.h"
|
|
#include "mdct.h"
|
|
#include "polyphase.h"
|
|
#include "mp3ancofl.h"
|
|
|
|
#ifdef ERROR_CONCEALMENT
|
|
#include "conceal.h"
|
|
#endif
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
//
|
|
// MPEG Layer-3 decoding class.
|
|
//
|
|
// This is the main MPEG Layer-3 decoder object.
|
|
//
|
|
|
|
class NALIGN(16) CMp3Decode
|
|
{
|
|
public:
|
|
|
|
CMp3Decode(CMpegBitStream &_Bs, int _crc_check, DecoderHooks *_hooks=0);
|
|
|
|
~CMp3Decode();
|
|
|
|
void Init(bool fFullReset = true);
|
|
|
|
// PcmFormat: 0: integer, 1: 32 bit float (IEEE)
|
|
SSC Decode(float *pPcm,
|
|
size_t cbPcm,
|
|
size_t *pcbUsed,
|
|
unsigned char *ancData,
|
|
size_t *numAncBytes = 0,
|
|
int oflOn = 0,
|
|
unsigned int *startDelay = 0,
|
|
unsigned int *totalLength = 0);
|
|
|
|
|
|
SSC GetLastAncData(unsigned char* ancData, size_t *numAncBytes);
|
|
|
|
SSC GetOflVersion(int* oflVersion);
|
|
|
|
protected:
|
|
|
|
SSC DecodeOnNoMainData(float *pPcm);
|
|
SSC DecodeNormal (float *pPcm, bool fCrcOk);
|
|
|
|
void PolyphaseReorder();
|
|
void ZeroISpectrum();
|
|
void ZeroSpectrum();
|
|
void ZeroPolySpectrum();
|
|
void SetInfo();
|
|
|
|
CMp3Huffman m_Mp3Huffman; // huffman decoder
|
|
CMdct m_Mdct; // mdct
|
|
CPolyphase m_Polyphase; // polyphase
|
|
CMp3AncOfl m_AncOfl; // ancillary data and ofl
|
|
|
|
#ifdef ERROR_CONCEALMENT
|
|
CErrorConcealment m_Conceal; // error concealment
|
|
#endif
|
|
|
|
MPEG_INFO m_Info; // info structure
|
|
CMpegBitStream &m_Bs; // bitstream
|
|
CBitStream m_Db; // dynamic buffer
|
|
MP3SI m_Si; // side info
|
|
MP3SCF m_ScaleFac[2]; // scalefactors
|
|
|
|
int m_ISpectrum[2][SSLIMIT*SBLIMIT]; // spectrum (integer)
|
|
NALIGN(16) SPECTRUM m_Spectrum; // spectrum (float)
|
|
NALIGN(16) POLYSPECTRUM m_PolySpectrum; // spectrum (post-mdct)
|
|
|
|
int m_crc_check; // 0: no CRC check, 1: fail on CRC errors
|
|
|
|
protected:
|
|
|
|
enum { dynBufSize = 2048 } ;
|
|
|
|
unsigned char m_dynBufMemory [dynBufSize] ;
|
|
|
|
private:
|
|
DecoderHooks *hooks;
|
|
};
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
#endif
|