/*
* MPEG Audio decoder
* copyright (c) 2002 Fabrice Bellard
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* mpeg audio layer decoder tables.
*/
#include <stddef.h>
#include <stdint.h>
#include "libavutil/avassert.h"
#include "libavutil/libm.h"
#include "libavutil/thread.h"
#include "mpegaudiodata.h"
#include "mpegaudiodec_common_tablegen.h"
uint16_t ff_scale_factor_modshift[64 ];
static int16_t division_tab3[1 << 6 ];
static int16_t division_tab5[1 << 8 ];
static int16_t division_tab9[1 << 11 ];
int16_t *const ff_division_tabs[4 ] = {
division_tab3, division_tab5, NULL, division_tab9
};
/*******************************************************/
/* layer 3 tables */
const uint8_t ff_slen_table[2 ][16 ] = {
{ 0 , 0 , 0 , 0 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 4 , 4 },
{ 0 , 1 , 2 , 3 , 0 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 2 , 3 },
};
const uint8_t ff_lsf_nsf_table[6 ][3 ][4 ] = {
{ { 6 , 5 , 5 , 5 }, { 9 , 9 , 9 , 9 }, { 6 , 9 , 9 , 9 } },
{ { 6 , 5 , 7 , 3 }, { 9 , 9 , 12 , 6 }, { 6 , 9 , 12 , 6 } },
{ { 11 , 10 , 0 , 0 }, { 18 , 18 , 0 , 0 }, { 15 , 18 , 0 , 0 } },
{ { 7 , 7 , 7 , 0 }, { 12 , 12 , 12 , 0 }, { 6 , 15 , 12 , 0 } },
{ { 6 , 6 , 6 , 3 }, { 12 , 9 , 9 , 6 }, { 6 , 12 , 9 , 6 } },
{ { 8 , 8 , 5 , 0 }, { 15 , 12 , 9 , 0 }, { 6 , 18 , 9 , 0 } },
};
/* mpegaudio layer 3 huffman tables */
const VLCElem *ff_huff_vlc[16 ];
static VLCElem huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 +
204 + 190 + 170 + 542 + 460 + 662 + 414 ];
VLC ff_huff_quad_vlc[2 ];
static VLCElem huff_quad_vlc_tables[64 + 16 ];
static const uint8_t mpa_hufflens[] = {
/* Huffman table 1 - 4 entries */
3 , 3 , 2 , 1 ,
/* Huffman table 2 - 9 entries */
6 , 6 , 5 , 5 , 5 , 3 , 3 , 3 , 1 ,
/* Huffman table 3 - 9 entries */
6 , 6 , 5 , 5 , 5 , 3 , 2 , 2 , 2 ,
/* Huffman table 5 - 16 entries */
8 , 8 , 7 , 6 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 3 , 3 , 3 , 1 ,
/* Huffman table 6 - 16 entries */
7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 2 , 3 , 3 ,
/* Huffman table 7 - 36 entries */
10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 9 , 9 , 8 , 9 , 9 , 8 , 8 , 7 , 7 ,
7 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 5 , 6 , 6 , 4 , 3 , 3 , 1 ,
/* Huffman table 8 - 36 entries */
11 , 11 , 10 , 9 , 10 , 10 , 9 , 9 , 9 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 6 , 6 , 6 , 4 , 4 , 2 , 3 , 3 , 2 ,
/* Huffman table 9 - 36 entries */
9 , 9 , 8 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 8 , 8 , 7 , 7 , 7 , 7 ,
6 , 6 , 6 , 6 , 5 , 5 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 ,
/* Huffman table 10 - 64 entries */
11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 10 , 9 , 9 , 10 ,
10 , 9 , 9 , 10 , 10 , 9 , 10 , 10 , 8 , 8 , 9 , 9 , 10 , 10 , 9 , 9 , 10 , 10 , 8 ,
8 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 6 ,
6 , 6 , 6 , 4 , 3 , 3 , 1 ,
/* Huffman table 11 - 64 entries */
10 , 10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 8 ,
8 , 9 , 9 , 7 , 8 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 7 , 8 , 8 , 7 , 7 ,
8 , 8 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 7 , 7 , 6 , 5 ,
4 , 5 , 5 , 3 , 3 , 3 , 2 ,
/* Huffman table 12 - 64 entries */
10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 ,
9 , 9 , 8 , 8 , 8 , 8 , 8 , 9 , 9 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , 7 ,
7 , 7 , 7 , 8 , 8 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 7 , 7 , 6 , 5 , 5 , 5 , 4 ,
4 , 5 , 5 , 4 , 3 , 3 , 3 ,
/* Huffman table 13 - 256 entries */
19 , 19 , 18 , 17 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 17 , 17 , 15 , 15 , 16 ,
16 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 16 , 16 , 15 , 16 , 16 , 14 , 14 , 15 ,
15 , 15 , 15 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 15 , 15 , 14 , 13 , 14 ,
14 , 13 , 13 , 14 , 14 , 13 , 14 , 14 , 13 , 14 , 14 , 13 , 14 , 14 , 13 , 13 , 14 , 14 , 12 ,
12 , 12 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 13 , 13 , 12 , 12 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 13 , 13 , 12 , 12 , 12 , 12 , 13 , 13 , 13 , 13 , 12 ,
13 , 13 , 12 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 12 , 12 , 11 ,
11 , 12 , 12 , 11 , 12 , 12 , 12 , 12 , 11 , 11 , 12 , 12 , 11 , 12 , 12 , 11 , 12 , 12 , 11 ,
12 , 12 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 11 , 11 ,
10 , 11 , 11 , 10 , 11 , 11 , 11 , 11 , 10 , 10 , 11 , 11 , 10 , 10 , 11 , 11 , 11 , 11 , 11 ,
11 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 9 , 9 , 9 , 10 , 10 , 9 , 9 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 9 , 9 ,
9 , 8 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 7 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 ,
7 , 6 , 6 , 6 , 6 , 4 , 4 , 3 , 1 ,
/* Huffman table 15 - 256 entries */
13 , 13 , 13 , 13 , 12 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 13 , 13 , 12 , 12 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 13 ,
13 , 11 , 11 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 12 , 12 , 11 , 11 , 11 , 11 , 11 ,
11 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 11 , 11 , 10 , 10 , 10 , 10 , 11 , 11 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 9 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 10 , 10 , 10 , 10 , 9 , 10 , 10 , 9 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 9 , 9 , 9 ,
9 , 9 , 9 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 ,
8 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 9 , 9 , 8 , 7 , 8 , 8 , 7 , 7 ,
7 , 7 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 6 , 7 , 7 , 6 , 6 , 7 , 7 , 6 , 6 , 6 ,
5 , 5 , 5 , 5 , 5 , 3 , 4 , 4 , 3 ,
/* Huffman table 16 - 256 entries */
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 8 ,
10 , 10 , 9 , 9 , 9 , 9 , 10 , 16 , 17 , 17 , 15 , 15 , 16 , 16 , 14 , 15 , 15 , 14 , 14 ,
15 , 15 , 14 , 14 , 15 , 15 , 15 , 15 , 14 , 15 , 15 , 14 , 13 , 8 , 9 , 9 , 8 , 8 , 13 ,
14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 13 , 13 , 14 , 14 , 14 , 14 , 13 , 14 , 14 ,
13 , 13 , 13 , 14 , 14 , 14 , 14 , 13 , 13 , 14 , 14 , 13 , 14 , 14 , 12 , 13 , 13 , 13 , 13 ,
13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 13 ,
13 , 12 , 12 , 13 , 13 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 13 , 13 , 11 , 12 , 12 , 12 ,
12 , 11 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 12 , 12 , 11 , 11 , 11 , 11 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 12 , 11 , 12 , 12 , 11 , 12 , 12 , 11 , 12 , 12 , 11 , 12 , 12 , 11 ,
10 , 10 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 11 , 11 , 10 , 10 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 10 , 11 , 11 , 10 , 10 , 10 , 11 , 11 , 10 , 10 , 11 , 11 , 10 , 10 , 11 , 11 ,
10 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 10 , 10 , 9 , 10 , 10 , 9 , 9 ,
8 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 9 , 9 , 8 , 8 , 7 , 7 , 8 , 8 ,
7 , 6 , 6 , 6 , 6 , 4 , 4 , 3 , 1 ,
/* Huffman table 24 - 256 entries */
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 8 , 8 , 7 , 7 , 8 , 8 , 7 , 7 , 7 , 7 ,
7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 9 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 4 , 11 , 11 , 11 , 11 , 12 , 12 , 11 , 10 , 11 , 11 , 10 , 10 , 10 , 10 , 11 , 11 , 10 ,
10 , 10 , 10 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 ,
10 , 10 , 11 , 11 , 10 , 11 , 11 , 10 , 9 , 10 , 10 , 10 , 10 , 11 , 11 , 10 , 9 , 9 , 10 ,
10 , 9 , 10 , 10 , 10 , 10 , 9 , 9 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 9 , 9 , 9 , 10 , 10 , 8 , 9 , 9 , 8 ,
8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 8 ,
8 , 9 , 9 , 7 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 7 , 7 , 6 , 6 , 7 , 7 ,
6 , 5 , 5 , 6 , 6 , 4 , 4 , 4 , 4 ,
};
static const uint8_t mpa_huffsymbols[] = {
/* Huffman table 1 - 4 entries */
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 2 - 9 entries */
0 x22, 0 x02, 0 x12, 0 x21, 0 x20, 0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 3 - 9 entries */
0 x22, 0 x02, 0 x12, 0 x21, 0 x20, 0 x10, 0 x11, 0 x01, 0 x00,
/* Huffman table 5 - 16 entries */
0 x33, 0 x23, 0 x32, 0 x31, 0 x13, 0 x03, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 6 - 16 entries */
0 x33, 0 x03, 0 x23, 0 x32, 0 x30, 0 x13, 0 x31, 0 x22, 0 x02, 0 x12, 0 x21, 0 x20,
0 x01, 0 x11, 0 x10, 0 x00,
/* Huffman table 7 - 36 entries */
0 x55, 0 x45, 0 x54, 0 x53, 0 x35, 0 x44, 0 x25, 0 x52, 0 x15, 0 x51, 0 x05, 0 x34,
0 x50, 0 x43, 0 x33, 0 x24, 0 x42, 0 x14, 0 x41, 0 x40, 0 x04, 0 x23, 0 x32, 0 x03,
0 x13, 0 x31, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20, 0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 8 - 36 entries */
0 x55, 0 x54, 0 x45, 0 x53, 0 x35, 0 x44, 0 x25, 0 x52, 0 x05, 0 x15, 0 x51, 0 x34,
0 x43, 0 x50, 0 x33, 0 x24, 0 x42, 0 x14, 0 x41, 0 x04, 0 x40, 0 x23, 0 x32, 0 x13,
0 x31, 0 x03, 0 x30, 0 x22, 0 x02, 0 x20, 0 x12, 0 x21, 0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 9 - 36 entries */
0 x55, 0 x45, 0 x35, 0 x53, 0 x54, 0 x05, 0 x44, 0 x25, 0 x52, 0 x15, 0 x51, 0 x34,
0 x43, 0 x50, 0 x04, 0 x24, 0 x42, 0 x33, 0 x40, 0 x14, 0 x41, 0 x23, 0 x32, 0 x13,
0 x31, 0 x03, 0 x30, 0 x22, 0 x02, 0 x12, 0 x21, 0 x20, 0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 10 - 64 entries */
0 x77, 0 x67, 0 x76, 0 x57, 0 x75, 0 x66, 0 x47, 0 x74, 0 x56, 0 x65, 0 x37, 0 x73,
0 x46, 0 x55, 0 x54, 0 x63, 0 x27, 0 x72, 0 x64, 0 x07, 0 x70, 0 x62, 0 x45, 0 x35,
0 x06, 0 x53, 0 x44, 0 x17, 0 x71, 0 x36, 0 x26, 0 x25, 0 x52, 0 x15, 0 x51, 0 x34,
0 x43, 0 x16, 0 x61, 0 x60, 0 x05, 0 x50, 0 x24, 0 x42, 0 x33, 0 x04, 0 x14, 0 x41,
0 x40, 0 x23, 0 x32, 0 x03, 0 x13, 0 x31, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 11 - 64 entries */
0 x77, 0 x67, 0 x76, 0 x75, 0 x66, 0 x47, 0 x74, 0 x57, 0 x55, 0 x56, 0 x65, 0 x37,
0 x73, 0 x46, 0 x45, 0 x54, 0 x35, 0 x53, 0 x27, 0 x72, 0 x64, 0 x07, 0 x71, 0 x17,
0 x70, 0 x36, 0 x63, 0 x60, 0 x44, 0 x25, 0 x52, 0 x05, 0 x15, 0 x62, 0 x26, 0 x06,
0 x16, 0 x61, 0 x51, 0 x34, 0 x50, 0 x43, 0 x33, 0 x24, 0 x42, 0 x14, 0 x41, 0 x04,
0 x40, 0 x23, 0 x32, 0 x13, 0 x31, 0 x03, 0 x30, 0 x22, 0 x21, 0 x12, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 12 - 64 entries */
0 x77, 0 x67, 0 x76, 0 x57, 0 x75, 0 x66, 0 x47, 0 x74, 0 x65, 0 x56, 0 x37, 0 x73,
0 x55, 0 x27, 0 x72, 0 x46, 0 x64, 0 x17, 0 x71, 0 x07, 0 x70, 0 x36, 0 x63, 0 x45,
0 x54, 0 x44, 0 x06, 0 x05, 0 x26, 0 x62, 0 x61, 0 x16, 0 x60, 0 x35, 0 x53, 0 x25,
0 x52, 0 x15, 0 x51, 0 x34, 0 x43, 0 x50, 0 x04, 0 x24, 0 x42, 0 x14, 0 x33, 0 x41,
0 x23, 0 x32, 0 x40, 0 x03, 0 x30, 0 x13, 0 x31, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x00, 0 x11, 0 x01, 0 x10,
/* Huffman table 13 - 256 entries */
0 xFE, 0 xFC, 0 xFD, 0 xED, 0 xFF, 0 xEF, 0 xDF, 0 xEE, 0 xCF, 0 xDE, 0 xBF, 0 xFB,
0 xCE, 0 xDC, 0 xAF, 0 xE9, 0 xEC, 0 xDD, 0 xFA, 0 xCD, 0 xBE, 0 xEB, 0 x9F, 0 xF9,
0 xEA, 0 xBD, 0 xDB, 0 x8F, 0 xF8, 0 xCC, 0 xAE, 0 x9E, 0 x8E, 0 x7F, 0 x7E, 0 xF7,
0 xDA, 0 xAD, 0 xBC, 0 xCB, 0 xF6, 0 x6F, 0 xE8, 0 x5F, 0 x9D, 0 xD9, 0 xF5, 0 xE7,
0 xAC, 0 xBB, 0 x4F, 0 xF4, 0 xCA, 0 xE6, 0 xF3, 0 x3F, 0 x8D, 0 xD8, 0 x2F, 0 xF2,
0 x6E, 0 x9C, 0 x0F, 0 xC9, 0 x5E, 0 xAB, 0 x7D, 0 xD7, 0 x4E, 0 xC8, 0 xD6, 0 x3E,
0 xB9, 0 x9B, 0 xAA, 0 x1F, 0 xF1, 0 xF0, 0 xBA, 0 xE5, 0 xE4, 0 x8C, 0 x6D, 0 xE3,
0 xE2, 0 x2E, 0 x0E, 0 x1E, 0 xE1, 0 xE0, 0 x5D, 0 xD5, 0 x7C, 0 xC7, 0 x4D, 0 x8B,
0 xB8, 0 xD4, 0 x9A, 0 xA9, 0 x6C, 0 xC6, 0 x3D, 0 xD3, 0 x7B, 0 x2D, 0 xD2, 0 x1D,
0 xB7, 0 x5C, 0 xC5, 0 x99, 0 x7A, 0 xC3, 0 xA7, 0 x97, 0 x4B, 0 xD1, 0 x0D, 0 xD0,
0 x8A, 0 xA8, 0 x4C, 0 xC4, 0 x6B, 0 xB6, 0 x3C, 0 x2C, 0 xC2, 0 x5B, 0 xB5, 0 x89,
0 x1C, 0 xC1, 0 x98, 0 x0C, 0 xC0, 0 xB4, 0 x6A, 0 xA6, 0 x79, 0 x3B, 0 xB3, 0 x88,
0 x5A, 0 x2B, 0 xA5, 0 x69, 0 xA4, 0 x78, 0 x87, 0 x94, 0 x77, 0 x76, 0 xB2, 0 x1B,
0 xB1, 0 x0B, 0 xB0, 0 x96, 0 x4A, 0 x3A, 0 xA3, 0 x59, 0 x95, 0 x2A, 0 xA2, 0 x1A,
0 xA1, 0 x0A, 0 x68, 0 xA0, 0 x86, 0 x49, 0 x93, 0 x39, 0 x58, 0 x85, 0 x67, 0 x29,
0 x92, 0 x57, 0 x75, 0 x38, 0 x83, 0 x66, 0 x47, 0 x74, 0 x56, 0 x65, 0 x73, 0 x19,
0 x91, 0 x09, 0 x90, 0 x48, 0 x84, 0 x72, 0 x46, 0 x64, 0 x28, 0 x82, 0 x18, 0 x37,
0 x27, 0 x17, 0 x71, 0 x55, 0 x07, 0 x70, 0 x36, 0 x63, 0 x45, 0 x54, 0 x26, 0 x62,
0 x35, 0 x81, 0 x08, 0 x80, 0 x16, 0 x61, 0 x06, 0 x60, 0 x53, 0 x44, 0 x25, 0 x52,
0 x05, 0 x15, 0 x51, 0 x34, 0 x43, 0 x50, 0 x24, 0 x42, 0 x33, 0 x14, 0 x41, 0 x04,
0 x40, 0 x23, 0 x32, 0 x13, 0 x31, 0 x03, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 15 - 256 entries */
0 xFF, 0 xEF, 0 xFE, 0 xDF, 0 xEE, 0 xFD, 0 xCF, 0 xFC, 0 xDE, 0 xED, 0 xBF, 0 xFB,
0 xCE, 0 xEC, 0 xDD, 0 xAF, 0 xFA, 0 xBE, 0 xEB, 0 xCD, 0 xDC, 0 x9F, 0 xF9, 0 xEA,
0 xBD, 0 xDB, 0 x8F, 0 xF8, 0 xCC, 0 x9E, 0 xE9, 0 x7F, 0 xF7, 0 xAD, 0 xDA, 0 xBC,
0 x6F, 0 xAE, 0 x0F, 0 xCB, 0 xF6, 0 x8E, 0 xE8, 0 x5F, 0 x9D, 0 xF5, 0 x7E, 0 xE7,
0 xAC, 0 xCA, 0 xBB, 0 xD9, 0 x8D, 0 x4F, 0 xF4, 0 x3F, 0 xF3, 0 xD8, 0 xE6, 0 x2F,
0 xF2, 0 x6E, 0 xF0, 0 x1F, 0 xF1, 0 x9C, 0 xC9, 0 x5E, 0 xAB, 0 xBA, 0 xE5, 0 x7D,
0 xD7, 0 x4E, 0 xE4, 0 x8C, 0 xC8, 0 x3E, 0 x6D, 0 xD6, 0 xE3, 0 x9B, 0 xB9, 0 x2E,
0 xAA, 0 xE2, 0 x1E, 0 xE1, 0 x0E, 0 xE0, 0 x5D, 0 xD5, 0 x7C, 0 xC7, 0 x4D, 0 x8B,
0 xD4, 0 xB8, 0 x9A, 0 xA9, 0 x6C, 0 xC6, 0 x3D, 0 xD3, 0 xD2, 0 x2D, 0 x0D, 0 x1D,
0 x7B, 0 xB7, 0 xD1, 0 x5C, 0 xD0, 0 xC5, 0 x8A, 0 xA8, 0 x4C, 0 xC4, 0 x6B, 0 xB6,
0 x99, 0 x0C, 0 x3C, 0 xC3, 0 x7A, 0 xA7, 0 xA6, 0 xC0, 0 x0B, 0 xC2, 0 x2C, 0 x5B,
0 xB5, 0 x1C, 0 x89, 0 x98, 0 xC1, 0 x4B, 0 xB4, 0 x6A, 0 x3B, 0 x79, 0 xB3, 0 x97,
0 x88, 0 x2B, 0 x5A, 0 xB2, 0 xA5, 0 x1B, 0 xB1, 0 xB0, 0 x69, 0 x96, 0 x4A, 0 xA4,
0 x78, 0 x87, 0 x3A, 0 xA3, 0 x59, 0 x95, 0 x2A, 0 xA2, 0 x1A, 0 xA1, 0 x0A, 0 xA0,
0 x68, 0 x86, 0 x49, 0 x94, 0 x39, 0 x93, 0 x77, 0 x09, 0 x58, 0 x85, 0 x29, 0 x67,
0 x76, 0 x92, 0 x91, 0 x19, 0 x90, 0 x48, 0 x84, 0 x57, 0 x75, 0 x38, 0 x83, 0 x66,
0 x47, 0 x28, 0 x82, 0 x18, 0 x81, 0 x74, 0 x08, 0 x80, 0 x56, 0 x65, 0 x37, 0 x73,
0 x46, 0 x27, 0 x72, 0 x64, 0 x17, 0 x55, 0 x71, 0 x07, 0 x70, 0 x36, 0 x63, 0 x45,
0 x54, 0 x26, 0 x62, 0 x16, 0 x06, 0 x60, 0 x35, 0 x61, 0 x53, 0 x44, 0 x25, 0 x52,
0 x15, 0 x51, 0 x05, 0 x50, 0 x34, 0 x43, 0 x24, 0 x42, 0 x33, 0 x41, 0 x14, 0 x04,
0 x23, 0 x32, 0 x40, 0 x03, 0 x13, 0 x31, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 16 - 256 entries */
0 xEF, 0 xFE, 0 xDF, 0 xFD, 0 xCF, 0 xFC, 0 xBF, 0 xFB, 0 xAF, 0 xFA, 0 x9F, 0 xF9,
0 xF8, 0 x8F, 0 x7F, 0 xF7, 0 x6F, 0 xF6, 0 xFF, 0 x5F, 0 xF5, 0 x4F, 0 xF4, 0 xF3,
0 xF0, 0 x3F, 0 xCE, 0 xEC, 0 xDD, 0 xDE, 0 xE9, 0 xEA, 0 xD9, 0 xEE, 0 xED, 0 xEB,
0 xBE, 0 xCD, 0 xDC, 0 xDB, 0 xAE, 0 xCC, 0 xAD, 0 xDA, 0 x7E, 0 xAC, 0 xCA, 0 xC9,
0 x7D, 0 x5E, 0 xBD, 0 xF2, 0 x2F, 0 x0F, 0 x1F, 0 xF1, 0 x9E, 0 xBC, 0 xCB, 0 x8E,
0 xE8, 0 x9D, 0 xE7, 0 xBB, 0 x8D, 0 xD8, 0 x6E, 0 xE6, 0 x9C, 0 xAB, 0 xBA, 0 xE5,
0 xD7, 0 x4E, 0 xE4, 0 x8C, 0 xC8, 0 x3E, 0 x6D, 0 xD6, 0 x9B, 0 xB9, 0 xAA, 0 xE1,
0 xD4, 0 xB8, 0 xA9, 0 x7B, 0 xB7, 0 xD0, 0 xE3, 0 x0E, 0 xE0, 0 x5D, 0 xD5, 0 x7C,
0 xC7, 0 x4D, 0 x8B, 0 x9A, 0 x6C, 0 xC6, 0 x3D, 0 x5C, 0 xC5, 0 x0D, 0 x8A, 0 xA8,
0 x99, 0 x4C, 0 xB6, 0 x7A, 0 x3C, 0 x5B, 0 x89, 0 x1C, 0 xC0, 0 x98, 0 x79, 0 xE2,
0 x2E, 0 x1E, 0 xD3, 0 x2D, 0 xD2, 0 xD1, 0 x3B, 0 x97, 0 x88, 0 x1D, 0 xC4, 0 x6B,
0 xC3, 0 xA7, 0 x2C, 0 xC2, 0 xB5, 0 xC1, 0 x0C, 0 x4B, 0 xB4, 0 x6A, 0 xA6, 0 xB3,
0 x5A, 0 xA5, 0 x2B, 0 xB2, 0 x1B, 0 xB1, 0 x0B, 0 xB0, 0 x69, 0 x96, 0 x4A, 0 xA4,
0 x78, 0 x87, 0 xA3, 0 x3A, 0 x59, 0 x2A, 0 x95, 0 x68, 0 xA1, 0 x86, 0 x77, 0 x94,
0 x49, 0 x57, 0 x67, 0 xA2, 0 x1A, 0 x0A, 0 xA0, 0 x39, 0 x93, 0 x58, 0 x85, 0 x29,
0 x92, 0 x76, 0 x09, 0 x19, 0 x91, 0 x90, 0 x48, 0 x84, 0 x75, 0 x38, 0 x83, 0 x66,
0 x28, 0 x82, 0 x47, 0 x74, 0 x18, 0 x81, 0 x80, 0 x08, 0 x56, 0 x37, 0 x73, 0 x65,
0 x46, 0 x27, 0 x72, 0 x64, 0 x55, 0 x07, 0 x17, 0 x71, 0 x70, 0 x36, 0 x63, 0 x45,
0 x54, 0 x26, 0 x62, 0 x16, 0 x61, 0 x06, 0 x60, 0 x53, 0 x35, 0 x44, 0 x25, 0 x52,
0 x51, 0 x15, 0 x05, 0 x34, 0 x43, 0 x50, 0 x24, 0 x42, 0 x33, 0 x14, 0 x41, 0 x04,
0 x40, 0 x23, 0 x32, 0 x13, 0 x31, 0 x03, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
/* Huffman table 24 - 256 entries */
0 xEF, 0 xFE, 0 xDF, 0 xFD, 0 xCF, 0 xFC, 0 xBF, 0 xFB, 0 xFA, 0 xAF, 0 x9F, 0 xF9,
0 xF8, 0 x8F, 0 x7F, 0 xF7, 0 x6F, 0 xF6, 0 x5F, 0 xF5, 0 x4F, 0 xF4, 0 x3F, 0 xF3,
0 x2F, 0 xF2, 0 xF1, 0 x1F, 0 xF0, 0 x0F, 0 xEE, 0 xDE, 0 xED, 0 xCE, 0 xEC, 0 xDD,
0 xBE, 0 xEB, 0 xCD, 0 xDC, 0 xAE, 0 xEA, 0 xBD, 0 xDB, 0 xCC, 0 x9E, 0 xE9, 0 xAD,
0 xDA, 0 xBC, 0 xCB, 0 x8E, 0 xE8, 0 x9D, 0 xD9, 0 x7E, 0 xE7, 0 xAC, 0 xFF, 0 xCA,
0 xBB, 0 x8D, 0 xD8, 0 x0E, 0 xE0, 0 x0D, 0 xE6, 0 x6E, 0 x9C, 0 xC9, 0 x5E, 0 xBA,
0 xE5, 0 xAB, 0 x7D, 0 xD7, 0 xE4, 0 x8C, 0 xC8, 0 x4E, 0 x2E, 0 x3E, 0 x6D, 0 xD6,
0 xE3, 0 x9B, 0 xB9, 0 xAA, 0 xE2, 0 x1E, 0 xE1, 0 x5D, 0 xD5, 0 x7C, 0 xC7, 0 x4D,
0 x8B, 0 xB8, 0 xD4, 0 x9A, 0 xA9, 0 x6C, 0 xC6, 0 x3D, 0 xD3, 0 x2D, 0 xD2, 0 x1D,
0 x7B, 0 xB7, 0 xD1, 0 x5C, 0 xC5, 0 x8A, 0 xA8, 0 x99, 0 x4C, 0 xC4, 0 x6B, 0 xB6,
0 xD0, 0 x0C, 0 x3C, 0 xC3, 0 x7A, 0 xA7, 0 x2C, 0 xC2, 0 x5B, 0 xB5, 0 x1C, 0 x89,
0 x98, 0 xC1, 0 x4B, 0 xC0, 0 x0B, 0 x3B, 0 xB0, 0 x0A, 0 x1A, 0 xB4, 0 x6A, 0 xA6,
0 x79, 0 x97, 0 xA0, 0 x09, 0 x90, 0 xB3, 0 x88, 0 x2B, 0 x5A, 0 xB2, 0 xA5, 0 x1B,
0 xB1, 0 x69, 0 x96, 0 xA4, 0 x4A, 0 x78, 0 x87, 0 x3A, 0 xA3, 0 x59, 0 x95, 0 x2A,
0 xA2, 0 xA1, 0 x68, 0 x86, 0 x77, 0 x49, 0 x94, 0 x39, 0 x93, 0 x58, 0 x85, 0 x29,
0 x67, 0 x76, 0 x92, 0 x19, 0 x91, 0 x48, 0 x84, 0 x57, 0 x75, 0 x38, 0 x83, 0 x66,
0 x28, 0 x82, 0 x18, 0 x47, 0 x74, 0 x81, 0 x08, 0 x80, 0 x56, 0 x65, 0 x17, 0 x07,
0 x70, 0 x73, 0 x37, 0 x27, 0 x72, 0 x46, 0 x64, 0 x55, 0 x71, 0 x36, 0 x63, 0 x45,
0 x54, 0 x26, 0 x62, 0 x16, 0 x61, 0 x06, 0 x60, 0 x35, 0 x53, 0 x44, 0 x25, 0 x52,
0 x15, 0 x05, 0 x50, 0 x51, 0 x34, 0 x43, 0 x24, 0 x42, 0 x33, 0 x14, 0 x41, 0 x04,
0 x40, 0 x23, 0 x32, 0 x13, 0 x31, 0 x03, 0 x30, 0 x22, 0 x12, 0 x21, 0 x02, 0 x20,
0 x11, 0 x01, 0 x10, 0 x00,
};
static const uint8_t mpa_huff_sizes_minus_one[] =
{
3 , 8 , 8 , 15 , 15 , 35 , 35 , 35 , 63 , 63 , 63 , 255 , 255 , 255 , 255
};
const uint8_t ff_mpa_huff_data[32 ][2 ] = {
{ 0 , 0 },
{ 1 , 0 },
{ 2 , 0 },
{ 3 , 0 },
{ 0 , 0 },
{ 4 , 0 },
{ 5 , 0 },
{ 6 , 0 },
{ 7 , 0 },
{ 8 , 0 },
{ 9 , 0 },
{ 10 , 0 },
{ 11 , 0 },
{ 12 , 0 },
{ 0 , 0 },
{ 13 , 0 },
{ 14 , 1 },
{ 14 , 2 },
{ 14 , 3 },
{ 14 , 4 },
{ 14 , 6 },
{ 14 , 8 },
{ 14 , 10 },
{ 14 , 13 },
{ 15 , 4 },
{ 15 , 5 },
{ 15 , 6 },
{ 15 , 7 },
{ 15 , 8 },
{ 15 , 9 },
{ 15 , 11 },
{ 15 , 13 },
};
/* huffman tables for quadrules */
static const uint8_t mpa_quad_codes[2 ][16 ] = {
{ 1 , 5 , 4 , 5 , 6 , 5 , 4 , 4 , 7 , 3 , 6 , 0 , 7 , 2 , 3 , 1 , },
{ 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , },
};
static const uint8_t mpa_quad_bits[2 ][16 ] = {
{ 1 , 4 , 4 , 5 , 4 , 6 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 6 , },
{ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , },
};
const uint8_t ff_band_size_long[9 ][22 ] = {
{ 4 , 4 , 4 , 4 , 4 , 4 , 6 , 6 , 8 , 8 , 10 ,
12 , 16 , 20 , 24 , 28 , 34 , 42 , 50 , 54 , 76 , 158 , }, /* 44100 */
{ 4 , 4 , 4 , 4 , 4 , 4 , 6 , 6 , 6 , 8 , 10 ,
12 , 16 , 18 , 22 , 28 , 34 , 40 , 46 , 54 , 54 , 192 , }, /* 48000 */
{ 4 , 4 , 4 , 4 , 4 , 4 , 6 , 6 , 8 , 10 , 12 ,
16 , 20 , 24 , 30 , 38 , 46 , 56 , 68 , 84 , 102 , 26 , }, /* 32000 */
{ 6 , 6 , 6 , 6 , 6 , 6 , 8 , 10 , 12 , 14 , 16 ,
20 , 24 , 28 , 32 , 38 , 46 , 52 , 60 , 68 , 58 , 54 , }, /* 22050 */
{ 6 , 6 , 6 , 6 , 6 , 6 , 8 , 10 , 12 , 14 , 16 ,
18 , 22 , 26 , 32 , 38 , 46 , 54 , 62 , 70 , 76 , 36 , }, /* 24000 */
{ 6 , 6 , 6 , 6 , 6 , 6 , 8 , 10 , 12 , 14 , 16 ,
20 , 24 , 28 , 32 , 38 , 46 , 52 , 60 , 68 , 58 , 54 , }, /* 16000 */
{ 6 , 6 , 6 , 6 , 6 , 6 , 8 , 10 , 12 , 14 , 16 ,
20 , 24 , 28 , 32 , 38 , 46 , 52 , 60 , 68 , 58 , 54 , }, /* 11025 */
{ 6 , 6 , 6 , 6 , 6 , 6 , 8 , 10 , 12 , 14 , 16 ,
20 , 24 , 28 , 32 , 38 , 46 , 52 , 60 , 68 , 58 , 54 , }, /* 12000 */
{ 12 , 12 , 12 , 12 , 12 , 12 , 16 , 20 , 24 , 28 , 32 ,
40 , 48 , 56 , 64 , 76 , 90 , 2 , 2 , 2 , 2 , 2 , }, /* 8000 */
};
const uint8_t ff_band_size_short[9 ][13 ] = {
{ 4 , 4 , 4 , 4 , 6 , 8 , 10 , 12 , 14 , 18 , 22 , 30 , 56 , }, /* 44100 */
{ 4 , 4 , 4 , 4 , 6 , 6 , 10 , 12 , 14 , 16 , 20 , 26 , 66 , }, /* 48000 */
{ 4 , 4 , 4 , 4 , 6 , 8 , 12 , 16 , 20 , 26 , 34 , 42 , 12 , }, /* 32000 */
{ 4 , 4 , 4 , 6 , 6 , 8 , 10 , 14 , 18 , 26 , 32 , 42 , 18 , }, /* 22050 */
{ 4 , 4 , 4 , 6 , 8 , 10 , 12 , 14 , 18 , 24 , 32 , 44 , 12 , }, /* 24000 */
{ 4 , 4 , 4 , 6 , 8 , 10 , 12 , 14 , 18 , 24 , 30 , 40 , 18 , }, /* 16000 */
{ 4 , 4 , 4 , 6 , 8 , 10 , 12 , 14 , 18 , 24 , 30 , 40 , 18 , }, /* 11025 */
{ 4 , 4 , 4 , 6 , 8 , 10 , 12 , 14 , 18 , 24 , 30 , 40 , 18 , }, /* 12000 */
{ 8 , 8 , 8 , 12 , 16 , 20 , 24 , 28 , 36 , 2 , 2 , 2 , 26 , }, /* 8000 */
};
uint16_t ff_band_index_long[9 ][23 ];
const uint8_t ff_mpa_pretab[2 ][22 ] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 2 , 0 },
};
static av_cold void mpegaudiodec_common_init_static(void )
{
VLCInitState state = VLC_INIT_STATE(huff_vlc_tables);
const uint8_t *huff_sym = mpa_huffsymbols, *huff_lens = mpa_hufflens;
int offset;
/* scale factors table for layer 1/2 */
for (int i = 0 ; i < 64 ; i++) {
int shift, mod;
/* 1.0 (i = 3) is normalized to 2 ^ FRAC_BITS */
shift = i / 3 ;
mod = i % 3 ;
ff_scale_factor_modshift[i] = mod | (shift << 2 );
}
/* huffman decode tables */
for (int i = 0 ; i < 15 ;) {
uint16_t tmp_symbols[256 ];
int nb_codes_minus_one = mpa_huff_sizes_minus_one[i];
int j;
for (j = 0 ; j <= nb_codes_minus_one; j++) {
uint8_t high = huff_sym[j] & 0 xF0, low = huff_sym[j] & 0 xF;
tmp_symbols[j] = high << 1 | ((high && low) << 4 ) | low;
}
ff_huff_vlc[++i] = ff_vlc_init_tables_from_lengths(&state, 7 , j,
huff_lens, 1 ,
tmp_symbols, 2 , 2 ,
0 , 0 );
huff_lens += j;
huff_sym += j;
}
av_assert1(state.size == 0 );
offset = 0 ;
for (int i = 0 ; i < 2 ; i++) {
int bits = i == 0 ? 6 : 4 ;
ff_huff_quad_vlc[i].table = huff_quad_vlc_tables + offset;
ff_huff_quad_vlc[i].table_allocated = 1 << bits;
offset += 1 << bits;
vlc_init(&ff_huff_quad_vlc[i], bits, 16 ,
mpa_quad_bits[i], 1 , 1 , mpa_quad_codes[i], 1 , 1 ,
VLC_INIT_USE_STATIC);
}
av_assert0(offset == FF_ARRAY_ELEMS(huff_quad_vlc_tables));
for (int i = 0 ; i < 9 ; i++) {
int k = 0 ;
for (int j = 0 ; j < 22 ; j++) {
ff_band_index_long[i][j] = k;
k += ff_band_size_long[i][j] >> 1 ;
}
ff_band_index_long[i][22 ] = k;
}
for (int i = 0 ; i < 4 ; i++) {
if (ff_mpa_quant_bits[i] < 0 ) {
for (int j = 0 ; j < (1 << (-ff_mpa_quant_bits[i] + 1 )); j++) {
int val1, val2, val3, steps;
int val = j;
steps = ff_mpa_quant_steps[i];
val1 = val % steps;
val /= steps;
val2 = val % steps;
val3 = val / steps;
ff_division_tabs[i][j] = val1 + (val2 << 4 ) + (val3 << 8 );
}
}
}
mpegaudiodec_common_tableinit();
}
av_cold void ff_mpegaudiodec_common_init_static(void )
{
static AVOnce init_static_once = AV_ONCE_INIT;
ff_thread_once(&init_static_once, mpegaudiodec_common_init_static);
}
Messung V0.5 in Prozent C=89 H=71 G=80