1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------
2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo
3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License.
6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at
7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software
11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied.
14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions
15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License.
16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * -------------------------------------------------------------------
17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */
18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*
19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   PacketVideo Corp.
22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   MP3 Decoder Library
23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   Filename: pvmp3_decode_huff_cw.cpp
25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Funtions:
27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab0
28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab1
29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab2
30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab3
31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab5
32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab6
33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab7
34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab8
35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab9
36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab10
37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab11
38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab12
39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab13
40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab15
41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab16
42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab24
43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab32
44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pvmp3_decode_huff_cw_tab33
45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Date: 09/21/2007
47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY
50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description:
53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS
56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Inputs:
58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    BITS          *pMainData = pointer to input mp3 Main data bit stream
59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Outputs:
62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = bit field extracted from a leaf entry of packed mp3 Huffman Tables
63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION
67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   These functions are used to decode huffman codewords from the input
69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   bitstream using combined binary search and look-up table approach.
70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS
73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES
77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996)
78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [2] Introduction to Algorithms,
81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest.
82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     The MIT press, 1990
83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [3] "Selecting an Optimal Huffman Decoder for AAC",
85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Vladimir Z. Mesarovic, et al.
86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     AES 111th Convention, September 21-24, 2001, New York, USA
87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE
90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/
93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES
97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pv_mp3dec_fxd_op.h"
99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_tables.h"
100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_getbits.h"
101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_decode_huff_cw.h"
102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS
105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here
106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES
111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional
112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also.
113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS
118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration
119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module
124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES
128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module
129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere
134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab0(tmp3Bits *pMainData)
141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    OSCL_UNUSED_ARG(pMainData);
143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(0);
144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab1(tmp3Bits *pMainData)
151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 3);    /*  hufftable1  */
156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_1 + tmp);
158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (3 - (cw & 0xFF));
159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab2(tmp3Bits *pMainData)
168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 6);    /*  huffTable_2,3  */
173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (tmp >> 3)
175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 1;
177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = tmp + 7;
181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_2 + tmp);
184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (6 - (cw & 0xFF));
185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab3(tmp3Bits *pMainData)
194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 6);    /*  huffTable_2,3  */
199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (tmp >> 3)
201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 1;
203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = tmp + 7;
207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_3 + tmp);
210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (6 - (cw & 0xFF));
211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab5(tmp3Bits *pMainData)
220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 8);    /*  huffTable_5  */
225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 5))
227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 1;
229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 2)
231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 2 + 7;
233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 3) + 21;
237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_5 + tmp);
240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (8 - (cw & 0xFF));
241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab6(tmp3Bits *pMainData)
249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 7);    /*  huffTable_6  */
254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 3) >= 3)
255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 3;
257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
258d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if (tmp >> 1)
259d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
260d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 1 + 13;
261d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
262d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
263d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
264d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = tmp + 24;
265d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
266d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
267d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_6 + tmp);
268d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (7 - (cw & 0xFF));
269d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
270d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
271d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
272d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
273d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
274d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
275d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
276d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
277d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab7(tmp3Bits *pMainData)
278d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
279d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
280d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
281d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
282d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 10);    /*  huffTable_7  */
283d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 7) >= 2)
284d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
285d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 2;
286d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
287d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 4) >= 7)
288d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
289d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 4) - 7 + 6;
290d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
291d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >=  2)
292d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
293d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 2 + 15;
294d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
295d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
296d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
297d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 3) + 69;
298d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
299d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
300d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_7 + tmp);
301d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (10 - (cw & 0xFF));
302d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
303d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
304d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
305d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
306d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
307d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
308d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
309d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
310d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab8(tmp3Bits *pMainData)
311d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
312d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
313d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
314d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
315d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 11);    /*  huffTable_8  */
316d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 7) >= 2)
317d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
318d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 2;
319d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
320d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 5) >= 5)
321d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
322d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 5 + 14;
323d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
324d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 3)
325d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
326d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 3 + 17;
327d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
328d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
329d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
330d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp) + 54;
331d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
332d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
333d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_8 + tmp);
334d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (11 - (cw & 0xFF));
335d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
336d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
337d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
338d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
339d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
340d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
341d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
342d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
343d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab9(tmp3Bits *pMainData)
344d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
345d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
346d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
347d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
348d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo9bits(pMainData, 9);    /*  huffTable_9  */
349d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 5) >= 5)
350d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
351d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 5;
352d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
353d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 6)
354d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
355d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 6 + 11;
356d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
357d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 4)
358d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
359d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 4 + 25;
360d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
361d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
362d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
363d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = tmp + 45;
364d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
365d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
366d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_9 + tmp);
367d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (9 - (cw & 0xFF));
368d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
369d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
370d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
371d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
372d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
373d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
374d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
375d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
376d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab10(tmp3Bits *pMainData)
377d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
378d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
379d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
380d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
381d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 11);    /*  huffTable_10  */
382d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (tmp >> 10)
383d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
384d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 10) - 1;
385d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
386d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 7) >= 3)
387d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
388d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 3 + 1;
389d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
390d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 5) >= 8)
391d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
392d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 8 + 6;
393d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
394d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 18)
395d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
396d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 18 + 10;
397d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
398d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 24)
399d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
400d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 24 + 24;
401d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
402d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 12)
403d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
404d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 12 + 36;
405d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
406d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
407d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
408d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp) + 72;
409d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
410d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
411d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_10 + tmp);
412d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (11 - (cw & 0xFF));
413d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
414d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
415d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
416d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
417d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
418d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
419d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
420d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
421d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab11(tmp3Bits *pMainData)
422d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
423d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
424d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
425d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
426d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 11);    /*  huffTable_11  */
427d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 8) >= 3)
428d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
429d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 8) - 3;
430d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
431d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 6) >= 7)
432d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
433d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 6) - 7 + 5;
434d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
435d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 32)
436d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
437d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 32 + 10;
438d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
439d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 10)
440d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
441d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 10 + 34;
442d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
443d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 8)
444d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
445d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 8 + 88;
446d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
447d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
448d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
449d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 0xFF) + 100;
450d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
451d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_11 + tmp);
452d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (11 - (cw & 0xFF));
453d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
454d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
455d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
456d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
457d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
458d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
459d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
460d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
461d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab12(tmp3Bits *pMainData)
462d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
463d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
464d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
465d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
466d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 10);    /*  huffTable_12  */
467d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 7) >= 5)
468d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
469d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 5;
470d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
471d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 5) >= 12)
472d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
473d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 12 + 3;
474d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
475d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 4) >= 17)
476d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
477d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 4) - 17 + 11;
478d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
479d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 32)
480d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
481d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 32 + 18;
482d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
483d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 16)
484d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
485d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 16 + 54;
486d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
487d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
488d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
489d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 0x1F) + 102;
490d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
491d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
492d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_12 + tmp);
493d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (10 - (cw & 0xFF));
494d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
495d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
496d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
497d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
498d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
499d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
500d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
501d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
502d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab13(tmp3Bits *pMainData)
503d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
504d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
505d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
506d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
507d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getNbits(pMainData, 19);    /*  huffTable_13  */
508d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (tmp >> 18)
509d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
510d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = 0;
511d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
512d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 15) >= 4)
513d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
514d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 15) - 4 + 1;
515d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
516d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 11) >= 32)
517d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
518d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 11) - 32 + 5;
519d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
520d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 9) >= 64)
521d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
522d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 9) - 64 + 37;
523d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
524d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 8) >= 64)
525d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
526d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 8) - 64 + 101;
527d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
528d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 7) >= 64)
529d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
530d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 64 + 165;
531d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
532d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 6) >= 32)
533d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
534d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 6) - 32 + 229;
535d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
536d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 5) >= 32)
537d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
538d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 32 + 325;
539d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
540d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 4) >= 32)
541d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
542d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 4) - 32 + 357;
543d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
544d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 32)
545d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
546d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 32 + 389;
547d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
548d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 2)
549d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
550d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 2 + 421;
551d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
552d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
553d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
554d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 0x7) + 483;
555d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
556d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
557d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_13 + tmp);
558d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (19 - (cw & 0xFF));
559d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
560d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
561d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
562d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
563d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
564d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
565d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
566d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
567d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab15(tmp3Bits *pMainData)
568d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
569d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
570d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
571d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
572d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 13);    /*  huffTable_15  */
573d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 9) >= 10)
574d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
575d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 9) - 10;
576d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
577d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 6) >= 39)
578d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
579d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 6) - 39 + 6;
580d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
581d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 4) >= 62)
582d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
583d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 4) - 62 + 47;
584d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
585d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 60)
586d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
587d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 60 + 141;
588d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
589d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 64)
590d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
591d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 64 + 205;
592d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
593d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 32)
594d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
595d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 32 + 261;
596d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
597d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
598d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
599d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp & 0x3f) + 357;
600d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
601d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
602d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_15 + tmp);
603d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (13 - (cw & 0xFF));
604d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
605d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
606d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
607d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
608d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
609d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
610d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
611d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
612d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab16(tmp3Bits *pMainData)
613d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
614d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
615d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
616d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
617d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 17);    /*  huffTable_16  */
618d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if (tmp >> 16)
619d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
620d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = 0;
621d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
622d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 13) >= 4)
623d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
624d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 13) - 4 + 1;
625d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
626d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 9) >= 38)
627d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
628d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 9) - 38 + 5;
629d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
630d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 7) >= 94)
631d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
632d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 7) - 94 + 31;
633d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
634d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 5) >= 214)
635d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
636d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 5) - 214 + 89;
637d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
638d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 704)
639d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
640d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if ((tmp >> 4) >= 384)
641d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
642d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp >> 4) - 384 + 315;
643d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
644d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
645d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
646d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp >> 3) - 704 + 251;
647d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
648d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
649d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 8) >= 14)
650d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
651d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 8) - 14 + 359;
652d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
653d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp) >= 3456)
654d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
655d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if ((tmp >> 2) >= 868)
656d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
657d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp >> 2) - 868 + 383;
658d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
659d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
660d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
661d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp) - 3456 + 367;
662d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
663d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
664d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
665d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
666d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = ((tmp >> 6) & 0x3f) + 411;
667d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
668d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
669d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_16 + tmp);
670d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (17 - (cw & 0xFF));
671d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
672d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
673d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
674d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
675d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
676d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
677d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
678d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
679d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
680d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab24(tmp3Bits *pMainData)
681d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
682d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp;
683d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 cw;
684d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
685d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    tmp = getUpTo17bits(pMainData, 12);    /*  huffTable_24  */
686d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 6) >= 41)
687d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
688d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 6) - 41;
689d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
690d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 3) >= 218)
691d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
692d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 3) - 218 + 23;
693d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
694d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 2) >= 336)
695d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
696d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 2) - 336 + 133;
697d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
698d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 520)
699d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
700d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp >> 1) - 520 + 233;
701d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
702d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp) >= 1024)
703d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
704d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = (tmp) - 1024 + 385;
705d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
706d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else if ((tmp >> 1) >= 352)
707d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
708d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        if ((tmp >> 8) == 3)
709d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
710d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp >> 8) - 3 + 433;
711d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
712d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        else
713d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        {
714d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber            tmp = (tmp >> 1) - 352 + 401;
715d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        }
716d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
717d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
718d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
719d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        tmp = ((tmp >> 4) & 0x3f) + 434;
720d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
721d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
722d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    cw = *(huffTable_24 + tmp);
723d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    pMainData->usedBits -= (12 - (cw & 0xFF));
724d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
725d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return(cw >> 8);
726d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
727d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
728d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
729d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*----------------------------------------------------------------------------
730d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE
731d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/
732d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab32(tmp3Bits *pMainData)
733d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
734d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint32 tmp = getUpTo9bits(pMainData, 6);    /*  huffTable_32  */
735d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    if ((tmp >> 5))
736d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
737d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        pMainData->usedBits -= 5;
738d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return(0);
739d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
740d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    else
741d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
742d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        uint16 cw = *(huffTable_32 + (tmp & 0x1f));
743d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        pMainData->usedBits -= (6 - (cw & 0xFF));
744d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
745d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return(cw >> 8);
746d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
747d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
748d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
749d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
750d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
751d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 pvmp3_decode_huff_cw_tab33(tmp3Bits *pMainData)
752d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
753d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
754d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    uint16 tmp = getUpTo9bits(pMainData, 4);    /*  huffTable_33  */
755d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
756d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    return((0x0f - tmp));
757d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
758d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
759