xref: /OK3568_Linux_fs/external/common_algorithm/misc/include/mp3dec.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: RCSL 1.0/RPSL 1.0
3  *
4  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
5  *
6  * The contents of this file, and the files included with this file, are
7  * subject to the current version of the RealNetworks Public Source License
8  * Version 1.0 (the "RPSL") available at
9  * http://www.helixcommunity.org/content/rpsl unless you have licensed
10  * the file under the RealNetworks Community Source License Version 1.0
11  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
12  * in which case the RCSL will apply. You may also obtain the license terms
13  * directly from RealNetworks.  You may not use this file except in
14  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
15  * applicable to this file, the RCSL.  Please see the applicable RPSL or
16  * RCSL for the rights, obligations and limitations governing use of the
17  * contents of the file.
18  *
19  * This file is part of the Helix DNA Technology. RealNetworks is the
20  * developer of the Original Code and owns the copyrights in the portions
21  * it created.
22  *
23  * This file, and the files included with this file, is distributed and made
24  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
25  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
26  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
27  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
28  *
29  * Technology Compatibility Kit Test Suite(s) Location:
30  *    http://www.helixcommunity.org/content/tck
31  *
32  * Contributor(s):
33  *
34  * ***** END LICENSE BLOCK ***** */
35 
36 /**************************************************************************************
37  * Fixed-point MP3 decoder
38  * Jon Recker (jrecker@real.com), Ken Cooke (kenc@real.com)
39  * June 2003
40  *
41  * mp3dec.h - public C API for MP3 decoder
42  **************************************************************************************/
43 
44 #ifndef _MP3DEC_H
45 #define _MP3DEC_H
46 #include <stdint.h>
47 
48 #if defined(_WIN32) && !defined(_WIN32_WCE)
49 #
50 #elif defined(_WIN32) && defined(_WIN32_WCE) && defined(ARM)
51 #
52 #elif defined(_WIN32) && defined(WINCE_EMULATOR)
53 #
54 #elif defined(ARM_ADS)
55 #
56 #elif defined(_SYMBIAN) && defined(__WINS__)    /* Symbian emulator for Ix86 */
57 #
58 #elif defined(__GNUC__) && defined(ARM)
59 #
60 #elif defined(__GNUC__) && defined(MIPS)
61 #
62 #elif defined(__GNUC__) && defined(__i386__)
63 #
64 #elif defined(_OPENWAVE_SIMULATOR) || defined(_OPENWAVE_ARMULATOR)
65 #
66 #elif defined(__GNUC__) //add by yongjian.ma
67 #else
68 #error No platform defined. See valid options in mp3dec.h
69 #endif
70 
71 #ifdef __cplusplus
72 extern "C" {
73 #endif
74 
75 /* determining MAINBUF_SIZE:
76  *   max mainDataBegin = (2^9 - 1) bytes (since 9-bit offset) = 511
77  *   max nSlots (concatenated with mainDataBegin bytes from before) = 1440 - 9 - 4 + 1 = 1428
78  *   511 + 1428 = 1939, round up to 1940 (4-byte align)
79  */
80 #define MAINBUF_SIZE    1940
81 
82 #define MAX_NGRAN        2        /* max granules */
83 #define MAX_NCHAN        2        /* max channels */
84 #define MAX_NSAMP        576        /* max samples per channel, per granule */
85 
86 /* map to 0,1,2 to make table indexing easier */
87 typedef enum
88 {
89     MPEG1 =  0,
90     MPEG2 =  1,
91     MPEG25 = 2
92 } MPEGVersion;
93 
94 typedef void *HMP3Decoder;
95 
96 enum
97 {
98     ERR_MP3_NONE =                  0,
99     ERR_MP3_INDATA_UNDERFLOW =     -1,
100     ERR_MP3_MAINDATA_UNDERFLOW =   -2,
101     ERR_MP3_FREE_BITRATE_SYNC =    -3,
102     ERR_MP3_OUT_OF_MEMORY =           -4,
103     ERR_MP3_NULL_POINTER =         -5,
104     ERR_MP3_INVALID_FRAMEHEADER =  -6,
105     ERR_MP3_INVALID_SIDEINFO =     -7,
106     ERR_MP3_INVALID_SCALEFACT =    -8,
107     ERR_MP3_INVALID_HUFFCODES =    -9,
108     ERR_MP3_INVALID_DEQUANTIZE =   -10,
109     ERR_MP3_INVALID_IMDCT =        -11,
110     ERR_MP3_INVALID_SUBBAND =      -12,
111 
112     ERR_UNKNOWN =                  -9999
113 };
114 
115 typedef struct _MP3FrameInfo
116 {
117     int bitrate;
118     int nChans;
119     int samprate;
120     int bitsPerSample;
121     int outputSamps;
122     int layer;
123     int version;
124     int vbr;                    /* is vbr flag */
125     uint32_t fSize;             /* file length, no tags */
126     uint32_t fCount;            /* frame count */
127     char TOC[100];              /* TOC */
128 } MP3FrameInfo;
129 
130 /* public API */
131 HMP3Decoder MP3InitDecoder(void);
132 void MP3FreeDecoder(HMP3Decoder hMP3Decoder);
133 int MP3Decode(HMP3Decoder hMP3Decoder, unsigned char **inbuf, int *bytesLeft, short *outbuf, int useSize);
134 
135 void MP3GetLastFrameInfo(HMP3Decoder hMP3Decoder, MP3FrameInfo *mp3FrameInfo);
136 int MP3GetNextFrameInfo(HMP3Decoder hMP3Decoder, MP3FrameInfo *mp3FrameInfo, unsigned char *buf);
137 int MP3FindSyncWord(unsigned char *buf, int nBytes);
138 
139 #ifdef __cplusplus
140 }
141 #endif
142 
143 #endif    /* _MP3DEC_H */
144