1 /***********************************************************
2  *
3  *  Copyright (C) 2012  PUX Corporation
4  *  All Rights Reserved.
5  *
6  ***********************************************************/
7 
8 #ifndef __AACDEC_API_H__
9 #define __AACDEC_API_H__
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 /*======================================================================*
15   definitions
16  *======================================================================*/
17 /* definitions of size */
18 #define HEAACDEC_MAX_CHANNEL_NUM  (6)                               /* Max Support Channel Number */
19 #define HEAACDEC_PCM_FRAME_LENGTH (1024)                            /* PCM Sample Size per one frame */
20 #define HEAACDEC_STREAM_MAX_SIZE  (800*HEAACDEC_MAX_CHANNEL_NUM)    /* Max AAC Bitstream Size per one frame */
21 
22 /* HE-AACDEC Libray Error Code */
23 #define HEAACDEC_RET_OK            (0)      /* Success */
24 #define HEAACDEC_RET_BUFFER_ERR   (-1)      /* Illegal buffer area */
25 #define HEAACDEC_RET_ERR_PARAM    (-2)      /* Illegal AACDEC_AAC_INFO */
26 #define HEAACDEC_RET_STREAM_ERR   (-3)      /* Invalid Bitstream */
27 #define HEAACDEC_RET_INVALID_ERR  (-4)      /* Invalid API call */
28 
29 
30 /*======================================================================*
31   structure
32  *======================================================================*/
33 typedef struct {
34     u16 smpFreq;         /* index of sampling frequency(Hz) */
35     u16 channel;         /* number of channel               */
36     u16 reserved[10];    /* reserved                        */
37 } HEAACDEC_AAC_INFO;
38 
39 /* Input frequency index */
40 #define HEAACDEC_96000HZ        (0)
41 #define HEAACDEC_88200HZ        (1)
42 #define HEAACDEC_64000HZ        (2)
43 #define HEAACDEC_48000HZ        (3)
44 #define HEAACDEC_44100HZ        (4)
45 #define HEAACDEC_32000HZ        (5)
46 #define HEAACDEC_24000HZ        (6)
47 #define HEAACDEC_22050HZ        (7)
48 #define HEAACDEC_16000HZ        (8)
49 #define HEAACDEC_12000HZ        (9)
50 #define HEAACDEC_11025HZ        (10)
51 #define HEAACDEC_08000HZ        (11)
52 
53 
54 /*======================================================================*
55   AACDEC Library API Functions
56  *======================================================================*/
57 
58 /*----------------------------------------------------------------------*
59   Name:         HEAACDECOpen
60 
61   Description:  open HE-AAC Decoder, Initialize the work area
62 
63   Arguments:    memPtr               (IN)   address of work area
64                 memSize              (IN)   work area size
65                 aacInfo              (IN)   input AAC Stream Information
66 
67   Returns:      HEAACDEC_RET_OK             Success
68                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
69                 HEAACDEC_RET_ERR_PARAM      Illegal HEAACDEC_AAC_INFO
70  *----------------------------------------------------------------------*/
71 s32 HEAACDECOpen( void *memPtr,
72                   s32 memSize,
73                   HEAACDEC_AAC_INFO *aacInfo);
74 
75 /*----------------------------------------------------------------------*
76   Name:         HEAACDECBegin
77 
78   Description:  begin HE-AAC Decoder
79 
80   Arguments:    memPtr               (IN)   address of work area
81                 inputBitstream       (IN)   address of input aacbitstream data area
82                 inputBitstreamLength (IN)   input AAC BitStream Size per one frame
83 
84   Returns:      HEAACDEC_RET_OK             Success
85                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
86                 HEAACDEC_RET_ERR_PARAM      Illegal HEAACDEC_AAC_INFO
87                 HEAACDEC_RET_INVALID_ERR    Invalid API call
88 *----------------------------------------------------------------------*/
89 s32 HEAACDECBegin( void *memPtr,
90                    u8 *inputBitstream,
91                    u16 inputBitstreamLength);
92 
93 /*----------------------------------------------------------------------*
94   Name:         HEAACDECExecute
95 
96   Description:  execute HE-AAC decoder per one frame
97 
98   Arguments:    memPtr               (IN)   address of work area
99                 inputBitstream       (IN)   address of input aacbitstream data area
100                 inputBitstreamLength (IN)   input AAC BitStream Size per one frame
101                 decodedPcm           (OUT)  address of decoded pcm data area
102                 PcmLength            (OUT)  output AAC PCM data size
103                 outputFreqIndex      (OUT)  output AAC PCM index of sampling frequency
104 
105   Returns:      HEAACDEC_RET_OK             Success
106                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
107                 HEAACDEC_RET_ERR_PARAM      Illegal HEAACDEC_AAC_INFO
108                 HEAACDEC_RET_STREAM_ERR     Invalid Bitstream
109                 HEAACDEC_RET_INVALID_ERR    Invalid API call
110  *----------------------------------------------------------------------*/
111 s32 HEAACDECExecute( void *memPtr,
112                      u8 *inputBitstream,
113                      u16 inputBitstreamLength,
114                      s16 **decodedPcm,
115                      u16 *PcmLength,
116                      u16 *outputFreqIndex);
117 
118 /*----------------------------------------------------------------------*
119   Name:         HEAACDECEnd
120 
121   Description:  end HE-AAC decoder
122 
123   Arguments:    memPtr               (IN)   address of work area
124                 decodedPcm           (OUT)  address of decoded pcm data area
125                 PcmLength            (OUT)  output AAC PCM data size
126                 outputFreqIndex      (OUT)  output AAC PCM index of sampling frequency
127 
128   Returns:      HEAACDEC_RET_OK             Success
129                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
130                 HEAACDEC_RET_INVALID_ERR    Invalid API call
131  *----------------------------------------------------------------------*/
132 s32 HEAACDECEnd( void *memPtr,
133                  s16 **decodedPcm,
134                  u16 *PcmLength,
135                  u16 *outputFreqIndex);
136 
137 /*----------------------------------------------------------------------*
138   Name:         HEAACDECClose
139 
140   Description:  close HE-AAC decoder, clear the work area
141 
142   Arguments:    memPtr               (IN)   address of work area
143 
144   Returns:      HEAACDEC_RET_OK             Success
145                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
146                 HEAACDEC_RET_INVALID_ERR    Invalid API call
147  *----------------------------------------------------------------------*/
148 s32 HEAACDECClose( void *memPtr);
149 
150 /*----------------------------------------------------------------------*
151   Name:         HEAACDECRestart
152 
153   Description:  restart HE-AAC decoder
154 
155   Arguments:    memPtr               (IN)   address of work area
156 
157   Returns:      HEAACDEC_RET_OK             Success
158                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
159  *----------------------------------------------------------------------*/
160 s32 HEAACDECRestart( void *memPtr);
161 
162 /*----------------------------------------------------------------------*
163   Name:         HEAACDECMemoryRequirement
164 
165   Description:  require HE-AAC decoder memory size
166 
167   Arguments:    aacInfo              (IN)   input AAC Stream Information
168                 memSize              (OUT)  require AAC decoder memory size
169 
170   Returns:      HEAACDEC_RET_OK             Success
171                 HEAACDEC_RET_BUFFER_ERR     Illegal buffer area
172                 HEAACDEC_RET_ERR_PARAM      Illegal AACDEC_AAC_INFO
173  *----------------------------------------------------------------------*/
174 s32 HEAACDECMemoryRequirement( HEAACDEC_AAC_INFO *aacInfo,
175                                s32 *memSize);
176 
177 #ifdef __cplusplus
178 } /* extern "C" */
179 #endif
180 
181 #endif /* __AACDEC_API_H__ */
182