Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * MPEG Audio decoder
  3.  * copyright (c) 2002 Fabrice Bellard
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21.  
  22. /**
  23.  * @file
  24.  * mpeg audio layer decoder tables.
  25.  */
  26.  
  27. #ifndef AVCODEC_MPEGAUDIODECTAB_H
  28. #define AVCODEC_MPEGAUDIODECTAB_H
  29.  
  30. #include <stddef.h>
  31. #include <stdint.h>
  32.  
  33. #include "mpegaudio.h"
  34.  
  35. /*******************************************************/
  36. /* layer 3 tables */
  37.  
  38. /* layer 3 huffman tables */
  39. typedef struct HuffTable {
  40.     int xsize;
  41.     const uint8_t *bits;
  42.     const uint16_t *codes;
  43. } HuffTable;
  44.  
  45. /* layer3 scale factor size */
  46. static const uint8_t slen_table[2][16] = {
  47.     { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
  48.     { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
  49. };
  50.  
  51. /* number of lsf scale factors for a given size */
  52. static const uint8_t lsf_nsf_table[6][3][4] = {
  53.     { {  6,  5,  5, 5 }, {  9,  9,  9, 9 }, {  6,  9,  9, 9 } },
  54.     { {  6,  5,  7, 3 }, {  9,  9, 12, 6 }, {  6,  9, 12, 6 } },
  55.     { { 11, 10,  0, 0 }, { 18, 18,  0, 0 }, { 15, 18,  0, 0 } },
  56.     { {  7,  7,  7, 0 }, { 12, 12, 12, 0 }, {  6, 15, 12, 0 } },
  57.     { {  6,  6,  6, 3 }, { 12,  9,  9, 6 }, {  6, 12,  9, 6 } },
  58.     { {  8,  8,  5, 0 }, { 15, 12,  9, 0 }, {  6, 18,  9, 0 } },
  59. };
  60.  
  61. /* mpegaudio layer 3 huffman tables */
  62.  
  63. static const uint16_t mpa_huffcodes_1[4] = {
  64.  0x0001, 0x0001, 0x0001, 0x0000,
  65. };
  66.  
  67. static const uint8_t mpa_huffbits_1[4] = {
  68.   1,  3,  2,  3,
  69. };
  70.  
  71. static const uint16_t mpa_huffcodes_2[9] = {
  72.  0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
  73.  0x0000,
  74. };
  75.  
  76. static const uint8_t mpa_huffbits_2[9] = {
  77.   1,  3,  6,  3,  3,  5,  5,  5,
  78.   6,
  79. };
  80.  
  81. static const uint16_t mpa_huffcodes_3[9] = {
  82.  0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
  83.  0x0000,
  84. };
  85.  
  86. static const uint8_t mpa_huffbits_3[9] = {
  87.   2,  2,  6,  3,  2,  5,  5,  5,
  88.   6,
  89. };
  90.  
  91. static const uint16_t mpa_huffcodes_5[16] = {
  92.  0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
  93.  0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
  94. };
  95.  
  96. static const uint8_t mpa_huffbits_5[16] = {
  97.   1,  3,  6,  7,  3,  3,  6,  7,
  98.   6,  6,  7,  8,  7,  6,  7,  8,
  99. };
  100.  
  101. static const uint16_t mpa_huffcodes_6[16] = {
  102.  0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
  103.  0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
  104. };
  105.  
  106. static const uint8_t mpa_huffbits_6[16] = {
  107.   3,  3,  5,  7,  3,  2,  4,  5,
  108.   4,  4,  5,  6,  6,  5,  6,  7,
  109. };
  110.  
  111. static const uint16_t mpa_huffcodes_7[36] = {
  112.  0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
  113.  0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
  114.  0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
  115.  0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
  116.  0x0005, 0x0003, 0x0002, 0x0000,
  117. };
  118.  
  119. static const uint8_t mpa_huffbits_7[36] = {
  120.   1,  3,  6,  8,  8,  9,  3,  4,
  121.   6,  7,  7,  8,  6,  5,  7,  8,
  122.   8,  9,  7,  7,  8,  9,  9,  9,
  123.   7,  7,  8,  9,  9, 10,  8,  8,
  124.   9, 10, 10, 10,
  125. };
  126.  
  127. static const uint16_t mpa_huffcodes_8[36] = {
  128.  0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
  129.  0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
  130.  0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
  131.  0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
  132.  0x0004, 0x0001, 0x0001, 0x0000,
  133. };
  134.  
  135. static const uint8_t mpa_huffbits_8[36] = {
  136.   2,  3,  6,  8,  8,  9,  3,  2,
  137.   4,  8,  8,  8,  6,  4,  6,  8,
  138.   8,  9,  8,  8,  8,  9,  9, 10,
  139.   8,  7,  8,  9, 10, 10,  9,  8,
  140.   9,  9, 11, 11,
  141. };
  142.  
  143. static const uint16_t mpa_huffcodes_9[36] = {
  144.  0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
  145.  0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
  146.  0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
  147.  0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
  148.  0x0006, 0x0002, 0x0006, 0x0000,
  149. };
  150.  
  151. static const uint8_t mpa_huffbits_9[36] = {
  152.   3,  3,  5,  6,  8,  9,  3,  3,
  153.   4,  5,  6,  8,  4,  4,  5,  6,
  154.   7,  8,  6,  5,  6,  7,  7,  8,
  155.   7,  6,  7,  7,  8,  9,  8,  7,
  156.   8,  8,  9,  9,
  157. };
  158.  
  159. static const uint16_t mpa_huffcodes_10[64] = {
  160.  0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
  161.  0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
  162.  0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
  163.  0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
  164.  0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
  165.  0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
  166.  0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
  167.  0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
  168. };
  169.  
  170. static const uint8_t mpa_huffbits_10[64] = {
  171.   1,  3,  6,  8,  9,  9,  9, 10,
  172.   3,  4,  6,  7,  8,  9,  8,  8,
  173.   6,  6,  7,  8,  9, 10,  9,  9,
  174.   7,  7,  8,  9, 10, 10,  9, 10,
  175.   8,  8,  9, 10, 10, 10, 10, 10,
  176.   9,  9, 10, 10, 11, 11, 10, 11,
  177.   8,  8,  9, 10, 10, 10, 11, 11,
  178.   9,  8,  9, 10, 10, 11, 11, 11,
  179. };
  180.  
  181. static const uint16_t mpa_huffcodes_11[64] = {
  182.  0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
  183.  0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
  184.  0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
  185.  0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
  186.  0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
  187.  0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
  188.  0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
  189.  0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
  190. };
  191.  
  192. static const uint8_t mpa_huffbits_11[64] = {
  193.   2,  3,  5,  7,  8,  9,  8,  9,
  194.   3,  3,  4,  6,  8,  8,  7,  8,
  195.   5,  5,  6,  7,  8,  9,  8,  8,
  196.   7,  6,  7,  9,  8, 10,  8,  9,
  197.   8,  8,  8,  9,  9, 10,  9, 10,
  198.   8,  8,  9, 10, 10, 11, 10, 11,
  199.   8,  7,  7,  8,  9, 10, 10, 10,
  200.   8,  7,  8,  9, 10, 10, 10, 10,
  201. };
  202.  
  203. static const uint16_t mpa_huffcodes_12[64] = {
  204.  0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
  205.  0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
  206.  0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
  207.  0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
  208.  0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
  209.  0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
  210.  0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
  211.  0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
  212. };
  213.  
  214. static const uint8_t mpa_huffbits_12[64] = {
  215.   4,  3,  5,  7,  8,  9,  9,  9,
  216.   3,  3,  4,  5,  7,  7,  8,  8,
  217.   5,  4,  5,  6,  7,  8,  7,  8,
  218.   6,  5,  6,  6,  7,  8,  8,  8,
  219.   7,  6,  7,  7,  8,  8,  8,  9,
  220.   8,  7,  8,  8,  8,  9,  8,  9,
  221.   8,  7,  7,  8,  8,  9,  9, 10,
  222.   9,  8,  8,  9,  9,  9,  9, 10,
  223. };
  224.  
  225. static const uint16_t mpa_huffcodes_13[256] = {
  226.  0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
  227.  0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
  228.  0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
  229.  0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
  230.  0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
  231.  0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
  232.  0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
  233.  0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
  234.  0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
  235.  0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
  236.  0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
  237.  0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
  238.  0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
  239.  0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
  240.  0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
  241.  0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
  242.  0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
  243.  0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
  244.  0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
  245.  0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
  246.  0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
  247.  0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
  248.  0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
  249.  0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
  250.  0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
  251.  0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
  252.  0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
  253.  0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
  254.  0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
  255.  0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
  256.  0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
  257.  0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
  258. };
  259.  
  260. static const uint8_t mpa_huffbits_13[256] = {
  261.   1,  4,  6,  7,  8,  9,  9, 10,
  262.   9, 10, 11, 11, 12, 12, 13, 13,
  263.   3,  4,  6,  7,  8,  8,  9,  9,
  264.   9,  9, 10, 10, 11, 12, 12, 12,
  265.   6,  6,  7,  8,  9,  9, 10, 10,
  266.   9, 10, 10, 11, 11, 12, 13, 13,
  267.   7,  7,  8,  9,  9, 10, 10, 10,
  268.  10, 11, 11, 11, 11, 12, 13, 13,
  269.   8,  7,  9,  9, 10, 10, 11, 11,
  270.  10, 11, 11, 12, 12, 13, 13, 14,
  271.   9,  8,  9, 10, 10, 10, 11, 11,
  272.  11, 11, 12, 11, 13, 13, 14, 14,
  273.   9,  9, 10, 10, 11, 11, 11, 11,
  274.  11, 12, 12, 12, 13, 13, 14, 14,
  275.  10,  9, 10, 11, 11, 11, 12, 12,
  276.  12, 12, 13, 13, 13, 14, 16, 16,
  277.   9,  8,  9, 10, 10, 11, 11, 12,
  278.  12, 12, 12, 13, 13, 14, 15, 15,
  279.  10,  9, 10, 10, 11, 11, 11, 13,
  280.  12, 13, 13, 14, 14, 14, 16, 15,
  281.  10, 10, 10, 11, 11, 12, 12, 13,
  282.  12, 13, 14, 13, 14, 15, 16, 17,
  283.  11, 10, 10, 11, 12, 12, 12, 12,
  284.  13, 13, 13, 14, 15, 15, 15, 16,
  285.  11, 11, 11, 12, 12, 13, 12, 13,
  286.  14, 14, 15, 15, 15, 16, 16, 16,
  287.  12, 11, 12, 13, 13, 13, 14, 14,
  288.  14, 14, 14, 15, 16, 15, 16, 16,
  289.  13, 12, 12, 13, 13, 13, 15, 14,
  290.  14, 17, 15, 15, 15, 17, 16, 16,
  291.  12, 12, 13, 14, 14, 14, 15, 14,
  292.  15, 15, 16, 16, 19, 18, 19, 16,
  293. };
  294.  
  295. static const uint16_t mpa_huffcodes_15[256] = {
  296.  0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
  297.  0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
  298.  0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
  299.  0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
  300.  0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
  301.  0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
  302.  0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
  303.  0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
  304.  0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
  305.  0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
  306.  0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
  307.  0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
  308.  0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
  309.  0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
  310.  0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
  311.  0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
  312.  0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
  313.  0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
  314.  0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
  315.  0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
  316.  0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
  317.  0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
  318.  0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
  319.  0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
  320.  0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
  321.  0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
  322.  0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
  323.  0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
  324.  0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
  325.  0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
  326.  0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
  327.  0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
  328. };
  329.  
  330. static const uint8_t mpa_huffbits_15[256] = {
  331.   3,  4,  5,  7,  7,  8,  9,  9,
  332.   9, 10, 10, 11, 11, 11, 12, 13,
  333.   4,  3,  5,  6,  7,  7,  8,  8,
  334.   8,  9,  9, 10, 10, 10, 11, 11,
  335.   5,  5,  5,  6,  7,  7,  8,  8,
  336.   8,  9,  9, 10, 10, 11, 11, 11,
  337.   6,  6,  6,  7,  7,  8,  8,  9,
  338.   9,  9, 10, 10, 10, 11, 11, 11,
  339.   7,  6,  7,  7,  8,  8,  9,  9,
  340.   9,  9, 10, 10, 10, 11, 11, 11,
  341.   8,  7,  7,  8,  8,  8,  9,  9,
  342.   9,  9, 10, 10, 11, 11, 11, 12,
  343.   9,  7,  8,  8,  8,  9,  9,  9,
  344.   9, 10, 10, 10, 11, 11, 12, 12,
  345.   9,  8,  8,  9,  9,  9,  9, 10,
  346.  10, 10, 10, 10, 11, 11, 11, 12,
  347.   9,  8,  8,  9,  9,  9,  9, 10,
  348.  10, 10, 10, 11, 11, 12, 12, 12,
  349.   9,  8,  9,  9,  9,  9, 10, 10,
  350.  10, 11, 11, 11, 11, 12, 12, 12,
  351.  10,  9,  9,  9, 10, 10, 10, 10,
  352.  10, 11, 11, 11, 11, 12, 13, 12,
  353.  10,  9,  9,  9, 10, 10, 10, 10,
  354.  11, 11, 11, 11, 12, 12, 12, 13,
  355.  11, 10,  9, 10, 10, 10, 11, 11,
  356.  11, 11, 11, 11, 12, 12, 13, 13,
  357.  11, 10, 10, 10, 10, 11, 11, 11,
  358.  11, 12, 12, 12, 12, 12, 13, 13,
  359.  12, 11, 11, 11, 11, 11, 11, 11,
  360.  12, 12, 12, 12, 13, 13, 12, 13,
  361.  12, 11, 11, 11, 11, 11, 11, 12,
  362.  12, 12, 12, 12, 13, 13, 13, 13,
  363. };
  364.  
  365. static const uint16_t mpa_huffcodes_16[256] = {
  366.  0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
  367.  0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
  368.  0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
  369.  0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
  370.  0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
  371.  0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
  372.  0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
  373.  0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
  374.  0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
  375.  0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
  376.  0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
  377.  0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
  378.  0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
  379.  0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
  380.  0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
  381.  0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
  382.  0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
  383.  0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
  384.  0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
  385.  0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
  386.  0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
  387.  0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
  388.  0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
  389.  0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
  390.  0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
  391.  0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
  392.  0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
  393.  0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
  394.  0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
  395.  0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
  396.  0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
  397.  0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
  398. };
  399.  
  400. static const uint8_t mpa_huffbits_16[256] = {
  401.   1,  4,  6,  8,  9,  9, 10, 10,
  402.  11, 11, 11, 12, 12, 12, 13,  9,
  403.   3,  4,  6,  7,  8,  9,  9,  9,
  404.  10, 10, 10, 11, 12, 11, 12,  8,
  405.   6,  6,  7,  8,  9,  9, 10, 10,
  406.  11, 10, 11, 11, 11, 12, 12,  9,
  407.   8,  7,  8,  9,  9, 10, 10, 10,
  408.  11, 11, 12, 12, 12, 13, 13, 10,
  409.   9,  8,  9,  9, 10, 10, 11, 11,
  410.  11, 12, 12, 12, 13, 13, 13,  9,
  411.   9,  8,  9,  9, 10, 11, 11, 12,
  412.  11, 12, 12, 13, 13, 13, 14, 10,
  413.  10,  9,  9, 10, 11, 11, 11, 11,
  414.  12, 12, 12, 12, 13, 13, 14, 10,
  415.  10,  9, 10, 10, 11, 11, 11, 12,
  416.  12, 13, 13, 13, 13, 15, 15, 10,
  417.  10, 10, 10, 11, 11, 11, 12, 12,
  418.  13, 13, 13, 13, 14, 14, 14, 10,
  419.  11, 10, 10, 11, 11, 12, 12, 13,
  420.  13, 13, 13, 14, 13, 14, 13, 11,
  421.  11, 11, 10, 11, 12, 12, 12, 12,
  422.  13, 14, 14, 14, 15, 15, 14, 10,
  423.  12, 11, 11, 11, 12, 12, 13, 14,
  424.  14, 14, 14, 14, 14, 13, 14, 11,
  425.  12, 12, 12, 12, 12, 13, 13, 13,
  426.  13, 15, 14, 14, 14, 14, 16, 11,
  427.  14, 12, 12, 12, 13, 13, 14, 14,
  428.  14, 16, 15, 15, 15, 17, 15, 11,
  429.  13, 13, 11, 12, 14, 14, 13, 14,
  430.  14, 15, 16, 15, 17, 15, 14, 11,
  431.   9,  8,  8,  9,  9, 10, 10, 10,
  432.  11, 11, 11, 11, 11, 11, 11,  8,
  433. };
  434.  
  435. static const uint16_t mpa_huffcodes_24[256] = {
  436.  0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
  437.  0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
  438.  0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
  439.  0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
  440.  0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
  441.  0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
  442.  0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
  443.  0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
  444.  0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
  445.  0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
  446.  0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
  447.  0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
  448.  0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
  449.  0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
  450.  0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
  451.  0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
  452.  0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
  453.  0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
  454.  0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
  455.  0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
  456.  0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
  457.  0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
  458.  0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
  459.  0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
  460.  0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
  461.  0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
  462.  0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
  463.  0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
  464.  0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
  465.  0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
  466.  0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
  467.  0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
  468. };
  469.  
  470. static const uint8_t mpa_huffbits_24[256] = {
  471.   4,  4,  6,  7,  8,  9,  9, 10,
  472.  10, 11, 11, 11, 11, 11, 12,  9,
  473.   4,  4,  5,  6,  7,  8,  8,  9,
  474.   9,  9, 10, 10, 10, 10, 10,  8,
  475.   6,  5,  6,  7,  7,  8,  8,  9,
  476.   9,  9,  9, 10, 10, 10, 11,  7,
  477.   7,  6,  7,  7,  8,  8,  8,  9,
  478.   9,  9,  9, 10, 10, 10, 10,  7,
  479.   8,  7,  7,  8,  8,  8,  8,  9,
  480.   9,  9, 10, 10, 10, 10, 11,  7,
  481.   9,  7,  8,  8,  8,  8,  9,  9,
  482.   9,  9, 10, 10, 10, 10, 10,  7,
  483.   9,  8,  8,  8,  8,  9,  9,  9,
  484.   9, 10, 10, 10, 10, 10, 11,  7,
  485.  10,  8,  8,  8,  9,  9,  9,  9,
  486.  10, 10, 10, 10, 10, 11, 11,  8,
  487.  10,  9,  9,  9,  9,  9,  9,  9,
  488.   9, 10, 10, 10, 10, 11, 11,  8,
  489.  10,  9,  9,  9,  9,  9,  9, 10,
  490.  10, 10, 10, 10, 11, 11, 11,  8,
  491.  11,  9,  9,  9,  9, 10, 10, 10,
  492.  10, 10, 10, 11, 11, 11, 11,  8,
  493.  11, 10,  9,  9,  9, 10, 10, 10,
  494.  10, 10, 10, 11, 11, 11, 11,  8,
  495.  11, 10, 10, 10, 10, 10, 10, 10,
  496.  10, 10, 11, 11, 11, 11, 11,  8,
  497.  11, 10, 10, 10, 10, 10, 10, 10,
  498.  11, 11, 11, 11, 11, 11, 11,  8,
  499.  12, 10, 10, 10, 10, 10, 10, 11,
  500.  11, 11, 11, 11, 11, 11, 11,  8,
  501.   8,  7,  7,  7,  7,  7,  7,  7,
  502.   7,  7,  7,  8,  8,  8,  8,  4,
  503. };
  504.  
  505. static const HuffTable mpa_huff_tables[16] = {
  506. { 1, NULL, NULL },
  507. { 2, mpa_huffbits_1, mpa_huffcodes_1 },
  508. { 3, mpa_huffbits_2, mpa_huffcodes_2 },
  509. { 3, mpa_huffbits_3, mpa_huffcodes_3 },
  510. { 4, mpa_huffbits_5, mpa_huffcodes_5 },
  511. { 4, mpa_huffbits_6, mpa_huffcodes_6 },
  512. { 6, mpa_huffbits_7, mpa_huffcodes_7 },
  513. { 6, mpa_huffbits_8, mpa_huffcodes_8 },
  514. { 6, mpa_huffbits_9, mpa_huffcodes_9 },
  515. { 8, mpa_huffbits_10, mpa_huffcodes_10 },
  516. { 8, mpa_huffbits_11, mpa_huffcodes_11 },
  517. { 8, mpa_huffbits_12, mpa_huffcodes_12 },
  518. { 16, mpa_huffbits_13, mpa_huffcodes_13 },
  519. { 16, mpa_huffbits_15, mpa_huffcodes_15 },
  520. { 16, mpa_huffbits_16, mpa_huffcodes_16 },
  521. { 16, mpa_huffbits_24, mpa_huffcodes_24 },
  522. };
  523.  
  524. static const uint8_t mpa_huff_data[32][2] = {
  525. { 0, 0 },
  526. { 1, 0 },
  527. { 2, 0 },
  528. { 3, 0 },
  529. { 0, 0 },
  530. { 4, 0 },
  531. { 5, 0 },
  532. { 6, 0 },
  533. { 7, 0 },
  534. { 8, 0 },
  535. { 9, 0 },
  536. { 10, 0 },
  537. { 11, 0 },
  538. { 12, 0 },
  539. { 0, 0 },
  540. { 13, 0 },
  541. { 14, 1 },
  542. { 14, 2 },
  543. { 14, 3 },
  544. { 14, 4 },
  545. { 14, 6 },
  546. { 14, 8 },
  547. { 14, 10 },
  548. { 14, 13 },
  549. { 15, 4 },
  550. { 15, 5 },
  551. { 15, 6 },
  552. { 15, 7 },
  553. { 15, 8 },
  554. { 15, 9 },
  555. { 15, 11 },
  556. { 15, 13 },
  557. };
  558.  
  559.  
  560. /* huffman tables for quadrules */
  561. static const uint8_t mpa_quad_codes[2][16] = {
  562.     {  1,  5,  4,  5,  6,  5,  4,  4, 7,  3,  6,  0,  7,  2,  3,  1, },
  563.     { 15, 14, 13, 12, 11, 10,  9,  8, 7,  6,  5,  4,  3,  2,  1,  0, },
  564. };
  565.  
  566. static const uint8_t mpa_quad_bits[2][16] = {
  567.     { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, },
  568.     { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, },
  569. };
  570.  
  571. /* band size tables */
  572. static const uint8_t band_size_long[9][22] = {
  573. { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
  574.   12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */
  575. { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
  576.   12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */
  577. { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
  578.   16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */
  579. { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
  580.   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */
  581. { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
  582.   18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */
  583. { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
  584.   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */
  585. { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
  586.   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */
  587. { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
  588.   20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */
  589. { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
  590.   40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */
  591. };
  592.  
  593. static const uint8_t band_size_short[9][13] = {
  594. { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */
  595. { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */
  596. { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */
  597. { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */
  598. { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */
  599. { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */
  600. { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */
  601. { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */
  602. { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */
  603. };
  604.  
  605. static const uint8_t mpa_pretab[2][22] = {
  606.     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  607.     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 },
  608. };
  609.  
  610. /* table for alias reduction (XXX: store it as integer !) */
  611. static const float ci_table[8] = {
  612.     -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
  613. };
  614.  
  615. #endif /* AVCODEC_MPEGAUDIODECTAB_H */
  616.