1b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* ------------------------------------------------------------------
2b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
4b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * you may not use this file except in compliance with the License.
6b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * You may obtain a copy of the License at
7b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
8b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *
10b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Unless required by applicable law or agreed to in writing, software
11b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * express or implied.
14b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * See the License for the specific language governing permissions
15b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * and limitations under the License.
16b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * -------------------------------------------------------------------
17b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber */
18b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/****************************************************************************************
19b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPortions of this file are derived from the following 3GPP standard:
20b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
21b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    3GPP TS 26.073
22b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    Available from http://www.3gpp.org
24b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
25b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPermission to distribute, modify and use this file under the standard license
27b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberterms listed above has been obtained from the copyright holder.
28b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber****************************************************************************************/
29b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*
30b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
31b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
32b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
33b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
34b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Filename: /audio/gsm-amr/c/include/gsmamr_enc.h
35b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
36b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     Date: 09/26/2001
37b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
38b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
39b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REVISION HISTORY
40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
41b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Changing code as per review comments. These changes include
42b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              removing unnecessary tables and changing function descriptions.
43b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              The comments were changed to "slash-star" rather than double
44b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              slash, and some wordings of comments were corrected.
45b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
46b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Replaced GSMEncodeFrame function prototype with that of
47b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              AMREncode. Updated copyright year.
48b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
49b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added #define for WMF and IF2, and updated function prototype
50b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              of AMREncode.
51b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Renamed WMF and IF2 to AMR_WMF and AMR_IF2, respectively. Added
53b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              AMR_ETS, and changed output_type to output_format in the
54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              function prototype of AMREncode(). Removed function prototypes
55b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              for frame_header_move() and reverse_bits() since they are not
56b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              needed anymore.
57b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
58b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Moved WMFBytesUsed and IF2BytesUsed tables to
59b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              enc_output_format_tab.c.
60b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
61b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added function prototypes for init, reset, and exit functions
62b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              in amrencode.c. Renamed output format #defines so that it it
63b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber              unique to the encoder.
64b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
65b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added comment to describe L_FRAME.
66b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
67b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Added Frame_Type_3GPP type definition.
68b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
69b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Moved _cplusplus #ifdef after Include section.
70b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
71b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description:
72b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
73b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
74b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INCLUDE DESCRIPTION
75b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
76b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber This header contains all the necessary information needed to use the
77b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber GSM AMR encoder library.
78b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
79b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------
80b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/
81b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifndef _GSMAMR_ENC_H_
82b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define _GSMAMR_ENC_H_
83b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
84b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*----------------------------------------------------------------------------
85b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; INCLUDES
86b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/
87b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
88b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "gsm_amr_typedefs.h"
8988cfb59fde78a07ac8797008cf79b22193e983d9Chia-chi Yeh#include "frame_type_3gpp.h"
90b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
91b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*--------------------------------------------------------------------------*/
92b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifdef __cplusplus
93b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberextern "C"
94b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{
95b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif
96b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
97b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
98b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; MACROS
99b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
100b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
101b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
102b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
103b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; DEFINES
104b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
105b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* Number of 13-bit linear PCM samples per 20 ms frame */
106b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* L_FRAME = (8 kHz) * (20 msec) = 160 samples         */
107b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define L_FRAME     160
108b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
109b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* Output format types */
110b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define AMR_TX_WMF  0
111b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define AMR_TX_IF2  1
112b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define AMR_TX_ETS  2
113b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
114b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
115b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; EXTERNAL VARIABLES REFERENCES
116b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
117b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
118b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
119b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
120b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; SIMPLE TYPEDEF'S
121b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
122b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
123b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
124b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; ENUMERATED TYPEDEF'S
125b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
126b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
127b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    enum Mode
128b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    {
129b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR475 = 0,/* 4.75 kbps */
130b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR515,    /* 5.15 kbps */
131b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR59,     /* 5.90 kbps */
132b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR67,     /* 6.70 kbps */
133b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR74,     /* 7.40 kbps */
134b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR795,    /* 7.95 kbps */
135b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR102,    /* 10.2 kbps */
136b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MR122,    /* 12.2 kbps */
137b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        MRDTX,    /* DTX       */
138b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        N_MODES   /* Not Used  */
139b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    };
140b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
141b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
142b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; STRUCTURES TYPEDEF'S
143b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
144b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*----------------------------------------------------------------------------
145b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ; GLOBAL FUNCTION DEFINITIONS
146b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    ----------------------------------------------------------------------------*/
147b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* AMREncodeInit initializes the GSM AMR Encoder library by calling
148b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * GSMInitEncode and sid_sync_init. If initialization was successful,
149b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * init_status is set to zero, otherwise, it is set to -1.
150b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    */
151b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    int AMREncodeInit(
152b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void **pEncStructure,
153b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void **pSidSyncStructure,
154b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Flag dtx_enable);
155b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
156b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* AMREncodeReset resets the state memory used by the Encoder and SID sync
157b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * function. If reset was successful, reset_status is set to zero, otherwise,
158b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * it is set to -1.
159b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    */
160b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    int AMREncodeReset(
161b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void *pEncStructure,
162b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void *pSidSyncStructure);
163b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
164b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /* AMREncodeExit frees up the state memory used by the Encoder and SID
165b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * synchronization function.
166b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    */
167b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    void AMREncodeExit(
168b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void **pEncStructure,
169b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void **pSidSyncStructure);
170b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
171b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    /*
172b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * AMREncode is the entry point to the ETS Encoder library that encodes the raw
173b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * data speech bits and converts the encoded bitstream into either an IF2-
174b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * formatted bitstream, WMF-formatted bitstream, or ETS-formatted bitstream,
175b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     * depending on the the value of output_format. A zero is returned on success.
176b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber     */
177b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    int AMREncode(
178b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void *pEncState,
179b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        void *pSidSyncState,
180b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        enum Mode mode,
181b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Word16 *pEncInput,
182b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        unsigned char *pEncOutput,
183b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        enum Frame_Type_3GPP *p3gpp_frame_type,
184b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber        Word16 output_format
185b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber    );
186b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
187b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#ifdef __cplusplus
188b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber}
189b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif
190b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
191b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
192b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#endif  /* _GSMAMR_DEC_H_ */
193b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber
194