aboutsummaryrefslogtreecommitdiff
path: root/Src/aacdec/incs/mp4dec_helpers/bitstream_c.h
blob: 223e7f4b93bfd0794a27b5c4cf00c2eda3beef66 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*************************************************************************** 
 *
 *               (C) copyright Fraunhofer - IIS (2000)
 *                        All Rights Reserved
 *
 *   $Header: /cvs/root/winamp/aacdec/incs/mp4dec_helpers/bitstream_c.h,v 1.3 2012/05/08 20:16:50 audiodsp Exp $
 *   project : MPEG-4 Audio Decoder
 *   contents/description: bitstream module 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 __BITSTREAMC_H__
#define __BITSTREAMC_H__

#include "mp4dec_helpers/machine.h"

/* CRC Markers for SetPositionMarker(). */

#ifdef __cplusplus
extern "C" {
#endif

typedef enum CSBitStream_MarkerPosition
{
  CSBitStream_ChannelElementStart,
  CSBitStream_ChannelElementStop,
  CSBitStream_AncillaryElementStart,
  CSBitStream_AncillaryElementStop,
  CSBitStream_SecondIndividualChannelStart,
  CSBitStream_CurrentPosition

} CSBitStream_MarkerPosition;

typedef enum {
  NO_EPCONF = -1,
  EPCONF0   = 0,
  EPCONF1   = 1,
  EPCONF2   = 2,
  EPCONF3   = 3
} __epconf_types;

typedef struct CSBitStream
{
  void  (*ByteAlign) (struct CSBitStream *self);
  void  (*PushBack)  (struct CSBitStream *self, INT32 n);
  INT32 (*Get)       (struct CSBitStream *self, INT32 elemID, INT32 n);

  void  (*SetPositionMarker)    (struct CSBitStream *self, INT32 id);
  void  (*SetCRCPositionMarker) (struct CSBitStream *self, CSBitStream_MarkerPosition position) ;
  
  INT32 (*GetBitCount)     (struct CSBitStream *self);
  INT32 (*GetValidBits)    (struct CSBitStream *self);
  INT32 (*GetValidBitsEp1) (struct CSBitStream *self, INT32 err_sens_class);

  UINT8* (*GetDataPointer) (struct CSBitStream *self);

  UINT32   m_BitsInCache;
  UINT32   m_CacheWord;
  INT32    m_erFlag;

} CSBitStream, *CSBitStreamPtr;

INT32 __getBits              (CSBitStreamPtr self, INT32 elemID, INT32 nBits);
void  __pushBack             (CSBitStreamPtr self, INT32 nBits);
void  __byteAlign            (CSBitStreamPtr self);
void  __setPositionMarker    (CSBitStreamPtr self, INT32 id);
void  __setCRCPositionMarker (CSBitStreamPtr self, CSBitStream_MarkerPosition position) ;
INT32 __getBitCount          (CSBitStreamPtr self);
INT32 __getValidBits         (CSBitStreamPtr self);
INT32 __getValidBits_ep1     (CSBitStreamPtr self, INT32 err_sens_class);
UINT8* __getDataPointer      (CSBitStreamPtr self);

#ifdef __cplusplus
}
#endif

#endif