OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / media / libstagefright / codecs / amrnb / common / pvgsmamrdecoderinterface.h
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 //////////////////////////////////////////////////////////////////////////////////
19 //                                                                              //
20 //  File: pvgsmamrdecoderinterface.h                                            //
21 //                                                                              //
22 //////////////////////////////////////////////////////////////////////////////////
23
24 #ifndef _PVGSMAMR_DECODER_INTERFACE_H
25 #define _PVGSMAMR_DECODER_INTERFACE_H
26
27 /*----------------------------------------------------------------------------
28 ; ENUMERATED TYPEDEF'S
29 ----------------------------------------------------------------------------*/
30
31 typedef enum
32 {
33     /*
34      *    One word (2-byte) to indicate type of frame type.
35      *    One word (2-byte) to indicate frame type.
36      *    One word (2-byte) to indicate mode.
37      *    N words (2-byte) containing N bits (bit 0 = 0xff81, bit 1 = 0x007f).
38      */
39     ETS = 0, /* Both AMR-Narrowband and AMR-Wideband */
40
41     /*
42      *    One word (2-byte) for sync word (good frames: 0x6b21, bad frames: 0x6b20)
43      *    One word (2-byte) for frame length N.
44      *    N words (2-byte) containing N bits (bit 0 = 0x007f, bit 1 = 0x0081).
45      */
46     ITU, /* AMR-Wideband */
47
48     /*
49      *   AMR-WB MIME/storage format, see RFC 3267 (sections 5.1 and 5.3) for details
50      */
51     MIME_IETF,
52
53     WMF, /* AMR-Narrowband */
54
55     IF2  /* AMR-Narrowband */
56
57 } bitstream_format;
58
59
60
61 /*----------------------------------------------------------------------------
62 ; STRUCTURES TYPEDEF'S
63 ----------------------------------------------------------------------------*/
64 typedef struct
65 {
66     int16_t prev_ft;
67     int16_t prev_mode;
68 } RX_State;
69
70
71 typedef struct tPVAmrDecoderExternal
72 {
73     /*
74      * INPUT:
75      * Pointer to the input buffer that contains the encoded bistream data.
76      * The data is filled in such that the first bit transmitted is
77      * the most-significant bit (MSB) of the first array element.
78      * The buffer is accessed in a linear fashion for speed, and the number of
79      * bytes consumed varies frame to frame. This is use for mime/ietf data
80      */
81     uint8_t  *pInputBuffer;
82
83     /*
84      * INPUT:
85      * Pointer to the input buffer that contains the encoded stream data.
86      * The data is filled such that the first bit transmitted is
87      * in the  first int16_t element.
88      * The buffer is accessed in a linear fashion for speed, and the number of
89      * bytes consumed varies frame to frame.
90      */
91     int16_t  *pInputSampleBuffer;
92
93     /*
94      * INPUT: (but what is pointed to is an output)
95      * Pointer to the output buffer to hold the 16-bit PCM audio samples.
96      */
97     int16_t  *pOutputBuffer;
98
99     /*
100      * INPUT:
101      * Number of requested output audio channels. This relieves the calling
102      * environment from having to perform stereo-to-mono or mono-to-stereo
103      * conversions.
104      */
105     int32_t     desiredChannels;
106
107     /*
108          * INPUT:
109          * Format type of the encoded bitstream.
110          */
111     bitstream_format     input_format;
112
113     /*
114      * OUTPUT:
115      * The sampling rate decoded from the bitstream, in units of
116      * samples/second. For this release of the library this value does
117      * not change from frame to frame, but future versions will.
118      */
119     int32_t   samplingRate;
120
121     /*
122      * OUTPUT:
123      * This value is the bitrate in units of bits/second. IT
124      * is calculated using the number of bits consumed for the current frame,
125      * and then multiplying by the sampling_rate, divided by points in a frame.
126      * This value can changes frame to frame.
127      */
128     int32_t   bitRate;
129
130     /*
131      * OUTPUT:
132      * The number of channels decoded from the bitstream. The output data
133      * will have be the amount specified in the variable desiredChannels,
134      * this output is informative only, and can be ignored.
135      */
136     int32_t     encodedChannels;
137
138     /*
139      * OUTPUT:
140      * This value is the number of output PCM samples per channel.
141      * It is  320.
142      */
143     int16_t     frameLength;
144
145     /*
146      * OUTPUT:
147      * This value is the quality indicator. 1 (good)  0 (bad)
148     */
149     uint8_t     quality;
150
151
152     /*
153      * OUTPUT:
154      *  GSM AMR NB and WB mode (i.e. bit-rate )
155      */
156     int16_t     mode;
157     int16_t     mode_old;
158
159     /*
160      * OUTPUT:
161      *  GSM AMR NB and WB frame type ( speech_good, speech_bad, sid, etc.)
162      */
163     int16_t     frame_type;
164
165     int16_t reset_flag;
166     int16_t reset_flag_old;
167
168     /*
169      * OUTPUT:
170      *  Decoder  status
171      */
172     int32_t     status;
173
174     /*
175      * OUTPUT:
176      *  Rx status state
177      */
178     RX_State  rx_state;
179
180 } tPVAmrDecoderExternal;
181
182 #endif
183