/***************************************************************************\ 
 *
 *               (C) copyright Fraunhofer - IIS (2002)
 *                        All Rights Reserved
 *
 *   $Header: /cvs/root/winamp/aacdec/incs/mp4dec_asc/epspecificconfig_c.h,v 1.3 2012/05/08 20:16:50 audiodsp Exp $
 *   project : MPEG-4 Audio Decoder
 *   contents/description: EP specific config interface
 *
 *   This software and/or program is protected by copyright law and
 *   international treaties. Any reproduction or distribution of this 
 *   software and/or program, or any portion of it, may result in severe 
 *   civil and criminal penalties, and will be prosecuted to the maximum 
 *   extent possible under law.
 *
\***************************************************************************/


#ifndef __EPSPECIFICCONFIG_C_H__
#define __EPSPECIFICCONFIG_C_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

struct CSBitStream;

typedef struct CEpClassConfig {
  unsigned int m_LengthEsc;
  unsigned int m_RateEsc;
  unsigned int m_CrcLengthEsc;

  unsigned int m_ConcatenateFlag;
  unsigned int m_FecType;
  unsigned int m_TerminationSwitch;

  unsigned int m_InterleaveSwitch;
  unsigned int m_ClassOptional;
  
  unsigned int m_NoBitsForLength;
  unsigned int m_ClassLength;
  
  unsigned int m_ClassRate;
  unsigned int m_ClassCrcLength;
} CEpClassConfig, *CEpClassConfigPtr;

typedef struct CPredSetConfig {

  unsigned int   m_NoOfClasses;
  unsigned int   m_ClassReorderedOutput;
  unsigned int  *m_ClassOutputOrder;
  CEpClassConfig *m_EpClassConfig;
} CPredSetConfig, *CPredSetConfigPtr;


typedef struct CEPBuffer {
  unsigned char* m_pData;
  unsigned int   m_noBytes;
  unsigned int   m_noBits;
} CEPBuffer, *CEPBufferPtr;

typedef struct CEPSpecificConfig {
  
  unsigned int m_NoOfPredSets;
  unsigned int m_InterleaveType;
  unsigned int m_BitStuffing;
  unsigned int m_NoOfConcatenatedFrames;

  unsigned int m_HeaderProtection;
  unsigned int m_HeaderRate;
  unsigned int m_HeaderCrcLength;

  unsigned int m_RSFecCapability;

  CPredSetConfig *m_psc;
  CEPBuffer       m_epTmpBuffer;

} CEpSpecificConfig, *CEpSpecificConfigPtr;

int  EpSpecificConfig_Parse(CEpSpecificConfigPtr self, struct CSBitStream *bs);
int  EpSpecificConfig_Copy(CEpSpecificConfigPtr self, CEpSpecificConfigPtr epsc);
int  EpSpecificConfig_Compare(CEpSpecificConfigPtr self, CEpSpecificConfigPtr epsc);
void EpSpecificConfig_Free(CEpSpecificConfigPtr self);

#ifdef __cplusplus
}
#endif

#endif