aboutsummaryrefslogtreecommitdiff
path: root/Src/aacdec/incs/mp4dec_asc/programcfg_c.h
blob: 45c1c6cfa6e1b4d5113b9184b43b2475fa1926d3 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*************************************************************************** 
 *
 *               (C) copyright Fraunhofer - IIS (2002)
 *                        All Rights Reserved
 *
 *   $Header: /cvs/root/winamp/aacdec/incs/mp4dec_asc/programcfg_c.h,v 1.3 2012/05/08 20:16:50 audiodsp Exp $
 *   project : MPEG-4 Audio Decoder
 *   contents/description: program config specific description
 *
 *   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 __PROGRAMCFGC_H__
#define __PROGRAMCFGC_H__

#include "mp4dec_helpers/cubuffer_c.h"

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

struct CSBitStream;

enum
{
  /* PCE settings */
  CSProgramConfig_FrontRow             = 0,
  CSProgramConfig_SideRow              = 1,
  CSProgramConfig_BackRow              = 2,
  CSProgramConfig_SpeakerRows          = 3,

  CSProgramConfig_MaximumChannels      = 16,
  CSProgramConfig_MaximumCommentLength = 256,

  /* aac profile definitions */
  CAAC_ProfileMain = 0,
  CAAC_ProfileLowComplexity,
  CAAC_ProfileSSR,
  CAAC_ProfileLTP,
  CAAC_ProfileScalable,
  CAAC_ProfileReserved
};


typedef struct CSProgramConfig
{
  /* non-multichannel configuration */

  int           m_NonMC_ConfigSet;
  int           m_NonMC_IsCPE;

  int           m_NonMC_Tag;

  /* */

  int           m_ExplicitMapping;

  int           m_Profile;
  int           m_SamplingFrequencyIndex;

  int           m_NumLfeChannelElements;
  int           m_NumAssocDataElements;
  int           m_NumValidCcElements;

  int           m_MonoMixdownPresent;
  int           m_MonoMixdownElementNumber;

  int           m_StereoMixdownPresent;
  int           m_StereoMixdownElementNumber;

  int           m_MatrixMixdownIndexPresent;
  int           m_MatrixMixdownIndex;
  int           m_PseudoSurroundEnable;

  unsigned int  m_NumberOfChannels[CSProgramConfig_SpeakerRows];
  int           m_NumberOfChannelElements[CSProgramConfig_SpeakerRows];

  int           m_ChannelElementIsCpe[CSProgramConfig_SpeakerRows][CSProgramConfig_MaximumChannels];
  unsigned int  m_ChannelElementTagSelect[CSProgramConfig_SpeakerRows][CSProgramConfig_MaximumChannels];

  unsigned int  m_LfeElementTagSelect[CSProgramConfig_MaximumChannels];
  unsigned int  m_AssocDataElementTagSelect[CSProgramConfig_MaximumChannels];

  int           m_CcElementIsIndSw[CSProgramConfig_MaximumChannels];
  unsigned int  m_ValidCcElementTagSelect[CSProgramConfig_MaximumChannels];

  int           m_CommentFieldBytes;
  unsigned char m_Comment[CSProgramConfig_MaximumCommentLength];

} CSProgramConfig, *CSProgramConfigPtr;

/* methods */

void CSProgramConfig_Initialize(CSProgramConfigPtr self);
void CSProgramConfig_Read      (CSProgramConfigPtr self, struct CSBitStream *bs);
void CSProgramConfig_ReadExt   (CSProgramConfigPtr self, struct CSBitStream *bs, CCompositionUnitPtr cubuffer, const unsigned int tag);
void CSProgramConfig_Copy      (CSProgramConfigPtr dst, const CSProgramConfigPtr src);

int  CSProgramConfig_AddChannel(CSProgramConfigPtr self, const unsigned int tag, const unsigned int isCPE);


int  CSProgramConfig_AddSingleChannel      (CSProgramConfigPtr self, const unsigned int tag);
int  CSProgramConfig_AddChannelPair        (CSProgramConfigPtr self, const unsigned int tag);
int  CSProgramConfig_AddCouplingChannel    (CSProgramConfigPtr self, const unsigned int tag);
int  CSProgramConfig_AddLowFrequencyChannel(CSProgramConfigPtr self, const unsigned int tag);

int  CSProgramConfig_IsChannelLocatedAt    (CSProgramConfigPtr self, const unsigned int row, const unsigned int tag);
int  CSProgramConfig_IsChannelPairLocatedAt(CSProgramConfigPtr self, const unsigned int row, const unsigned int tag);

/* explicit query */


/* query by index */

int CSProgramConfig_GetNumberOfElements(CSProgramConfigPtr self, const unsigned int row);
int CSProgramConfig_GetNumberOfChannels(CSProgramConfigPtr self);
int CSProgramConfig_GetNumberOfChannelsPerRow(CSProgramConfigPtr self, const unsigned int row);

int CSProgramConfig_GetElementTag(CSProgramConfigPtr self, const unsigned int row, const unsigned int index);
int CSProgramConfig_IsChannelPair(CSProgramConfigPtr self, const unsigned int row, const unsigned int index);

int CSProgramConfig_GetNumberOfLowFrequencyChannels(CSProgramConfigPtr self);
int CSProgramConfig_GetLowFrequencyChannelTag      (CSProgramConfigPtr self, const unsigned int index);

/* */

int CSProgramConfig_GetSamplingRateIndex(CSProgramConfigPtr self);
int CSProgramConfig_GetProfile          (CSProgramConfigPtr self);

#ifdef __cplusplus
}
#endif

#endif